TIP: You can type at any time to perform a new search.
Inventory
stock · odoo/odoo
Security findings
- Repository
- odoo/odoo · module folder
- Module version
- 1.1
- Category
- Supply Chain/Inventory
- Folder size
- 28.79 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://www.odoo.com/app/inventory
- Last tracking update
- 2026-10-05 00:19:43
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Christophe Matthieu, Aaron Bohy, Géry Debongnie, Lucas Perais (lpe), Jorge Pinna Puissant, Arnold Moyaux, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, William Henrotin, Sébastien Theys, Julien Mougenot, svs-odoo, Alvaro Fuentes, Achraf (abz), David Beguin, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, Romain Estievenart, Miquel Raïch, william-andre, JF Aubert, David (dafr), luvi, Hubert Van De Walle, Renaud Thiry, Adrien Widart (awt), Victor Piryns (pivi), amdi-odoo, Pierre-Yves Dufays, Levi Siuzdak (sile), Dylan Kiss (dyki), ノウラ, Chong Wang (cwg), Xavier Bol (xbo), Paweł Fertyk, Louis Travaux, omra-odoo, Andrzej(pian), lase@odoo.com, Quentin Wolfs, Aurelien MARIE (auma), reka-odoo, yosa-odoo, vava-odoo, kcv-odoo, Louis Gobert, mano-odoo, Harsh Shah, Stéphane Diez, kawkb, dhha-odoo, Claire (clbr), Hammad Arif, Victor Miguel Armenta Carrillo, David Van Droogenbroeck (DROD), pkgu-odoo, Mohammad Abdulmoneim (abdu), djameltouati, Pierre Pulinckx, wt, Bastien PIERRE, Michaël Mattiello, Lakhichand Borse, Mahdi Alijani (malj), MaximeNoirhomme, chha-odoo, plha-odoo, Krzysztof Magusiak (krma), Ajit Singh, krip-odoo, joseph, Robin Engels (roen), sagu-odoo, utma-odoo, Ester Andreetto, nsirjacobs, bhna-odoo, Dirk Douglas, MAGREMENT, romc-odoo, Ze Chen (zeche), mohannedah, Junqi, kinhosz, agbr-odoo, depr-odoo, Lulu Grimalkin (lugr), felin-odoo, sawer, Lancelot Semal, Julien Launois (jula), Laetitia (ldau), adip-odoo, Quentin Colla (qucol), path-odoo, Saurabh, Amr Elkhatieb, Yash Tiwari (Yatiw), Nisarg (nipl), assh-odoo, Robert Smith (rosm), Leila Kerroum Balaguer, hossamelgendy1, YoussefM890, Ravij Parikh, Joe Wesnofske, Mazen, =, srap-odoo, Leonardo Medina, Nguyen Nguyen (ngtpn), jodh-odoo, Eve Lin (evlin), Zachary (zavan), sako-odoo, tpma-odoo, Jonathan Swales, Youssef (abyo), Kadam Darji, Julien Carion, ELCO, lase, Atri Patel(atpa), Moamen(msho), Khaj-odoo, chpa-odoo, Oussema Heni, hapt-odoo, Nuno, Joseph Nechleba (jonec), Sanket Tank(stan), qucol-odoo, kush-odoo, Antonio Pimentel, Mathias Mathy, ddba-odoo, Brian Nguyen, Karim Gamaleldin, jeanschoenlaub, Julien Coppin (jucop), Stef Ossé, alwhi-odoo, Kevin, Lucas Gvasalia, Jean Schoenlaub, pusu-odoo, Elisabeth Dickinson (edi), Lou !, Mahiv Ram, mamg-odoo, japat-odoo, Roman Hardy (rohar), pkhu-odoo, victor Badin (vibad)
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- l10n_din5008_stock, l10n_gr_edi_delivery_note, l10n_in_stock, l10n_vn_edi_viettel_stock, mrp, product_expiry, project_stock, stock_account, stock_fleet, stock_maintenance, stock_sms
- Description
Code Analysis
Views touched (182)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
digest_digest_view_form |
digest.digest.view.form.inherit.stock | digest.digest | form | Inherits digest.digest_digest_view_form |
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 |
location_barcode_4x7_label |
location_barcode_4x7_label | ir.ui.view | qweb | New |
location_barcode_zpl_label |
location_barcode_zpl_label | ir.ui.view | qweb | New |
lot_barcode_4x12_label |
lot_barcode_4x12_label | ir.ui.view | qweb | New |
lot_barcode_alternative_label |
lot_barcode_alternative_label | ir.ui.view | qweb | New |
lot_label_layout_form_picking |
lot.label.layout.form | lot.label.layout | form | New |
lot_qr_4x12_label |
lot_qr_4x12_label | ir.ui.view | qweb | New |
lot_qr_alternative_label |
lot_qr_alternative_label | ir.ui.view | qweb | New |
message_body |
message_body | ir.ui.view | qweb | New |
message_head |
message_head | ir.ui.view | qweb | New |
package_history_search_view |
stock.package.history.search | stock.package.history | search | New |
package_pdf_label |
package_pdf_label | ir.ui.view | qweb | New |
package_zpl_label |
package_zpl_label | ir.ui.view | qweb | New |
picking_label_type_form |
picking.label.type.form | picking.label.type | form | New |
picking_type_barcode_4x7_label |
picking_type_barcode_4x7_label | ir.ui.view | qweb | New |
picking_type_barcode_zpl_label |
picking_type_barcode_zpl_label | ir.ui.view | qweb | New |
product.product_view_list_qty |
list | 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_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_form_view_stock |
product.template.stock.property.form.inherit | product.template | form | Inherits product.product_template_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_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_inventory |
report_inventory | 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_history_barcode |
report_package_history_barcode | ir.ui.view | qweb | New |
report_picking |
report_picking | ir.ui.view | qweb | New |
report_picking_batch |
report_picking_batch | ir.ui.view | qweb | New |
report_picking_packages |
report_picking_packages | 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 |
return_label_header |
return_label_header | ir.ui.view | qweb | New |
search_product_lot_filter |
Production Lots Filter | stock.lot | search | New |
stock.report_return_slip |
stock.report_return_slip | ir.ui.view | qweb | New |
stock_add_to_wave_form |
stock.add.to.wave.form | stock.add.to.wave | form | 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_list |
stock.move.line.view.list | stock.move.line | list | Inherits stock.view_move_line_tree |
stock_move_line_view_list_from_batch |
stock.move.line.view.list.batch | stock.move.line | list | New |
stock_move_line_view_search |
stock.move.line.search | stock.move.line | search | New |
stock_move_view_list_from_batch |
stock.move.view.list.from.batch | stock.move | list | Inherits stock.view_picking_move_tree |
stock_orderpoint_suggest_form |
Suggest Min-Max | stock.orderpoint.suggest | form | 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_batch_calendar |
stock.picking.batch.calendar | stock.picking.batch | calendar | New |
stock_picking_batch_card |
stock.picking.batch.card | stock.picking.batch | New | |
stock_picking_batch_filter |
stock.picking.batch.filter | stock.picking.batch | search | New |
stock_picking_batch_form |
stock.picking.batch.form | stock.picking.batch | form | New |
stock_picking_batch_kanban |
stock.picking.batch.kanban | stock.picking.batch | kanban | New |
stock_picking_batch_tree |
stock.picking.batch.list | stock.picking.batch | list | New |
stock_picking_calendar |
stock.picking.calendar | stock.picking | calendar | New |
stock_picking_kanban |
stock.picking.kanban | stock.picking | kanban | New |
stock_picking_to_batch_form |
stock.picking.to.batch.form | stock.picking.to.batch | form | 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_picking_view_batch_tree_ref |
stock.picking.list.inherit.stock.picking.batch | stock.picking | list | Inherits stock.vpicktree |
stock_picking_view_form_from_batch |
stock.picking.view.form.from.batch | stock.picking | form | Inherits stock.view_picking_form |
stock_picking_view_list_create_from_batch |
stock.picking.view.list.create.from.batch | stock.picking | list | Inherits stock.stock_picking_view_batch_tree_ref |
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_reason_tag_view_form |
stock.scrap.reason.tag.form | stock.scrap.reason.tag | form | 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 |
uom_uom_view_form |
uom.uom.view.form.inherit.stock | uom.uom | form | Inherits uom.uom_uom_view_form |
uom_uom_view_list |
uom.uom.view.list.inherit.stock | uom.uom | list | Inherits uom.uom_uom_view_list |
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_scrap_move_form |
stock.scrap.move.form | stock.move | form | New |
view_scrap_move_list |
stock.scrap.move.list | stock.move | list | New |
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_replenishment_info |
Stock Replenishment Information | stock.replenishment.info | 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_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 |
view_zero_demand_confirmation |
stock.zero.demand.confirmation | stock.zero.demand.confirmation | form | 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) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/stock/<string:output_format>/<string:report_name> |
StockReportController.report |
user | http | ALL |
Models touched (66)
New fields (1)
-
typeSelectionondelete={'weight': 'set default', 'location': 'set default', 'lot': 'set default', 'package': 'set default'}selection_add=[('weight', 'Weighted Product'), ('location', 'Location'), ('lot', 'Lot'), ('package', 'Package')]
No public methods.
New fields (4)
-
kpi_stock_delivery_countBooleanargs: 'Deliveries' -
kpi_stock_delivery_count_valueIntegercompute='_compute_kpi_stock_delivery_count_value' -
kpi_stock_receipt_countBooleanargs: 'Receipts' -
kpi_stock_receipt_count_valueIntegercompute='_compute_kpi_stock_receipt_count_value'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (5)
-
custom_quantityIntegerdefault=1 -
label_quantitySelectiondefault='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=Truestring='Quantity to print' args: [('lots', 'One per lot/SN'), ('units', 'One per unit')] -
lot_idsMany2many → stock.lotargs: 'stock.lot' -
move_line_idsMany2many → stock.move.lineargs: 'stock.move.line' -
print_formatSelectiondefault='4x12'required=Truestring='Format' args: [('4x12', '4 x 12'), ('zpl', 'ZPL Labels')]
-
process(self)
New fields (2)
-
label_typeSelectiondefault='products'required=Truestring='Labels to print' args: [('products', 'Product Labels'), ('lots', 'Lot/SN Labels')] -
picking_idsMany2many → stock.pickingargs: 'stock.picking'
-
process(self)
New fields (7)
-
filter_for_stock_putaway_ruleBooleansearch='_search_filter_for_stock_putaway_rule'store=False args: 'stock.putaway.rule' -
packaging_reserve_methodSelectiondefault='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_idsMany2many → stock.routecompute='_compute_parent_route_ids'string='Parent Routes' args: 'stock.route' -
putaway_rule_idsOne2many → stock.putaway.ruleargs: 'stock.putaway.rule', 'category_id', 'Putaway Rules' -
removal_strategy_idMany2one → product.removalhelp='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_idsMany2many → stock.routedomain=[('product_categ_selectable', '=', True)] args: 'stock.route', 'stock_route_categ', 'categ_id', 'route_id', 'Routes' -
total_route_idsMany2many → stock.routecompute='_compute_total_route_ids'readonly=Truesearch='_search_total_route_ids'string='Total routes' args: 'stock.route'
No public methods.
New fields (3)
-
move_idsMany2many → stock.moveargs: 'stock.move' -
move_quantitySelectiondefault='custom'required=Truestring='Quantity to print' args: [('move', 'Operation Quantities'), ('custom', 'Custom')] -
print_packagingBooleanhelp="Print labels with each delivery order line's packaging." args: 'Print Packaging'
No public methods.
New fields (20)
-
free_qtyFloatcompute='_compute_quantities'compute_sudo=Falsedigits='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_qtyFloathelp="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." -
lot_properties_definitionPropertiesDefinitionargs: 'Lot Properties' -
nbr_moves_inIntegercompute='_compute_nbr_moves'compute_sudo=Falsehelp='Number of incoming stock moves in the past 12 months' -
nbr_moves_outIntegercompute='_compute_nbr_moves'compute_sudo=Falsehelp='Number of outgoing stock moves in the past 12 months' -
nbr_reordering_rulesIntegercompute='_compute_nbr_reordering_rules'compute_sudo=False args: 'Reordering Rules' -
orderpoint_idsOne2many → stock.warehouse.orderpointargs: 'stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rules' -
outgoing_qtyFloathelp="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." -
putaway_rule_idsOne2many → stock.putaway.ruleargs: 'stock.putaway.rule', 'product_id', 'Putaway Rules' -
qty_availableFloatcompute='_compute_quantities'compute_sudo=Falsedigits='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'store=False args: 'Quantity On Hand' -
reordering_max_qtyFloatcompute='_compute_nbr_reordering_rules'compute_sudo=False -
reordering_min_qtyFloatcompute='_compute_nbr_reordering_rules'compute_sudo=False -
show_forecasted_qty_status_buttonBooleancompute='_compute_show_qty_status_button' -
show_on_hand_qty_status_buttonBooleancompute='_compute_show_qty_status_button' -
show_qty_update_buttonBooleancompute='_compute_show_qty_update_button' -
stock_move_idsOne2many → stock.moveargs: 'stock.move', 'product_id' -
stock_quant_idsOne2many → stock.quantargs: 'stock.quant', 'product_id' -
storage_category_capacity_idsOne2many → stock.storage.category.capacityargs: 'stock.storage.category.capacity', 'product_id', 'Storage Category Capacity' -
valid_eanBooleancompute='_compute_valid_ean' args: 'Barcode is valid EAN' -
virtual_availableFloathelp="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."
-
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_routes_actions(self)Return the route action types expected for this product. Installed modules can extend this list based on the product's relevant field values, such as vendors or bills of materials. -
view_header_get(self, view_id, view_type)@api.model -
write(self, vals)
New fields (2)
-
methodCharhelp='FIFO, LIFO...'required=Truetranslate=True args: 'Method' -
nameCharrequired=Truetranslate=True args: 'Name'
No public methods.
New fields (11)
-
allowed_uom_idsMany2many → uom.uomcompute='_compute_allowed_uom_ids' args: 'uom.uom' -
company_idMany2one → res.companyargs: 'res.company' -
date_plannedDatetimecompute='_compute_date_planned'help='Date at which the replenishment should take place.'precompute=Truereadonly=Falserequired=Truestore=True args: 'Scheduled Date' -
forecast_uom_idMany2onerelated='product_id.uom_id' -
forecasted_quantityFloatcompute='_compute_forecasted_quantity'string='Forecasted Quantity' -
product_has_variantsBooleandefault=Falserequired=True args: 'Has variants' -
product_idMany2one → product.productrequired=Truestring='Product' args: 'product.product' -
product_tmpl_idMany2one → product.templaterequired=Truestring='Product Template' args: 'product.template' -
quantityFloatdefault=1required=True args: 'Quantity' -
uom_idMany2one → uom.uomdomain="[('id', 'in', allowed_uom_ids)]"required=Truestring='Unity of measure' args: 'uom.uom' -
warehouse_idMany2one → stock.warehousecheck_company=Truerequired=Truestring='Warehouse' args: 'stock.warehouse'
-
default_get(self, fields)@api.model -
launch_replenishment(self)
New fields (24)
-
description_pickingTexttranslate=True args: 'Description on Picking' -
description_pickinginTexttranslate=True args: 'Description on Receptions' -
description_pickingoutTexttranslate=True args: 'Description on Delivery Orders' -
has_available_route_idsBooleancompute='_compute_has_available_route_ids'default=<expr> args: 'Routes can be selected on this product' -
location_idMany2one → stock.locationstore=False args: 'stock.location', 'Location' -
lot_sequence_idMany2one → ir.sequencedefault=<expr>help='Technical Field: The Ir.Sequence record that is used to generate serial/lot numbers for this product'index='btree_not_null' args: 'ir.sequence', 'Serial/Lot Numbers Sequence' -
nbr_moves_inIntegercompute='_compute_nbr_moves'compute_sudo=Falsehelp='Number of incoming stock moves in the past 12 months' -
nbr_moves_outIntegercompute='_compute_nbr_moves'compute_sudo=Falsehelp='Number of outgoing stock moves in the past 12 months' -
nbr_reordering_rulesIntegercompute='_compute_nbr_reordering_rules'compute_sudo=False args: 'Reordering Rules' -
next_serialCharcompute='_compute_next_serial' -
property_stock_inventoryMany2one → stock.locationcheck_company=Truecompany_dependent=Truedomain="[('usage', '=', 'inventory'), '|', ('company_id', '=', False), ('company_id', '=', allowed_company_ids[0])]"help='This location will be used as the source location for stock moves generated by an inventory adjustment.' args: 'stock.location', 'Inventory Adjustment' -
property_stock_productionMany2one → stock.locationcheck_company=Truecompany_dependent=Truedomain="[('usage', '=', 'production'), '|', ('company_id', '=', False), ('company_id', '=', allowed_company_ids[0])]"help='This location will be used\xa0as the source location for stock moves generated by a manufacturing order.' args: 'stock.location', 'Production' -
qty_availableFloatcompute='_compute_quantities'compute_sudo=Falsedigits='Product Unit'inverse='_inverse_qty_available'search='_search_qty_available' args: 'Quantity On Hand' -
reordering_max_qtyFloatcompute='_compute_nbr_reordering_rules'compute_sudo=False -
reordering_min_qtyFloatcompute='_compute_nbr_reordering_rules'compute_sudo=False -
responsible_idMany2one → res.userscheck_company=Truecompany_dependent=Truedefault=<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_idsMany2manyrelated='categ_id.total_route_ids'related_sudo=Falsestring='Category Routes' -
route_idsMany2many → stock.routedomain=[('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' -
serial_prefix_formatCharcompute='_compute_serial_prefix_format'help=SERIAL_PREFIX_FORMAT_HELP_TEXTinverse='_inverse_serial_prefix_format' args: 'Custom Lot/Serial' -
show_forecasted_qty_status_buttonBooleancompute='_compute_show_qty_status_button' -
show_on_hand_qty_status_buttonBooleancompute='_compute_show_qty_status_button' -
store_bySelectioncompute='_compute_store_by'help='Ensure the traceability of a storable product in your warehouse.'inverse='_set_store_by'required=Truesearch='_search_store_by'string='Tracking' args: [('untracked', 'None'), ('quantity', 'By Quantity'), ('lot', 'By Lots'), ('serial', 'By Unique Serial Number')] -
trackingSelectioncompute='_compute_tracking'help="Technical field holding the tracking method. False on a storable product means it's tracked by quantity only."inverse='_set_tracking'precompute=Truereadonly=Falsestore=Truestring='Tracking Method' args: [('lot', 'By Lots'), ('serial', 'By Unique Serial Number')] -
warehouse_idMany2one → stock.warehousestore=False args: 'stock.warehouse', 'Warehouse'
-
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) -
copy(self, default=None) -
create(self, vals_list)@api.model_create_multi -
write(self, vals)
New fields (7)
-
company_idMany2one → res.companyreadonly=True args: 'res.company' -
dateDatereadonly=Truestring='Date' -
product_idMany2one → product.productreadonly=Truestring='Product' args: 'product.product' -
product_qtyFloatreadonly=Truestring='Quantity' -
product_tmpl_idMany2one → product.templatereadonly=True args: 'product.template' -
stateSelectionreadonly=Truestring='State' args: [('forecast', 'Forecasted Stock'), ('in', 'Forecasted Receipts'), ('out', 'Forecasted Deliveries')] -
warehouse_idMany2one → stock.warehousereadonly=True args: 'stock.warehouse'
-
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 (0)No public methods.
New fields (11)
-
annual_inventory_dayIntegerdefault=31help='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_monthSelectiondefault='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')] -
default_stock_location_idMany2one → stock.locationcheck_company=Truecompute='_compute_default_stock_location_id' args: 'stock.location', 'Default Stock Location' -
horizon_daysIntegerdefault=365help="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=Truestring='Replenishment Horizon' -
internal_transit_location_idMany2one → stock.locationcheck_company=Trueondelete='restrict' args: 'stock.location', 'Internal Transit Location' -
picking_policySelectiondefault='direct'required=True args: [('direct', 'As soon as possible, with back orders'), ('one', 'When all products are ready')] -
scrap_location_idMany2one → stock.locationcheck_company=Truecompute='_compute_scrap_location_id' args: 'stock.location', 'Scrap Location' -
stock_confirmation_typeSelectiondefault='sms' args: [('sms', 'SMS')] -
stock_mail_confirmation_template_idMany2one → mail.templatedefault=_default_confirmation_mail_templatedomain="[('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_validationBooleandefault=False args: 'Email Confirmation picking' -
stock_text_confirmationBooleanargs: 'Stock Text Confirmation'
-
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.modelThis hook is used to add a warehouse on the first company of the database
New fields (28)
-
annual_inventory_dayIntegerreadonly=Falserelated='company_id.annual_inventory_day' -
annual_inventory_monthSelectionreadonly=Falserelated='company_id.annual_inventory_month' -
barcode_separatorCharconfig_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_slipBooleangroup='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_locationBooleanhelp='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_gs1Booleanimplied_group='stock.group_stock_lot_print_gs1' args: 'Print GS1 Barcodes for Lots & Serial Numbers' -
group_stock_multi_locationsBooleanhelp='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_picking_batchBooleanimplied_group='stock.group_stock_picking_batch' args: 'Batch, Wave & Cluster Transfers' -
group_stock_production_lotBooleangroup='base.group_user,base.group_portal'implied_group='stock.group_production_lot' args: 'Lots & Serial Numbers' -
group_stock_sign_deliveryBooleanimplied_group='stock.group_stock_sign_delivery' args: 'Signature' -
group_stock_tracking_lotBooleanimplied_group='stock.group_tracking_lot' args: 'Packages' -
group_stock_tracking_ownerBooleanimplied_group='stock.group_tracking_owner' args: 'Consignment' -
group_warning_stockBooleanimplied_group='stock.group_warning_stock' args: 'Warnings for Stock' -
horizon_daysIntegerreadonly=Falserelated='company_id.horizon_days' -
module_deliveryBooleanargs: 'Delivery Methods' -
module_product_expiryBooleanhelp='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_controlBooleanargs: 'Quality' -
module_quality_control_worksheetBooleanargs: 'Quality Worksheet' -
module_stock_barcodeBooleanargs: 'Barcode Scanner' -
module_stock_barcode_barcodelookupBooleanargs: 'Stock Barcode Database' -
module_stock_dropshippingBooleanargs: 'Dropshipping' -
module_stock_fleetBooleanargs: 'Transport Management' -
module_stock_smsBooleanargs: 'SMS Confirmation' -
picking_policySelectionreadonly=Falserelated='company_id.picking_policy'required=True -
replenish_on_orderBooleancompute='_compute_replenish_on_order'inverse='_inverse_replenish_on_order' args: 'Replenish on Order (MTO)' -
stock_confirmation_typeSelectionreadonly=Falserelated='company_id.stock_confirmation_type'string='Stock Text Validation type' -
stock_move_email_validationBooleanreadonly=Falserelated='company_id.stock_move_email_validation' -
stock_text_confirmationBooleanreadonly=Falserelated='company_id.stock_text_confirmation'string='Stock Text Validation with stock move'
-
action_view_delivery_methods(self) -
onchange_adv_location(self)@api.onchange('group_stock_adv_location') -
onchange_module_product_barcodelookup(self)@api.onchange('module_product_barcodelookup') -
onchange_module_stock_barcode_barcodelookup(self)@api.onchange('module_stock_barcode_barcodelookup') -
set_values(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (3)
-
picking_warn_msgTextargs: 'Message for Stock Picking' -
property_stock_customerMany2one → stock.locationcheck_company=Truecompany_dependent=Truedomain="['|', ('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_supplierMany2one → stock.locationcheck_company=Truecompany_dependent=Truedomain="['|', ('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'
-
action_view_stock_serial(self) -
write(self, vals)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (5)
-
line_idsMany2many → stock.move.lineargs: 'stock.move.line' -
modeSelectiondefault='existing' args: [('existing', 'an existing batch transfer'), ('new', 'a new batch transfer')] -
picking_idsMany2many → stock.pickingargs: 'stock.picking' -
user_idMany2one → res.usersstring='Responsible' args: 'res.users' -
wave_idMany2one → stock.picking.batchdomain="[('state', 'in', ('draft', 'in_progress'))]"string='Batch Transfer' args: 'stock.picking.batch'
-
attach_pickings(self) -
default_get(self, fields)@api.model
New fields (0)
No new fields.
Public methods (4)-
action_assign(self, src_move_ids, out_move_ids, quantity)@api.modelAssign the given quantity from source moves to out moves. Can split source moves if partially assigned, and can split out moves if partially reserved. :param list[int] src_move_ids: :param list[int] out_move_ids: :param int quantity: The quantity to assign (should match the source moves free quantity.) :return: A dictionary with two keys: `in_moves` (ids list) and `out_moves` (object list). :rtype: dict -
action_assign_all(self, allocation_list)@api.model -
action_unassign(self, src_move_ids, out_move_ids, quantity)@api.modelUnassign the given quantity from out moves and free the allocated quantity to source moves. Try to merge both source and out moves in case some of them were split during a previous allocation. :param list[int] src_move_ids: :param list[int] out_move_ids: :param int quantity: The quantity to free. :return: A dictionary with three keys: `freed_quantity`, `in_moves` (ids list) and `out_moves` (object list). :rtype: dict -
get_report_data(self, data)@api.model
New fields (3)
-
backorder_confirmation_line_idsOne2many → stock.backorder.confirmation.linestring='Backorder Confirmation Lines' args: 'stock.backorder.confirmation.line', 'backorder_confirmation_id' -
pick_idsMany2many → stock.pickingargs: 'stock.picking', 'stock_picking_backorder_rel' -
show_transfersBoolean
-
default_get(self, fields)@api.model -
process(self) -
process_cancel_backorder(self)
New fields (3)
-
backorder_confirmation_idMany2one → stock.backorder.confirmationargs: 'stock.backorder.confirmation', 'Immediate Transfer' -
picking_idMany2one → stock.pickingargs: 'stock.picking', 'Transfer' -
to_backorderBooleanargs: 'To Backorder'
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_dateDatetimedefault=fields.Datetime.nowhelp='Date at which the resulting moves will be dated.' -
inventory_adjustment_nameChardefault='Physical Inventory'string='Inventory Reason' -
quant_idsMany2many → stock.quantargs: 'stock.quant'
-
action_apply(self)
New fields (2)
-
quant_idsMany2many → stock.quantstring='Quants' args: 'stock.quant', 'stock_conflict_quant_rel' -
quant_to_fix_idsMany2many → stock.quantstring='Conflicts' args: 'stock.quant'
-
action_keep_counted_quantity(self) -
action_keep_difference(self)
New fields (1)
-
quant_idsMany2many → stock.quantargs: 'stock.quant'
-
action_reset(self) -
action_set(self)
New fields (25)
-
activeBooleandefault=Truehelp='By unchecking the active field, you may hide a location without deleting it.' args: 'Active' -
barcodeCharcopy=False args: 'Barcode' -
child_idsOne2many → stock.locationargs: 'stock.location', 'location_id', 'Contains' -
child_internal_location_idsMany2many → stock.locationcompute='_compute_child_internal_location_ids'help="This location (if it's internal) and all its descendants filtered by type=Internal."recursive=Truestring='Internal locations among descendants' args: 'stock.location' -
company_idMany2one → res.companydefault=<expr>help='Let this field empty if this location is shared between companies'index=True args: 'res.company', 'Company' -
complete_nameCharcompute='_compute_complete_name'recursive=Truestore=True args: 'Full Location Name' -
cyclic_inventory_frequencyIntegerdefault=0help=' 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_weightFloatcompute='_compute_weight' args: 'Forecasted Weight' -
incoming_move_line_idsOne2many → stock.move.lineargs: 'stock.move.line', 'location_dest_id' -
is_emptyBooleancompute='_compute_is_empty'search='_search_is_empty' args: 'Is Empty' -
last_inventory_dateDatehelp='Date of the last inventory at this location.'readonly=True args: 'Last Inventory' -
location_idMany2one → stock.locationcheck_company=Truehelp="The parent location that includes this location. Example : The 'Dispatch Zone' is the 'Gate 1' parent location."index=True args: 'stock.location', 'Parent Location' -
nameCharrequired=True args: 'Location Name' -
net_weightFloatcompute='_compute_weight' args: 'Net Weight' -
next_inventory_dateDatecompute='_compute_next_inventory_date'help='Date for next planned inventory based on cyclic schedule.'store=True args: 'Next Expected' -
outgoing_move_line_idsOne2many → stock.move.lineargs: 'stock.move.line', 'location_id' -
parent_pathCharindex=True -
putaway_rule_idsOne2many → stock.putaway.ruleargs: 'stock.putaway.rule', 'location_in_id', 'Putaway Rules' -
quant_idsOne2many → stock.quantargs: 'stock.quant', 'location_id' -
removal_strategy_idMany2one → product.removalhelp='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_locationBooleancompute='_compute_replenish_location'copy=Falsehelp='Trigger replenishment suggestions for this location when required'readonly=Falsestore=True args: 'Replenishments' -
storage_category_idMany2one → stock.storage.categorycheck_company=Trueindex='btree_not_null'string='Storage Category' args: 'stock.storage.category' -
usageSelectiondefault='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=Truerequired=Truestring='Location Type' args: [('supplier', 'Vendor'), ('view', 'Virtual'), ('internal', 'Internal'), ('customer', 'Customer'), ('inventory', 'Inventory Loss'), ('production', 'Production'), ('transit', 'Transit')] -
warehouse_idMany2one → stock.warehousecompute='_compute_warehouse_id'store=True args: 'stock.warehouse' -
warehouse_view_idsOne2many → stock.warehousereadonly=True args: 'stock.warehouse', 'view_location_id'
-
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 (0)
No new fields.
Public methods (0)No public methods.
New fields (15)
-
company_idMany2one → res.companycompute='_compute_company_id'index=Truereadonly=Falsestore=True args: 'res.company', 'Company' -
delivery_countIntegercompute='_compute_delivery_ids' args: 'Delivery order count' -
delivery_idsMany2many → stock.pickingcompute='_compute_delivery_ids'string='Transfers' args: 'stock.picking' -
display_completeBooleancompute='_compute_display_complete' -
is_scrapBooleancompute='_compute_is_scrap' args: 'Is Scrapped' -
location_idMany2one → stock.locationcompute='_compute_single_location'domain="[('usage', '!=', 'view')]"group_expand='_read_group_location_id'inverse='_set_single_location'readonly=Falsestore=True args: 'stock.location', 'Location' -
lot_propertiesPropertiescopy=Truedefinition='product_id.lot_properties_definition' args: 'Properties' -
nameCharcompute='_compute_name'help='Unique Lot/Serial Number'index='trigram'precompute=Truereadonly=Falserequired=Truestore=True args: 'Lot/Serial Number' -
noteHtmlstring='Description' -
partner_idsMany2many → res.partnerdomain="['|', ('company_id', '=', False), ('company_id', '=?', company_id)]" args: 'res.partner' -
product_idMany2one → product.productcheck_company=Truedomain="[('tracking', '!=', False), ('is_storable', '=', True)] + ([('product_tmpl_id', '=', context['default_product_tmpl_id'])] if context.get('default_product_tmpl_id') else [])"index=Truerequired=Truetracking=True args: 'product.product', 'Product' -
product_qtyFloatcompute='_product_qty'search='_search_product_qty' args: 'On Hand Quantity' -
quant_idsOne2many → stock.quantreadonly=True args: 'stock.quant', 'lot_id', 'Quants' -
refCharhelp="Internal reference number in case it differs from the manufacturer's lot/serial number" args: 'Internal Reference' -
uom_idMany2one → uom.uomrelated='product_id.uom_id' args: 'uom.uom', 'Unit'
-
action_lot_open_quants(self) -
action_lot_open_transfers(self) -
action_open_scrap_moves(self) -
action_scrap(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, product_sequence=False)@api.modelGenerate `lot_names` from a string. -
write(self, vals)
New fields (76)
-
additionalBooleandefault=False args: "Whether the move was added after the picking's confirmation" -
allowed_uom_idsMany2many → uom.uomcompute='_compute_allowed_uom_ids' args: 'uom.uom' -
availabilityFloatcompute='_compute_product_availability'help='Quantity in stock that can still be reserved for this move'readonly=True args: 'Forecasted Quantity' -
company_idMany2one → res.companydefault=<expr>index=Truerequired=True args: 'res.company', 'Company' -
dateDatetimedefault=fields.Datetime.nowhelp='Scheduled date until move is done, then date of actual move processing'index=Truerequired=True args: 'Date Scheduled' -
date_deadlineDatetimecopy=Falsehelp='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_dateDatetimecompute='_compute_delay_alert_date'help='Process at this date to be on time'store=True args: 'Delay Alert Date' -
description_pickingTextcompute='_compute_description_picking'compute_sudo=Trueinverse='_inverse_description_picking'string='Description Of Picking' -
description_picking_manualTextreadonly=True -
display_assign_serialBooleancompute='_compute_display_assign_serial' -
display_import_lotBooleancompute='_compute_display_assign_serial' -
forecast_availabilityFloatcompute='_compute_forecast_information'compute_sudo=Truedigits='Product Unit' args: 'Forecast Availability' -
forecast_expected_dateDatetimecompute='_compute_forecast_information'compute_sudo=True args: 'Forecasted Expected date' -
forecasted_location_idMany2one → stock.locationbypass_search_access=Truecheck_company=Truehelp='Location used in the computation of the forecast.'index=Truereadonly=Falsestore=True args: 'stock.location', 'Forecasted Location' -
has_lines_without_result_packageBooleancompute='_compute_has_lines_without_result_package' -
has_trackingSelectionrelated='product_id.tracking'string='Product with Tracking' -
inventory_nameCharreadonly=True -
is_date_editableBooleancompute='_compute_is_date_editable' args: 'Is Date Editable' -
is_initial_demand_editableBooleancompute='_compute_is_initial_demand_editable' args: 'Is initial demand editable' -
is_inventoryBooleanargs: 'Inventory' -
is_lockedBooleancompute='_compute_is_locked'readonly=True -
is_quantity_done_editableBooleancompute='_compute_is_quantity_done_editable' args: 'Is quantity done editable' -
is_scrapBooleanreadonly=True -
is_storableBooleanrelated='product_id.is_storable' -
location_dest_idMany2one → stock.locationcompute='_compute_location_dest_id'help='The operations brings product to this location'index=Trueinverse='_set_location_dest_id'precompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Intermediate Location' -
location_dest_usageSelectionrelated='location_dest_id.usage'string='Destination Location Type' -
location_idMany2one → stock.locationbypass_search_access=Truecheck_company=Truecompute='_compute_location_id'help='The operation takes and suggests products from this location.'index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Source Location' -
location_usageSelectionrelated='location_id.usage'string='Source Location Type' -
lot_idsMany2many → stock.lotcompute='_compute_lot_ids'domain="[('product_id', '=', product_id)]"inverse='_set_lot_ids'readonly=Falsestring='Serial Numbers' args: 'stock.lot' -
move_dest_idsMany2many → stock.movecopy=Falsehelp='Optional: next stock move when chaining them' args: 'stock.move', 'stock_move_move_rel', 'move_orig_id', 'move_dest_id', 'Destination Moves' -
move_line_idsOne2many → stock.move.lineargs: 'stock.move.line', 'move_id' -
move_lines_countIntegercompute='_compute_move_lines_count' -
move_orig_idsMany2many → stock.movecopy=Falsehelp='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_idsMany2many → product.template.attribute.valuestring='Never attribute Values' args: 'product.template.attribute.value', 'template_attribute_value_stock_move_rel', 'move_id', 'template_attribute_value_id' -
next_serialCharargs: 'First SN/Lot' -
next_serial_countIntegerargs: 'Number of SN/Lots' -
orderpoint_idMany2one → stock.warehouse.orderpointindex=True args: 'stock.warehouse.orderpoint', 'Original Reordering Rule' -
originCharargs: 'Source Document' -
origin_returned_move_idMany2one → stock.movecheck_company=Truecopy=Falsehelp='Move that created the return move'index=True args: 'stock.move', 'Origin return move' -
package_idsOne2many → stock.packagecompute='_compute_package_ids'string='Packages' args: 'stock.package' -
packaging_uom_idMany2one → uom.uomcompute='_compute_packaging_uom_id'help='Packaging unit from sale or purchase orders'precompute=Truestore=True args: 'uom.uom', 'Packaging' -
packaging_uom_qtyFloatcompute='_compute_packaging_uom_qty'help='Quantity in the packaging unit'store=True args: 'Packaging Quantity' -
partner_idMany2one → res.partnercompute='_compute_partner_id'help='Optional address where goods are to be delivered, specifically used for allotment'index='btree_not_null'readonly=Falsestore=True args: 'res.partner', 'Destination Address ' -
pickedBooleancompute='_compute_picked'copy=Falsedefault=Falsehelp="This checkbox is just indicative, it doesn't validate or generate any product moves."inverse='_inverse_picked'readonly=Falsestore=True args: 'Picked' -
picking_codeSelectionreadonly=Truerelated='picking_type_id.code' -
picking_idMany2one → stock.pickingcheck_company=Trueindex=True args: 'stock.picking', 'Transfer' -
picking_type_idMany2one → stock.picking.typecheck_company=Truecompute='_compute_picking_type_id'index='btree_not_null'readonly=Falsestore=True args: 'stock.picking.type', 'Operation Type' -
price_unitFloatcopy=False args: 'Unit Price' -
prioritySelectioncompute='_compute_priority'default='0'store=True args: PROCUREMENT_PRIORITIES, 'Priority' -
procure_methodSelectioncopy=Falsedefault='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=Truestring='Supply Method' args: [('make_to_stock', 'Default: Take From Stock'), ('make_to_order', 'Advanced: Apply Procurement Rules')] -
procurement_valuesJsonhelp='Dummy field to store procurement values to propagate them to later steps'store=False -
product_category_idMany2one → product.categoryrelated='product_id.categ_id' args: 'product.category', 'Product Category' -
product_idMany2one → product.productcheck_company=Truedomain="[('type', '=', 'consu')]"index=Trueondelete='cascade'required=True args: 'product.product', 'Product' -
product_qtyFloatcompute='_compute_product_qty'compute_sudo=Truedigits=0help='Quantity in the default UoM of the product'inverse='_set_product_qty'store=True args: 'Demand in Product UoM' -
product_tmpl_idMany2one → product.templaterelated='product_id.product_tmpl_id' args: 'product.template', 'Product Template' -
product_uom_qtyFloatdefault=0digits='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_cancelBooleandefault=Truehelp='If checked, when this move is cancelled, cancel the linked move too' args: 'Propagate cancel and split' -
quantityFloatcompute='_compute_quantity'digits='Product Unit'inverse='_set_quantity'store=Truewrite_sequence=25 args: 'Quantity' -
quantity_product_uomFloatcompute='_compute_quantity_product_uom'copy=Falsedigits='Product Unit'store=True args: 'Quantity in Product UoM' -
referenceCharcompute='_compute_reference'copy=Falsereadonly=Falsestore=Truestring='Reference' -
reference_idsMany2many → stock.referencestring='References' args: 'stock.reference', 'stock_reference_move_rel', 'move_id', 'reference_id' -
reservation_dateDatecompute='_compute_reservation_date'help='Computes when a move should be reserved'store=True args: 'Date to Reserve' -
restrict_partner_idMany2one → res.partnercheck_company=Trueindex='btree_not_null' args: 'res.partner', 'Owner ' -
returned_move_idsOne2many → stock.movehelp='Optional: all returned moves created from this move' args: 'stock.move', 'origin_returned_move_id', 'All returned moves' -
route_idsMany2many → stock.routehelp='Preferred route' args: 'stock.route', 'stock_route_move', 'move_id', 'route_id', 'Destination route' -
rule_idMany2one → stock.rulecheck_company=Truehelp='The stock rule that created this stock move'ondelete='restrict' args: 'stock.rule', 'Stock Rule' -
scrap_reason_tag_idsMany2many → stock.scrap.reason.tagstring='Scrap Reason' args: 'stock.scrap.reason.tag' -
sequenceIntegerdefault=10 args: 'Sequence' -
should_replenish_scrappedBooleanargs: 'Should Replenish' -
show_details_visibleBooleancompute='_compute_show_details_visible' args: 'Details Visible' -
show_lots_m2oBooleancompute='_compute_show_info' args: 'Show lot_id' -
show_lots_textBooleancompute='_compute_show_info' args: 'Show lot_name' -
show_quantBooleancompute='_compute_show_info' args: 'Show Quant' -
stateSelectioncopy=Falsedefault='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=Truereadonly=Truestring='Status' args: [('draft', 'New'), ('waiting', 'Waiting Another Move'), ('confirmed', 'Waiting'), ('partially_available', 'Partially Available'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')] -
uom_idMany2one → uom.uomcompute='_compute_uom_id'domain="[('id', 'in', allowed_uom_ids)]"precompute=Truereadonly=Falserequired=Truestore=True args: 'uom.uom', 'Unit' -
warehouse_idMany2one → stock.warehousehelp='the warehouse to consider for the route selection on the next procurement (if any).' args: 'stock.warehouse', 'Warehouse'
-
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_label_layout(self) -
action_open_reference(self)Open the form view of the move's reference document, if one exists, otherwise open form view of self -
action_print_reception_report(self) -
action_product_forecast_report(self) -
action_scrap(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. -
check_available_qty(self) -
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_idsMany2many → uom.uomcompute='_compute_allowed_uom_ids' args: 'uom.uom' -
batch_idMany2onerelated='picking_id.batch_id' -
company_idMany2one → res.companyindex=Truereadonly=Truerequired=Truestring='Company' args: 'res.company' -
consume_line_idsMany2many → stock.move.lineargs: 'stock.move.line', 'stock_move_line_consume_rel', 'consume_line_id', 'produce_line_id' -
dateDatetimerelated='move_id.date'store=True args: 'Date' -
description_pickingTextrelated='move_id.description_picking' -
is_entire_packBooleanargs: 'Is added through entire package' -
is_inventoryBooleanrelated='move_id.is_inventory' -
is_lockedBooleanreadonly=Truerelated='move_id.is_locked' -
is_scrapBooleanreadonly=Truerelated='move_id.is_scrap' -
location_dest_idMany2one → stock.locationcheck_company=Truecompute='_compute_location_dest_id'domain="[('usage', '!=', 'view')]"index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'To' -
location_dest_usageSelectionrelated='location_dest_id.usage'string='Destination Location Type' -
location_idMany2one → stock.locationcheck_company=Truecompute='_compute_location_id'domain="[('usage', '!=', 'view')]"index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'From' -
location_usageSelectionrelated='location_id.usage'string='Source Location Type' -
lot_idMany2one → stock.lotcheck_company=Truedomain="[('product_id', '=', product_id)]"index=True args: 'stock.lot', 'Lot/Serial Number' -
lot_nameCharargs: 'Lot/Serial Number Name' -
lots_visibleBooleancompute='_compute_lots_visible' -
move_idMany2one → stock.movecheck_company=Trueindex=True args: 'stock.move', 'Stock Operation' -
move_partner_idMany2onereadonly=Truerelated='move_id.partner_id' -
originCharrelated='move_id.origin'string='Source' -
owner_idMany2one → res.partnercheck_company=Truehelp='When validating the transfer, the products will be taken from this owner.'index='btree_not_null' args: 'res.partner', 'From Owner' -
package_history_idMany2one → stock.package.historyindex='btree_not_null'string='Package History' args: 'stock.package.history' -
package_idMany2one → stock.packagecheck_company=Truedomain="[('location_id', '=', location_id)]"ondelete='restrict' args: 'stock.package', 'Source Package' -
pickedBooleancompute='_compute_picked'copy=Falsereadonly=Falsestore=True args: 'Picked' -
picking_codeSelectionreadonly=Truerelated='picking_type_id.code' -
picking_idMany2one → stock.pickingbypass_search_access=Truecheck_company=Truehelp='The stock operation where the packing has been made'index=True args: 'stock.picking', 'Transfer' -
picking_location_dest_idMany2onerelated='picking_id.location_dest_id' -
picking_location_idMany2onerelated='picking_id.location_id' -
picking_partner_idMany2onereadonly=Truerelated='picking_id.partner_id' -
picking_type_idMany2one → stock.picking.typecompute='_compute_picking_type_id'search='_search_picking_type_id' args: 'stock.picking.type', 'Operation type' -
picking_type_use_create_lotsBooleanreadonly=Truerelated='picking_type_id.use_create_lots' -
picking_type_use_existing_lotsBooleanreadonly=Truerelated='picking_type_id.use_existing_lots' -
produce_line_idsMany2many → stock.move.lineargs: 'stock.move.line', 'stock_move_line_consume_rel', 'produce_line_id', 'consume_line_id' -
product_category_idMany2onerelated='product_id.categ_id'string='Product Category' -
product_idMany2one → product.productcheck_company=Truedomain="[('type', '!=', 'service')]"index=Trueondelete='cascade' args: 'product.product', 'Product' -
quant_idMany2one → stock.quantstore=False args: 'stock.quant', 'Pick From' -
quantityFloatcompute='_compute_quantity'copy=Falsedigits='Product Unit'readonly=Falsestore=True args: 'Quantity' -
quantity_product_uomFloatcompute='_compute_quantity_product_uom'copy=Falsedigits='Product Unit'store=True args: 'Quantity in Product UoM' -
referenceCharrelated='move_id.reference' -
result_package_dest_nameCharrelated='result_package_id.dest_complete_name' args: 'Destination Package Name' -
result_package_idMany2one → stock.packagecheck_company=Truedomain="['|', '|', ('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'index='btree_not_null'ondelete='restrict'required=False args: 'stock.package', 'Destination Package' -
stateSelectionrelated='move_id.state'store=True -
trackingSelectionreadonly=Truerelated='product_id.tracking' -
uom_idMany2one → uom.uomcompute='_compute_uom_id'domain="[('id', 'in', allowed_uom_ids)]"precompute=Truereadonly=Falserequired=Truestore=True args: 'uom.uom', 'Unit'
-
action_open_add_to_wave(self) -
action_open_reference(self) -
action_put_in_pack(self, *, package_id=False, package_type_id=False, package_name=False, package_capacity=None) -
action_revert(self) -
action_send_recall_email(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_idsMany2many → stock.warehouse.orderpointargs: 'stock.warehouse.orderpoint' -
predefined_dateSelectiondefault='day'string='Snooze for' args: [('day', '1 Day'), ('week', '1 Week'), ('month', '1 Month'), ('custom', 'Custom')] -
snoozed_untilDateargs: 'Snooze Date'
-
action_snooze(self)
New fields (3)
-
based_onSelectiondefault='one_month'help='Estimate the daily average future demand volume based on past period or choose Custom Demand to enter manually average daily demand.'required=Trueselection=[('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'), ('custom', 'Custom Demand')]string='Based on' -
orderpoint_idsMany2many → stock.warehouse.orderpointargs: 'stock.warehouse.orderpoint' -
percent_factorIntegerdefault=100required=True
-
action_apply(self)
New fields (24)
-
all_children_package_idsOne2many → stock.packagecompute='_compute_all_children_package_ids'search='_search_all_children_package_ids' args: 'stock.package' -
child_package_dest_idsOne2many → stock.packageargs: 'stock.package', 'package_dest_id', 'Assigned Contained Packages' -
child_package_idsOne2many → stock.packagestring='Contained Packages' args: 'stock.package', 'parent_package_id' -
company_idMany2one → res.companycompute='_compute_package_info'index=Truereadonly=Truerecursive=Truestore=True args: 'res.company', 'Company' -
complete_nameCharcompute='_compute_complete_name'recursive=Truestore=True args: 'Full Package Name' -
contained_quant_idsOne2many → stock.quantcompute='_compute_contained_quant_ids'search='_search_contained_quant_ids' args: 'stock.quant' -
content_descriptionCharcompute='_compute_content_description' args: 'Contents' -
dest_complete_nameCharcompute='_compute_dest_complete_name'recursive=True args: 'Package Name At Destination' -
json_popoverCharcompute='_compute_json_popover' args: 'JSON data for popover widget' -
location_dest_idMany2one → stock.locationcompute='_compute_location_dest_id'search='_search_location_dest_id' args: 'stock.location', 'Destination location' -
location_idMany2one → stock.locationcompute='_compute_package_info'index=Truereadonly=Falserecursive=Truestore=True args: 'stock.location', 'Location' -
move_line_idsOne2many → stock.move.linecompute='_compute_move_line_ids'search='_search_move_line_ids' args: 'stock.move.line' -
nameCharcopy=Falseindex='trigram'required=True args: 'Package Reference' -
outermost_package_idMany2one → stock.packagecompute='_compute_outermost_package_id'recursive=Truesearch='_search_outermost_package_id' args: 'stock.package', 'Outermost Destination Container' -
owner_idMany2one → res.partnercompute='_compute_owner_id'compute_sudo=Truereadonly=Truesearch='_search_owner' args: 'res.partner', 'Owner' -
pack_dateDatedefault=fields.Date.context_today args: 'Pack Date' -
package_dest_idMany2one → stock.packageindex='btree_not_null' args: 'stock.package', 'Destination Container' -
package_type_idMany2one → stock.package.typeindex=True args: 'stock.package.type', 'Package Type' -
parent_package_idMany2one → stock.packageindex='btree_not_null' args: 'stock.package', 'Container' -
parent_pathCharindex=True -
picking_idsMany2many → stock.pickingcompute='_compute_picking_ids'help='Transfers in which the Package is set as Destination Package'search='_search_picking_ids'string='Transfers' args: 'stock.picking' -
quant_idsOne2many → stock.quantdomain=['|', ('quantity', '!=', 0), ('reserved_quantity', '!=', 0)]readonly=True args: 'stock.quant', 'package_id', 'Bulk Content' -
shipping_weightFloathelp='Total weight of the package.'string='Shipping Weight' -
valid_ssccBooleancompute='_compute_valid_sscc' args: 'Package name is valid SSCC'
-
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_locationOne2many → stock.locationcomodel_name='stock.location'compute='_compute_filtered_location' -
location_dest_idMany2one → stock.locationrequired=True args: 'stock.location', 'Destination location' -
move_line_idsMany2many → stock.move.linerequired=Truestring='Products' args: 'stock.move.line'
-
action_done(self)
New fields (13)
-
company_idMany2one → res.companydefault=<expr>required=True args: 'res.company', 'Company' -
location_dest_idMany2one → stock.locationargs: 'stock.location', 'Destination Location' -
location_idMany2one → stock.locationargs: 'stock.location', 'Origin Location' -
move_line_idsOne2many → stock.move.linerequired=Truestring='Move Lines' args: 'stock.move.line', 'package_history_id' -
outermost_dest_idMany2one → stock.packageargs: 'stock.package', 'Outermost Destination Container' -
package_idMany2one → stock.packageindex=Trueondelete='cascade'required=True args: 'stock.package', 'Package' -
package_nameCharrequired=True args: 'Package Name' -
package_type_idMany2one → stock.package.typerelated='package_id.package_type_id' args: 'stock.package.type' -
parent_dest_idMany2one → stock.packageargs: 'stock.package', 'Destination Container' -
parent_dest_nameCharargs: 'Destination Container Name' -
parent_orig_idMany2one → stock.packageargs: 'stock.package', 'Origin Container' -
parent_orig_nameCharargs: 'Origin Container Name' -
picking_idsMany2many → stock.pickingstring='Transfers' args: 'stock.picking'
-
action_show_package(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (17)
-
barcodeCharcopy=False args: 'Barcode' -
base_weightFloathelp='Weight of the package type'string='Weight' -
company_idMany2one → res.companyindex=True args: 'res.company', 'Company' -
has_quantsBooleancompute='_compute_has_quants' args: 'Has Contents' -
heightFloathelp='Packaging Height' args: 'Height' -
length_uom_nameCharcompute='_compute_length_uom_name'default=_get_default_length_uomstring='Length unit of measure label' -
max_weightFloathelp='Maximum weight shippable in this packaging' args: 'Max Weight' -
nameCharrequired=True args: 'Package Type' -
package_useSelectiondefault='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=Truestring='Package Use' args: [('disposable', 'Disposable Box'), ('reusable', 'Reusable Box (totes)')] -
packaging_lengthFloathelp='Packaging Length' args: 'Length' -
route_idsMany2many → stock.routedomain="[('package_type_selectable', '=', True)]"string='Routes' args: 'stock.route' -
sequenceIntegerdefault=1help='The first in the sequence is the default one.' args: 'Sequence' -
sequence_codeCharreadonly=Falserelated='sequence_id.code' args: 'Sequence Prefix' -
sequence_idMany2one → ir.sequencecheck_company=Truecopy=False args: 'ir.sequence', 'Reference Sequence' -
storage_category_capacity_idsOne2many → stock.storage.category.capacitycopy=True args: 'stock.storage.category.capacity', 'package_type_id', 'Storage Category Capacity' -
weight_uom_nameCharcompute='_compute_weight_uom_name'default=_get_default_weight_uomstring='Weight unit of measure label' -
widthFloathelp='Packaging Width' args: 'Width'
-
create(self, vals_list)@api.model_create_multi -
write(self, vals)
New fields (60)
-
backorder_idMany2one → stock.pickingcheck_company=Truecopy=Falsehelp='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_idsOne2many → stock.pickingargs: 'stock.picking', 'backorder_id', 'Back Orders' -
batch_idMany2one → stock.picking.batchcheck_company=Truecopy=Falsehelp='Batch associated to this transfer'index=Truestring='Batch Transfer' args: 'stock.picking.batch' -
batch_sequenceIntegerstring='Sequence' -
company_idMany2one → res.companyindex=Truereadonly=Truerelated='picking_type_id.company_id'store=Truestring='Company' args: 'res.company' -
date_deadlineDatetimecompute='_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_doneDatetimecopy=Falsehelp='Date at which the transfer has been processed or cancelled.'tracking=True args: 'Date of Transfer' -
delay_alert_dateDatetimecompute='_compute_delay_alert_date'search='_search_delay_alert_date' args: 'Delay Alert Date' -
has_deadline_issueBooleancompute='_compute_has_deadline_issue'default=Falsehelp='Is late or will be late depending on the deadline and scheduled date'store=True args: 'Is late' -
has_scrap_moveBooleancompute='_has_scrap_move' args: 'Has Scrap Moves' -
has_trackingBooleancompute='_compute_has_tracking' -
is_date_editableBooleancompute='_compute_is_date_editable' args: 'Is Scheduled Date Editable' -
is_lockedBooleancopy=Falsedefault=Truehelp='When the picking is not done this allows changing the initial demand. When the picking is done this allows changing the done quantities.' -
is_signedBooleancompute='_compute_is_signed' args: 'Is Signed' -
json_popoverCharcompute='_compute_json_popover' args: 'JSON data for the popover widget' -
location_dest_idMany2one → stock.locationcheck_company=Truecompute='_compute_location_dest_id'domain="[('usage','!=','view')]"precompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Destination Location' -
location_idMany2one → stock.locationcheck_company=Truecompute='_compute_location_id'precompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Source Location' -
lot_idMany2one → stock.lotreadonly=Truerelated='move_line_ids.lot_id' args: 'stock.lot', 'Lot/Serial Number' -
move_idsOne2many → stock.movecopy=Truedomain=[('is_scrap', '=', False)]string='Stock Moves' args: 'stock.move', 'picking_id' -
move_line_idsOne2many → stock.move.lineargs: 'stock.move.line', 'picking_id', 'Operations' -
move_typeSelectioncompute='_compute_move_type'help='It specifies goods to be deliver partially or all at once'precompute=Truereadonly=Falserequired=Truestore=True args: [('direct', 'As soon as possible, with back orders'), ('one', 'When all products are ready')], 'Shipping Policy' -
nameCharcopy=Falsedefault='/'index='trigram'readonly=True args: 'Reference' -
noteHtmlargs: 'Notes' -
originCharindex='trigram' args: 'Source Document' -
owner_idMany2one → res.partnercheck_company=Truehelp='When validating the transfer, the products will be assigned to this owner.'index='btree_not_null' args: 'res.partner', 'Assign Owner' -
package_history_idsMany2many → stock.package.historycopy=Falsestring='Transfered Packages' args: 'stock.package.history' -
packages_countIntegercompute='_compute_packages_count' args: 'Packages Count' -
partner_country_idMany2one → res.countryrelated='partner_id.country_id' args: 'res.country' -
partner_idMany2one → res.partnercheck_company=Trueindex='btree_not_null'tracking=True args: 'res.partner', 'Contact' -
picking_propertiesPropertiescopy=Truedefinition='picking_type_id.picking_properties_definition' args: 'Properties' -
picking_type_codeSelectionreadonly=Truerelated='picking_type_id.code' -
picking_type_entire_packsBooleanrelated='picking_type_id.show_entire_packs' -
picking_type_idMany2one → stock.picking.typedefault=_default_picking_type_idindex=Truerequired=Truetracking=True args: 'stock.picking.type', 'Operation Type' -
picking_warning_textTextcompute='_compute_picking_warning_text'help='Internal instructions for the partner or its parent company as set by the user.' args: 'Picking Instructions' -
printedBooleancopy=False args: 'Printed' -
prioritySelectiondefault='0'help='Products will be reserved first for the transfers with the highest priorities.'string='Priority' args: PROCUREMENT_PRIORITIES -
product_idMany2one → product.productreadonly=Truerelated='move_ids.product_id' args: 'product.product', 'Product' -
products_availabilityCharcompute='_compute_products_availability'help='Latest product availability status of the picking'string='Product Availability' -
products_availability_stateSelectioncompute='_compute_products_availability'search='_search_products_availability_state' args: [('available', 'Available'), ('expected', 'Expected'), ('late', 'Late')] -
reference_idsMany2many → stock.referencereadonly=Truerelated='move_ids.reference_ids'string='References' args: 'stock.reference' -
return_countIntegercompute='_compute_return_count'compute_sudo=False args: '# Returns' -
return_idMany2one → stock.pickingcheck_company=Truecopy=Falsehelp='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_idsOne2many → stock.pickingargs: 'stock.picking', 'return_id', 'Returns' -
scheduled_dateDatetimecompute='_compute_scheduled_date'default=fields.Datetime.nowhelp='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=Trueinverse='_set_scheduled_date'store=Truetracking=True args: 'Scheduled Date' -
search_date_categorySelectionreadonly=Truesearch='_search_date_category'store=Falsestring='Date Category' args: [('before', 'Before'), ('yesterday', 'Yesterday'), ('today', 'Today'), ('day_1', 'Tomorrow'), ('day_2', 'The day after tomorrow'), ('after', 'After')] -
shipping_volumeFloatcompute='_compute_shipping_volume' args: 'Volume for Shipping' -
shipping_weightFloatcompute='_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=Falsestore=True args: 'Weight for Shipping' -
show_allocationBooleancompute='_compute_show_allocation'help='Technical Field used to decide whether the button "Allocation" should be displayed.' -
show_check_availabilityBooleancompute='_compute_show_check_availability'help='Technical field used to compute whether the button "Reserve" should be displayed.' -
show_lots_textBooleancompute='_compute_show_lots_text' -
show_next_pickingsBooleancompute='_compute_show_next_pickings' -
show_returnBooleandefault=True args: 'Show return button' -
signatureImageattachment=Truecopy=Falsehelp='Signature' args: 'Signature' -
stateSelectioncompute='_compute_state'copy=Falsehelp=' * 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=Truereadonly=Truestore=Truestring='Status'tracking=True args: [('draft', 'Draft'), ('waiting', 'Waiting Another Operation'), ('confirmed', 'Waiting'), ('assigned', 'Ready'), ('done', 'Done'), ('cancel', 'Cancelled')] -
use_create_lotsBooleanrelated='picking_type_id.use_create_lots' -
use_existing_lotsBooleanrelated='picking_type_id.use_existing_lots' -
user_idMany2one → res.userscopy=Falsedefault=<expr>domain=<expr>tracking=True args: 'res.users', 'Responsible' -
validate_button_styleSelectioncompute='_compute_validate_button_style' args: [('primary', 'Primary'), ('secondary', 'Secondary'), ('invisible', 'Invisible')] -
warehouse_address_idMany2one → res.partnerrelated='picking_type_id.warehouse_id.partner_id' args: 'res.partner' -
weight_bulkFloatcompute='_compute_bulk_weight'help='Total weight of products which are not in a package.' args: 'Bulk Weight'
-
action_add_entire_packs(self, package_ids) -
action_add_operations(self) -
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_clear_return(self) -
action_confirm(self) -
action_detailed_operations(self) -
action_exchange(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_return(self) -
action_return_all(self)Set all the quantities in the return picking as the original picking's done quantities -
action_scrap(self) -
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_allocation_report(self) -
action_view_batch(self) -
assign_batch_user(self, user_id) -
button_validate(self) -
calculate_date_category(self, datetime)@api.modelAssigns 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.modelGiven 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 (21)
-
allowed_picking_idsOne2many → stock.pickingcompute='_compute_allowed_picking_ids' args: 'stock.picking' -
company_idMany2one → res.companydefault=<expr>index=Truereadonly=Truerequired=Truestring='Company' args: 'res.company' -
descriptionCharargs: 'Description' -
estimated_shipping_volumeFloatcompute='_compute_estimated_shipping_capacity'digits='Product Unit' args: 'shipping_volume' -
estimated_shipping_weightFloatcompute='_compute_estimated_shipping_capacity'digits='Product Unit' args: 'shipping_weight' -
is_waveBooleanargs: 'This batch is a wave' -
move_idsOne2many → stock.movecompute='_compute_move_ids'string='Stock moves' args: 'stock.move' -
move_line_idsOne2many → stock.move.linecompute='_compute_move_line_ids'inverse='_set_move_line_ids'search='_search_move_line_ids'string='Stock move lines' args: 'stock.move.line' -
nameCharcopy=Falsedefault=<expr>readonly=Truerequired=Truestring='Batch Transfer' -
picking_idsOne2many → stock.pickingcheck_company=Truedomain="[('id', 'in', allowed_picking_ids)]"help='List of transfers associated to this batch'string='Transfers' args: 'stock.picking', 'batch_id' -
picking_type_codeSelectionrelated='picking_type_id.code' -
picking_type_idMany2one → stock.picking.typecheck_company=Truecopy=Falseindex=True args: 'stock.picking.type', 'Operation Type' -
prioritySelectiondefault='0'string='Priority' args: PROCUREMENT_PRIORITIES -
propertiesPropertiescopy=Truedefinition='picking_type_id.batch_properties_definition' args: 'Properties' -
scheduled_dateDatetimecompute='_compute_scheduled_date'copy=Falsehelp='Scheduled date for the transfers to be processed.\n - If manually set then scheduled date for all transfers in batch will automatically update to this date.\n - If not manually changed and transfers are added/removed/updated then this will be their earliest scheduled date\n but this scheduled date will not be set for all transfers in batch.'readonly=Falsestore=True args: 'Scheduled Date' -
show_allocationBooleancompute='_compute_show_allocation'string='Show Allocation Button' -
show_check_availabilityBooleancompute='_compute_show_check_availability'string='Show Reserve Button' -
show_lots_textBooleancompute='_compute_show_lots_text' -
stateSelectioncompute='_compute_state'copy=Falsedefault='draft'index=Truereadonly=Truerequired=Truestore=Truetracking=True args: [('draft', 'Draft'), ('in_progress', 'In progress'), ('done', 'Done'), ('cancel', 'Cancelled')] -
user_idMany2one → res.userscheck_company=Truestring='Responsible'tracking=True args: 'res.users' -
warehouse_idMany2one → stock.warehouserelated='picking_type_id.warehouse_id' args: 'stock.warehouse'
-
action_assign(self) -
action_batch_detailed_operations(self) -
action_cancel(self) -
action_confirm(self)Sanity checks, confirm the pickings and mark the batch as confirmed. -
action_done(self) -
action_merge(self) -
action_open_label_layout(self) -
action_print(self) -
action_put_in_pack(self, *, package_id=False, package_type_id=False, package_name=False)Action to put move lines with 'Done' quantities into a new pack This method follows same logic to stock.picking. -
action_see_packages(self) -
action_view_allocation_report(self) -
create(self, vals_list)@api.model_create_multi -
fields_get(self, allfields=None, attributes=None)@api.model -
onchange_scheduled_date(self)@api.onchange('scheduled_date') -
write(self, vals)
New fields (5)
-
batch_idMany2one → stock.picking.batchdomain="[('state', 'in', ('draft', 'in_progress'))]"string='Batch Transfer' args: 'stock.picking.batch' -
descriptionCharargs: 'Description' -
is_create_draftBooleanhelp='When checked, create the batch in draft status'string='Draft' -
modeSelectiondefault='new' args: [('existing', 'an existing batch transfer'), ('new', 'a new batch transfer')] -
user_idMany2one → res.usersstring='Responsible' args: 'res.users'
-
attach_pickings(self)
New fields (68)
-
activeBooleandefault=True args: 'Active' -
allocated_location_idMany2one → stock.locationcheck_company=Truedomain="[('usage', '=', 'internal')]"help='Allow to define the location where allocated products should be sent.' args: 'stock.location', 'Location for allocation' -
auto_batchBooleanhelp='Automatically put pickings into batches as they are confirmed when possible.' args: 'Automatic Batches' -
auto_print_delivery_slipBooleanhelp='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_labelsBooleanhelp='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_labelBooleanhelp='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_packagesBooleanhelp='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_labelsBooleanhelp='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_reportBooleanhelp='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_labelsBooleanhelp='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_slipBooleanhelp='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_allocation_reportBooleanhelp='If this checkbox is ticked, Odoo will automatically show the allocation report (if there are moves to allocate to) when validating.' args: 'Show Allocation' -
barcodeCharcopy=False args: 'Barcode' -
batch_auto_confirmBooleandefault=True args: 'Auto-confirm' -
batch_creation_typeSelectioncompute='_compute_batch_creation_type'help=<expr>inverse='_inverse_batch_creation_type'string='Batch Creation' args: [('manual', 'Manual Only'), ('auto', 'Automatic')] -
batch_group_by_dest_locBooleanhelp='Automatically group batches by their destination location.' args: 'Group by Destination Location' -
batch_group_by_destinationBooleanhelp='Automatically group batches by destination country.' args: 'Destination Country' -
batch_group_by_partnerBooleanhelp='Automatically group batches by contacts.' args: 'Contact' -
batch_group_by_src_locBooleanhelp='Automatically group batches by their source location.' args: 'Group by Source Location' -
batch_max_linesIntegerhelp="A transfer will not be automatically added to batches that will exceed this number of lines if the transfer is added to it.\nLeave this value as '0' if no line limit." args: 'Maximum lines' -
batch_max_pickingsIntegerhelp="A transfer will not be automatically added to batches that will exceed this number of transfers.\nLeave this value as '0' if no transfer limit." args: 'Maximum transfers' -
batch_properties_definitionPropertiesDefinitionargs: 'Batch Properties' -
codeSelectiondefault='incoming'required=True args: [('incoming', 'Receipt'), ('outgoing', 'Delivery'), ('internal', 'Internal Transfer')], 'Type of Operation' -
colorIntegerargs: 'Color' -
company_idMany2one → res.companydefault=<expr>index=Truerequired=True args: 'res.company', 'Company' -
count_pickingIntegercompute='_compute_picking_count' -
count_picking_backordersIntegercompute='_compute_picking_count' -
count_picking_batchIntegercompute='_compute_picking_count' -
count_picking_draftIntegercompute='_compute_picking_count' -
count_picking_lateIntegercompute='_compute_picking_count' -
count_picking_readyIntegercompute='_compute_picking_count' -
count_picking_waitingIntegercompute='_compute_picking_count' -
create_backorderSelectiondefault='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_idMany2one → stock.locationcheck_company=Truecompute='_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=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Destination Location' -
default_location_src_idMany2one → stock.locationcheck_company=Truecompute='_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=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Source Location' -
favorite_user_idsMany2many → res.usersargs: 'res.users', 'picking_type_favorite_user_rel', 'picking_type_id', 'user_id' -
hide_reservation_methodBooleancompute='_compute_hide_reservation_method' -
is_favoriteBooleancompute='_compute_is_favorite'compute_sql='_compute_sql_is_favorite'compute_sudo=Trueinverse='_inverse_is_favorite'search='_search_is_favorite'string='Show Operation in Overview' -
kanban_dashboard_graphTextcompute='_compute_kanban_dashboard_graph' -
lot_label_formatSelectiondefault='4x12_lots'selection='_get_lot_label_format_selection'string='Lot Label Format to auto-print' -
move_typeSelectiondefault=<expr>help='It specifies goods to be transferred partially or all at once'required=True args: [('direct', 'As soon as possible, with back orders'), ('one', 'When all products are ready')], 'Shipping Policy' -
nameCharcopy=mark_as_copy('name')required=Truetranslate=True args: 'Operation Type' -
open_button_styleSelectioncompute='_compute_open_button_style'selection=[('primary', 'Primary'), ('secondary', 'Secondary')] -
package_label_to_printSelectiondefault='pdf' args: [('pdf', 'PDF'), ('zpl', 'ZPL')], 'Package Label to Print' -
picking_properties_definitionPropertiesDefinitionargs: 'Picking Properties' -
print_labelBooleancompute='_compute_print_label'help='Check this box if you want to generate shipping label in this operation.'readonly=Falsestore=True args: 'Generate Shipping Labels' -
product_label_formatSelectiondefault='barcode_2x7_price'selection='_get_product_label_format_selection'string='Product Label Format to auto-print' -
reservation_days_beforeIntegerhelp='Maximum number of days before scheduled date that products should be reserved.' args: 'Days' -
reservation_days_before_priorityIntegerhelp='Maximum number of days before scheduled date that priority picking products should be reserved.' args: 'Days when starred' -
reservation_methodSelectiondefault='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_idMany2one → stock.picking.typecheck_company=Trueindex='btree_not_null' args: 'stock.picking.type', 'Operation Type for Returns' -
sequenceIntegerhelp="Used to order the 'All Operations' kanban view" args: 'Sequence' -
sequence_codeCharreadonly=Falserelated='sequence_id.prefix' args: 'Sequence Prefix' -
sequence_idMany2one → ir.sequencecheck_company=Truecopy=False args: 'ir.sequence', 'Reference Sequence' -
set_package_typeBooleandefault=Falsehelp='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_packsBooleandefault=Falsehelp='If ticked, packages to move will be directly displayed in Barcode instead of the products they contain' args: 'Move Entire Packages' -
show_picking_typeBooleancompute='_compute_show_picking_type' -
show_return_picking_typeBooleancompute='_compute_show_return_picking_type' -
use_create_lotsBooleancompute='_compute_use_create_lots'default=Truehelp='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=Falsestore=True args: 'Create New Lots/Serial Numbers' -
use_existing_lotsBooleancompute='_compute_use_existing_lots'default=Truehelp='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=Falsestore=True args: 'Use Existing Lots/Serial Numbers' -
warehouse_idMany2one → stock.warehousecheck_company=Truecompute='_compute_warehouse_id'ondelete='cascade'readonly=Falsestore=True args: 'stock.warehouse', 'Warehouse' -
wave_category_idsMany2many → product.categoryhelp='Categories to consider when grouping waves.'string='Wave Product Categories' args: 'product.category' -
wave_date_granularitySelectiondefault='day'help='Precision to consider when grouping waves.'string='Date Precision' args: [('day', 'Day'), ('week', 'Week')] -
wave_group_by_categoryBooleanhelp='Split transfers by product category, then group transfers that have the same product category.' args: 'Product Category' -
wave_group_by_dateBooleanhelp='Split transfers by their date.' args: 'Group by Date' -
wave_group_by_locationBooleanhelp='Split transfers by defined locations, then group transfers with the same location.' args: 'Location' -
wave_group_by_productBooleanhelp='Split transfers by product then group transfers that have the same product.' args: 'Product' -
wave_location_idsMany2many → stock.locationdomain="[('usage', '=', 'internal')]"help='Locations to consider when grouping waves.'string='Wave Locations' args: 'stock.location'
-
action_batch(self) -
action_detailed_moves(self) -
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_stock_picking_action_picking_type(self) -
write(self, vals)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (9)
-
location_dest_idMany2one → stock.locationargs: 'stock.location', 'Destination' -
move_line_idsMany2many → stock.move.linestring='Move lines' args: 'stock.move.line' -
origin_package_idsMany2many → stock.packagecompute='_compute_origin_package_ids' args: 'stock.package' -
package_capacityFloatcompute='_compute_package_capacity'readonly=Falsestore=True args: 'Package Size' -
package_idsMany2many → stock.packagestring='Packages' args: 'stock.package' -
package_type_idMany2one → stock.package.typecompute='_compute_package_type_id'readonly=Falsestore=True args: 'stock.package.type', 'Package Type' -
package_uomCharcompute='_compute_package_uom' args: 'Unit' -
result_package_idMany2one → stock.packagecompute='_compute_result_package_id'readonly=Falsestore=True args: 'stock.package', 'Package' -
show_package_capacityBooleancompute='_compute_show_package_capacity'
-
action_put_in_pack(self)
New fields (10)
-
activeBooleandefault=True args: 'Active' -
category_idMany2one → product.categorydefault=_default_category_iddomain=[('filter_for_stock_putaway_rule', '=', True)]index='btree_not_null'ondelete='cascade' args: 'product.category', 'Product Category' -
company_idMany2one → res.companydefault=<expr>index=Truerequired=True args: 'res.company', 'Company' -
location_in_idMany2one → stock.locationcheck_company=Truedefault=_default_location_iddomain="[('child_ids', '!=', False)]"index=Trueondelete='cascade'required=True args: 'stock.location', 'When product arrives in' -
location_out_idMany2one → stock.locationcheck_company=Truedomain="[('id', 'child_of', location_in_id)]"ondelete='cascade'required=True args: 'stock.location', 'Store to sublocation' -
package_type_idsMany2many → stock.package.typecheck_company=Truestring='Package Type' args: 'stock.package.type' -
product_idMany2one → product.productcheck_company=Truedefault=_default_product_iddomain="[('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' -
sequenceIntegerhelp='Give to the more specialized category, a higher priority to have them in top of the list.' args: 'Priority' -
storage_category_idMany2one → stock.storage.categorycheck_company=Truecompute='_compute_storage_category'ondelete='cascade'readonly=Falsestore=True args: 'stock.storage.category', 'Storage Category' -
sublocationSelectiondefault='no' args: [('no', 'No'), ('last_used', 'Last Used'), ('closest_location', 'Closest Location')]
-
create(self, vals_list)@api.model_create_multi -
write(self, vals)
New fields (29)
-
available_quantityFloatcompute='_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_idMany2oneindex='btree_not_null'readonly=Truerelated='location_id.company_id'store=Truestring='Company' -
cyclic_inventory_frequencyIntegerrelated='location_id.cyclic_inventory_frequency' -
in_dateDatetimedefault=fields.Datetime.nowreadonly=Truerequired=True args: 'Incoming Date' -
inventory_dateDatecompute='_compute_inventory_date'help='Next date the On Hand Quantity should be counted.'readonly=Falsestore=True args: 'Scheduled' -
inventory_diff_quantityFloatcompute='_compute_inventory_diff_quantity'digits='Product Unit'help="Indicates the gap between the product's theoretical quantity and its counted quantity."readonly=Truestore=True args: 'Difference' -
inventory_quantityFloatdigits='Product Unit'help="The product's counted quantity." args: 'Counted' -
inventory_quantity_auto_applyFloatcompute='_compute_inventory_quantity_auto_apply'digits='Product Unit'groups='stock.group_stock_user'inverse='_set_inventory_quantity' args: 'Inventoried Quantity' -
inventory_quantity_setBooleancompute='_compute_inventory_quantity_set'readonly=Falsestore=True -
is_favoriteBooleanrelated='product_tmpl_id.is_favorite' -
is_outdatedBooleancompute='_compute_is_outdated'search='_search_is_outdated' args: 'Quantity has been moved since last count' -
last_count_dateDatecompute='_compute_last_count_date'compute_sql='_compute_sql_last_count_date'compute_sudo=Falsehelp='Last time the Quantity was Updated' -
location_idMany2one → stock.locationbypass_search_access=Truedomain=<expr>index=Trueondelete='restrict'required=True args: 'stock.location', 'Location' -
lot_idMany2one → stock.lotcheck_company=Truedomain=<expr>index=Trueondelete='restrict' args: 'stock.lot', 'Lot/Serial Number' -
lot_propertiesPropertiesdefinition='product_id.lot_properties_definition'readonly=Truerelated='lot_id.lot_properties' -
on_handBooleansearch='_search_on_hand'store=False args: 'On Hand' -
owner_idMany2one → res.partnercheck_company=Truehelp='This is the owner of the quant'index='btree_not_null' args: 'res.partner', 'Owner' -
package_idMany2one → stock.packagecheck_company=Truedomain="['|', ('location_id', '=', location_id), '&', ('location_id', '=', False), ('quant_ids', '=', False)]"help='The package containing this quant'index=Trueondelete='restrict' args: 'stock.package', 'Package' -
product_categ_idMany2onerelated='product_tmpl_id.categ_id' -
product_idMany2one → product.productcheck_company=Truedomain=<expr>index=Trueondelete='restrict'required=True args: 'product.product', 'Product' -
product_tmpl_idMany2one → product.templaterelated='product_id.product_tmpl_id'string='Product Template' args: 'product.template' -
quantityFloatdigits='Product Unit'help='Quantity of products in this quant, in the default unit of measure of the product'readonly=True args: 'Quantity' -
reserved_quantityFloatdefault=0.0digits='Product Unit'help='Quantity of reserved products in this quant, in the default unit of measure of the product'readonly=Truerequired=True args: 'Reserved Quantity' -
sn_duplicatedBooleancompute='_compute_sn_duplicated'help='If the same SN is in another Quant'string='Duplicated Serial Number' -
storage_category_idMany2onerelated='location_id.storage_category_id' -
trackingSelectionreadonly=Truerelated='product_id.tracking' -
uom_idMany2one → uom.uomreadonly=Truerelated='product_id.uom_id' args: 'uom.uom', 'Unit' -
user_idMany2one → res.usersdomain=<expr>help='User assigned to do product count.' args: 'res.users', 'Assigned To' -
warehouse_idMany2one → stock.warehouserelated='location_id.warehouse_id' args: 'stock.warehouse'
-
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.modelSimilar 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_multiOverride 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_idMany2onerelated='quant_ids.company_id' -
dest_location_idMany2one → stock.locationdomain="[('usage', '=', 'internal'), ('company_id', '=', company_id)]" args: 'stock.location' -
dest_package_idMany2one → stock.packagecompute='_compute_dest_package_id'domain='dest_package_id_domain'store=True args: 'stock.package' -
dest_package_id_domainCharcompute='_compute_dest_package_id_domain' -
is_multi_locationBooleancompute='_compute_is_multi_location' -
is_partial_packageBooleancompute='_compute_is_partial_package' -
messageTextargs: 'Reason for relocation' -
partial_package_namesCharcompute='_compute_is_partial_package' -
quant_idsMany2many → stock.quantargs: 'stock.quant'
-
action_relocate_quants(self)
New fields (3)
-
move_idsMany2many → stock.movestring='Stock Moves' args: 'stock.move', 'stock_reference_move_rel', 'reference_id', 'move_id' -
nameCharreadonly=Truerequired=True args: 'Reference' -
picking_idsMany2many → stock.pickingcompute='_compute_picking_ids'readonly=Truestring='Transfers' args: 'stock.picking'
No public methods.
New fields (2)
-
allowed_route_idsMany2many → stock.routecompute='_compute_allowed_route_ids' args: 'stock.route' -
route_idMany2one → stock.routecheck_company=Truehelp="Apply specific route for the replenishment instead of product's default routes."string='Preferred Route' args: 'stock.route'
No public methods.
New fields (16)
-
based_onSelectiondefault='one_month'help='Estimate the daily average future demand volume based on past period or choose Custom Demand to enter manually average daily demand.'inverse='_inverse_based_on'required=Trueselection=[('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'), ('custom', 'Custom Demand')]string='Based on' -
daily_demandFloatreadonly=Falserelated='orderpoint_id.daily_demand'related_sudo=Falserequired=True args: 'Demand is' -
danger_levelCharcompute='_compute_danger_level' -
json_lead_daysCharcompute='_compute_json_lead_days' -
json_replenishment_graphCharcompute='_compute_json_replenishment_graph' -
min_coverageIntegercompute='_compute_min_coverage'help='Days of demand covered by Minimum level:\nShould be ≥ Replenishment Time - Sales Availability Time to avoid stock-outs during replenishment time.\nInclude extra days of safety to buffer unusual situations.\n\nGreen if > Replenishment Time - Sales Availability Time\nOrange if = Replenishment Time - Sales Availability Time\nRed if < Replenishment Time - Sales Availability Time'readonly=False -
orderpoint_idMany2one → stock.warehouse.orderpointargs: 'stock.warehouse.orderpoint' -
percent_factorIntegerdefault=100inverse='_inverse_percent_factor'required=True -
product_idMany2one → product.productrelated='orderpoint_id.product_id' args: 'product.product' -
product_max_qtyFloatreadonly=Falserelated='orderpoint_id.product_max_qty'related_sudo=Falserequired=True args: 'Max' -
product_min_qtyFloatreadonly=Falserelated='orderpoint_id.product_min_qty'related_sudo=Falserequired=True args: 'Min' -
product_uom_nameCharrelated='orderpoint_id.product_uom_name' -
qty_to_orderFloatrelated='orderpoint_id.qty_to_order' -
replenish_frequencyIntegercompute='_compute_replenish_frequency'help='Replenishment Frequency: choose how many days there are between replenishment requests to optimize the balance between your storage costs and order costs and calculate your Maximum level.'readonly=False -
warehouseinfo_idsOne2manyrelated='orderpoint_id.warehouse_id.resupply_route_ids' -
wh_replenishment_option_idsOne2many → stock.replenishment.optioncompute='_compute_wh_replenishment_options' args: 'stock.replenishment.option', 'replenishment_info_id'
-
get_daily_demand(self, period=None, ratio=None)
New fields (10)
-
free_qtyFloatcompute='_compute_free_qty'compute_sudo=True -
lead_timeCharcompute='_compute_lead_time'compute_sudo=True -
location_idMany2one → stock.locationrelated='warehouse_id.lot_stock_id' args: 'stock.location' -
product_idMany2one → product.productargs: 'product.product' -
qty_to_orderFloatrelated='replenishment_info_id.qty_to_order' -
replenishment_info_idMany2one → stock.replenishment.infoargs: 'stock.replenishment.info' -
route_idMany2one → stock.routeargs: 'stock.route' -
uomCharrelated='product_id.uom_name' -
warehouse_idMany2one → stock.warehouserelated='route_id.supplier_wh_id' args: 'stock.warehouse' -
warning_messageCharcompute='_compute_warning_message'
-
order_all(self) -
order_avbl(self) -
select_route(self)
New fields (4)
-
inventory_dateDatedefault=fields.Datetime.nowhelp='Choose a date to get the inventory at that date'required=True args: 'Scheduled at' -
quant_idsMany2many → stock.quantargs: 'stock.quant' -
show_expected_quantityBooleancompute='_compute_show_expected_quantity'help='If the user can see the expected quantity or not'inverse='_set_show_expected_quantity' -
user_idMany2one → res.usersdomain=<expr>string='Assign to' args: 'res.users'
-
action_request_count(self)
New fields (15)
-
activeBooleandefault=Truehelp='If the active field is set to False, it will allow you to hide the route without removing it.' args: 'Active' -
categ_idsMany2many → product.categorycopy=False args: 'product.category', 'stock_route_categ', 'route_id', 'categ_id', 'Product Categories' -
company_idMany2one → res.companydefault=<expr>help='Leave this field empty if this route is shared between all companies'index=True args: 'res.company', 'Company' -
nameCharrequired=Truetranslate=True args: 'Route' -
package_type_selectableBooleanhelp='When checked, the route will be selectable on package types' args: 'Applicable on Package Type' -
product_categ_selectableBooleanhelp='When checked, the route will be selectable on the Product Category.' args: 'Applicable on Product Category' -
product_idsMany2many → product.templatecheck_company=Truecopy=False args: 'product.template', 'stock_route_product', 'route_id', 'product_id', 'Products' -
product_selectableBooleandefault=Truehelp='When checked, the route will be selectable in the Inventory tab of the Product form.' args: 'Applicable on Product' -
rule_idsOne2many → stock.rulecopy=True args: 'stock.rule', 'route_id', 'Rules' -
sequenceIntegerdefault=0 args: 'Sequence' -
supplied_wh_idMany2one → stock.warehouseindex='btree_not_null' args: 'stock.warehouse', 'Supplied Warehouse' -
supplier_wh_idMany2one → stock.warehouseindex='btree_not_null' args: 'stock.warehouse', 'Supplying Warehouse' -
warehouse_domain_idsOne2many → stock.warehousecompute='_compute_warehouses' args: 'stock.warehouse' -
warehouse_idsMany2many → stock.warehousecopy=Falsedomain="[('id', 'in', warehouse_domain_ids)]" args: 'stock.warehouse', 'stock_route_warehouse', 'route_id', 'warehouse_id', 'Warehouses' -
warehouse_selectableBooleanhelp='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'
-
write(self, vals)
New fields (22)
-
actionSelectiondefault='pull'index=Truerequired=Trueselection=[('pull', 'Pull From'), ('push', 'Push To'), ('pull_push', 'Pull & Push')]string='Action' -
activeBooleandefault=Truehelp='If unchecked, it will allow you to hide the rule without removing it.' args: 'Active' -
autoSelectiondefault='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=Truestring='Automatic Move' args: [('manual', 'Manual Operation'), ('transparent', 'Automatic No Step Added')] -
company_idMany2one → res.companydefault=<expr>domain="[('id', '=?', route_company_id)]"index=True args: 'res.company', 'Company' -
delayIntegerdefault=0help='The expected date of the created transfer will be computed based on this lead time.' args: 'Lead Time' -
location_dest_from_ruleBooleandefault=Falsehelp='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_idMany2one → stock.locationcheck_company=Trueindex=Truerequired=True args: 'stock.location', 'Destination Location' -
location_src_idMany2one → stock.locationcheck_company=Trueindex=True args: 'stock.location', 'Source Location' -
nameCharhelp='This field will fill the packing origin and the name of its moves'required=Truetranslate=True args: 'Name' -
partner_address_idMany2one → res.partnercheck_company=Truehelp='Address where goods should be delivered. Optional.' args: 'res.partner', 'Partner Address' -
picking_type_code_domainJsoncompute='_compute_picking_type_code_domain' -
picking_type_idMany2one → stock.picking.typecheck_company=Truedomain="[('code', 'in', picking_type_code_domain)] if picking_type_code_domain else []"required=True args: 'stock.picking.type', 'Operation Type' -
procure_methodSelectiondefault='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=Truestring='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_cancelBooleandefault=Falsehelp='When ticked, if the move created by this rule is cancelled, the next move will be cancelled too.' args: 'Cancel Next Move' -
propagate_carrierBooleandefault=Falsehelp='When ticked, carrier of shipment will be propagated.' args: 'Propagation of carrier' -
push_domainCharargs: 'Push Applicability' -
route_company_idMany2onerelated='route_id.company_id'string='Route Company' -
route_idMany2one → stock.routeindex=Trueondelete='cascade'required=True args: 'stock.route', 'Route' -
route_sequenceIntegercompute_sudo=Truerelated='route_id.sequence'store=True args: 'Route Sequence' -
rule_messageHtmlcompute='_compute_action_message' -
sequenceIntegerdefault=20 args: 'Sequence' -
warehouse_idMany2one → stock.warehousecheck_company=Trueindex=True args: 'stock.warehouse', 'Warehouse'
-
default_get(self, fields)@api.model -
run(self, procurements, raise_user_error=True)@api.modelFulfil `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.modelCall 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_variantsBooleandefault=Falserequired=True args: 'Has variants' -
product_idMany2one → product.productrequired=Truestring='Product' args: 'product.product' -
product_tmpl_idMany2one → product.templaterequired=Truestring='Product Template' args: 'product.template' -
warehouse_idsMany2many → stock.warehousehelp='Show the routes that apply on selected warehouses.'required=Truestring='Warehouses' args: 'stock.warehouse'
-
default_get(self, fields)@api.model -
print_report(self)
New fields (3)
-
colorIntegerdefault=3947580string='Color' -
nameCharrequired=Truestring='Name'translate=True -
sequenceIntegerdefault=10
No public methods.
New fields (9)
-
allow_new_productSelectiondefault='mixed'required=True args: [('empty', 'If the location is empty'), ('same', 'If all products are same'), ('mixed', 'Allow mixed products')] -
capacity_idsOne2many → stock.storage.category.capacitycopy=True args: 'stock.storage.category.capacity', 'storage_category_id' -
company_idMany2one → res.companyargs: 'res.company', 'Company' -
location_idsOne2many → stock.locationargs: 'stock.location', 'storage_category_id' -
max_weightFloatdigits='Stock Weight' args: 'Max Weight' -
nameCharrequired=True args: 'Storage Category' -
package_capacity_idsOne2many → stock.storage.category.capacitycompute='_compute_storage_capacity_ids'inverse='_set_storage_capacity_ids' args: 'stock.storage.category.capacity' -
product_capacity_idsOne2many → stock.storage.category.capacitycompute='_compute_storage_capacity_ids'inverse='_set_storage_capacity_ids' args: 'stock.storage.category.capacity' -
weight_uom_nameCharcompute='_compute_weight_uom_name'string='Weight unit'
No public methods.
New fields (6)
-
company_idMany2one → res.companyrelated='storage_category_id.company_id' args: 'res.company', 'Company' -
package_type_idMany2one → stock.package.typecheck_company=Trueindex='btree_not_null'ondelete='cascade' args: 'stock.package.type', 'Package Type' -
product_idMany2one → product.productcheck_company=Truedomain="[('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' -
quantityFloatrequired=True args: 'Quantity' -
storage_category_idMany2one → stock.storage.categoryindex=Trueondelete='cascade'required=True args: 'stock.storage.category' -
uom_idMany2onerelated='product_id.uom_id'
No public methods.
New fields (0)
No new fields.
Public methods (5)-
get_expanded_lines(self, given_context=None)@api.model -
get_lines(self, line_type=None, **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)
-
activeBooleandefault=True args: 'Active' -
codeCharcopy=<expr>help='Short name used to identify your warehouse'required=True args: 'Short Name' -
company_idMany2one → res.companydefault=<expr>help='The company is automatically set from your user preferences.'readonly=Truerequired=True args: 'res.company', 'Company' -
delivery_route_idMany2one → stock.routecopy=Falseondelete='restrict' args: 'stock.route', 'Delivery Route' -
delivery_stepsSelectiondefault='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_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'In Type' -
int_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Internal Type' -
lot_stock_idMany2one → stock.locationcheck_company=Truedomain="[('usage', '=', 'internal'), ('company_id', '=', company_id)]"required=True args: 'stock.location', 'Location Stock' -
mto_pull_idMany2one → stock.rulecopy=False args: 'stock.rule', 'MTO rule' -
nameChardefault=_default_namerequired=True args: 'Warehouse' -
out_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Out Type' -
pack_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Pack Type' -
partner_idMany2one → res.partnercheck_company=Truedefault=<expr> args: 'res.partner', 'Address' -
pick_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Pick Type' -
qc_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Quality Control Type' -
reception_route_idMany2one → stock.routecopy=Falseondelete='restrict' args: 'stock.route', 'Receipt Route' -
reception_stepsSelectiondefault='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_idsOne2many → stock.routecopy=Falsehelp='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_idsMany2many → stock.warehousehelp='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_idsMany2many → stock.routecheck_company=Truecopy=Falsedomain="[('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' -
sequenceIntegerdefault=10help='Gives the sequence of this line when displaying the warehouses.' -
store_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Storage Type' -
view_location_idMany2one → stock.locationcheck_company=Truedomain="[('usage', '=', 'view'), ('company_id', '=', company_id)]"index=Truerequired=True args: 'stock.location', 'View Location' -
wh_input_stock_loc_idMany2one → stock.locationcheck_company=True args: 'stock.location', 'Input Location' -
wh_output_stock_loc_idMany2one → stock.locationcheck_company=True args: 'stock.location', 'Output Location' -
wh_pack_stock_loc_idMany2one → stock.locationcheck_company=True args: 'stock.location', 'Packing Location' -
wh_qc_stock_loc_idMany2one → stock.locationcheck_company=True args: 'stock.location', 'Quality Control Location' -
xdock_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Cross Dock Type'
-
action_open_internal_locations(self) -
action_view_all_routes(self) -
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 (37)
-
activeBooleandefault=Truehelp='If the active field is set to False, it will allow you to hide the orderpoint without removing it.' args: 'Active' -
allowed_location_idsOne2many → stock.locationcomodel_name='stock.location'compute='_compute_allowed_location_ids' -
allowed_replenishment_uom_idsMany2many → uom.uomcompute='_compute_allowed_replenishment_uom_ids' args: 'uom.uom' -
company_idMany2one → res.companydefault=<expr>index=Truerequired=True args: 'res.company', 'Company' -
daily_demandFloatdefault=0.0digits='Product Unit'readonly=Falserequired=Truestore=True args: 'Daily Demand' -
days_to_orderFloatcompute='_compute_days_to_order'help='Numbers of days in advance that replenishments demands are created.' -
deadline_dateDatecompute='_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=Truestore=True args: 'Deadline' -
effective_route_idMany2one → stock.routecompute='_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_daysFloatcompute='_compute_lead_days' -
lead_horizon_dateDatecompute='_compute_lead_days' -
location_idMany2one → stock.locationcheck_company=Truecompute='_compute_location_id'index=Trueondelete='cascade'precompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Location' -
min_max_based_onSelectiondefault='one_month'help='Estimate the daily average future demand volume based on past period or choose Custom Demand to enter manually average daily demand.'required=Trueselection=[('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'), ('custom', 'Custom Demand')]string='Based on' -
min_max_based_on_factorIntegerdefault=100required=True -
nameCharcopy=Falsedefault=<expr>readonly=Truerequired=True args: 'Name' -
product_category_idMany2one → product.categoryname='Product Category'related='product_id.categ_id' args: 'product.category' -
product_idMany2one → product.productcheck_company=Truedomain="[('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=Trueondelete='cascade'required=True args: 'product.product', 'Product' -
product_max_qtyFloatcompute='_compute_product_max_qty'default=0.0digits='Product Unit'help="Forecasted stock level when replenishing.\nAutomatically calculated as = Min + Max (Order frequency x Daily Demand x Growth factor, MoQ) with MoQ = Minimum quantity from vendor pricelist / BOM.\nWon't be reached by on Hand stock if unforecasted demand is delivered while waiting for arrival."readonly=Falserequired=Truestore=True args: 'Max Quantity' -
product_min_qtyFloatdefault=0.0digits='Product Unit'help='Minimum Forecasted stock level that will trigger a replenishment.\nA safety stock is included in the min to cover unusual situations if days of demand covered by the Minimum Level is > Replenishment Lead Times - Availability Time.'required=True args: 'Min Quantity' -
product_tmpl_idMany2one → product.templaterelated='product_id.product_tmpl_id' args: 'product.template' -
product_uom_nameCharreadonly=Truerelated='uom_id.display_name'string='Product unit of measure label' -
qty_forecastFloatcompute='_compute_qty'digits='Product Unit'readonly=True args: 'Forecast' -
qty_on_handFloatcompute='_compute_qty'digits='Product Unit'readonly=True args: 'On Hand' -
qty_to_orderFloatcompute='_compute_qty_to_order'digits='Product Unit'inverse='_inverse_qty_to_order'search='_search_qty_to_order' args: 'To Order' -
qty_to_order_computedFloatcompute='_compute_qty_to_order_computed'digits='Product Unit'store=True args: 'To Order Computed' -
qty_to_order_manualFloatdigits='Product Unit' args: 'To Order Manual' -
qty_to_order_to_maxFloatcompute='_compute_qty_to_order_to_max'digits='Product Unit' args: 'To Order to Reach Max' -
replenishment_uom_idMany2one → uom.uomdomain="[('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_placeholderCharcompute='_compute_replenishment_uom_id_placeholder' -
route_idMany2one → stock.routedomain="['|', ('product_selectable', '=', True), ('rule_ids.action', 'in', ['buy', 'manufacture'])]"inverse='_inverse_route_id'string='Route' args: 'stock.route' -
route_id_placeholderCharcompute='_compute_route_id_placeholder' -
rule_idsMany2many → stock.rulecompute='_compute_rules'string='Rules used' args: 'stock.rule' -
show_supply_warningBooleancompute='_compute_show_supply_warning' -
snoozed_untilDatehelp='Hidden until next scheduler.' args: 'Snoozed' -
triggerSelectiondefault='auto'required=Truestring='Trigger' args: [('auto', 'Auto'), ('manual', 'Manual')] -
unwanted_replenishBooleancompute='_compute_unwanted_replenish' args: 'Unwanted Replenish' -
uom_idMany2one → uom.uomrelated='product_id.uom_id' args: 'uom.uom', 'Unit' -
warehouse_idMany2one → stock.warehousecheck_company=Truecompute='_compute_warehouse_id'index=Trueondelete='cascade'precompute=Truereadonly=Falserequired=Truestore=True args: 'stock.warehouse', 'Warehouse'
-
action_open_orderpoints(self)@api.model -
action_product_forecast_report(self) -
action_remove_manual_qty_to_order(self) -
action_replenish(self) -
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_idMany2one → stock.locationdomain="[('usage', '=', 'internal')]"required=True args: 'stock.location', 'Location' -
product_idMany2one → product.productrequired=True args: 'product.product', 'Product' -
product_uom_nameCharrequired=True args: 'Unit' -
quant_idsMany2many → stock.quantcompute='_compute_quant_ids' args: 'stock.quant' -
quantityFloatrequired=Truestring='Quantity'
-
action_done(self)
New fields (1)
-
scrap_move_idMany2one → stock.moveargs: 'stock.move', 'Scrap'
-
action_cancel(self) -
action_done(self)
New fields (1)
-
picking_idsMany2many → stock.pickingargs: 'stock.picking'
-
process(self) -
process_without_zero_moves(self)
New fields (2)
-
package_type_idMany2one → stock.package.typestring='Package Type' args: 'stock.package.type' -
route_idsMany2manyhelp='Routes propagated from the package type'related='package_type_id.route_ids'string='Routes'
-
write(self, vals)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…