From a1807e05db3b1aadd46014cac7af88686a8a309d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Thu, 21 Nov 2024 09:26:23 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E8=B0=83=E6=8B=A8=E5=8D=95=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_production.py | 18 ++++--- sf_manufacturing/models/stock.py | 59 +++++++++++------------ 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 132373da..98f8e8a1 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -1386,9 +1386,9 @@ class MrpProduction(models.Model): @api.model_create_multi def create(self, vals_list): """ - 重载创建制造订单的方法,单件制造订单只创建一个采购组,用于后续单据的创建 + 重载创建制造订单的方法,单个制造订单,同一成品只创建一个采购组,用于后续单据的创建 """ - group_id = None + product_group_id = {} for vals in vals_list: if not vals.get('name', False) or vals['name'] == _('New'): picking_type_id = vals.get('picking_type_id') @@ -1399,9 +1399,13 @@ class MrpProduction(models.Model): if not vals.get('procurement_group_id'): product_id = self.env['product.product'].browse(vals['product_id']) if product_id.product_tmpl_id.single_manufacturing: - procurement_group_vals = self._prepare_procurement_group_vals(vals) - group_id = self.env["procurement.group"].create(procurement_group_vals).id if not group_id else group_id - vals['procurement_group_id'] = group_id + if product_id.id not in product_group_id.keys(): + procurement_group_vals = self._prepare_procurement_group_vals(vals) + group_id = self.env["procurement.group"].create(procurement_group_vals).id + vals['procurement_group_id'] = group_id + product_group_id[product_id.id] = group_id + else: + vals['procurement_group_id'] = product_group_id[product_id.id] return super(MrpProduction, self).create(vals_list) @api.depends('procurement_group_id.stock_move_ids.created_purchase_line_id.order_id', 'procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id') @@ -1409,7 +1413,7 @@ class MrpProduction(models.Model): for production in self: # 找到来源的第一张制造订单的采购组 if production.product_id.product_tmpl_id.single_manufacturing == True: - first_production = self.env['mrp.production'].search([('origin', '=', production.origin)], limit=1, order='id asc') + first_production = self.env['mrp.production'].search([('origin', '=', production.origin), ('product_id', '=', production.product_id.id)], limit=1, order='id asc') production.purchase_order_count = len(first_production.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id | first_production.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id) else: @@ -1420,7 +1424,7 @@ class MrpProduction(models.Model): def _compute_picking_ids(self): for order in self: if order.product_id.product_tmpl_id.single_manufacturing == True: - first_order = self.env['mrp.production'].search([('origin', '=', order.origin)], limit=1, order='id asc') + first_order = self.env['mrp.production'].search([('origin', '=', order.origin), ('product_id', '=', order.product_id.id)], limit=1, order='id asc') order.picking_ids = self.env['stock.picking'].search([ ('group_id', '=', first_order.procurement_group_id.id), ('group_id', '!=', False), ]) diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 3acf4cb4..5fa12979 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -125,36 +125,30 @@ class StockRule(models.Model): product = self.env['product.product'].search( [("id", '=', item[0].product_id.id)]) - # 如果产品是坯料,则根据作业类型来设置采购组 - if product.categ_id.name == '坯料': - if item[1]['picking_type_id'].name in ['生产发料', '内部调拨']: - item[0][7]['group_id'] = procurements[0][0][7]['group_id'] - list2.append(item) - else: - product_tmpl = self.env['product.template'].search( - ["&", ("id", '=', product.product_tmpl_id.id), ('single_manufacturing', "!=", False)]) - if product_tmpl: - if num > 1: - for no in range(1, num + 1): - Procurement = namedtuple('Procurement', ['product_id', 'product_qty', - 'product_uom', 'location_id', 'name', 'origin', - 'company_id', - 'values']) - s = Procurement(product_id=item[0].product_id, product_qty=1.0, product_uom=item[0].product_uom, - location_id=item[0].location_id, - name=item[0].name, - origin=item[0].origin, - company_id=item[0].company_id, - values=item[0].values, - ) - item1 = list(item) - item1[0] = s + product_tmpl = self.env['product.template'].search( + ["&", ("id", '=', product.product_tmpl_id.id), ('single_manufacturing', "!=", False)]) + if product_tmpl: + if num > 1: + for no in range(1, num + 1): + Procurement = namedtuple('Procurement', ['product_id', 'product_qty', + 'product_uom', 'location_id', 'name', 'origin', + 'company_id', + 'values']) + s = Procurement(product_id=item[0].product_id, product_qty=1.0, product_uom=item[0].product_uom, + location_id=item[0].location_id, + name=item[0].name, + origin=item[0].origin, + company_id=item[0].company_id, + values=item[0].values, + ) + item1 = list(item) + item1[0] = s - list2.append(tuple(item1)) - else: - list2.append(item) + list2.append(tuple(item1)) else: list2.append(item) + else: + list2.append(item) for procurement, rule in list2: procure_method = rule.procure_method @@ -214,9 +208,12 @@ class StockRule(models.Model): '''创建制造订单''' productions = self.env['mrp.production'].with_user(SUPERUSER_ID).sudo().with_company(company_id).create( productions_values) - # 将这一批制造订单的采购组设置为不同的采购组 + # 将这一批制造订单的采购组根据成品设置为不同的采购组 + product_group_id = {} for index, production in enumerate(productions): - if index > 0: + if production.product_id.id not in product_group_id.keys(): + product_group_id[production.product_id.id] = production.procurement_group_id.id + else: productions_values[index].update({'name': production.name}) procurement_group_vals = production._prepare_procurement_group_vals(productions_values[index]) production.procurement_group_id = self.env["procurement.group"].create(procurement_group_vals).id @@ -968,11 +965,11 @@ class ReStockMove(models.Model): def _single_manufactuing_mo_generate_origin(self, res): """ - 单件制造订单的完成move单据修改来源为制造订单 + 单个制造订单的完成move单据修改来源为该制造订单关联的销售订单下所有成品相同的制造订单 """ if self[0].origin and self.picking_type_id.name in ['生产发料', '内部调拨']: production = self.env['mrp.production'].search([('name', '=', self[0].origin)], limit=1, order='id asc') - productions = self.env['mrp.production'].search([('origin', '=', production.origin)]) + productions = self.env['mrp.production'].search([('origin', '=', production.origin), ('product_id', '=', production.product_id.id)]) res['origin'] = ','.join(productions.mapped('name')) return res From 269be36d862a5bf72903212fea691ddf9e964d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Thu, 21 Nov 2024 09:48:26 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E9=9A=90=E8=97=8F=E5=88=B6=E9=80=A0?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=BE=85=E7=94=9F=E4=BA=A7=E6=8C=89=E9=92=AE?= =?UTF-8?q?=EF=BC=8C=E4=BA=BA=E5=B7=A5=E7=BA=BF=E4=B8=8B=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8B=E7=9A=84=E5=8A=9F=E8=83=BD=E5=88=80?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/views/mrp_production_addional_change.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml index f88182cb..9c2f6237 100644 --- a/sf_manufacturing/views/mrp_production_addional_change.xml +++ b/sf_manufacturing/views/mrp_production_addional_change.xml @@ -114,7 +114,7 @@ - + @@ -381,6 +381,12 @@ + + True + + + True + From 13d99b1bccb13845eaa67264585a6ecfd4ed773d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Thu, 21 Nov 2024 09:49:12 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=88=90=E5=93=81=E7=9A=84=E9=9B=B6?= =?UTF-8?q?=E4=BB=B6=E5=9B=BE=E5=8F=B7=E4=BF=AE=E6=94=B9=E4=B8=BA=E9=9B=B6?= =?UTF-8?q?=E4=BB=B6=E5=9B=BE=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/views/mrp_workorder_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index bbda259c..86cc7bd6 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -285,7 +285,7 @@ - + 计划加工时间