From 0a1b48ed93f9ce1a7c73d0c165302df4709ac655 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Mon, 17 Mar 2025 11:26:42 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E5=9B=BE=E5=8F=B7?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E5=90=8D=E7=A7=B0=E6=95=B0=E6=8D=AE=E5=A1=AB?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/purchase_order.py | 49 +++++++++++++++++------ sf_sale/models/sale_order.py | 3 +- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/sf_manufacturing/models/purchase_order.py b/sf_manufacturing/models/purchase_order.py index 39e8f23d..1fbac87b 100644 --- a/sf_manufacturing/models/purchase_order.py +++ b/sf_manufacturing/models/purchase_order.py @@ -109,15 +109,16 @@ class PurchaseOrder(models.Model): class PurchaseOrderLine(models.Model): _inherit = 'purchase.order.line' - part_number = fields.Char('零件图号', store=True, compute='_compute_related_product') - part_name = fields.Char('零件名称', store=True, - compute='_compute_related_product') + part_number = fields.Char('零件图号', store=True, compute='_compute_part_number') + part_name = fields.Char('零件名称', store=True, compute='_compute_part_name') related_product = fields.Many2one('product.product', string='关联产品', help='经此产品工艺加工成的成品') + manual_part_name = fields.Char() + @api.depends('product_id') - def _compute_related_product(self): + def _compute_part_number(self): for record in self: - if record.part_number or record.part_name: + if record.part_number: continue if record.product_id.categ_id.name == '坯料': product_name = '' @@ -135,13 +136,35 @@ class PurchaseOrderLine(models.Model): filtered_order_line = sale_order.order_line.filtered( lambda order_line: re.search(f'{product_name}$', order_line.product_id.name) ) - record.part_number = filtered_order_line.product_id.part_number if filtered_order_line else None - record.part_name = filtered_order_line.product_id.part_name if filtered_order_line else None + record.part_number = filtered_order_line.product_id.part_number else: record.part_number = record.product_id.part_number - record.part_name = record.product_id.part_name - # if record.product_id.detailed_type: - # production_id = self.env['mrp.production'].search([('name', '=', record.order_id.origin)]) - # record.related_product = production_id.product_id if production_id else False - # else: - # record.related_product = False + + @api.depends('product_id') + def _compute_part_name(self): + for record in self: + if record.manual_part_name: + # 如果手动设置了 part_name,使用手动设置的值 + record.part_name = record.manual_part_name + continue + if record.part_name: + continue + if record.product_id.categ_id.name == '坯料': + product_name = '' + match = re.search(r'(S\d{5}-\d)', record.product_id.name) + # 如果匹配成功,提取结果 + if match: + product_name = match.group(0) + sale_order_name = '' + match_sale = re.search(r'S(\d+)', record.product_id.name) + if match_sale: + sale_order_name = match_sale.group(0) + sale_order = self.env['sale.order'].sudo().search( + [('name', '=', sale_order_name)]) + if sale_order: + filtered_order_line = sale_order.order_line.filtered( + lambda order_line: re.search(f'{product_name}$', order_line.product_id.name) + ) + record.part_name = filtered_order_line.product_id.part_name + else: + record.part_name = record.product_id.part_name \ No newline at end of file diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 2b0380c4..e3ac7282 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -375,7 +375,7 @@ class RePurchaseOrder(models.Model): 'product_uom': server_template.uom_id.id, 'related_product': production.product_id.id, 'part_number': pp.part_number, - 'part_name': pp.part_name, + 'manual_part_name': pp.part_name, })) # 获取服务商品最后一个供应商的采购员 purchase_user_id = server_template.seller_ids[-1].partner_id.purchase_user_id @@ -387,6 +387,7 @@ class RePurchaseOrder(models.Model): 'order_line': server_product_process, 'user_id': purchase_user_id.id }) + purchase_order.order_line._compute_part_name() pp.purchase_id = [(6, 0, [purchase_order.id])] # self.env.cr.commit() From 8347a8b029d93d91d91bfe8d15d8f1f82004064c Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Mon, 17 Mar 2025 16:05:42 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E5=9B=BE=E5=8F=B7?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E5=90=8D=E7=A7=B0=E6=97=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=20=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/purchase_order.py | 36 ++++------------------- sf_sale/models/sale_order.py | 2 +- 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/sf_manufacturing/models/purchase_order.py b/sf_manufacturing/models/purchase_order.py index 1fbac87b..7b460958 100644 --- a/sf_manufacturing/models/purchase_order.py +++ b/sf_manufacturing/models/purchase_order.py @@ -118,7 +118,7 @@ class PurchaseOrderLine(models.Model): @api.depends('product_id') def _compute_part_number(self): for record in self: - if record.part_number: + if record.part_number and record.part_name: continue if record.product_id.categ_id.name == '坯料': product_name = '' @@ -137,34 +137,10 @@ class PurchaseOrderLine(models.Model): lambda order_line: re.search(f'{product_name}$', order_line.product_id.name) ) record.part_number = filtered_order_line.product_id.part_number - else: - record.part_number = record.product_id.part_number - - @api.depends('product_id') - def _compute_part_name(self): - for record in self: - if record.manual_part_name: - # 如果手动设置了 part_name,使用手动设置的值 - record.part_name = record.manual_part_name - continue - if record.part_name: - continue - if record.product_id.categ_id.name == '坯料': - product_name = '' - match = re.search(r'(S\d{5}-\d)', record.product_id.name) - # 如果匹配成功,提取结果 - if match: - product_name = match.group(0) - sale_order_name = '' - match_sale = re.search(r'S(\d+)', record.product_id.name) - if match_sale: - sale_order_name = match_sale.group(0) - sale_order = self.env['sale.order'].sudo().search( - [('name', '=', sale_order_name)]) - if sale_order: - filtered_order_line = sale_order.order_line.filtered( - lambda order_line: re.search(f'{product_name}$', order_line.product_id.name) - ) record.part_name = filtered_order_line.product_id.part_name else: - record.part_name = record.product_id.part_name \ No newline at end of file + record.part_number = record.product_id.part_number + record.part_name = record.product_id.part_name + if record.manual_part_name: + # 如果手动设置了 part_name,使用手动设置的值 + record.part_name = record.manual_part_name \ No newline at end of file diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index e3ac7282..49a3e48c 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -387,7 +387,7 @@ class RePurchaseOrder(models.Model): 'order_line': server_product_process, 'user_id': purchase_user_id.id }) - purchase_order.order_line._compute_part_name() + purchase_order.order_line._compute_part_number() pp.purchase_id = [(6, 0, [purchase_order.id])] # self.env.cr.commit() From 131166981485d23b7779135f4df285caa7776444 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Mon, 17 Mar 2025 16:39:49 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9D=90=E6=96=99=E5=9E=8B=E5=8F=B7?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9=E6=97=B6=E8=B5=8B=E4=BA=88?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/common.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/sf_base/models/common.py b/sf_base/models/common.py index 25c79f72..5abe2ce3 100644 --- a/sf_base/models/common.py +++ b/sf_base/models/common.py @@ -61,11 +61,29 @@ class MrsMaterialModel(models.Model): supplier_ids = fields.One2many('sf.supplier.sort', 'materials_model_id', string='供应商') active = fields.Boolean('有效', default=True) + def write(self, vals): + res = super(MrsMaterialModel, self).write(vals) + if not self.gain_way: + self.gain_way = '采购' + if not self.supplier_ids: + supplier_id = self.env['res.partner'].search([('name', 'like', '%傲派%')], limit=1) + if not supplier_id: + supplier_id = self.env['res.partner'].create({ + 'name': '湖南傲派自动化设备有限公司', + 'supplier_rank':1, + }) + self.supplier_ids = [(0, 0, {'materials_model_id': self.id, 'partner_id': supplier_id.id or False})] + return res @api.model def create(self, vals): res = super(MrsMaterialModel, self).create(vals) if not vals.get('supplier_ids'): - supplier_id = self.env['res.partner'].search([('name', '=', '湖南傲派自动化设备有限公司')], limit=1) + supplier_id = self.env['res.partner'].search([('name', 'like', '%傲派%')], limit=1) + if not supplier_id: + supplier_id = self.env['res.partner'].create({ + 'name': '湖南傲派自动化设备有限公司', + 'supplier_rank': 1, + }) res.supplier_ids = [(0, 0, {'materials_model_id': res.id, 'partner_id': supplier_id.id or False})] return res else: From 117d90bd5cf36d96362ff2bb760c07b339f0dc71 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Mon, 17 Mar 2025 17:30:42 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=B4=A8=E9=87=8F=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=BC=B9=E5=87=BA=E6=A1=86=E9=A1=BA=E5=BA=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_quality/models/stock.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sf_quality/models/stock.py b/sf_quality/models/stock.py index be8c5dc0..89bbf005 100644 --- a/sf_quality/models/stock.py +++ b/sf_quality/models/stock.py @@ -21,7 +21,9 @@ class StockPicking(models.Model): “警告:存在不合格产品XXXX n 件、YYYYY m件,继续调拨请点“确认”,否则请取消?” """ context = self.env.context - if not context.get('again_validate') and self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail'): + if (not (isinstance(res, dict) and res.get('type') == 'ir.actions.act_window') + and not context.get('again_validate') + and self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail')): # 回滚事务,为二次确认/取消做准备 self.env.cr.rollback() quality_check_ids = self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail')