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()