From 376eb9e56f96a91737cc821287ae99cd9670cec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Wed, 18 Jun 2025 10:34:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=8C=89=E7=85=A7=E4=BA=A7=E5=93=81=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?bom=E4=BA=A7=E5=93=81=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_purchase_request/models/__init__.py | 1 + .../models/mrp_production.py | 16 +++++++++++----- .../models/product_product.py | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 jikimo_purchase_request/models/product_product.py diff --git a/jikimo_purchase_request/models/__init__.py b/jikimo_purchase_request/models/__init__.py index 4d5c92da..f1ba1696 100644 --- a/jikimo_purchase_request/models/__init__.py +++ b/jikimo_purchase_request/models/__init__.py @@ -6,3 +6,4 @@ from . import mrp_production from . import purchase_order from . import stock_rule from . import stock_picking +from . import product_product diff --git a/jikimo_purchase_request/models/mrp_production.py b/jikimo_purchase_request/models/mrp_production.py index 6973d51f..d7cd4b81 100644 --- a/jikimo_purchase_request/models/mrp_production.py +++ b/jikimo_purchase_request/models/mrp_production.py @@ -12,9 +12,7 @@ class MrpProduction(models.Model): if item.product_id.is_customer_provided: item.pr_mp_count = 0 else: - # 由于采购申请合并了所有销售订单行的采购,所以不区分产品 - mrp_names = self.env['mrp.production'].search([('origin', '=', item.origin)]).mapped('name') - pr_ids = self.env['purchase.request'].sudo().search([('origin', 'in', mrp_names)]) + pr_ids = item._get_purchase_request() item.pr_mp_count = len(pr_ids) # pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name), ('is_subcontract', '!=', 'True')]) @@ -25,8 +23,7 @@ class MrpProduction(models.Model): self.ensure_one() # 由于采购申请合并了所有销售订单行的采购,所以不区分产品 - mrp_names = self.env['mrp.production'].search([('origin', '=', self.origin)]).mapped('name') - pr_ids = self.env['purchase.request'].sudo().search([('origin', 'in', mrp_names)]) + pr_ids = self._get_purchase_request() action = { 'res_model': 'purchase.request', @@ -44,3 +41,12 @@ class MrpProduction(models.Model): 'view_mode': 'tree,form', }) return action + + def _get_purchase_request(self): + """获取跟制造订单相关的采购申请单(根据采购申请单行项目的产品匹配)""" + mrp_names = self.env['mrp.production'].search([('origin', '=', self.origin)]).mapped('name') + pr_ids = self.env['purchase.request'].sudo().search([('origin', 'in', mrp_names)]) + product_list = self.product_id._get_product_include_bom() + pr_line_ids = pr_ids.line_ids.filtered(lambda l: l.product_id in product_list) + return pr_line_ids.mapped('request_id') + \ No newline at end of file diff --git a/jikimo_purchase_request/models/product_product.py b/jikimo_purchase_request/models/product_product.py new file mode 100644 index 00000000..c59fcdb8 --- /dev/null +++ b/jikimo_purchase_request/models/product_product.py @@ -0,0 +1,17 @@ +from odoo import models + + +class ProductProduct(models.Model): + _inherit = 'product.product' + + + def _get_product_include_bom(self): + """获取产品列表(包括所有bom)""" + self.ensure_one() + product_list = [self] + bom_ids = self.bom_ids + while (bom_ids): + bom_product_ids = bom_ids.bom_line_ids.mapped('product_id') + product_list.append(bom_product_ids) + bom_ids = bom_product_ids.bom_ids + return product_list \ No newline at end of file