| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Restaurant (pos_restaurant)
• Point of Sale (point_of_sale) • Discuss (mail) • Inventory (stock) • Invoicing (account) |
| Lines of code | 379 |
| Technical Name |
qt_pos_restaurant_kitchen_web_print |
| License | OPL-1 |
| Website | https://odootips.com |
| Versions | 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Restaurant (pos_restaurant)
• Point of Sale (point_of_sale) • Discuss (mail) • Inventory (stock) • Invoicing (account) |
| Lines of code | 379 |
| Technical Name |
qt_pos_restaurant_kitchen_web_print |
| License | OPL-1 |
| Website | https://odootips.com |
| Versions | 17.0 18.0 19.0 |
Odoo 18 Community & Enterprise
Press Order in the Restaurant POS and the kitchen tickets print straight from your browser with Ctrl+P — one ticket per station, automatically split by product category. No IoT Box, no ePOS printer, no extra hardware.
- ✔ One ticket per virtual printer (Kitchen, Bar, etc.)
- ✔ Browser print (Ctrl+P) — works on any thermal printer
- ✔ Coexists with IoT/ePOS printers if you already use them
- ✔ Date, time, table, order number and cashier in every ticket
- ✔ Compact 80mm professional layout, ready for thermal paper
- ✔ 11 automated tests — production-grade
The cashier presses Order. The module reads the changes since the last send, groups them by virtual printer, and opens a screen with one ticket per kitchen station. Hit Ctrl+P — done.
Only Restaurant Point of Sale is required. Existing IoT printers keep working unchanged.
I.1 Press the Order button
Add products to the order, then press Order. The module detects the changes since the last send and opens the Kitchen Orders screen if there is anything to print.
I.2 Kitchen Orders Screen
A clean screen with one ticket per virtual printer. Each ticket only contains the products that belong to its categories (e.g. Kitchen vs Bar).
| Toolbar | Print (Ctrl+P) — open the browser print dialog Ok — close and return to POS |
| Body | One thermal-style ticket per virtual printer with its own NEW / CANCELLED sections |
| Layout | Compact 80mm format, monospaced typography, ready for thermal paper |
I.3 Print with Ctrl+P
Press Ctrl+P (or click the Print button). The browser opens its print dialog with each ticket on its own page (page break between stations). Send to any thermal printer the OS recognizes.
II.1 Ticket Anatomy
| Station | Virtual printer name (KITCHEN, BAR, etc.) — bold, uppercase |
| Date / Time | Centered, right after the station — DD/MM/YYYY HH:MM |
| Table | Floor / Table when the order belongs to a table |
| Order / Cashier | Order reference left, cashier name right |
| Lines | Quantity (right-aligned) + product name. Notes below in italics with > |
II.2 NEW and CANCELLED sections
If you removed lines or reduced quantities since the last send, they appear under CANCELLED with strikethrough. New items appear under NEW. Both fit in the same ticket so the kitchen sees the whole change.
II.3 Notes & Combos
Internal notes (e.g. "no onions") appear right under the line, indented with >. Combo children are indented under the parent for instant readability.
III.1 Only changes since last send
Like the native Odoo flow, the screen only shows what's new or removed since the previous Order press. If there are no changes, no screen is opened — no surprise reprints.
| 1st press of Order | Whole order is "new" → ticket prints |
| Add line + Order | Only the new line appears on the ticket |
| Remove line + Order | The removed line appears under CANCELLED |
| Press Order without changes | Screen does not open |
III.2 Coexist with IoT printers
If you also use IoT/ePOS printers, both flows run together: hardware printers fire as native Odoo does, and the Kitchen Orders screen pops up for the browser printers. Each virtual printer only acts on its own categories.
⚙ Configuration in 3 steps
Point of Sale > Configuration > Preparation Printers > Create
- Name: e.g. Kitchen
- Type: Browser print (Ctrl+P, no IoT Box)
- Categories: e.g. Hot dishes, Starters
POS Configuration > Restaurant & Bar
- Enable Order Printer
- Add the printer in Order Printers
- Save and reopen the session
Open the POS, add products, press Order.
- The Kitchen Orders screen opens
- Press Ctrl+P or the Print button
- Done — kitchen receives the ticket
📥 Installation
- Odoo 18.0 (Community or Enterprise)
pos_restaurantinstalled (auto-installed when you enable Bar/Restaurant features in your POS)- A modern browser on the cashier device (Chrome, Edge, Firefox)
- Any 80mm thermal printer the OS recognizes
- Set page size to 80mm auto in the system print dialog (the module already declares
@page { size: 80mm auto }) - Disable headers/footers in the browser print options for a clean ticket
- Copy the module folder into your addons path.
- Restart Odoo (or use developer mode → Update Apps List).
- Go to Apps, search for POS Restaurant Kitchen Web Print, click Install.
- Configure your printers (see Configuration tab).
🌐 Languages — fully translated
Source language. All UI labels, field help texts, selections, and on-screen messages are written in English.
Full translation for Spain (es_ES) and Latin America (es_419) — every label, button and field is translated.
| Element | EN | ES |
|---|---|---|
| Module name & summary | ✔ | ✔ |
| Field labels & help (Printer Type) | ✔ | ✔ |
| Selection value (Browser print…) | ✔ | ✔ |
| Kitchen Orders screen UI (8 strings) | ✔ | ✔ |
| Ticket section titles (NEW, CANCELLED) | ✔ | ✔ |
es_ES and es_419.
❓ Frequently Asked Questions
Everything answered up front — no clicks, no surprises.
No. The module prints from the cashier's browser (Ctrl+P) to any printer the operating system already knows. If you do have an IoT Box, both flows coexist — browser printers handle their categories, IoT printers handle theirs.
Yes. Create one virtual printer per station (Kitchen, Bar, Pizza…) and assign different product categories to each. The dialog renders one ticket per station and prints them as separate pages.
Only when there are changes since the last Order press. If nothing was added or removed, no dialog opens — exactly the same logic as the native Odoo Order flow.
Yes. The ticket is designed for 80mm thermal paper but it also works on A4 — pick your printer in the system print dialog. A thermal printer gives the best result.
No. The module is intentionally hooked to the Order button only. The Print Bill / precuenta flow is left untouched.
Yes — 11 automated tests cover printer creation, type switching, mixed iot/browser configurations, and the session loader payload. Translations are verified in the database (12/12 strings).
Odoo 18.0, both Community and Enterprise. The only dependency is pos_restaurant, which ships with both editions.
English and Spanish (es_ES + es_419) ship by default — fully translated, including the OWL frontend strings (NEW, CANCELLED, Print, Order, Table, Kitchen Orders…).
📧 Support
Drop us a message — we usually answer within 24 business hours.
wilderhernandezg@gmail.comMore Odoo modules, demos and documentation.
odootips.comSpecialized Odoo development for retail, restaurants and hospitality.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module