stock_picking_batch/wizard/stock_add_to_wave.py

70 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models, api, _
from odoo.exceptions import UserError
class StockPickingToWave(models.TransientModel):
_name = 'stock.add.to.wave'
_description = 'Wave Transfer Lines'
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
if self.env.context.get('active_model') == 'stock.move.line':
lines = self.env['stock.move.line'].browse(self.env.context.get('active_ids'))
res['line_ids'] = self.env.context.get('active_ids')
picking_types = lines.picking_type_id
elif self.env.context.get('active_model') == 'stock.picking':
pickings = self.env['stock.picking'].browse(self.env.context.get('active_ids'))
res['picking_ids'] = self.env.context.get('active_ids')
picking_types = pickings.picking_type_id
else:
return res
if len(picking_types) > 1:
raise UserError(_("The selected transfers should belong to the same operation type"))
return res
wave_id = fields.Many2one('stock.picking.batch', string='Wave Transfer', domain="[('is_wave', '=', True), ('state', 'in', ('draft', 'in_progress'))]")
picking_ids = fields.Many2many('stock.picking')
line_ids = fields.Many2many('stock.move.line')
mode = fields.Selection([('existing', 'an existing wave transfer'), ('new', 'a new wave transfer')], default='existing')
user_id = fields.Many2one('res.users', string='Responsible')
def attach_pickings(self):
self.ensure_one()
self = self.with_context(active_owner_id=self.user_id.id)
if self.line_ids:
company = self.line_ids.company_id
if len(company) > 1:
raise UserError(_("The selected operations should belong to a unique company."))
return self.line_ids._add_to_wave(self.wave_id)
if self.picking_ids:
company = self.picking_ids.company_id
if len(company) > 1:
raise UserError(_("The selected transfers should belong to a unique company."))
else:
raise UserError(_('Cannot create wave transfers'))
view = self.env.ref('stock_picking_batch.view_move_line_tree_detailed_wave')
return {
'name': _('Add Operations'),
'type': 'ir.actions.act_window',
'view_mode': 'list',
'views': [(view.id, 'tree')],
'res_model': 'stock.move.line',
'target': 'new',
'domain': [
('picking_id', 'in', self.picking_ids.ids),
('state', '!=', 'done')
],
'context': dict(
self.env.context,
picking_to_wave=self.picking_ids.ids,
active_wave_id=self.wave_id.id,
)}