Files
odoo_source/addons/stock/wizard/make_procurement.py
T
Thibault Delavallée e3b8fe2024 [MIGR] stock: wizards
Wizard models are migrated to new API. No change is performed to code
structure or functional structure. Some code cleaning may be performed when
migrating to simplify the code. Other files may be updated due to the move
towards the new API.
2016-04-29 12:18:48 +02:00

86 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class MakeProcurement(models.TransientModel):
_name = 'make.procurement'
_description = 'Make Procurements'
qty = fields.Float('Quantity', default=1.0, digits=(16, 2), required=True)
res_model = fields.Char('Res Model')
product_id = fields.Many2one('product.product', 'Product', required=True)
product_tmpl_id = fields.Many2one('product.template', 'Template', required=True)
product_variant_count = fields.Integer(string='Variant Number', related='product_tmpl_id.product_variant_count')
uom_id = fields.Many2one('product.uom', 'Unit of Measure', required=True)
warehouse_id = fields.Many2one('stock.warehouse', 'Warehouse', required=True)
date_planned = fields.Date('Planned Date', default=fields.Date.context_today, required=True)
route_ids = fields.Many2many('stock.location.route', string='Preferred Routes')
@api.model
def default_get(self, fields):
# TDE FIXME: clean this method, overly complicated (onchange ?)
res = super(MakeProcurement, self).default_get(fields)
if self.env.context.get('active_id') and self.env.context.get('active_model') == 'product.template':
product = self.env['product.product'].search([('product_tmpl_id', '=', self.env.context['active_id'])], limit=1)
elif self.env.context.get('active_id') and self.env.context.get('active_model') == 'product.product':
product = self.env['product.product'].browse(self.env.context['active_id'])
else:
product = self.env['product.product']
if 'product_id' in fields and not res.get('product_id') and product:
res['product_id'] = product.id
if 'product_tmpl_id' in fields and not res.get('product_tmpl_id') and product:
res['product_tmpl_id'] = product.product_tmpl_id.id
if 'uom_id' in fields and not res.get('uom_id') and product:
res['uom_id'] = product.uom_id.id
if 'warehouse_id' in fields and not res.get('warehouse_id'):
res['warehouse_id'] = self.env['stock.warehouse'].search([], limit=1).id
return res
def onchange_product_id_dict(self, product_id):
product = self.env['product.product'].browse(product_id)
return {
'uom_id': product.uom_id.id,
'product_tmpl_id': product.product_tmpl_id.id,
'product_variant_count': product.product_tmpl_id.product_variant_count
}
@api.onchange('product_id')
def onchange_product_id(self):
if self.product_id:
for key, value in self.onchange_product_id_dict(self.product_id.id).iteritems():
setattr(self, key, value)
@api.model
def create(self, values):
if values.get('product_id'):
values.update(self.onchange_product_id_dict(values['product_id']))
return super(MakeProcurement, self).create(values)
@api.multi
def make_procurement(self):
""" Creates procurement order for selected product. """
ProcurementOrder = self.env['procurement.order']
for wizard in self:
procurement = ProcurementOrder.create({
'name': 'INT: %s' % (self.env.user.login),
'date_planned': wizard.date_planned,
'product_id': wizard.product_id.id,
'product_qty': wizard.qty,
'product_uom': wizard.uom_id.id,
'warehouse_id': wizard.warehouse_id.id,
'location_id': wizard.warehouse_id.lot_stock_id.id,
'company_id': wizard.warehouse_id.company_id.id,
'route_ids': [(6, 0, wizard.route_ids.ids)]})
procurement.signal_workflow('button_confirm')
return {
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'procurement.order',
'res_id': procurement.id,
'views': [(False, 'form'), (False, 'tree')],
'type': 'ir.actions.act_window',
}