メインコンテンツにスキップ

Odoo 19 POS: セルフオーダー、ロイヤルティの再設計、チップ分割

Odoo 19 POS: セルフ注文キオスク、QR コード メニュー、再設計されたロイヤリティ プログラム、スタッフ間でのチップの分割、オフライン モード、端末支払い。

E
ECOSIRE Research and Development Team
|2026年5月4日9 分で読める1.7k 語数|

この記事は現在英語版のみです。翻訳は近日公開予定です。

Odoo Point of Sale was already one of the better mid-market POS options for retail and food service, but the Odoo 17 version had gaps that pushed bigger restaurants and quick-service chains toward Toast, Square, or Lightspeed.

Odoo Point of Sale was already one of the better mid-market POS options for retail and food service, but the Odoo 17 version had gaps that pushed bigger restaurants and quick-service chains toward Toast, Square, or Lightspeed. Odoo 19 closes most of those gaps: native self-order kiosks, QR-code menus that actually work, redesigned loyalty programs, and tip-splitting workflows for restaurants. The whole POS app was rewritten on OWL, which means snappier UI but also that custom POS extensions need refactoring.

This article covers what changed and what to watch for if you run a POS-heavy business on Odoo. ECOSIRE has implemented Odoo POS for 10+ multi-location retail/restaurant clients.

Key Takeaways

  • POS frontend rewrote on OWL — jQuery-era POS customizations need full refactor
  • Self-order kiosks are first-class with menu builder, table mapping, and split-bill flows
  • QR-code menus work in real production: customer scans, orders, pays without staff
  • Loyalty programs redesigned: points, tiers, coupons, gift cards in one engine
  • Tip-splitting supports table service, hourly pool, and individual assignment models
  • Offline mode caches the menu and queues orders, syncing on reconnect
  • Payment terminal integrations expanded (Stripe, Adyen, Square, Worldline)

OWL rewrite — what it means for customizations

The biggest invisible change. POS in 17 was a jQuery + Backbone hybrid; the whole UI rewrote on OWL in 19. Custom POS extensions must port:

// Odoo 17 POS extension (jQuery + class extension)
odoo.define('my_module.MyScreen', function (require) {
    'use strict';
    const PosScreens = require('point_of_sale.screens');
    PosScreens.ScreenWidget.include({
        my_custom_method: function () {
            // jQuery DOM manipulation
        },
    });
});

// Odoo 19 POS extension (OWL component)
import { ScreenWidget } from "@point_of_sale/app/screens/screen_widget";
import { patch } from "@web/core/utils/patch";

patch(ScreenWidget.prototype, {
    myCustomMethod() {
        // OWL state and methods
    },
});

Plan 1-2 days per custom POS screen for the refactor. Custom payment methods, custom receipts, and custom button extensions all need the OWL pattern.

Self-order kiosks

Self-order is increasingly expected in QSR (quick-service restaurants) and growing in casual dining. Odoo 19 ships a self-order app:

  • Menu builder with categories, products, variants, modifiers, dietary flags
  • Table mapping — customer enters table number; order routes to that table's tab
  • Split-bill at customer-side — split equally, by item, or custom
  • Payment at kiosk via integrated terminal or pay-at-counter
  • Order routing to kitchen display by station (grill, fry, cold prep)
  • Multiple kiosks per location with shared menu state

Hardware: any tablet or kiosk PC running modern Chrome/Edge works. Odoo doesn't sell hardware; partners (we've integrated Elo, Anker, Pioneer kiosk hardware) supply.

QR-code menus

The "scan QR, order from your phone" flow is now native. Customer flow:

  1. Scan QR sticker at table → opens table-specific URL
  2. Browse menu (responsive web app, no app install needed)
  3. Add items to cart, choose modifiers
  4. Submit order → routes to kitchen with table number
  5. Continue ordering throughout meal (drinks, desserts)
  6. Pay via Stripe/Adyen integration on phone

This was a custom module in 17 (we built variants for two clients). Native in 19.

Loyalty redesign

Odoo 17 had separate loyalty + gift card + coupon modules with overlapping logic. Odoo 19 consolidates into one engine:

Loyalty mechanicOdoo 17Odoo 19
Points per dollarYesYes, per category configurable
Tier-based earnCustom moduleNative
Welcome bonusManualTriggered
Birthday bonusManualTriggered
CouponsSeparate moduleSame engine
Gift cardsSeparate moduleSame engine
Referral codesCustomNative
Punch cardsCustomNative (e.g., "10th coffee free")

A single rule engine evaluates all mechanics on every transaction. The customer sees one "rewards" dashboard combining points, available coupons, gift card balance, and tier status.

Tip-splitting — three models

Restaurants struggle with tip allocation. Odoo 19 supports:

  • Table service: tip belongs to the server who handled the table
  • Hourly pool: all clocked-in service staff share tips proportional to hours worked
  • Custom assignment: manager allocates per-shift based on rules

The shift-end report shows each staff member's tip earnings, ready for payroll. For US restaurants subject to tip-credit rules, the report includes the documentation needed.

Offline mode

Network outages happen. Odoo 19's POS:

  • Caches the full menu, customer database, and price rules locally
  • Queues all transactions during offline period
  • Syncs on reconnect with conflict resolution (rare since POS is mostly write-only)
  • Continues card payments via terminal-integrated mode (terminal handles auth, syncs to POS later)

