Skip to main content
iVentureTeam

Odoo 20 Point of Sale Release Notes

All 20 Point of Sale 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 10Enhancement 7Refactoring 3In Community 17Enterprise only 3
Type
Edition

Change 1 of 20

Base unit price on product label

EnhancementCommunity

Display the product reference price on product labels.

Official Odoo 20 release note

In plain words

When the "Product Reference Price" option is on and a product has a base unit (for example 0.33 L), printed product labels now show the price per base unit (for example $ 6.67 /L) under the normal price.

Products > Print LabelsThe rendered product label: under the price, the new line shows the price per base unit ($ 6.67 per L for a 0.33 L can).

Where to find it

  1. Enable Product Reference Price (Point of Sale settings).
  2. Set a base unit quantity and unit on a product.
  3. Print its labels from the product (Print Labels).

For users

Shelf labels can show the reference price per unit (per L, per kg).

For developers

product.label.layout._prepare_label_values() adds secondary_value / secondary_value_suffix when product.group_show_uom_price is enabled. The base unit model moved from website_sale to product (product.base.unit).

Upgrading from Odoo 19

The base unit model moved to the product module; code referencing the website_sale model needs updating.

  • The label report was rendered as HTML and zoomed so the small label is readable.
  • Demo data: Coca-Cola was given a base unit of 0.33 L and the Product Reference Price option was enabled.

Change 2 of 20

Booking Kanban and pivot views

EnhancementEnterprise only

Bookings now have dedicated Kanban and pivot views.

Official Odoo 20 release note

In plain words

Bookings (appointment calendar events) now have a Kanban view, grouped by status, and a pivot view next to the calendar, Gantt and list views. The POS booking module (pos_appointment) extends the same Kanban for restaurant bookings.

Appointments > Resource Bookings > KanbanThe new booking Kanban: bookings grouped by status, each card with guest, time and booked resource.

Where to find it

  1. Appointments > Reporting or Bookings action.
  2. Switch to the Kanban view.

For users

Bookings can be followed as cards per status and analysed in a pivot table.

For developers

New views appointment.calendar_event_view_kanban (js_class appointment_calendar_event_kanban) and calendar_event_view_pivot; pos_appointment inherits the Kanban with js_class pos_kanban.

Upgrading from Odoo 19

None.

  • pos_appointment / pos_restaurant_appointment are not installed on this database, so the screenshot shows the base Kanban from the Appointments app that the POS view extends.

Change 3 of 20

Convert order lines into a combo

New featureCommunity + Enterprise

The POS now recommends converting order lines into combos when possible to simplify menu orders for big tables.

Official Odoo 20 release note

In plain words

When the lines of an order match a combo product, the POS shows a suggestion under the order (for example "1 Happy Hour Menu") with an Apply button. One click turns the separate lines into the combo, or lets you choose when several combos fit.

Point of Sale > Dashboard > Bar > Open RegisterAfter adding a Mojito and a Coca-Cola, the POS suggests the "Happy Hour Menu" combo with an Apply button.

Where to find it

  1. Create a combo product whose choices include products sold separately.
  2. In the POS, add those products to an order.

For users

Cashiers no longer need to rebuild an order to apply a menu price; the POS proposes it.

For developers

New ComboSuggestion helper (pos_store.comboSuggestion), OrderSummary.applyBestCombo() and pos_store.createComboFromLines(); ChoseComboPopup when several combos match.

Upgrading from Odoo 19

None.

  • Demo data: combo product "Happy Hour Menu" (Cocktail choice + Drinks) created for the Bar POS.

Change 4 of 20

Employee access levels

EnhancementCommunity

Employee access levels have been renamed, and a new, highly restrictive "Supervised" access level has been added.

Official Odoo 20 release note

In plain words

With "Log in with Employees", the access levels are renamed to Manager, Cashier and Restrictive (Odoo 19 used Advanced, Basic and Minimal rights), and a new Supervised level is added. Supervised employees can ring up sales, but a higher level must approve before the payment is closed.

Point of Sale > Configuration > Point of Sales > Clothes ShopThe four employee access levels, including the new Supervised level.

Where to find it

  1. Point of Sale > Configuration > Point of Sales, open a shop.
  2. Tick Log in with Employees.

For users

Clear role names and a very restricted level for trainees or temporary staff.

For developers

pos.config fields basic_employee_ids / advanced_employee_ids / minimal_employee_ids are replaced by cashier_employee_ids / manager_employee_ids / restrictive_employee_ids, plus new supervised_employee_ids. Roles become 'manager', 'cashier', 'restrictive', 'supervised'.

Upgrading from Odoo 19

Field renames on pos.config: custom code or views using the old *_employee_ids fields must be updated.

  • The checkbox was ticked only for the screenshot and the form was discarded.

Change 5 of 20

End of session

RefactoringCommunity

At the end of the session, a global sale is generated to simplify the accounting entries and remove the miscellaneous entries. Payment journal entries are automatically generated at the time specified in the settings without needing to end the session.

Official Odoo 20 release note

In plain words

POS accounting was rebuilt. When the session closes, sales are posted as one global customer invoice in a closing journal instead of miscellaneous entries. A new "Closing entries" setting (Daily at a chosen hour, or At closing) generates the payment entries automatically at that time, even if the session stays open.

Point of Sale > Configuration > Settings > AccountingThe new Closing entries setting: generate the entries daily at a chosen hour (here 9:30) or at session closing.

Where to find it

  1. Point of Sale > Configuration > Settings.
  2. Scroll to Accounting > Closing entries.

For users

Simpler accounting: one sale document per session and payment entries posted on schedule.

For developers

pos.config gains session_closing_mode (daily / closing), session_closing_daily_hour and closing_journal_id; pos.session builds an out_invoice/out_refund via _prepare_session_move_vals(); a cron processes sessions whose closing hour falls in the last 10 minutes.

Upgrading from Odoo 19

Large accounting change: reports, localisations and custom code that read the old session miscellaneous moves must be reviewed.

Change 6 of 20

Expired product notification

EnhancementCommunity

Users are notified when they select expired products on the POS.

Official Odoo 20 release note

In plain words

When a cashier picks a lot or serial number whose expiration date has passed, the POS shows a notification "Lot/Serial ... is expired".

Point of Sale > (session) > (product with lot tracking) > select lotPicking the expired lot LOT-EXP-389 for Stool Top pops up a notification saying the lot is expired.

Where to find it

  1. Install Product Expiry, track a product by lots with an expiration date in the past.
  2. Sell it in the POS and select the lot.

For users

Staff are warned before selling expired goods.

For developers

pos_store.showNotificationIfLotExpired() is called when a lot is chosen; lot expiration_date is loaded only when product_expiry adds that field.

Upgrading from Odoo 19

None.

Change 7 of 20

GoFood delivery integration

New featureEnterprise only

Support has been added for GoFood orders and menu sync for Indonesia and Vietnam (available from 19.0).

Official Odoo 20 release note

In plain words

A new GoFood connector receives GoFood delivery orders in the POS and syncs the menu, built on the new platform order framework.

Point of Sale > Products > Platform Orders > Providers > GoFood > CredentialsThe GoFood provider form has App ID, Secret Key, Partner ID and Relay Secret Key fields. No live GoFood account was used, so the form is shown disabled with the fields empty.

Where to find it

  1. Install the GoFood module and configure the provider with GoFood credentials.

For users

Restaurants in Indonesia and Vietnam can take GoFood orders directly in the POS.

For developers

New module pos_platform_order_gofood depending on pos_platform_order.

Upgrading from Odoo 19

New optional module.

Change 8 of 20

GrabFood delivery integration

New featureEnterprise only

Support has been added for GrabFood orders and menu sync for Cambodia, Indonesia, Malaysia, Myanmar, Philippines, Singapore, Thailand, and Vietnam (available from 19.0).

Official Odoo 20 release note

In plain words

A new GrabFood connector receives GrabFood delivery orders in the POS and syncs the menu, with country specific price and tax handling.

Point of Sale > Products > Platform Orders > Providers > GrabFood > CredentialsThe GrabFood provider form has Client ID, Client Secret and a Test Connection button. No live GrabFood account was used, so the form is shown disabled with the fields empty.

Where to find it

  1. Install the GrabFood module and configure the provider with GrabFood credentials.

For users

Restaurants in Southeast Asia can take GrabFood orders directly in the POS.

For developers

New module pos_platform_order_grabfood depending on pos_platform_order.

Upgrading from Odoo 19

New optional module.

Change 9 of 20

Mercado Pago terminal

RefactoringCommunity

Mercado Pago terminal-based QR payments, refunds, and cancellations are now supported via the Orders API integration, enabling use by Chilean companies as well.

Official Odoo 20 release note

In plain words

The Mercado Pago terminal integration moved from the old Point API to the Orders API, which handles QR payments, refunds and cancellations and works for Chilean companies too.

Point of Sale > Configuration > Payment Methods > (Mercado Pago method) > Mercado PagoA Bank payment method with Integrate with set to Mercado Pago gets its own tab for the production token, secret key and terminal serial number. No live Mercado Pago account was used, so the fields are empty.

Where to find it

  1. Install Mercado Pago POS and configure a payment method with Mercado Pago credentials.

For users

Mercado Pago terminals keep working on the new API and gain refunds, cancellations and QR payments.

For developers

The payment flow now calls Mercado Pago's Orders API; the JS handles currencies without decimals (such as CLP).

Upgrading from Odoo 19

Existing Mercado Pago payment methods may need their credentials checked after upgrade.

Change 10 of 20

Multiple currencies

New featureCommunity

Multiple currencies are now be supported at checkout in the same point of sale.

Official Odoo 20 release note

In plain words

Cash and bank payment methods now have a "Currencies" field. With several currencies set, the payment screen offers the method once per currency, converts the amount and records the payment in that currency.

Point of Sale > Configuration > Payment Methods > CashThe new Currencies field: this cash method accepts EUR and USD.

Where to find it

  1. Activate a second currency.
  2. Point of Sale > Configuration > Payment Methods, open Cash, add currencies.

For users

Shops near borders or with tourists can take cash in another currency.

For developers

pos.payment.method gets currency_ids (only cash/bank may have several); pos.payment stores foreign amounts; session closing creates entries with amount_currency.

Upgrading from Odoo 19

None for existing data; methods default to the company currency.

  • Demo data: EUR and USD set on the Clothes Shop cash method.

Change 12 of 20

Printer management

EnhancementCommunity

Set up multiple printers linked to your point of sale, and then select on which printer to print, improving the workflow for big structures with several cash drawers.

Official Odoo 20 release note

In plain words

A POS can now have several receipt printers. Each device picks its default printer in a dialog (also available from the menu under Printers), and other printers are used as fallbacks.

Point of Sale > Dashboard > Bar > Open Register > Menu > PrintersThe dialog to pick which receipt printer this device uses by default.

Where to find it

  1. Add two receipt printers to a POS (Receipt Printers setting).
  2. Open the POS, menu > Printers.

For users

Large shops with several cash drawers can link each register to its own printer.

For developers

Odoo 19 used one Epson IP field on the POS (epson_printer_ip); Odoo 20 links pos.printer records through pos.config.receipt_printer_ids, and the chosen default is stored per device in the browser.

Upgrading from Odoo 19

Custom code reading epson_printer_ip must switch to receipt_printer_ids.

Change 13 of 20

Receipt printing

EnhancementCommunity

A printer's paper size can now be configured manually in developer mode to ensure receipts are formatted correctly.

Official Odoo 20 release note

In plain words

Printers have a "Paper Size" field (Standard 80mm, Standard 58mm, Zebra labels, and Epson models) so receipts are laid out for the real paper width.

Point of Sale > Configuration > Printers > Front Counter PrinterThe Paper Size field on the printer form.

Where to find it

  1. Activate developer mode.
  2. Point of Sale > Configuration > Printers, open a printer.

For users

Receipts print correctly on narrow 58 mm printers.

For developers

New selection pos.printer.paper_size (computed options in paper_size_keys); the printer utilities render with that width.

Upgrading from Odoo 19

None.

  • In this build the Paper Size field is visible even without developer mode; only Connection Timeout needs it.

Change 14 of 20

Reorganizing products in POS interface

New featureCommunity

Drag and drop products in the POS interface to reorganize them.

Official Odoo 20 release note

In plain words

Users who may edit products can drag and drop product cards in the POS product grid to change their order. The new order is saved on the products.

Point of Sale > Dashboard > Bar > Open RegisterThe Negroni card being dragged to a new place in the product grid.

Where to find it

  1. Open a POS session.
  2. Press and drag a product card to a new place.

For users

Put best sellers first without leaving the POS.

For developers

useSortable on .product-sortable cards; on drop, product.template.set_pos_sequence() stores pos_sequence.

Upgrading from Odoo 19

None.

  • The drag was cancelled after the screenshot.

Change 15 of 20

Self-ordering

EnhancementCommunity + Enterprise

Part 1

Customers using self-ordering can leave notes at checkout; these are visible on the kitchen display.

Official Odoo 20 release note

In plain words

Customers using self-ordering on their phone can add an order note in the cart; it is sent with the order to the kitchen.

Self-order (mobile) > Cart"Add an order note" in the self-order cart.

Part 2

Optional products are displayed when ordering from a mobile device or a kiosk.

Official Odoo 20 release note

In plain words

Optional products set on a product are proposed in an "Options" step when ordering from a phone or kiosk.

Self-order (mobile) > MojitoAfter choosing a Mojito, the new Options step proposes Green Tea and Water.

Part 3

Generate and print an order-specific QR code, allowing customers to scan it to place their order and pay after their meal.

Official Odoo 20 release note

In plain words

With the new "Dynamic QR" mode, the cashier prints or shows a QR code for a table order; guests scan it to add to that order and pay after the meal.

Point of Sale > Dashboard > Bar > Open Register > Table 1 > Dynamic QRThe order-specific QR code, with Print, that lets guests join this table order.

Where to find it

  1. Set the POS to mobile self-ordering with service mode Dynamic QR.
  2. In the POS, open a table, add a product and click Dynamic QR.
  3. Open the link on a phone, add a product with optional products, then open the cart.

For users

Richer self-ordering: notes, upsell of optional products, and QR codes tied to one table order.

For developers

New pos_optional_product_ids on product.template; new self_ordering_service_mode value 'dynamic_qr' with pos.config.get_dynamic_qr_url(order_id).

Upgrading from Odoo 19

None.

  • Demo data: the Bar POS was switched to mobile self-ordering in Dynamic QR mode, and Green Tea and Water were set as optional products of Mojito.

Change 16 of 20

Service fees

New featureCommunity

Add a service fee for Point of Sale orders and self-orders via presets, and display the amount on invoices.

Official Odoo 20 release note

In plain words

Presets (Dine In, Takeout, ...) can add a service fee to orders: a fixed amount or a percentage of the total before or after discounts, using a service fee product so it shows on receipts and invoices.

Point of Sale > Configuration > Presets > Dine In > OptionsThe new Service Fee settings on a preset (here 10 percent of the order total).

Where to find it

  1. Point of Sale > Configuration > Presets, open Dine In.
  2. Options tab > Service Fee.

For users

Restaurants can charge table service automatically for dine-in orders.

For developers

pos.preset gets service_fee, service_fee_product_id (default point_of_sale.product_product_service_fee), service_fee_type, service_fee_amount, service_fee_based_on.

Upgrading from Odoo 19

None.

  • The toggle and amount were set only for the screenshot and discarded.

Change 17 of 20

Simplified inventory management

RefactoringCommunity

Point of Sale can now work with simplified inventory management, without installing the Inventory app. A single on-hand quantity is displayed per product and there are no required transfers.

Official Odoo 20 release note

In plain words

Point of Sale no longer depends on Inventory. Without Inventory, the product keeps a single on-hand quantity that sales decrease, and no transfers are created. The pos_stock bridge module adds full inventory when Inventory is installed.

