[REF] stock_picking_batch: use picking button_validate multi
This commit is contained in:
@@ -67,43 +67,8 @@ class StockPickingBatch(models.Model):
|
||||
picking.batch_id.id,
|
||||
picking.batch_id.name))
|
||||
|
||||
picking_to_backorder = self.env['stock.picking']
|
||||
picking_without_qty_done = self.env['stock.picking']
|
||||
for picking in pickings:
|
||||
if all([x.qty_done == 0.0 for x in picking.move_line_ids]):
|
||||
# If no lots when needed, raise error
|
||||
picking_type = picking.picking_type_id
|
||||
if (picking_type.use_create_lots or picking_type.use_existing_lots):
|
||||
for ml in picking.move_line_ids:
|
||||
if ml.product_id.tracking != 'none':
|
||||
raise UserError(_('Some products require lots/serial numbers.'))
|
||||
# Check if we need to set some qty done.
|
||||
picking_without_qty_done |= picking
|
||||
elif picking._check_backorder():
|
||||
picking_to_backorder |= picking
|
||||
else:
|
||||
picking._action_done()
|
||||
self.write({'state': 'done'})
|
||||
if picking_without_qty_done:
|
||||
view = self.env.ref('stock.view_immediate_transfer')
|
||||
wiz = self.env['stock.immediate.transfer'].create({
|
||||
'pick_ids': [(4, p.id) for p in picking_without_qty_done],
|
||||
'pick_to_backorder_ids': [(4, p.id) for p in picking_to_backorder],
|
||||
})
|
||||
return {
|
||||
'name': _('Immediate Transfer?'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'stock.immediate.transfer',
|
||||
'views': [(view.id, 'form')],
|
||||
'view_id': view.id,
|
||||
'target': 'new',
|
||||
'res_id': wiz.id,
|
||||
'context': self.env.context,
|
||||
}
|
||||
if picking_to_backorder:
|
||||
return picking_to_backorder.action_generate_backorder_wizard()
|
||||
return True
|
||||
return self.picking_ids.button_validate()
|
||||
|
||||
def _track_subtype(self, init_values):
|
||||
if 'state' in init_values:
|
||||
|
||||
@@ -102,7 +102,7 @@ class TestBatchPicking(TransactionCase):
|
||||
# There should be a wizard asking to process picking without quantity done
|
||||
immediate_transfer_wizard_dict = self.batch.done()
|
||||
self.assertTrue(immediate_transfer_wizard_dict)
|
||||
immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id'))
|
||||
immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id')).with_context(immediate_transfer_wizard_dict['context'])
|
||||
self.assertEqual(len(immediate_transfer_wizard.pick_ids), 2)
|
||||
immediate_transfer_wizard.process()
|
||||
|
||||
@@ -135,11 +135,11 @@ class TestBatchPicking(TransactionCase):
|
||||
# There should be a wizard asking to process picking without quantity done
|
||||
back_order_wizard_dict = self.batch.done()
|
||||
self.assertTrue(back_order_wizard_dict)
|
||||
back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id'))
|
||||
back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id')).with_context(back_order_wizard_dict['context'])
|
||||
self.assertEqual(len(back_order_wizard.pick_ids), 1)
|
||||
self.assertEqual(self.picking_client_2.state, 'done', 'Picking 2 should be done')
|
||||
back_order_wizard.process()
|
||||
|
||||
self.assertEqual(self.picking_client_2.state, 'done', 'Picking 2 should be done')
|
||||
self.assertEqual(self.picking_client_1.state, 'done', 'Picking 1 should be done')
|
||||
self.assertEqual(self.picking_client_1.move_lines.product_uom_qty, 5, 'initial demand should be 5 after picking split')
|
||||
self.assertTrue(self.env['stock.picking'].search([('backorder_id', '=', self.picking_client_1.id)]), 'no back order created')
|
||||
@@ -168,11 +168,11 @@ class TestBatchPicking(TransactionCase):
|
||||
# There should be a wizard asking to process picking without quantity done
|
||||
immediate_transfer_wizard_dict = self.batch.done()
|
||||
self.assertTrue(immediate_transfer_wizard_dict)
|
||||
immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id'))
|
||||
immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id')).with_context(immediate_transfer_wizard_dict['context'])
|
||||
self.assertEqual(len(immediate_transfer_wizard.pick_ids), 2)
|
||||
back_order_wizard_dict = immediate_transfer_wizard.process()
|
||||
self.assertTrue(back_order_wizard_dict)
|
||||
back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id'))
|
||||
back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id')).with_context(back_order_wizard_dict['context'])
|
||||
self.assertEqual(len(back_order_wizard.pick_ids), 1)
|
||||
back_order_wizard.process()
|
||||
|
||||
@@ -205,11 +205,11 @@ class TestBatchPicking(TransactionCase):
|
||||
# There should be a wizard asking to process picking without quantity done
|
||||
immediate_transfer_wizard_dict = self.batch.done()
|
||||
self.assertTrue(immediate_transfer_wizard_dict)
|
||||
immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id'))
|
||||
immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id')).with_context(immediate_transfer_wizard_dict['context'])
|
||||
self.assertEqual(len(immediate_transfer_wizard.pick_ids), 1)
|
||||
back_order_wizard_dict = immediate_transfer_wizard.process()
|
||||
self.assertTrue(back_order_wizard_dict)
|
||||
back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id'))
|
||||
back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id')).with_context(back_order_wizard_dict['context'])
|
||||
self.assertEqual(len(back_order_wizard.pick_ids), 1)
|
||||
back_order_wizard.process()
|
||||
|
||||
|
||||
@@ -2,4 +2,3 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import stock_picking_to_batch
|
||||
from . import stock_immediate_transfer
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
from odoo import models, fields, api
|
||||
|
||||
|
||||
class StockImmediateTransfer(models.TransientModel):
|
||||
_inherit = 'stock.immediate.transfer'
|
||||
_description = 'Immediate Transfer'
|
||||
|
||||
pick_to_backorder_ids = fields.Many2many('stock.picking', help='Picking to backorder')
|
||||
|
||||
def process(self):
|
||||
backorder_wizard_dict = super(StockImmediateTransfer, self).process()
|
||||
# If the immediate transfer wizard process all our picking but with some back order maybe needed we want to add the backorder already passed to the wizard.
|
||||
if backorder_wizard_dict:
|
||||
backorder_wizard = self.env['stock.backorder.confirmation'].browse(backorder_wizard_dict.get('res_id', False))
|
||||
backorder_wizard.write({'pick_ids': [(4, p.id) for p in self.pick_to_backorder_ids]})
|
||||
return backorder_wizard_dict
|
||||
# If there is no backorder returned by the immediate transfer basic function we still wanted to process those manually given
|
||||
elif self.pick_to_backorder_ids:
|
||||
return self.pick_to_backorder_ids.action_generate_backorder_wizard()
|
||||
return False
|
||||
Reference in New Issue
Block a user