diff --git a/jikimo_purchase_request/models/mrp_production.py b/jikimo_purchase_request/models/mrp_production.py index dd9d4aa9..02bff9fb 100644 --- a/jikimo_purchase_request/models/mrp_production.py +++ b/jikimo_purchase_request/models/mrp_production.py @@ -9,12 +9,16 @@ class MrpProduction(models.Model): @api.depends('state') def _compute_pr_mp_count(self): for item in self: - pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name)]) - # pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name), ('is_subcontract', '!=', 'True')]) - if pr_ids: + if item.product_id.product_tmpl_id.single_manufacturing == True and not item.is_remanufacture: + first_order = self.env['mrp.production'].search( + [('origin', '=', item.origin), ('product_id', '=', item.product_id.id)], limit=1, order='id asc') + pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', first_order.name)]) item.pr_mp_count = len(pr_ids) else: - item.pr_mp_count = 0 + pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name)]) + item.pr_mp_count = len(pr_ids) + + # pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', item.name), ('is_subcontract', '!=', 'True')]) def action_view_pr_mp(self): """ @@ -22,7 +26,13 @@ class MrpProduction(models.Model): """ self.ensure_one() # pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', self.name),('is_subcontract', '!=', True)]) - pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', self.name)]) + if self.product_id.product_tmpl_id.single_manufacturing == True and not self.is_remanufacture: + first_order = self.env['mrp.production'].search( + [('origin', '=', self.origin), ('product_id', '=', self.product_id.id)], limit=1, order='id asc') + pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', first_order.name)]) + else: + pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', self.name)]) + action = { 'res_model': 'purchase.request', 'type': 'ir.actions.act_window', diff --git a/jikimo_purchase_request/models/stock_rule.py b/jikimo_purchase_request/models/stock_rule.py index 08f32b2d..81f4f8ee 100644 --- a/jikimo_purchase_request/models/stock_rule.py +++ b/jikimo_purchase_request/models/stock_rule.py @@ -1,4 +1,5 @@ from odoo import api, fields, models +from collections import defaultdict class StockRule(models.Model): @@ -44,7 +45,39 @@ class StockRule(models.Model): purchase_request_line_model.create(request_line_data) def _run_buy(self, procurements): - res = super(StockRule, self)._run_buy(procurements) + # 如果补货组相同,并且产品相同,则合并 + procurements_dict = defaultdict() + for procurement, rule in procurements: + if (procurement.product_id, procurement.values['group_id'], rule) not in procurements_dict: + procurements_dict[(procurement.product_id, procurement.values['group_id'], rule)] = { + 'product_id': procurement.product_id, + 'product_qty': procurement.product_qty, + 'product_uom': procurement.product_uom, + 'location_id': procurement.location_id, + 'name': procurement.name, + 'origin': procurement.origin, + 'company_id': procurement.company_id, + 'values': procurement.values, + 'rule': rule + } + else: + procurements_dict[(procurement.product_id, procurement.values['group_id'], rule)]['product_qty'] += procurement.product_qty + new_procurements = [] + for k, p in procurements_dict.items(): + new_procurements.append(( + self.env['procurement.group'].Procurement( + product_id=p['product_id'], + product_qty=p['product_qty'], + product_uom=p['product_uom'], + location_id=p['location_id'], + name=p['name'], + origin=p['origin'], + company_id=p['company_id'], + values=p['values'] + ), p['rule']) + ) + + res = super(StockRule, self)._run_buy(new_procurements) # 判断是否根据规则生成新的采购申请单据,如果生成则修改状态为 approved origins = list(set([procurement[0].origin for procurement in procurements])) for origin in origins: