Skip to main content
iVentureTeam

Odoo 20 Inventory Release Notes

All 22 Inventory changes from the official Odoo 20 release notes, explained in plain words with a screenshot from a live Odoo 20 database, plus where to find each one and what it means for your upgrade.

Planning the move? See our Odoo upgrade services, the Odoo 20 upgrade guide or get a number from the migration cost calculator.

New feature 6Enhancement 15Removal 1In Community 20Enterprise only 2
Type
Edition

Change 1 of 22

Allocation report

EnhancementCommunity

The allocation flow has been improved with the ability to allocate directly from the forecast report and a new design of the allocation report.

Official Odoo 20 release note

In plain words

When an incoming receipt covers an outgoing delivery, the forecast report now shows an Assign link on that line. One click links the receipt to the delivery (and Unassign undoes it). The old reception report is replaced by a new allocation report, opened from the Allocation button on transfers, and the operation type decides when it pops up.

Inventory > Products > Products > (product) > ForecastedThe Assign link on a forecast line links the incoming receipt WH/IN/00021 to the delivery WH/OUT/00092.

Where to find it

  1. Create a receipt and a delivery for the same product and confirm both.
  2. Open the product and click the Forecasted smart button.
  3. Click Assign on the delivery line that is covered by the receipt.

For users

Planners can link a receipt to a waiting delivery straight from the forecast report, and see allocations in a new report.

For developers

New model stock.allocation.report (client action tag allocation_report) with action_assign; picking type field auto_show_allocation_report and allocated_location_id.

Upgrading from Odoo 19

Customizations of the old reception report (report_reception) need to be moved to the new allocation report.

Change 2 of 22

CMR document

New featureCommunity

Download a CMR (Convention on the Contract for the International Carriage of Goods by Road) from deliveries that is prefilled based on information from the transfer.

Official Odoo 20 release note

In plain words

The Transport Management app (stock_fleet) adds a "Consignment Note (CMR)" PDF to the Print menu of delivery orders and dispatch batches. It fills in sender, consignee, places, goods rows with packages, HS codes, weight and volume from the transfer. It can also be printed automatically on validation and from the Barcode app.

Inventory > Operations > Deliveries > (delivery) > Print > Consignment Note (CMR)The CMR for WH/OUT/00093: the goods rows are filled from the transfer (10 Units of Ceramic Vase, HS code 691390, gross weight 15 kg). Sender, consignee and places above are also taken from the transfer.

Where to find it

  1. Inventory > Configuration > Settings > Shipping: enable Transport Management.
  2. Open a delivery order > Print > Consignment Note (CMR).

For users

Road carriers get a ready CMR from the delivery instead of filling the paper form by hand.

For developers

New report actions stock_fleet.action_report_cmr (stock.picking) and action_report_cmr_batch (stock.picking.batch), both limited to outgoing operations.

Upgrading from Odoo 19

None; enable Transport Management to get it.

Change 3 of 22

Company-specific customer lead times

EnhancementCommunity

Customer lead time for a product can now be different for each company.

Official Odoo 20 release note

In plain words

The product's Delivery Time (customer lead time, sale_delay) is now a company-dependent field. Each company can store its own number of days, and sales order lines use the value of the order's company.

Inventory > Products > Products > (product) > Inventory tabDelivery Time shows 3 days in My Company (San Francisco); the same product stores 7 days for My Company (Chicago).

Where to find it

  1. Open a product > Inventory tab.
  2. Set Delivery Time, switch company, and set a different value.

For users

San Francisco can promise 3 days while Chicago promises 7 days for the same product.

For developers

sale_delay moved from stock to sale and is company_dependent=True; read it with the right company in the environment.

Upgrading from Odoo 19

Existing values become the value of the current company; check other companies after upgrade. Code reading product.sale_delay in stock must now depend on sale.

Change 4 of 22

Intercompany flows

EnhancementCommunity + Enterprise

Part 1

Intercompany flows have been improved: Use routes to resupply one company from another.

Official Odoo 20 release note

In plain words

A warehouse's Resupply From list now accepts warehouses of other companies. Odoo creates a resupply route through the Inter-company transit location, and it can be used on products and reordering rules like any other route.

Inventory > Operations > ReplenishmentA San Francisco reordering rule uses the route "Supply Product from My Company (Chicago)" created by ticking the Chicago warehouse in Resupply From.

Part 2

Deliver a sales order from another company's warehouse (or use another company's pickup points).

Official Odoo 20 release note

In plain words

The Warehouse of a sales order can now be a warehouse of another allowed company. The delivery is created in that company while the order stays in yours. The same change lets eCommerce Click and Collect use pickup points of other companies.

Sales > Orders > (order) > Other InfoA San Francisco sales order delivered from the My Company (Chicago) warehouse.

Part 3

Valuation costs of transferred products are properly transferred between companies.

Official Odoo 20 release note

In plain words

When goods move from one company to another, the receipt in the receiving company is valued with the cost of the delivery in the sending company, instead of the receiving company's own cost.

Inventory > Reporting > Moves AnalysisChicago's delivery to transit is valued at -48.00 and the San Francisco receipt from transit takes the same 48.00.

Part 4

Updates of linked sales and purchase orders (price, quantity, etc.) are properly communicated to the other company.

Official Odoo 20 release note

In plain words

When a linked purchase or sales order changes (quantity, price, discount, new lines, cancellation), the other company's order is updated and a note in its chatter lists what changed.

Sales > Orders > (inter-company order) > chatterAfter the linked purchase order changed, the Chicago sales order was updated and its chatter lists the new quantity and unit price.

Where to find it

  1. Warehouse > Resupply From: tick a warehouse of another company; use the created route in a reordering rule.
  2. Sales order > Other Info > Warehouse: pick another company's warehouse and confirm.
  3. Inventory > Reporting > Moves Analysis with both companies selected, Value column shown.
  4. Enable Generate Sales Orders for the other company, confirm a PO to it, then change the PO quantity or price.

For users

Multi-company groups can replenish from, and ship from, each other's warehouses, with correct stock values and synced orders.

For developers

sale.order.warehouse_id lost check_company (domain on allowed companies); resupply_wh_ids no longer restricted to the same company; stock.location is_valued_internal/is_valued_external replaced by is_valued; new templates updated_vals_interco_so_po, added_lines_interco_so_po, cancelled_interco_so_po.

Upgrading from Odoo 19

Custom code using is_valued_internal/is_valued_external or assuming the SO warehouse belongs to the SO company must be adapted.

Change 5 of 22

Inventory at a past date

EnhancementCommunity

Use the new date picker in the stock report to consult an improved overview of inventory at a past date that preserves any filters and allows a precise timestamp.

Official Odoo 20 release note

In plain words

The Stock report now has an "Inventory at Date" section at the top of its side panel. Pick a date and time and the list recomputes quantities and values at that moment, keeping the current filters and category selection. "Current stock" goes back to today.

Inventory > Reporting > StockThe Inventory at Date picker with a precise timestamp, while the FIFO Goods category filter stays applied.

Where to find it

  1. Inventory > Reporting > Stock.
  2. Select a category in the side panel.
  3. Set a date and time in Inventory at Date.

For users

No more separate "Inventory at Date" wizard; the date is picked in place with a precise time.

For developers

Search panel of the stock report (stock_report_list_view) passes the chosen datetime as context to the product quantity computation.

Upgrading from Odoo 19

Bookmarks or custom actions that relied on the old at-date wizard should use the report's date picker.

Change 6 of 22

Inventory valuation: COGS update

EnhancementCommunity

When a product's cost changes after it has been delivered/used (for example, via a landed cost, because the bill price was different from the purchase price), the delivery's value (and the invoice cost, when using perpetual accounting) is updated retroactively.

