OdooWiki OCA HUB

POS Printing QZ

pos_printing_qztray folder_open OCA/pos open_in_new
Point Of Sale License: AGPL-3

This module provides a pure-software alternative to the Odoo IoT Box for thermal receipt printing in the Point of Sale, using QZ Tray as the print driver.

It extends base_report_to_printer_qz — which adds QZ Tray backend support to printing.printer — and brings that functionality into the POS, allowing users to select a printer with backend = qztray directly from the POS configuration.

Key features:

  • Cash drawer support: the cash drawer open command (ESC p) is sent automatically after each receipt print.
  • No IoT Box required: designed as a software-only alternative for setups where deploying IoT infrastructure is not desirable.

auto_awesome What this module does

AI-generated from the code · Odoo 19.0

Print POS receipts directly to a local thermal printer using QZ Tray software instead of an IoT Box. Enable it per point of sale, pick a QZ Tray printer, and receipts plus cash drawer commands are sent automatically.

This module lets a point of sale print customer receipts on a local thermal printer without needing an Odoo IoT Box. It works together with QZ Tray, a small program installed on the cashier's computer.

In the point of sale settings, under the devices section, a new "QZTray" option appears. When enabled, you can choose a "QZTray Receipt Printer" from the printers already configured with the QZ Tray backend, and tick the cash drawer option.

During checkout, the receipt shown on screen is turned into an image and then into ESC/POS printer commands by the server. Those commands are sent to the selected printer through QZ Tray. After each receipt, the cash drawer open command is sent automatically, so the drawer pops open without extra clicks.

A server route also exists to render any receipt image at the right width for 58 mm or 80 mm paper. The module touches the point of sale configuration (pos.config) and the printing printer list, and adds a printer service inside the POS interface. It does not change accounting, stock or sales documents.

Depends on

Models and fields (1)
  • pos.config · extends an existing modelis_qztray (Enable QZ Tray Printing), iface_qztray_printer_id (QZ Tray Printer)

Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 1 confirmed, 8 with no information of 9 versions.

terminal Installation and usage

OCA documentation · Odoo 19.0

This module requires the following non-Python dependency:

  • QZ Tray must be installed and running on the client machine that operates the POS.

Odoo module dependency (must be installed first):

  • base_report_to_printer_qz — provides the QZ Tray printer backend and the printing.printer model with backend = qztray support.

Python dependencies (installed automatically via external_dependencies):

  • python-escpos

To configure this module, you need to:

  • Install and launch the QZ Tray desktop application on the machine where the thermal printer is connected.
  • In Odoo, go to Point of Sale \> Configuration \> Settings.
  • Select your POS configuration and enable QZ Tray Printing.
  • Optionally select a QZ Tray Printer from the list — only printers with backend = qztray (managed by base_report_to_printer_qz) are shown. If left empty, QZ Tray will use the system default printer.
  • Save the settings and open the POS session.

To extend or customise the receipt template, inherit PosEscposController in your own module and override the relevant _get_* methods (e.g. _get_header, _get_order_lines). No frontend changes are required.

To use this module, you need to:

  • Open a POS session that has QZ Tray Printing enabled.
  • Make sure the QZ Tray desktop application is running on the POS machine.
  • Process a sale and click Payment to print the receipt.

The receipt is sent directly to the thermal printer via QZ Tray. Receipt HTML is rendered to PNG and converted to ESC/POS format server-side before sending following native Odoo logic. The cash drawer is opened automatically after each print if enabled.

No IoT Box or network printer configuration is required.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.