From b2f1d28b39e36da89ab57995d9dd89c062f0b98a Mon Sep 17 00:00:00 2001 From: "Touati Djamel (otd)" Date: Wed, 27 Apr 2022 09:30:45 +0000 Subject: [PATCH] [FIX] stock_picking_batch: cancel confirmed batches without transfers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Steps to reproduce the bug: - Create a batch transfer with several pickings - Confirm it - Delete all the pickings > save Problem: The batch does not cancel as it should’ve been A batch without transfers cannot be confirmed, so it makes no sense to leave a confirmed batch without transfers opw-2792471 closes odoo/odoo#90104 X-original-commit: dcbf08edbb3a1ec49e84f0828b8f49ac4f836c25 Signed-off-by: Steve Van Essche Signed-off-by: Djamel Touati (otd) --- addons/stock_picking_batch/models/stock_picking_batch.py | 2 ++ addons/stock_picking_batch/tests/test_batch_picking.py | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/addons/stock_picking_batch/models/stock_picking_batch.py b/addons/stock_picking_batch/models/stock_picking_batch.py index b114fe41968..ad799b328d9 100644 --- a/addons/stock_picking_batch/models/stock_picking_batch.py +++ b/addons/stock_picking_batch/models/stock_picking_batch.py @@ -167,6 +167,8 @@ class StockPickingBatch(models.Model): def write(self, vals): res = super().write(vals) + if not self.picking_ids and self.state == 'in_progress': + self.action_cancel() if vals.get('picking_type_id'): self._sanity_check() if vals.get('picking_ids'): diff --git a/addons/stock_picking_batch/tests/test_batch_picking.py b/addons/stock_picking_batch/tests/test_batch_picking.py index 54d932ed231..a571c016297 100644 --- a/addons/stock_picking_batch/tests/test_batch_picking.py +++ b/addons/stock_picking_batch/tests/test_batch_picking.py @@ -454,3 +454,12 @@ class TestBatchPicking(TransactionCase): picking_out_1.button_validate() self.assertFalse(picking_out_1.batch_id) self.assertEqual(len(picking_out_3.batch_id.picking_ids), 1) + + def test_remove_all_transfers_from_confirmed_batch(self): + """ + Check that the batch is canceled when all transfers are deleted + """ + self.batch.action_confirm() + self.assertEqual(self.batch.state, 'in_progress', 'Batch Transfers should be in progress.') + self.batch.write({'picking_ids': [[5, 0, 0]]}) + self.assertEqual(self.batch.state, 'cancel', 'Batch Transfers should be cancelled when there are no transfers.')