Repository
OCA/ddmrp · module folder · Try on Runboat
Module version
Category
Warehouse
Folder size
1.12 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://github.com/OCA/ddmrp
Last tracking update
2026-08-14 17:39:02
Authors
Odoo Community Association (OCA), ForgeFlow
Maintainers
Odoo Community Association (OCA), ForgeFlow
Committers
Lois Rilo, Jordi Ballester Alomar, Don Kendall, Weblate, OCA-git-bot, oca-ci, DavidJForgeFlow, Paula Marfull, dkendall
Odoo dependencies
Python dependencies
bokeh==3.9.0
System dependencies
None
Required by
ddmrp_adjustment, ddmrp_chatter, ddmrp_coverage_days, ddmrp_exclude_moves_adu_calc, ddmrp_history, ddmrp_purchase_hide_onhand_status, ddmrp_report_part_flow_index, ddmrp_warning, stock_buffer_capacity_limit, stock_buffer_route, stock_buffer_sales_analysis
Description
Demand Driven Material Requirements Planning is a formal multi-echelon
planning and execution method developed by Ms. Carol Ptak and Mr. Chad
Smith.

DDMRP combines blended aspects of Material Requirements Planning (MRP),
Distribution Requirements Planning (DRP) with the pull and visibility
emphases found in Lean and the Theory of Constraints and the variability
reduction emphasis of Six Sigma.

This method has five sequential components:

1.  *Strategic Inventory Positioning*. Answers the question "Given our
    system and environment, where should we place inventory to have the
    best protection?" and determines where should decoupling points of
    inventory be placed.
2.  *Buffer Profiles and Levels*. Determine the amount of protection at
    those decoupling points.
3.  *Dynamic Adjustments*. Allow the company to adapt buffers to group
    and individual part trait changes over time through the use of
    several types of adjustments.
4.  *Demand Driven Planning*. Allow to launch purchase orders (POs),
    manufacturing orders (MOs) and Transfer Orders (TOs) based on the
    priority dictated by the buffers.
5.  *Visible and Collaborative Execution*. These POs, MOs and TOs have
    to be effectively managed to synchronize with the changes that often
    occur within the "execution horizon."

These five components work together to greatly dampen, if not eliminate,
the nervousness of traditional MRP systems and the bullwhip effect in
complex and challenging environments.

This approach provides real information about those parts that are truly
at risk of negatively impacting the planned availability of inventory.

DDMRP sorts the significant few items that require attention from the
many parts that are being managed. Under the DDMRP approach, fewer
planners can make better decisions more quickly. That means companies
will be better able to leverage their working and human capital.

Demand Driven Material Requirements Planning is quickly being adopted by
a wide variety of leading companies across the world.

Some of the benefits reported by the DDMRP method include:

- High fill rate performance
- Lead time reductions
- Inventory reductions, while improving customer service
- Eliminate costs related to expedite
- Planners see priorities instead of constantly fighting the conflicting
  messages of MRP

It is highly recommended to read the book 'Demand Driven Material
Requirements Planning (DDMRP)' by Carol Ptak and Chad Smith.

Code Analysis

Views touched (39)
XML IDNameModelTypeStatus
ddmrp_duplicate_buffer_wizard Ddmrp Duplicate Buffer Wizard ddmrp.duplicate.buffer form New
mrp_bom_change_location_wizard Mrp Bom Change Location Wizard mrp.bom.change.location form New
mrp_bom_form_view mrp.bom.form - ddmrp mrp.bom form Inherits mrp.mrp_bom_form_view
mrp_bom_line_view_form mrp.bom.line.form mrp.bom.line form Inherits mrp.mrp_bom_line_view_form
mrp_production_tree_view mrp.production.tree mrp.production tree Inherits mrp.mrp_production_tree_view
product_normal_form_view_inherit product.product.form.inherit product.product form Inherits product.product_normal_form_view
product_template_only_form_view_inherit product.template.product.form.inherit product.template form Inherits product.product_template_only_form_view
purchase_order_form purchase.order.form - ddmrp purchase.order form Inherits purchase.purchase_order_form
purchase_order_line_execution_tree purchase.order.line.tree - ddmrp purchase.order.line list New
purchase_order_line_form2 purchase.order.line.form2 purchase.order.line Inherits purchase.purchase_order_line_form2
purchase_order_line_search purchase.order.line.search - ddmrp purchase.order.line search Inherits purchase.purchase_order_line_search
report_mrp_bom_inherit_ddmrp report_mrp_bom_inherit_ddmrp ir.ui.view qweb Inherits mrp.report_mrp_bom
report_mrp_bom_pdf_line_inherit_ddmrp report_mrp_bom_pdf_line_inherit_ddmrp ir.ui.view qweb Inherits mrp.report_mrp_bom_pdf_line
res_config_settings_view_form res.config.settings.view.form.inherit.ddmrp res.config.settings form Inherits base.res_config_settings_view_form
stock_buffer_search stock.buffer.search stock.buffer search New
stock_buffer_view_form stock.buffer.form stock.buffer form New
stock_buffer_view_tree stock.buffer.tree stock.buffer list New
view_make_procurement_buffer_wizard Request Procurement make.procurement.buffer form New
view_move_consumption_pivot stock.move.consumption.pivot stock.move pivot New
view_move_form stock.move.form stock.move form Inherits stock.view_move_form
view_move_search stock.move.search stock.move search Inherits stock.view_move_search
view_move_tree stock.move.tree stock.move tree Inherits stock.view_move_tree
view_mrp_production_filter mrp.production.select mrp.production Inherits mrp.view_mrp_production_filter
view_picking_form stock.picking.form.inherit stock.picking form Inherits stock.view_picking_form
view_product_adu_calculation_method_form product.adu.calculation.method.form product.adu.calculation.method form New
view_product_adu_calculation_method_search product.adu.calculation.method.search product.adu.calculation.method search New
view_product_adu_calculation_method_tree product.adu.calculation.method.tree product.adu.calculation.method list New
view_purchase_order_filter request.quotation.select - ddmrp purchase.order Inherits purchase.view_purchase_order_filter
view_run_ddmrp_wizard ddmrp.run.form ddmrp.run form New
view_stock_buffer_profile_form stock.buffer.profile.form stock.buffer.profile form New
view_stock_buffer_profile_lead_time_form stock.buffer.profile.lead.time.form stock.buffer.profile.lead.time form New
view_stock_buffer_profile_lead_time_search stock.buffer.profile.lead.time.search stock.buffer.profile.lead.time search New
view_stock_buffer_profile_lead_time_tree stock.buffer.profile.lead.time.tree stock.buffer.profile.lead.time list New
view_stock_buffer_profile_search stock.buffer.profile.search stock.buffer.profile search New
view_stock_buffer_profile_tree stock.buffer.profile.tree stock.buffer.profile list New
view_stock_buffer_profile_variability_form stock.buffer.profile.variability.form stock.buffer.profile.variability form New
view_stock_buffer_profile_variability_search stock.buffer.profile.variability.search stock.buffer.profile.variability search New
view_stock_buffer_profile_variability_tree stock.buffer.profile.variability.tree stock.buffer.profile.variability list New
view_warehouse stock.warehouse stock.warehouse Inherits stock.view_warehouse
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (27)

New fields (3)
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='New Location'
  • product_id Many2one → product.product
    comodel_name='product.product' string='New Product'
  • type Selection
    required=True selection=[('both', 'Change both values'), ('product', 'Change Product'), ('location', 'Change Location')] string='Duplication Type'
Public methods (2)
  • action_duplicate_buffer(self)
  • default_get(self, fields_list)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • run_cron_ddmrp(self)
  • run_cron_ddmrp_adu(self)

New fields (2)
  • item_ids One2many → make.procurement.buffer.item
    comodel_name='make.procurement.buffer.item' inverse_name='wiz_id' string='Items'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='If set, will be used as preferred vendor for purchase routes.' string='Vendor'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • make_procurement(self)

New fields (9)
  • buffer_id Many2one → stock.buffer
    comodel_name='stock.buffer' readonly=False string='Stock Buffer'
  • date_planned Datetime
    required=False string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' readonly=True string='Location'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True string='Product'
  • qty Float
  • recommended_qty Float
    readonly=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' readonly=True string='Warehouse'
  • wiz_id Many2one → make.procurement.buffer
    comodel_name='make.procurement.buffer' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (4)
  • buffer_id Many2one → stock.buffer
    comodel_name='stock.buffer' compute='_compute_buffer' string='Stock Buffer'
  • context_location_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_context_location' string='Stock Location'
  • dlt Float
    compute='_compute_dlt' string='Decoupled Lead Time (days)'
  • is_buffered Boolean
    compute='_compute_is_buffered' help='True when the product has an DDMRP buffer associated.' string='Buffered?'
Public methods (1)
  • action_change_context_location(self)

New fields (1)
  • location_id Many2one → stock.location
    comodel_name='stock.location'
Public methods (2)
  • action_change_location(self)
  • default_get(self, fields_list)
    @api.model

New fields (4)
  • buffer_id Many2one → stock.buffer
    comodel_name='stock.buffer' compute='_compute_is_buffered' string='Stock Buffer'
  • context_location_id Many2one
    related='bom_id.context_location_id'
  • dlt Float
    compute='_compute_dlt' string='Decoupled Lead Time (days)'
  • is_buffered Boolean
    compute='_compute_is_buffered' help='True when the product has an DDMRP buffer associated.' string='Buffered?'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • buffer_id Many2one → stock.buffer
    comodel_name='stock.buffer' index=True string='Stock Buffer'
  • execution_priority_level Selection
    readonly=True selection=_PRIORITY_LEVEL string='Buffer On-Hand Alert Level'
  • on_hand_percent Float
    string='On Hand/TOR (%)'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (9)
  • company_id Many2one → res.company
    comodel_name='res.company' string='Company'
  • factor_future Float
    default=0.5 help='When using a blended method, this is the relative weight assigned to the future part of the combination.' string='Future Factor'
  • factor_past Float
    default=0.5 help='When using a blended method, this is the relative weight assigned to the past part of the combination.' string='Past Factor'
  • horizon_future Float
    help='Length-of-period horizon in days looking forward.' string='Future Horizon'
  • horizon_past Float
    help='Length-of-period horizon in days looking past.' string='Past Horizon'
  • method Selection
    selection='_get_calculation_method' string='Calculation method'
  • name Char
    required=True
  • source_future Selection
    help='Information source used for future calculation.' selection='_get_source_selection' string='Future Source'
  • source_past Selection
    help='Information source used for past calculation.' selection='_get_source_selection' string='Past Source'
Public methods (0)

No public methods.

New fields (2)
  • buffer_count Integer
    compute='_compute_buffer_count'
  • buffer_ids One2many → stock.buffer
    comodel_name='stock.buffer' inverse_name='product_id' string='Stock Buffers'
Public methods (2)
  • action_view_stock_buffers(self)
  • write(self, values)

New fields (1)
  • buffer_count Integer
    compute='_compute_buffer_count'
Public methods (1)
  • action_view_stock_buffers(self)

New fields (1)
  • ddmrp_comment Text
    string='Follow-up Notes'
Public methods (0)

No public methods.

New fields (4)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' copy=False readonly=True string='Stock Buffers'
  • ddmrp_comment Text
    readonly=False related='order_id.ddmrp_comment'
  • execution_priority_level Selection
    readonly=True selection=_PRIORITY_LEVEL string='Buffer On-Hand Status Level'
  • on_hand_percent Float
    readonly=True string='On Hand/TOR (%)'
Public methods (2)
  • create(self, vals)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • ddmrp_adu_calc_include_scrap Boolean
    string='Include scrap locations in ADU calculation'
  • ddmrp_auto_update_nfp Boolean
    help="Transfer status changes can trigger the update of relevant buffer's NFP." string='Update NFP on Stock Buffers on relevant events.'
  • ddmrp_qty_multiple_tolerance Float
    string='Qty Multiple Tolerance'
Public methods (0)

No public methods.

New fields (11)
  • ddmrp_adu_calc_include_scrap Boolean
    readonly=False related='company_id.ddmrp_adu_calc_include_scrap'
  • ddmrp_auto_update_nfp Boolean
    readonly=False related='company_id.ddmrp_auto_update_nfp'
  • ddmrp_qty_multiple_tolerance Float
    readonly=False related='company_id.ddmrp_qty_multiple_tolerance'
  • module_ddmrp_adjustment Boolean
    string='apply adjustments to dynamically alter buffers'
  • module_ddmrp_chatter Boolean
    string='Chatter in Stock Buffers'
  • module_ddmrp_coverage_days Boolean
    string='Shows the current on-hand for stock buffers expressed as coverage days.'
  • module_ddmrp_history Boolean
    string='Store historical data from stock buffers'
  • module_ddmrp_packaging Boolean
    string='Use packagings on stock buffers.'
  • module_ddmrp_purchase_hide_onhand_status Boolean
    string='Hide Purchase On-Hand Status'
  • module_ddmrp_warning Boolean
    string='Configuration Warnings in Stock Buffers'
  • module_stock_buffer_capacity_limit Boolean
    string='Storage Capacity Limits'
