هذه المقالة متاحة حاليًا باللغة الإنجليزية فقط. الترجمة قريبا.
Odoo 19 POS: Self-Order, Loyalty Redesign, and Tip-Splitting
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:
- Scan QR sticker at table → opens table-specific URL
- Browse menu (responsive web app, no app install needed)
- Add items to cart, choose modifiers
- Submit order → routes to kitchen with table number
- Continue ordering throughout meal (drinks, desserts)
- 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 mechanic | Odoo 17 | Odoo 19 |
|---|---|---|
| Points per dollar | Yes | Yes, per category configurable |
| Tier-based earn | Custom module | Native |
| Welcome bonus | Manual | Triggered |
| Birthday bonus | Manual | Triggered |
| Coupons | Separate module | Same engine |
| Gift cards | Separate module | Same engine |
| Referral codes | Custom | Native |
| Punch cards | Custom | Native (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:
| Provider | Regions | Integration |
|---|---|---|
| Stripe | US, EU, UK, AU | Cloud-managed |
| Adyen | EU, UK, AU, US | Cloud-managed |
| Square | US, UK, AU, JP | Cloud-managed |
| Worldline | EU | Direct |
| SumUp | EU, UK, US | Direct |
| Vantiv | US | Direct |
| Razorpay | IN | Direct |
| Custom HTTP | Any | Configurable |
Each integration handles tip prompts, card-on-file storage (for memberships), and receipt printing.
Migration playbook
- Inventory POS customs: list every custom screen, button, payment method, receipt template.
- Refactor to OWL: one screen at a time, with a working state at each commit.
- Re-import loyalty data: points balances and gift card balances migrate via openupgrade; coupons and punch cards may need manual re-creation.
- Test offline mode: simulate network drop on staging POS, verify queue-and-sync behavior.
- Self-order rollout: pilot at one location for 2-4 weeks before multi-location.
- QR-code rollout: pilot at low-traffic times before peak.
- 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:
| Metric | Pre (17 + counter only) | Post (19 + 50% kiosk) |
|---|---|---|
| Avg order time | 3:40 | 2:15 |
| Avg ticket size | $11.20 | $13.80 |
| Labor at counter | 3 staff | 2 staff |
| Order errors per shift | 4-6 | 1-2 |
| Loyalty signup rate | 12% | 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.
بقلم
ECOSIRE TeamTechnical 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 لتبسيط عملياتك.
مقالات ذات صلة
كيفية إضافة زر مخصص إلى عرض نموذج Odoo (2026)
إضافة أزرار إجراءات مخصصة إلى طرق عرض نموذج Odoo 19: طريقة إجراء Python، وعرض الميراث، والرؤية المشروطة، ومربعات حوار التأكيد. تم اختبار الإنتاج.
كيفية إضافة حقل مخصص في Odoo بدون الاستوديو (2026)
قم بإضافة حقول مخصصة عبر وحدة مخصصة في Odoo 19: وراثة النموذج، وامتداد العرض، والحقول المحسوبة، وقرارات المتجر/غير المتجر. الكود أولاً، يتم التحكم في الإصدار.
كيفية إضافة تقرير مخصص في أودو باستخدام التخطيط الخارجي
أنشئ تقرير PDF يحمل علامة تجارية في Odoo 19 باستخدام web.external_layout: قالب QWeb، تنسيق الورق، ربط الإجراء. مع طباعة الشعار + تجاوزات التذييل.