From 8fb90c1c35b7f55a2a2368407597f203882c55d9 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 18 Mar 2025 10:52:34 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=B0=83=E6=8B=A8=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=95=B0=E6=8D=AE=E4=BF=A1=E6=81=AF=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_quality/models/stock.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sf_quality/models/stock.py b/sf_quality/models/stock.py index 89bbf005..7abb238e 100644 --- a/sf_quality/models/stock.py +++ b/sf_quality/models/stock.py @@ -21,7 +21,7 @@ class StockPicking(models.Model): “警告:存在不合格产品XXXX n 件、YYYYY m件,继续调拨请点“确认”,否则请取消?” """ context = self.env.context - if (not (isinstance(res, dict) and res.get('type') == 'ir.actions.act_window') + if (not (not isinstance(res, bool) 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')): # 回滚事务,为二次确认/取消做准备 @@ -36,8 +36,14 @@ class StockPicking(models.Model): else: number = sum(self.move_ids_without_package.filtered( lambda ml: ml.product_id == product_id).mapped('quantity_done')) - fail_check_text = (f'{fail_check_text}、{product_id.name} {number}件' - if fail_check_text != '' else f'{product_id.name} {number}件') + if number == 0: + number = sum(self.move_ids_without_package.filtered( + lambda ml: ml.product_id == product_id).mapped('reserved_availability')) + if number == 0: + number = sum(self.move_ids_without_package.filtered( + lambda ml: ml.product_id == product_id).mapped('product_uom_qty')) + fail_check_text = (f'{fail_check_text}、{product_id.display_name} {number}件' + if fail_check_text != '' else f'{product_id.display_name} {number}件') return { 'type': 'ir.actions.act_window', 'res_model': 'picking.validate.check.wizard', From bfe9c51d57b566bccd73ca42b607805dd126349f Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Tue, 18 Mar 2025 11:04:19 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=A4=84=E7=90=86=E8=B4=A8=E6=A3=80?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=AD=98=E5=9C=A8=E5=A4=9A=E4=B8=AA=E5=87=BA?= =?UTF-8?q?=E5=8E=82=E6=A3=80=E9=AA=8C=E6=8A=A5=E5=91=8A=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_quality/models/stock.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sf_quality/models/stock.py b/sf_quality/models/stock.py index 89bbf005..ee3403ae 100644 --- a/sf_quality/models/stock.py +++ b/sf_quality/models/stock.py @@ -10,11 +10,14 @@ class StockPicking(models.Model): 出厂检验报告上传 """ - out_quality_check = self.env['quality.check'].search( + out_quality_checks = self.env['quality.check'].search( [('picking_id', '=', self.id), ('test_type_id.name', '=', '出厂检验报告')]) - if not out_quality_check.is_factory_report_uploaded: - if out_quality_check and self.state == 'assigned': - out_quality_check.upload_factory_report() + # out_quality_checks 可能存在多个 + if out_quality_checks: + for out_quality_check in out_quality_checks: + if not out_quality_check.is_factory_report_uploaded: + if out_quality_check and self.state == 'assigned': + out_quality_check.upload_factory_report() """ 调拨单若关联了质量检查单,验证调拨单时,应校验是否有不合格品,若存在,应弹窗提示: From 6b78cb72b32fc47a3f9d06de70b75c7d4f684012 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 18 Mar 2025 11:21:56 +0800 Subject: [PATCH 3/4] =?UTF-8?q?1=E3=80=81=E8=B4=A8=E6=A3=80=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E5=92=8C=E6=95=B0=E9=87=8F=E5=BA=94=E7=94=A8=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E9=A1=BA=E5=BA=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_quality/models/stock.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sf_quality/models/stock.py b/sf_quality/models/stock.py index e5039d81..add80f8a 100644 --- a/sf_quality/models/stock.py +++ b/sf_quality/models/stock.py @@ -5,7 +5,6 @@ class StockPicking(models.Model): _inherit = 'stock.picking' def button_validate(self): - res = super(StockPicking, self).button_validate() """ 出厂检验报告上传 """ @@ -24,9 +23,7 @@ class StockPicking(models.Model): “警告:存在不合格产品XXXX n 件、YYYYY m件,继续调拨请点“确认”,否则请取消?” """ context = self.env.context - if (not (not isinstance(res, bool) 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')): + if 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') @@ -58,4 +55,5 @@ class StockPicking(models.Model): 'default_fail_check_text': f'警告:存在不合格产品{fail_check_text},继续调拨请点“确认”,否则请取消?', 'again_validate': True} } + res = super(StockPicking, self).button_validate() return res From 3642398724af7b05a9560f0fc7ba6245a01e5375 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Tue, 18 Mar 2025 11:25:46 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=A1=A8=E9=9D=A2=E5=B7=A5=E8=89=BA?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E5=9B=BE=E5=8F=B7=E6=B2=A1=E6=9C=89=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/purchase_order.py | 5 ++++- sf_sale/models/sale_order.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sf_manufacturing/models/purchase_order.py b/sf_manufacturing/models/purchase_order.py index 7b460958..039dfee5 100644 --- a/sf_manufacturing/models/purchase_order.py +++ b/sf_manufacturing/models/purchase_order.py @@ -113,6 +113,7 @@ class PurchaseOrderLine(models.Model): part_name = fields.Char('零件名称', store=True, compute='_compute_part_name') related_product = fields.Many2one('product.product', string='关联产品', help='经此产品工艺加工成的成品') + manual_part_number = fields.Char() manual_part_name = fields.Char() @api.depends('product_id') @@ -143,4 +144,6 @@ class PurchaseOrderLine(models.Model): 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 + record.part_name = record.manual_part_name + if record.manual_part_number: + record.part_number = record.manual_part_number \ No newline at end of file diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 49a3e48c..b3c058ae 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -374,7 +374,7 @@ class RePurchaseOrder(models.Model): 'product_qty': 1, 'product_uom': server_template.uom_id.id, 'related_product': production.product_id.id, - 'part_number': pp.part_number, + 'manual_part_number': pp.part_number, 'manual_part_name': pp.part_name, })) # 获取服务商品最后一个供应商的采购员