Public methods (0)

No public methods.

New fields (79)
  • active Boolean
    default=True
  • adu Float
    default=0.0 digits='Average Daily Usage' help='Average Daily Usage' readonly=True string='ADU'
  • adu_calculation_method Many2one → product.adu.calculation.method
    comodel_name='product.adu.calculation.method' required=True string='ADU calculation method'
  • adu_calculation_method_source_future Selection
    related='adu_calculation_method.source_future'
  • adu_calculation_method_source_past Selection
    related='adu_calculation_method.source_past'
  • adu_calculation_method_type Selection
    related='adu_calculation_method.method'
  • adu_fixed Float
    default=1.0 digits='Average Daily Usage' string='Fixed ADU'
  • auto_procure Boolean
    default=False help='Whenever the buffer is recomputed, if this option is set, it will procure automatically if needed.'
  • auto_procure_option Selection
    default='standard' required=True selection=[('standard', 'When recommended (NFP below TOY)'), ('stockout', 'When in stockout')]
  • buffer_profile_id Many2one → stock.buffer.profile
    comodel_name='stock.buffer.profile' required=True string='Buffer Profile'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • ddmrp_chart Text
    compute='_compute_ddmrp_chart_planning' string='DDMRP Chart'
  • ddmrp_chart_execution Text
    compute='_compute_ddmrp_chart_execution' string='DDMRP Execution Chart'
  • ddmrp_demand_chart Text
    compute='_compute_ddmrp_demand_supply_chart' string='DDMRP Demand Chart'
  • ddmrp_supply_chart Text
    compute='_compute_ddmrp_demand_supply_chart' string='DDMRP Supply Chart'
  • demand_stock_move_ids Many2many → stock.move
    comodel_name='stock.move' help='All demand stock moves for this buffer'
  • distributed_source_location_id Many2one → stock.location
    comodel_name='stock.location' help='Source location from where goods will be replenished. Computed when buffer is refreshed from following the Stock Rules.' index=True readonly=True string='Replenishment Location'
  • distributed_source_location_qty Float
    compute='_compute_distributed_source_location_qty' help='Quantity free for distributed buffer in the source location. When a procurement is requested, if the option is active on the profile, it will be limited to this quantity.' search='_search_distributed_source_location_qty' string='Source Location Free Quantity (distributed)'
  • dlt Float
    compute='_compute_dlt' help='Decoupled Lead Time (days)' string='DLT (days)'
  • execution_priority_level Selection
    readonly=True selection=_PRIORITY_LEVEL store=True string='On-Hand Alert Level'
  • extra_lead_time Float
    default=0.0 help="When defined, this lead time will be added to the decoupled lead time for the computation of the zones size (it won't affect planned date for procurements).\nThis is particularly useful in situations of infrequent but periodic demand. E.g. We receive a large order every 30 days, whereas the supplier takes 10 days to supply. \nIn this case the yellow zone must cover for the entire cycle of 30 days of demand.\nIn situations with infrequent demand the ADU tends to be very small, and every new order would be treated as a spike, when \nin reality this is not an exceptional situation." string='Extra lead time (for Sizing)'
  • green_override Float
    string='Green Zone (Override)'
  • green_zone_lt_factor Float
    compute='_compute_green_zone' help='Green zone Lead Time Factor' store=True string='Green Zone Lead Time Factor'
  • green_zone_moq Float
    compute='_compute_green_zone' digits='Product Unit of Measure' help='Green zone qty option considering minimum order quantity' store=True string='Green Zone Minimum Order Quantity'
  • green_zone_oc Float
    compute='_compute_green_zone' help='Green zone qty option considering desired Order Cycle' store=True string='Green Zone Order Cycle'
  • green_zone_qty Float
    compute='_compute_green_zone' digits='Product Unit of Measure' store=True
  • group_id Many2one → stock.rule
    comodel_name='stock.rule' copy=False help='Moves created through this buffer will be put in this procurement group. If none is given, the moves generated by stock rules will be grouped into one big picking.' string='Procurement Group'
  • incoming_dlt_qty Float
    readonly=True string='Incoming (Within DLT)'
  • incoming_outside_dlt_qty Float
    readonly=True string='Incoming (Outside DLT)'
  • incoming_total_qty Float
    readonly=True string='Total Incoming'
  • item_type Selection
    related='buffer_profile_id.item_type'
  • lead_days Integer
    default=1 help='Lead time for distributed products.' args: 'Lead Time (Distributed)'
  • location_id Many2one → stock.location
    comodel_name='stock.location' ondelete='cascade' required=True string='Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' help='The main supplier is the first listed supplier defined on the product that is valid for this product variant. Any date restrictions are not taken into account.' index=True store=True string='Main Supplier'
  • minimum_order_quantity Float
    digits='Product Unit of Measure'
  • mrp_production_ids One2many → mrp.production
    comodel_name='mrp.production' inverse_name='buffer_id' string='Manufacturing Orders'
  • name Char
    copy=False default=<expr> required=True
  • net_flow_position Float
    digits='Product Unit of Measure' readonly=True
  • net_flow_position_percent Float
    readonly=True string='Net flow position (% of TOG)'
  • on_hand_percent Float
    readonly=True store=True string='On Hand/TOR (%)'
  • on_hand_target_max Float
    compute='_compute_on_hand_target_max' help='It denotes how far you are on average from the target' string='Target On Hand (Max)'
  • on_hand_target_min Float
    help='It denotes what the target stock on hand range is.' related='top_of_red' string='On Hand Target Range'
  • on_hand_target_position Float
    compute='_compute_on_hand_target_position' help='It denotes what the target stock on hand is. The computation is: OH Target = TOR + Green Zone / 2 ' string='Avg On Hand Target Position'
  • order_cycle Float
    string='Minimum Order Cycle (days)'
  • order_spike_horizon Float
  • order_spike_threshold Float
    compute='_compute_order_spike_threshold' digits='Product Unit of Measure' store=True
  • planning_priority_level Selection
    readonly=True selection=_PRIORITY_LEVEL
  • procure_max_qty Float
    digits='Product Unit of Measure' help='Maximum qty for a single procurement' string='Maximum Procure Batch'
  • procure_min_qty Float
    digits='Product Unit of Measure' help='Minimum qty for a single procurement' string='Minimum Procure Batch'
  • procure_recommended_qty Float
    compute='_compute_procure_recommended_qty' store=True string='Procure Recommendation'
  • procure_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_procure_uom_id' domain="[('id', 'in', valid_uom_ids)]" readonly=False store=True string='Procurement UoM'
  • product_categ_id Many2one → product.category
    comodel_name='product.category' readonly=True related='product_id.categ_id' store=True string='Product Category'
  • product_id Many2one → product.product
    comodel_name='product.product' domain=[('is_storable', '=', True)] ondelete='cascade' required=True string='Product'
  • product_location_qty_available_not_res Float
    help='Quantity available in this stock buffer, this is the total quantity on hand minus the outgoing reservations.' readonly=True string='Quantity On Hand (Unreserved)'
  • product_type Selection
    readonly=True related='product_id.type'
  • product_uom Many2one
    related='product_id.uom_id'
  • product_vendor_code Char
    compute='_compute_product_vendor_code' string='Vendor Code'
  • purchase_line_ids Many2many → purchase.order.line
    comodel_name='purchase.order.line' copy=False readonly=True string='Purchase Order Lines'
  • qty_multiple Float
    default=1 digits='Product Unit of Measure' help='The procurement quantity will be rounded up to this multiple. If it is 0, the exact quantity will be used.' required=True
  • qualified_demand Float
    digits='Product Unit of Measure' readonly=True
  • qualified_demand_mrp_move_ids Many2many → mrp.move
    comodel_name='mrp.move'
  • qualified_demand_stock_move_ids Many2many → stock.move
    column1='stock_buffer_id' column2='stock_move_id' comodel_name='stock.move' help='Stock moves considered qualified demand for this buffer' relation='stock_buffer_qualified_demand_stock_move_rel'
  • red_base_qty Float
    compute='_compute_red_zone' digits='Product Unit of Measure' store=True
  • red_override Float
    string='Red Zone (Override)'
  • red_safety_qty Float
    compute='_compute_red_zone' digits='Product Unit of Measure' store=True
  • red_zone_qty Float
    compute='_compute_red_zone' digits='Product Unit of Measure' store=True
  • replenish_method Selection
    related='buffer_profile_id.replenish_method'
  • rfq_inside_dlt_qty Float
    help='Request for Quotation total quantity that is planned inside of the DLT horizon.' readonly=True string='RFQ Qty (Inside DLT)'
  • rfq_outside_dlt_qty Float
    help='Request for Quotation total quantity that is planned outside of the DLT horizon.' readonly=True string='RFQ Qty (Outside DLT)'
  • rfq_total_qty Float
    help='Request for Quotation total quantity that is planned' readonly=True string='RFQ Total Qty'
  • show_execution_chart Boolean
  • top_of_green Float
    compute='_compute_green_zone' digits='Product Unit of Measure' store=True
  • top_of_red Float
    related='red_zone_qty' store=True string='Top Of Red'
  • top_of_yellow Float
    compute='_compute_yellow_zone' digits='Product Unit of Measure' store=True
  • used_in_bom_count Integer
    related='product_id.used_in_bom_count'
  • valid_uom_ids Many2many → uom.uom
    comodel_name='uom.uom' compute='_compute_valid_uom_ids'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
  • yellow_override Float
    string='Yellow Zone (Override)'
  • yellow_zone_qty Float
    compute='_compute_yellow_zone' digits='Product Unit of Measure' store=True
