Repository
odoo/odoo · module folder
Module version
2.0
Category
Supply Chain/Manufacturing
Folder size
18.82 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/manufacturing
Last tracking update
2026-08-15 22:44:20
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Aaron Bohy, Jorge Pinna Puissant, Arnold Moyaux, Julien Castiaux, Victor Feyens, William Henrotin, Julien Mougenot, svs-odoo, Prakash Prajapati, Rémy Voet (ryv), Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, William Braeckman, JF Aubert, David (dafr), Aurelien van Delft (avd), Mathieu Walravens, luvi, Valentin Chevalier, Renaud Thiry, niyasraphy, Louis Wicket (wil), alsh-odoo, nda, Victor Piryns (pivi), Djamel Touati, Pieter Claeys (clpi), clesgow, Levi Siuzdak (sile), Dylan Kiss (dyki), Mayurrajsinh Rathod, Chong Wang (cwg), Martin Maes, Paweł Fertyk, omra-odoo, kdeb@odoo.com, lase@odoo.com, Quentin Wolfs, Aurelien MARIE (auma), Ethan Vincent, reka-odoo, Richard Prosser, AMZIL Ayoub, Nathaniel (naja), kcv-odoo, mega, Louis Gobert, nihp-odoo, Junqi Wu, Hussein Ebrahim(hyhe), aamo-odoo, Sanchit Gupta, Mohammad Abdulmoneim, Mathias Mathy (MAMA), Stéphane Diez, kawkb, dhha-odoo, gteboul, Pierre Pulinckx (PIPU), Julien Schwanen, EmilioPascual, Arthur Nanson, David Van Droogenbroeck (DROD), pkgu-odoo, Mohammad Abdulmoneim (abdu), djameltouati, Pierre Lamotte (pila), Pierre Pulinckx, Bastien PIERRE, Corentin Heinix (cohe), Corentin Lombard, Shrey Mehta, Carmine, Mahdi Alijani (malj), MaximeNoirhomme, chha-odoo, bona-odoo, plha-odoo, Krzysztof Magusiak (krma), Armin-FalDiS, krip-odoo, joseph, sagu-odoo, Hadi El Yakhni, Tyler Landivar (tylan), Ester Andreetto, bhna-odoo, defl, Duy (Đỗ Anh), MAGREMENT, temo-odoo, mohannedah, kinhosz, agbr-odoo, Elijah Tay (elct), Lulu Grimalkin (lugr), rare-odoo, sawer, Lancelot Semal, Tudor-Calin Panzaru (tupan), adip-odoo, Quentin Colla (qucol), ABE-Mark45, Laszlo Almasy (azl), josv-odoo, Waleed Elgamal, Ayush Modi, Amr Elkhatieb, assh-odoo, daiduongnguyen-odoo, Oskar Kosobucki, srap-odoo, saurabh, Abdelouahab Laaroussi (abla), Zachary (zavan), sako-odoo, tpma-odoo, Youssef (abyo), msho-odoo, lase, Moamen(msho), chpa-odoo, Youssef, Mathias Mathy, Stef Ossé, alwhi-odoo
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
mrp_account, mrp_attachment_mgmt, mrp_bom_component_menu, mrp_bom_image, mrp_bom_note, mrp_bom_tracking, mrp_landed_costs, mrp_multi_level, mrp_product_expiry, mrp_production_back_to_draft, mrp_production_generator_by_date_interval, mrp_production_note, mrp_repair, mrp_repair_order, mrp_subcontracting, mrp_tag, mrp_warehouse_calendar, pos_mrp, product_brand_mrp, project_mrp, purchase_mrp, sale_mrp, stock_replenishment_mrp_bom_selection, test_main_flows
Description

Code Analysis

Views touched (106)
XML IDNameModelTypeStatus
exception_on_mo exception_on_mo ir.ui.view qweb New
label_production_view label_production_view ir.ui.view qweb New
label_production_view_pdf label_production_view_pdf ir.ui.view qweb New
mo_overview_byproducts mo_overview_byproducts ir.ui.view qweb New
mo_overview_components mo_overview_components ir.ui.view qweb New
mo_overview_content mo_overview_content ir.ui.view qweb New
mo_overview_line mo_overview_line ir.ui.view qweb New
mo_overview_operations mo_overview_operations ir.ui.view qweb New
mrp_bom_byproduct_form_view mrp.bom.byproduct.form mrp.bom.byproduct form New
mrp_bom_form_view mrp.bom.form mrp.bom form New
mrp_bom_kanban_view mrp.bom.kanban mrp.bom kanban New
mrp_bom_line_view_form mrp.bom.line.view.form mrp.bom.line form New
mrp_bom_replenishment_tree_view mrp.bom.replenishment.list.view mrp.bom list Inherits mrp.mrp_bom_tree_view
mrp_bom_tree_view mrp.bom.list mrp.bom list New
mrp_product_product_search_view mrp.product.product.search product.product search Inherits product.product_search_form_view
mrp_product_template_search_view mrp.product.template.search product.template search Inherits product.product_template_search_view
mrp_production_form_view mrp.production.form mrp.production form New
mrp_production_kanban_view mrp.production.kanban mrp.production kanban New
mrp_production_tree_view mrp.production.list mrp.production list New
mrp_production_view_activity mrp.production.view.activity mrp.production activity New
mrp_production_workorder_form_view_inherit mrp.production.work.order.form mrp.workorder form New
mrp_production_workorder_tree_editable_view mrp.production.work.order.list.editable mrp.workorder list New
mrp_production_workorder_tree_editable_view_mo_form mrp.production.work.order.list.editable mrp.workorder list Inherits mrp_production_workorder_tree_editable_view
mrp_production_workorder_tree_view mrp.production.work.order.list mrp.workorder list Inherits mrp.mrp_production_workorder_tree_editable_view
mrp_report_stock_rule mrp_report_stock_rule ir.ui.view qweb Inherits stock.report_stock_rule
mrp_routing_workcenter_bom_tree_view mrp.routing.workcenter.bom.list mrp.routing.workcenter list Inherits mrp_routing_workcenter_tree_view
mrp_routing_workcenter_copy_to_bom_tree_view mrp.routing.workcenter.copy_to_bom.list mrp.routing.workcenter list Inherits mrp_routing_workcenter_tree_view
mrp_routing_workcenter_filter mrp.routing.workcenter.filter mrp.routing.workcenter search New
mrp_routing_workcenter_form_view mrp.routing.workcenter.form mrp.routing.workcenter form New
mrp_routing_workcenter_kanban_view mrp.routing.workcenter.kanban mrp.routing.workcenter kanban New
mrp_routing_workcenter_tree_view mrp.routing.workcenter.list mrp.routing.workcenter list New
mrp_unbuild_form_view mrp.unbuild.form mrp.unbuild form New
mrp_unbuild_form_view_simplified mrp.unbuild.form.simplified mrp.unbuild form New
mrp_unbuild_kanban_view mrp.unbuild.kanban mrp.unbuild kanban New
mrp_unbuild_search_view mrp.unbuild.search mrp.unbuild search New
mrp_unbuild_tree_view mrp.unbuild.list mrp.unbuild list New
mrp_workcenter_block_wizard_form mrp.workcenter.productivity.form mrp.workcenter.productivity form New
mrp_workcenter_kanban mrp.workcenter.kanban mrp.workcenter kanban New
mrp_workcenter_tree_view mrp.workcenter.list mrp.workcenter list New
mrp_workcenter_view mrp.workcenter.form mrp.workcenter form New
mrp_workcenter_view_kanban mrp.workcenter.kanban mrp.workcenter kanban New
oee_form_view mrp.workcenter.productivity.form mrp.workcenter.productivity form New
oee_graph_view mrp.workcenter.productivity.graph mrp.workcenter.productivity graph New
oee_loss_form_view mrp.workcenter.productivity.loss.form mrp.workcenter.productivity.loss form New
oee_loss_search_view mrp.workcenter.productivity.loss.search mrp.workcenter.productivity.loss search New
oee_loss_tree_view mrp.workcenter.productivity.loss.list mrp.workcenter.productivity.loss list New
oee_pie_view mrp.workcenter.productivity.graph mrp.workcenter.productivity graph New
oee_pivot_view mrp.workcenter.productivity.pivot mrp.workcenter.productivity pivot New
oee_search_view mrp.workcenter.productivity.search mrp.workcenter.productivity search New
oee_tree_view mrp.workcenter.productivity.list mrp.workcenter.productivity list New
product_document_form product.document.form.mrp product.document form Inherits product.product_document_form
product_product_form_view_bom_button product.product.procurement product.product form Inherits stock.product_form_view_procurement_button
product_template_form_view_bom_button product.template.procurement product.template form Inherits stock.product_template_form_view_procurement_button
product_view_search_catalog product.view.search.catalog.inherit.mrp product.product search Inherits product.product_view_search_catalog
production_message production_message ir.ui.view qweb New
report_bom_structure report_bom_structure ir.ui.view qweb New
report_mo_overview report_mo_overview ir.ui.view qweb New
report_mrp_bom report_mrp_bom ir.ui.view qweb New
report_mrp_bom_pdf_line report_mrp_bom_pdf_line ir.ui.view qweb New
report_mrp_production_components report_mrp_production_components ir.ui.view qweb New
report_mrp_workorder report_mrp_workorder ir.ui.view qweb New
report_mrporder report_mrporder ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.mrp res.config.settings form Inherits base.res_config_settings_view_form
stock_move_line_view_search stock.move.line.search stock.move.line search Inherits stock.stock_move_line_view_search
stock_production_type_kanban stock.picking.type.kanban stock.picking.type kanban Inherits stock.stock_picking_type_kanban
stock_report_delivery_document_inherit_mrp stock_report_delivery_document_inherit_mrp ir.ui.view qweb Inherits stock.report_delivery_document
stock_report_delivery_kit_sections stock_report_delivery_kit_sections ir.ui.view qweb New
stock_report_delivery_no_kit_section stock_report_delivery_no_kit_section ir.ui.view qweb New
stock_scrap_search_view_inherit_mrp stock.scrap.search.inherit.mrp stock.scrap search Inherits stock.stock_scrap_search_view
stock_scrap_view_form2_mrp_inherit_mrp stock.scrap.view.form2.inherit.mrp stock.scrap form Inherits stock.stock_scrap_form_view2
stock_scrap_view_form_mrp_inherit_mrp stock.scrap.view.form.inherit.mrp stock.scrap form Inherits stock.stock_scrap_form_view
stock_warn_insufficient_qty_unbuild_form_view stock.warn.insufficient.qty.unbuild stock.warn.insufficient.qty.unbuild form Inherits stock.stock_warn_insufficient_qty_form_view
track_production_move_template track_production_move_template ir.ui.view qweb New
view_change_production_qty_wizard Change Quantity To Produce change.production.qty form New
view_move_line_tree stock.move.line.list stock.move.line list Inherits stock.view_move_line_tree
view_mrp_bom_filter mrp.bom.select mrp.bom search New
view_mrp_consumption_warning_form Consumption Warning mrp.consumption.warning form New
view_mrp_product_template_form_inherited product.form.mrp.inherited product.template form Inherits stock.view_template_property_form
view_mrp_production_backorder_form Create Backorder mrp.production.backorder form New
view_mrp_production_filter mrp.production.select mrp.production search New
view_mrp_production_serials_form mrp_production_serials mrp.production.serials form New
view_mrp_production_split_form Split Production mrp.production.split form New
view_mrp_production_split_multi_form mrp.production.split.multi.form mrp.production.split.multi form New
view_mrp_production_work_order_search mrp.production.work.order.search mrp.workorder search New
view_mrp_production_workorder_form_view_filter mrp.production.work.order.select mrp.workorder search New
view_mrp_stock_move_operations stock.move.mrp.operations.raw.form stock.move form Inherits stock.view_stock_move_operations
view_mrp_workcenter_productivity_loss_kanban mrp.workcenter.productivity.loss.kanban mrp.workcenter.productivity.loss kanban New
view_mrp_workcenter_search mrp.workcenter.search mrp.workcenter search New
view_picking_form_inherit_mrp view.picking.form.inherit.mrp stock.picking form Inherits stock.view_picking_form
view_picking_type_form_inherit_mrp Operation Types stock.picking.type form Inherits stock.view_picking_type_form
view_production_calendar mrp.production.calendar mrp.production calendar New
view_production_graph mrp.production.graph mrp.production graph New
view_production_pivot mrp.production.pivot mrp.production pivot New
view_stock_move_line_operation_tree_finished stock.move.line.operation.list.finished stock.move.line list Inherits stock.view_stock_move_line_operation_tree
view_stock_move_operations_finished stock.move.operations.finished.form stock.move form Inherits stock.view_stock_move_operations
view_stock_move_operations_raw stock.move.operations.raw.form stock.move form Inherits stock.view_stock_move_operations
view_stock_replenishment_info_stock_mrp_inherit stock.replenishment.information.mrp.stock.inherit stock.replenishment.info Inherits stock.view_stock_replenishment_info
view_stock_rule_form stock.rule.form.inherit.mrp stock.rule form Inherits stock.view_stock_rule_form
view_warehouse_inherit_mrp Stock Warehouse Inherit MRP stock.warehouse Inherits stock.view_warehouse
view_warehouse_orderpoint_tree_editable_inherited_purchase stock.warehouse.orderpoint.list.editable.inherit.purchase stock.warehouse.orderpoint list Inherits stock.view_warehouse_orderpoint_tree_editable
view_work_center_load_graph report.workcenter.load.graph mrp.workorder graph New
view_workcenter_load_pivot report.workcenter.load.pivot mrp.workorder pivot New
workcenter_line_calendar mrp.production.work.order.calendar mrp.workorder calendar New
workcenter_line_graph mrp.production.work.order.graph mrp.workorder graph New
workcenter_line_kanban mrp.production.work.order.kanban mrp.workorder kanban New
workcenter_line_pivot mrp.production.work.order.pivot mrp.workorder pivot New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (53)

New fields (2)
  • mo_id Many2one → mrp.production
    ondelete='cascade' required=True args: 'mrp.production', 'Manufacturing Order'
  • product_qty Float
    digits='Product Unit' required=True args: 'Quantity To Produce'
Public methods (2)
  • change_prod_qty(self)
  • default_get(self, fields)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (24)
  • active Boolean
    default=True args: 'Active'
  • allow_operation_dependencies Boolean
    help='Create operation level dependencies that will influence both planning and the status of work orders upon MO confirmation. If this feature is ticked, and nothing is specified, Odoo will assume that all operations can be started simultaneously.' args: 'Operation Dependencies'
  • batch_size Float
    default=1.0 digits='Product Unit' help='All automatically generated manufacturing orders for this product will be of this size.' args: 'Batch Size'
  • bom_line_ids One2many → mrp.bom.line
    copy=True args: 'mrp.bom.line', 'bom_id', 'BoM Lines'
  • byproduct_ids One2many → mrp.bom.byproduct
    copy=True args: 'mrp.bom.byproduct', 'bom_id', 'By-products'
  • code Char
    args: 'Reference'
  • company_id Many2one → res.company
    default=<expr> index=True args: 'res.company', 'Company'
  • consumption Selection
    default='warning' help='Defines if you can consume more or less components than the quantity defined on the BoM:\n * Allowed: allowed for all manufacturing users.\n * Allowed with warning: allowed for all manufacturing users with summary of consumption differences when closing the manufacturing order.\n Note that in the case of component Highlight Consumption, where consumption is registered manually exclusively, consumption warnings will still be issued when appropriate also.\n * Blocked: only a manager can close a manufacturing order when the BoM consumption is not respected.' required=True string='Flexible Consumption' args: [('flexible', 'Allowed'), ('warning', 'Allowed with warning'), ('strict', 'Blocked')]
  • days_to_prepare_mo Integer
    default=0 help='Create and confirm Manufacturing Orders this many days in advance, to have enough time to replenish components or manufacture semi-finished products.' string='Days to prepare Manufacturing Order'
  • enable_batch_size Boolean
    default=False
  • operation_count Integer
    compute='_compute_operation_count' args: 'Operations Count'
  • operation_ids One2many → mrp.routing.workcenter
    copy=True args: 'mrp.routing.workcenter', 'bom_id', 'Operations'
  • picking_type_id Many2one → stock.picking.type
    check_company=True domain="[('code', '=', 'mrp_operation')]" help='When a procurement has a ‘produce’ route with a operation type set, it will try to create a Manufacturing Order for that product using a BoM of the same operation type.If not,the operation type is not taken into account in the BoM search. That allows to define stock rules which trigger different manufacturing orders with different BoMs.' args: 'stock.picking.type', 'Operation Type'
  • possible_product_template_attribute_value_ids Many2many → product.template.attribute.value
    compute='_compute_possible_product_template_attribute_value_ids' args: 'product.template.attribute.value'
  • produce_delay Integer
    default=0 help='Average lead time in days to manufacture this product. In the case of multi-level BOM, the manufacturing lead times of the components will be added. In case the product is subcontracted, this can be used to determine the date at which components should be sent to the subcontractor.' args: 'Manufacturing Lead Time'
  • product_id Many2one → product.product
    check_company=True domain="['&', ('product_tmpl_id', '=', product_tmpl_id), ('type', '=', 'consu')]" help='If a product variant is defined the BOM is available only for this product.' index=True args: 'product.product', 'Product Variant'
  • product_qty Float
    default=1.0 digits='Product Unit' help='This should be the smallest quantity that this product can be produced in. If the BOM contains operations, make sure the work center capacity is accurate.' required=True args: 'Quantity'
  • product_tmpl_id Many2one → product.template
    check_company=True domain="[('type', '=', 'consu')]" index=True required=True args: 'product.template', 'Product'
  • product_uom_id Many2one → uom.uom
    default=_get_default_product_uom_id help='Unit of Measure (Unit of Measure) is the unit of measurement for the inventory control' required=True args: 'uom.uom', 'Unit'
  • ready_to_produce Selection
    default='all_available' required=True string='Manufacturing Readiness' args: [('all_available', ' When all components are available'), ('asap', 'When components for 1st operation are available')]
  • sequence Integer
    args: 'Sequence'
  • show_copy_operations_button Boolean
    compute='_compute_show_copy_operations_button' help="Technical field used to control the visibility of the 'Copy Existing Operations' button."
  • show_set_bom_button Boolean
    compute='_compute_show_set_bom_button'
  • type Selection
    default='normal' required=True args: [('normal', 'Manufacture this product'), ('phantom', 'Kit')], 'BoM Type'
Public methods (15)
  • action_archive(self)
  • action_compute_bom_days(self)
  • action_copy_existing_operations(self)
  • action_open_operation_form(self)
  • action_set_bom_on_orderpoint(self)
  • action_unarchive(self)
  • check_kit_has_not_orderpoint(self)
    @api.constrains('product_tmpl_id', 'product_id', 'type')
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • explode(self, product, quantity, picking_type=False, never_attribute_values=False)
    Explodes the BoM and creates two lists with all the information you need: bom_done and line_done Quantity describes the number of times you need the BoM: so the quantity divided by the number created by the BoM and converted into its UoM
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model
  • onchange_bom_structure(self)
    @api.onchange('bom_line_ids', 'product_qty', 'product_id', 'product_tmpl_id')
  • onchange_product_tmpl_id(self)
    @api.onchange('product_tmpl_id')
  • write(self, vals)

New fields (11)
  • allowed_operation_ids One2many → mrp.routing.workcenter
    related='bom_id.operation_ids' args: 'mrp.routing.workcenter'
  • bom_id Many2one → mrp.bom
    index=True ondelete='cascade' args: 'mrp.bom', 'BoM'
  • bom_product_template_attribute_value_ids Many2many → product.template.attribute.value
    domain="[('id', 'in', possible_bom_product_template_attribute_value_ids)]" help='BOM Product Variants needed to apply this line.' ondelete='restrict' string='Apply on Variants' args: 'product.template.attribute.value'
  • company_id Many2one
    index=True readonly=True related='bom_id.company_id' store=True
  • cost_share Float
    digits=(5, 2) help="The percentage of the final production cost for this by-product line (divided between the quantity produced).The total of all by-products' cost share must be less than or equal to 100." args: 'Cost Share (%)'
  • operation_id Many2one → mrp.routing.workcenter
    check_company=True domain="[('id', 'in', allowed_operation_ids)]" args: 'mrp.routing.workcenter', 'Produced in Operation'
  • possible_bom_product_template_attribute_value_ids Many2many
    related='bom_id.possible_product_template_attribute_value_ids'
  • product_id Many2one → product.product
    check_company=True required=True args: 'product.product', 'By-product'
  • product_qty Float
    default=1.0 digits='Product Unit' required=True args: 'Quantity'
  • product_uom_id Many2one → uom.uom
    compute='_compute_product_uom_id' precompute=True readonly=False required=True store=True args: 'uom.uom', 'Unit'
  • sequence Integer
    args: 'Sequence'
Public methods (1)
  • action_add_from_catalog(self)

New fields (16)
  • allowed_operation_ids One2many → mrp.routing.workcenter
    related='bom_id.operation_ids' args: 'mrp.routing.workcenter'
  • attachments_count Integer
    compute='_compute_attachments_count' args: 'Attachments Count'
  • bom_id Many2one → mrp.bom
    index=True ondelete='cascade' required=True args: 'mrp.bom', 'Parent BoM'
  • bom_product_template_attribute_value_ids Many2many → product.template.attribute.value
    domain="[('id', 'in', possible_bom_product_template_attribute_value_ids)]" help='BOM Product Variants needed to apply this line.' ondelete='restrict' string='Apply on Variants' args: 'product.template.attribute.value'
  • child_bom_id Many2one → mrp.bom
    compute='_compute_child_bom_id' args: 'mrp.bom', 'Sub BoM'
  • child_line_ids One2many → mrp.bom.line
    compute='_compute_child_line_ids' string='BOM lines of the referred bom' args: 'mrp.bom.line'
  • company_id Many2one
    index=True readonly=True related='bom_id.company_id' store=True
  • operation_id Many2one → mrp.routing.workcenter
    check_company=True domain="[('id', 'in', allowed_operation_ids)]" help='The operation where the components are consumed, or the finished products created.' args: 'mrp.routing.workcenter', 'Consumed in Operation'
  • parent_product_tmpl_id Many2one → product.template
    related='bom_id.product_tmpl_id' args: 'product.template', 'Parent Product Template'
  • possible_bom_product_template_attribute_value_ids Many2many
    related='bom_id.possible_product_template_attribute_value_ids'
  • product_id Many2one → product.product
    check_company=True index=True required=True args: 'product.product', 'Component'
  • product_qty Float
    default=1.0 digits='Product Unit' required=True args: 'Quantity'
  • product_tmpl_id Many2one → product.template
    index=True related='product_id.product_tmpl_id' store=True args: 'product.template', 'Product Template'
  • product_uom_id Many2one → uom.uom
    default=_get_default_product_uom_id required=True args: 'uom.uom', 'Unit'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying.' args: 'Sequence'
  • tracking Selection
    related='product_id.tracking'
Public methods (4)
  • action_add_from_catalog(self)
  • action_see_attachments(self)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (4)
  • consumption Selection
    compute='_compute_consumption' args: [('flexible', 'Allowed'), ('warning', 'Allowed with warning'), ('strict', 'Blocked')]
  • mrp_consumption_warning_line_ids One2many → mrp.consumption.warning.line
    args: 'mrp.consumption.warning.line', 'mrp_consumption_warning_id'
  • mrp_production_count Integer
    compute='_compute_mrp_production_count'
  • mrp_production_ids Many2many → mrp.production
    args: 'mrp.production'
Public methods (3)
  • action_cancel(self)
  • action_confirm(self)
  • action_set_qty(self)

New fields (7)
  • consumption Selection
    related='mrp_production_id.consumption'
  • mrp_consumption_warning_id Many2one → mrp.consumption.warning
    ondelete='cascade' readonly=True required=True args: 'mrp.consumption.warning', 'Parent Wizard'
  • mrp_production_id Many2one → mrp.production
    ondelete='cascade' readonly=True required=True args: 'mrp.production', 'Manufacturing Order'
  • product_consumed_qty_uom Float
    readonly=True args: 'Consumed'
  • product_expected_qty_uom Float
    readonly=True args: 'To Consume'
  • product_id Many2one → product.product
    readonly=True required=True args: 'product.product', 'Product'
  • product_uom_id Many2one → uom.uom
    readonly=True related='product_id.uom_id' args: 'uom.uom', 'Unit'
Public methods (0)

No public methods.

New fields (80)
  • all_move_ids One2many → stock.move
    args: 'stock.move', 'production_id'
  • all_move_raw_ids One2many → stock.move
    args: 'stock.move', 'raw_material_production_id'
  • allow_workorder_dependencies Boolean
    args: 'Allow Work Order Dependencies'
  • allowed_uom_ids Many2many → uom.uom
    compute='_compute_allowed_uom_ids' args: 'uom.uom'
  • backorder_sequence Integer
    copy=False default=0 help='Backorder sequence, if equals to 0 means there is not related backorder' args: 'Backorder Sequence'
  • bom_id Many2one → mrp.bom
    check_company=True compute='_compute_bom_id' domain="[\n '&',\n '|',\n ('company_id', '=', False),\n ('company_id', '=', company_id),\n '&',\n '|',\n ('product_id','=',product_id),\n '&',\n ('product_tmpl_id.product_variant_ids','=',product_id),\n ('product_id','=',False),\n ('type', '=', 'normal')]" help='Bills of Materials, also called recipes, are used to autocomplete components and work order instructions.' precompute=True readonly=False store=True args: 'mrp.bom', 'Bill of Material'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company', 'Company'
  • components_availability Char
    compute='_compute_components_availability' help="Latest component availability status for this MO. If green, then the MO's readiness status is ready, as per BOM configuration." string='Component Status'
  • components_availability_state Selection
    compute='_compute_components_availability' search='_search_components_availability_state' args: [('available', 'Available'), ('expected', 'Expected'), ('late', 'Late'), ('unavailable', 'Not Available')]
  • consumption Selection
    default='flexible' readonly=True required=True args: [('flexible', 'Allowed'), ('warning', 'Allowed with warning'), ('strict', 'Blocked')]
  • date_deadline Datetime
    compute='_compute_date_deadline' copy=False help='Informative date allowing to define when the manufacturing order should be processed at the latest to fulfill delivery on time.' readonly=False store=True args: 'Deadline'
  • date_finished Datetime
    compute='_compute_date_finished' copy=False default=_get_default_date_finished help='Date you expect to finish production or actual date you finished production.' store=True args: 'End'
  • date_start Datetime
    copy=False default=_get_default_date_start help='Date you plan to start production or date you actually started production.' index=True required=True args: 'Start'
  • delay_alert_date Datetime
    compute='_compute_delay_alert_date' search='_search_delay_alert_date' args: 'Delay Alert Date'
  • delivery_count Integer
    compute='_compute_picking_ids' string='Delivery Orders'
  • duration Float
    compute='_compute_duration' help='Total real duration (in minutes)' args: 'Real Duration'
  • duration_expected Float
    compute='_compute_duration_expected' help='Total expected duration (in minutes)' args: 'Expected Duration'
  • finished_move_line_ids One2many → stock.move.line
    compute='_compute_lines' inverse='_inverse_lines' string='Finished Product' args: 'stock.move.line'
  • forecasted_issue Boolean
    compute='_compute_forecasted_issue'
  • is_delayed Boolean
    compute='_compute_is_delayed' search='_search_is_delayed'
  • is_locked Boolean
    copy=False default=_get_default_is_locked args: 'Is Locked'
  • is_outdated_bom Boolean
    help='The BoM has been updated since creation of the MO' args: 'Outdated BoM'
  • is_planned Boolean
    compute='_compute_is_planned' store=True args: 'Its Operations are Planned'
  • json_popover Char
    compute='_compute_json_popover' args: 'JSON data for the popover widget'
  • location_dest_id Many2one → stock.location
    check_company=True compute='_compute_locations' domain="[('usage','=','internal')]" help='Location where the system will stock the finished products.' precompute=True readonly=False required=True store=True args: 'stock.location', 'Finished Products Location'
  • location_final_id Many2one → stock.location
    args: 'stock.location', 'Final Location from procurement'
  • location_src_id Many2one → stock.location
    check_company=True compute='_compute_locations' domain="[('usage','=','internal')]" help='Location where the system will look for components.' precompute=True readonly=False required=True store=True args: 'stock.location', 'Components Location'
  • lot_producing_ids Many2many → stock.lot
    check_company=True copy=False domain="[('product_id', '=', product_id)]" string='Lot/Serial Number' args: 'stock.lot'
  • move_byproduct_ids One2many → stock.move
    compute='_compute_move_byproduct_ids' inverse='_set_move_byproduct_ids' args: 'stock.move'
  • move_dest_ids One2many → stock.move
    string='Stock Movements of Produced Goods' args: 'stock.move', 'created_production_id'
  • move_finished_ids One2many → stock.move
    compute='_compute_move_finished_ids' copy=False domain=[('location_dest_usage', '!=', 'inventory')] readonly=False store=True args: 'stock.move', 'production_id', 'Finished Products'
  • move_raw_ids One2many → stock.move
    compute='_compute_move_raw_ids' copy=False domain=[('location_dest_usage', '!=', 'inventory')] readonly=False store=True args: 'stock.move', 'raw_material_production_id', 'Components'
  • mrp_production_backorder_count Integer
    compute='_compute_mrp_production_backorder' args: 'Count of linked backorder'
  • mrp_production_child_count Integer
    compute='_compute_mrp_production_child_count' args: 'Number of generated MO'
  • mrp_production_source_count Integer
    compute='_compute_mrp_production_source_count' args: 'Number of source MO'
  • name Char
    copy=False default=<expr> readonly=True args: 'Reference'
  • never_product_template_attribute_value_ids Many2many → product.template.attribute.value
    domain="[\n '&',\n ('attribute_line_id', 'in', valid_product_template_attribute_line_ids),\n ('attribute_id.create_variant', '=', 'no_variant')]" string='Never attribute values' args: 'product.template.attribute.value', 'template_attribute_value_mrp_production_rel', 'production_id', 'template_attribute_value_id'
  • orderpoint_id Many2one → stock.warehouse.orderpoint
    copy=False index='btree_not_null' args: 'stock.warehouse.orderpoint', 'Orderpoint'
  • origin Char
    copy=False help='Reference of the document that generated this production order request.' args: 'Source'
  • picking_ids Many2many → stock.picking
    compute='_compute_picking_ids' string='Picking associated to this manufacturing order' args: 'stock.picking'
  • picking_type_id Many2one → stock.picking.type
    check_company=True compute='_compute_picking_type_id' copy=True domain="[('code', '=', 'mrp_operation')]" index=True precompute=True readonly=False required=True store=True args: 'stock.picking.type', 'Operation Type'
  • priority Selection
    default='0' help='Components will be reserved first for the MO with the highest priorities.' string='Priority' args: PROCUREMENT_PRIORITIES
  • product_description_variants Char
    args: 'Custom Description'
  • product_id Many2one → product.product
    check_company=True compute='_compute_product_id' copy=True domain="[('type', '=', 'consu')]" precompute=True readonly=False required=True store=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=True digits='Product Unit' precompute=True readonly=False required=True store=True tracking=True args: 'Quantity To Produce'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template', 'Product Template'
  • product_tracking Selection
    related='product_id.tracking'
  • product_uom_id Many2one → uom.uom
    compute='_compute_uom_id' copy=True domain="[('id', 'in', allowed_uom_ids)]" precompute=True readonly=False required=True store=True args: 'uom.uom', 'Unit'
  • product_uom_qty Float
    compute='_compute_product_uom_qty' store=True string='Total Quantity'
  • product_variant_attributes Many2many → product.template.attribute.value
    related='product_id.product_template_attribute_value_ids' args: 'product.template.attribute.value'
  • production_capacity Float
    compute='_compute_production_capacity' help='Quantity that can be produced with the current stock of components'
  • production_group_id Many2one → mrp.production.group
    copy=False index=True args: 'mrp.production.group', 'Production Group'
  • production_location_id Many2one → stock.location
    compute='_compute_production_location' store=True args: 'stock.location', 'Production Location'
  • propagate_cancel Boolean
    help='If checked, when the previous move of the move (which was generated by a next procurement) is cancelled or split, the move generated by this move will too' args: 'Propagate cancel and split'
  • qty_produced Float
    compute='_get_produced_qty' string='Quantity Produced'
  • qty_producing Float
    copy=False digits='Product Unit' string='Quantity Producing'
  • reference_ids Many2many → stock.reference
    copy=False args: 'stock.reference', 'stock_reference_production_rel', 'production_id', 'reference_id', 'References'
  • reservation_state Selection
    compute='_compute_reservation_state' copy=False help='Manufacturing readiness for this MO, as per bill of material configuration:\n * Ready: The material is available to start the production.\n * Waiting: The material is not available to start the production.\n' index=True readonly=True store=True string='MO Readiness' tracking=True args: [('confirmed', 'Waiting'), ('assigned', 'Ready'), ('waiting', 'Waiting Another Operation')]
  • reserve_visible Boolean
    compute='_compute_unreserve_visible' help='Technical field to check when we can reserve quantities' args: 'Allowed to Reserve Production'
  • scrap_count Integer
    compute='_compute_scrap_move_count' string='Scrap Move'
  • scrap_ids One2many → stock.scrap
    args: 'stock.scrap', 'production_id', 'Scraps'
  • search_date_category Selection
    readonly=True search='_search_date_category' store=False string='Date Category' args: [('before', 'Before'), ('yesterday', 'Yesterday'), ('today', 'Today'), ('day_1', 'Tomorrow'), ('day_2', 'The day after tomorrow'), ('after', 'After')]
  • serial_numbers_count Integer
    compute='_compute_serial_numbers_count' args: 'Count of serial numbers'
  • show_allocation Boolean
    compute='_compute_show_allocation' help='Technical Field used to decide whether the button "Allocation" should be displayed.'
  • show_final_lots Boolean
    compute='_compute_show_lots' args: 'Show Final Lots'
  • show_generate_bom Boolean
    compute='_compute_show_generate_bom' args: 'Show Generate BOM'
  • show_lock Boolean
    compute='_compute_show_lock' args: 'Show Lock/unlock buttons'
  • show_lot_ids Boolean
    compute='_compute_show_lot_ids' args: 'Display the serial number shortcut on the moves'
  • show_produce Boolean
    compute='_compute_show_produce' help='Technical field to check if produce button can be shown'
  • show_produce_all Boolean
    compute='_compute_show_produce' help='Technical field to check if produce all button can be shown'
  • state Selection
    compute='_compute_state' copy=False help=" * Draft: The MO is not confirmed yet.\n * Confirmed: The MO is confirmed, the stock rules and the reordering of the components are trigerred.\n * In Progress: The production has started (on the MO or on the WO).\n * To Close: The production is done, the MO has to be closed.\n * Done: The MO is closed, the stock moves are posted. \n * Cancelled: The MO has been cancelled, can't be confirmed anymore." index=True readonly=True store=True string='State' tracking=True args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('progress', 'In Progress'), ('to_close', 'To Close'), ('done', 'Done'), ('cancel', 'Cancelled')]
  • unbuild_count Integer
    compute='_compute_unbuild_count' string='Number of Unbuilds'
  • unbuild_ids One2many → mrp.unbuild
    args: 'mrp.unbuild', 'mo_id', 'Unbuilds'
  • unreserve_visible Boolean
    compute='_compute_unreserve_visible' help='Technical field to check when we can unreserve' args: 'Allowed to Unreserve Production'
  • use_create_components_lots Boolean
    related='picking_type_id.use_create_components_lots'
  • user_id Many2one → res.users
    default=<expr> domain=<expr> args: 'res.users', 'Responsible'
  • valid_product_template_attribute_line_ids Many2many
    related='product_tmpl_id.valid_product_template_attribute_line_ids'
  • warehouse_id Many2one
    related='location_src_id.warehouse_id'
  • workcenter_id Many2one → mrp.workcenter
    store=False args: 'mrp.workcenter'
  • workorder_ids One2many → mrp.workorder
    compute='_compute_workorder_ids' copy=True readonly=False store=True args: 'mrp.workorder', 'production_id', 'Work Orders'
Public methods (37)
  • action_assign(self)
  • action_cancel(self)
    Cancels production order, unfinished stock moves and set procurement orders in exception
  • action_clear_lot_producing_ids(self)
  • action_confirm(self)
  • action_generate_bom(self)
    Generates a new Bill of Material based on the Manufacturing Order's product, components, workorders and by-products, and assigns it to the MO. Returns a new BoM's form view action.
  • action_generate_serial(self, workorder=False)
  • action_merge(self)
  • action_open_label_layout(self)
  • action_open_label_type(self)
  • action_plan_with_components_availability(self)
  • action_product_forecast_report(self)
  • action_see_move_scrap(self)
  • action_split(self)
  • action_start(self)
  • action_toggle_is_locked(self)
  • action_update_bom(self)
  • action_view_mo_delivery(self)
    Returns an action that display picking related to manufacturing order. It can either be a list view or in a form view (if there is only one picking to show).
  • action_view_mrp_production_backorders(self)
  • action_view_mrp_production_childs(self)
  • action_view_mrp_production_sources(self)
  • action_view_mrp_production_unbuilds(self)
  • action_view_reception_report(self)
  • action_view_serial_numbers(self)
  • button_mark_done(self)
  • button_plan(self)
    Create work orders. And probably do stuff, like things.
  • button_scrap(self)
  • button_unbuild(self)
  • button_unplan(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • do_unreserve(self)
  • get_empty_list_help(self, help_message)
    @api.model
  • pre_button_mark_done(self)
  • set_qty_producing(self)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • mrp_production_backorder_line_ids One2many → mrp.production.backorder.line
    string='Backorder Confirmation Lines' args: 'mrp.production.backorder.line', 'mrp_production_backorder_id'
  • mrp_production_ids Many2many → mrp.production
    args: 'mrp.production'
  • show_backorder_lines Boolean
    compute='_compute_show_backorder_lines' args: 'Show backorder lines'
Public methods (2)
  • action_backorder(self)
  • action_close_mo(self)

New fields (3)
  • mrp_production_backorder_id Many2one → mrp.production.backorder
    ondelete='cascade' required=True args: 'mrp.production.backorder', 'MO Backorder'
  • mrp_production_id Many2one → mrp.production
    ondelete='cascade' readonly=True required=True args: 'mrp.production', 'Manufacturing Order'
  • to_backorder Boolean
    args: 'To Backorder'
Public methods (0)

No public methods.

New fields (4)
  • child_ids Many2many → mrp.production.group
    string='Child Manufacturing Orders' args: 'mrp.production.group', 'mrp_production_group_rel', 'parent_group_id', 'child_group_id'
  • name Char
    index='btree' required=True args: 'Name'
  • parent_ids Many2many → mrp.production.group
    string='Parent Manufacturing Orders' args: 'mrp.production.group', 'mrp_production_group_rel', 'child_group_id', 'parent_group_id'
  • production_ids One2many → mrp.production
    string='Productions' args: 'mrp.production', 'production_group_id'
Public methods (0)

No public methods.

New fields (5)
  • lot_name Char
    compute='_compute_lot_name' readonly=False store=True args: 'First SN'
  • lot_quantity Integer
    compute='_compute_lot_quantity' readonly=False store=True args: 'Number of SN'
  • production_id Many2one → mrp.production
    args: 'mrp.production', 'Production'
  • serial_numbers Text
    compute='_compute_lot_name' readonly=False store=True args: 'Produced Serial Numbers'
  • workorder_id Many2one → mrp.workorder
    args: 'mrp.workorder', 'Workorder'
Public methods (3)
  • action_apply(self)
  • action_generate_serial_numbers(self)
  • action_split_and_assign_serials(self)

New fields (10)
  • max_batch_size Float
    compute='_compute_max_batch_size' digits='Product Unit' readonly=False args: 'Max Batch Size'
  • num_splits Integer
    compute='_compute_num_splits' readonly=True args: '# Splits'
  • product_id Many2one
    related='production_id.product_id'
  • product_qty Float
    related='production_id.product_qty'
  • product_uom_id Many2one
    related='production_id.product_uom_id'
  • production_capacity Float
    related='production_id.production_capacity'
  • production_detailed_vals_ids One2many → mrp.production.split.line
    compute='_compute_details' readonly=False store=True args: 'mrp.production.split.line', 'mrp_production_split_id', 'Split Details'
  • production_id Many2one → mrp.production
    readonly=True args: 'mrp.production', 'Manufacturing Order'
  • production_split_multi_id Many2one → mrp.production.split.multi
    args: 'mrp.production.split.multi', 'Split Productions'
  • valid_details Boolean
    compute='_compute_valid_details' args: 'Valid'
Public methods (3)
  • action_prepare_split(self)
  • action_return_to_list(self)
  • action_split(self)

New fields (4)
  • date Datetime
    args: 'Schedule Date'
  • mrp_production_split_id Many2one → mrp.production.split
    ondelete='cascade' required=True args: 'mrp.production.split', 'Split Production'
  • quantity Float
    digits='Product Unit' required=True args: 'Quantity To Produce'
  • user_id Many2one → res.users
    domain=<expr> args: 'res.users', 'Responsible'
Public methods (0)

No public methods.

New fields (1)
  • production_ids One2many → mrp.production.split
    args: 'mrp.production.split', 'production_split_multi_id', 'Productions To Split'
Public methods (0)

No public methods.

New fields (23)
  • active Boolean
    default=True
  • allow_operation_dependencies Boolean
    related='bom_id.allow_operation_dependencies'
  • blocked_by_operation_ids Many2many → mrp.routing.workcenter
    column1='operation_id' column2='blocked_by_id' copy=False domain="[('allow_operation_dependencies', '=', True), ('id', '!=', id), ('bom_id', '=', bom_id)]" help='Operations that need to be completed before this operation can start.' relation='mrp_routing_workcenter_dependencies_rel' string='Blocked By' args: 'mrp.routing.workcenter'
  • bom_id Many2one → mrp.bom
    check_company=True index=True ondelete='cascade' required=True args: 'mrp.bom', 'Bill of Material'
  • bom_product_template_attribute_value_ids Many2many → product.template.attribute.value
    domain="[('id', 'in', possible_bom_product_template_attribute_value_ids)]" help='BOM Product Variants needed to apply this line.' ondelete='restrict' string='Apply on Variants' args: 'product.template.attribute.value'
  • company_id Many2one → res.company
    related='bom_id.company_id' args: 'res.company', 'Company'
  • cost Float
    compute='_compute_cost' args: 'Cost'
  • cost_mode Selection
    default='actual' help='Determines the way Odoo calculates the cost of the operation:\n- Based on Actual time: the cost will be calculated based on tracked time and real employee costs.\n- Based on Estimated time: the cost will be calculated based on estimated time and costs.' string='Cost based on' tracking=True args: [('actual', 'Actual time'), ('estimated', 'Theorical time')]
  • cycle_number Integer
    compute='_compute_time_cycle' args: 'Repetitions'
  • name Char
    required=True args: 'Operation'
  • needed_by_operation_ids Many2many → mrp.routing.workcenter
    column1='blocked_by_id' column2='operation_id' copy=False domain="[('allow_operation_dependencies', '=', True), ('id', '!=', id), ('bom_id', '=', bom_id)]" help='Operations that cannot start before this operation is completed.' relation='mrp_routing_workcenter_dependencies_rel' string='Blocks' args: 'mrp.routing.workcenter'
  • possible_bom_product_template_attribute_value_ids Many2many
    related='bom_id.possible_product_template_attribute_value_ids'
  • sequence Integer
    default=100 help='Gives the sequence order when displaying a list of routing Work Centers.' args: 'Sequence'
  • show_time_total Boolean
    compute='_compute_time_cycle' args: 'Show Total Duration?'
  • time_computed_on Char
    compute='_compute_time_computed_on' args: 'Computed on last'
  • time_cycle Float
    compute='_compute_time_cycle' args: 'Cycles'
  • time_cycle_manual Float
    default=60 help="Time in minutes:- In fixed mode, time used- In computed mode, supposed first time when there aren't any work orders yet" tracking=True args: 'Manual Duration'
  • time_mode Selection
    default='manual' string='Duration Computation' tracking=True args: [('manual', 'Fixed'), ('auto', 'Computed')]
  • time_mode_batch Integer
    default=10 args: 'Based on'
  • time_total Float
    compute='_compute_time_cycle' args: 'Total Duration'
  • workcenter_id Many2one → mrp.workcenter
    check_company=True index=True required=True tracking=True args: 'mrp.workcenter', 'Work Center'
  • workorder_count Integer
    compute='_compute_workorder_count' args: '# Work Orders'
  • workorder_ids One2many → mrp.workorder
    string='Work Orders' args: 'mrp.workorder', 'operation_id'
Public methods (7)
  • action_archive(self)
  • action_open_operation_form(self)
  • action_unarchive(self)
  • copy_existing_operations(self)
  • copy_to_bom(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (16)
  • bom_id Many2one → mrp.bom
    check_company=True compute='_compute_bom_id' domain="[\n '|',\n ('product_id', '=', product_id),\n '&',\n ('product_tmpl_id.product_variant_ids', '=', product_id),\n ('product_id','=',False),\n ('type', '=', 'normal'),\n '|',\n ('company_id', '=', company_id),\n ('company_id', '=', False)\n ]" store=True args: 'mrp.bom', 'Bill of Material'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company', 'Company'
  • consume_line_ids One2many → stock.move
    readonly=True string='Consumed Disassembly Lines' args: 'stock.move', 'consume_unbuild_id'
  • has_tracking Selection
    readonly=True related='product_id.tracking'
  • location_dest_id Many2one → stock.location
    check_company=True compute='_compute_location_id' domain="[('usage','=','internal')]" help='Location where you want to send the components resulting from the unbuild order.' precompute=True readonly=False required=True store=True args: 'stock.location', 'Destination Location'
  • location_id Many2one → stock.location
    check_company=True compute='_compute_location_id' domain="[('usage','=','internal')]" help='Location where the product you want to unbuild is.' precompute=True readonly=False required=True store=True args: 'stock.location', 'Source Location'
  • lot_id Many2one → stock.lot
    check_company=True domain="[('product_id', '=', product_id),('id', 'in', lot_producing_ids)]" args: 'stock.lot', 'Lot/Serial Number'
  • lot_producing_ids Many2many → stock.lot
    related='mo_id.lot_producing_ids' string='Lot/Serial Numbers' args: 'stock.lot'
  • mo_bom_id Many2one → mrp.bom
    related='mo_id.bom_id' args: 'mrp.bom', 'Bill of Material used on the Production Order'
  • mo_id Many2one → mrp.production
    check_company=True domain="[('state', '=', 'done'), ('product_id', '=?', product_id), ('bom_id', '=?', bom_id)]" index='btree_not_null' args: 'mrp.production', 'Manufacturing Order'
  • name Char
    copy=False default=<expr> readonly=True args: 'Reference'
  • produce_line_ids One2many → stock.move
    readonly=True string='Processed Disassembly Lines' args: 'stock.move', 'unbuild_id'
  • product_id Many2one → product.product
    check_company=True compute='_compute_product_id' domain="[('type', '=', 'consu')]" precompute=True readonly=False required=True store=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' default=1.0 digits='Product Unit' precompute=True readonly=False required=True store=True args: 'Quantity'
  • product_uom_id Many2one → uom.uom
    compute='_compute_product_uom_id' precompute=True readonly=False required=True store=True args: 'uom.uom', 'Unit'
  • state Selection
    default='draft' string='Status' args: [('draft', 'Draft'), ('done', 'Done')]
Public methods (3)
  • action_unbuild(self)
  • action_validate(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (32)
  • active Boolean
    default=True readonly=False related='resource_id.active' store=True args: 'Active'
  • alternative_workcenter_ids Many2many → mrp.workcenter
    check_company=True domain="[('id', '!=', id), '|', ('company_id', '=', company_id), ('company_id', '=', False)]" help='Alternative workcenters that can be substituted to this one in order to dispatch production' string='Alternative Workcenters' args: 'mrp.workcenter', 'mrp_workcenter_alternative_rel', 'workcenter_id', 'alternative_workcenter_id'
  • blocked_time Float
    compute='_compute_blocked_time' digits=(16, 2) help='Blocked hours over the last month' args: 'Blocked Time'
  • capacity_ids One2many → mrp.workcenter.capacity
    copy=True help='Specific number of pieces that can be produced in parallel per product.' string='Product Capacities' args: 'mrp.workcenter.capacity', 'workcenter_id'
  • code Char
    copy=False args: 'Code'
  • color Integer
    args: 'Color'
  • costs_hour Float
    default=0.0 help='Hourly processing cost.' string='Cost per hour' tracking=True
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • has_routing_lines Boolean
    compute='_compute_has_routing_lines' help='Technical field for workcenter views'
  • kanban_dashboard_graph Text
    compute='_compute_kanban_dashboard_graph'
  • name Char
    readonly=False related='resource_id.name' store=True args: 'Work Center'
  • note Html
    args: 'Description'
  • oee Float
    compute='_compute_oee' help='Overall Equipment Effectiveness, based on the last month'
  • oee_target Float
    default=90 help='Overall Effective Efficiency Target in percentage' string='OEE Target'
  • order_ids One2many → mrp.workorder
    args: 'mrp.workorder', 'workcenter_id', 'Orders'
  • performance Integer
    compute='_compute_performance' help='Performance over the last month' args: 'Performance'
  • productive_time Float
    compute='_compute_productive_time' digits=(16, 2) help='Productive hours over the last month' args: 'Productive Time'
  • resource_calendar_id Many2one
    check_company=True
  • routing_line_ids One2many → mrp.routing.workcenter
    args: 'mrp.routing.workcenter', 'workcenter_id', 'Routing Lines'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of work centers.' required=True args: 'Sequence'
  • tag_ids Many2many → mrp.workcenter.tag
    args: 'mrp.workcenter.tag'
  • time_efficiency Float
    default=100 readonly=False related='resource_id.time_efficiency' store=True args: 'Time Efficiency'
  • time_ids One2many → mrp.workcenter.productivity
    args: 'mrp.workcenter.productivity', 'workcenter_id', 'Time Logs'
  • time_start Float
    args: 'Setup Time'
  • time_stop Float
    args: 'Cleanup Time'
  • workcenter_load Float
    compute='_compute_workorder_count' args: 'Work Center Load'
  • working_state Selection
    compute='_compute_working_state' store=True args: [('normal', 'Normal'), ('blocked', 'Blocked'), ('done', 'In Progress')], 'Workcenter Status'
  • workorder_blocked_count Integer
    compute='_compute_workorder_count' args: 'Total Pending Orders'
  • workorder_count Integer
    compute='_compute_workorder_count' args: '# Work Orders'
  • workorder_late_count Integer
    compute='_compute_workorder_count' args: 'Total Late Orders'
  • workorder_progress_count Integer
    compute='_compute_workorder_count' args: 'Total Running Orders'
  • workorder_ready_count Integer
    compute='_compute_workorder_count' args: '# To Do Work Orders'
Public methods (7)
  • action_archive(self)
  • action_show_operations(self)
  • action_work_order(self)
  • action_work_order_alternatives(self)
  • create(self, vals_list)
    @api.model_create_multi
  • unblock(self)
  • write(self, vals)

New fields (6)
  • capacity Float
    help='Number of pieces that can be produced in parallel for this product or for all, depending on the unit.' args: 'Capacity'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    compute='_compute_product_uom_id' precompute=True readonly=False required=True store=True string='Unit' args: 'uom.uom'
  • time_start Float
    default=_default_time_start help='Time in minutes for the setup.' args: 'Setup Time (minutes)'
  • time_stop Float
    default=_default_time_stop help='Time in minutes for the cleaning.' args: 'Cleanup Time (minutes)'
  • workcenter_id Many2one → mrp.workcenter
    index=True required=True string='Work Center' args: 'mrp.workcenter'
Public methods (0)

No public methods.

New fields (11)
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company'
  • date_end Datetime
    args: 'End Date'
  • date_start Datetime
    default=fields.Datetime.now required=True args: 'Start Date'
  • description Text
    args: 'Description'
  • duration Float
    compute='_compute_duration' store=True args: 'Duration'
  • loss_id Many2one → mrp.workcenter.productivity.loss
    ondelete='restrict' required=True args: 'mrp.workcenter.productivity.loss', 'Loss Reason'
  • loss_type Selection
    readonly=False related='loss_id.loss_type' string='Effectiveness'
  • production_id Many2one → mrp.production
    readonly=True related='workorder_id.production_id' string='Manufacturing Order' args: 'mrp.production'
  • user_id Many2one → res.users
    default=<expr> args: 'res.users', 'User'
  • workcenter_id Many2one → mrp.workcenter
    check_company=True index=True required=True args: 'mrp.workcenter', 'Work Center'
  • workorder_id Many2one → mrp.workorder
    check_company=True index=True args: 'mrp.workorder', 'Work Order'
Public methods (1)
  • button_block(self)

New fields (5)
  • loss_id Many2one → mrp.workcenter.productivity.loss.type
    domain=[('loss_type', 'in', ['quality', 'availability'])] string='Category' args: 'mrp.workcenter.productivity.loss.type'
  • loss_type Selection
    readonly=False related='loss_id.loss_type' string='Effectiveness Category'
  • manual Boolean
    default=True args: 'Is a Blocking Reason'
  • name Char
    required=True translate=True args: 'Blocking Reason'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (1)
  • loss_type Selection
    default='availability' required=True string='Category' args: [('availability', 'Availability'), ('performance', 'Performance'), ('quality', 'Quality'), ('productive', 'Productive')]
Public methods (0)

No public methods.

New fields (2)
  • color Integer
    default=_get_default_color args: 'Color Index'
  • name Char
    required=True args: 'Tag Name'
Public methods (0)

No public methods.

New fields (51)
  • allow_workorder_dependencies Boolean
    related='production_id.allow_workorder_dependencies'
  • barcode Char
    compute='_compute_barcode' store=True
  • blocked_by_workorder_ids Many2many → mrp.workorder
    column1='workorder_id' column2='blocked_by_id' copy=False domain="[('allow_workorder_dependencies', '=', True), ('id', '!=', id), ('production_id', '=', production_id)]" relation='mrp_workorder_dependencies_rel' string='Blocked By' args: 'mrp.workorder'
  • company_id Many2one
    related='production_id.company_id'
  • consumption Selection
    related='production_id.consumption'
  • cost_mode Selection
    default='actual' args: [('actual', 'Actual'), ('estimated', 'Estimated')]
  • costs_hour Float
    aggregator='avg' default=0.0 string='Cost per hour'
  • date_finished Datetime
    compute='_compute_dates' copy=False inverse='_set_dates' store=True args: 'End'
  • date_start Datetime
    compute='_compute_dates' copy=False inverse='_set_dates' store=True args: 'Start'
  • duration Float
    compute='_compute_duration' copy=False inverse='_set_duration' readonly=False store=True args: 'Real Duration'
  • duration_expected Float
    compute='_compute_duration_expected' digits=(16, 2) readonly=False store=True args: 'Expected Duration'
  • duration_percent Integer
    aggregator='avg' compute='_compute_duration' readonly=True store=True args: 'Duration Deviation (%)'
  • duration_unit Float
    aggregator='avg' compute='_compute_duration' readonly=True store=True args: 'Duration Per Unit'
  • finished_lot_ids Many2many → stock.lot
    check_company=True domain="[('product_id', '=', product_id), ('company_id', '=', company_id)]" readonly=False related='production_id.lot_producing_ids' string='Lot/Serial Numbers' args: 'stock.lot'
  • is_planned Boolean
    related='production_id.is_planned'
  • is_produced Boolean
    compute='_compute_is_produced' string='Has Been Produced'
  • is_user_working Boolean
    compute='_compute_working_users' args: 'Is the Current User Working'
  • json_popover Char
    compute='_compute_json_popover' args: 'Popover Data JSON'
  • last_working_user_id Many2one → res.users
    compute='_compute_working_users' string='Last user that worked on this work order.' args: 'res.users'
  • leave_id Many2one → resource.calendar.leaves
    check_company=True copy=False help='Slot into workcenter calendar once planned' args: 'resource.calendar.leaves'
  • move_finished_ids One2many → stock.move
    domain=[('raw_material_production_id', '=', False), ('production_id', '!=', False)] args: 'stock.move', 'workorder_id', 'Finished Moves'
  • move_line_ids One2many → stock.move.line
    help='Inventory moves for which you must scan a lot number at this work order' args: 'stock.move.line', 'workorder_id', 'Moves to Track'
  • move_raw_ids One2many → stock.move
    domain=[('raw_material_production_id', '!=', False), ('production_id', '=', False)] args: 'stock.move', 'workorder_id', 'Raw Moves'
  • name Char
    required=True args: 'Work Order'
  • needed_by_workorder_ids Many2many → mrp.workorder
    column1='blocked_by_id' column2='workorder_id' copy=False domain="[('allow_workorder_dependencies', '=', True), ('id', '!=', id), ('production_id', '=', production_id)]" relation='mrp_workorder_dependencies_rel' string='Blocks' args: 'mrp.workorder'
  • operation_id Many2one → mrp.routing.workcenter
    check_company=True index='btree_not_null' args: 'mrp.routing.workcenter', 'Operation'
  • product_id Many2one
    related='production_id.product_id'
  • product_tracking Selection
    related='product_id.tracking'
  • product_uom_id Many2one
    related='production_id.product_uom_id'
  • product_variant_attributes Many2many → product.template.attribute.value
    related='product_id.product_template_attribute_value_ids' args: 'product.template.attribute.value'
  • production_availability Selection
    readonly=True related='production_id.reservation_state' store=True string='Stock Availability'
  • production_bom_id Many2one → mrp.bom
    related='production_id.bom_id' args: 'mrp.bom'
  • production_date Datetime
    compute='_compute_production_date' store=True args: 'Production Date'
  • production_id Many2one → mrp.production
    check_company=True index='btree' readonly=True required=True args: 'mrp.production', 'Manufacturing Order'
  • production_state Selection
    readonly=True related='production_id.state' string='Production State'
  • progress Float
    compute='_compute_progress' digits=(16, 2) args: 'Progress Done (%)'
  • qty_produced Float
    copy=False default=0.0 digits='Product Unit' help='The number of products already handled by this work order' args: 'Quantity Done'
  • qty_producing Float
    compute='_compute_qty_producing' digits='Product Unit' inverse='_set_qty_producing' string='Currently Produced Quantity'
  • qty_production Float
    readonly=True related='production_id.product_qty' args: 'Original Production Quantity'
  • qty_ready Float
    compute='_compute_qty_ready' digits='Product Unit' args: 'Quantity Ready'
  • qty_remaining Float
    compute='_compute_qty_remaining' digits='Product Unit' args: 'Quantity To Be Produced'
  • qty_reported_from_previous_wo Float
    copy=False digits='Product Unit' help='The quantity already produced awaiting allocation in the backorders chain.' args: 'Carried Quantity'
  • scrap_count Integer
    compute='_compute_scrap_move_count' string='Scrap Move'
  • scrap_ids One2many → stock.scrap
    args: 'stock.scrap', 'workorder_id'
  • sequence Integer
    default=_default_sequence args: 'Sequence'
  • show_json_popover Boolean
    compute='_compute_json_popover' args: 'Show Popover?'
  • state Selection
    compute='_compute_state' copy=False default='ready' index=True store=True string='Status' args: [('blocked', 'Blocked'), ('ready', 'To Do'), ('progress', 'In Progress'), ('done', 'Finished'), ('cancel', 'Cancelled')]
  • time_ids One2many → mrp.workcenter.productivity
    copy=False args: 'mrp.workcenter.productivity', 'workorder_id'
  • workcenter_id Many2one → mrp.workcenter
    check_company=True group_expand='_read_group_workcenter_id' index=True required=True args: 'mrp.workcenter', 'Work Center'
  • working_state Selection
    related='workcenter_id.working_state' string='Workcenter Status'
  • working_user_ids One2many → res.users
    compute='_compute_working_users' string='Working user on this work order.' args: 'res.users'
Public methods (18)
  • action_cancel(self)
  • action_mark_as_done(self)
  • action_open_wizard(self)
  • action_replan(self)
    Replan a work order. It actually replans every "ready" or "blocked" work orders of the linked manufacturing orders.
  • action_see_move_scrap(self)
  • button_finish(self)
  • button_pending(self)
  • button_scrap(self)
  • button_start(self, raise_on_invalid_state=False)
  • button_unblock(self)
  • create(self, vals_list)
    @api.model_create_multi
  • end_all(self)
  • end_previous(self, doall=False)
    @param: doall: This will close all open time lines on the open work orders when doall = True, otherwise only the one of the current user
  • get_duration(self)
  • get_working_duration(self)
    Get the additional duration for 'open times' i.e. productivity lines with no date_end.
  • set_state(self, state)
  • unlink(self)
  • write(self, vals)

New fields (1)
  • production_ids Many2many → mrp.production
    args: 'mrp.production'
Public methods (1)
  • process(self)

New fields (1)
  • attached_on_mrp Selection
    default=<expr> help='Leave hidden if document only accessible on product form.\nSelect Bill of Materials to visualise this document as a product attachment when this product is in a bill of material.' required=True selection=[('hidden', 'Hidden'), ('bom', 'Bill of Materials')] string='MRP : Visible at'
Public methods (0)

No public methods.

New fields (8)
  • bom_count Integer
    compute='_compute_bom_count' compute_sudo=False args: '# Bill of Material'
  • bom_line_ids One2many → mrp.bom.line
    args: 'mrp.bom.line', 'product_id', 'BoM Components'
  • is_kits Boolean
    compute='_compute_is_kits' search='_search_is_kits'
  • mrp_product_qty Float
    compute='_compute_mrp_product_qty' compute_sudo=False digits='Product Unit' args: 'Manufactured'
  • product_catalog_product_is_in_bom Boolean
    compute='_compute_product_is_in_bom_and_mo' search='_search_product_is_in_bom'
  • product_catalog_product_is_in_mo Boolean
    compute='_compute_product_is_in_bom_and_mo' search='_search_product_is_in_mo'
  • used_in_bom_count Integer
    compute='_compute_used_in_bom_count' compute_sudo=False args: '# BoM Where Used'
  • variant_bom_ids One2many → mrp.bom
    args: 'mrp.bom', 'product_id', 'BOM Product Variants'
Public methods (8)
  • action_archive(self)
  • action_open_quants(self)
  • action_used_in_bom(self)
  • action_view_bom(self)
  • action_view_mos(self)
  • get_components(self)
    Return the components list ids in case of kit product. Return the product itself otherwise
  • get_total_routes(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • bom_count Integer
    compute='_compute_bom_count' compute_sudo=False args: '# Bill of Material'
  • bom_ids One2many → mrp.bom
    args: 'mrp.bom', 'product_tmpl_id', 'Bill of Materials'
  • bom_line_ids One2many → mrp.bom.line
    args: 'mrp.bom.line', 'product_tmpl_id', 'BoM Components'
  • is_kits Boolean
    compute='_compute_is_kits' search='_search_is_kits'
  • mrp_product_qty Float
    compute='_compute_mrp_product_qty' compute_sudo=False digits='Product Unit' args: 'Manufactured'
  • used_in_bom_count Integer
    compute='_compute_used_in_bom_count' compute_sudo=False args: '# of BoM Where is Used'
Public methods (4)
  • action_archive(self)
  • action_used_in_bom(self)
  • action_view_mos(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • get_html(self, bom_id=False, searchQty=1, searchVariant=False)
    @api.model
  • get_warehouses(self)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, production_id)
    @api.model
    Endpoint for HTML display.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_missing_unbuild_sequences(self)
    @api.model

New fields (10)
  • group_mrp_byproducts Boolean
    implied_group='mrp.group_mrp_byproducts' args: 'By-Products'
  • group_mrp_reception_report Boolean
    implied_group='mrp.group_mrp_reception_report' args: 'Allocation Report for Manufacturing Orders'
  • group_mrp_routings Boolean
    implied_group='mrp.group_mrp_routings' args: 'MRP Work Orders'
  • group_mrp_workorder_dependencies Boolean
    implied_group='mrp.group_mrp_workorder_dependencies' args: 'Work Order Dependencies'
  • group_unlocked_by_default Boolean
    implied_group='mrp.group_unlocked_by_default' args: 'Unlock Manufacturing Orders'
  • module_mrp_mps Boolean
    args: 'Master Production Schedule'
  • module_mrp_plm Boolean
    args: 'Product Lifecycle Management (PLM)'
  • module_mrp_subcontracting Boolean
    args: 'Subcontracting'
  • module_quality_control Boolean
    args: 'Quality'
  • module_quality_control_worksheet Boolean
    args: 'Quality Worksheet'
Public methods (1)
  • set_values(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.

New fields (18)
  • allowed_operation_ids One2many → mrp.routing.workcenter
    related='raw_material_production_id.bom_id.operation_ids' args: 'mrp.routing.workcenter'
  • bom_line_id Many2one → mrp.bom.line
    check_company=True args: 'mrp.bom.line', 'BoM Line'
  • byproduct_id Many2one → mrp.bom.byproduct
    check_company=True help='By-product line that generated the move in a manufacturing order' args: 'mrp.bom.byproduct', 'By-products'
  • consume_unbuild_id Many2one → mrp.unbuild
    check_company=True index='btree_not_null' args: 'mrp.unbuild', 'Consumed Disassembly Order'
  • cost_share Float
    digits=0 help="The percentage of the final production cost for this by-product. The total of all by-products' cost share must be smaller or equal to 100." args: 'Cost Share (%)'
  • created_production_id Many2one → mrp.production
    check_company=True index=True args: 'mrp.production', 'Created Production Order'
  • manual_consumption Boolean
    compute='_compute_manual_consumption' help='When activated, then the registration of consumption for that component is recorded manually exclusively.\nIf not activated, and any of the components consumption is edited manually on the manufacturing order, Odoo assumes manual consumption also.' readonly=False store=True args: 'Manual Consumption'
  • operation_id Many2one → mrp.routing.workcenter
    check_company=True domain="[('id', 'in', allowed_operation_ids)]" args: 'mrp.routing.workcenter', 'Operation To Consume'
  • order_finished_lot_ids Many2many → stock.lot
    related='raw_material_production_id.lot_producing_ids' string='Finished Lot/Serial Number' args: 'stock.lot'
  • product_qty_available Float
    depends=['product_id'] related='product_id.qty_available' args: 'Product On Hand Quantity'
  • product_virtual_available Float
    depends=['product_id'] related='product_id.virtual_available' args: 'Product Forecasted Quantity'
  • production_group_id Many2one → mrp.production.group
    args: 'mrp.production.group', 'Used for Productions'
  • production_id Many2one → mrp.production
    check_company=True index='btree_not_null' ondelete='cascade' args: 'mrp.production', 'Production Order for finished products'
  • raw_material_production_id Many2one → mrp.production
    check_company=True index='btree_not_null' ondelete='cascade' args: 'mrp.production', 'Production Order for components'
  • should_consume_qty Float
    compute='_compute_should_consume_qty' digits='Product Unit' args: 'Quantity To Consume'
  • unbuild_id Many2one → mrp.unbuild
    check_company=True index='btree_not_null' args: 'mrp.unbuild', 'Disassembly Order'
  • unit_factor Float
    compute='_compute_unit_factor' store=True args: 'Unit Factor'
  • workorder_id Many2one → mrp.workorder
    check_company=True copy=False index='btree_not_null' args: 'mrp.workorder', 'Work Order To Consume'
Public methods (8)
  • action_add_from_catalog_byproduct(self)
  • action_add_from_catalog_raw(self)
  • action_explode(self)
    Explodes pickings
  • action_open_reference(self)
  • action_show_details(self)
  • create(self, vals_list)
    @api.model_create_multi
    Enforce consistent values (i.e. match _get_move_raw_values/_get_move_finished_values) for: - Manually added components/byproducts specifically values we can't set via view with "default_" - Moves from a copied MO - Backorders
  • default_get(self, fields)
    @api.model
  • write(self, vals)

New fields (2)
  • production_id Many2one → mrp.production
    check_company=True args: 'mrp.production', 'Production Order'
  • workorder_id Many2one → mrp.workorder
    check_company=True index='btree_not_null' args: 'mrp.workorder', 'Work Order'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • has_kits Boolean
    compute='_compute_has_kits'
  • production_count Integer
    compute='_compute_mrp_production_ids' groups='mrp.group_mrp_user' args: 'Count of MO generated'
  • production_group_id Many2one → mrp.production.group
    related='move_ids.production_group_id' string='Production Group' args: 'mrp.production.group'
  • production_ids One2many → mrp.production
    compute='_compute_production_ids' groups='mrp.group_mrp_user' string='Manufacturing Orders' args: 'mrp.production'
Public methods (3)
  • action_detailed_operations(self)
  • action_view_mrp_production(self)
  • get_action_click_graph(self)
    @api.model

New fields (16)
  • auto_print_done_mrp_lot Boolean
    help='If this checkbox is ticked, Odoo will automatically print the lot/SN label of a MO when it is done.' args: 'Auto Print Produced Lot Label'
  • auto_print_done_mrp_product_labels Boolean
    help='If this checkbox is ticked, Odoo will automatically print the product labels of a MO when it is done.' args: 'Auto Print Produced Product Labels'
  • auto_print_done_production_order Boolean
    help='If this checkbox is ticked, Odoo will automatically print the production order of a MO when it is done.' args: 'Auto Print Done Production Order'
  • auto_print_generated_mrp_lot Boolean
    help='Automatically print the lot/SN label when the "Create a new serial/lot number" button is used.' args: 'Auto Print Generated Lot/SN Label'
  • auto_print_mrp_reception_report Boolean
    help='If this checkbox is ticked, Odoo will automatically print the allocation report of a MO when it is done and has assigned moves.' args: 'Auto Print Allocation Report'
  • auto_print_mrp_reception_report_labels Boolean
    help='If this checkbox is ticked, Odoo will automatically print the allocation report labels of a MO when it is done.' args: 'Auto Print Allocation Report Labels'
  • code Selection
    ondelete={'mrp_operation': <expr>} selection_add=[('mrp_operation', 'Manufacturing')]
  • count_mo_in_progress Integer
    compute='_get_mo_count' string='Number of Manufacturing Orders In Progress'
  • count_mo_late Integer
    compute='_get_mo_count' string='Number of Manufacturing Orders Late'
  • count_mo_to_close Integer
    compute='_get_mo_count' string='Number of Manufacturing Orders To Close'
  • count_mo_todo Integer
    compute='_get_mo_count' string='Number of Manufacturing Orders to Process'
  • count_mo_waiting Integer
    compute='_get_mo_count' string='Number of Manufacturing Orders Waiting'
  • done_mrp_lot_label_to_print Selection
    default='pdf' args: [('pdf', 'PDF'), ('zpl', 'ZPL')], 'Lot/SN Label to Print'
  • generated_mrp_lot_label_to_print Selection
    default='pdf' args: [('pdf', 'PDF'), ('zpl', 'ZPL')], 'Generated Lot/SN Label to Print'
  • mrp_product_label_to_print Selection
    default='pdf' args: [('pdf', 'PDF'), ('zpl', 'ZPL')], 'Product Label to Print'
  • use_create_components_lots Boolean
    default=False help='Allow to create new lot/serial numbers for the components' string='Create New Lots/Serial Numbers for Components'
Public methods (1)
  • get_mrp_stock_picking_action_picking_type(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • production_ids Many2many → mrp.production
    string='Productions' args: 'mrp.production', 'stock_reference_production_rel', 'reference_id', 'production_id'
Public methods (0)

No public methods.

New fields (2)
  • bom_id Many2one → mrp.bom
    string='Bill of Material' args: 'mrp.bom'
  • show_bom Boolean
    compute='_compute_show_bom'
Public methods (0)

No public methods.

New fields (3)
  • bom_id Many2one
    related='orderpoint_id.bom_id'
  • bom_ids Many2many → mrp.bom
    compute='_compute_bom_ids' store=True args: 'mrp.bom'
  • show_bom_tab Boolean
    compute='_compute_show_bom_tab'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • action Selection
    ondelete={'manufacture': 'cascade'} selection_add=[('manufacture', 'Manufacture')]
Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model
    If 'run' is called on a kit, this override is made in order to call the original 'run' method with the values of the components of that kit.

New fields (5)
  • bom_id Many2one → mrp.bom
    check_company=True domain="[('type', '=', 'phantom'), '|', ('product_id', '=', product_id), '&', ('product_id', '=', False), ('product_tmpl_id', '=', product_template)]" args: 'mrp.bom', 'Kit'
  • product_is_kit Boolean
    related='product_id.is_kits'
  • product_template Many2one
    related='product_id.product_tmpl_id'
  • production_id Many2one → mrp.production
    check_company=True index='btree_not_null' args: 'mrp.production', 'Manufacturing Order'
  • workorder_id Many2one → mrp.workorder
    check_company=True index='btree_not_null' args: 'mrp.workorder', 'Work Order'
Public methods (2)
  • do_replenish(self, values=False)
  • do_scrap(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (12)
  • manu_type_id Many2one → stock.picking.type
    check_company=True copy=False domain="[('code', '=', 'mrp_operation'), ('company_id', '=', company_id)]" args: 'stock.picking.type', 'Manufacturing Operation Type'
  • manufacture_mto_pull_id Many2one → stock.rule
    copy=False args: 'stock.rule', 'Manufacture MTO Rule'
  • manufacture_pull_id Many2one → stock.rule
    copy=False args: 'stock.rule', 'Manufacture Rule'
  • manufacture_steps Selection
    default='mrp_one_step' help='1 Step: Consume components from stock and produce.\n 2 Steps: Pick components from stock and then produce.\n 3 Steps: Pick components from stock, produce, and then move final product(s) from production area to stock.' required=True args: [('mrp_one_step', 'Manufacture (1 step)'), ('pbm', 'Pick components then manufacture (2 steps)'), ('pbm_sam', 'Pick components, manufacture, then store products (3 steps)')], 'Manufacture'
  • manufacture_to_resupply Boolean
    compute='_compute_manufacture_to_resupply' default=True help='When products are manufactured, they can be manufactured in this warehouse.' inverse='_inverse_manufacture_to_resupply' args: 'Manufacture to Resupply'
  • pbm_loc_id Many2one → stock.location
    check_company=True args: 'stock.location', 'Picking before Manufacturing Location'
  • pbm_mto_pull_id Many2one → stock.rule
    copy=False args: 'stock.rule', 'Picking Before Manufacturing MTO Rule'
  • pbm_route_id Many2one → stock.route
    copy=False ondelete='restrict' args: 'stock.route', 'Picking Before Manufacturing Route'
  • pbm_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Picking Before Manufacturing Operation Type'
  • sam_loc_id Many2one → stock.location
    check_company=True args: 'stock.location', 'Stock after Manufacturing Location'
  • sam_rule_id Many2one → stock.rule
    copy=False args: 'stock.rule', 'Stock After Manufacturing Rule'
  • sam_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Stock After Manufacturing Operation Type'
Public methods (2)
  • get_rules_dict(self)
  • write(self, vals)

New fields (4)
  • bom_id Many2one → mrp.bom
    check_company=True domain="[('type', '=', 'normal'), '&', '|', ('company_id', '=', company_id), ('company_id', '=', False), '|', ('product_id', '=', product_id), '&', ('product_id', '=', False), ('product_tmpl_id', '=', product_tmpl_id)]" inverse='_inverse_bom_id' string='Bill of Materials' args: 'mrp.bom'
  • bom_id_placeholder Char
    compute='_compute_bom_id_placeholder'
  • effective_bom_id Many2one → mrp.bom
    compute='_compute_effective_bom_id' help='Either the Bill of Materials set directly or the one computed to be used by this replenishment' search='_search_effective_bom_id' store=False string='Effective Bill of Materials' args: 'mrp.bom'
  • show_bom Boolean
    compute='_compute_show_bom' args: 'Show BoM column'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • check_product_is_not_kit(self)
    @api.constrains('product_id')

New fields (1)
  • unbuild_id Many2one → mrp.unbuild
    args: 'mrp.unbuild', 'Unbuild'
Public methods (1)
  • action_done(self)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…