diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py
index 5b2df0413af..45081119d69 100644
--- a/addons/stock/models/stock_picking.py
+++ b/addons/stock/models/stock_picking.py
@@ -932,9 +932,12 @@ class Picking(models.Model):
picking_to_reset = self.filtered(lambda p: p.state not in ('done', 'cancel'))
picking_to_reset.do_unreserve()
picking_to_reset.immediate_transfer = False
- picking_to_reset.move_ids.quantity_done = 0
- picking_to_reset.move_ids.move_line_ids.unlink()
- picking_to_reset.move_ids.state = 'draft'
+ if picking_to_reset.move_ids:
+ picking_to_reset.move_ids.quantity_done = 0
+ picking_to_reset.move_ids.move_line_ids.unlink()
+ picking_to_reset.move_ids.state = 'draft'
+ else:
+ picking_to_reset.state = 'draft'
def _action_done(self):
"""Call `_action_done` on the `stock.move` of the `stock.picking` in `self`.
diff --git a/addons/stock/tests/test_picking.py b/addons/stock/tests/test_picking.py
index e40d26d1231..52893107433 100644
--- a/addons/stock/tests/test_picking.py
+++ b/addons/stock/tests/test_picking.py
@@ -22,3 +22,14 @@ class TestPicking(common.TransactionCase):
})
self.assertEqual(
er.exception.args[0], f'Sequences {operation_type_1.sequence_id.name} already exist.')
+
+ def test_empty_picking_draft(self):
+ """ test an empty still can be reset to draft """
+ picking = self.env['stock.picking'].create({
+ 'picking_type_id': self.env.ref('stock.picking_type_in').id,
+ 'location_id': self.env.ref('stock.stock_location_stock').id,
+ 'location_dest_id': self.env.ref('stock.stock_location_stock').id,
+ })
+ self.assertFalse(picking.move_ids)
+ picking.action_reset_draft()
+ self.assertEqual(picking.state, 'draft')
diff --git a/addons/stock/views/stock_picking_views.xml b/addons/stock/views/stock_picking_views.xml
index 2c0304b2d64..026757c4953 100644
--- a/addons/stock/views/stock_picking_views.xml
+++ b/addons/stock/views/stock_picking_views.xml
@@ -130,7 +130,7 @@
-
+