57 lines
2.4 KiB
Python
57 lines
2.4 KiB
Python
from odoo import api, fields, models
|
|
|
|
|
|
class StockRule(models.Model):
|
|
_inherit = "stock.rule"
|
|
|
|
def create_purchase_request(self, procurement_group):
|
|
"""
|
|
Create a purchase request containing procurement order product.
|
|
"""
|
|
procurement = procurement_group[0]
|
|
rule = procurement_group[1]
|
|
purchase_request_model = self.env["purchase.request"]
|
|
purchase_request_line_model = self.env["purchase.request.line"]
|
|
cache = {}
|
|
pr = self.env["purchase.request"]
|
|
domain = rule._make_pr_get_domain(procurement.values)
|
|
if domain in cache:
|
|
pr = cache[domain]
|
|
elif domain:
|
|
pr = self.env["purchase.request"].search([dom for dom in domain])
|
|
pr = pr[0] if pr else False
|
|
cache[domain] = pr
|
|
if not pr:
|
|
request_data = rule._prepare_purchase_request(
|
|
procurement.origin, procurement.values
|
|
)
|
|
request_data.update({'rule_new_add': True})
|
|
pr = purchase_request_model.create(request_data)
|
|
cache[domain] = pr
|
|
elif (
|
|
not pr.origin
|
|
or procurement.origin not in pr.origin.split(", ")
|
|
and procurement.origin != "/"
|
|
):
|
|
if pr.origin:
|
|
if procurement.origin:
|
|
pr.write({"origin": pr.origin + ", " + procurement.origin})
|
|
else:
|
|
pr.write({"origin": procurement.origin})
|
|
# Create Line
|
|
request_line_data = rule._prepare_purchase_request_line(pr, procurement)
|
|
request_line_data.update({'origin': procurement.origin})
|
|
purchase_request_line_model.create(request_line_data)
|
|
|
|
def _run_buy(self, procurements):
|
|
res = super(StockRule, self)._run_buy(procurements)
|
|
# 判断是否根据规则生成新的采购申请单据,如果生成则修改状态为 approved
|
|
origins = list(set([procurement[0].origin for procurement in procurements]))
|
|
for origin in origins:
|
|
pr_ids = self.env["purchase.request"].sudo().search(
|
|
[('origin', 'like', origin), ('rule_new_add', '=', True), ('state', '=', 'draft')])
|
|
if pr_ids:
|
|
pr_ids.write({'need_validation': False})
|
|
pr_ids.write({"state": "approved", 'need_validation': True, 'rule_new_add': False})
|
|
return res
|