Files
test/jikimo_purchase_request/models/stock_rule.py

90 lines
4.0 KiB
Python

from odoo import api, fields, models
from collections import defaultdict
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):
# 如果补货组相同,并且产品相同,则合并
# 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(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