1.stock.picking:
button_validate方法中
# _check_backorder方法校验行数量是否全部满足,不满足则需要弹框提示是否创建欠单
if self._check_backorder():
return self.action_generate_backorder_wizard()
self.action_done()
2.stock.picking:
action_generate_backorder_wizard方法返回确认对象及界面
def action_generate_backorder_wizard(self):
view = self.env.ref('stock.view_backorder_confirmation')
wiz = self.env['stock.backorder.confirmation'].create({
'pick_ids': [(4, p.id) for p in self]})
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,
}
3.stock.move:
_action_done方法
4.stock.picking:
_create_backorder方法会创建对应的欠单
@api.multi
def _create_backorder(self, backorder_moves=[]):
""" Move all non-done lines into a new backorder picking.
"""
backorders = self.env['stock.picking']
for picking in self:
moves_to_backorder = picking.move_lines.filtered(lambda x: x.state not in ('done', 'cancel'))
if moves_to_backorder:
backorder_picking = picking.copy({
'name': '/',
'move_lines': [],
'move_line_ids': [],
'backorder_id': picking.id
})
picking.message_post(
body=_('The backorder <a href=# data-oe-model=stock.picking data-oe-id=%d>%s</a> has been created.') % (
backorder_picking.id, backorder_picking.name))
moves_to_backorder.write({
'picking_id': backorder_picking.id})
moves_to_backorder.mapped('package_level_id').write({
'picking_id':backorder_picking.id})
moves_to_backorder.mapped('move_line_ids').write({
'picking_id': backorder_picking.id})
backorder_picking.action_assign()
backorders |= backorder_picking
return backorders