From 437b081f155d22a05a4e6813f68ca88350e6fcd6 Mon Sep 17 00:00:00 2001 From: guanhuan Date: Tue, 14 Jan 2025 13:13:50 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E9=9D=A2=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 36762baf..75c96379 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -44,7 +44,9 @@ class ResMrpWorkOrder(models.Model): ('ZM', 'ZM'), ('FM', 'FM'), ('YC', 'YC'), - ('QC', 'QC')], string="加工面", compute='_compute_processing_panel_selection', store=True) + ('QC', 'QC'), + ('HC', 'HC'), + ('ZC', 'ZC')], string="加工面", compute='_compute_processing_panel_selection', store=True) sequence = fields.Integer(string='工序') routing_type = fields.Selection([ ('装夹预调', '装夹预调'), @@ -71,7 +73,7 @@ class ResMrpWorkOrder(models.Model): @api.depends('processing_panel') def _compute_processing_panel_selection(self): for record in self: - if record.processing_panel in ['ZM', 'FM', 'YC', 'QC']: + if record.processing_panel in ['ZM', 'FM', 'YC', 'QC', 'HC', 'ZC']: record.processing_panel_selection = record.processing_panel else: record.processing_panel_selection = False From 9d6baee0829db61663f51bc5c201bc8bc62af10a Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Tue, 14 Jan 2025 14:12:08 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=AE=A2=E4=BE=9B=E6=96=99=E4=B8=8E?= =?UTF-8?q?=E9=9D=9E=E5=AE=A2=E4=BE=9B=E6=96=99=E5=88=86=E5=BC=80=E5=90=88?= =?UTF-8?q?=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_production.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 25ad34b4..1dd6049a 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -1526,8 +1526,7 @@ class MrpProduction(models.Model): 重载创建制造订单的方法,单个制造订单,同一成品只创建一个采购组,用于后续单据的创建 """ product_group_id = {} - group_id = False - is_first = False + is_custemer_group_id = {} # 客供料与非客供料 for vals in vals_list: if not vals.get('name', False) or vals['name'] == _('New'): picking_type_id = vals.get('picking_type_id') @@ -1537,15 +1536,16 @@ class MrpProduction(models.Model): vals['name'] = self.env['stock.picking.type'].browse(picking_type_id).sequence_id.next_by_id() product_id = self.env['product.product'].browse(vals['product_id']) is_self_process = product_id.materials_type_id and product_id.materials_type_id.gain_way and product_id.materials_type_id.gain_way != '自加工' - if not is_first and is_self_process: - is_first = True - group_id = self.env["procurement.group"].create({'name': vals.get('name')}).id + is_customer_provided = product_id.is_customer_provided + if not is_custemer_group_id.get(is_customer_provided): + is_custemer_group_id[is_customer_provided] = self.env["procurement.group"].create({'name': vals.get('name')}).id + # if not (is_first_customer or is_first_not_customer) and is_self_process: + # is_first = True + # group_id = self.env["procurement.group"].create({'name': vals.get('name')}).id if not vals.get('procurement_group_id'): if product_id.product_tmpl_id.single_manufacturing: - if product_id.categ_id.name == '成品' and is_self_process: - - vals['procurement_group_id'] = group_id + vals['procurement_group_id'] = is_custemer_group_id[is_customer_provided] continue if product_id.id not in product_group_id.keys(): procurement_group_vals = self._prepare_procurement_group_vals(vals) @@ -1555,7 +1555,7 @@ class MrpProduction(models.Model): else: vals['procurement_group_id'] = product_group_id[product_id.id] else: - vals['procurement_group_id'] = group_id + vals['procurement_group_id'] = is_custemer_group_id[is_customer_provided] return super(MrpProduction, self).create(vals_list) @api.depends('procurement_group_id.stock_move_ids.created_purchase_line_id.order_id', From eae310ddad30c094f1479b11a43e625bbbb1e70b Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 14 Jan 2025 15:07:53 +0800 Subject: [PATCH 3/5] =?UTF-8?q?1=E3=80=81=E5=B7=A5=E5=8D=95=E3=80=81?= =?UTF-8?q?=E8=B4=A8=E6=A3=80=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 17 ++++++++-------- sf_quality/models/quality.py | 1 + sf_quality/views/quality_check_view.xml | 26 ++++++++++++++++++------ 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 96c2ea84..86900e2e 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1268,13 +1268,14 @@ class ResMrpWorkOrder(models.Model): # 生成工件配送单 record.workpiece_delivery_ids = record._json_workpiece_delivery_list() if record.routing_type == 'CNC加工' or record.individuation_page_PTD is True: - record.process_state = '待解除装夹' - # record.write({'process_state': '待加工'}) - record.production_id.process_state = '待解除装夹' - self.env['sf.production.plan'].sudo().search([('name', '=', record.production_id.name)]).write({ - 'state': 'finished', - 'actual_end_time': datetime.now() - }) + if record.routing_type == 'CNC加工': + record.process_state = '待解除装夹' + # record.write({'process_state': '待加工'}) + record.production_id.process_state = '待解除装夹' + self.env['sf.production.plan'].sudo().search([('name', '=', record.production_id.name)]).write({ + 'state': 'finished', + 'actual_end_time': datetime.now() + }) record.production_id.write({'detection_result_ids': [(0, 0, { 'rework_reason': record.reason, 'detailed_reason': record.detailed_reason, @@ -1363,7 +1364,7 @@ class ResMrpWorkOrder(models.Model): if record.check_ids.filtered(lambda qc: qc.quality_state in ('waiting', 'none')): check_ids = record.check_ids.filtered(lambda qc: qc.quality_state in ('waiting', 'none')) if record.test_results == '合格': - check_ids.write({'test_results': None}) + check_ids.write({'test_results': record.test_results}) for check_id in check_ids: check_id.do_pass() elif record.test_results in ('返工', '报废'): diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py index bacf7031..b76adaa8 100644 --- a/sf_quality/models/quality.py +++ b/sf_quality/models/quality.py @@ -17,6 +17,7 @@ class QualityCheck(models.Model): ('fail', '失败的')], string='状态', tracking=True, store=True, default='none', copy=False, compute='_compute_quality_state') + work_state = fields.Selection(related='workorder_id.state', string='工单状态') processing_panel = fields.Char(related='workorder_id.processing_panel', string='加工面') production_line_id = fields.Many2one(related='workorder_id.production_line_id', diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml index c1b2ae40..48da0d37 100644 --- a/sf_quality/views/quality_check_view.xml +++ b/sf_quality/views/quality_check_view.xml @@ -6,6 +6,8 @@ + + - - - - + + + + + + @@ -44,6 +48,12 @@ + + {'invisible': ['|',('quality_state', '!=', 'fail'),('work_state','=', 'done')]} + + + {'invisible': ['|',('quality_state', '!=', 'pass'),('work_state','=', 'done')]} + @@ -66,6 +76,10 @@ + + + + \ No newline at end of file From e5f15661ce58d4c4b785764cc69b71cb8458111d Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Tue, 14 Jan 2025 15:10:22 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=8D=95=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E4=BA=A7=E5=93=81=E9=99=90=E5=88=B6=E5=8E=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_sale/models/sale_order.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 2aa6f644..73837271 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -371,15 +371,15 @@ class RePurchaseOrder(models.Model): pp.purchase_id = [(6, 0, [purchase_order.id])] # self.env.cr.commit() - @api.onchange('order_line') - def _onchange_order_line(self): - for order in self: - if order.order_line: - line = order.order_line - product = line.product_id - product_id = product.ids - if len(product_id) != len(line): - raise ValidationError('【%s】已存在,请勿重复添加' % product[-1].name) + # @api.onchange('order_line') + # def _onchange_order_line(self): + # for order in self: + # if order.order_line: + # line = order.order_line + # product = line.product_id + # product_id = product.ids + # if len(product_id) != len(line): + # raise ValidationError('【%s】已存在,请勿重复添加' % product[-1].name) def button_confirm(self): result = super(RePurchaseOrder, self).button_confirm() From b9d95c075166bc91d7dd96c88e475738bfee5330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Tue, 14 Jan 2025 15:48:49 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=94=B6=E8=97=8F?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/views/mrp_workorder_view.xml | 2 +- sf_sale/views/sale_order_view.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index ad2e7fe4..205f56cc 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -87,7 +87,7 @@ - False + false diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index 9fcfbd9e..1c96bf59 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -285,7 +285,7 @@ create_date desc - False + false delivery_warning == 'warning' delivery_warning == 'overdue'