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.')