diff --git a/models/mrp_production.py b/models/mrp_production.py
index 0d3b72a..ea9cd19 100644
--- a/models/mrp_production.py
+++ b/models/mrp_production.py
@@ -1,23 +1,27 @@
from odoo import api, fields, models
+from odoo.tools import float_compare
class MrpProduction(models.Model):
_inherit = 'mrp.production'
packaging_id = fields.Many2one('mrp.packaging', string='Packaging', domain="[('product_tmpl_id', '=', product_tmpl_id)]", check_company=True)
- packaging_qty = fields.Float('Quantity Packaging', default=0.0)
+ packaging_qty = fields.Float('Quantity Packaging', compute='_compute_packaging_qty', inverse='_inverse_packaging_qty', store=True, readonly=False)
- @api.onchange('packaging_qty')
- def _onchange_packaging_qty(self):
- if self.packaging_id and self.packaging_qty:
- self.product_qty = self.packaging_id.qty * self.packaging_qty
+ @api.depends('product_qty', 'packaging_id', 'packaging_id.qty')
+ def _compute_packaging_qty(self):
+ for record in self:
+ if record.packaging_id and record.packaging_id.qty:
+ new_qty = record.product_qty / record.packaging_id.qty
+ if float_compare(new_qty, record.packaging_qty, precision_digits=2) != 0:
+ record.packaging_qty = new_qty
+ else:
+ record.packaging_qty = 0.0
- @api.onchange('packaging_id')
- def _onchange_packaging_id(self):
- if self.packaging_id and self.packaging_id.qty:
- self.packaging_qty = self.product_qty / self.packaging_id.qty
- else:
- self.packaging_qty = 0.0
+ def _inverse_packaging_qty(self):
+ for record in self:
+ if record.packaging_id and record.packaging_id.qty:
+ record.product_qty = record.packaging_qty * record.packaging_id.qty
qty_producing_packaging = fields.Float('Quantity Producing Packaging', compute='_compute_qty_producing_packaging', inverse='_inverse_qty_producing_packaging', digits=(16, 2))
@@ -116,8 +120,8 @@ class MrpProduction(models.Model):
@api.onchange('product_qty')
def _onchange_product_qty(self):
- if self.packaging_id and self.packaging_id.qty:
- self.packaging_qty = self.product_qty / self.packaging_id.qty
+ # Merge finished move lines if quantity changes
+ self._merge_finished_move_lines()
@api.onchange('bom_id')
def _onchange_bom_id(self):
@@ -125,5 +129,5 @@ class MrpProduction(models.Model):
if self.bom_id and self.bom_id.packaging_id:
self.packaging_id = self.bom_id.packaging_id
self.packaging_qty = self.bom_id.packaging_qty
- # Trigger qty calculation
- self._onchange_packaging_qty()
+ # Trigger qty calculation (handled by compute)
+ # self._onchange_packaging_qty()
diff --git a/views/mrp_production_views.xml b/views/mrp_production_views.xml
index 24b9afc..8da3c29 100644
--- a/views/mrp_production_views.xml
+++ b/views/mrp_production_views.xml
@@ -5,12 +5,13 @@
mrp.production
-
+
+