Repository
odoo/odoo · module folder
Module version
1.1
Category
Supply Chain/Inventory
Folder size
29.07 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/inventory
Last tracking update
2026-08-15 22:44:15
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Atul Patel, Odoo Translation Bot, Aaron Bohy, Lucas Perais (lpe), Adrien Dieudonne, Christophe Monniez, Arnold Moyaux, Julien Castiaux, Denis Roussel, Victor Feyens, William Henrotin, svs-odoo, Lois Rilo, Alvaro Fuentes, std-odoo, Prakash Prajapati, Rémy Voet (ryv), Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, William Braeckman, Ashmawy Walid (was), Miquel Raïch, JF Aubert, David (dafr), Abdelouahab (abla), Aurelien van Delft (avd), luvi, Hubert Van De Walle, Renaud Thiry, Vincent Larcin, Louis Wicket (wil), alsh-odoo, Adrien Widart (awt), Victor Piryns (pivi), Djamel Touati, Pieter Claeys (clpi), Andrew Gavgavian, clesgow, Levi Siuzdak (sile), Naman Shah, Dylan Kiss (dyki), Jinane Maksoud, ノウラ, kir-odoo, Odoo, bram1000, Martin Maes, tanghulu0608, Xavier Bol (xbo), Paweł Fertyk, adda-odoo, omra-odoo, sesn-odoo, Walid (wasa), stefanorigano (SRI), aktr-odoo, lase@odoo.com, Quentin Wolfs, Aurelien MARIE (auma), Ethan Vincent, reka-odoo, yosa-odoo, Nathaniel (naja), vava-odoo, Julien Carion (juca), Bastien Fafchamps (bafa), kcv-odoo, Ritika Rathore, Louis Gobert, nihp-odoo, Chrysanthe (chgo), sami odoo, asno-odoo, Junqi Wu, mano-odoo, Max Whale, Hussein Ebrahim(hyhe), Patricia Daloze (pda), yagp-odoo, Mohammad Abdulmoneim, Edoardo Piroli, dhpa-odoo, Mathias Mathy (MAMA), komugi-al, Stéphane Diez, kawkb, dhha-odoo, gteboul, Hammad Arif, Pierre Pulinckx (PIPU), Jitendra Prajapat, Ian, Victor Miguel Armenta Carrillo, Arthur Nanson, st-yes, David Van Droogenbroeck (DROD), elhayyany, pkgu-odoo, Mohammad Abdulmoneim (abdu), djameltouati, khsr-odoo, Pierre Lamotte (pila), Pierre Pulinckx, Bastien PIERRE, Michaël Mattiello, Corentin Heinix (cohe), Corentin Lombard, kasm, Mahdi Alijani (malj), MaximeNoirhomme, chha-odoo, plha-odoo, Krzysztof Magusiak (krma), Omar (OSAH), Ajit Singh, krip-odoo, joseph, Robin Engels (roen), Basioni (basm), sagu-odoo, vlst-odoo, Maeva De Keyser (MDEK), utma-odoo, Hadi El Yakhni, Ester Andreetto, nsirjacobs, bhna-odoo, defl, MAGREMENT, temo-odoo, aksi-odoo, Ze Chen (zeche), mohannedah, Junqi, BT-anieto, kinhosz, agbr-odoo, depr-odoo, Lulu Grimalkin (lugr), rare-odoo, felin-odoo, sawer, Lancelot Semal, Laetitia (ldau), adip-odoo, Quentin Colla (qucol), ABE-Mark45, path-odoo, Amr Elkhatieb, Cooper Spinelli, Robert Smith (rosm), Elliot ELCO, hossamelgendy1, YoussefM890, damrOdoo, Joe Wesnofske, =, srap-odoo, saurabh, Nguyen Nguyen (ngtpn), Zachary (zavan), sako-odoo, tpma-odoo, Jonathan Swales, Youssef (abyo), msho-odoo, lase, Atri Patel(atpa), chpa-odoo, hapt-odoo, Nuno, Joseph Nechleba (jonec), Youssef, Sanket Tank(stan), Thomas Schneider, qucol-odoo, Shiv Bhadaniya (sbha), kush-odoo, Antonio Pimentel, Mathias Mathy, ddba-odoo
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
fieldservice_stock, hotel_reservation, l10n_co_electronic_invoice, l10n_din5008_stock, l10n_ec_stock, l10n_eu_product_adr, l10n_in_stock, l10n_mx_cfdi_waybill, l10n_ro_stock, l10n_tr_nilvera_edispatch, mrp, partner_delivery_info, pms_stock, product_brand_stock, product_class, product_expiry, product_harmonized_system_stock, product_net_weight, project_stock, shopify_connector, stock_account, stock_available, stock_delivery_note, stock_demand_estimate, stock_inventory, stock_inventory_justification, stock_inventory_lockdown, stock_location_is_sublocation, stock_location_position, stock_maintenance, stock_move_quantity_product_uom, stock_orderpoint_safety_stock, stock_picking_batch, stock_picking_invoicing, stock_picking_report_external_note, stock_picking_show_linked, stock_picking_tier_validation, stock_picking_type_user_restriction, stock_picking_volume, stock_product_demand_info, stock_product_pack, stock_quant_manual_assign, stock_replenishment_mrp_bom_selection, stock_request, stock_sms, stock_warehouse_calendar, tms_product
Description

Code Analysis

Views touched (177)
XML IDNameModelTypeStatus
alternative_zpl_label alternative_zpl_label ir.ui.view qweb New
exception_on_picking exception_on_picking ir.ui.view qweb New
help_message_template Help Message ir.ui.view qweb New
inventory_warning_reset_view inventory.reset.warning.view stock.inventory.warning form New
inventory_warning_set_view inventory.set.warning.view stock.inventory.warning form New
jewelry_zpl_label jewelry_zpl_label ir.ui.view qweb New
label_lot_template_view label_lot_template_view ir.ui.view qweb New
label_package_history_template_view label_package_history_template_view ir.ui.view qweb New
label_package_template_view label_package_template_view ir.ui.view qweb New
label_packaging_barcode_view label_packaging_barcode_view ir.ui.view qweb New
label_picking_type_view label_picking_type_view ir.ui.view qweb New
label_product_product_view label_product_product_view ir.ui.view qweb New
label_transfer_template_view_pdf label_transfer_template_view_pdf ir.ui.view qweb New
label_transfer_template_view_zpl label_transfer_template_view_zpl ir.ui.view qweb New
lot_label_layout_form_picking lot.label.layout.form lot.label.layout form New
message_body message_body ir.ui.view qweb New
message_head message_head ir.ui.view qweb New
normal_zpl_label normal_zpl_label ir.ui.view qweb New
package_history_search_view stock.package.history.search stock.package.history search New
picking_label_type_form picking.label.type.form picking.label.type form New
product_category_form_view_inherit product.category.form product.category form Inherits product.product_category_form_view
product_form_view_procurement_button product.product.procurement product.product form Inherits product.product_normal_form_view
product_label_layout_form_picking product.label.layout.form product.label.layout form Inherits product.product_label_layout_form
product_label_layout_form_stock product.label.layout.form.stock product.label.layout form Inherits product.product_label_layout_form
product_product_stock_tree product.product.stock.list product.product list New
product_search_form_view_stock product.search.stock.form product.product form Inherits product.product_search_form_view
product_search_form_view_stock_report product.product.search.stock.form.stock.report product.product form Inherits stock_product_search_form_view
product_template_form_view_procurement_button product.template_procurement product.template form Inherits product.product_template_only_form_view
product_template_kanban_stock_view Product Template Kanban Stock product.template kanban Inherits product.product_template_kanban_view
product_template_search_form_view_stock product.template.search.stock.form product.template form Inherits product.product_template_search_view
product_template_search_view_inherit_stock product.template.search.inherit.stock product.template search Inherits product.product_template_search_view
product_uom_form_view_inherit uom.uom.form.inherit uom.uom form Inherits uom.product_uom_form_view
product_uom_tree_view_inherit uom.uom.list.inherit uom.uom list Inherits uom.product_uom_tree_view
product_view_kanban_catalog product.view.kanban.catalog.inherit.stock product.product kanban Inherits product.product_view_kanban_catalog
quant_search_view stock.quant.search stock.quant search New
replenishment_option_tree_view stock.replenishment.option.list.view stock.replenishment.option list New
replenishment_option_warning_view stock.replenishment.warning.view stock.replenishment.option form New
report_delivery_document report_delivery_document ir.ui.view qweb New
report_deliveryslip report_deliveryslip ir.ui.view qweb New
report_generic_barcode report_generic_barcode ir.ui.view qweb New
report_inventory report_inventory ir.ui.view qweb New
report_location_barcode report_location_barcode ir.ui.view qweb New
report_lot_label report_lot_label ir.ui.view qweb New
report_package_barcode report_package_barcode ir.ui.view qweb New
report_package_barcode_content report_package_barcode_content ir.ui.view qweb New
report_package_barcode_small report_package_barcode_small ir.ui.view qweb New
report_package_history_barcode report_package_history_barcode ir.ui.view qweb New
report_package_history_barcode_small report_package_history_barcode_small ir.ui.view qweb New
report_picking report_picking ir.ui.view qweb New
report_picking_packages report_picking_packages ir.ui.view qweb New
report_picking_type_label report_picking_type_label ir.ui.view qweb New
report_reception report_reception ir.ui.view qweb New
report_reception_body report_reception_body ir.ui.view qweb New
report_reception_report_label report_reception_report_label ir.ui.view qweb New
report_return_document report_return_document ir.ui.view qweb New
report_stock_body_print report_stock_body_print ir.ui.view qweb New
report_stock_inventory_print report_stock_inventory_print ir.ui.view qweb New
report_stock_rule report_stock_rule ir.ui.view qweb New
report_stock_rule_left_arrow report_stock_rule_left_arrow ir.ui.view qweb New
report_stock_rule_line report_stock_rule_line ir.ui.view qweb New
report_stock_rule_right_arrow report_stock_rule_right_arrow ir.ui.view qweb New
report_stock_rule_suspension_points report_stock_rule_suspension_points ir.ui.view qweb New
report_stock_rule_vertical_bar report_stock_rule_vertical_bar ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.stock res.config.settings form Inherits base.res_config_settings_view_form
search_product_lot_filter Production Lots Filter stock.lot search New
small_zpl_label small_zpl_label ir.ui.view qweb New
stock.report_return_slip stock.report_return_slip ir.ui.view qweb New
stock_inventory_adjustment_name_form_view stock.inventory.adjustment.name.form.view stock.inventory.adjustment.name form New
stock_inventory_conflict_form_view stock.inventory.conflict.form.view stock.inventory.conflict form New
stock_inventory_request_count_form_view stock.request.count.form.view stock.request.count form New
stock_location_route_form_view stock.location.route.form stock.route form New
stock_location_route_tree stock.location.route.list stock.route list New
stock_location_route_view_search stock.location.route.search stock.route search New
stock_location_view_form_editable stock.location.form.editable stock.location form Inherits stock.view_location_form
stock_location_view_tree2_editable stock.location.list2.editable stock.location list Inherits stock.view_location_tree2
stock_move_line_view_search stock.move.line.search stock.move.line search New
stock_package_destination_form_view stock.package.destination.view stock.package.destination form New
stock_package_type_form stock.package.type.form stock.package.type form New
stock_package_type_tree stock.package.type.list stock.package.type list New
stock_package_view_add_list stock.package.add.package.list stock.package list New
stock_package_view_form stock.package.form stock.package form New
stock_package_view_kanban stock.package.kanban stock.package kanban New
stock_package_view_list stock.package.list stock.package list New
stock_package_view_list_editable stock.package.list.editable stock.package list New
stock_package_view_search stock.package.search stock.package search New
stock_picking_calendar stock.picking.calendar stock.picking calendar New
stock_picking_kanban stock.picking.kanban stock.picking kanban New
stock_picking_type_kanban stock.picking.type.kanban stock.picking.type kanban New
stock_picking_view_activity stock.picking.view.activity stock.picking activity New
stock_product_search_form_view product.product.search.stock.form product.product form Inherits product.product_search_form_view
stock_put_in_pack_form stock.put.in.pack.form stock.put.in.pack form New
stock_putaway_list stock.putaway.rule.list stock.putaway.rule list New
stock_quant_relocate_view_form Stock Relocation stock.quant.relocate form New
stock_quant_view_graph stock.quant.graph stock.quant graph New
stock_reference_form_view stock.reference.form stock.reference form New
stock_reference_search_view stock.reference.search stock.reference search New
stock_reference_tree_view stock.reference.list stock.reference list New
stock_reorder_report_search stock.warehouse.orderpoint.reorder.search stock.warehouse.orderpoint search New
stock_report_delivery_aggregated_move_lines stock_report_delivery_aggregated_move_lines ir.ui.view qweb New
stock_report_delivery_has_serial_move_line stock_report_delivery_has_serial_move_line ir.ui.view qweb New
stock_report_delivery_no_package_section_line stock_report_delivery_no_package_section_line ir.ui.view qweb New
stock_report_delivery_package_section_line stock_report_delivery_package_section_line ir.ui.view qweb New
stock_report_view_graph stock_report_view_graph report.stock.quantity graph New
stock_scrap_form_view stock.scrap.form stock.scrap form New
stock_scrap_form_view2 stock.scrap.form2 stock.scrap form New
stock_scrap_search_view stock.scrap.search stock.scrap search New
stock_scrap_tree_view stock.scrap.list stock.scrap list New
stock_scrap_view_kanban stock.scrap.kanban stock.scrap kanban New
stock_storage_category_capacity_tree stock.storage.category.capacity.list stock.storage.category.capacity list New
stock_storage_category_form stock.storage.category.form stock.storage.category form New
stock_storage_category_tree stock.storage.category.list stock.storage.category list New
stock_warehouse_view_search stock.warehouse.search stock.warehouse search New
stock_warn_insufficient_qty_form_view stock.warn.insufficient.qty stock.warn.insufficient.qty form New
stock_warn_insufficient_qty_scrap_form_view stock.warn.insufficient.qty.scrap stock.warn.insufficient.qty.scrap form Inherits stock.stock_warn_insufficient_qty_form_view
track_move_template track_move_template ir.ui.view qweb New
view_backorder_confirmation stock_backorder_confirmation stock.backorder.confirmation form New
view_location_form stock.location.form stock.location form New
view_location_search stock.location.search stock.location search New
view_location_tree2 stock.location.list stock.location list New
view_move_form stock.move.form stock.move form New
view_move_graph stock.move.graph stock.move graph New
view_move_kandan stock.move.kanban stock.move kanban New
view_move_line_form stock.move.line.form stock.move.line form New
view_move_line_mobile_form stock.move.line.mobile.form stock.move.line form Inherits stock.view_move_line_form
view_move_line_tree stock.move.line.list stock.move.line list New
view_move_line_tree_detailed stock.move.line.list.detailed stock.move.line list New
view_move_pivot stock.move.pivot stock.move pivot New
view_move_search stock.move.search stock.move search New
view_move_tree stock.move.list stock.move list New
view_move_tree_receipt_picking stock.move.tree2 stock.move list New
view_partner_stock_form res.partner.stock.property.form.inherit res.partner form Inherits mail.res_partner_view_form_inherit_mail
view_partner_stock_warnings_form res.partner.stock.warning res.partner form Inherits base.view_partner_form
view_picking_form stock.picking.form stock.picking form New
view_picking_internal_search stock.picking.internal.search stock.picking search New
view_picking_move_tree stock.picking.move.list stock.move list New
view_picking_type_form Operation Types stock.picking.type form New
view_picking_type_tree Operation types stock.picking.type list New
view_pickingtype_filter stock.picking.type.filter stock.picking.type search New
view_product_replenish Replenish product.replenish form New
view_production_lot_form stock.production.lot.form stock.lot form New
view_production_lot_kanban stock.production.lot.kanban stock.lot kanban New
view_production_lot_tree stock.production.lot.list stock.lot list New
view_putaway_search stock.putaway.rule.search stock.putaway.rule search New
view_removal product.removal.form product.removal form New
view_route_rule_form stock.rule.form stock.rule form Inherits stock.view_stock_rule_form
view_stock_move_line_detailed_operation_tree stock.move.line.operations.list stock.move.line list New
view_stock_move_line_kanban stock.move.line.kanban stock.move.line kanban New
view_stock_move_line_operation_tree stock.move.line.operations.list stock.move.line list New
view_stock_move_line_pivot stock.move.line.pivot stock.move.line pivot New
view_stock_move_operations stock.move.operations.form stock.move form New
view_stock_orderpoint_snooze Stock Orderpoint Snooze stock.orderpoint.snooze form New
view_stock_package_history_list stock.package.history.list stock.package.history list New
view_stock_product_template_tree product.template.stock.list.inherit product.template list Inherits product.product_template_tree_view
view_stock_product_tree product.stock.list.inherit product.product list Inherits product.product_product_tree_view
view_stock_quant_form view.stock.quant.form stock.quant form New
view_stock_quant_form_editable stock.quant.form.editable stock.quant form New
view_stock_quant_pivot stock.quant.pivot stock.quant pivot New
view_stock_quant_tree stock.quant.list stock.quant list Inherits stock.view_stock_quant_tree_simple
view_stock_quant_tree_editable stock.quant.list.editable stock.quant list New
view_stock_quant_tree_inventory_editable stock.quant.inventory.list.editable stock.quant list New
view_stock_quant_tree_simple stock.quant.list stock.quant list New
view_stock_quantity_history Inventory Report at Date stock.quantity.history form New
view_stock_replenishment_info Stock Replenishment Information stock.replenishment.info form New
view_stock_return_picking_form Return lines stock.return.picking form New
view_stock_rule_filter stock.rule.select stock.rule search New
view_stock_rule_form stock.rule.form stock.rule form New
view_stock_rule_tree stock.rule.list stock.rule list New
view_stock_rules_report Stock Rules Report stock.rules.report form New
view_stock_warehouse_orderpoint_kanban stock.warehouse.orderpoint.kanban stock.warehouse.orderpoint kanban New
view_template_property_form product.template.stock.property.form.inherit product.template form Inherits product.product_template_form_view
view_warehouse stock.warehouse stock.warehouse form New
view_warehouse_orderpoint_form stock.warehouse.orderpoint.form stock.warehouse.orderpoint form New
view_warehouse_orderpoint_tree_editable stock.warehouse.orderpoint.list.editable stock.warehouse.orderpoint list New
view_warehouse_orderpoint_tree_editable_show_trigger stock.warehouse.orderpoint.list.editable.inherit.show_trigger stock.warehouse.orderpoint list Inherits stock.view_warehouse_orderpoint_tree_editable
view_warehouse_tree stock.warehouse.list stock.warehouse list New
vpicktree stock.picking.list stock.picking list New
warehouse_orderpoint_search stock.warehouse.orderpoint.search stock.warehouse.orderpoint search New
HTTP endpoints (1)
Route(s)HandlerAuthTypeMethodsFlags
/stock/<string:output_format>/<string:report_name> StockReportController.report user http ALL
Models touched (63)

New fields (1)
  • type Selection
    ondelete={'weight': 'set default', 'location': 'set default', 'lot': 'set default', 'package': 'set default'} selection_add=[('weight', 'Weighted Product'), ('location', 'Location'), ('lot', 'Lot'), ('package', 'Package')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • label_quantity Selection
    default='lots' help="If the UoM of a lot is not 'units', the lot will be considered as a unit and only one label will be printed for this lot." required=True string='Quantity to print' args: [('lots', 'One per lot/SN'), ('units', 'One per unit')]
  • move_line_ids Many2many → stock.move.line
    args: 'stock.move.line'
  • print_format Selection
    default='4x12' required=True string='Format' args: [('4x12', '4 x 12'), ('zpl', 'ZPL Labels')]
Public methods (1)
  • process(self)

New fields (2)
  • label_type Selection
    default='products' required=True string='Labels to print' args: [('products', 'Product Labels'), ('lots', 'Lot/SN Labels')]
  • picking_ids Many2many → stock.picking
    args: 'stock.picking'
Public methods (1)
  • process(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • filter_for_stock_putaway_rule Boolean
    search='_search_filter_for_stock_putaway_rule' store=False args: 'stock.putaway.rule'
  • packaging_reserve_method Selection
    default='partial' help='Reserve Only Full Packagings: will not reserve partial packagings. If customer orders 2 pallets of 1000 units each and you only have 1600 in stock, then only 1000 will be reserved\nReserve Partial Packagings: allow reserving partial packagings. If customer orders 2 pallets of 1000 units each and you only have 1600 in stock, then 1600 will be reserved' string='Reserve Packagings' args: [('full', 'Reserve Only Full Packagings'), ('partial', 'Reserve Partial Packagings')]
  • parent_route_ids Many2many → stock.route
    compute='_compute_parent_route_ids' string='Parent Routes' args: 'stock.route'
  • putaway_rule_ids One2many → stock.putaway.rule
    args: 'stock.putaway.rule', 'category_id', 'Putaway Rules'
  • removal_strategy_id Many2one → product.removal
    help='Set a specific removal strategy that will be used regardless of the source location for this product category.\n\nFIFO: products/lots that were stocked first will be moved out first.\nLIFO: products/lots that were stocked last will be moved out first.\nClosest location: products/lots closest to the target location will be moved out first.\nFEFO: products/lots with the closest removal date will be moved out first (the availability of this method depends on the "Expiration Dates" setting).\nLeast Packages: FIFO but with the least number of packages possible when there are several packages containing the same product.' tracking=True args: 'product.removal', 'Force Removal Strategy'
  • route_ids Many2many → stock.route
    domain=[('product_categ_selectable', '=', True)] args: 'stock.route', 'stock_route_categ', 'categ_id', 'route_id', 'Routes'
  • total_route_ids Many2many → stock.route
    compute='_compute_total_route_ids' readonly=True search='_search_total_route_ids' string='Total routes' args: 'stock.route'
Public methods (0)

No public methods.

New fields (5)
  • move_ids Many2many → stock.move
    args: 'stock.move'
  • move_quantity Selection
    default='custom' required=True string='Quantity to print' args: [('move', 'Operation Quantities'), ('custom', 'Custom')]
  • print_format Selection
    ondelete={'zpl': 'set default', 'zplxprice': 'set default'} selection_add=[('zpl', 'ZPL Labels'), ('zplxprice', 'ZPL Labels with price')]
  • zpl_preview Image
    default=_get_zpl_label_placeholder readonly=True args: 'ZPL Preview'
  • zpl_template Selection
    default='normal' required=True string='ZPL Template' args: [('normal', 'Normal (2.25" x 1.25")'), ('small', 'Small (1.25" x 1.00")'), ('alternative', 'Alternative (2.00" x 1.00")'), ('jewelry', 'Jewelry (2.20" x 0.50")')]
Public methods (0)

No public methods.

New fields (20)
  • free_qty Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' help="Available quantity (computed as Quantity On Hand - reserved quantity)\nIn a context with a single Stock Location, this includes goods stored in this location, or any of its children.\nIn a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\nOtherwise, this includes goods stored in any Stock Location with 'internal' type." search='_search_free_qty' args: 'Free To Use Quantity '
  • incoming_qty Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' help="Quantity of planned incoming products.\nIn a context with a single Stock Location, this includes goods arriving to this Location, or any of its children.\nIn a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children.\nOtherwise, this includes goods arriving to any Stock Location with 'internal' type." search='_search_incoming_qty' args: 'Incoming'
  • lot_properties_definition PropertiesDefinition
    args: 'Lot Properties'
  • nbr_moves_in Integer
    compute='_compute_nbr_moves' compute_sudo=False help='Number of incoming stock moves in the past 12 months'
  • nbr_moves_out Integer
    compute='_compute_nbr_moves' compute_sudo=False help='Number of outgoing stock moves in the past 12 months'
  • nbr_reordering_rules Integer
    compute='_compute_nbr_reordering_rules' compute_sudo=False args: 'Reordering Rules'
  • orderpoint_ids One2many → stock.warehouse.orderpoint
    args: 'stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rules'
  • outgoing_qty Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' help="Quantity of planned outgoing products.\nIn a context with a single Stock Location, this includes goods leaving this Location, or any of its children.\nIn a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children.\nOtherwise, this includes goods leaving any Stock Location with 'internal' type." search='_search_outgoing_qty' args: 'Outgoing'
  • putaway_rule_ids One2many → stock.putaway.rule
    args: 'stock.putaway.rule', 'product_id', 'Putaway Rules'
  • qty_available Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' help="Current quantity of products.\nIn a context with a single Stock Location, this includes goods stored at this Location, or any of its children.\nIn a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\nstored in the Stock Location of the Warehouse of this Shop, or any of its children.\nOtherwise, this includes goods stored in any Stock Location with 'internal' type." inverse='_inverse_qty_available' search='_search_qty_available' args: 'Quantity On Hand'
  • reordering_max_qty Float
    compute='_compute_nbr_reordering_rules' compute_sudo=False
  • reordering_min_qty Float
    compute='_compute_nbr_reordering_rules' compute_sudo=False
  • show_forecasted_qty_status_button Boolean
    compute='_compute_show_qty_status_button'
  • show_on_hand_qty_status_button Boolean
    compute='_compute_show_qty_status_button'
  • show_qty_update_button Boolean
    compute='_compute_show_qty_update_button'
  • stock_move_ids One2many → stock.move
    args: 'stock.move', 'product_id'
  • stock_quant_ids One2many → stock.quant
    args: 'stock.quant', 'product_id'
  • storage_category_capacity_ids One2many → stock.storage.category.capacity
    args: 'stock.storage.category.capacity', 'product_id', 'Storage Category Capacity'
  • valid_ean Boolean
    compute='_compute_valid_ean' args: 'Barcode is valid EAN'
  • virtual_available Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' help="Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\nIn a context with a single Stock Location, this includes goods stored in this location, or any of its children.\nIn a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\nOtherwise, this includes goods stored in any Stock Location with 'internal' type." search='_search_virtual_available' args: 'Forecasted Quantity'
Public methods (14)
  • action_open_product_lot(self)
  • action_open_quants(self)
  • action_product_forecast_report(self)
  • action_view_orderpoints(self)
  • action_view_related_putaway_rules(self)
  • action_view_routes(self)
  • action_view_stock_move_lines(self)
  • action_view_storage_category_capacity(self)
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • filter_has_routes(self)
    Return products with route_ids or whose categ_id has total_route_ids.
  • get_components(self)
  • get_total_routes(self)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (2)
  • method Char
    help='FIFO, LIFO...' required=True translate=True args: 'Method'
  • name Char
    required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (11)
  • allowed_uom_ids Many2many → uom.uom
    compute='_compute_allowed_uom_ids' args: 'uom.uom'
  • company_id Many2one → res.company
    args: 'res.company'
  • date_planned Datetime
    compute='_compute_date_planned' help='Date at which the replenishment should take place.' precompute=True readonly=False required=True store=True args: 'Scheduled Date'
  • forecast_uom_id Many2one
    related='product_id.uom_id'
  • forecasted_quantity Float
    compute='_compute_forecasted_quantity' string='Forecasted Quantity'
  • product_has_variants Boolean
    default=False required=True args: 'Has variants'
  • product_id Many2one → product.product
    required=True string='Product' args: 'product.product'
  • product_tmpl_id Many2one → product.template
    required=True string='Product Template' args: 'product.template'
  • product_uom_id Many2one → uom.uom
    domain="[('id', 'in', allowed_uom_ids)]" required=True string='Unity of measure' args: 'uom.uom'
  • quantity Float
    default=1 required=True args: 'Quantity'
  • warehouse_id Many2one → stock.warehouse
    check_company=True required=True string='Warehouse' args: 'stock.warehouse'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • launch_replenishment(self)

New fields (29)
  • description_picking Text
    translate=True args: 'Description on Picking'
  • description_pickingin Text
    translate=True args: 'Description on Receptions'
  • description_pickingout Text
    translate=True args: 'Description on Delivery Orders'
  • has_available_route_ids Boolean
    compute='_compute_has_available_route_ids' default=<expr> args: 'Routes can be selected on this product'
  • incoming_qty Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' search='_search_incoming_qty' args: 'Incoming'
  • is_storable Boolean
    compute='compute_is_storable' default=False help='A storable product is a product for which you manage stock.' precompute=True readonly=False store=True tracking=True args: 'Track Inventory'
  • location_id Many2one → stock.location
    store=False args: 'stock.location', 'Location'
  • lot_sequence_id Many2one → ir.sequence
    default=<expr> help='Technical Field: The Ir.Sequence record that is used to generate serial/lot numbers for this product' args: 'ir.sequence', 'Serial/Lot Numbers Sequence'
  • nbr_moves_in Integer
    compute='_compute_nbr_moves' compute_sudo=False help='Number of incoming stock moves in the past 12 months'
  • nbr_moves_out Integer
    compute='_compute_nbr_moves' compute_sudo=False help='Number of outgoing stock moves in the past 12 months'
  • nbr_reordering_rules Integer
    compute='_compute_nbr_reordering_rules' compute_sudo=False args: 'Reordering Rules'
  • next_serial Char
    compute='_compute_next_serial'
  • outgoing_qty Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' search='_search_outgoing_qty' args: 'Outgoing'
  • property_stock_inventory Many2one → stock.location
    check_company=True company_dependent=True domain="[('usage', '=', 'inventory'), '|', ('company_id', '=', False), ('company_id', '=', allowed_company_ids[0])]" help='This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory.' args: 'stock.location', 'Inventory Location'
  • property_stock_production Many2one → stock.location
    check_company=True company_dependent=True domain="[('usage', '=', 'production'), '|', ('company_id', '=', False), ('company_id', '=', allowed_company_ids[0])]" help='This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders.' args: 'stock.location', 'Production Location'
  • qty_available Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' inverse='_inverse_qty_available' search='_search_qty_available' args: 'Quantity On Hand'
  • reordering_max_qty Float
    compute='_compute_nbr_reordering_rules' compute_sudo=False
  • reordering_min_qty Float
    compute='_compute_nbr_reordering_rules' compute_sudo=False
  • responsible_id Many2one → res.users
    check_company=True company_dependent=True default=<expr> help='This user will be responsible of the next activities related to logistic operations for this product.' string='Responsible' args: 'res.users'
  • route_from_categ_ids Many2many
    related='categ_id.total_route_ids' related_sudo=False string='Category Routes'
  • route_ids Many2many → stock.route
    depends_context=['company', 'allowed_companies'] domain=[('product_selectable', '=', True)] help='Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, replenished on order, etc.' args: 'stock.route', 'stock_route_product', 'product_id', 'route_id', 'Routes'
  • sale_delay Integer
    default=0 help="Delivery lead time, in days. It's the number of days, promised to the customer, between the confirmation of the sales order and the delivery." args: 'Customer Lead Time'
  • serial_prefix_format Char
    compute='_compute_serial_prefix_format' help=SERIAL_PREFIX_FORMAT_HELP_TEXT inverse='_inverse_serial_prefix_format' args: 'Custom Lot/Serial'
  • show_forecasted_qty_status_button Boolean
    compute='_compute_show_qty_status_button'
  • show_on_hand_qty_status_button Boolean
    compute='_compute_show_qty_status_button'
  • show_qty_update_button Boolean
    compute='_compute_show_qty_update_button'
  • tracking Selection
    compute='_compute_tracking' default='none' help='Ensure the traceability of a storable product in your warehouse.' precompute=True readonly=False required=True store=True string='Tracking' args: [('serial', 'By Unique Serial Number'), ('lot', 'By Lots'), ('none', 'By Quantity')]
  • virtual_available Float
    compute='_compute_quantities' compute_sudo=False digits='Product Unit' search='_search_virtual_available' args: 'Forecasted Quantity'
  • warehouse_id Many2one → stock.warehouse
    store=False args: 'stock.warehouse', 'Warehouse'
Public methods (12)
  • action_open_product_lot(self)
  • action_open_quants(self)
  • action_open_routes_diagram(self)
  • action_product_tmpl_forecast_report(self)
  • action_view_orderpoints(self)
  • action_view_related_putaway_rules(self)
  • action_view_stock_move_lines(self)
  • action_view_storage_category_capacity(self)
  • compute_is_storable(self)
    @api.depends('type')
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

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 (7)
  • company_id Many2one → res.company
    readonly=True args: 'res.company'
  • date Date
    readonly=True string='Date'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_qty Float
    readonly=True string='Quantity'
  • product_tmpl_id Many2one → product.template
    readonly=True args: 'product.template'
  • state Selection
    readonly=True string='State' args: [('forecast', 'Forecasted Stock'), ('in', 'Forecasted Receipts'), ('out', 'Forecasted Deliveries')]
  • warehouse_id Many2one → stock.warehouse
    readonly=True args: 'stock.warehouse'
Public methods (1)
  • init(self)
    Because we can transfer a product from a warehouse to another one thanks to a stock move, we need to generate some fake stock moves before processing all of them. That way, in case of an interwarehouse transfer, we will have an outgoing stock move for the source warehouse and an incoming stock move for the destination one. To do so, we select all relevant SM (incoming, outgoing and interwarehouse), then we duplicate all these SM and edit the values: - product_qty is kept if the SM is not the duplicated one or if the SM is an interwarehouse one otherwise, we set the value to 0 (this allows us to filter it out during the SM processing) - the source warehouse is kept if the SM is not the duplicated one - the dest warehouse is kept if the SM is not the duplicated one and is not an interwarehouse OR the SM is the duplicated one and is an interwarehouse

New fields (0)

No new fields.

Public methods (3)
  • action_assign(self, move_ids, qtys, in_ids)
    Assign picking move(s) [i.e. link] to other moves (i.e. make them MTO) :param move_id ids: the ids of the moves to make MTO :param qtys list: the quantities that are being assigned to the move_ids (in same order as move_ids) :param in_ids ids: the ids of the moves that are to be assigned to move_ids
  • action_unassign(self, move_id, qty, in_ids)
    Unassign moves [i.e. unlink] from a move (i.e. make non-MTO) :param move_id id: the id of the move to make non-MTO :param qty float: the total quantity that is being unassigned from move_id :param in_ids ids: the ids of the moves that are to be unassigned from move_id
  • get_report_data(self, docids, data)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • annual_inventory_day Integer
    default=31 help='Day of the month when the annual inventory should occur. If zero or negative, then the first day of the month will be selected instead.\n If greater than the last day of a month, then the last day of the month will be selected instead.' string='Day of the month'
  • annual_inventory_month Selection
    default='12' help='Annual inventory month for products not in a location with a cyclic inventory date. Set to no month if no automatic annual inventory.' string='Annual Inventory Month' args: [('1', 'January'), ('2', 'February'), ('3', 'March'), ('4', 'April'), ('5', 'May'), ('6', 'June'), ('7', 'July'), ('8', 'August'), ('9', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')]
  • horizon_days Float
    default=365 help="Configure your horizon to trigger reordering rules earlier to get\n a head start on replenishment and avoid delays, or trigger it just-in-time\n ('0 days') to avoid overstocking." required=True string='Replenishment Horizon'
  • internal_transit_location_id Many2one → stock.location
    check_company=True ondelete='restrict' args: 'stock.location', 'Internal Transit Location'
  • stock_confirmation_type Selection
    default='sms' args: [('sms', 'SMS')]
  • stock_mail_confirmation_template_id Many2one → mail.template
    default=_default_confirmation_mail_template domain="[('model', '=', 'stock.picking')]" help='Email sent to the customer once the order is done.' string='Email Template confirmation picking' args: 'mail.template'
  • stock_move_email_validation Boolean
    default=False args: 'Email Confirmation picking'
  • stock_text_confirmation Boolean
    args: 'Stock Text Confirmation'
Public methods (7)
  • create(self, vals_list)
    @api.model_create_multi
  • create_missing_inventory_loss_location(self)
    @api.model
  • create_missing_production_location(self)
    @api.model
  • create_missing_scrap_location(self)
    @api.model
  • create_missing_scrap_sequence(self)
    @api.model
  • create_missing_transit_location(self)
    @api.model
  • create_missing_warehouse(self)
    @api.model
    This hook is used to add a warehouse on the first company of the database

New fields (38)
  • annual_inventory_day Integer
    readonly=False related='company_id.annual_inventory_day'
  • annual_inventory_month Selection
    readonly=False related='company_id.annual_inventory_month'
  • barcode_separator Char
    config_parameter='stock.barcode_separator' help='Character(s) used to separate data contained within an aggregate barcode (i.e. a barcode containing multiple barcode encodings)' args: 'Separator'
  • group_lot_on_delivery_slip Boolean
    group='base.group_user,base.group_portal' implied_group='stock.group_lot_on_delivery_slip' args: 'Display Lots & Serial Numbers on Delivery Slips'
  • group_stock_adv_location Boolean
    help='Add and customize route operations to process product moves in your warehouse(s): e.g. unload > quality control > stock for incoming products, pick > pack > ship for outgoing products. \n You can also set putaway strategies on warehouse locations in order to send incoming products into specific child locations straight away (e.g. specific bins, racks).' implied_group='stock.group_adv_location' args: 'Multi-Step Routes'
  • group_stock_lot_print_gs1 Boolean
    implied_group='stock.group_stock_lot_print_gs1' args: 'Print GS1 Barcodes for Lots & Serial Numbers'
  • group_stock_multi_locations Boolean
    help='Store products in specific locations of your warehouse (e.g. bins, racks) and to track inventory accordingly.' implied_group='stock.group_stock_multi_locations' args: 'Storage Locations'
  • group_stock_production_lot Boolean
    group='base.group_user,base.group_portal' implied_group='stock.group_production_lot' args: 'Lots & Serial Numbers'
  • group_stock_reception_report Boolean
    implied_group='stock.group_reception_report' args: 'Reception Report'
  • group_stock_sign_delivery Boolean
    implied_group='stock.group_stock_sign_delivery' args: 'Signature'
  • group_stock_tracking_lot Boolean
    implied_group='stock.group_tracking_lot' args: 'Packages'
  • group_stock_tracking_owner Boolean
    implied_group='stock.group_tracking_owner' args: 'Consignment'
  • group_warning_stock Boolean
    implied_group='stock.group_warning_stock' args: 'Warnings for Stock'
  • horizon_days Float
    readonly=False related='company_id.horizon_days'
  • module_delivery Boolean
    args: 'Delivery Methods'
  • module_delivery_bpost Boolean
    args: 'bpost Connector'
  • module_delivery_dhl Boolean
    args: 'DHL Express Connector'
  • module_delivery_easypost Boolean
    args: 'Easypost Connector'
  • module_delivery_envia Boolean
    args: 'Envia.com Connector'
  • module_delivery_fedex_rest Boolean
    args: 'FedEx Connector'
  • module_delivery_sendcloud Boolean
    args: 'Sendcloud Connector'
  • module_delivery_shiprocket Boolean
    args: 'Shiprocket Connector'
  • module_delivery_starshipit Boolean
    args: 'Starshipit Connector'
  • module_delivery_ups_rest Boolean
    args: 'UPS Connector'
  • module_delivery_usps_rest Boolean
    args: 'USPS Connector'
  • module_product_expiry Boolean
    help='Track following dates on lots & serial numbers: best before, removal, end of life, alert. \n Such dates are set automatically at lot/serial number creation based on values set on the product (in days).' args: 'Expiration Dates'
  • module_quality_control Boolean
    args: 'Quality'
  • module_quality_control_worksheet Boolean
    args: 'Quality Worksheet'
  • module_stock_barcode Boolean
    args: 'Barcode Scanner'
  • module_stock_barcode_barcodelookup Boolean
    args: 'Stock Barcode Database'
  • module_stock_dropshipping Boolean
    args: 'Dropshipping'
  • module_stock_fleet Boolean
    args: 'Dispatch Management System'
  • module_stock_picking_batch Boolean
    args: 'Batch, Wave & Cluster Transfers'
  • module_stock_sms Boolean
    args: 'SMS Confirmation'
  • replenish_on_order Boolean
    compute='_compute_replenish_on_order' inverse='_inverse_replenish_on_order' args: 'Replenish on Order (MTO)'
  • stock_confirmation_type Selection
    readonly=False related='company_id.stock_confirmation_type' string='Stock Text Validation type'
  • stock_move_email_validation Boolean
    readonly=False related='company_id.stock_move_email_validation'
  • stock_text_confirmation Boolean
    readonly=False related='company_id.stock_text_confirmation' string='Stock Text Validation with stock move'
Public methods (2)
  • onchange_adv_location(self)
    @api.onchange('group_stock_adv_location')
  • set_values(self)

New fields (3)
  • picking_warn_msg Text
    args: 'Message for Stock Picking'
  • property_stock_customer Many2one → stock.location
    check_company=True company_dependent=True domain="['|', ('company_id', '=', False), ('company_id', '=', allowed_company_ids[0])]" help='The stock location used as destination when sending goods to this contact.' string='Customer Location' args: 'stock.location'
  • property_stock_supplier Many2one → stock.location
    check_company=True company_dependent=True domain="['|', ('company_id', '=', False), ('company_id', '=', allowed_company_ids[0])]" help='The stock location used as source when receiving goods from this contact.' string='Vendor Location' args: 'stock.location'
Public methods (1)
  • action_view_stock_serial(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • backorder_confirmation_line_ids One2many → stock.backorder.confirmation.line
    string='Backorder Confirmation Lines' args: 'stock.backorder.confirmation.line', 'backorder_confirmation_id'
  • pick_ids Many2many → stock.picking
    args: 'stock.picking', 'stock_picking_backorder_rel'
  • show_transfers Boolean
Public methods (3)
  • default_get(self, fields)
    @api.model
  • process(self)
  • process_cancel_backorder(self)

New fields (3)
  • backorder_confirmation_id Many2one → stock.backorder.confirmation
    args: 'stock.backorder.confirmation', 'Immediate Transfer'
  • picking_id Many2one → stock.picking
    args: 'stock.picking', 'Transfer'
  • to_backorder Boolean
    args: 'To Backorder'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • action_reserve_linked_picks(self, move_id)
    @api.model
  • action_unreserve_linked_picks(self, move_id)
    @api.model
  • get_report_values(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (3)
  • counting_date Datetime
    default=fields.Datetime.now help='Date at which the resulting moves will be dated.'
  • inventory_adjustment_name Char
    default='Physical Inventory' string='Inventory Reason'
  • quant_ids Many2many → stock.quant
    args: 'stock.quant'
Public methods (1)
  • action_apply(self)

New fields (2)
  • quant_ids Many2many → stock.quant
    string='Quants' args: 'stock.quant', 'stock_conflict_quant_rel'
  • quant_to_fix_ids Many2many → stock.quant
    string='Conflicts' args: 'stock.quant'
Public methods (2)
  • action_keep_counted_quantity(self)
  • action_keep_difference(self)

New fields (1)
  • quant_ids Many2many → stock.quant
    args: 'stock.quant'
Public methods (2)
  • action_reset(self)
  • action_set(self)

New fields (25)
  • active Boolean
    default=True help='By unchecking the active field, you may hide a location without deleting it.' args: 'Active'
  • barcode Char
    copy=False args: 'Barcode'
  • child_ids One2many → stock.location
    args: 'stock.location', 'location_id', 'Contains'
  • child_internal_location_ids Many2many → stock.location
    compute='_compute_child_internal_location_ids' help="This location (if it's internal) and all its descendants filtered by type=Internal." recursive=True string='Internal locations among descendants' args: 'stock.location'
  • company_id Many2one → res.company
    default=<expr> help='Let this field empty if this location is shared between companies' index=True args: 'res.company', 'Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True args: 'Full Location Name'
  • cyclic_inventory_frequency Integer
    default=0 help=' When different than 0, inventory count date for products stored at this location will be automatically set at the defined frequency.' args: 'Inventory Frequency'
  • forecast_weight Float
    compute='_compute_weight' args: 'Forecasted Weight'
  • incoming_move_line_ids One2many → stock.move.line
    args: 'stock.move.line', 'location_dest_id'
  • is_empty Boolean
    compute='_compute_is_empty' search='_search_is_empty' args: 'Is Empty'
  • last_inventory_date Date
    help='Date of the last inventory at this location.' readonly=True args: 'Last Inventory'
  • location_id Many2one → stock.location
    check_company=True help="The parent location that includes this location. Example : The 'Dispatch Zone' is the 'Gate 1' parent location." index=True args: 'stock.location', 'Parent Location'
  • name Char
    required=True args: 'Location Name'
  • net_weight Float
    compute='_compute_weight' args: 'Net Weight'
  • next_inventory_date Date
    compute='_compute_next_inventory_date' help='Date for next planned inventory based on cyclic schedule.' store=True args: 'Next Expected'
  • outgoing_move_line_ids One2many → stock.move.line
    args: 'stock.move.line', 'location_id'
  • parent_path Char
    index=True
  • putaway_rule_ids One2many → stock.putaway.rule
    args: 'stock.putaway.rule', 'location_in_id', 'Putaway Rules'
  • quant_ids One2many → stock.quant
    args: 'stock.quant', 'location_id'
  • removal_strategy_id Many2one → product.removal
    help='Defines the default method used for suggesting the exact location (shelf) where to take the products from, which lot etc. for this location. This method can be enforced at the product category level, and a fallback is made on the parent locations if none is set here.\n\nFIFO: products/lots that were stocked first will be moved out first.\nLIFO: products/lots that were stocked last will be moved out first.\nClosest Location: products/lots closest to the target location will be moved out first.\nLeast Packages: products/lots that were stocked in package with least amount of qty will be moved out first.\nFEFO: products/lots with the closest removal date will be moved out first (the availability of this method depends on the "Expiration Dates" setting).' args: 'product.removal', 'Removal Strategy'
  • replenish_location Boolean
    compute='_compute_replenish_location' copy=False help='Trigger replenishment suggestions for this location when required' readonly=False store=True args: 'Replenishments'
  • storage_category_id Many2one → stock.storage.category
    check_company=True index='btree_not_null' string='Storage Category' args: 'stock.storage.category'
  • usage Selection
    default='internal' help="* Vendor: Virtual location representing the source location for products coming from your vendors\n* Virtual: Virtual location used to create a hierarchical structure for your warehouse by aggregating its child locations. Can't directly contain products\n* Internal: Physical locations inside your warehouses,\n* Customer: Virtual location representing the destination location for products sent to your customers\n* Inventory Loss: Virtual location serving as the counterpart for inventory operations done to correct stock levels (Physical inventories)\n* Production: Virtual counterpart location for production operations. I.e. This location consumes components and produces finished products\n* Transit: Counterpart location that should be used for inter-company or inter-warehouses operations" index=True required=True string='Location Type' args: [('supplier', 'Vendor'), ('view', 'Virtual'), ('internal', 'Internal'), ('customer', 'Customer'), ('inventory', 'Inventory Loss'), ('production', 'Production'), ('transit', 'Transit')]
  • warehouse_id Many2one → stock.warehouse
    compute='_compute_warehouse_id' store=True args: 'stock.warehouse'
  • warehouse_view_ids One2many → stock.warehouse
    readonly=True args: 'stock.warehouse', 'view_location_id'
Public methods (7)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • name_create(self, name)
    @api.model
  • should_bypass_reservation(self)
  • unlink(self)
  • write(self, vals)

New fields (14)
  • company_id Many2one → res.company
    compute='_compute_company_id' index=True readonly=False store=True args: 'res.company', 'Company'
  • delivery_count Integer
    compute='_compute_delivery_ids' args: 'Delivery order count'
  • delivery_ids Many2many → stock.picking
    compute='_compute_delivery_ids' string='Transfers' args: 'stock.picking'
  • display_complete Boolean
    compute='_compute_display_complete'
  • location_id Many2one → stock.location
    compute='_compute_single_location' domain="[('usage', '!=', 'view')]" group_expand='_read_group_location_id' inverse='_set_single_location' readonly=False store=True args: 'stock.location', 'Location'
  • lot_properties Properties
    copy=True definition='product_id.lot_properties_definition' args: 'Properties'
  • name Char
    compute='_compute_name' help='Unique Lot/Serial Number' index='trigram' precompute=True readonly=False required=True store=True args: 'Lot/Serial Number'
  • note Html
    string='Description'
  • partner_ids Many2many → res.partner
    compute='_compute_partner_ids' search='_search_partner_ids' args: 'res.partner'
  • product_id Many2one → product.product
    check_company=True domain="[('tracking', '!=', 'none'), ('is_storable', '=', True)] + ([('product_tmpl_id', '=', context['default_product_tmpl_id'])] if context.get('default_product_tmpl_id') else [])" index=True required=True tracking=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_product_qty' search='_search_product_qty' args: 'On Hand Quantity'
  • product_uom_id Many2one → uom.uom
    related='product_id.uom_id' args: 'uom.uom', 'Unit'
  • quant_ids One2many → stock.quant
    readonly=True args: 'stock.quant', 'lot_id', 'Quants'
  • ref Char
    help="Internal reference number in case it differs from the manufacturer's lot/serial number" args: 'Internal Reference'
Public methods (7)
  • action_lot_open_quants(self)
  • action_lot_open_transfers(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • generate_lot_names(self, first_lot, count)
    @api.model
    Generate `lot_names` from a string.
  • write(self, vals)

New fields (74)
  • additional Boolean
    default=False args: "Whether the move was added after the picking's confirmation"
  • allowed_uom_ids Many2many → uom.uom
    compute='_compute_allowed_uom_ids' args: 'uom.uom'
  • availability Float
    compute='_compute_product_availability' help='Quantity in stock that can still be reserved for this move' readonly=True args: 'Forecasted Quantity'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company', 'Company'
  • date Datetime
    default=fields.Datetime.now help='Scheduled date until move is done, then date of actual move processing' index=True required=True args: 'Date Scheduled'
  • date_deadline Datetime
    copy=False help='In case of outgoing flow, validate the transfer before this date to allow to deliver at promised date to the customer.\n In case of incoming flow, validate the transfer before this date in order to have these products in stock at the date promised by the supplier' readonly=True args: 'Deadline'
  • delay_alert_date Datetime
    compute='_compute_delay_alert_date' help='Process at this date to be on time' store=True args: 'Delay Alert Date'
  • description_picking Text
    compute='_compute_description_picking' compute_sudo=True inverse='_inverse_description_picking' string='Description Of Picking'
  • description_picking_manual Text
    readonly=True
  • display_assign_serial Boolean
    compute='_compute_display_assign_serial'
  • display_import_lot Boolean
    compute='_compute_display_assign_serial'
  • forecast_availability Float
    compute='_compute_forecast_information' compute_sudo=True digits='Product Unit' args: 'Forecast Availability'
  • forecast_expected_date Datetime
    compute='_compute_forecast_information' compute_sudo=True args: 'Forecasted Expected date'
  • has_lines_without_result_package Boolean
    compute='_compute_has_lines_without_result_package'
  • has_tracking Selection
    related='product_id.tracking' string='Product with Tracking'
  • inventory_name Char
    readonly=True
  • is_date_editable Boolean
    compute='_compute_is_date_editable' args: 'Is Date Editable'
  • is_initial_demand_editable Boolean
    compute='_compute_is_initial_demand_editable' args: 'Is initial demand editable'
  • is_inventory Boolean
    args: 'Inventory'
  • is_locked Boolean
    compute='_compute_is_locked' readonly=True
  • is_quantity_done_editable Boolean
    compute='_compute_is_quantity_done_editable' args: 'Is quantity done editable'
  • is_storable Boolean
    related='product_id.is_storable'
  • location_dest_id Many2one → stock.location
    compute='_compute_location_dest_id' help='The operations brings product to this location' index=True inverse='_set_location_dest_id' precompute=True readonly=False required=True store=True args: 'stock.location', 'Intermediate Location'
  • location_dest_usage Selection
    related='location_dest_id.usage' string='Destination Location Type'
  • location_final_id Many2one → stock.location
    bypass_search_access=True check_company=True help='The operation brings the products to the intermediate location.But this operation is part of a chain of operations targeting the final location.' index=True readonly=False store=True args: 'stock.location', 'Final Location'
  • location_id Many2one → stock.location
    bypass_search_access=True check_company=True compute='_compute_location_id' help='The operation takes and suggests products from this location.' index=True precompute=True readonly=False required=True store=True args: 'stock.location', 'Source Location'
  • location_usage Selection
    related='location_id.usage' string='Source Location Type'
  • lot_ids Many2many → stock.lot
    compute='_compute_lot_ids' inverse='_set_lot_ids' readonly=False string='Serial Numbers' args: 'stock.lot'
  • move_dest_ids Many2many → stock.move
    copy=False help='Optional: next stock move when chaining them' args: 'stock.move', 'stock_move_move_rel', 'move_orig_id', 'move_dest_id', 'Destination Moves'
  • move_line_ids One2many → stock.move.line
    args: 'stock.move.line', 'move_id'
  • move_lines_count Integer
    compute='_compute_move_lines_count'
  • move_orig_ids Many2many → stock.move
    copy=False help='Optional: previous stock move when chaining them' args: 'stock.move', 'stock_move_move_rel', 'move_dest_id', 'move_orig_id', 'Original Move'
  • never_product_template_attribute_value_ids Many2many → product.template.attribute.value
    string='Never attribute Values' args: 'product.template.attribute.value', 'template_attribute_value_stock_move_rel', 'move_id', 'template_attribute_value_id'
  • next_serial Char
    args: 'First SN/Lot'
  • next_serial_count Integer
    args: 'Number of SN/Lots'
  • orderpoint_id Many2one → stock.warehouse.orderpoint
    index=True args: 'stock.warehouse.orderpoint', 'Original Reordering Rule'
  • origin Char
    args: 'Source Document'
  • origin_returned_move_id Many2one → stock.move
    check_company=True copy=False help='Move that created the return move' index=True args: 'stock.move', 'Origin return move'
  • package_ids One2many → stock.package
    compute='_compute_package_ids' string='Packages' args: 'stock.package'
  • packaging_uom_id Many2one → uom.uom
    compute='_compute_packaging_uom_id' help='Packaging unit from sale or purchase orders' precompute=True store=True args: 'uom.uom', 'Packaging'
  • packaging_uom_qty Float
    compute='_compute_packaging_uom_qty' help='Quantity in the packaging unit' store=True args: 'Packaging Quantity'
  • partner_id Many2one → res.partner
    compute='_compute_partner_id' help='Optional address where goods are to be delivered, specifically used for allotment' index='btree_not_null' readonly=False store=True args: 'res.partner', 'Destination Address '
  • picked Boolean
    compute='_compute_picked' copy=False default=False help="This checkbox is just indicative, it doesn't validate or generate any product moves." inverse='_inverse_picked' readonly=False store=True args: 'Picked'
  • picking_code Selection
    readonly=True related='picking_id.picking_type_id.code'
  • picking_id Many2one → stock.picking
    check_company=True index=True args: 'stock.picking', 'Transfer'
  • picking_type_id Many2one → stock.picking.type
    check_company=True compute='_compute_picking_type_id' readonly=False store=True args: 'stock.picking.type', 'Operation Type'
  • price_unit Float
    copy=False args: 'Unit Price'
  • priority Selection
    compute='_compute_priority' default='0' store=True args: PROCUREMENT_PRIORITIES, 'Priority'
  • procure_method Selection
    copy=False default='make_to_stock' help='By default, the system will take from the stock in the source location and passively wait for availability. The other possibility allows you to directly create a procurement on the source location (and thus ignore its current stock) to gather products. If we want to chain moves and have this one to wait for the previous, this second option should be chosen.' required=True string='Supply Method' args: [('make_to_stock', 'Default: Take From Stock'), ('make_to_order', 'Advanced: Apply Procurement Rules')]
  • procurement_values Json
    help='Dummy field to store procurement values to propagate them to later steps' store=False
  • product_category_id Many2one → product.category
    related='product_id.categ_id' args: 'product.category', 'Product Category'
  • product_id Many2one → product.product
    check_company=True domain="[('type', '=', 'consu')]" index=True required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' compute_sudo=True digits=0 help='Quantity in the default UoM of the product' inverse='_set_product_qty' store=True args: 'Real Quantity'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template', 'Product Template'
  • product_uom Many2one → uom.uom
    compute='_compute_product_uom' domain="[('id', 'in', allowed_uom_ids)]" precompute=True readonly=False required=True store=True args: 'uom.uom', 'Unit'
  • product_uom_qty Float
    default=0 digits='Product Unit' help='This is the quantity of product that is planned to be moved.Lowering this quantity does not generate a backorder.Changing this quantity on assigned moves affects the product reservation, and should be done with care.' required=True args: 'Demand'
  • propagate_cancel Boolean
    default=True help='If checked, when this move is cancelled, cancel the linked move too' args: 'Propagate cancel and split'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit' inverse='_set_quantity' store=True args: 'Quantity'
  • reference Char
    compute='_compute_reference' store=True string='Reference'
  • reference_ids Many2many → stock.reference
    string='References' args: 'stock.reference', 'stock_reference_move_rel', 'move_id', 'reference_id'
  • reservation_date Date
    compute='_compute_reservation_date' help='Computes when a move should be reserved' store=True args: 'Date to Reserve'
  • restrict_partner_id Many2one → res.partner
    check_company=True index='btree_not_null' args: 'res.partner', 'Owner '
  • returned_move_ids One2many → stock.move
    help='Optional: all returned moves created from this move' args: 'stock.move', 'origin_returned_move_id', 'All returned moves'
  • route_ids Many2many → stock.route
    help='Preferred route' args: 'stock.route', 'stock_route_move', 'move_id', 'route_id', 'Destination route'
  • rule_id Many2one → stock.rule
    check_company=True help='The stock rule that created this stock move' ondelete='restrict' args: 'stock.rule', 'Stock Rule'
  • scrap_id Many2one → stock.scrap
    check_company=True index='btree_not_null' readonly=True args: 'stock.scrap', 'Scrap operation'
  • sequence Integer
    default=10 args: 'Sequence'
  • show_details_visible Boolean
    compute='_compute_show_details_visible' args: 'Details Visible'
  • show_lots_m2o Boolean
    compute='_compute_show_info' args: 'Show lot_id'
  • show_lots_text Boolean
    compute='_compute_show_info' args: 'Show lot_name'
  • show_operations Boolean
    related='picking_id.picking_type_id.show_operations'
  • show_quant Boolean
    compute='_compute_show_info' args: 'Show Quant'
  • state Selection
    copy=False default='draft' help="* New: The stock move is created but not confirmed.\n* Waiting Another Move: A linked stock move should be done before this one.\n* Waiting: The stock move is confirmed but the product can't be reserved.\n* Available: The product of the stock move is reserved.\n* Done: The product has been transferred and the transfer has been confirmed." index=True readonly=True string='Status' args: [('draft', 'New'), ('waiting', 'Waiting Another Move'), ('confirmed', 'Waiting'), ('partially_available', 'Partially Available'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')]
  • warehouse_id Many2one → stock.warehouse
    help='the warehouse to consider for the route selection on the next procurement (if any).' args: 'stock.warehouse', 'Warehouse'
Public methods (10)
  • action_add_packages(self)
    Opens a list of suitable packages to add to a picking.
  • action_generate_lot_line_vals(self, context_data, mode, first_lot, count, lot_text)
    @api.model
  • action_open_reference(self)
    Open the form view of the move's reference document, if one exists, otherwise open form view of self
  • action_product_forecast_report(self)
  • action_show_details(self)
    Returns an action that will open a form view (in a popup) allowing to work on all the move lines of a particular move. This form view is used when "show operations" is not checked on the picking type.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • split_lots(self, lots)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (44)
  • allowed_uom_ids Many2many → uom.uom
    compute='_compute_allowed_uom_ids' args: 'uom.uom'
  • company_id Many2one → res.company
    index=True readonly=True required=True string='Company' args: 'res.company'
  • consume_line_ids Many2many → stock.move.line
    args: 'stock.move.line', 'stock_move_line_consume_rel', 'consume_line_id', 'produce_line_id'
  • date Datetime
    default=fields.Datetime.now help="Creation date of this move line until updated due to: quantity being increased, 'picked' status has updated, or move line is done." required=True args: 'Date'
  • description_picking Text
    related='move_id.description_picking'
  • is_entire_pack Boolean
    args: 'Is added through entire package'
  • is_inventory Boolean
    related='move_id.is_inventory'
  • is_locked Boolean
    readonly=True related='move_id.is_locked'
  • location_dest_id Many2one → stock.location
    check_company=True compute='_compute_location_id' domain="[('usage', '!=', 'view')]" index=True precompute=True readonly=False required=True store=True args: 'stock.location', 'To'
  • location_dest_usage Selection
    related='location_dest_id.usage' string='Destination Location Type'
  • location_id Many2one → stock.location
    check_company=True compute='_compute_location_id' domain="[('usage', '!=', 'view')]" index=True precompute=True readonly=False required=True store=True args: 'stock.location', 'From'
  • location_usage Selection
    related='location_id.usage' string='Source Location Type'
  • lot_id Many2one → stock.lot
    check_company=True domain="[('product_id', '=', product_id)]" index=True args: 'stock.lot', 'Lot/Serial Number'
  • lot_name Char
    args: 'Lot/Serial Number Name'
  • lots_visible Boolean
    compute='_compute_lots_visible'
  • move_id Many2one → stock.move
    check_company=True index=True args: 'stock.move', 'Stock Operation'
  • move_partner_id Many2one
    readonly=True related='move_id.partner_id'
  • origin Char
    related='move_id.origin' string='Source'
  • owner_id Many2one → res.partner
    check_company=True help='When validating the transfer, the products will be taken from this owner.' index='btree_not_null' args: 'res.partner', 'From Owner'
  • package_history_id Many2one → stock.package.history
    index='btree_not_null' string='Package History' args: 'stock.package.history'
  • package_id Many2one → stock.package
    check_company=True domain="[('location_id', '=', location_id)]" ondelete='restrict' args: 'stock.package', 'Source Package'
  • picked Boolean
    compute='_compute_picked' copy=False readonly=False store=True args: 'Picked'
  • picking_code Selection
    readonly=True related='picking_type_id.code'
  • picking_id Many2one → stock.picking
    bypass_search_access=True check_company=True help='The stock operation where the packing has been made' index=True args: 'stock.picking', 'Transfer'
  • picking_location_dest_id Many2one
    related='picking_id.location_dest_id'
  • picking_location_id Many2one
    related='picking_id.location_id'
  • picking_partner_id Many2one
    readonly=True related='picking_id.partner_id'
  • picking_type_id Many2one → stock.picking.type
    compute='_compute_picking_type_id' search='_search_picking_type_id' args: 'stock.picking.type', 'Operation type'
  • picking_type_use_create_lots Boolean
    readonly=True related='picking_type_id.use_create_lots'
  • picking_type_use_existing_lots Boolean
    readonly=True related='picking_type_id.use_existing_lots'
  • produce_line_ids Many2many → stock.move.line
    args: 'stock.move.line', 'stock_move_line_consume_rel', 'produce_line_id', 'consume_line_id'
  • product_category_name Char
    related='product_id.categ_id.complete_name' string='Product Category'
  • product_id Many2one → product.product
    check_company=True domain="[('type', '!=', 'service')]" index=True ondelete='cascade' args: 'product.product', 'Product'
  • product_uom_id Many2one → uom.uom
    compute='_compute_product_uom_id' domain="[('id', 'in', allowed_uom_ids)]" precompute=True readonly=False required=True store=True args: 'uom.uom', 'Unit'
  • quant_id Many2one → stock.quant
    store=False args: 'stock.quant', 'Pick From'
  • quantity Float
    compute='_compute_quantity' copy=False digits='Product Unit' readonly=False store=True args: 'Quantity'
  • quantity_product_uom Float
    compute='_compute_quantity_product_uom' copy=False digits='Product Unit' store=True args: 'Quantity in Product UoM'
  • reference Char
    related='move_id.reference'
  • result_package_dest_name Char
    related='result_package_id.dest_complete_name' args: 'Destination Package Name'
  • result_package_id Many2one → stock.package
    check_company=True domain="['|', '|', ('location_id', '=', location_dest_id), ('id', '=', package_id), '&', ('location_id', '=', False), '|', ('move_line_ids', '=', False), ('move_line_ids.location_dest_id', '=', location_dest_id)]" help='If set, the operations are packed into this package' ondelete='restrict' required=False args: 'stock.package', 'Destination Package'
  • scheduled_date Datetime
    related='move_id.date' args: 'Scheduled Date'
  • scrap_id Many2one
    related='move_id.scrap_id'
  • state Selection
    related='move_id.state' store=True
  • tracking Selection
    readonly=True related='product_id.tracking'
Public methods (7)
  • action_open_reference(self)
  • action_put_in_pack(self, *, package_id=False, package_type_id=False, package_name=False)
  • action_revert_inventory(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_move_line_quant_match(self, move_id, dirty_move_line_ids, dirty_quant_ids)
  • unlink(self)
  • write(self, vals)

New fields (3)
  • orderpoint_ids Many2many → stock.warehouse.orderpoint
    args: 'stock.warehouse.orderpoint'
  • predefined_date Selection
    default='day' string='Snooze for' args: [('day', '1 Day'), ('week', '1 Week'), ('month', '1 Month'), ('custom', 'Custom')]
  • snoozed_until Date
    args: 'Snooze Date'
Public methods (1)
  • action_snooze(self)

New fields (24)
  • all_children_package_ids One2many → stock.package
    compute='_compute_all_children_package_ids' search='_search_all_children_package_ids' args: 'stock.package'
  • child_package_dest_ids One2many → stock.package
    args: 'stock.package', 'package_dest_id', 'Assigned Contained Packages'
  • child_package_ids One2many → stock.package
    string='Contained Packages' args: 'stock.package', 'parent_package_id'
  • company_id Many2one → res.company
    compute='_compute_package_info' index=True readonly=True recursive=True store=True args: 'res.company', 'Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True args: 'Full Package Name'
  • contained_quant_ids One2many → stock.quant
    compute='_compute_contained_quant_ids' search='_search_contained_quant_ids' args: 'stock.quant'
  • content_description Char
    compute='_compute_content_description' args: 'Contents'
  • dest_complete_name Char
    compute='_compute_dest_complete_name' recursive=True args: 'Package Name At Destination'
  • json_popover Char
    compute='_compute_json_popover' args: 'JSON data for popover widget'
  • location_dest_id Many2one → stock.location
    compute='_compute_location_dest_id' search='_search_location_dest_id' args: 'stock.location', 'Destination location'
  • location_id Many2one → stock.location
    compute='_compute_package_info' index=True readonly=False recursive=True store=True args: 'stock.location', 'Location'
  • move_line_ids One2many → stock.move.line
    compute='_compute_move_line_ids' search='_search_move_line_ids' args: 'stock.move.line'
  • name Char
    copy=False index='trigram' required=True args: 'Package Reference'
  • outermost_package_id Many2one → stock.package
    compute='_compute_outermost_package_id' recursive=True search='_search_outermost_package_id' args: 'stock.package', 'Outermost Destination Container'
  • owner_id Many2one → res.partner
    compute='_compute_owner_id' compute_sudo=True readonly=True search='_search_owner' args: 'res.partner', 'Owner'
  • pack_date Date
    default=fields.Date.today args: 'Pack Date'
  • package_dest_id Many2one → stock.package
    index='btree_not_null' args: 'stock.package', 'Destination Container'
  • package_type_id Many2one → stock.package.type
    index=True args: 'stock.package.type', 'Package Type'
  • parent_package_id Many2one → stock.package
    index='btree_not_null' args: 'stock.package', 'Container'
  • parent_path Char
    index=True
  • picking_ids Many2many → stock.picking
    compute='_compute_picking_ids' help='Transfers in which the Package is set as Destination Package' search='_search_picking_ids' string='Transfers' args: 'stock.picking'
  • quant_ids One2many → stock.quant
    domain=['|', ('quantity', '!=', 0), ('reserved_quantity', '!=', 0)] readonly=True args: 'stock.quant', 'package_id', 'Bulk Content'
  • shipping_weight Float
    help='Total weight of the package.' string='Shipping Weight'
  • valid_sscc Boolean
    compute='_compute_valid_sscc' args: 'Package name is valid SSCC'
Public methods (7)
  • action_add_to_picking(self)
  • action_put_in_pack(self, *, package_id=False, package_type_id=False, package_name=False)
  • action_remove_package(self)
    Removes all packages in self from the destination container tree. For move lines directly linked to a package (through result_package_id) - If the entire package is moved, remove the move lines entirely from the picking - Otherwise, just unset the packages as destination package
  • action_view_picking(self)
  • create(self, vals_list)
    @api.model_create_multi
  • unpack(self)
    Unpacks quants directly inside the container, and remove contained packages from this package.
  • write(self, vals)

New fields (3)
  • filtered_location One2many → stock.location
    comodel_name='stock.location' compute='_compute_filtered_location'
  • location_dest_id Many2one → stock.location
    required=True args: 'stock.location', 'Destination location'
  • move_line_ids Many2many → stock.move.line
    required=True args: 'stock.move.line', 'Products'
Public methods (1)
  • action_done(self)

New fields (13)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_dest_id Many2one → stock.location
    args: 'stock.location', 'Destination Location'
  • location_id Many2one → stock.location
    args: 'stock.location', 'Origin Location'
  • move_line_ids One2many → stock.move.line
    required=True string='Move Lines' args: 'stock.move.line', 'package_history_id'
  • outermost_dest_id Many2one → stock.package
    args: 'stock.package', 'Outermost Destination Container'
  • package_id Many2one → stock.package
    ondelete='cascade' required=True args: 'stock.package', 'Package'
  • package_name Char
    required=True args: 'Package Name'
  • package_type_id Many2one → stock.package.type
    related='package_id.package_type_id' args: 'stock.package.type'
  • parent_dest_id Many2one → stock.package
    args: 'stock.package', 'Destination Container'
  • parent_dest_name Char
    args: 'Destination Container Name'
  • parent_orig_id Many2one → stock.package
    args: 'stock.package', 'Origin Container'
  • parent_orig_name Char
    args: 'Origin Container Name'
  • picking_ids Many2many → stock.picking
    string='Transfers' args: 'stock.picking'
Public methods (1)
  • action_show_package(self)

New fields (17)
  • barcode Char
    copy=False args: 'Barcode'
  • base_weight Float
    help='Weight of the package type' string='Weight'
  • company_id Many2one → res.company
    index=True args: 'res.company', 'Company'
  • has_quants Boolean
    compute='_compute_has_quants' args: 'Has Contents'
  • height Float
    help='Packaging Height' args: 'Height'
  • length_uom_name Char
    compute='_compute_length_uom_name' default=_get_default_length_uom string='Length unit of measure label'
  • max_weight Float
    help='Maximum weight shippable in this packaging' args: 'Max Weight'
  • name Char
    required=True args: 'Package Type'
  • package_use Selection
    default='disposable' help="Reusable boxes are used for batch picking and emptied afterwards to be reused. In the barcode application, scanning a reusable box will add the products in this box.\n Disposable boxes aren't reused, when scanning a disposable box in the barcode application, the contained products are added to the transfer." required=True string='Package Use' args: [('disposable', 'Disposable Box'), ('reusable', 'Reusable Box (totes)')]
  • packaging_length Float
    help='Packaging Length' args: 'Length'
  • route_ids Many2many → stock.route
    domain="[('package_type_selectable', '=', True)]" string='Routes' args: 'stock.route'
  • sequence Integer
    default=1 help='The first in the sequence is the default one.' args: 'Sequence'
  • sequence_code Char
    readonly=False related='sequence_id.code' args: 'Sequence Prefix'
  • sequence_id Many2one → ir.sequence
    check_company=True copy=False args: 'ir.sequence', 'Reference Sequence'
  • storage_category_capacity_ids One2many → stock.storage.category.capacity
    copy=True args: 'stock.storage.category.capacity', 'package_type_id', 'Storage Category Capacity'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom string='Weight unit of measure label'
  • width Float
    help='Packaging Width' args: 'Width'
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (57)
  • backorder_id Many2one → stock.picking
    check_company=True copy=False help='If this shipment was split, then this field links to the shipment which contains the already processed part.' index='btree_not_null' readonly=True args: 'stock.picking', 'Back Order of'
  • backorder_ids One2many → stock.picking
    args: 'stock.picking', 'backorder_id', 'Back Orders'
  • company_id Many2one → res.company
    index=True readonly=True related='picking_type_id.company_id' store=True string='Company' args: 'res.company'
  • date_deadline Datetime
    compute='_compute_date_deadline' help='In case of outgoing flow, validate the transfer before this date to allow to deliver at promised date to the customer.\n In case of incoming flow, validate the transfer before this date in order to have these products in stock at the date promised by the supplier' store=True args: 'Deadline'
  • date_done Datetime
    copy=False help='Date at which the transfer has been processed or cancelled.' args: 'Date of Transfer'
  • delay_alert_date Datetime
    compute='_compute_delay_alert_date' search='_search_delay_alert_date' args: 'Delay Alert Date'
  • has_deadline_issue Boolean
    compute='_compute_has_deadline_issue' default=False help='Is late or will be late depending on the deadline and scheduled date' store=True args: 'Is late'
  • has_scrap_move Boolean
    compute='_has_scrap_move' args: 'Has Scrap Moves'
  • has_tracking Boolean
    compute='_compute_has_tracking'
  • is_date_editable Boolean
    compute='_compute_is_date_editable' args: 'Is Scheduled Date Editable'
  • is_locked Boolean
    copy=False default=True help='When the picking is not done this allows changing the initial demand. When the picking is done this allows changing the done quantities.'
  • is_signed Boolean
    compute='_compute_is_signed' args: 'Is Signed'
  • 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_location_id' 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' precompute=True readonly=False required=True store=True args: 'stock.location', 'Source Location'
  • lot_id Many2one → stock.lot
    readonly=True related='move_line_ids.lot_id' args: 'stock.lot', 'Lot/Serial Number'
  • move_ids One2many → stock.move
    copy=True string='Stock Moves' args: 'stock.move', 'picking_id'
  • move_line_ids One2many → stock.move.line
    args: 'stock.move.line', 'picking_id', 'Operations'
  • move_type Selection
    compute='_compute_move_type' help='It specifies goods to be deliver partially or all at once' precompute=True readonly=False required=True store=True args: [('direct', 'As soon as possible'), ('one', 'When all products are ready')], 'Shipping Policy'
  • name Char
    copy=False default='/' index='trigram' readonly=True args: 'Reference'
  • note Html
    args: 'Notes'
  • origin Char
    help='Reference of the document' index='trigram' args: 'Source Document'
  • owner_id Many2one → res.partner
    check_company=True help='When validating the transfer, the products will be assigned to this owner.' index='btree_not_null' args: 'res.partner', 'Assign Owner'
  • package_history_ids Many2many → stock.package.history
    copy=False string='Transfered Packages' args: 'stock.package.history'
  • packages_count Integer
    compute='_compute_packages_count' args: 'Packages Count'
  • partner_country_id Many2one → res.country
    related='partner_id.country_id' args: 'res.country'
  • partner_id Many2one → res.partner
    check_company=True index='btree_not_null' args: 'res.partner', 'Contact'
  • picking_properties Properties
    copy=True definition='picking_type_id.picking_properties_definition' args: 'Properties'
  • picking_type_code Selection
    readonly=True related='picking_type_id.code'
  • picking_type_entire_packs Boolean
    related='picking_type_id.show_entire_packs'
  • picking_type_id Many2one → stock.picking.type
    default=_default_picking_type_id index=True required=True tracking=True args: 'stock.picking.type', 'Operation Type'
  • picking_warning_text Text
    compute='_compute_picking_warning_text' help='Internal instructions for the partner or its parent company as set by the user.' args: 'Picking Instructions'
  • printed Boolean
    copy=False args: 'Printed'
  • priority Selection
    default='0' help='Products will be reserved first for the transfers with the highest priorities.' string='Priority' args: PROCUREMENT_PRIORITIES
  • product_id Many2one → product.product
    readonly=True related='move_ids.product_id' args: 'product.product', 'Product'
  • products_availability Char
    compute='_compute_products_availability' help='Latest product availability status of the picking' string='Product Availability'
  • products_availability_state Selection
    compute='_compute_products_availability' search='_search_products_availability_state' args: [('available', 'Available'), ('expected', 'Expected'), ('late', 'Late')]
  • reference_ids Many2many → stock.reference
    readonly=True related='move_ids.reference_ids' string='References' args: 'stock.reference'
  • return_count Integer
    compute='_compute_return_count' compute_sudo=False args: '# Returns'
  • return_id Many2one → stock.picking
    check_company=True copy=False help='If this picking was created as a return of another picking, this field links to the original picking.' index='btree_not_null' readonly=True args: 'stock.picking', 'Return of'
  • return_ids One2many → stock.picking
    args: 'stock.picking', 'return_id', 'Returns'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' default=fields.Datetime.now help='Scheduled time for the first part of the shipment to be processed. Setting manually a value here would set it as expected date for all the stock moves.' index=True inverse='_set_scheduled_date' store=True tracking=True args: 'Scheduled Date'
  • 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')]
  • shipping_volume Float
    compute='_compute_shipping_volume' args: 'Volume for Shipping'
  • shipping_weight Float
    compute='_compute_shipping_weight' digits='Stock Weight' help="Total weight of packages and products not in a package. Packages with no shipping weight specified will default to their products' total weight. This is the weight used to compute the cost of the shipping." readonly=False store=True args: 'Weight for Shipping'
  • show_allocation Boolean
    compute='_compute_show_allocation' help='Technical Field used to decide whether the button "Allocation" should be displayed.'
  • show_check_availability Boolean
    compute='_compute_show_check_availability' help='Technical field used to compute whether the button "Check Availability" should be displayed.'
  • show_lots_text Boolean
    compute='_compute_show_lots_text'
  • show_next_pickings Boolean
    compute='_compute_show_next_pickings'
  • show_operations Boolean
    related='picking_type_id.show_operations'
  • signature Image
    attachment=True copy=False help='Signature' args: 'Signature'
  • state Selection
    compute='_compute_state' copy=False help=' * Draft: The transfer is not confirmed yet. Reservation doesn\'t apply.\n * Waiting another operation: This transfer is waiting for another operation before being ready.\n * Waiting: The transfer is waiting for the availability of some products.\n(a) The shipping policy is "As soon as possible": no product could be reserved.\n(b) The shipping policy is "When all products are ready": not all the products could be reserved.\n * Ready: The transfer is ready to be processed.\n(a) The shipping policy is "As soon as possible": at least one product has been reserved.\n(b) The shipping policy is "When all products are ready": all product have been reserved.\n * Done: The transfer has been processed.\n * Cancelled: The transfer has been cancelled.' index=True readonly=True store=True string='Status' tracking=True args: [('draft', 'Draft'), ('waiting', 'Waiting Another Operation'), ('confirmed', 'Waiting'), ('assigned', 'Ready'), ('done', 'Done'), ('cancel', 'Cancelled')]
  • use_create_lots Boolean
    related='picking_type_id.use_create_lots'
  • use_existing_lots Boolean
    related='picking_type_id.use_existing_lots'
  • user_id Many2one → res.users
    copy=False default=<expr> domain=<expr> tracking=True args: 'res.users', 'Responsible'
  • warehouse_address_id Many2one → res.partner
    related='picking_type_id.warehouse_id.partner_id' args: 'res.partner'
  • weight_bulk Float
    compute='_compute_bulk_weight' help='Total weight of products which are not in a package.' args: 'Bulk Weight'
Public methods (32)
  • action_add_entire_packs(self, package_ids)
  • action_assign(self)
    Check availability of picking moves. This has the effect of changing the state and reserve quants on available moves, and may also impact the state of the picking as it is computed based on move's states. @return: True
  • action_cancel(self)
  • action_confirm(self)
  • action_detailed_operations(self)
  • action_next_transfer(self)
  • action_open_label_layout(self)
  • action_open_label_type(self)
  • action_picking_move_tree(self)
  • action_put_in_pack(self, *, package_id=False, package_type_id=False, package_name=False)
  • action_see_move_scrap(self)
  • action_see_package_histories(self)
  • action_see_packages(self)
  • action_see_returns(self)
  • action_split_transfer(self)
  • action_toggle_is_locked(self)
  • action_view_reception_report(self)
  • button_scrap(self)
  • button_validate(self)
  • calculate_date_category(self, datetime)
    @api.model
    Assigns given datetime to one of the following categories: - "before" - "yesterday" - "today" - "day_1" (tomorrow) - "day_2" (the day after tomorrow) - "after" The categories are based on current user's timezone (e.g. "today" will last between 00:00 and 23:59 local time). The datetime itself is assumed to be in UTC. If the datetime is falsy, this function returns "".
  • create(self, vals_list)
    @api.model_create_multi
  • date_category_to_domain(self, field_name, date_category)
    @api.model
    Given a date category, returns a list of tuples of operator and value that can be used in a domain to filter records based on their scheduled date. Args: date_category (str): The date category to use for the computation. Allowed values are: * "before" * "yesterday" * "today" * "day_1" * "day_2" * "after" Returns: a list of tuples: each tuple consists of an operator and a value that can be used in a domain to filter records based on their scheduled date. The operator can be "<" or ">=". The value is a datetime object. If an incorrect date category is passed, this method returns None.
  • do_print_picking(self)
  • do_unreserve(self)
  • get_action_click_graph(self)
    @api.model
  • get_action_picking_tree_incoming(self)
    @api.model
  • get_action_picking_tree_internal(self)
    @api.model
  • get_action_picking_tree_outgoing(self)
    @api.model
  • get_empty_list_help(self, help_message)
    @api.model
  • should_print_delivery_address(self)
  • unlink(self)
  • write(self, vals)

New fields (49)
  • active Boolean
    default=True args: 'Active'
  • auto_print_delivery_slip Boolean
    help='If this checkbox is ticked, Odoo will automatically print the delivery slip of a picking when it is validated.' args: 'Auto Print Delivery Slip'
  • auto_print_lot_labels Boolean
    help='If this checkbox is ticked, Odoo will automatically print the lot/SN labels of a picking when it is validated.' args: 'Auto Print Lot/SN Labels'
  • auto_print_package_label Boolean
    help='If this checkbox is ticked, Odoo will automatically print the package label when "Put in Pack" button is used.' args: 'Auto Print Package Label'
  • auto_print_packages Boolean
    help='If this checkbox is ticked, Odoo will automatically print the packages and their contents of a picking when it is validated.' args: 'Auto Print Packages'
  • auto_print_product_labels Boolean
    help='If this checkbox is ticked, Odoo will automatically print the product labels of a picking when it is validated.' args: 'Auto Print Product Labels'
  • auto_print_reception_report Boolean
    help='If this checkbox is ticked, Odoo will automatically print the reception report of a picking when it is validated and has assigned moves.' args: 'Auto Print Reception Report'
  • auto_print_reception_report_labels Boolean
    help='If this checkbox is ticked, Odoo will automatically print the reception report labels of a picking when it is validated.' args: 'Auto Print Reception Report Labels'
  • auto_print_return_slip Boolean
    help='If this checkbox is ticked, Odoo will automatically print the return slip of a picking when it is validated.' args: 'Auto Print Return Slip'
  • auto_show_reception_report Boolean
    help='If this checkbox is ticked, Odoo will automatically show the reception report (if there are moves to allocate to) when validating.' args: 'Show Reception Report at Validation'
  • barcode Char
    copy=False args: 'Barcode'
  • code Selection
    default='incoming' required=True args: [('incoming', 'Receipt'), ('outgoing', 'Delivery'), ('internal', 'Internal Transfer')], 'Type of Operation'
  • color Integer
    args: 'Color'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company', 'Company'
  • count_move_ready Integer
    compute='_compute_move_count'
  • count_picking Integer
    compute='_compute_picking_count'
  • count_picking_backorders Integer
    compute='_compute_picking_count'
  • count_picking_draft Integer
    compute='_compute_picking_count'
  • count_picking_late Integer
    compute='_compute_picking_count'
  • count_picking_ready Integer
    compute='_compute_picking_count'
  • count_picking_waiting Integer
    compute='_compute_picking_count'
  • create_backorder Selection
    default='ask' help='When validating a transfer:\n * Ask: users are asked to choose if they want to make a backorder for remaining products\n * Always: a backorder is automatically created for the remaining products\n * Never: remaining products are cancelled' required=True args: [('ask', 'Ask'), ('always', 'Always'), ('never', 'Never')], 'Create Backorder'
  • default_location_dest_id Many2one → stock.location
    check_company=True compute='_compute_default_location_dest_id' help='This is the default destination location when this operation is manually created. However, it is possible to change it afterwards or that the routes use another one by default.' precompute=True readonly=False required=True store=True args: 'stock.location', 'Destination Location'
  • default_location_src_id Many2one → stock.location
    check_company=True compute='_compute_default_location_src_id' help='This is the default source location when this operation is manually created. However, it is possible to change it afterwards or that the routes use another one by default.' precompute=True readonly=False required=True store=True args: 'stock.location', 'Source Location'
  • favorite_user_ids Many2many → res.users
    args: 'res.users', 'picking_type_favorite_user_rel', 'picking_type_id', 'user_id'
  • hide_reservation_method Boolean
    compute='_compute_hide_reservation_method'
  • is_favorite Boolean
    compute='_compute_is_favorite' compute_sudo=True inverse='_inverse_is_favorite' search='_search_is_favorite' string='Show Operation in Overview'
  • kanban_dashboard_graph Text
    compute='_compute_kanban_dashboard_graph'
  • lot_label_format Selection
    default='4x12_lots' string='Lot Label Format to auto-print' args: [('4x12_lots', '4 x 12 - One per lot/SN'), ('4x12_units', '4 x 12 - One per unit'), ('zpl_lots', 'ZPL Labels - One per lot/SN'), ('zpl_units', 'ZPL Labels - One per unit')]
  • move_type Selection
    default='direct' help='It specifies goods to be transferred partially or all at once' required=True args: [('direct', 'As soon as possible'), ('one', 'When all products are ready')], 'Shipping Policy'
  • name Char
    required=True translate=True args: 'Operation Type'
  • package_label_to_print Selection
    default='pdf' args: [('pdf', 'PDF'), ('zpl', 'ZPL')], 'Package Label to Print'
  • picking_properties_definition PropertiesDefinition
    args: 'Picking Properties'
  • print_label Boolean
    compute='_compute_print_label' help='Check this box if you want to generate shipping label in this operation.' readonly=False store=True args: 'Generate Shipping Labels'
  • product_label_format Selection
    default='2x7xprice' string='Product Label Format to auto-print' args: [('dymo', 'Dymo'), ('2x7xprice', '2 x 7 with price'), ('4x7xprice', '4 x 7 with price'), ('4x12', '4 x 12'), ('4x12xprice', '4 x 12 with price'), ('zpl', 'ZPL Labels'), ('zplxprice', 'ZPL Labels with price')]
  • reservation_days_before Integer
    help='Maximum number of days before scheduled date that products should be reserved.' args: 'Days'
  • reservation_days_before_priority Integer
    help='Maximum number of days before scheduled date that priority picking products should be reserved.' args: 'Days when starred'
  • reservation_method Selection
    default='at_confirm' help='How products in transfers of this operation type should be reserved.' required=True args: [('at_confirm', 'At Confirmation'), ('manual', 'Manually'), ('by_date', 'Before scheduled date')], 'Reservation Method'
  • return_picking_type_id Many2one → stock.picking.type
    check_company=True index='btree_not_null' args: 'stock.picking.type', 'Operation Type for Returns'
  • sequence Integer
    help="Used to order the 'All Operations' kanban view" args: 'Sequence'
  • sequence_code Char
    required=True args: 'Sequence Prefix'
  • sequence_id Many2one → ir.sequence
    check_company=True copy=False args: 'ir.sequence', 'Reference Sequence'
  • set_package_type Boolean
    default=False help='If ticked, you will be able to select which package or package type to use in a put in pack' args: 'Set Package Type'
  • show_entire_packs Boolean
    default=False help='If ticked, packages to move will be directly displayed in Barcode instead of the products they contain' args: 'Move Entire Packages'
  • show_operations Boolean
    default=False help='If this checkbox is ticked, the pickings lines will represent detailed stock operations. If not, the picking lines will represent an aggregate of detailed stock operations.' args: 'Show Detailed Operations'
  • show_picking_type Boolean
    compute='_compute_show_picking_type'
  • use_create_lots Boolean
    compute='_compute_use_create_lots' default=True help='If this is checked only, it will suppose you want to create new Lots/Serial Numbers, so you can provide them in a text field. ' readonly=False store=True args: 'Create New Lots/Serial Numbers'
  • use_existing_lots Boolean
    compute='_compute_use_existing_lots' default=True help='If this is checked, you will be able to choose the Lots/Serial Numbers. You can also decide to not put lots in this operation type. This means it will create stock with no lot or not put a restriction on the lot taken. ' readonly=False store=True args: 'Use Existing Lots/Serial Numbers'
  • warehouse_id Many2one → stock.warehouse
    check_company=True compute='_compute_warehouse_id' ondelete='cascade' readonly=False store=True args: 'stock.warehouse', 'Warehouse'
Public methods (11)
  • action_redirect_to_barcode_installation(self)
    @api.model
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_action_picking_tree_backorder(self)
  • get_action_picking_tree_late(self)
  • get_action_picking_tree_ready(self)
  • get_action_picking_tree_waiting(self)
  • get_action_picking_type_moves_analysis(self)
  • get_action_picking_type_ready_moves(self)
  • get_stock_picking_action_picking_type(self)
  • write(self, vals)

New fields (7)
  • location_dest_id Many2one → stock.location
    args: 'stock.location', 'Destination'
  • move_line_ids Many2many → stock.move.line
    string='Move lines' args: 'stock.move.line'
  • origin_package_ids Many2many → stock.package
    compute='_compute_origin_package_ids' args: 'stock.package'
  • package_ids Many2many → stock.package
    string='Packages' args: 'stock.package'
  • package_type_id Many2one → stock.package.type
    args: 'stock.package.type', 'Package Type'
  • package_type_sequence_id Many2one
    related='package_type_id.sequence_id'
  • result_package_id Many2one → stock.package
    args: 'stock.package', 'Package'
Public methods (1)
  • action_put_in_pack(self)

New fields (10)
  • active Boolean
    default=True args: 'Active'
  • category_id Many2one → product.category
    default=_default_category_id domain=[('filter_for_stock_putaway_rule', '=', True)] index='btree_not_null' ondelete='cascade' args: 'product.category', 'Product Category'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company', 'Company'
  • location_in_id Many2one → stock.location
    check_company=True default=_default_location_id domain="[('child_ids', '!=', False)]" index=True ondelete='cascade' required=True args: 'stock.location', 'When product arrives in'
  • location_out_id Many2one → stock.location
    check_company=True domain="[('id', 'child_of', location_in_id)]" ondelete='cascade' required=True args: 'stock.location', 'Store to sublocation'
  • package_type_ids Many2many → stock.package.type
    check_company=True string='Package Type' args: 'stock.package.type'
  • product_id Many2one → product.product
    check_company=True default=_default_product_id domain="[('product_tmpl_id', '=', context.get('active_id', False))] if context.get('active_model') == 'product.template' else [('type', '!=', 'service')]" index='btree_not_null' ondelete='cascade' args: 'product.product', 'Product'
  • sequence Integer
    help='Give to the more specialized category, a higher priority to have them in top of the list.' args: 'Priority'
  • storage_category_id Many2one → stock.storage.category
    check_company=True compute='_compute_storage_category' ondelete='cascade' readonly=False store=True args: 'stock.storage.category', 'Storage Category'
  • sublocation Selection
    default='no' args: [('no', 'No'), ('last_used', 'Last Used'), ('closest_location', 'Closest Location')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (29)
  • available_quantity Float
    compute='_compute_available_quantity' digits='Product Unit' help="On hand quantity which hasn't been reserved on a transfer, in the default unit of measure of the product" args: 'Available Quantity'
  • company_id Many2one
    readonly=True related='location_id.company_id' store=True string='Company'
  • cyclic_inventory_frequency Integer
    related='location_id.cyclic_inventory_frequency'
  • in_date Datetime
    default=fields.Datetime.now readonly=True required=True args: 'Incoming Date'
  • inventory_date Date
    compute='_compute_inventory_date' help='Next date the On Hand Quantity should be counted.' readonly=False store=True args: 'Scheduled'
  • inventory_diff_quantity Float
    compute='_compute_inventory_diff_quantity' digits='Product Unit' help="Indicates the gap between the product's theoretical quantity and its counted quantity." readonly=True store=True args: 'Difference'
  • inventory_quantity Float
    digits='Product Unit' help="The product's counted quantity." args: 'Counted'
  • inventory_quantity_auto_apply Float
    compute='_compute_inventory_quantity_auto_apply' digits='Product Unit' groups='stock.group_stock_manager' inverse='_set_inventory_quantity' args: 'Inventoried Quantity'
  • inventory_quantity_set Boolean
    compute='_compute_inventory_quantity_set' readonly=False store=True
  • is_favorite Boolean
    related='product_tmpl_id.is_favorite'
  • is_outdated Boolean
    compute='_compute_is_outdated' search='_search_is_outdated' args: 'Quantity has been moved since last count'
  • last_count_date Date
    compute='_compute_last_count_date' help='Last time the Quantity was Updated'
  • location_id Many2one → stock.location
    bypass_search_access=True domain=<expr> index=True ondelete='restrict' required=True args: 'stock.location', 'Location'
  • lot_id Many2one → stock.lot
    check_company=True domain=<expr> index=True ondelete='restrict' args: 'stock.lot', 'Lot/Serial Number'
  • lot_properties Properties
    definition='product_id.lot_properties_definition' readonly=True related='lot_id.lot_properties'
  • on_hand Boolean
    search='_search_on_hand' store=False args: 'On Hand'
  • owner_id Many2one → res.partner
    check_company=True help='This is the owner of the quant' index='btree_not_null' args: 'res.partner', 'Owner'
  • package_id Many2one → stock.package
    check_company=True domain="['|', ('location_id', '=', location_id), '&', ('location_id', '=', False), ('quant_ids', '=', False)]" help='The package containing this quant' index=True ondelete='restrict' args: 'stock.package', 'Package'
  • product_categ_id Many2one
    related='product_tmpl_id.categ_id'
  • product_id Many2one → product.product
    check_company=True domain=<expr> index=True ondelete='restrict' required=True args: 'product.product', 'Product'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' string='Product Template' args: 'product.template'
  • product_uom_id Many2one → uom.uom
    readonly=True related='product_id.uom_id' args: 'uom.uom', 'Unit'
  • quantity Float
    digits='Product Unit' help='Quantity of products in this quant, in the default unit of measure of the product' readonly=True args: 'Quantity'
  • reserved_quantity Float
    default=0.0 digits='Product Unit' help='Quantity of reserved products in this quant, in the default unit of measure of the product' readonly=True required=True args: 'Reserved Quantity'
  • sn_duplicated Boolean
    compute='_compute_sn_duplicated' help='If the same SN is in another Quant' string='Duplicated Serial Number'
  • storage_category_id Many2one
    related='location_id.storage_category_id'
  • tracking Selection
    readonly=True related='product_id.tracking'
  • user_id Many2one → res.users
    domain=<expr> help='User assigned to do product count.' args: 'res.users', 'Assigned To'
  • warehouse_id Many2one → stock.warehouse
    related='location_id.warehouse_id' args: 'stock.warehouse'
Public methods (23)
  • action_apply_all(self)
  • action_apply_inventory(self, date=None)
  • action_clear_inventory_quantity(self)
  • action_inventory_history(self)
  • action_reset(self)
  • action_set_inventory_quantity(self)
  • action_set_inventory_quantity_zero(self)
  • action_stock_quant_relocate(self)
  • action_view_inventory(self)
    @api.model
    Similar to _get_quants_action except specific for inventory adjustments (i.e. inventory counts).
  • action_view_orderpoints(self)
  • action_view_quants(self)
    @api.model
  • action_view_stock_moves(self)
  • check_location_id(self)
    @api.constrains('location_id')
  • check_lot_id(self)
    @api.constrains('lot_id')
  • check_product_id(self)
    @api.constrains('product_id')
  • check_quantity(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
    Override to handle the "inventory mode" and create a quant as superuser the conditions are met.
  • get_aggregate_barcodes(self)
    Generates and aggregates quants' barcodes. This method uses the config parameters `stock.agg_barcode_max_length` to determine the length limit of a single aggregate barcode (400 by default) and `stock.barcode_separator` to determine which character to use to separate individual encodings (this method can't work without this parameter and will return an empty list.) Depending on the number of quants, those parameters and the length of their barcode encodings, there can be one or more aggregate barcodes. :return: list
  • get_import_templates(self)
    @api.model
  • move_quants(self, location_dest_id=False, package_dest_id=False, message=False, unpack=False, up_to_parent_packages=False)
    Directly move a stock.quant to another location and/or package by creating a stock.move. :param location_dest_id: `stock.location` destination location for the quants :param package_dest_id: `stock.package` destination package for the quants :param message: String to fill the reference field on the generated stock.move :param unpack: set to True when needing to unpack the quant :param up_to_parent_packages: `stock.package` that are the upper limit to keep the parents
  • name_create(self, name)
    @api.model
  • write(self, vals)
    Override to handle the "inventory mode" and create the inventory move.

New fields (9)
  • company_id Many2one
    related='quant_ids.company_id'
  • dest_location_id Many2one → stock.location
    domain="[('usage', '=', 'internal'), ('company_id', '=', company_id)]" args: 'stock.location'
  • dest_package_id Many2one → stock.package
    compute='_compute_dest_package_id' domain='dest_package_id_domain' store=True args: 'stock.package'
  • dest_package_id_domain Char
    compute='_compute_dest_package_id_domain'
  • is_multi_location Boolean
    compute='_compute_is_multi_location'
  • is_partial_package Boolean
    compute='_compute_is_partial_package'
  • message Text
    args: 'Reason for relocation'
  • partial_package_names Char
    compute='_compute_is_partial_package'
  • quant_ids Many2many → stock.quant
    args: 'stock.quant'
Public methods (1)
  • action_relocate_quants(self)

New fields (1)
  • inventory_datetime Datetime
    default=fields.Datetime.now help='Choose a date to get the inventory at that date' args: 'Inventory at Date'
Public methods (1)
  • open_at_date(self)

New fields (3)
  • move_ids Many2many → stock.move
    string='Stock Moves' args: 'stock.move', 'stock_reference_move_rel', 'reference_id', 'move_id'
  • name Char
    readonly=True required=True args: 'Reference'
  • picking_ids Many2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Transfers' args: 'stock.picking'
Public methods (0)

No public methods.

New fields (2)
  • allowed_route_ids Many2many → stock.route
    compute='_compute_allowed_route_ids' args: 'stock.route'
  • route_id Many2one → stock.route
    check_company=True help="Apply specific route for the replenishment instead of product's default routes." string='Preferred Route' args: 'stock.route'
Public methods (0)

No public methods.

New fields (12)
  • based_on Selection
    default='one_month' help='Estimate the sales volume for the period based on past period or order the forecasted quantity for that period.' required=True selection=[('one_week', 'Last 7 days'), ('one_month', 'Last 30 days'), ('three_months', 'Last 3 months'), ('one_year', 'Last 12 months'), ('last_year', 'Same month last year'), ('last_year_2', 'Next month last year'), ('last_year_3', 'After next month last year'), ('last_year_quarter', 'Last year quarter')] string='Based on'
  • json_lead_days Char
    compute='_compute_json_lead_days'
  • json_replenishment_graph Char
    compute='_compute_json_replenishment_graph'
  • orderpoint_id Many2one → stock.warehouse.orderpoint
    args: 'stock.warehouse.orderpoint'
  • percent_factor Integer
    default=100 required=True
  • product_id Many2one → product.product
    related='orderpoint_id.product_id' args: 'product.product'
  • product_max_qty Float
    readonly=False related='orderpoint_id.product_max_qty' related_sudo=False required=True args: 'Max'
  • product_min_qty Float
    readonly=False related='orderpoint_id.product_min_qty' related_sudo=False required=True args: 'Min'
  • product_uom_name Char
    related='orderpoint_id.product_uom_name'
  • qty_to_order Float
    related='orderpoint_id.qty_to_order'
  • warehouseinfo_ids One2many
    related='orderpoint_id.warehouse_id.resupply_route_ids'
  • wh_replenishment_option_ids One2many → stock.replenishment.option
    compute='_compute_wh_replenishment_options' args: 'stock.replenishment.option', 'replenishment_info_id'
Public methods (0)

No public methods.

New fields (10)
  • free_qty Float
    compute='_compute_free_qty'
  • lead_time Char
    compute='_compute_lead_time'
  • location_id Many2one → stock.location
    related='warehouse_id.lot_stock_id' args: 'stock.location'
  • product_id Many2one → product.product
    args: 'product.product'
  • qty_to_order Float
    related='replenishment_info_id.qty_to_order'
  • replenishment_info_id Many2one → stock.replenishment.info
    args: 'stock.replenishment.info'
  • route_id Many2one → stock.route
    args: 'stock.route'
  • uom Char
    related='product_id.uom_name'
  • warehouse_id Many2one → stock.warehouse
    related='route_id.supplier_wh_id' args: 'stock.warehouse'
  • warning_message Char
    compute='_compute_warning_message'
Public methods (3)
  • order_all(self)
  • order_avbl(self)
  • select_route(self)

New fields (4)
  • inventory_date Date
    default=fields.Datetime.now help='Choose a date to get the inventory at that date' required=True args: 'Scheduled at'
  • quant_ids Many2many → stock.quant
    args: 'stock.quant'
  • show_expected_quantity Boolean
    compute='_compute_show_expected_quantity' help='If the user can see the expected quantity or not' inverse='_set_show_expected_quantity'
  • user_id Many2one → res.users
    domain=<expr> string='Assign to' args: 'res.users'
Public methods (1)
  • action_request_count(self)

New fields (4)
  • company_id Many2one
    related='picking_id.company_id'
  • picking_id Many2one → stock.picking
    args: 'stock.picking'
  • picking_type_code Selection
    readonly=True related='picking_id.picking_type_code'
  • product_return_moves One2many → stock.return.picking.line
    compute='_compute_moves_locations' precompute=True readonly=False store=True args: 'stock.return.picking.line', 'wizard_id', 'Moves'
Public methods (4)
  • action_create_exchanges(self)
    Create a return for the active picking, then create a return of the return for the exchange picking and open it.
  • action_create_returns(self)
  • action_create_returns_all(self)
    Create a return matching the total delivered quantity and open it.
  • default_get(self, fields)
    @api.model

New fields (6)
  • move_id Many2one → stock.move
    args: 'stock.move', 'Move'
  • move_quantity Float
    related='move_id.quantity' string='Move Quantity'
  • product_id Many2one → product.product
    required=True string='Product' args: 'product.product'
  • quantity Float
    default=1 digits='Product Unit' required=True args: 'Quantity'
  • uom_id Many2one → uom.uom
    compute='_compute_uom_id' string='Unit' args: 'uom.uom'
  • wizard_id Many2one → stock.return.picking
    string='Wizard' args: 'stock.return.picking'
Public methods (0)

No public methods.

New fields (15)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the route without removing it.' args: 'Active'
  • categ_ids Many2many → product.category
    copy=False args: 'product.category', 'stock_route_categ', 'route_id', 'categ_id', 'Product Categories'
  • company_id Many2one → res.company
    default=<expr> help='Leave this field empty if this route is shared between all companies' index=True args: 'res.company', 'Company'
  • name Char
    required=True translate=True args: 'Route'
  • package_type_selectable Boolean
    help='When checked, the route will be selectable on package types' args: 'Applicable on Package Type'
  • product_categ_selectable Boolean
    help='When checked, the route will be selectable on the Product Category.' args: 'Applicable on Product Category'
  • product_ids Many2many → product.template
    check_company=True copy=False args: 'product.template', 'stock_route_product', 'route_id', 'product_id', 'Products'
  • product_selectable Boolean
    default=True help='When checked, the route will be selectable in the Inventory tab of the Product form.' args: 'Applicable on Product'
  • rule_ids One2many → stock.rule
    copy=True args: 'stock.rule', 'route_id', 'Rules'
  • sequence Integer
    default=0 args: 'Sequence'
  • supplied_wh_id Many2one → stock.warehouse
    index='btree_not_null' args: 'stock.warehouse', 'Supplied Warehouse'
  • supplier_wh_id Many2one → stock.warehouse
    args: 'stock.warehouse', 'Supplying Warehouse'
  • warehouse_domain_ids One2many → stock.warehouse
    compute='_compute_warehouses' args: 'stock.warehouse'
  • warehouse_ids Many2many → stock.warehouse
    copy=False domain="[('id', 'in', warehouse_domain_ids)]" args: 'stock.warehouse', 'stock_route_warehouse', 'route_id', 'warehouse_id', 'Warehouses'
  • warehouse_selectable Boolean
    help='When a warehouse is selected for this route, this route should be seen as the default route when products pass through this warehouse.' args: 'Applicable on Warehouse'
Public methods (2)
  • copy_data(self, default=None)
  • write(self, vals)

New fields (22)
  • action Selection
    default='pull' index=True required=True selection=[('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')] string='Action'
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the rule without removing it.' args: 'Active'
  • auto Selection
    default='manual' help="The 'Manual Operation' value will create a stock move after the current one. With 'Automatic No Step Added', the location is replaced in the original move." required=True string='Automatic Move' args: [('manual', 'Manual Operation'), ('transparent', 'Automatic No Step Added')]
  • company_id Many2one → res.company
    default=<expr> domain="[('id', '=?', route_company_id)]" index=True args: 'res.company', 'Company'
  • delay Integer
    default=0 help='The expected date of the created transfer will be computed based on this lead time.' args: 'Lead Time'
  • location_dest_from_rule Boolean
    default=False help='When set to True the destination location of the stock.move will be the rule.Otherwise, it takes it from the picking type.' args: 'Destination location origin from rule'
  • location_dest_id Many2one → stock.location
    check_company=True index=True required=True args: 'stock.location', 'Destination Location'
  • location_src_id Many2one → stock.location
    check_company=True index=True args: 'stock.location', 'Source Location'
  • name Char
    help='This field will fill the packing origin and the name of its moves' required=True translate=True args: 'Name'
  • partner_address_id Many2one → res.partner
    check_company=True help='Address where goods should be delivered. Optional.' args: 'res.partner', 'Partner Address'
  • picking_type_code_domain Json
    compute='_compute_picking_type_code_domain'
  • picking_type_id Many2one → stock.picking.type
    check_company=True domain="[('code', 'in', picking_type_code_domain)] if picking_type_code_domain else []" required=True args: 'stock.picking.type', 'Operation Type'
  • procure_method Selection
    default='make_to_stock' help='Take From Stock: the products will be taken from the available stock of the source location.\nTrigger Another Rule: the system will try to find a stock rule to bring the products in the source location. The available stock will be ignored.\nTake From Stock, if Unavailable, Trigger Another Rule: the products will be taken from the available stock of the source location.If there is no stock available, the system will try to find a rule to bring the products in the source location.' required=True string='Supply Method' args: [('make_to_stock', 'Take From Stock'), ('make_to_order', 'Trigger Another Rule'), ('mts_else_mto', 'Take From Stock, if unavailable, Trigger Another Rule')]
  • propagate_cancel Boolean
    default=False help='When ticked, if the move created by this rule is cancelled, the next move will be cancelled too.' args: 'Cancel Next Move'
  • propagate_carrier Boolean
    default=False help='When ticked, carrier of shipment will be propagated.' args: 'Propagation of carrier'
  • push_domain Char
    args: 'Push Applicability'
  • route_company_id Many2one
    related='route_id.company_id' string='Route Company'
  • route_id Many2one → stock.route
    index=True ondelete='cascade' required=True args: 'stock.route', 'Route'
  • route_sequence Integer
    compute_sudo=True related='route_id.sequence' store=True args: 'Route Sequence'
  • rule_message Html
    compute='_compute_action_message'
  • sequence Integer
    default=20 args: 'Sequence'
  • warehouse_id Many2one → stock.warehouse
    check_company=True index=True args: 'stock.warehouse', 'Warehouse'
Public methods (4)
  • copy_data(self, default=None)
  • default_get(self, fields)
    @api.model
  • run(self, procurements, raise_user_error=True)
    @api.model
    Fulfil `procurements` with the help of stock rules. Procurements are needs of products at a certain location. To fulfil these needs, we need to create some sort of documents (`stock.move` by default, but extensions of `_run_` methods allow to create every type of documents). :param procurements: the description of the procurement :type procurements: list of `~odoo.addons.stock.models.stock_rule.ProcurementGroup.Procurement` :param raise_user_error: will raise either an UserError or a ProcurementException :type raise_user_error: boolan, optional :raises UserError: if `raise_user_error` is True and a procurement isn't fulfillable :raises ProcurementException: if `raise_user_error` is False and a procurement isn't fulfillable
  • run_scheduler(self, use_new_cursor=False, company_id=False)
    @api.model
    Call the scheduler in order to check the running procurements (super method), to check the minimum stock rules and the availability of moves. This function is intended to be run for all the companies at the same time, so we run functions as SUPERUSER to avoid intercompanies and access rights issues.

New fields (4)
  • product_has_variants Boolean
    default=False required=True args: 'Has variants'
  • product_id Many2one → product.product
    required=True string='Product' args: 'product.product'
  • product_tmpl_id Many2one → product.template
    required=True string='Product Template' args: 'product.template'
  • warehouse_ids Many2many → stock.warehouse
    help='Show the routes that apply on selected warehouses.' required=True string='Warehouses' args: 'stock.warehouse'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • print_report(self)

New fields (19)
  • allowed_uom_ids Many2many → uom.uom
    compute='_compute_allowed_uom_ids' args: 'uom.uom'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date_done Datetime
    readonly=True args: 'Date'
  • location_id Many2one → stock.location
    check_company=True compute='_compute_location_id' domain="[('usage', '=', 'internal')]" 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)]" args: 'stock.lot', 'Lot/Serial'
  • move_ids One2many → stock.move
    args: 'stock.move', 'scrap_id'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Reference'
  • origin Char
    string='Source Document'
  • owner_id Many2one → res.partner
    check_company=True args: 'res.partner', 'Owner'
  • package_id Many2one → stock.package
    check_company=True args: 'stock.package', 'Package'
  • picking_id Many2one → stock.picking
    check_company=True args: 'stock.picking', 'Picking'
  • product_id Many2one → product.product
    check_company=True domain="[('type', '=', 'consu')]" required=True args: 'product.product', 'Product'
  • product_uom_id Many2one → uom.uom
    compute='_compute_product_uom_id' domain="[('id', 'in', allowed_uom_ids)]" precompute=True readonly=False required=True store=True args: 'uom.uom', 'Unit'
  • scrap_location_id Many2one → stock.location
    check_company=True compute='_compute_scrap_location_id' domain="[('usage', '=', 'inventory')]" precompute=True readonly=False required=True store=True args: 'stock.location', 'Scrap Location'
  • scrap_qty Float
    compute='_compute_scrap_qty' default=1.0 digits='Product Unit' readonly=False required=True store=True args: 'Quantity'
  • scrap_reason_tag_ids Many2many → stock.scrap.reason.tag
    comodel_name='stock.scrap.reason.tag' string='Scrap Reason'
  • should_replenish Boolean
    help='Trigger replenishment for scrapped products' string='Replenish Quantities'
  • state Selection
    default='draft' readonly=True string='Status' tracking=True args: [('draft', 'Draft'), ('done', 'Done')]
  • tracking Selection
    readonly=True related='product_id.tracking' string='Product Tracking'
Public methods (6)
  • action_get_stock_move_lines(self)
  • action_get_stock_picking(self)
  • action_validate(self)
  • check_available_qty(self)
  • do_replenish(self, values=False)
  • do_scrap(self)

New fields (3)
  • color Char
    default='#3C3C3C' string='Color'
  • name Char
    required=True string='Name' translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (9)
  • allow_new_product Selection
    default='mixed' required=True args: [('empty', 'If the location is empty'), ('same', 'If all products are same'), ('mixed', 'Allow mixed products')]
  • capacity_ids One2many → stock.storage.category.capacity
    copy=True args: 'stock.storage.category.capacity', 'storage_category_id'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • location_ids One2many → stock.location
    args: 'stock.location', 'storage_category_id'
  • max_weight Float
    digits='Stock Weight' args: 'Max Weight'
  • name Char
    required=True args: 'Storage Category'
  • package_capacity_ids One2many → stock.storage.category.capacity
    compute='_compute_storage_capacity_ids' inverse='_set_storage_capacity_ids' args: 'stock.storage.category.capacity'
  • product_capacity_ids One2many → stock.storage.category.capacity
    compute='_compute_storage_capacity_ids' inverse='_set_storage_capacity_ids' args: 'stock.storage.category.capacity'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit'
Public methods (1)
  • copy_data(self, default=None)

New fields (6)
  • company_id Many2one → res.company
    related='storage_category_id.company_id' args: 'res.company', 'Company'
  • package_type_id Many2one → stock.package.type
    check_company=True index='btree_not_null' ondelete='cascade' args: 'stock.package.type', 'Package Type'
  • product_id Many2one → product.product
    check_company=True domain="[('product_tmpl_id', '=', context.get('active_id', False))] if context.get('active_model') == 'product.template' else [('id', '=', context.get('default_product_id', False))] if context.get('default_product_id') else [('is_storable', '=', True)]" index='btree_not_null' ondelete='cascade' args: 'product.product', 'Product'
  • product_uom_id Many2one
    related='product_id.uom_id'
  • quantity Float
    required=True args: 'Quantity'
  • storage_category_id Many2one → stock.storage.category
    index=True ondelete='cascade' required=True args: 'stock.storage.category'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • get_lines(self, line_id=False, **kw)
    @api.model
  • get_main_lines(self, given_context=None)
    @api.model
  • get_pdf(self, line_data=None)
  • get_pdf_lines(self, line_data=[])

New fields (28)
  • active Boolean
    default=True args: 'Active'
  • code Char
    help='Short name used to identify your warehouse' required=True size=5 args: 'Short Name'
  • company_id Many2one → res.company
    default=<expr> help='The company is automatically set from your user preferences.' readonly=True required=True args: 'res.company', 'Company'
  • delivery_route_id Many2one → stock.route
    copy=False ondelete='restrict' args: 'stock.route', 'Delivery Route'
  • delivery_steps Selection
    default='ship_only' help='Default outgoing route to follow' required=True args: [('ship_only', 'Deliver (1 step)'), ('pick_ship', 'Pick then Deliver (2 steps)'), ('pick_pack_ship', 'Pick, Pack, then Deliver (3 steps)')], 'Outgoing Shipments'
  • in_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'In Type'
  • int_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Internal Type'
  • lot_stock_id Many2one → stock.location
    check_company=True domain="[('usage', '=', 'internal'), ('company_id', '=', company_id)]" required=True args: 'stock.location', 'Location Stock'
  • mto_pull_id Many2one → stock.rule
    copy=False args: 'stock.rule', 'MTO rule'
  • name Char
    default=_default_name required=True args: 'Warehouse'
  • out_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Out Type'
  • pack_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Pack Type'
  • partner_id Many2one → res.partner
    check_company=True default=<expr> args: 'res.partner', 'Address'
  • pick_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Pick Type'
  • qc_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Quality Control Type'
  • reception_route_id Many2one → stock.route
    copy=False ondelete='restrict' args: 'stock.route', 'Receipt Route'
  • reception_steps Selection
    default='one_step' help='Default incoming route to follow' required=True args: [('one_step', 'Receive and Store (1 step)'), ('two_steps', 'Receive then Store (2 steps)'), ('three_steps', 'Receive, Quality Control, then Store (3 steps)')], 'Incoming Shipments'
  • resupply_route_ids One2many → stock.route
    copy=False help='Routes will be created for these resupply warehouses and you can select them on products and product categories' args: 'stock.route', 'supplied_wh_id', 'Resupply Routes'
  • resupply_wh_ids Many2many → stock.warehouse
    help='Routes will be created automatically to resupply this warehouse from the warehouses ticked' args: 'stock.warehouse', 'stock_wh_resupply_table', 'supplied_wh_id', 'supplier_wh_id', 'Resupply From'
  • route_ids Many2many → stock.route
    check_company=True copy=False domain="[('warehouse_selectable', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Defaults routes through the warehouse' args: 'stock.route', 'stock_route_warehouse', 'warehouse_id', 'route_id', 'Routes'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the warehouses.'
  • store_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Storage Type'
  • view_location_id Many2one → stock.location
    check_company=True domain="[('usage', '=', 'view'), ('company_id', '=', company_id)]" index=True required=True args: 'stock.location', 'View Location'
  • wh_input_stock_loc_id Many2one → stock.location
    check_company=True args: 'stock.location', 'Input Location'
  • wh_output_stock_loc_id Many2one → stock.location
    check_company=True args: 'stock.location', 'Output Location'
  • wh_pack_stock_loc_id Many2one → stock.location
    check_company=True args: 'stock.location', 'Packing Location'
  • wh_qc_stock_loc_id Many2one → stock.location
    check_company=True args: 'stock.location', 'Quality Control Location'
  • xdock_type_id Many2one → stock.picking.type
    check_company=True copy=False args: 'stock.picking.type', 'Cross Dock Type'
Public methods (8)
  • action_view_all_routes(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_resupply_routes(self, supplier_warehouses)
  • get_current_warehouses(self)
  • get_rules_dict(self)
    Define the rules source/destination locations, picking_type and action needed for each warehouse route configuration.
  • unlink(self)
  • write(self, vals)

New fields (33)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the orderpoint without removing it.' args: 'Active'
  • allowed_location_ids One2many → stock.location
    comodel_name='stock.location' compute='_compute_allowed_location_ids'
  • allowed_replenishment_uom_ids Many2many → uom.uom
    compute='_compute_allowed_replenishment_uom_ids' args: 'uom.uom'
  • company_id Many2one → res.company
    default=<expr> index=True required=True args: 'res.company', 'Company'
  • days_to_order Float
    compute='_compute_days_to_order' help='Numbers of days in advance that replenishments demands are created.'
  • deadline_date Date
    compute='_compute_deadline_date' help='Date before which you should order to avoid falling below the minimum. If you have nothing to order while a deadline is found, it may be because a future arrival is expected after the minimum quantity is reached (potential stockout). Check the Forecast Report.' readonly=True store=True args: 'Deadline'
  • effective_route_id Many2one → stock.route
    compute='_compute_effective_route_id' help='Either the route set directly or the one computed to be used by this replenishment' search='_search_effective_route_id' store=False args: 'stock.route'
  • lead_days Float
    compute='_compute_lead_days'
  • lead_horizon_date Date
    compute='_compute_lead_days'
  • location_id Many2one → stock.location
    check_company=True compute='_compute_location_id' index=True ondelete='cascade' precompute=True readonly=False required=True store=True args: 'stock.location', 'Location'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Name'
  • product_category_id Many2one → product.category
    name='Product Category' related='product_id.categ_id' args: 'product.category'
  • product_id Many2one → product.product
    check_company=True domain="[('product_tmpl_id', '=', context.get('active_id', False))] if context.get('active_model') == 'product.template' else [('id', '=', context.get('default_product_id', False))] if context.get('default_product_id') else [('is_storable', '=', True)]" index=True ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_max_qty Float
    compute='_compute_product_max_qty' default=0.0 digits='Product Unit' help='Stock level to reach when replenishing.' readonly=False required=True store=True args: 'Max Quantity'
  • product_min_qty Float
    default=0.0 digits='Product Unit' help='The minimum Stock level that will trigger a replenishment.' required=True args: 'Min Quantity'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template'
  • product_uom Many2one → uom.uom
    related='product_id.uom_id' args: 'uom.uom', 'Unit'
  • product_uom_name Char
    readonly=True related='product_uom.display_name' string='Product unit of measure label'
  • qty_forecast Float
    compute='_compute_qty' digits='Product Unit' readonly=True args: 'Forecast'
  • qty_on_hand Float
    compute='_compute_qty' digits='Product Unit' readonly=True args: 'On Hand'
  • qty_to_order Float
    compute='_compute_qty_to_order' digits='Product Unit' inverse='_inverse_qty_to_order' search='_search_qty_to_order' args: 'To Order'
  • qty_to_order_computed Float
    compute='_compute_qty_to_order_computed' digits='Product Unit' store=True args: 'To Order Computed'
  • qty_to_order_manual Float
    digits='Product Unit' args: 'To Order Manual'
  • replenishment_uom_id Many2one → uom.uom
    domain="[('id', 'in', allowed_replenishment_uom_ids)]" help='The procurement quantity will be rounded up to a multiple of this unit/packaging. If it is not set, it is not rounded.' args: 'uom.uom', 'Multiple'
  • replenishment_uom_id_placeholder Char
    compute='_compute_replenishment_uom_id_placeholder'
  • route_id Many2one → stock.route
    domain="['|', ('product_selectable', '=', True), ('rule_ids.action', 'in', ['buy', 'manufacture'])]" inverse='_inverse_route_id' string='Route' args: 'stock.route'
  • route_id_placeholder Char
    compute='_compute_route_id_placeholder'
  • rule_ids Many2many → stock.rule
    compute='_compute_rules' string='Rules used' args: 'stock.rule'
  • show_supply_warning Boolean
    compute='_compute_show_supply_warning'
  • snoozed_until Date
    help='Hidden until next scheduler.' args: 'Snoozed'
  • trigger Selection
    default='auto' required=True string='Trigger' args: [('auto', 'Auto'), ('manual', 'Manual')]
  • unwanted_replenish Boolean
    compute='_compute_unwanted_replenish' args: 'Unwanted Replenish'
  • warehouse_id Many2one → stock.warehouse
    check_company=True compute='_compute_warehouse_id' index=True ondelete='cascade' precompute=True readonly=False required=True store=True args: 'stock.warehouse', 'Warehouse'
Public methods (9)
  • action_open_orderpoints(self)
    @api.model
  • action_product_forecast_report(self)
  • action_remove_manual_qty_to_order(self)
  • action_replenish(self, force_to_max=False)
  • action_replenish_auto(self)
  • action_stock_replenishment_info(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_horizon_days(self)
    Return the value for Horizon. This can be (in order of priority): - the value set in context in the replenishment view - the value set on the company of the all the records in self. There should be at most 1 company_id on self. - the value set on the company of the user if all else fail.
  • write(self, vals)

New fields (5)
  • location_id Many2one → stock.location
    domain="[('usage', '=', 'internal')]" required=True args: 'stock.location', 'Location'
  • product_id Many2one → product.product
    required=True args: 'product.product', 'Product'
  • product_uom_name Char
    required=True args: 'Unit'
  • quant_ids Many2many → stock.quant
    compute='_compute_quant_ids' args: 'stock.quant'
  • quantity Float
    required=True string='Quantity'
Public methods (1)
  • action_done(self)

New fields (1)
  • scrap_id Many2one → stock.scrap
    args: 'stock.scrap', 'Scrap'
Public methods (2)
  • action_cancel(self)
  • action_done(self)

New fields (2)
  • package_type_id Many2one → stock.package.type
    string='Package Type' args: 'stock.package.type'
  • route_ids Many2many
    help='Routes propagated from the package type' related='package_type_id.route_ids' string='Routes'
Public methods (1)
  • write(self, vals)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…