From d896118ea97ac3c3602a7b9d0cf5b216b8219934 Mon Sep 17 00:00:00 2001 From: guanhuan Date: Tue, 21 Jan 2025 16:23:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=BA=9F=E4=B8=8D=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BC=96=E7=A8=8B=E6=97=B6=E6=96=B0=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9A=84=E5=88=B6=E9=80=A0=E8=AE=A2=E5=8D=95=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_production.py | 60 +++++++++---------- sf_manufacturing/models/mrp_workorder.py | 2 +- .../wizard/production_technology_wizard.py | 16 +++++ sf_manufacturing/wizard/production_wizard.py | 1 + sf_quality/models/quality.py | 2 +- sf_quality/models/quality_cnc_test.py | 2 +- 6 files changed, 50 insertions(+), 33 deletions(-) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index d7c6d53d..5deb54ba 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -1416,36 +1416,36 @@ class MrpProduction(models.Model): # 'production_id': False}) # productions.procurement_group_id.mrp_production_ids.move_dest_ids.write( # {'group_id': self.env['procurement.group'].search([('name', '=', sale_order.name)])}) - stock_picking_remanufacture = self.env['stock.picking'].search([('origin', '=', productions.name)]) - for pick in stock_picking_remanufacture: - if pick.name.startswith('WH/PC/') or pick.name.startswith('WH/INT/'): - if pick.move_ids: - product_type_id = pick.move_ids[0].product_id.categ_id - if product_type_id.name == '坯料': - location_id = self.env['stock.location'].search([('name', '=', '坯料存货区')]) - if not location_id: - logging.info(f'没有搜索到【坯料存货区】: {location_id}') - break - if pick.picking_type_id.name == '内部调拨': - if pick.location_dest_id.product_type != product_type_id: - pick.location_dest_id = location_id.id - elif pick.picking_type_id.name == '生产发料': - if pick.location_id.product_type != product_type_id: - pick.location_id = location_id.id - scarp_process_parameter_workorder = self.env['mrp.workorder'].search( - [('surface_technics_parameters_id', '!=', False), ('production_id', '=', self.id), - ('is_subcontract', '=', True)]) - if scarp_process_parameter_workorder: - production_programming = self.env['mrp.production'].search( - [('programming_no', '=', self.programming_no), ('id', '!=', productions.id)], order='name asc') - production_list = [production.name for production in production_programming] - purchase_orders = self.env['purchase.order'].search([('origin', 'ilike', ','.join(production_list))]) - for purchase_item in purchase_orders.order_line: - for process_item in scarp_process_parameter_workorder: - if purchase_item.product_id.categ_type == '表面工艺': - if purchase_item.product_id.server_product_process_parameters_id == process_item.surface_technics_parameters_id: - if purchase_orders.origin.find(productions.name) == -1: - purchase_orders.origin += ',' + productions.name + # stock_picking_remanufacture = self.env['stock.picking'].search([('origin', '=', productions.name)]) + # for pick in stock_picking_remanufacture: + # if pick.name.startswith('WH/PC/') or pick.name.startswith('WH/INT/'): + # if pick.move_ids: + # product_type_id = pick.move_ids[0].product_id.categ_id + # if product_type_id.name == '坯料': + # location_id = self.env['stock.location'].search([('name', '=', '坯料存货区')]) + # if not location_id: + # logging.info(f'没有搜索到【坯料存货区】: {location_id}') + # break + # if pick.picking_type_id.name == '内部调拨': + # if pick.location_dest_id.product_type != product_type_id: + # pick.location_dest_id = location_id.id + # elif pick.picking_type_id.name == '生产发料': + # if pick.location_id.product_type != product_type_id: + # pick.location_id = location_id.id + # scarp_process_parameter_workorder = self.env['mrp.workorder'].search( + # [('surface_technics_parameters_id', '!=', False), ('production_id', '=', self.id), + # ('is_subcontract', '=', True)]) + # if scarp_process_parameter_workorder: + # production_programming = self.env['mrp.production'].search( + # [('programming_no', '=', self.programming_no), ('id', '!=', productions.id)], order='name asc') + # production_list = [production.name for production in production_programming] + # purchase_orders = self.env['purchase.order'].search([('origin', 'ilike', ','.join(production_list))]) + # for purchase_item in purchase_orders.order_line: + # for process_item in scarp_process_parameter_workorder: + # if purchase_item.product_id.categ_type == '表面工艺': + # if purchase_item.product_id.server_product_process_parameters_id == process_item.surface_technics_parameters_id: + # if purchase_orders.origin.find(productions.name) == -1: + # purchase_orders.origin += ',' + productions.name if item['is_reprogramming'] is False: productions.programming_state = '已编程' else: diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index f8197783..34e85b73 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -145,7 +145,7 @@ class ResMrpWorkOrder(models.Model): Y10_axis = fields.Float(default=0) Z10_axis = fields.Float(default=0) X_deviation_angle = fields.Integer(string="X轴偏差度", default=0) - test_results = fields.Selection([("合格", "合格"), ("返工", "返工")], default='合格', + test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格', string="检测结果", tracking=True) cnc_ids = fields.One2many("sf.cnc.processing", 'workorder_id', string="CNC加工程序") cmm_ids = fields.One2many("sf.cmm.program", 'workorder_id', string="CMM程序") diff --git a/sf_manufacturing/wizard/production_technology_wizard.py b/sf_manufacturing/wizard/production_technology_wizard.py index 0415d1fd..b1f7fbb0 100644 --- a/sf_manufacturing/wizard/production_technology_wizard.py +++ b/sf_manufacturing/wizard/production_technology_wizard.py @@ -91,4 +91,20 @@ class ProductionTechnologyWizard(models.TransientModel): if workorder[0].state in ['pending']: if workorder[0].production_id.product_id.categ_id.type == '成品' and item.programming_state != '已编程': workorder[0].state = 'waiting' + if item.is_remanufacture and item.programming_state == '已编程': + mrp_production = self.env['mrp.production'].sudo().search( + [('remanufacture_production_id', '=', item.name)]) + workorder_ids = mrp_production.workorder_ids.filtered( + lambda ap: ap.routing_type in ('装夹预调', 'CNC加工')) + for workorder_id in workorder_ids: + workorder = item.workorder_ids.filtered(lambda + ap: ap.routing_type == workorder_id.routing_type and ap.processing_panel == workorder_id.processing_panel) + if workorder: + if workorder.routing_type == '装夹预调': + workorder.write( + {'processing_drawing': workorder_id.processing_drawing}) + if workorder.routing_type == 'CNC加工': + workorder.write( + {'cnc_worksheet': workorder_id.cnc_worksheet, 'cnc_ids': workorder_id.cnc_ids, + 'cmm_ids': workorder_id.cmm_ids}) return productions diff --git a/sf_manufacturing/wizard/production_wizard.py b/sf_manufacturing/wizard/production_wizard.py index aa2a4075..ba156626 100644 --- a/sf_manufacturing/wizard/production_wizard.py +++ b/sf_manufacturing/wizard/production_wizard.py @@ -53,4 +53,5 @@ class ProductionWizard(models.TransientModel): if self.is_reprogramming is True: self.mrp_production_id.update_programming_state(trigger_time=datetime.now().strftime('%Y-%m-%d %H:%M:%S')) new_production = self.mrp_production_id.recreateManufacturing(ret) + new_production.technology_design_ids = self.mrp_production_id.technology_design_ids self.mrp_production_id.write({'remanufacture_production_id': new_production.id}) diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py index 201103f1..0cb1e9af 100644 --- a/sf_quality/models/quality.py +++ b/sf_quality/models/quality.py @@ -27,7 +27,7 @@ class QualityCheck(models.Model): model_file = fields.Binary(related='workorder_id.glb_file', string='加工模型') detection_report = fields.Binary(related='workorder_id.detection_report', readonly=True, string='检测报告') - test_results = fields.Selection([("合格", "合格"), ("返工", "返工")], string="检测结果", + test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], string="检测结果", default='合格') reason = fields.Selection( [("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"), diff --git a/sf_quality/models/quality_cnc_test.py b/sf_quality/models/quality_cnc_test.py index 9810b0e0..9c73715d 100644 --- a/sf_quality/models/quality_cnc_test.py +++ b/sf_quality/models/quality_cnc_test.py @@ -25,7 +25,7 @@ class SfQualityCncTest(models.Model): ('pass', '合格'), ('fail', '不合格')], string='判定结果') number = fields.Integer('数量', default=1) - test_results = fields.Selection([("合格", "合格"), ("返工", "返工")], string="检测结果") + test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], string="检测结果") reason = fields.Selection( [("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"), ("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因")