Official Odoo 20 release note

In plain words

If the value of an incoming move changes after its goods were already delivered, Odoo replays the valuation. The delivery's value is recomputed, and with perpetual accounting the COGS lines of the posted customer invoice are updated in place.

Inventory > Reporting > Moves AnalysisThe delivery WH/OUT/00093 was valued at -100.00 when shipped; after a 50.00 landed cost on its receipt it is now -150.00.

Where to find it

  1. FIFO product: receive 10 at 10.00, deliver 10.
  2. Create a landed cost of 50.00 on the receipt and validate it.
  3. Inventory > Reporting > Moves Analysis, show the Value column.

For users

Late costs such as freight or price differences flow into the cost of what was already sold.

For developers

stock.move.write() calls cogs_aml_ids._set_cogs() when value changes; _set_value() replays valuation from the earliest impacted date for already-sold incoming moves.

Upgrading from Odoo 19

Custom COGS logic on account.move.line should hook into _set_cogs / _get_cogs_value.

  • The screenshot shows the retroactive delivery value; the invoice COGS update needs a posted invoice with perpetual valuation and is not shown.

Change 7 of 22

Landed costs for specific products

EnhancementCommunity

Add landed costs to individual products of a transfer.

Official Odoo 20 release note

In plain words

Each landed cost line has a new "Apply On" field. Leave it empty to spread the cost over all products of the transfer, or pick products so that only they get the cost. A landed cost product can also carry a default "Apply On" list.

Inventory > Operations > Landed CostsImport Duties applies only to Brass Desk Lamp; Freight Charges (empty Apply On) is spread over all products.

Where to find it

  1. Inventory > Operations > Landed Costs > New.
  2. Pick the receipt, add cost lines, set Apply On on one line.
  3. Compute and validate.

For users

Import duties or special handling can be charged to only the items they concern.

For developers

New fields stock.landed.cost.lines.apply_on_product_ids and product.template.landed_cost_on_product_ids; compute_landed_cost skips moves of other products.

Upgrading from Odoo 19

No data change; existing lines keep applying to all products.

Change 8 of 22

Location-specific push routes

EnhancementCommunity

Create push routes based on the specific destination of the product. For example, decide your product should follow route A if you receive it in WH/Input/A, and route B if you receive it in WH/Input/B.

Official Odoo 20 release note

In plain words

Push rules are now chosen per move line, from the location where each line actually lands. If one receipt puts some units in Gate A and others in Gate B, each group follows the push rule of its own sub-location.

Inventory > Configuration > RoutesTwo push rules in one route: goods received in Gate A go to Shelf 1, goods received in Gate B go to Shelf 2.

Where to find it

  1. Inventory > Configuration > Routes > New.
  2. Add Push To rules with different sub-locations as Source Location.
  3. Receive products into those sub-locations.

For users

Put-away can depend on which dock or zone the goods were received in.

For developers

stock.move._push_apply() groups move_line_ids by (location_dest_id, result_package_id) and calls stock.rule._get_push_rule() per group.

Upgrading from Odoo 19

Overrides of _push_apply that assumed one rule per move must be revised.

Change 9 of 22

Picking notifications

New featureCommunity

Subscribe to notifications about a transfer's status.

Official Odoo 20 release note

In plain words

Transfers have a new follower subtype, "Transfer Status". Followers who tick it are notified when the transfer is validated or cancelled, and when a backorder or partial delivery message is posted.

Inventory > Operations > Transfers > (transfer) > Followers > Edit Notification PreferencesThe new Transfer Status subtype in a delivery's notification preferences.

Where to find it

  1. Open a transfer.
  2. Chatter > Followers > bell icon (Edit Notification Preferences).
  3. Tick Transfer Status and Update.

For users

Salespeople or customers following a delivery can get told when it ships or is cancelled.

For developers

New subtype stock.mt_picking_state; _track_log_get_default_subtype returns it for state changes to done/cancel.

Upgrading from Odoo 19

None.

Change 10 of 22

Preview Barcode instructions in operation type

EnhancementEnterprise only

Preview the Barcode instructions that are indicated to the operator based on the chosen configurations directly from the operation type.

Official Odoo 20 release note

In plain words

The Barcode App tab of an operation type now shows an "Instructions Preview": the numbered steps the operator will see in the Barcode app. It updates when you change the mandatory scan options.

Inventory > Configuration > Operation Types > Receipts > Barcode AppThe Instructions Preview lists the scan steps shown to the operator for Receipts.

Where to find it

  1. Inventory > Configuration > Operation Types > Receipts.
  2. Open the Barcode App tab.

For users

Managers see what workers will be asked to scan before rolling out a setting.

For developers

New computed Html field stock.picking.type.instructions_preview built from _compute_instructions_steps().

Upgrading from Odoo 19

None.

Change 11 of 22

Product packaging barcodes

EnhancementCommunity

Access and manage product packaging barcodes more easily from the product form.

Official Odoo 20 release note

In plain words

Under Packagings on the product's Sales tab, a new "Barcodes" link opens the list of packaging barcodes for all variants of the product, where they can be added and edited.

Inventory > Products > Products > (product) > Sales tabThe Barcodes link under Packagings opens the product's packaging barcodes.

Where to find it

  1. Open a goods product with Units of Measure enabled.
  2. Sales tab > Packagings > Barcodes.

For users

Packaging barcodes are one click away from the product.

For developers

New method product.template.action_open_packaging_barcodes() opening product.product_uom_action_view_list filtered on the variants.

Upgrading from Odoo 19

None.

Change 12 of 22

Product replenishment

EnhancementCommunity

The "Order" and "Order to max" buttons have been consolidated into a single "Order" button in the replenishment dashboard. When reordering products in advance (i.e., selecting products without the "To reorder" filter), the order quantity is calculated as the max quantity minus the forecast quantity.

Official Odoo 20 release note

In plain words

The Replenishment list now has one Order button instead of an Order dropdown with Order and Order To Max. Select any products, even ones that do not need a reorder yet, and click Order: Odoo orders enough to bring the forecast up to the Max quantity. A quantity you typed yourself in To Order still wins.

Inventory > Operations > ReplenishmentThree products are selected, two of them with nothing to reorder yet. The single Order button replaces the old Order / Order To Max dropdown.

Where to find it

  1. Inventory > Operations > Replenishment
  2. Remove the default filter and tick a few products
  3. The single Order button appears next to Snooze and Suggest

For users

One Order button. Ordering ahead of time tops the stock up to Max instead of ordering nothing.

For developers

action_replenish() now sets qty_to_order to qty_to_order_manual or qty_to_order_to_max (max(0, Max minus Forecast), rounded to the multiple). onClickOrder() no longer takes a to_max flag.

Upgrading from Odoo 19

Custom code calling onClickOrder(true) or patching the Order dropdown in stock.StockOrderpoint.listView must be adapted.

Change 13 of 22

Sendcloud: package reference

EnhancementEnterprise only

The package reference from Odoo is now sent to Sendcloud so it can be displayed on the labels of carriers that support package references.

Official Odoo 20 release note

In plain words

When Odoo creates a Sendcloud parcel, the order number it sends is now built from the sales order name plus the package name (or the transfer name when nothing is packed), joined by a dash. Carriers that print a reference show it on the label, so each parcel of a multi-package shipment can be told apart.

Where to find it

  1. Configure a Sendcloud carrier with a live account
  2. Put the products of a delivery in packages and validate
  3. The label shows the order and package reference

For users

Parcel labels carry a reference that matches the Odoo sales order and package.

For developers

SendcloudService._prepare_parcel() sets order_number with the new helper _get_unique_order_number_reference(picking, pkg_name).

Upgrading from Odoo 19

None. Code that overrides _prepare_parcel and expects order_number to be the plain order name should be checked.

  • Text only: the change is in the data sent to the Sendcloud API and printed by the carrier on its label; nothing new appears in an Odoo screen, and this database has only dummy Sendcloud keys, so no label can be generated.

Change 14 of 22

Sendcloud: pickup points

New featureCommunity + Enterprise

Pickup points proposed by Sendcloud carriers can now be selected directly from a sales order or a transfer. These can also be corrected after an eCommerce order has been placed.

Official Odoo 20 release note

In plain words

When the delivery method is a Sendcloud service that delivers to pickup points, the sales order shows a Pickup Point field with an edit button instead of the Delivery Address. The same field appears on the delivery transfer and in the Add Shipping dialog, so the point can be chosen or changed in the backend, also after an eCommerce order.

Sales > Orders > S00076With a Sendcloud pickup point service, the quotation shows a Pickup Point field; the pencil button opens the pickup point selector.

Where to find it

  1. Sales > Orders, create a quotation
  2. Set a Sendcloud delivery method that uses service points
  3. The Pickup Point field with its edit button replaces Delivery Address

For users

Salespeople and warehouse staff can pick or fix the pickup point on the order or the delivery.

For developers

New support_pickup_locations on delivery.carrier (true when <delivery_type>_use_locations is set) and is_pickup_required on sale.order, stock.picking and choose.delivery.carrier; new pickup_location_many2one widget.

Upgrading from Odoo 19

None for standard flows. Other carrier connectors get the backend selector by providing <type>_use_locations and _<type>_get_close_locations.

  • The edit button opens the location selector, which asks Sendcloud for nearby points; this database has dummy Sendcloud keys, so the shot shows the field, not the map. A demo Sendcloud shipping product with a service point last mile was created so the carrier supports pickup points.

Change 15 of 22

Simplified returns

RemovalCommunity + Enterprise

The return wizard has been removed, and the returns process has been simplified.

Official Odoo 20 release note

In plain words

Clicking Return on a done transfer no longer opens a wizard. Odoo directly creates a draft return transfer with the products at zero. Use Return All to fill in the delivered quantities, Clear to reset them, or type the quantities per line, then validate.

Inventory > Deliveries > WH/OUT/00094 > ReturnReturn created the draft transfer WH/IN/00025 right away. The Clear and Return All buttons set the quantities to return.

Where to find it

  1. Inventory > Operations > Deliveries, open a done delivery
  2. Click Return
  3. A draft return transfer opens with Clear and Return All buttons

For users

One click creates the return; quantities are set on the return transfer itself.

For developers

stock.return.picking and stock.return.picking.line are removed. New stock.picking methods: action_return(), action_return_all(), action_clear_return(), action_exchange(), _create_return(), _prepare_return_move_default_values().

Upgrading from Odoo 19

Custom modules that inherit or call stock.return.picking (or its views) break and must move their logic to stock.picking._create_return() and related hooks.

  • Odoo 19 has addons/stock/wizard/stock_picking_return.py (model stock.return.picking); Odoo 20 has no such file and the model is gone from stock and the Enterprise modules that extended it.

Change 16 of 22

Stock aging report

New featureCommunity

Access a stock aging report from the "Moves Analysis" pivot view.

Official Odoo 20 release note

In plain words

Moves Analysis has a new saved favorite, Aging Report. It groups incoming and outgoing moves by product category and product, spreads them by month, and shows the remaining quantity and remaining value, so you can see how old the stock still on hand is.

Inventory > Reporting > Moves Analysis (pivot)The Aging Report favorite is applied: rows by category and product, columns by month, measures Remaining Quantity and Remaining Value.

Where to find it

  1. Inventory > Reporting > Moves Analysis
  2. Switch to the pivot view
  3. Open the search panel and pick Favorites > Aging Report

