From a68d6d4d064f78aea761c357db5398ff475bba02 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 26 Jun 2025 16:55:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=84=E7=90=86=20=20=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=A1=AE=E8=AE=A4=E6=97=B6=EF=BC=8C=E4=B8=80?= =?UTF-8?q?=E8=A1=A5=E8=B4=A7=E7=BB=84=E7=9A=84=E8=A1=A5=E8=B4=A7=E5=8D=95?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=90=88=E5=B9=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/stock.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index f6787b10..ba6e9d20 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -21,6 +21,7 @@ from odoo.addons.sf_base.commons.common import Common from odoo.exceptions import UserError from io import BytesIO from odoo.exceptions import ValidationError +from dateutil.relativedelta import relativedelta class stockWarehouse(models.Model): @@ -727,6 +728,33 @@ class StockPicking(models.Model): production.workorder_ids.write({'back_button_display': False}) return res + def _prepare_subcontract_mo_vals(self, subcontract_move, bom): + subcontract_move.ensure_one() + group = self.env['procurement.group'].sudo().search([('name', '=', self.name)]) + if not group: + group = self.env['procurement.group'].create({ + 'name': self.name, + 'partner_id': self.partner_id.id, + }) + product = subcontract_move.product_id + warehouse = self._get_warehouse(subcontract_move) + vals = { + 'company_id': subcontract_move.company_id.id, + 'procurement_group_id': group.id, + 'subcontractor_id': subcontract_move.picking_id.partner_id.commercial_partner_id.id, + 'picking_ids': [subcontract_move.picking_id.id], + 'product_id': product.id, + 'product_uom_id': subcontract_move.product_uom.id, + 'bom_id': bom.id, + 'location_src_id': subcontract_move.picking_id.partner_id.with_company(subcontract_move.company_id).property_stock_subcontractor.id, + 'location_dest_id': subcontract_move.picking_id.partner_id.with_company(subcontract_move.company_id).property_stock_subcontractor.id, + 'product_qty': subcontract_move.product_uom_qty, + 'picking_type_id': warehouse.subcontracting_type_id.id, + 'date_planned_start': subcontract_move.date - relativedelta(days=product.produce_delay) + } + return vals + + # 创建 外协出库入单 def create_outcontract_picking(self, workorders, item, sorted_workorders): production = workorders[0].production_id From 1fd9900e4153ac560e096fe72fccbfff922c1dec Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Fri, 27 Jun 2025 09:39:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A4=84=E7=90=86=20=E7=94=B1=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E8=AE=A2=E5=8D=95-=E5=A7=94=E5=A4=96=E5=8A=A0?= =?UTF-8?q?=E5=B7=A5=E7=B1=BB=E5=9E=8B=E7=94=9F=E6=88=90=E7=9A=84=E5=90=8C?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E8=A1=A5=E8=B4=A7=E7=BB=84=E7=9A=84=E5=9D=AF?= =?UTF-8?q?=E6=96=99=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E5=8D=95=E6=8D=AE?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=90=88=E5=B9=B6=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_purchase_request/models/purchase_request.py | 1 + jikimo_purchase_request/models/stock_picking.py | 13 ++++++++++++- jikimo_purchase_request/models/stock_rule.py | 14 +++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/jikimo_purchase_request/models/purchase_request.py b/jikimo_purchase_request/models/purchase_request.py index 7287cb6a..3820b1ac 100644 --- a/jikimo_purchase_request/models/purchase_request.py +++ b/jikimo_purchase_request/models/purchase_request.py @@ -16,6 +16,7 @@ class PurchaseRequest(models.Model): ) rule_new_add = fields.Boolean('采购请求为规则创建', default=False, compute='_compute_state', store=True) + rule_purchase_to_request = fields.Boolean('采购单根据规则创建坯料采购申请', default=False) @api.depends('state') def _compute_state(self): diff --git a/jikimo_purchase_request/models/stock_picking.py b/jikimo_purchase_request/models/stock_picking.py index 97b294f3..037484c7 100644 --- a/jikimo_purchase_request/models/stock_picking.py +++ b/jikimo_purchase_request/models/stock_picking.py @@ -44,4 +44,15 @@ class StockPicking(models.Model): purchase_request_lines.move_dest_ids = [ (4, x.id) for x in backorder_ids.move_ids if x.product_id.id in purchase_request_lines.mapped('product_id.id') ] - return res \ No newline at end of file + return res + + def _subcontracted_produce(self, subcontract_details): + super()._subcontracted_produce(subcontract_details) + + # 判断是否根据规则生成新的采购申请单据,如果生成则修改状态为 approved + if self: + pr_ids = self.env["purchase.request"].sudo().search( + [('origin', 'like', self.name), ('rule_purchase_to_request', '=', True), ('state', '=', 'draft')]) + if pr_ids: + pr_ids.write({'need_validation': False}) + pr_ids.write({"state": "approved", 'need_validation': True, 'rule_new_add': False}) diff --git a/jikimo_purchase_request/models/stock_rule.py b/jikimo_purchase_request/models/stock_rule.py index 4a99e804..a6d3d893 100644 --- a/jikimo_purchase_request/models/stock_rule.py +++ b/jikimo_purchase_request/models/stock_rule.py @@ -26,7 +26,7 @@ class StockRule(models.Model): request_data = rule._prepare_purchase_request( procurement.origin, procurement.values ) - request_data.update({'rule_new_add': True}) + request_data = self._update_request_data(procurement, request_data) pr = purchase_request_model.create(request_data) cache[domain] = pr elif ( @@ -44,6 +44,18 @@ class StockRule(models.Model): request_line_data.update({'origin': procurement.origin}) purchase_request_line_model.create(request_line_data) + def _update_request_data(self, procurement, request_data): + sp = self.env['stock.picking'].sudo().search([('name', '=', procurement.origin)]) + if len(sp) == 1: + po = self.env['purchase.order'].sudo().search( + [('name', '=', sp.origin), ('purchase_type', '=', 'outsourcing')]) + if po: + request_data.update({'rule_purchase_to_request': True}) + else: + request_data.update({'rule_new_add': True}) + return request_data + + def _run_buy(self, procurements): # 如果补货组相同,并且产品相同,则合并 procurements_dict = defaultdict()