Printing product labels
Printing barcode and price labels for one product, a selection, or a whole brand and model.
Product labels are printed from Inventory → Stock Levels — one product, the handful you have ticked, or everything matching a brand and model. There are three ways in, and they all open the same Print Labels dialog.
src/app/suite/inventory/components/label-print.ts. What is previewed is not a mock-up of the label: the dialog renders the very document it is about to print, at the label's true size, so a 40 × 30 mm sticker and a 100 × 150 mm shipping label are previewed in proportion to each other. The store name across the top and the price at the bottom are each a toggle; the code beneath the bars is the product's barcode, or its SKU when it has no barcode.One product
Every row in Stock Levels carries a tag icon at its right-hand end — Print label. It opens the dialog with that product already loaded, which is the usual case: a price changed, and one sticker needs replacing.
Several products
Tick the checkbox at the start of each row you want. A bar appears above the table reading N selected, with its own Print labels button next to a Clear selection one. The selection survives paging, so products picked on page one and page four go out in a single run. The checkbox in the table header selects everything on the page you are looking at.
In bulk, by brand and model
The Print labels button above the table opens the dialog in bulk mode, where products are matched by attribute instead of picked by hand. Three pickers cascade: Brand, then Model, then Generation, each narrowing the choices in the one after it. Choosing a brand again clears the model and generation below it, so the filter can never point at a model that no longer applies.
Only the brand is required. Leaving model or generation empty matches everything beneath the level above — a brand alone covers every product carrying it. Until a brand is chosen nothing is matched at all: printing the entire catalogue is deliberately not something the dialog will do by default. Once a brand is set, the dialog says how many products matched.
What goes on the label
The blocks are printed in this order, and each is centred:
- The store name, if Show store name is on. It comes from your receipt settings, and the toggle is unavailable while no store name is configured — so the wrong business can never end up on a sticker
- The product name, over at most two lines before it is trimmed
- A Code 128 barcode of the product's barcode, falling back to its SKU when it has no barcode
- That same code again as readable text under the bars
- The sell price in bold, if Show price is on
A product with neither a barcode nor a SKU still prints — you simply get the name and the price, with no barcode block. The same is true of a code containing characters Code 128 B cannot carry: the code prints as text without bars, rather than as a barcode that would scan back as the wrong string.
Sizes, copies and the preview
Four label sizes are offered — 40 × 30 mm, 50 × 25 mm, 62 × 40 mm and 100 × 150 mm — plus Custom…, which takes a width and height of your own in millimetres (15–300 mm each) for rolls that match none of the presets. Type sizes and the height of the barcode band are tuned per size, so a small sticker and a shipping label each fill their face; a custom size scales the same way from its height.
Copies is per product: two copies against eleven matched products is twenty-two labels. The running total is shown above the print button. Underneath the options, Preview — first label renders the first label of the run at its real size — the same document that is about to be printed, not an approximation of it.
One print run is capped at 500 labels. Over that, the print button is disabled and the total turns red with a note to narrow the match or reduce the copies. It is not silently trimmed to 500. The cap exists because a mistyped copies box against a large catalogue hands the printer a job that cannot be stopped short of pulling the roll out.
Which printers work
Labels go through the browser's ordinary print dialog — the same path receipts take — or, in the mobile app, through the phone's own printing (AirPrint on iOS, the Android print framework). Any label printer the machine has a driver for will therefore work, direct-thermal ones included, and you pick it in the print dialog like any other printer. The smallest preset is 40 mm wide, so a roll of 40 mm labels or wider is what to load.
The label document itself is deliberately plain — black on white, system fonts, no images and no stylesheet fetched from anywhere. That is what keeps it printing cleanly on a one-colour thermal head, and stops a filtered shop network from leaving the print preview loading forever.
Setting the defaults
The size, Show price and Show store name that the dialog opens with are set once in Inventory → Settings under Label Printing. Saving them is an admin action. Staff can still change any of them for a single print run — the settings are starting values, not a lock.