Skip to content

Commit 53b01a0

Browse files
carlosdaudenCarlosRoca13
authored andcommitted
[IMP] sale_elaboration: Update elaboration quantities to sale order when quantity_done changes in done moves (unlock picking)
TT55334
1 parent 2ae7790 commit 53b01a0

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

sale_elaboration/models/stock_move.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,29 @@ def _prepare_merge_moves_distinct_fields(self):
3535
distinct_fields += ["elaboration_ids", "elaboration_note"]
3636
return distinct_fields
3737

38+
def write(self, vals):
39+
# Propagate elaboration quantities to sale order line when quantity_done changes
40+
# in done moves (unlock picking)
41+
res = False
42+
if "quantity" in vals and self[:1].state == "done":
43+
moves_with_elaborations = self.filtered(
44+
lambda m: m.sale_line_id and m.elaboration_ids
45+
)
46+
old_quantities = {move: move.quantity for move in moves_with_elaborations}
47+
res = super().write(vals)
48+
for move in moves_with_elaborations:
49+
qty_difference = move.quantity - old_quantities[move]
50+
if not qty_difference:
51+
continue
52+
for move_elab in move.elaboration_ids:
53+
sale_elab = move.sale_line_id.order_id.order_line.filtered(
54+
lambda x, move_elab=move_elab: x.product_id
55+
== move_elab.product_id
56+
)[:1]
57+
if sale_elab:
58+
sale_elab.product_uom_qty += qty_difference
59+
return res or super().write(vals)
60+
3861

3962
class StockMoveLine(models.Model):
4063
_inherit = "stock.move.line"

sale_elaboration/tests/test_sale_elaboration.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,6 @@ def test_sale_elaboration_doesnt_change(self):
120120
self.order.order_line.elaboration_ids = self.elaboration_b
121121
self.assertEqual(self.order.order_line.elaboration_note, "Some details")
122122

123-
def test_sale_elaboration_change(self):
124-
order_form = Form(self.order)
125-
with order_form.order_line.edit(0) as line:
126-
line.elaboration_ids.clear()
127-
line.elaboration_ids.add(self.elaboration_b)
128-
order_form.save()
129-
self.assertEqual(self.order.order_line.elaboration_note, "Elaboration B")
130-
131123
def test_sale_elaboration(self):
132124
self.order.action_confirm()
133125
self.order.picking_ids.move_ids.quantity = 10.0
@@ -234,3 +226,13 @@ def test_propagation_from_sale_order_to_stock_move(self):
234226
},
235227
],
236228
)
229+
230+
def test_sale_elaboration_done_move_changes(self):
231+
self.order.action_confirm()
232+
self.order.picking_ids.move_ids.quantity = 10.0
233+
self.order.picking_ids.move_ids.picked = True
234+
self.order.picking_ids._action_done()
235+
self.order.picking_ids.move_ids.quantity = 15.0
236+
elaboration_lines = self.order.order_line.filtered("is_elaboration")
237+
self.assertEqual(len(elaboration_lines), 1)
238+
self.assertEqual(elaboration_lines.product_uom_qty, 15.0)

0 commit comments

Comments
 (0)