Public methods (30)
  • action_dummy(self)
  • action_request_procurement(self)
  • action_used_in_bom(self)
  • action_view_bom(self)
  • action_view_future_adu_direct_demand(self)
  • action_view_future_adu_indirect_demand(self)
  • action_view_mrp_productions(self)
  • action_view_past_adu_direct_demand(self)
  • action_view_past_adu_indirect_demand(self)
  • action_view_purchase(self)
  • action_view_qualified_demand_moves(self)
  • action_view_qualified_demand_mrp(self)
  • action_view_stock_demand_estimates(self)
  • action_view_supply_moves(self)
  • action_view_supply_moves_inside_dlt_window(self)
  • action_view_supply_moves_outside_dlt_window(self)
  • action_view_supply_rfq_inside_dlt_window(self)
  • action_view_supply_rfq_outside_dlt_window(self)
  • action_view_yearly_consumption(self)
  • create(self, vals_list)
    @api.model_create_multi
  • cron_actions(self, only_nfp=False)
    This method is meant to be inherited by other modules in order to enhance extensibility.
  • cron_ddmrp(self, automatic=False, domain=None)
    @api.model
    Calculate key DDMRP parameters for each buffer. Called by cronjob.
  • cron_ddmrp_adu(self, automatic=False, domain=None)
    @api.model
    calculate ADU for each DDMRP buffer. Called by cronjob.
  • default_get(self, fields)
    @api.model
  • do_auto_procure(self)
  • get_ddmrp_chart_execution(self)
  • get_ddmrp_chart_planning(self)
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • refresh_buffer(self)
  • write(self, vals)

