oca-technical/odoo-bringout-oca-ddmrp-ddmrp/ddmrp/models/stock_rule.py
2025-08-29 15:43:03 +02:00

92 lines
2.7 KiB
Python

# Copyright 2018 Camptocamp (https://www.camptocamp.com)
# Copyright 2019-20 ForgeFlow S.L. (http://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from odoo import models
class StockRule(models.Model):
_inherit = "stock.rule"
def _prepare_mo_vals(
self,
product_id,
product_qty,
product_uom,
location_id,
name,
origin,
company_id,
values,
bom,
):
result = super(StockRule, self)._prepare_mo_vals(
product_id,
product_qty,
product_uom,
location_id,
name,
origin,
company_id,
values,
bom,
)
# TODO: stock_orderpoint_mrp_link: tests!
if "buffer_id" in values:
result["buffer_id"] = values["buffer_id"].id
elif "buffer_ids" in values:
# We take the always first value as in case of chain procurements,
# the procurements are resolved first and then the moves are
# merged. Thus here we are going to have only one buffer in
# in buffer_ids.
result["buffer_id"] = values["buffer_ids"][0].id
return result
def _run_manufacture(self, procurements):
super()._run_manufacture(procurements)
for procurement, _rule in procurements:
buffer = procurement.values.get("buffer_id")
if buffer:
buffer.sudo().cron_actions()
return True
# TODO: stock_orderpoint_move_link: tests!
def _get_stock_move_values(
self,
product_id,
product_qty,
product_uom,
location_id,
name,
origin,
company_id,
values,
):
vals = super()._get_stock_move_values(
product_id,
product_qty,
product_uom,
location_id,
name,
origin,
company_id,
values,
)
if "buffer_id" in values:
vals["buffer_ids"] = [(4, values["buffer_id"].id)]
elif "buffer_ids" in values:
vals["buffer_ids"] = [(4, o.id) for o in values["buffer_ids"]]
return vals
def _update_purchase_order_line(
self, product_id, product_qty, product_uom, company_id, values, line
):
vals = super()._update_purchase_order_line(
product_id, product_qty, product_uom, company_id, values, line
)
if "buffer_id" in values:
vals["buffer_ids"] = [(4, values["buffer_id"].id)]
# If the procurement was run by a stock move.
elif "buffer_ids" in values:
vals["buffer_ids"] = [(4, o.id) for o in values["buffer_ids"]]
return vals