From 86c141503445032b0f8e28e4f47837f24e084289 Mon Sep 17 00:00:00 2001 From: Alberto Re Date: Tue, 14 Jan 2025 17:41:53 +0100 Subject: [PATCH] [FIX] l10n_it_delivery_note: fix quantity done The method stock_picking.button_validate() can be invoked multiple times during the validation process: it is important to create the delivery note only after the stock_move.quantity_done values has been updated otherwise delivery note and picking will be misaligned. --- l10n_it_delivery_note/models/stock_picking.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/l10n_it_delivery_note/models/stock_picking.py b/l10n_it_delivery_note/models/stock_picking.py index 95f009e9a534..4e54be5c4912 100644 --- a/l10n_it_delivery_note/models/stock_picking.py +++ b/l10n_it_delivery_note/models/stock_picking.py @@ -335,7 +335,20 @@ def button_validate(self): if not self.delivery_note_id and delivery_note_to_create: self._check_delivery_note_consistency() res = super().button_validate() - if delivery_note_to_create and not self.delivery_note_id: + # Since this method can be called multiple times after the + # user clicks on the Validate button we must be sure to create + # the delivery note only after the stock_picking data is updated. + if ( + delivery_note_to_create + and not self.delivery_note_id + and ( + isinstance(res, bool) + or ( + isinstance(res, dict) + and res["res_model"] == "stock.backorder.confirmation" + ) + ) + ): delivery_note = self._create_delivery_note() self.write({"delivery_note_id": delivery_note.id}) if self.sale_id: