[FIX] stock : no more automatic backorder

When validating a stock picking there were 2 different cases:
(1) If all qty are equal to 0 it will display a wizard asking
if the user want to set the quantity done to the reserved quantity
for all moves. If the user accept it will automatically perform the
moves after setting the quantity done.
(2) If the user set a quantity on a move, it will check if there is
a need for a back order. If yes it will display a wizard asking if
a back order is needed or not.

However the check if a back order was needed or not was never perform
in case 1. If the quantity reserved was lower than the initial demand
a back order was automatically created.

This commit add the step 2 in the procedure of step 1 (after setting the
quantity done).
This commit is contained in:
amoyaux
2017-08-17 17:16:21 +02:00
parent 3c135d3123
commit 2a160329bb
4 changed files with 31 additions and 18 deletions
+17 -14
View File
@@ -617,25 +617,28 @@ class Picking(models.Model):
# Check backorder should check for other barcodes
if self.check_backorder():
view = self.env.ref('stock.view_backorder_confirmation')
wiz = self.env['stock.backorder.confirmation'].create({'pick_id': self.id})
return {
'name': _('Create Backorder?'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'stock.backorder.confirmation',
'views': [(view.id, 'form')],
'view_id': view.id,
'target': 'new',
'res_id': wiz.id,
'context': self.env.context,
}
return self.action_generate_backorder_wizard()
self.action_done()
return
do_new_transfer = button_validate #TODO: replace later
def action_generate_backorder_wizard(self):
view = self.env.ref('stock.view_backorder_confirmation')
wiz = self.env['stock.backorder.confirmation'].create({'pick_id': self.id})
return {
'name': _('Create Backorder?'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'stock.backorder.confirmation',
'views': [(view.id, 'form')],
'view_id': view.id,
'target': 'new',
'res_id': wiz.id,
'context': self.env.context,
}
def check_backorder(self):
self.ensure_one()
quantity_todo = {}
+3 -1
View File
@@ -2184,7 +2184,9 @@ class StockMove(TransactionCase):
picking.action_assign()
res_dict = picking.button_validate()
wizard = self.env[(res_dict.get('res_model'))].browse(res_dict.get('res_id'))
wizard.process()
res_dict_for_back_order = wizard.process()
backorder_wizard = self.env[(res_dict_for_back_order.get('res_model'))].browse(res_dict_for_back_order.get('res_id'))
backorder_wizard.process()
self.assertEqual(len(picking.move_lines.move_line_ids), 1)
self.assertEqual(picking.move_lines.quantity_done, 5.0)
+9 -3
View File
@@ -649,7 +649,9 @@ class TestStockFlow(TestStockCommon):
res_dict = picking_in_B.button_validate()
wizard = self.env[(res_dict.get('res_model'))].browse(res_dict.get('res_id'))
wizard.process()
res_dict_for_back_order = wizard.process()
backorder_wizard = self.env[(res_dict_for_back_order.get('res_model'))].browse(res_dict_for_back_order.get('res_id'))
backorder_wizard.process()
# -----------------------------------------------------------------------
# Check incoming shipment
@@ -846,7 +848,9 @@ class TestStockFlow(TestStockCommon):
res_dict = picking_out.button_validate()
wizard = self.env[(res_dict.get('res_model'))].browse(res_dict.get('res_id'))
wizard.process()
res_dict_for_back_order = wizard.process()
backorder_wizard = self.env[(res_dict_for_back_order.get('res_model'))].browse(res_dict_for_back_order.get('res_id'))
backorder_wizard.process()
# ----------------------------------------------------------------------
# Check product stock location quantity and quantity available.
@@ -927,7 +931,9 @@ class TestStockFlow(TestStockCommon):
# Transfer Incoming shipment.
res_dict = picking_in.button_validate()
wizard = self.env[(res_dict.get('res_model'))].browse(res_dict.get('res_id'))
wizard.process()
res_dict_for_back_order = wizard.process()
backorder_wizard = self.env[(res_dict_for_back_order.get('res_model'))].browse(res_dict_for_back_order.get('res_id'))
backorder_wizard.process()
# -----------------------------------------------------------------------
# Check incoming shipment after transfer.
@@ -34,4 +34,6 @@ class StockImmediateTransfer(models.TransientModel):
move_line.qty_done = move_line.product_uom_qty
else:
move.quantity_done = move.product_uom_qty
if self.pick_id.check_backorder():
return self.pick_id.action_generate_backorder_wizard()
self.pick_id.do_transfer()