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

77 lines
2.7 KiB
Python

# Copyright 2016-20 ForgeFlow S.L. (http://www.forgeflow.com)
# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from odoo import api, fields, models
_REPLENISH_METHODS = [
("replenish", "Replenished"),
("replenish_override", "Replenished Override"),
("min_max", "Min-max"),
]
_ITEM_TYPES = [
("manufactured", "Manufactured"),
("purchased", "Purchased"),
("distributed", "Distributed"),
]
class StockBufferProfile(models.Model):
_name = "stock.buffer.profile"
_description = "Stock Buffer Profile"
@api.depends(
"item_type",
"lead_time_id",
"lead_time_id.name",
"lead_time_id.factor",
"variability_id",
"variability_id.name",
"variability_id.factor",
"distributed_reschedule_max_proc_time",
)
def _compute_name(self):
"""Get the right summary for this job."""
for rec in self:
name = "{} {}, {}({}), {}({})".format(
rec.replenish_method,
rec.item_type,
rec.lead_time_id.name,
rec.lead_time_id.factor,
rec.variability_id.name,
rec.variability_id.factor,
)
if rec.distributed_reschedule_max_proc_time > 0.0:
name += ", {}min".format(rec.distributed_reschedule_max_proc_time)
rec.name = name
name = fields.Char(compute="_compute_name", store=True)
replenish_method = fields.Selection(
string="Replenishment method", selection=_REPLENISH_METHODS, required=True
)
item_type = fields.Selection(selection=_ITEM_TYPES, required=True)
lead_time_id = fields.Many2one(
comodel_name="stock.buffer.profile.lead.time", string="Lead Time Factor"
)
variability_id = fields.Many2one(
comodel_name="stock.buffer.profile.variability", string="Variability Factor"
)
company_id = fields.Many2one(
"res.company",
"Company",
)
replenish_distributed_limit_to_free_qty = fields.Boolean(
string="Limit replenishment to free quantity",
default=False,
help="When activated, the recommended quantity will be maxed at "
"the quantity available in the replenishment source location.",
)
distributed_reschedule_max_proc_time = fields.Float(
string="Re-Schedule Procurement Max Proc. Time (minutes)",
default=0.0,
help="When you request procurement from a buffer, their scheduled"
" date is rescheduled to now + this procurement time (in minutes)."
" Their scheduled date represents the latest the transfers should"
" be done, and therefore, past this timestamp, considered late.",
)