From c24bba313745f6d202743646b378a4a047449b09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Wed, 7 May 2025 16:34:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=87=E8=B4=AD=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=AF=B9=E4=BA=8E=E5=8D=95=E4=BB=B6=E5=88=B6=E9=80=A0?= =?UTF-8?q?=E9=9D=9E=E9=A6=96=E4=B8=AA=E5=88=B6=E9=80=A0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E6=98=BE=E7=A4=BA=EF=BC=8C=E4=BF=AE=E6=94=B9=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E7=94=B3=E8=AF=B7=E5=AF=B9=E4=BA=8E=E5=90=8C=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E8=A1=A5=E8=B4=A7=E7=BB=84=E5=90=8C=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E7=9A=84=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/mrp_production.py | 20 ++++++++--- jikimo_purchase_request/models/stock_rule.py | 35 ++++++++++++++++++- 2 files changed, 49 insertions(+), 6 deletions(-) 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: