MRP Multi Level

mrp_multi_level
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/19.0/mrp_multi_level
VERSION
VERSION 1.0.3
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSLois Rilo, JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Hotdgo9
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
    - purchase_stock
    - stock_account
    - account
    - onboarding
    - analytic
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to calculate, based in known inventory, demand,
and supply, and based on parameters set at product variant level, the
new procurements for each product.

To do this, the calculation starts at top level of the bill of material
and explodes this down to the lowest level.

## Key Features

- MRP parameters set by product variant MRP area pairs.
- Cron job to calculate the MRP demand.
- Manually calculate the MRP demand.
- Confirm the calculated MRP demand and create PO's, or MO's.
- Able to see the products for which action is needed throught Planned
  Orders.
- Integration with [Stock Demand
  Estimates](https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_demand_estimate)
  system. Note: You need to install [mrp_multi_level_estimate
  module](https://github.com/OCA/manufacture/tree/12.0/mrp_multi_level_estimate).

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_list mrp.area.list mrp.area list New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_list mrp.inventory.list mrp.inventory list New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_move_view_form mrp.move.form mrp.move form New
mrp_move_view_list mrp.move.list mrp.move list New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_list mrp.planned.order.list mrp.planned.order list New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_list product.mrp.area.list product.mrp.area list New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location xpath Inherits stock.view_location_form
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (14)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (18)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    aggregator='avg' string='Forecasted Inventory'
  • initial_on_hand_qty Float
    aggregator='avg' string='Starting Inventory'
  • main_supplier_id Many2one
    readonly=True related='product_mrp_area_id.main_supplier_id' store=True string='Main Supplier'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • order_release_date Date
    compute='_compute_order_release_date' store=True
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product Parameters'
  • rfq_qty Float
    help='Quantity on Request for Quotation.\nThis quantity is included in the supply quantity but it is not confirmed yet.' string='RfQ'
  • running_availability Float
    aggregator='avg' help='Theoretical inventory level if all planned orders were released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (2)
  • action_open_planned_orders(self)
  • action_open_rfqs(self)

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • make_procurement(self)

New fields (10)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (21)
  • bom_id Many2one → mrp.bom
    args: 'mrp.bom'
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
  • current_qty Float
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • origin Char
    string='Source Document'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')]
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (5)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action, values=None)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)
  • should_build_time_phased_inventory(self, product_mrp_area)

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('phantom', 'Kit'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • origin Char
    string='Source Document'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order' index=True
Public methods (0)

No public methods.

New fields (27)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • distribution_lead_time Float
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_planner_id Many2one → res.users
    args: 'res.users'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' ondelete='cascade' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_bom_id Many2one → mrp.bom
    comodel_name='mrp.bom' compute='_compute_supply_method' string='Supply BoM'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
Public methods (4)
  • action_view_incoming_stock_moves(self)
  • action_view_outgoing_stock_moves(self)
  • action_view_stock_moves(self, domain)
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (2)
  • action_view_mrp_area_parameters(self)
  • write(self, values)

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)

New fields (1)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
Public methods (1)
  • action_view_mrp_area_location(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/18.0/mrp_multi_level
VERSION
VERSION 1.4.2
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSLois Rilo, Miquel Raïch, AaronHForgeFlow, Weblate, OCA-git-bot, oca-ci, RicardCForgeFlow, LauraCForgeFlow, JasminSForgeFlow, Camille Morand
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - purchase_stock
    - stock_account
    - account
    - onboarding
    - analytic
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to calculate, based in known inventory, demand,
and supply, and based on parameters set at product variant level, the
new procurements for each product.

To do this, the calculation starts at top level of the bill of material
and explodes this down to the lowest level.

## Key Features

- MRP parameters set by product variant MRP area pairs.
- Cron job to calculate the MRP demand.
- Manually calculate the MRP demand.
- Confirm the calculated MRP demand and create PO's, or MO's.
- Able to see the products for which action is needed throught Planned
  Orders.
- Integration with [Stock Demand
  Estimates](https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_demand_estimate)
  system. Note: You need to install [mrp_multi_level_estimate
  module](https://github.com/OCA/manufacture/tree/12.0/mrp_multi_level_estimate).

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_list mrp.area.list mrp.area list New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_list mrp.inventory.list mrp.inventory list New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_move_view_form mrp.move.form mrp.move form New
mrp_move_view_list mrp.move.list mrp.move list New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_list mrp.planned.order.list mrp.planned.order list New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_list product.mrp.area.list product.mrp.area list New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location xpath Inherits stock.view_location_form
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (14)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (18)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    aggregator='avg' string='Forecasted Inventory'
  • initial_on_hand_qty Float
    aggregator='avg' string='Starting Inventory'
  • main_supplier_id Many2one
    readonly=True related='product_mrp_area_id.main_supplier_id' store=True string='Main Supplier'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • order_release_date Date
    compute='_compute_order_release_date' store=True
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product Parameters'
  • rfq_qty Float
    help='Quantity on Request for Quotation.\nThis quantity is included in the supply quantity but it is not confirmed yet.' string='RfQ'
  • running_availability Float
    aggregator='avg' help='Theoretical inventory level if all planned orders were released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (2)
  • action_open_planned_orders(self)
  • action_open_rfqs(self)

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)

New fields (10)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (21)
  • bom_id Many2one → mrp.bom
    args: 'mrp.bom'
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
  • current_qty Float
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • origin Char
    string='Source Document'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')]
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (5)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action, values=None)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)
  • should_build_time_phased_inventory(self, product_mrp_area)

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('phantom', 'Kit'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • origin Char
    string='Source Document'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order' index=True
Public methods (0)

No public methods.

New fields (27)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • distribution_lead_time Float
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_planner_id Many2one → res.users
    args: 'res.users'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' ondelete='cascade' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_bom_id Many2one → mrp.bom
    comodel_name='mrp.bom' compute='_compute_supply_method' string='Supply BoM'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
Public methods (4)
  • action_view_incoming_stock_moves(self)
  • action_view_outgoing_stock_moves(self)
  • action_view_stock_moves(self, domain)
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (2)
  • action_view_mrp_area_parameters(self)
  • write(self, values)

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)

New fields (1)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
Public methods (1)
  • action_view_mrp_area_location(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/17.0/mrp_multi_level
VERSION
VERSION 1.4.1
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSPedro M. Baeza, Lois Rilo, JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, RicardCForgeFlow, LauraCForgeFlow, AlexPForgeFlow, JasminSForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - purchase_stock
    - stock_account
    - account
    - onboarding
    - analytic
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to calculate, based in known inventory, demand,
and supply, and based on parameters set at product variant level, the
new procurements for each product.

To do this, the calculation starts at top level of the bill of material
and explodes this down to the lowest level.

## Key Features

- MRP parameters set by product variant MRP area pairs.
- Cron job to calculate the MRP demand.
- Manually calculate the MRP demand.
- Confirm the calculated MRP demand and create PO's, or MO's.
- Able to see the products for which action is needed throught Planned
  Orders.
- Integration with [Stock Demand
  Estimates](https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_demand_estimate)
  system. Note: You need to install [mrp_multi_level_estimate
  module](https://github.com/OCA/manufacture/tree/12.0/mrp_multi_level_estimate).

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_tree mrp.area.tree mrp.area tree New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_inventory_tree mrp.inventory.tree mrp.inventory tree New
mrp_move_view_form mrp.move.form mrp.move form New
mrp_move_view_tree mrp.move.tree mrp.move tree New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
mrp_planned_order_view_tree mrp.planned.order.tree mrp.planned.order tree New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_mrp_area_tree product.mrp.area.tree product.mrp.area tree New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location xpath Inherits stock.view_location_form
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (14)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (18)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    group_operator='avg' string='Forecasted Inventory'
  • initial_on_hand_qty Float
    group_operator='avg' string='Starting Inventory'
  • main_supplier_id Many2one
    readonly=True related='product_mrp_area_id.main_supplier_id' store=True string='Main Supplier'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • order_release_date Date
    compute='_compute_order_release_date' store=True
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product Parameters'
  • rfq_qty Float
    help='Quantity on Request for Quotation.\nThis quantity is included in the supply quantity but it is not confirmed yet.' string='RfQ'
  • running_availability Float
    group_operator='avg' help='Theoretical inventory level if all planned orders were released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (2)
  • action_open_planned_orders(self)
  • action_open_rfqs(self)

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)

New fields (10)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (21)
  • bom_id Many2one → mrp.bom
    args: 'mrp.bom'
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
  • current_qty Float
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • origin Char
    string='Source Document'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')]
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (5)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action, values=None)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)
  • should_build_time_phased_inventory(self, product_mrp_area)

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('phantom', 'Kit'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • origin Char
    string='Source Document'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order' index=True
Public methods (0)

No public methods.

New fields (27)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • distribution_lead_time Float
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_planner_id Many2one → res.users
    args: 'res.users'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' ondelete='cascade' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_bom_id Many2one → mrp.bom
    comodel_name='mrp.bom' compute='_compute_supply_method' string='Supply BoM'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
Public methods (4)
  • action_view_incoming_stock_moves(self)
  • action_view_outgoing_stock_moves(self)
  • action_view_stock_moves(self, domain)
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (2)
  • action_view_mrp_area_parameters(self)
  • write(self, values)

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)

New fields (1)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
Public methods (1)
  • action_view_mrp_area_location(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/16.0/mrp_multi_level
VERSION
VERSION 1.7.1
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSLois Rilo, Jordi Ballester Alomar, JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Matt Taylor, BernatPForgeFlow, joan, RicardCForgeFlow, DavidJForgeFlow, LauraCForgeFlow, AlexPForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:50
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - purchase_stock
    - stock_account
    - account
    - analytic
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_tree mrp.area.tree mrp.area tree New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_inventory_tree mrp.inventory.tree mrp.inventory tree New
mrp_move_view_form mrp.move.form mrp.move form New
mrp_move_view_tree mrp.move.tree mrp.move tree New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
mrp_planned_order_view_tree mrp.planned.order.tree mrp.planned.order tree New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_mrp_area_tree product.mrp.area.tree product.mrp.area tree New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location xpath Inherits stock.view_location_form
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (14)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (18)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    group_operator='avg' string='Forecasted Inventory'
  • initial_on_hand_qty Float
    group_operator='avg' string='Starting Inventory'
  • main_supplier_id Many2one
    readonly=True related='product_mrp_area_id.main_supplier_id' store=True string='Main Supplier'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • order_release_date Date
    compute='_compute_order_release_date' store=True
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product Parameters'
  • rfq_qty Float
    help='Quantity on Request for Quotation.\nThis quantity is included in the supply quantity but it is not confirmed yet.' string='RfQ'
  • running_availability Float
    group_operator='avg' help='Theoretical inventory level if all planned orders were released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (2)
  • action_open_planned_orders(self)
  • action_open_rfqs(self)

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)

New fields (10)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (20)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
  • current_qty Float
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • origin Char
    string='Source Document'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')]
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (5)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action, values=None)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)
  • should_build_time_phased_inventory(self, product_mrp_area)

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('phantom', 'Kit'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • origin Char
    string='Source Document'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order' index=True
Public methods (0)

No public methods.

New fields (27)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • distribution_lead_time Float
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_planner_id Many2one → res.users
    args: 'res.users'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' ondelete='cascade' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_bom_id Many2one → mrp.bom
    comodel_name='mrp.bom' compute='_compute_supply_method' string='Supply BoM'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
Public methods (5)
  • action_view_incoming_stock_moves(self)
  • action_view_outgoing_stock_moves(self)
  • action_view_stock_moves(self, domain)
  • name_get(self)
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (2)
  • action_view_mrp_area_parameters(self)
  • write(self, values)

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)

New fields (1)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
Public methods (1)
  • action_view_mrp_area_location(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/15.0/mrp_multi_level
VERSION
VERSION 1.12.8
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSAlexandre Fayolle, Lois Rilo, OCA Transbot, Miquel Raïch, JordiMForgeFlow, AaronHForgeFlow, Weblate, OCA-git-bot, oca-ci, BernatPForgeFlow, Bernat Puig Font, RicardCForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:36
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - stock
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - purchase_stock
    - stock_account
    - account
    - analytic
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (24)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_tree mrp.area.tree mrp.area tree New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_inventory_tree mrp.inventory.tree mrp.inventory tree New
mrp_move_view_form mrp.move.form mrp.move form New
mrp_move_view_tree mrp.move.tree mrp.move tree New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
mrp_planned_order_view_tree mrp.planned.order.tree mrp.planned.order tree New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_mrp_area_tree product.mrp.area.tree product.mrp.area tree New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location field Inherits stock.view_location_form
view_location_search stock.location.search stock.location field Inherits stock.view_location_search
view_location_tree2 stock.location.tree stock.location field Inherits stock.view_location_tree2
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (13)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    group_operator='avg' string='Forecasted Inventory'
  • initial_on_hand_qty Float
    group_operator='avg' string='Starting Inventory'
  • main_supplier_id Many2one
    readonly=True related='product_mrp_area_id.main_supplier_id' store=True string='Main Supplier'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • order_release_date Date
    compute='_compute_order_release_date' store=True
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product Parameters'
  • running_availability Float
    group_operator='avg' help='Theoretical inventory level if all planned orders were released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (1)
  • action_open_planned_orders(self)

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)

New fields (10)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (20)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
  • current_qty Float
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • origin Char
    string='Source Document'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')]
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (5)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action, values=None)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)
  • should_build_time_phased_inventory(self, product_mrp_area)

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('phantom', 'Kit'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • origin Char
    string='Source Document'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order' index=True
Public methods (0)

No public methods.

New fields (27)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • distribution_lead_time Float
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_planner_id Many2one → res.users
    args: 'res.users'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' ondelete='cascade' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_bom_id Many2one → mrp.bom
    comodel_name='mrp.bom' compute='_compute_supply_method' string='Supply BoM'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
Public methods (5)
  • action_view_incoming_stock_moves(self)
  • action_view_outgoing_stock_moves(self)
  • action_view_stock_moves(self, domain)
  • name_get(self)
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (2)
  • action_view_mrp_area_parameters(self)
  • write(self, values)

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)

New fields (1)
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' help='Requirements for a particular MRP area are combined for the purposes of procurement by the MRP.' string='MRP Area'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/14.0/mrp_multi_level
VERSION
VERSION 1.15.0
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSLois Rilo, Jordi Ballester, OCA Transbot, Miquel Raïch, Sébastien Alix, oca-travis, Weblate, OCA-git-bot, oca-ci, davidborromeo, BernatPForgeFlow, Alessandro Uffreduzzi, Bernat Puig Font, oca-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - stock
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - purchase_stock
    - stock_account
    - account
    - analytic
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (24)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_tree mrp.area.tree mrp.area tree New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_inventory_tree mrp.inventory.tree mrp.inventory tree New
mrp_move_view_form mrp.move.form mrp.move form New
mrp_move_view_tree mrp.move.tree mrp.move tree New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
mrp_planned_order_view_tree mrp.planned.order.tree mrp.planned.order tree New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_mrp_area_tree product.mrp.area.tree product.mrp.area tree New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location field Inherits stock.view_location_form
view_location_search stock.location.search stock.location field Inherits stock.view_location_search
view_location_tree2 stock.location.tree stock.location field Inherits stock.view_location_tree2
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (13)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
    string='Date'
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    group_operator='avg' string='Forecasted Inventory'
  • initial_on_hand_qty Float
    group_operator='avg' string='Starting Inventory'
  • main_supplier_id Many2one
    readonly=True related='product_mrp_area_id.main_supplier_id' store=True string='Main Supplier'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • order_release_date Date
    compute='_compute_order_release_date' store=True string='Order Release Date'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product Parameters'
  • running_availability Float
    group_operator='avg' help='Theoretical inventory level if all planned orders were released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (1)
  • action_open_planned_orders(self)

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)

New fields (10)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] string='Supply Method'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (20)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
    string='Current Date'
  • current_qty Float
    string='Current Qty'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • origin Char
    string='Source Document'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')] string='State'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (4)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action, values=None)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True string='Due Date'
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • origin Char
    string='Source Document'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True ondelete='cascade' required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
Public methods (0)

No public methods.

New fields (26)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • distribution_lead_time Float
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_planner_id Many2one → res.users
    args: 'res.users'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] string='Supply Method'
Public methods (5)
  • action_view_incoming_stock_moves(self)
  • action_view_outgoing_stock_moves(self)
  • action_view_stock_moves(self, domain)
  • name_get(self)
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (2)
  • action_view_mrp_area_parameters(self)
  • write(self, values)

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)

New fields (1)
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' help='Requirements for a particular MRP area are combined for the purposes of procurement by the MRP.' string='MRP Area'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/13.0/mrp_multi_level
VERSION
VERSION 1.16.1
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSPedro M. Baeza, Lois Rilo, Jordi Ballester Alomar, OCA Transbot, Miquel Raïch, AaronHForgeFlow, ahenriquez, oca-travis, Weblate, OCA-git-bot, oca-ci, hveficent, Héctor Villarreal Ortega, BernatPForgeFlow, Bernat Puig Font, HviorForgeFlow, NuriaXForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - stock
    - barcodes
    - resource
    - purchase_stock
    - stock_account
    - account
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (24)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_tree mrp.area.tree mrp.area tree New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_inventory_tree mrp.inventory.tree mrp.inventory tree New
mrp_move_view_form mrp.move.form mrp.move form New
mrp_move_view_tree mrp.move.tree mrp.move tree New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
mrp_planned_order_view_tree mrp.planned.order.tree mrp.planned.order tree New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_mrp_area_tree product.mrp.area.tree product.mrp.area tree New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location field Inherits stock.view_location_form
view_location_search stock.location.search stock.location field Inherits stock.view_location_search
view_location_tree2 stock.location.tree stock.location field Inherits stock.view_location_tree2
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (13)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
    string='Date'
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    group_operator='avg' string='Forecasted Inventory'
  • initial_on_hand_qty Float
    group_operator='avg' string='Starting Inventory'
  • main_supplier_id Many2one
    readonly=True related='product_mrp_area_id.main_supplier_id' store=True string='Main Supplier'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • order_release_date Date
    compute='_compute_order_release_date' store=True string='Order Release Date'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product Parameters'
  • running_availability Float
    group_operator='avg' help='Theoretical inventory level if all planned orders were released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (1)
  • action_open_planned_orders(self)

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)

New fields (10)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] string='Supply Method'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.onchange('uom_id')

New fields (20)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
    string='Current Date'
  • current_qty Float
    string='Current Qty'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • origin Char
    string='Source Document'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')] string='State'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (4)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action, values=None)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)

New fields (17)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True string='Due Date'
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_planner_id Many2one
    readonly=True related='product_mrp_area_id.mrp_planner_id' store=True
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • origin Char
    string='Source Document'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
Public methods (0)

No public methods.

New fields (25)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_planner_id Many2one → res.users
    args: 'res.users'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] string='Supply Method'
Public methods (5)
  • action_view_incoming_stock_moves(self)
  • action_view_outgoing_stock_moves(self)
  • action_view_stock_moves(self, domain)
  • name_get(self)
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (2)
  • action_view_mrp_area_parameters(self)
  • write(self, values)

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)

New fields (1)
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' help='Requirements for a particular MRP area are combined for the purposes of procurement by the MRP.' string='MRP Area'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/12.0/mrp_multi_level
VERSION
VERSION 2.4.1
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow, Ucamco
COMMITTERS
COMMITTERSHolger Brunn, Lois Rilo, OCA Transbot, AaronHForgeFlow, oca-travis, Weblate, OCA-git-bot, hveficent, Matt Taylor, Núria Martín Xifré, Bernat Puig Font, HviorForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/stock-logistics-warehouse:
    - stock_warehouse_calendar
odoo/odoo:
    - mrp
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - stock
    - barcodes
    - resource
    - purchase_stock
    - stock_account
    - account
    - analytic
    - portal
    - http_routing
    - digest
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_tree mrp.area.tree mrp.area tree New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_inventory_tree mrp.inventory.tree mrp.inventory tree New
mrp_planned_order_view_form mrp.planned.order.form mrp.planned.order form New
mrp_planned_order_view_pivot mrp.planned.order.pivot mrp.planned.order pivot New
mrp_planned_order_view_search mrp.planned.order.search mrp.planned.order search New
mrp_planned_order_view_tree mrp.planned.order.tree mrp.planned.order tree New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_mrp_area_tree product.mrp.area.tree product.mrp.area tree New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location field Inherits stock.view_location_form
view_location_search stock.location.search stock.location field Inherits stock.view_location_search
view_location_tree2 stock.location.tree stock.location field Inherits stock.view_location_tree2
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (13)

New fields (6)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (15)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
    string='Date'
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    string='Forecasted Inventory'
  • initial_on_hand_qty Float
    string='Starting Inventory'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • order_release_date Date
    compute='_compute_order_release_date' store=True string='Order Release Date'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product Parameters'
  • running_availability Float
    help='Theoretical inventory level if all planned orderswere released.' string='Planned Availability'
  • supply_method Selection
    readonly=True related='product_mrp_area_id.supply_method' store=True string='Supply Method'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True string='To procure'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (0)

No public methods.

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)
    @api.multi

New fields (14)
  • date_planned Date
    required=True string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • supply_method Selection
    readonly=True selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] string='Supply Method'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.multi@api.onchange('uom_id')

New fields (19)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
    string='Current Date'
  • current_qty Float
    string='Current Qty'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product MRP Area'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')] string='State'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (4)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)
    @api.multi

New fields (15)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' required=True string='Due Date'
  • fixed Boolean
    default=True
  • mo_count Integer
    compute='_compute_mrp_production_count'
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_production_ids One2many → mrp.production
    string='Manufacturing Orders' args: 'mrp.production', 'planned_order_id'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' required=True string='Release Date'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product MRP Area'
  • qty_released Float
    readonly=True
Public methods (2)
  • action_open_linked_mrp_production(self)
  • action_toggle_fixed(self)

New fields (1)
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
Public methods (0)

No public methods.

New fields (24)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' compute_sudo=True index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' compute_sudo=True store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' compute_sudo=True readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] string='Supply Method'
Public methods (2)
  • name_get(self)
    @api.multi
  • update_min_qty_from_main_supplier(self)

New fields (5)
  • llc Integer
    default=0 index=True string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (1)
  • action_view_mrp_area_parameters(self)
    @api.multi

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)
    @api.multi

New fields (1)
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' help='Requirements for a particular MRP area are combined for the purposes of procurement by the MRP.' string='MRP Area'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/11.0/mrp_multi_level
VERSION
VERSION 3.3.0
CATEGORY
CATEGORYManufacturing
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent, Ucamco
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent, Ucamco
COMMITTERS
COMMITTERSGitHub, Lois Rilo, Jordi Ballester Alomar, OCA Transbot, AaronHForgeFlow, oca-travis, Weblate, OCA-git-bot, OCA Git Bot
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/manufacture:
    - mrp_warehouse_calendar
OCA/server-ux:
    - date_range
OCA/stock-logistics-warehouse:
    - stock_demand_estimate
    - stock_warehouse_calendar
OCA/web:
    - web_widget_x2many_2d_matrix
odoo/odoo:
    - mrp
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - stock
    - barcodes
    - web_planner
    - resource
    - purchase
    - stock_account
    - account
    - analytic
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
mrp_area_form mrp.area.form mrp.area form New
mrp_area_tree mrp.area.tree mrp.area tree New
mrp_inventory_form mrp.inventory.form mrp.inventory form New
mrp_inventory_search mrp.inventory.search mrp.inventory search New
mrp_inventory_tree mrp.inventory.tree mrp.inventory tree New
product_mrp_area_form product.mrp.area.form product.mrp.area form New
product_mrp_area_search product.mrp.area.search product.mrp.area search New
product_mrp_area_tree product.mrp.area.tree product.mrp.area tree New
product_template_only_form_view_mrp product.template.product.form.mrp product.template div Inherits product.product_template_only_form_view
view_location_form stock.location.form stock.location field Inherits stock.view_location_form
view_location_search stock.location.search stock.location field Inherits stock.view_location_search
view_location_tree2 stock.location.tree stock.location field Inherits stock.view_location_tree2
view_mrp_inventory_graph mrp.inventory.graph mrp.inventory graph New
view_mrp_inventory_pivot mrp.inventory.pivot mrp.inventory pivot New
view_mrp_inventory_procure_without_security mrp.inventory.procure.form - readonly qty mrp.inventory.procure field Inherits view_mrp_inventory_procure_wizard
view_mrp_inventory_procure_wizard mrp.inventory.procure.form mrp.inventory.procure form New
view_mrp_product_product_form view.product.mrp.area.product.form product.product div Inherits product.product_normal_form_view
view_run_mrp_multi_level_wizard Run MRP mrp.multi.level form New
Models touched (11)

New fields (7)
  • active Boolean
    default=True
  • calendar_id Many2one → resource.calendar
    comodel_name='resource.calendar' related='warehouse_id.calendar_id' string='Working Hours'
  • company_id Many2one → res.company
    comodel_name='res.company' related='warehouse_id.company_id' store=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True string='Location'
  • name Char
    required=True
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the MRP Area will work.' required=True string='Timezone' args: _tz_get
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (0)

No public methods.

New fields (14)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • date Date
    string='Date'
  • demand_qty Float
    string='Demand'
  • final_on_hand_qty Float
    string='Forecasted Inventory'
  • initial_on_hand_qty Float
    string='Starting Inventory'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • order_release_date Date
    compute='_compute_order_release_date' store=True string='Order Release Date'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='mrp_inventory_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product Parameters'
  • running_availability Float
    help='Theoretical inventory level if all planned orderswere released.' string='Planned Availability'
  • supply_qty Float
    string='Supply'
  • to_procure Float
    compute='_compute_to_procure' store=True string='To procure'
  • uom_id Many2one → product.uom
    comodel_name='product.uom' compute='_compute_uom_id' string='Product UoM'
Public methods (0)

No public methods.

New fields (1)
  • item_ids One2many → mrp.inventory.procure.item
    comodel_name='mrp.inventory.procure.item' inverse_name='wiz_id' string='Items'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • make_procurement(self)
    @api.multi

New fields (9)
  • date_planned Date
    required=False string='Planned Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' string='Location'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' string='Mrp Inventory'
  • planned_order_id Many2one → mrp.planned.order
    comodel_name='mrp.planned.order'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • qty Float
    string='Quantity'
  • uom_id Many2one → product.uom
    comodel_name='product.uom' string='Unit of Measure'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
  • wiz_id Many2one → mrp.inventory.procure
    comodel_name='mrp.inventory.procure' ondelete='cascade' readonly=True string='Wizard'
Public methods (1)
  • onchange_uom_id(self)
    @api.multi@api.onchange('uom_id')

New fields (19)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • current_date Date
    string='Current Date'
  • current_qty Float
    string='Current Qty'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_date Date
    string='MRP Date'
  • mrp_order_number Char
    string='Order Number'
  • mrp_origin Selection
    selection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')] string='Origin'
  • mrp_qty Float
    string='MRP Quantity'
  • mrp_type Selection
    selection=[('s', 'Supply'), ('d', 'Demand')] string='Type'
  • name Char
    string='Description'
  • parent_product_id Many2one → product.product
    comodel_name='product.product' index=True string='Parent Product'
  • planned_order_up_ids Many2many → mrp.planned.order
    column1='move_down_id' column2='order_id' comodel_name='mrp.planned.order' relation='mrp_move_planned_order_rel' string='Planned Orders UP'
  • product_id Many2one → product.product
    comodel_name='product.product' related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product'
  • production_id Many2one → mrp.production
    comodel_name='mrp.production' index=True string='Manufacturing Order'
  • purchase_line_id Many2one → purchase.order.line
    comodel_name='purchase.order.line' index=True string='Purchase Order Line'
  • purchase_order_id Many2one → purchase.order
    comodel_name='purchase.order' index=True string='Purchase Order'
  • state Selection
    selection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')] string='State'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' index=True string='Stock Move'
Public methods (0)

No public methods.

New fields (1)
  • mrp_area_ids Many2many → mrp.area
    comodel_name='mrp.area' help='If empty, all areas will be computed.' string='MRP Areas to run'
Public methods (4)
  • create_action(self, product_mrp_area_id, mrp_date, mrp_qty, name, values=None)
    @api.model
  • create_planned_order(self, product_mrp_area_id, mrp_qty, name, mrp_date_supply, mrp_action_date, values=None)
    @api.model
  • explode_action(self, product_mrp_area_id, mrp_action_date, name, qty, action)
    @api.model
    Explode requirements.
  • run_mrp_multi_level(self)
    @api.multi

New fields (13)
  • company_id Many2one → res.company
    comodel_name='res.company' related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id' store=True
  • due_date Date
    help='Date in which the supply must have been completed.' string='Due Date'
  • fixed Boolean
  • mrp_action Selection
    selection=[('manufacture', 'Manufacturing Order'), ('buy', 'Purchase Order'), ('move', 'Transfer'), ('none', 'None')] string='Action'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' index=True readonly=True related='product_mrp_area_id.mrp_area_id' store=True string='MRP Area'
  • mrp_inventory_id Many2one → mrp.inventory
    comodel_name='mrp.inventory' ondelete='set null' string='Associated MRP Inventory'
  • mrp_move_down_ids Many2many → mrp.move
    column1='order_id' column2='move_down_id' comodel_name='mrp.move' relation='mrp_move_planned_order_rel' string='MRP Move DOWN'
  • mrp_qty Float
    string='Quantity'
  • name Char
    string='Description'
  • order_release_date Date
    help='Order release date planned by MRP.' string='Release Date'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='product_mrp_area_id.product_id' store=True
  • product_mrp_area_id Many2one → product.mrp.area
    comodel_name='product.mrp.area' index=True required=True string='Product'
  • qty_released Float
Public methods (0)

No public methods.

New fields (25)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' related='mrp_area_id.warehouse_id.company_id' store=True
  • group_estimate_days Integer
    default=1 string='Group Days of Estimates'
  • location_id Many2one
    related='mrp_area_id.location_id'
  • location_proc_id Many2one → stock.location
    comodel_name='stock.location' domain="[('location_id', 'child_of', location_id)]" help="Set this if you need to procure from a different locationthan area's location." string='Procure Location'
  • main_supplier_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_main_supplier' compute_sudo=True index=True store=True string='Main Supplier'
  • main_supplierinfo_id Many2one → product.supplierinfo
    comodel_name='product.supplierinfo' compute='_compute_main_supplier' compute_sudo=True store=True string='Supplier Info'
  • mrp_applicable Boolean
    string='MRP Applicable'
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' required=True
  • mrp_exclude Boolean
    string='Exclude from MRP'
  • mrp_inspection_delay Integer
    string='Inspection Delay'
  • mrp_lead_time Float
    compute='_compute_mrp_lead_time' string='Lead Time'
  • mrp_maximum_order_qty Float
    default=0.0 string='Maximum Order Qty'
  • mrp_minimum_order_qty Float
    default=0.0 string='Minimum Order Qty'
  • mrp_minimum_stock Float
    string='Safety Stock'
  • mrp_move_ids One2many → mrp.move
    comodel_name='mrp.move' inverse_name='product_mrp_area_id' readonly=True
  • mrp_nbr_days Integer
    default=0 help='Number of days to group demand for this product during the MRP run, in order to determine the quantity to order.' string='Nbr. Days'
  • mrp_qty_multiple Float
    default=1.0 string='Qty Multiple'
  • mrp_transit_delay Integer
    default=0 string='Transit Delay'
  • mrp_verified Boolean
    help='Identifies that this product has been verified to be valid for the MRP.' string='Verified for MRP'
  • planned_order_ids One2many → mrp.planned.order
    comodel_name='mrp.planned.order' inverse_name='product_mrp_area_id' readonly=True
  • product_id Many2one → product.product
    comodel_name='product.product' required=True string='Product'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' compute_sudo=True readonly=True related='product_id.product_tmpl_id' store=True
  • qty_available Float
    compute='_compute_qty_available' string='Quantity Available'
  • supply_method Selection
    compute='_compute_supply_method' selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('move', 'Transfer')] string='Supply Method'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (5)
  • llc Integer
    default=0 string='Low Level Code'
  • manufacturing_order_ids One2many → mrp.production
    comodel_name='mrp.production' domain=[('state', '=', 'draft')] inverse_name='product_id' string='Manufacturing Orders'
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_id' string='MRP Area parameters'
  • purchase_order_line_ids One2many → purchase.order.line
    comodel_name='purchase.order.line' inverse_name='product_id' string='Purchase Orders'
Public methods (1)
  • action_view_mrp_area_parameters(self)
    @api.multi

New fields (2)
  • mrp_area_count Integer
    compute='_compute_mrp_area_count' readonly=True string='MRP Area Parameter Count'
  • mrp_area_ids One2many → product.mrp.area
    comodel_name='product.mrp.area' inverse_name='product_tmpl_id' string='MRP Area parameters'
Public methods (1)
  • action_view_mrp_area_parameters(self)
    @api.multi

New fields (1)
  • mrp_area_id Many2one → mrp.area
    comodel_name='mrp.area' help='Requirements for a particular MRP area are combined for the purposes of procurement by the MRP.' string='MRP Area'
Public methods (0)

No public methods.