diff --git a/stock_measuring_device/models/measuring_device.py b/stock_measuring_device/models/measuring_device.py
index 93cb0b9d1..f23875954 100644
--- a/stock_measuring_device/models/measuring_device.py
+++ b/stock_measuring_device/models/measuring_device.py
@@ -40,7 +40,7 @@ class MeasuringDevice(models.Model):
return work_ctx.component(usage=self.device_type)
def open_wizard(self):
- return {
+ res = {
"name": _("Measurement Wizard"),
"res_model": "measuring.wizard",
"type": "ir.actions.act_window",
@@ -54,6 +54,12 @@ class MeasuringDevice(models.Model):
"no_breadcrumbs": True,
},
}
+ if self._is_being_used():
+ pack = self.env["product.packaging"].search(
+ [("measuring_device_id", "=", self.id)], limit=1
+ )
+ res["context"]["default_product_id"] = pack.product_id.id
+ return res
def _is_being_used(self):
self.ensure_one()
diff --git a/stock_measuring_device/models/product_packaging.py b/stock_measuring_device/models/product_packaging.py
index 2f7aa612c..753a029e2 100644
--- a/stock_measuring_device/models/product_packaging.py
+++ b/stock_measuring_device/models/product_packaging.py
@@ -16,6 +16,7 @@ class ProductPackaging(models.Model):
string="Measuring device which will scan the package",
help="Technical field set when an operator uses the device "
"to scan this package",
+ index=True,
)
def _measuring_device_assign(self, device):
diff --git a/stock_measuring_device/wizard/measuring_wizard.py b/stock_measuring_device/wizard/measuring_wizard.py
index 2ee9bd709..f4cf664ed 100644
--- a/stock_measuring_device/wizard/measuring_wizard.py
+++ b/stock_measuring_device/wizard/measuring_wizard.py
@@ -89,6 +89,7 @@ class MeasuringWizard(models.TransientModel):
"barcode": pack.barcode,
"packaging_id": pack.id,
"packaging_type_id": pack_type.id,
+ "scan_requested": bool(pack.measuring_device_id),
}
)
vals_list.append(vals)
@@ -160,6 +161,15 @@ class MeasuringWizard(models.TransientModel):
"flags": {"headless": False, "clear_breadcrumbs": True},
}
+ def retrieve_product(self):
+ """Assigns product that locks the device if a scan is already requested."""
+ if self.device_id._is_being_used():
+ pack = self.env["product.packaging"]._measuring_device_find_assigned(
+ self.device_id
+ )
+ self.product_id = pack.product_id
+ self.onchange_product_id()
+
def reload(self):
return {
"type": "ir.actions.act_view_reload",
diff --git a/stock_measuring_device/wizard/measuring_wizard.xml b/stock_measuring_device/wizard/measuring_wizard.xml
index 41b29509c..a3b248c28 100644
--- a/stock_measuring_device/wizard/measuring_wizard.xml
+++ b/stock_measuring_device/wizard/measuring_wizard.xml
@@ -37,6 +37,12 @@
string="Refresh"
icon="fa-refresh"
/>
+