New fields (8)
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • distributed_reschedule_max_proc_time Float
    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.' string='Re-Schedule Procurement Max Proc. Time (minutes)'
  • item_type Selection
    required=True selection=_ITEM_TYPES
  • lead_time_id Many2one → stock.buffer.profile.lead.time
    comodel_name='stock.buffer.profile.lead.time' string='Lead Time Factor'
  • name Char
    compute='_compute_name' store=True
  • replenish_distributed_limit_to_free_qty Boolean
    default=False help='When activated, the recommended quantity will be maxed at the quantity available in the replenishment source location.' string='Limit replenishment to free quantity'
  • replenish_method Selection
    required=True selection=_REPLENISH_METHODS string='Replenishment method'
  • variability_id Many2one → stock.buffer.profile.variability
    comodel_name='stock.buffer.profile.variability' string='Variability Factor'
Public methods (0)

No public methods.

New fields (3)
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • factor Float
    required=True string='Lead Time Factor'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (3)
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • factor Float
    required=True string='Variability Factor'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (2)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' string='Linked Stock Buffers'
  • qualified_demand_buffer_ids Many2many → stock.buffer
    column1='stock_move_id' column2='stock_buffer_id' comodel_name='stock.buffer' relation='stock_buffer_qualified_demand_stock_move_rel' string='Qualified Demand For Buffers'
Public methods (3)
  • action_open_stock_move_source(self)
    Open the source record of the stock move, if it exists.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (1)
  • state Selection
    index=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_stock_buffer_open(self)
    Open a stock.buffer list related to products of the stock.picking.

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model

New fields (1)
  • nfp_incoming_safety_factor Float
    help='Factor used to compute the number of days to look into the future for incoming shipments for the purposes of the Net Flow position calculation.' args: 'Net Flow Position Incoming Safety Factor'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…