For users

A ready-made aging view in Inventory > Reporting > Moves Analysis.

For developers

New ir.filters record stock_account.filter_stock_move_aging_report on stock.stock_move_action with pivot measures remaining_qty and remaining_value.

Upgrading from Odoo 19

None.

  • The demo data has few valued receipts, so most cells show zero.

Change 17 of 22

Suggested stock levels for reordering rules

New featureCommunity

Minimum and maximum stock levels for reordering rules are now suggested based on demand history, desired minimum days of coverage, and order frequency.

Official Odoo 20 release note

In plain words

Select reordering rules in Replenishment and click Suggest. Choose the demand period (last 7 days, last 30 days, same month last year, and so on) and a percentage factor, then Update: Odoo recomputes the daily demand and sets new Min and Max levels so they keep the days of coverage and order frequency defined for each product.

Inventory > Operations > Replenishment > SuggestThe Suggest Min-Max dialog: demand period and percentage factor used to recompute Min and Max for the selected rules.

Where to find it

  1. Inventory > Operations > Replenishment
  2. Select some rules
  3. Click Suggest, pick the demand period and factor, click Update

For users

Min and Max no longer need to be worked out by hand from past sales.

For developers

New transient model stock.orderpoint.suggest; new orderpoint fields daily_demand, min_max_based_on, min_max_based_on_factor and method _get_daily_demand(); new Suggest button in the list controller.

Upgrading from Odoo 19

None; new fields have defaults.

Change 18 of 22

Traceability Report

EnhancementCommunity

The Traceability Report has been improved to display upstream and downstream lot/serial numbers in a single report. Final lot locations are highlighted, while intermediary locations are dimmed.

Official Odoo 20 release note

In plain words

The report for a lot now shows where it went and where it came from in one tree. Here lot TT001 of Table Top was consumed by a manufacturing order that produced Table T0002. The location where stock actually sits (WH/Stock for T0002) is shown in normal text, while the other locations are greyed out.

Inventory > Lots/Serial Numbers > TT001 > TraceabilityDownstream lot T0002 and upstream lot TT001 in one report; WH/Stock where T0002 is stored is not dimmed, the other locations are.

Where to find it

  1. Inventory > Products > Lots/Serial Numbers, open TT001
  2. Click the Traceability smart button
  3. Click Unfold

For users

Faster answers in recalls: one report shows components and finished goods, and where they are now.

For developers

stock.traceability.report was refactored (_get_linked_move_lines merged, simpler _get_lot_lines); lines carry highlight_destination and locations get the o_stock_reports_dim class.

Upgrading from Odoo 19

Custom code overriding the traceability report methods should be checked against the refactor.

Change 19 of 22

Variant-specific HS codes

EnhancementCommunity

HS (harmonized system) codes are now set at the level of product variants.

Official Odoo 20 release note

In plain words

The HS Code is now stored on each variant. Open a variant and set its own code in the Inventory tab. On the product template the field still shows and edits the code when there is only one variant.

Product Variant > Conference Chair (Steel) > InventoryThe HS Code on the Steel variant (9401.71); the Aluminium variant has its own code.

Where to find it

  1. Inventory > Products > Product Variants, open Conference Chair (Steel)
  2. Inventory tab, Logistics section

For users

Customs documents can use a different code per variant (for example steel versus aluminium legs).

For developers

hs_code is a stored field on product.product; product.template.hs_code becomes computed (_compute_variant_hs_code) with an inverse to the single variant.

Upgrading from Odoo 19

The value now lives on product.product. Custom code reading product_tmpl_id.hs_code for products with several variants should read the variant field. A data migration script for this is not in the supplied source.

Change 20 of 22

Variant-specific packagings

EnhancementCommunity

Different packagings can be added for specific variants.

Official Odoo 20 release note

In plain words