Point of Sale > (session) > product infoThe product info popup still shows On hand: 25 Units, read straight from the product record with no Inventory app installed.

Where to find it

  1. On a database without Inventory, open a POS session and long press a tracked product to see its info.
  2. The Inventory section of the info popup shows the on hand quantity.

For users

Small shops can run POS without the Inventory app.

For developers

point_of_sale depends on product and account instead of stock_account; stock logic moved to the auto-installed pos_stock module; product.product now has its own qty_available.

Upgrading from Odoo 19

Custom modules that used stock models through point_of_sale must depend on pos_stock.

Change 18 of 20

Simplified receipts

New featureCommunity

Print a simplified receipt that displays the subtotals and taxes of the order without the order lines.

Official Odoo 20 release note

In plain words

The Print dialog offers a "Simplified Receipt" next to the full receipt. It prints the subtotals and taxes of the order without the order lines.

Point of Sale > Dashboard > Bar > Open Register > Payment > PrintThe Print dialog with the new Simplified Receipt option.

Where to find it

  1. Complete a sale in the POS.
  2. Click Print on the payment confirmation screen.

For users

A short receipt when customers do not need the item list.

For developers

PrintPopup lists Full, Simplified and (if enabled) Gift receipt; printOrderReceipt({simplified: true}).

Upgrading from Odoo 19

None.

Change 19 of 20

Snooze products

New featureCommunity + Enterprise

Make products temporarily unavailable on the POS or self-ordering menu by snoozing them.

Official Odoo 20 release note

In plain words

Long press a product and use "Snooze" to make it unavailable for 1, 2 or 4 hours or until the end of the session. Snoozed products are greyed out in the POS and hidden from the self-ordering menu.

Point of Sale > Dashboard > Bar > Open Register > long press Negroni > SnoozeThe snooze dialog: make the product unavailable for 1, 2 or 4 hours or the session.

Where to find it

  1. Open a POS session.
  2. Long press a product, click Snooze.

For users

Sold out items can be paused quickly without editing the product.

For developers

New model pos.snooze (product, config, start, end); ProductCard gets available=!isProductSnoozed().

Upgrading from Odoo 19

None.

  • The dialog was not applied.

Change 20 of 20

WhatsApp and SMS self-order receipt

New featureCommunity + Enterprise

Customers can now receive their receipt via WhatsApp or SMS when self-ordering.

Official Odoo 20 release note

In plain words

Self-ordering presets that ask the customer's details can send a receipt by WhatsApp ("WhatsApp Confirmation" template, Enterprise) or by SMS (new pos_self_order_sms module, Community) when the order is placed.

Point of Sale > Configuration > Presets > Takeout > Self OrderingThe WhatsApp Confirmation template used to send the self-order receipt.

Where to find it

  1. Point of Sale > Configuration > Presets, open Takeout.
  2. Self Ordering tab.

For users

Self-order customers get their receipt on their phone.

For developers

pos.preset gets whatsapp_receipt_template_id (whatsapp_pos_self_order) and an SMS equivalent (pos_self_order_sms); pos.order sends it for mobile/kiosk orders with a phone number.

Upgrading from Odoo 19

New optional modules.

  • pos_self_order_sms is not installed here, so only the WhatsApp option is shown; sending needs a WhatsApp Business account.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 Point of Sale: common questions

What is new in Odoo 20 Point of Sale?

The official Odoo 20 release notes list 20 Point of Sale changes (10 new features, 7 enhancements, 3 refactorings). They include Base unit price on product label, Booking Kanban and pivot views, Convert order lines into a combo, Employee access levels and more.

Are the Odoo 20 Point of Sale changes available in Community edition?

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

Do Odoo 20 Point of Sale changes affect my customizations when upgrading from Odoo 19?

9 of the 20 changes have something to check when upgrading from Odoo 19, for example Base unit price on product label, Employee access levels, End of session. 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 Point of Sale to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend Point of Sale, then test your main Point of Sale 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 Point of Sale 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.