diff --git a/l10n_it_delivery_note/models/stock_picking.py b/l10n_it_delivery_note/models/stock_picking.py index d4c31c7e17f7..5567ad251545 100644 --- a/l10n_it_delivery_note/models/stock_picking.py +++ b/l10n_it_delivery_note/models/stock_picking.py @@ -343,3 +343,11 @@ def write(self, vals): self.mapped('delivery_note_id').update_detail_lines() return res + + def _create_backorder(self): + """When we make a backorder of a picking the delivery note lines needed + to be updated otherwise stock_delivery_note_line_move_uniq + constraint is raised""" + backorders = super()._create_backorder() + for backorder in backorders: + backorder.backorder_id.delivery_note_id.update_detail_lines() diff --git a/l10n_it_delivery_note/readme/CONTRIBUTORS.rst b/l10n_it_delivery_note/readme/CONTRIBUTORS.rst index 2f5ad6b75a58..7ae10a5be2dd 100644 --- a/l10n_it_delivery_note/readme/CONTRIBUTORS.rst +++ b/l10n_it_delivery_note/readme/CONTRIBUTORS.rst @@ -7,3 +7,4 @@ * Letizia Freda * Andrea Piovesana * Giovanni Serra +* Alex Comba diff --git a/l10n_it_delivery_note/tests/__init__.py b/l10n_it_delivery_note/tests/__init__.py index d0d1a4a77eb2..0424cf31bb8b 100644 --- a/l10n_it_delivery_note/tests/__init__.py +++ b/l10n_it_delivery_note/tests/__init__.py @@ -1,2 +1,3 @@ from . import delivery_note_common from . import test_stock_delivery_note_invoicing +from . import test_stock_delivery_note diff --git a/l10n_it_delivery_note/tests/test_stock_delivery_note.py b/l10n_it_delivery_note/tests/test_stock_delivery_note.py new file mode 100644 index 000000000000..c0be999ca787 --- /dev/null +++ b/l10n_it_delivery_note/tests/test_stock_delivery_note.py @@ -0,0 +1,50 @@ +# Copyright 2021 Alex Comba - Agile Business Group +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from .delivery_note_common import StockDeliveryNoteCommon + + +class StockDeliveryNote(StockDeliveryNoteCommon): + + # ⇒ "Ordine singolo: consegna parziale" + def test_partial_delivering_single_so(self): + # + # SO ┐ ┌ DdT + # ├ Picking ┘ + # │ + # └ Picking ┐ + # └ DdT + # + + # remove use_advanced_delivery_notes group in order to automatically + # create delivery note when picking is validated + use_adv_notes_group_id = self.env.ref( + "l10n_it_delivery_note.use_advanced_delivery_notes").id + self.env.user.write({'groups_id': [(3, use_adv_notes_group_id)]}) + + StockPicking = self.env["stock.picking"] + StockBackorderConfirmationWizard = self.env['stock.backorder.confirmation'] + sales_order = self.create_sales_order( + [ + self.large_desk_line, # 1 + self.desk_combination_line, # 1 + ], + ) + self.assertEqual(len(sales_order.order_line), 2) + sales_order.action_confirm() + self.assertEqual(len(sales_order.picking_ids), 1) + picking = sales_order.picking_ids + self.assertEqual(len(picking.move_lines), 2) + + # deliver only the first product + picking.move_lines[0].quantity_done = 1 + + backorder_wiz_id = picking.button_validate()['res_id'] + backorder_wiz = StockBackorderConfirmationWizard.browse(backorder_wiz_id) + backorder_wiz.process() + self.assertTrue(picking.delivery_note_id) + picking_backorder = StockPicking.search([("backorder_id", "=", picking.id)]) + self.assertEqual(len(picking_backorder.move_lines), 1) + picking_backorder.move_lines[0].quantity_done = 1 + picking_backorder.button_validate() + self.assertTrue(picking_backorder.delivery_note_id)