diff --git a/sf_manufacturing/models/__init__.py b/sf_manufacturing/models/__init__.py index 7d6aa8ae..234d208e 100644 --- a/sf_manufacturing/models/__init__.py +++ b/sf_manufacturing/models/__init__.py @@ -11,3 +11,4 @@ from . import production_line_base from . import agv_setting from . import agv_scheduling from . import res_config_setting +from . import sf_technology_design diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 43cfc434..ebe08942 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -98,6 +98,7 @@ class MrpProduction(models.Model): # ]) state = fields.Selection([ ('draft', '草稿'), + ('technology_to_confirmed', '待工艺确认'), ('confirmed', '待排程'), ('pending_cam', '待加工'), ('progress', '加工中'), @@ -158,6 +159,7 @@ class MrpProduction(models.Model): is_remanufacture = fields.Boolean('是否重新制造', default=False) remanufacture_count = fields.Integer("重新制造订单数量", compute='_compute_remanufacture_production_ids') remanufacture_production_id = fields.Many2one('mrp.production', string='') + technology_design_ids = fields.One2many('sf.technology.design', 'production_id', string='工艺设计') @api.depends('remanufacture_production_id') def _compute_remanufacture_production_ids(self): @@ -838,7 +840,7 @@ class MrpProduction(models.Model): backorders = backorders - productions_to_backorder productions_not_to_backorder._post_inventory(cancel_backorder=True) - #查出最后一张工单完成入库操作 + # 查出最后一张工单完成入库操作 # if self.workorder_ids.filtered(lambda w: w.routing_type in ['表面工艺']): # move_finish = self.env['stock.move'].search([('created_production_id', '=', self.id)]) # if move_finish: @@ -1217,10 +1219,6 @@ class sf_detection_result(models.Model): 'type': 'ir.actions.act_window', 'res_id': self.id, 'views': [(self.env.ref('sf_manufacturing.sf_test_report_form').id, 'form')], - # 'view_mode': 'form', - # 'context': { - # 'default_id': self.id - # }, 'target': 'new' } diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 37d42b42..649d51bc 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1068,37 +1068,6 @@ class ResMrpWorkOrder(models.Model): workorder.state = 'waiting' continue - # elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'cancel', 'progress', - # 'rework']: - # per_work = self.env['mrp.workorder'].search( - # [('routing_type', '=', '装夹预调'), ('production_id', '=', workorder.production_id.id), - # ('processing_panel', '=', workorder.processing_panel), ('is_rework', '=', True)]) - # if per_work: - # workorder.state = 'waiting' - # if workorder.routing_type == 'CNC加工' and workorder.state == 'progress': - # workorder.state = 'to be detected' - - # for workorder in self: - # if workorder.is_rework is True and workorder.state == 'done': - # cnc_work = self.env['mrp.workorder'].search([('routing_type','=','CNC加工'),('production_id','=',workorder.production_id.id)]) - # if cnc_work: - # cnc_work.state = 'waiting' - # if workorder.state == 'pending': - # if all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]): - # workorder.state = 'ready' if workorder.production_id.reservation_state == 'assigned' else 'waiting' - # continue - # if workorder.state not in ('waiting', 'ready'): - # continue - # if not all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]): - # workorder.state = 'pending' - # continue - # if workorder.production_id.reservation_state not in ('waiting', 'confirmed', 'assigned'): - # continue - # if workorder.production_id.reservation_state == 'assigned' and workorder.state == 'waiting': - # workorder.state = 'ready' - # elif workorder.production_id.reservation_state != 'assigned' and workorder.state == 'ready': - # workorder.state = 'waiting' - # 重写工单开始按钮方法 def button_start(self): if self.routing_type == 'CNC加工': diff --git a/sf_manufacturing/models/sf_technology_design.py b/sf_manufacturing/models/sf_technology_design.py new file mode 100644 index 00000000..f4e4d176 --- /dev/null +++ b/sf_manufacturing/models/sf_technology_design.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +from odoo import fields, models + + +class sf_technology_design(models.Model): + _name = 'sf.technology.design' + _description = "工艺设计" + + name = fields.Char('工序') + panel = fields.Char('加工面') + sequence = fields.Integer('序号') + time_cycle_manual = fields.Float('预计时长') + production_id = fields.Many2one('mrp.production') + active = fields.Boolean('有效', default=True) + + def json_technology_design_str(self, k, route): + workorders_values_str = [0, '', { + 'name': route.route_workcenter_id.name, + 'panel': k, + 'sequence': False, + 'time_cycle_manual':route.route_workcenter_id.time_cycle_manual }] + return workorders_values_str diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 40d159d5..a48d9461 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -284,6 +284,7 @@ class StockRule(models.Model): 'product_id': production.product_id.id, 'state': 'draft', }) + technology_design_values = [] all_production = productions grouped_product_ids = {k: list(g) for k, g in groupby(all_production, key=lambda x: x.product_id.id)} # 初始化一个字典来存储每个product_id对应的生产订单名称列表 @@ -355,15 +356,32 @@ class StockRule(models.Model): self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i], production_item, product_id_to_production_names) + + if production.product_id.categ_id.type == '成品': + # 根据加工面板的面数及成品工序模板生成工序设计 + i = 0 + for k in (production.product_id.model_processing_panel.split(',')): + product_routing_workcenter = self.env['sf.product.model.type.routing.sort'].search( + [('product_model_type_id', '=', production.product_id.product_model_type_id.id)], + order='sequence asc' + ) + i += 1 + for route in product_routing_workcenter: + technology_design_values.append( + self.env['sf.technology.design'].json_technology_design_str(k, route)) + for process in sorted_process_parameters: + technology_design_values.append( + self.env['sf.technology.design'].json_technology_design_str(k, process)) + # # 同一个产品多个制造订单对应一个编程单和模型库 # # 只调用一次fetchCNC,并将所有生产订单的名称作为字符串传递 - if not production_item.programming_no: - if not production_programming.programming_no: - production_item.fetchCNC( - ', '.join(product_id_to_production_names[production_item.product_id.id])) - else: - production_item.write({'programming_no': production_programming.programming_no, - 'programming_state': '编程中'}) + # if not production_item.programming_no: + # if not production_programming.programming_no: + # production_item.fetchCNC( + # ', '.join(product_id_to_production_names[production_item.product_id.id])) + # else: + # production_item.write({'programming_no': production_programming.programming_no, + # 'programming_state': '编程中'}) return True diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml index 4c06c544..3d5aa625 100644 --- a/sf_manufacturing/views/mrp_production_addional_change.xml +++ b/sf_manufacturing/views/mrp_production_addional_change.xml @@ -70,7 +70,7 @@ - confirmed,pending_cam,progress,rework,scrap,done + technology_to_confirmed,confirmed,pending_cam,progress,rework,scrap,done