2018-01-16 06:58:15 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
2018-01-16 11:34:37 +01:00
|
|
|
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
2018-01-16 06:58:15 +01:00
|
|
|
|
2018-01-16 11:34:37 +01:00
|
|
|
from flectra import fields, models, _
|
|
|
|
from flectra.exceptions import UserError
|
2018-01-16 06:58:15 +01:00
|
|
|
|
|
|
|
|
|
|
|
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
|