diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 118af095..71703f02 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -1260,7 +1260,6 @@ class MrpProduction(models.Model): 重新生成制造订单 """ if self.is_scrap is True: - technology_design_values = [] procurement_requests = [] sale_order = self.env['sale.order'].sudo().search([('name', '=', self.origin)]) values = self.env['mrp.production'].create_production1_values(self) @@ -1352,69 +1351,6 @@ class MrpProduction(models.Model): productions.programming_state = '已编程' else: productions.programming_state = '编程中' - if not technology_design_values: - i = 0 - if self.product_id.categ_id.type == '成品': - # 根据加工面板的面数及成品工序模板生成工序设计 - for k in (self.product_id.model_processing_panel.split(',')): - if self.production_type == '自动化产线加工': - product_routing_workcenter = self.env['sf.product.model.type.routing.sort'].search( - [('product_model_type_id', '=', - self.product_id.product_model_type_id.id)], - order='sequence asc' - ) - else: - product_routing_workcenter = self.env[ - 'sf.manual.product.model.type.routing.sort'].search( - [('manual_product_model_type_id', '=', - self.product_id.product_model_type_id.id)], - order='sequence asc' - ) - for route in product_routing_workcenter: - i += 1 - technology_design_values.append( - self.env['sf.technology.design'].json_technology_design_str(k, route, i, False)) - elif self.product_id.categ_id.type == '坯料': - i = 0 - embryo_routing_workcenter = self.env['sf.embryo.model.type.routing.sort'].search( - [('embryo_model_type_id', '=', self.product_id.embryo_model_type_id.id)], - order='sequence asc' - ) - for route_embryo in embryo_routing_workcenter: - i += 1 - technology_design_values.append( - self.env['sf.technology.design'].json_technology_design_str(False, route_embryo, i, - False)) - surface_technics_arr = [] - route_workcenter_arr = [] - for item in self.product_id.product_model_type_id.surface_technics_routing_tmpl_ids: - if item.route_workcenter_id.surface_technics_id.id: - for process_param in self.product_id.model_process_parameters_ids: - if item.route_workcenter_id.surface_technics_id == process_param.process_id: - surface_technics_arr.append( - item.route_workcenter_id.surface_technics_id.id) - route_workcenter_arr.append(item.route_workcenter_id.id) - if surface_technics_arr: - production_process = self.env['sf.production.process'].search( - [('id', 'in', surface_technics_arr)], - order='sequence asc' - ) - for p in production_process: - # logging.info('production_process:%s' % p.name) - process_parameter = self.product_id.model_process_parameters_ids.filtered( - lambda pm: pm.process_id.id == p.id) - if process_parameter: - i += 1 - route_production_process = self.env[ - 'mrp.routing.workcenter'].search( - [('surface_technics_id', '=', p.id), - ('id', 'in', route_workcenter_arr)]) - technology_design_values.append( - self.env['sf.technology.design'].json_technology_design_str(False, - route_production_process, - i, - process_parameter)) - productions.technology_design_ids = technology_design_values return productions # 在之前的销售单上重新生成制造订单 diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 2fe44d86..02bfda14 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -275,19 +275,19 @@ class ResMrpWorkOrder(models.Model): production_programming = self.env['mrp.production'].search(domain, order='name asc') production_list = [production.name for production in production_programming] production_no_remanufacture = production_programming.filtered(lambda a: a.is_remanufacture is False) - technology_design = self.env['sf.technology.design'].search( - [('process_parameters_id', '=', order.surface_technics_parameters_id.id), - ('production_id', '=', order.production_id.id)]) - if technology_design.is_auto is False: - domain = [('origin', '=', order.production_id.name)] - else: - domain = [('origin', '=', ','.join(production_list))] + # technology_design = self.env['sf.technology.design'].search( + # [('process_parameters_id', '=', order.surface_technics_parameters_id.id), + # ('production_id', '=', order.production_id.id)]) + # if technology_design.is_auto is False: + # domain = [('origin', '=', order.production_id.name)] + # else: + domain = [('purchase_type', '=', 'consignment'),('origin', '=', ','.join(production_list))] purchase = self.env['purchase.order'].search(domain) if not purchase: order.surface_technics_purchase_count = 0 for line in purchase.order_line: if line.product_id.server_product_process_parameters_id == order.surface_technics_parameters_id: - if (line.product_qty == len(production_no_remanufacture)) or technology_design.is_auto is False: + if line.product_qty == len(production_no_remanufacture): order.surface_technics_purchase_count = len(purchase) else: order.surface_technics_purchase_count = 0 @@ -301,13 +301,13 @@ class ResMrpWorkOrder(models.Model): domain = [('origin', '=', self.production_id.origin)] production_programming = self.env['mrp.production'].search(domain, order='name asc') production_list = [production.name for production in production_programming] - technology_design = self.env['sf.technology.design'].search( - [('process_parameters_id', '=', self.surface_technics_parameters_id.id), - ('production_id', '=', self.production_id.id)]) - if technology_design.is_auto is False: - domain = [('origin', '=', self.production_id.name)] - else: - domain = [('origin', '=', ','.join(production_list))] + # technology_design = self.env['sf.technology.design'].search( + # [('process_parameters_id', '=', self.surface_technics_parameters_id.id), + # ('production_id', '=', self.production_id.id)]) + # if technology_design.is_auto is False: + # domain = [('origin', '=', self.production_id.name)] + # else: + domain = [('origin', '=', ','.join(production_list)), ('purchase_type', '=', 'consignment')] purchase_orders = self.env['purchase.order'].search(domain) result = { "type": "ir.actions.act_window", @@ -1011,7 +1011,8 @@ class ResMrpWorkOrder(models.Model): return workorders_values_str @api.depends('production_availability', 'blocked_by_workorder_ids', 'blocked_by_workorder_ids.state', - 'production_id.tool_state', 'production_id.schedule_state', 'sequence') + 'production_id.tool_state', 'production_id.schedule_state', 'sequence', + 'production_id.programming_state') def _compute_state(self): # super()._compute_state() for workorder in self: @@ -1077,7 +1078,8 @@ class ResMrpWorkOrder(models.Model): # ================= 如果制造订单刀具状态为[无效刀、缺刀] 或者 制造订单状态为[返工]========================== if (workorder.production_id.tool_state in ['1', '2'] or workorder.production_id.state == 'rework' or workorder.production_id.schedule_state != '已排' - or workorder.production_id.reservation_state != 'assigned' + or len( + workorder.production_id.picking_ids.filtered(lambda w: w.state not in ['done', 'cancel'])) != 0 or workorder.production_id.workorder_ids.filtered( lambda wk: wk.sequence == workorder.sequence - 1).test_results in ['报废', '返工']): if workorder.state != 'waiting': diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 13a4f6e7..3ecb80be 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -321,24 +321,26 @@ class StockRule(models.Model): i = 0 if production_item.product_id.categ_id.type == '成品': # 根据加工面板的面数及成品工序模板生成工序设计 - for k in (production_item.product_id.model_processing_panel.split(',')): - if production_item.production_type == '自动化产线加工': - product_routing_workcenter = self.env['sf.product.model.type.routing.sort'].search( - [('product_model_type_id', '=', - production_item.product_id.product_model_type_id.id)], - order='sequence asc' - ) - else: - product_routing_workcenter = self.env[ - 'sf.manual.product.model.type.routing.sort'].search( - [('manual_product_model_type_id', '=', - production_item.product_id.product_model_type_id.id)], - order='sequence asc' - ) + if production_item.production_type == '自动化产线加工': + model = 'sf.product.model.type.routing.sort' + domain = [ + ('product_model_type_id', '=', production_item.product_id.product_model_type_id.id)] + else: + model = 'sf.manual.product.model.type.routing.sort' + domain = [('manual_product_model_type_id', '=', + production_item.product_id.product_model_type_id.id)] + product_routing_workcenter = self.env[model].search(domain, order='sequence asc') + if production_item.production_type == '自动化产线加工': + for k in (production_item.product_id.model_processing_panel.split(',')): + i += 1 + for route in product_routing_workcenter: + technology_design_values.append( + self.env['sf.technology.design'].json_technology_design_str(k, route, i, False)) + else: for route in product_routing_workcenter: i += 1 technology_design_values.append( - self.env['sf.technology.design'].json_technology_design_str(k, route, i, False)) + self.env['sf.technology.design'].json_technology_design_str(False, route, i, False)) elif production_item.product_id.categ_id.type == '坯料': embryo_routing_workcenter = self.env['sf.embryo.model.type.routing.sort'].search( [('embryo_model_type_id', '=', production_item.product_id.embryo_model_type_id.id)], @@ -379,7 +381,6 @@ class StockRule(models.Model): i, process_parameter)) productions.technology_design_ids = technology_design_values - return True diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index ab1548d4..1faec0ac 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -251,7 +251,7 @@ decoration-danger="tag_type == '重新加工'"/> + attrs="{'invisible': [('rfid_code_old', '!=', False)]}" /> diff --git a/sf_manufacturing/wizard/production_technology_re_adjust_wizard.py b/sf_manufacturing/wizard/production_technology_re_adjust_wizard.py index ff174d0e..774dbd74 100644 --- a/sf_manufacturing/wizard/production_technology_re_adjust_wizard.py +++ b/sf_manufacturing/wizard/production_technology_re_adjust_wizard.py @@ -14,7 +14,8 @@ class ProductionTechnologyReAdjustWizard(models.TransientModel): def confirm(self): if self.is_technology_re_adjust is True: - domain = [('origin', '=', self.origin), ('state', '=', 'technology_to_confirmed')] + domain = [('origin', '=', self.origin), ('state', '=', 'technology_to_confirmed'), + ('product_id', '=', self.production_id.product_id.id)] else: domain = [('id', '=', self.production_id.id)] technology_designs = self.env['sf.technology.design'].sudo().search( @@ -112,9 +113,5 @@ class ProductionTechnologyReAdjustWizard(models.TransientModel): workorders = item.workorder_ids.filtered(lambda wo: wo.state not in ('cancel')).sorted( key=lambda a: a.sequence) if workorders[0].state in ['pending']: - if workorder[0].production_id.product_id.categ_id.type == '成品': - cnc_workorder = self.search( - [('production_id', '=', item.id), ('routing_type', '=', 'CNC加工')], - limit=1, order='id asc') - if cnc_workorder.cnc_ids: - workorders[0].state = 'waiting' + if workorder[0].production_id.product_id.categ_id.type == '成品' and item.programming_state != '已编程': + workorders[0].state = 'waiting' diff --git a/sf_manufacturing/wizard/production_technology_wizard.py b/sf_manufacturing/wizard/production_technology_wizard.py index 7c7ca766..04f8f12a 100644 --- a/sf_manufacturing/wizard/production_technology_wizard.py +++ b/sf_manufacturing/wizard/production_technology_wizard.py @@ -15,7 +15,8 @@ class ProductionTechnologyWizard(models.TransientModel): def confirm(self): if self.is_technology_confirm is True and self.production_id.product_id.categ_id.type == '成品': - domain = [('origin', '=', self.origin), ('state', '=', 'technology_to_confirmed')] + domain = [('origin', '=', self.origin), ('state', '=', 'technology_to_confirmed'), + ('product_id', '=', self.production_id.product_id.id)] else: domain = [('id', '=', self.production_id.id)] technology_designs = self.production_id.technology_design_ids @@ -63,9 +64,5 @@ class ProductionTechnologyWizard(models.TransientModel): workorder = item.workorder_ids.filtered(lambda wo: wo.state not in ('cancel')).sorted( key=lambda a: a.sequence) if workorder[0].state in ['pending']: - if workorder[0].production_id.product_id.categ_id.type == '成品': - cnc_workorder = self.search( - [('production_id', '=', item.id), ('routing_type', '=', 'CNC加工')], - limit=1, order='id asc') - if cnc_workorder.cnc_ids: - workorder[0].state = 'waiting' + if workorder[0].production_id.product_id.categ_id.type == '成品' and item.programming_state != '已编程': + workorders[0].state = 'waiting' diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index c91057a7..ac79ff8b 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -50,6 +50,7 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController): res['message'] = '编程单号为%s的CNC程序文件从FTP拉取失败' % (ret['programming_no']) return json.JSONEncoder().encode(res) for production in productions: + production.write({'programming_state': '已编程', 'work_state': '已编程'}) for panel in ret['processing_panel'].split(','): # 查询状态为进行中且工序类型为CNC加工的工单 cnc_workorder_has = production.workorder_ids.filtered( @@ -104,7 +105,7 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController): return json.JSONEncoder().encode(res) else: - res = {'status': 0, 'message': '该制造订单暂未开始'} + res = {'status': 0, 'message': '没有查询到该制造订单'} return json.JSONEncoder().encode(res) except Exception as e: res = {'status': -1, 'message': '系统解析失败'}