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