The offline window is unbounded for cash transactions; for card transactions it depends on the payment terminal's offline-auth limits (typically $25-50).

Payment terminal integrations

The supported list expanded:

ProviderRegionsIntegration
StripeUS, EU, UK, AUCloud-managed
AdyenEU, UK, AU, USCloud-managed
SquareUS, UK, AU, JPCloud-managed
WorldlineEUDirect
SumUpEU, UK, USDirect
VantivUSDirect
RazorpayINDirect
Custom HTTPAnyConfigurable

Each integration handles tip prompts, card-on-file storage (for memberships), and receipt printing.

Migration playbook

  1. Inventory POS customs: list every custom screen, button, payment method, receipt template.
  2. Refactor to OWL: one screen at a time, with a working state at each commit.
  3. Re-import loyalty data: points balances and gift card balances migrate via openupgrade; coupons and punch cards may need manual re-creation.
  4. Test offline mode: simulate network drop on staging POS, verify queue-and-sync behavior.
  5. Self-order rollout: pilot at one location for 2-4 weeks before multi-location.
  6. QR-code rollout: pilot at low-traffic times before peak.
  7. Train staff: tip-splitting model, new loyalty UI, kiosk attendant role.

Real-world metrics from a quick-service client

A 4-location quick-service chain after Odoo 19 + self-order rollout:

MetricPre (17 + counter only)Post (19 + 50% kiosk)
Avg order time3:402:15
Avg ticket size$11.20$13.80
Labor at counter3 staff2 staff
Order errors per shift4-61-2
Loyalty signup rate12%31%

Higher ticket size from kiosks comes from better upsell prompts (modifier suggestions, combo offers) that staff don't always remember.

Kitchen display system (KDS)

The KDS in Odoo 19 was rebuilt for restaurant operations:

  • Routing rules by station (grill, fryer, salad, dessert) — orders auto-split
  • Course timing for fine dining (appetizers fire immediately, mains fire after appetizer-served bump)
  • Bump bar / touch-bump support — operators bump orders with a physical button or tap
  • Recall — re-display a bumped order if customer returns or kitchen needs to re-make
  • Performance metrics per station (avg time-to-bump, longest waiting order)

The KDS connects to the POS over local network; outages don't break the kitchen flow because each KDS caches the open orders.

Multi-store inventory

For multi-location retail, Odoo 19's POS + Inventory tighter coupling:

  • Real-time stock visibility per store
  • Block POS sale if stock is zero (configurable per product category)
  • Auto-replenishment from central warehouse based on POS sell-through
  • Inter-store transfers visible at POS (front-counter staff sees "incoming tomorrow")

For chains running 3+ locations on Odoo POS, this replaces the manual end-of-day stock-tally workflow that slowed nightly close.

Reporting and analytics

POS reports in Odoo 19 expanded to cover:

  • Sales by hour-of-day heatmap (staffing decisions)
  • Top products by margin (not just revenue)
  • Server / cashier performance (sales per hour, average ticket, void rate)
  • Discount impact (gross vs net per promotion)
  • Loyalty-driven repeat-visit rate (cohort analysis)

For owner-operators making weekly menu and staffing decisions, these reports replace what was previously a spreadsheet built from POS exports.

Frequently Asked Questions

Does Odoo 19 POS work without an internet connection?

Yes for cash and pre-authorized cards (terminal handles offline auth up to its limits). New card transactions need the terminal's offline mode. The POS itself stays fully functional; orders queue locally and sync on reconnect. Plan for cellular backup if you have connectivity issues.

Can I run multiple POS sessions simultaneously per location?

Yes. Each register is a separate session. They share inventory and customer data in real time when online. Offline, each session manages its local state; on reconnect they merge with conflict resolution favoring earliest timestamp.

How do self-order kiosks handle modifiers and customizations?

The menu builder defines product attributes (size, milk type, extras). The kiosk renders them as cards with images. Required attributes (e.g., must pick a size) block proceeding; optional attributes default. This works for typical QSR/casual menus; very complex customization (build-your-own pizza with 30+ toppings) requires UX testing because the kiosk screen real estate is finite.

Does the QR-code ordering flow require an account?

By default no — it's a guest flow. Customers can optionally sign in for loyalty earnings; otherwise the order is anonymous to the system (still tied to the table). Loyalty is the main reason customers self-identify.

Can I migrate gift card balances from a third-party loyalty platform?

Via CSV import on loyalty.card. The import expects gift card number, balance, expiry. Recurring loyalty providers (Belly, Square Loyalty) export this format. We've migrated balance data from 4 different providers to Odoo 19; budget half a day per migration including reconciliation.


POS is one of Odoo 19's most operationally-impactful upgrades for retail and food-service businesses. ECOSIRE's Odoo implementation team has deployed POS at multi-location retailers and restaurants including kiosk hardware integration, terminal payment setup, and custom loyalty rules. See our Odoo customization service for self-order kiosk rollouts or browse our Odoo modules catalog for POS-related extensions.

E

執筆者

ECOSIRE Team

Technical Writing

The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.

ECOSIRE

Odoo ERP でビジネスを変革

Odoo の専門家による実装、カスタマイズ、サポートにより、業務を合理化します。