采购申请按钮按照产品以及bom产品过滤

This commit is contained in:
胡尧
2025-06-18 10:34:34 +08:00
parent 1dfa22900d
commit 376eb9e56f
3 changed files with 29 additions and 5 deletions

View File

@@ -6,3 +6,4 @@ from . import mrp_production
from . import purchase_order
from . import stock_rule
from . import stock_picking
from . import product_product

View File

@@ -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')

View File

@@ -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