diff --git a/stock_voucher/models/stock_picking.py b/stock_voucher/models/stock_picking.py index e6ce19508..5fa292fd7 100644 --- a/stock_voucher/models/stock_picking.py +++ b/stock_voucher/models/stock_picking.py @@ -192,7 +192,7 @@ def _compute_declared_value(self): for so_bom_line in stock_bom_lines.mapped("sale_line_id"): bom = self.env["mrp.bom"]._bom_find(products=so_bom_line.product_id)[so_bom_line.product_id] if bom and bom.type == "phantom": - bom_moves = so_bom_line.move_ids & stock_bom_lines._origin + bom_moves = so_bom_line.move_ids & stock_bom_lines done_avg = [] picking_avg = [] boms, lines = bom.sudo().explode( @@ -207,14 +207,21 @@ def _compute_declared_value(self): bom_quantity += line_data["qty"] if not bom_quantity: continue - rec_move = rec.move_ids.filtered(lambda m: m._origin.id == move.id) - if not rec_move: - continue picking_avg.append(move.product_uom_qty / bom_quantity) - done_avg.append(rec_move.quantity / bom_quantity) + done_avg.append(move.quantity / bom_quantity) if picking_avg and done_avg: - picking_value += so_bom_line.price_reduce_taxexcl * (sum(picking_avg) / len(picking_avg)) - done_value += so_bom_line.price_reduce_taxexcl * (sum(done_avg) / len(done_avg)) + # In v18, we need to multiply by quantity to get the correct total value + # price_reduce_taxexcl is the unit price, not the line total + picking_value += ( + so_bom_line.price_reduce_taxexcl + * so_bom_line.product_uom_qty + * (sum(picking_avg) / len(picking_avg)) + ) + done_value += ( + so_bom_line.price_reduce_taxexcl + * so_bom_line.product_uom_qty + * (sum(done_avg) / len(done_avg)) + ) declared_value = picking_value if inmediate_transfer else done_value if pricelist: