TIP: You can type at any time to perform a new search.
MRP Multi Level
mrp_multi_level · OCA/manufacture
- Repository
- OCA/manufacture · module folder · Try on Runboat
- Module version
- 1.0.4
- Category
- Manufacturing
- Folder size
- 0.63 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://github.com/OCA/manufacture
- Last tracking update
- 2026-08-20 11:30:00
- Authors
- Odoo Community Association (OCA), ForgeFlow, Ucamco
- Maintainers
- Odoo Community Association (OCA), ForgeFlow, Ucamco
- Committers
- Lois Rilo, JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, bosd, Hotdgo9
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- ddmrp, mrp_multi_level_estimate
- 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 ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 | form | Inherits product.product_template_only_form_view |
view_location_form |
stock.location.form | stock.location | form | 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 | form | 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 | form | Inherits product.product_normal_form_view |
view_run_mrp_multi_level_wizard |
Run MRP | mrp.multi.level | form | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (14)
New fields (6)
-
activeBooleandefault=True -
calendar_idMany2one → resource.calendarcomodel_name='resource.calendar'related='warehouse_id.calendar_id'string='Working Hours' -
company_idMany2one → res.companycomodel_name='res.company'related='warehouse_id.company_id'store=True -
location_idMany2one → stock.locationcomodel_name='stock.location'required=Truestring='Location' -
nameCharrequired=True -
warehouse_idMany2one → stock.warehousecomodel_name='stock.warehouse'required=Truestring='Warehouse'
No public methods.
New fields (18)
-
company_idMany2one → res.companycomodel_name='res.company'related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id'store=True -
dateDate -
demand_qtyFloatstring='Demand' -
final_on_hand_qtyFloataggregator='avg'string='Forecasted Inventory' -
initial_on_hand_qtyFloataggregator='avg'string='Starting Inventory' -
main_supplier_idMany2onereadonly=Truerelated='product_mrp_area_id.main_supplier_id'store=Truestring='Main Supplier' -
mrp_area_idMany2one → mrp.areacomodel_name='mrp.area'related='product_mrp_area_id.mrp_area_id'store=Truestring='MRP Area' -
mrp_planner_idMany2onereadonly=Truerelated='product_mrp_area_id.mrp_planner_id'store=True -
order_release_dateDatecompute='_compute_order_release_date'store=True -
planned_order_idsOne2many → mrp.planned.ordercomodel_name='mrp.planned.order'inverse_name='mrp_inventory_id'readonly=True -
product_idMany2one → product.productcomodel_name='product.product'related='product_mrp_area_id.product_id'store=True -
product_mrp_area_idMany2one → product.mrp.areacomodel_name='product.mrp.area'index=Trueondelete='cascade'required=Truestring='Product Parameters' -
rfq_qtyFloathelp='Quantity on Request for Quotation.\nThis quantity is included in the supply quantity but it is not confirmed yet.'string='RfQ' -
running_availabilityFloataggregator='avg'help='Theoretical inventory level if all planned orders were released.'string='Planned Availability' -
supply_methodSelectionreadonly=Truerelated='product_mrp_area_id.supply_method'store=Truestring='Supply Method' -
supply_qtyFloatstring='Supply' -
to_procureFloatcompute='_compute_to_procure'store=True -
uom_idMany2one → uom.uomcomodel_name='uom.uom'compute='_compute_uom_id'string='Product UoM'
-
action_open_planned_orders(self) -
action_open_rfqs(self)
New fields (1)
-
item_idsOne2many → mrp.inventory.procure.itemcomodel_name='mrp.inventory.procure.item'inverse_name='wiz_id'string='Items'
-
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_plannedDaterequired=Truestring='Planned Date' -
location_idMany2one → stock.locationcomodel_name='stock.location'string='Location' -
mrp_inventory_idMany2one → mrp.inventorycomodel_name='mrp.inventory'string='Mrp Inventory' -
planned_order_idMany2one → mrp.planned.ordercomodel_name='mrp.planned.order' -
product_idMany2one → product.productcomodel_name='product.product'string='Product' -
qtyFloatstring='Quantity' -
supply_methodSelectionreadonly=Trueselection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] -
uom_idMany2one → uom.uomcomodel_name='uom.uom'string='Unit of Measure' -
warehouse_idMany2one → stock.warehousecomodel_name='stock.warehouse'string='Warehouse' -
wiz_idMany2one → mrp.inventory.procurecomodel_name='mrp.inventory.procure'ondelete='cascade'readonly=Truestring='Wizard'
-
onchange_uom_id(self)@api.onchange('uom_id')
New fields (21)
-
bom_idMany2one → mrp.bomargs: 'mrp.bom' -
company_idMany2one → res.companycomodel_name='res.company'related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id'store=True -
current_dateDate -
current_qtyFloat -
mrp_area_idMany2one → mrp.areacomodel_name='mrp.area'index=Truerelated='product_mrp_area_id.mrp_area_id'store=Truestring='MRP Area' -
mrp_dateDatestring='MRP Date' -
mrp_order_numberCharstring='Order Number' -
mrp_originSelectionselection=[('mo', 'Manufacturing Order'), ('po', 'Purchase Order'), ('mv', 'Move'), ('fc', 'Forecast'), ('mrp', 'MRP')]string='Origin' -
mrp_qtyFloatstring='MRP Quantity' -
mrp_typeSelectionselection=[('s', 'Supply'), ('d', 'Demand')]string='Type' -
nameCharstring='Description' -
originCharstring='Source Document' -
parent_product_idMany2one → product.productcomodel_name='product.product'index=Truestring='Parent Product' -
planned_order_up_idsMany2many → mrp.planned.ordercolumn1='move_down_id'column2='order_id'comodel_name='mrp.planned.order'relation='mrp_move_planned_order_rel'string='Planned Orders UP' -
product_idMany2one → product.productcomodel_name='product.product'related='product_mrp_area_id.product_id'store=True -
product_mrp_area_idMany2one → product.mrp.areacomodel_name='product.mrp.area'index=Trueondelete='cascade'required=Truestring='Product MRP Area' -
production_idMany2one → mrp.productioncomodel_name='mrp.production'index=Truestring='Manufacturing Order' -
purchase_line_idMany2one → purchase.order.linecomodel_name='purchase.order.line'index=Truestring='Purchase Order Line' -
purchase_order_idMany2one → purchase.ordercomodel_name='purchase.order'index=Truestring='Purchase Order' -
stateSelectionselection=[('draft', 'Draft'), ('assigned', 'Assigned'), ('confirmed', 'Confirmed'), ('waiting', 'Waiting'), ('partially_available', 'Partially Available'), ('ready', 'Ready'), ('sent', 'Sent'), ('to approve', 'To Approve'), ('approved', 'Approved')] -
stock_move_idMany2one → stock.movecomodel_name='stock.move'index=Truestring='Stock Move'
No public methods.
New fields (1)
-
mrp_area_idsMany2many → mrp.areacomodel_name='mrp.area'help='If empty, all areas will be computed.'string='MRP Areas to run'
-
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.modelExplode requirements. -
run_mrp_multi_level(self) -
should_build_time_phased_inventory(self, product_mrp_area)
New fields (17)
-
company_idMany2one → res.companycomodel_name='res.company'related='product_mrp_area_id.mrp_area_id.warehouse_id.company_id'store=True -
due_dateDatehelp='Date in which the supply must have been completed.'required=True -
fixedBooleandefault=True -
mo_countIntegercompute='_compute_mrp_production_count' -
mrp_actionSelectionselection=[('manufacture', 'Manufacturing Order'), ('phantom', 'Kit'), ('buy', 'Purchase Order'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push'), ('none', 'None')]string='Action' -
mrp_area_idMany2one → mrp.areacomodel_name='mrp.area'index=Truereadonly=Truerelated='product_mrp_area_id.mrp_area_id'store=Truestring='MRP Area' -
mrp_inventory_idMany2one → mrp.inventorycomodel_name='mrp.inventory'ondelete='set null'string='Associated MRP Inventory' -
mrp_move_down_idsMany2many → mrp.movecolumn1='order_id'column2='move_down_id'comodel_name='mrp.move'relation='mrp_move_planned_order_rel'string='MRP Move DOWN' -
mrp_planner_idMany2onereadonly=Truerelated='product_mrp_area_id.mrp_planner_id'store=True -
mrp_production_idsOne2many → mrp.productionstring='Manufacturing Orders' args: 'mrp.production', 'planned_order_id' -
mrp_qtyFloatstring='Quantity' -
nameCharstring='Description' -
order_release_dateDatehelp='Order release date planned by MRP.'required=Truestring='Release Date' -
originCharstring='Source Document' -
product_idMany2one → product.productcomodel_name='product.product'readonly=Truerelated='product_mrp_area_id.product_id'store=True -
product_mrp_area_idMany2one → product.mrp.areacomodel_name='product.mrp.area'index=Trueondelete='cascade'required=Truestring='Product MRP Area' -
qty_releasedFloatreadonly=True
-
action_open_linked_mrp_production(self) -
action_toggle_fixed(self)
New fields (1)
-
planned_order_idMany2one → mrp.planned.ordercomodel_name='mrp.planned.order'index=True
No public methods.
New fields (27)
-
activeBooleandefault=True -
company_idMany2one → res.companycomodel_name='res.company'related='mrp_area_id.warehouse_id.company_id'store=True -
distribution_lead_timeFloat -
location_idMany2onerelated='mrp_area_id.location_id' -
location_proc_idMany2one → stock.locationcomodel_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_idMany2one → res.partnercomodel_name='res.partner'compute='_compute_main_supplier'index=Truestore=Truestring='Main Supplier' -
main_supplierinfo_idMany2one → product.supplierinfocomodel_name='product.supplierinfo'compute='_compute_main_supplier'store=Truestring='Supplier Info' -
mrp_applicableBooleanstring='MRP Applicable' -
mrp_area_idMany2one → mrp.areacomodel_name='mrp.area'required=True -
mrp_excludeBooleanstring='Exclude from MRP' -
mrp_inspection_delayIntegerstring='Inspection Delay' -
mrp_lead_timeFloatcompute='_compute_mrp_lead_time'string='Lead Time' -
mrp_maximum_order_qtyFloatdefault=0.0string='Maximum Order Qty' -
mrp_minimum_order_qtyFloatdefault=0.0string='Minimum Order Qty' -
mrp_minimum_stockFloatstring='Safety Stock' -
mrp_move_idsOne2many → mrp.movecomodel_name='mrp.move'inverse_name='product_mrp_area_id'readonly=True -
mrp_nbr_daysIntegerdefault=0help='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_idMany2one → res.usersargs: 'res.users' -
mrp_qty_multipleFloatdefault=1.0string='Qty Multiple' -
mrp_transit_delayIntegerdefault=0string='Transit Delay' -
mrp_verifiedBooleanhelp='Identifies that this product has been verified to be valid for the MRP.'string='Verified for MRP' -
planned_order_idsOne2many → mrp.planned.ordercomodel_name='mrp.planned.order'inverse_name='product_mrp_area_id'readonly=True -
product_idMany2one → product.productcomodel_name='product.product'ondelete='cascade'required=Truestring='Product' -
product_tmpl_idMany2one → product.templatecomodel_name='product.template'readonly=Truerelated='product_id.product_tmpl_id'store=True -
qty_availableFloatcompute='_compute_qty_available'string='Quantity Available' -
supply_bom_idMany2one → mrp.bomcomodel_name='mrp.bom'compute='_compute_supply_method'string='Supply BoM' -
supply_methodSelectioncompute='_compute_supply_method'selection=[('buy', 'Buy'), ('none', 'Undefined'), ('manufacture', 'Produce'), ('phantom', 'Kit'), ('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]
-
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)
-
llcIntegerdefault=0index=Truestring='Low Level Code' -
manufacturing_order_idsOne2many → mrp.productioncomodel_name='mrp.production'domain=[('state', '=', 'draft')]inverse_name='product_id'string='Manufacturing Orders' -
mrp_area_countIntegercompute='_compute_mrp_area_count'readonly=Truestring='MRP Area Parameter Count' -
mrp_area_idsOne2many → product.mrp.areacomodel_name='product.mrp.area'inverse_name='product_id'string='MRP Area parameters' -
purchase_order_line_idsOne2many → purchase.order.linecomodel_name='purchase.order.line'inverse_name='product_id'string='Purchase Orders'
-
action_view_mrp_area_parameters(self) -
write(self, values)
New fields (2)
-
mrp_area_countIntegercompute='_compute_mrp_area_count'readonly=Truestring='MRP Area Parameter Count' -
mrp_area_idsOne2many → product.mrp.areacomodel_name='product.mrp.area'inverse_name='product_tmpl_id'string='MRP Area parameters'
-
action_view_mrp_area_parameters(self)
New fields (1)
-
mrp_area_countIntegercompute='_compute_mrp_area_count'readonly=Truestring='MRP Area Parameter Count'
-
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.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…