A variant form has a new Extra Packagings field in the Sales tab. Packagings added there apply only to that variant, on top of the packagings of the product template. Here only the Aluminium chair can be sold by Pack of 6.

Product Variant > Conference Chair (Aluminium) > SalesExtra Packagings on the Aluminium variant holds Pack of 6, a packaging only this variant uses.

Where to find it

  1. Settings: Units of Measure & Packagings enabled
  2. Open a product variant, Sales tab
  3. Add a packaging in Extra Packagings

For users

Sell or buy one variant in a pack size that other variants do not use.

For developers

New Many2many product.product.extra_uom_ids; product.product._get_available_uoms() returns the template packagings plus extra_uom_ids, and purchase lines and stock moves depend on it.

Upgrading from Odoo 19

None; the field is new and empty by default.

Change 21 of 22

Vendor purchase reference

EnhancementCommunity

The vendor purchase reference now appears on receipt transfers to improve traceability and help warehouse operators identify the vendor from incoming transfers without having to refer to the related purchase order.

Official Odoo 20 release note

In plain words

When a purchase order has a Vendor Reference, the receipt's Source Document shows it after the PO number, for example P00024 - GF-INV-4471. Operators can match the goods with the vendor's paperwork without opening the purchase order.

Inventory > Receipts > WH/IN/00023Source Document shows the PO number followed by the vendor reference GF-INV-4471.

Where to find it

  1. Purchase > Orders, create a PO with a Vendor Reference and confirm
  2. Open the receipt

For users

Receipts show the vendor's reference in Source Document and are searchable by it.

For developers

PurchaseOrderLine._prepare_stock_moves() builds origin as "<PO name> - <partner_ref>" when partner_ref is set.

Upgrading from Odoo 19

Code that parses picking.origin to find the PO name should use purchase_id instead.

Change 22 of 22

ZPL location barcodes

New featureCommunity

Location barcode labels are now available in ZPL format.

Official Odoo 20 release note

In plain words

The Print menu of Locations now offers Location Barcode (ZPL) next to Location Barcode (PDF). The ZPL file can be sent straight to a Zebra label printer.

Inventory > Configuration > Locations > PrintThe Print menu of the location list with the new Location Barcode (ZPL) entry.

Where to find it

  1. Inventory > Configuration > Locations
  2. Select locations
  3. Print > Location Barcode (ZPL)

For users

Shelf labels can be printed on thermal label printers.

For developers

New template stock.location_barcode_zpl_label and server actions action_print_location_label_pdf / action_print_location_label_zpl calling stock.location.label.layout._process_location_labels(records, format).

Upgrading from Odoo 19

The Odoo 19 report action stock.action_report_location_barcode ("Location Barcode") is no longer defined; custom references to that XML ID must be updated.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 Inventory: common questions

What is new in Odoo 20 Inventory?

The official Odoo 20 release notes list 22 Inventory changes (6 new features, 15 enhancements, 1 removal). They include Allocation report, CMR document, Company-specific customer lead times, Intercompany flows and more.

Are the Odoo 20 Inventory changes available in Community edition?

20 of the 22 changes are in Odoo 20 Community (and Enterprise). 2 are Enterprise only. Each change on this page is labeled with its edition.

Do Odoo 20 Inventory changes affect my customizations when upgrading from Odoo 19?

13 of the 22 changes have something to check when upgrading from Odoo 19, for example Allocation report, Company-specific customer lead times, Intercompany flows. Each change on this page has an "Upgrading from Odoo 19" note. Test custom modules on a copy of your database before moving production.

How do I upgrade Inventory to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend Inventory, then test your main Inventory flows with real users before switching production. iVentureTeam runs Odoo upgrades end to end, including custom module migration and user testing.

Odoo services for this

By industry

More Odoo 20 release notes

Planning your Odoo 20 move

Want these Inventory changes in your database?

We upgrade Odoo databases with their customizations and data intact, and test every custom module against the new version before go-live.