# -*- 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'] = self.env['ir.sequence'].next_by_code('sf.production.process.parameter') or '/' 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 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)