summaryrefslogtreecommitdiff
path: root/addons/stock/wizard/stock_immediate_transfer.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/stock/wizard/stock_immediate_transfer.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/stock/wizard/stock_immediate_transfer.py')
-rw-r--r--addons/stock/wizard/stock_immediate_transfer.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/addons/stock/wizard/stock_immediate_transfer.py b/addons/stock/wizard/stock_immediate_transfer.py
new file mode 100644
index 00000000..2afbc633
--- /dev/null
+++ b/addons/stock/wizard/stock_immediate_transfer.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+
+
+class StockImmediateTransferLine(models.TransientModel):
+ _name = 'stock.immediate.transfer.line'
+ _description = 'Immediate Transfer Line'
+
+ immediate_transfer_id = fields.Many2one('stock.immediate.transfer', 'Immediate Transfer', required=True)
+ picking_id = fields.Many2one('stock.picking', 'Transfer', required=True)
+ to_immediate = fields.Boolean('To Process')
+
+
+class StockImmediateTransfer(models.TransientModel):
+ _name = 'stock.immediate.transfer'
+ _description = 'Immediate Transfer'
+
+ pick_ids = fields.Many2many('stock.picking', 'stock_picking_transfer_rel')
+ show_transfers = fields.Boolean()
+ immediate_transfer_line_ids = fields.One2many(
+ 'stock.immediate.transfer.line',
+ 'immediate_transfer_id',
+ string="Immediate Transfer Lines")
+
+ @api.model
+ def default_get(self, fields):
+ res = super().default_get(fields)
+ if 'immediate_transfer_line_ids' in fields and res.get('pick_ids'):
+ res['immediate_transfer_line_ids'] = [
+ (0, 0, {'to_immediate': True, 'picking_id': pick_id})
+ for pick_id in res['pick_ids'][0][2]
+ ]
+ # default_get returns x2m values as [(6, 0, ids)]
+ # because of webclient limitations
+ return res
+
+ def process(self):
+ pickings_to_do = self.env['stock.picking']
+ pickings_not_to_do = self.env['stock.picking']
+ for line in self.immediate_transfer_line_ids:
+ if line.to_immediate is True:
+ pickings_to_do |= line.picking_id
+ else:
+ pickings_not_to_do |= line.picking_id
+
+ for picking in pickings_to_do:
+ # 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.filtered(lambda m: m.state not in ['done', 'cancel']):
+ for move_line in move.move_line_ids:
+ move_line.qty_done = move_line.product_uom_qty
+
+ pickings_to_validate = self.env.context.get('button_validate_picking_ids')
+ if pickings_to_validate:
+ pickings_to_validate = self.env['stock.picking'].browse(pickings_to_validate)
+ pickings_to_validate = pickings_to_validate - pickings_not_to_do
+ return pickings_to_validate.with_context(skip_immediate=True).button_validate()
+ return True
+