81 lines
3.8 KiB
Python
81 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
import logging
|
|
from odoo import fields, models, api
|
|
from odoo.exceptions import UserError
|
|
from odoo.tools import str2bool
|
|
|
|
|
|
class SfProductionProcessParameter(models.Model):
|
|
_inherit = 'sf.production.process.parameter'
|
|
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
# if vals.get('code', '/') == '/' or vals.get('code', '/') is False:
|
|
# vals['code'] = '101'+self.routing_id.code +self.env['ir.sequence'].next_by_code('sf.production.process.parameter')
|
|
if not vals.get('process_id') and vals.get('routing_id'):
|
|
vals['gain_way'] = '外协'
|
|
routing_id = self.env['mrp.routing.workcenter'].browse(vals.get('routing_id'))
|
|
if routing_id.surface_technics_id:
|
|
vals['process_id'] = routing_id.surface_technics_id.id
|
|
if vals.get('code', '/') == '/' or vals.get('code', '/') is False:
|
|
vals['code'] = '101' + routing_id.code + self.env['ir.sequence'].next_by_code(
|
|
'sf.production.process.parameter')
|
|
obj = super(SfProductionProcessParameter, self).create(vals)
|
|
return obj
|
|
def create_service_product(self):
|
|
service_categ = self.env.ref(
|
|
'sf_dlm.product_category_surface_technics_sf').sudo()
|
|
|
|
product_name = f"{self.process_id.name}_{self.name}"
|
|
product_id = self.env['product.template'].search(
|
|
[("name", '=', product_name)])
|
|
if product_id:
|
|
product_id.server_product_process_parameters_id = self.id
|
|
else:
|
|
self.env['product.template'].create({
|
|
'detailed_type': 'service',
|
|
'name': product_name,
|
|
'invoice_policy': 'delivery',
|
|
'categ_id': service_categ.id,
|
|
'description': f"基于{self.name}创建的服务产品",
|
|
'sale_ok': True, # 可销售
|
|
'purchase_ok': True, # 可采购
|
|
'server_product_process_parameters_id': self.id,
|
|
})
|
|
|
|
def create_work_center(self):
|
|
production_process_parameter = self
|
|
if not production_process_parameter.process_id:
|
|
return
|
|
if not production_process_parameter.routing_id:
|
|
workcenter_id = self.env['mrp.routing.workcenter'].search(
|
|
[("surface_technics_id", '=', production_process_parameter.process_id.id)])
|
|
if not workcenter_id:
|
|
outsourcing_work_center = self.env['mrp.workcenter'].search(
|
|
[("name", '=', '外协工作中心')])
|
|
routing_id = self.env['mrp.routing.workcenter'].create({
|
|
'workcenter_ids': [(6, 0, outsourcing_work_center.ids)],
|
|
'routing_tag': 'special',
|
|
'routing_type': '表面工艺',
|
|
'is_outsource': True,
|
|
'surface_technics_id': production_process_parameter.process_id.id,
|
|
'name': production_process_parameter.process_id.name,
|
|
})
|
|
production_process_parameter.routing_id = routing_id.id
|
|
else:
|
|
production_process_parameter.routing_id = workcenter_id.id
|
|
|
|
def init(self):
|
|
super(SfProductionProcessParameter, self).init()
|
|
# 在模块初始化时触发计算字段的更新
|
|
records = self.search([])
|
|
if str2bool(self.env['ir.config_parameter'].get_param('sf.production.process.parameter.is_init_process',
|
|
default='False')):
|
|
return
|
|
for record in records:
|
|
if not record.outsourced_service_products:
|
|
record.create_service_product()
|
|
record.create_work_center()
|
|
self.env['ir.config_parameter'].set_param('sf.production.process.parameter.is_init_process', True)
|