41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import fields, models, _
|
||
|
from odoo.exceptions import UserError
|
||
|
|
||
|
|
||
|
class StockImmediateTransfer(models.TransientModel):
|
||
|
_name = 'stock.immediate.transfer'
|
||
|
_description = 'Immediate Transfer'
|
||
|
|
||
|
pick_ids = fields.Many2many('stock.picking', 'stock_picking_transfer_rel')
|
||
|
|
||
|
def process(self):
|
||
|
pick_to_backorder = self.env['stock.picking']
|
||
|
pick_to_do = self.env['stock.picking']
|
||
|
for picking in self.pick_ids:
|
||
|
# If still in draft => confirm and assign
|
||
|
if picking.state == 'draft':
|
||
|
picking.action_confirm()
|
||
|
if picking.state != 'assigned':
|
||
|
picking.action_assign()
|
||
|
if picking.state != 'assigned':
|
||
|
raise UserError(_("Could not reserve all requested products. Please use the \'Mark as Todo\' button to handle the reservation manually."))
|
||
|
for move in picking.move_lines:
|
||
|
if move.move_line_ids:
|
||
|
for move_line in move.move_line_ids:
|
||
|
move_line.qty_done = move_line.product_uom_qty
|
||
|
else:
|
||
|
move.quantity_done = move.product_uom_qty
|
||
|
if picking._check_backorder():
|
||
|
pick_to_backorder |= picking
|
||
|
continue
|
||
|
pick_to_do |= picking
|
||
|
# Process every picking that do not require a backorder, then return a single backorder wizard for every other ones.
|
||
|
if pick_to_do:
|
||
|
pick_to_do.action_done()
|
||
|
if pick_to_backorder:
|
||
|
return pick_to_backorder.action_generate_backorder_wizard()
|
||
|
return False
|