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 - + +