Barcode Generator
Overview
Barcode Generator designs a label — its size, its lines of text, its price line and its barcode — and prints a sheet of them. You type or paste the rows you want (item code, item name, barcode value, price, quantity), pick a saved label template, generate, and print through the browser’s own print dialog.
It is a standalone printing tool. It does not read items from inventory, does not write anything back, and posts nothing. Everything it needs is either typed into the grid or imported from a CSV.
Where it fits
| Upstream | This applet | Downstream |
|---|---|---|
| Item codes, names, barcode values and prices — typed in, or pasted from a CSV you exported from Item Maintenance or Pricebook | The label grid and the label designer | A printed sheet, through the browser |
| — | Label templates stored in your user settings | Reused on the Print Barcode tab |
Screens and menus
One menu item, Barcode Generator (route barcode), with three tabs:
| Tab | What it does |
|---|---|
| Print Barcode | The working screen. A grid with columns item_code, item_name, barcode, price, qty — all editable in place — plus checkbox selection, Add Row, Delete Selected, a Barcode Template dropdown, Generate and Print. Two more buttons download a blank CSV template and import a CSV into the grid. |
| Barcode Designer | Where a template is built: label Width and Height in centimetres, and a list of lines. Each line has a Type (text, item code, price or barcode), a Value, an Alignment, a Font Size, and — for barcode lines — a Format, Width and Height. Add Line, Remove Line, Print Label, and a Barcode Template dropdown with add and delete dialogs for naming and removing templates. |
| Barcode Settings | Not implemented. See below. |
| Settings → Application Settings | An empty screen with a SAVE button (see Configuration). |
| Settings → Default Selection | Default Company, Default Ledger, Default Currency. |
| Settings → Field Settings, Webhook, Feature Visibility, the permission screens, Release Notes, Applet Log | Routed; Field Settings is the unbound stub, the rest are the shared screens. |
| Personalization → Default Selection, Sidebar | Per-user. |
Barcode Settings is a mock. The tab renders a label designer and a label-settings panel over a hard-coded object — sample lines reading 123456789012 and MYR 29.90, a CODE128 barcode block, an 8 cm × 3 cm two-column label — with an ngOnInit that does nothing and an onPrint() whose body is a comment. Nothing on that tab is loaded from, or saved to, anywhere. Design labels on the Barcode Designer tab instead.
A BarcodeGeneratorComponent is declared in the barcode module and used in no template, and a BarcodeService that would keep barcode lines and templates in browser local storage is injected nowhere. Both are dead code at commit fd3478e; they are not an alternative storage path.
Screenshots needed
No screenshots exist for this applet. A capture session should take: the Print Barcode tab with a few rows and generated labels; the Barcode Designer with a template open and several lines; the Add Template dialog; and Settings → Default Selection. Use invented item codes and prices.
Configuration
Before you can use it
Nothing. The applet reads no master data and calls no document endpoint. You need a saved label template before Generate produces anything, and that you create yourself on the Barcode Designer tab.
Applet settings
| Screen | What it holds | Verdict |
|---|---|---|
| Settings → Application Settings | Nothing. The component builds an empty UntypedFormGroup with no controls, the template renders only a SAVE button, and pressing it dispatches saveMasterSettingsInit with an empty object. No exposed control found (routes and settings components checked at commit fd3478e). | Dead screen |
| Settings → Field Settings | The unbound eight-toggle stub — Unit Discount, SST/VAT/GST, WHT, Blanket Order, Segment, G/L Dimension, Profit Center, Project — with no form binding and a SAVE button with no handler. The labels belong to a sales-document screen. | Dead screen |
| Settings → Default Selection | DEFAULT_COMPANY, DEFAULT_LEDGER, DEFAULT_CURRENCY. These persist (changing the company clears the ledger, which is real logic), but a repo-wide grep at commit fd3478e finds them read nowhere outside the settings screens themselves. | Declared, rendered and persisted; not consumed |
| Personalization → Default Selection | The per-user twin of the same three keys. | Same |
The settings that do something are the label templates, and they are not on any Settings screen. Saving a template on the Barcode Designer tab dispatches saveAdvanceSearchStateSettingsInit with the state name barcodeSettings and the template name as the state label. The shared session effect writes it into bl_applet_login_subject_link_ext under param_code = USER_SETTINGS_ADVANCE_SEARCH_STATE, keyed by applet and by the signed-in login — which is why templates are per user and per applet, and why the effect throws “You do not have permission to do this” when the current login has no applet link row.
Each stored template holds labelWidth, labelHeight and the list of lines, each line carrying its type, value, alignment, font size and (for barcodes) format, width and height.
Feature visibility / permissions
The applet checks no HIDE_* / SHOW_* keys. bl_applet_client_side_perm_dfn holds exactly one row for barcodeGeneratorApplet, and it is a placeholder left over from testing the Client-Side Permission screen — its perm_code is literally code, its name name and its description desc (checked 2026-09-14). Nothing checks it; treat this applet as having no client-side permissions.
Server-side there is nothing to guard beyond the applet’s own installation and the user-settings write described above: the applet calls no ERP endpoint.
Fields
Print Barcode grid
| Column | Meaning | Notes |
|---|---|---|
| (checkbox) | Row selection, with a select-all header | Feeds Delete Selected |
| # | Row number | Derived |
| item_code | Your item code | Editable in place |
| item_name | Name to print | Editable |
| barcode | The value encoded in the barcode line | Editable |
| price | Price to print | Editable, numeric editor |
| qty | How many copies of this label | Editable, numeric editor; defaults to 1 on a new row |
CSV import. Download Template produces barcode_template.csv containing the single header line item_code,item_name,barcode,price,qty. Import appends the parsed file to whatever is already in the grid — it does not replace it, so importing the same file twice doubles the rows.
Barcode Designer
| Field | Meaning | Notes |
|---|---|---|
| Barcode Template | The named template being edited | Add and delete through their own dialogs |
| Width (cm), Height (cm) | Physical label size | Used when the sheet is laid out |
| Type | text, item_code, price or barcode | Decides what the line renders |
| Value | The literal text, or the barcode payload | For item_code and price lines the grid row supplies the value at generate time |
| Alignment | left / center / right | |
| Font Size | Points | |
| Format | Barcode symbology, e.g. CODE128 | Barcode lines only; CODE128 is the fallback when the line leaves it empty |
| Width, Height | Bar width factor and bar height | Barcode lines only |
Lifecycle and effects
No server document type, no signums, no journal, no stock movement, no queue. The only thing this applet persists is the label templates, and they go into the signed-in user’s applet settings, not into any business table.
Generating and printing. Generate reads the selected template, clones its line list once per grid row (expanding each row qty times), substitutes the row’s item code, name and price into the matching line types, and renders the barcode lines with JsBarcode into the preview area. Print takes the inner HTML of the preview area, writes it into a new browser window together with a CSS grid that tiles the labels, and calls window.print() on that window. There is no PDF generation and no server round-trip; what comes out depends on the printer and the paper the browser is given.
Related applets
- Inventory Item Maintenance — where item codes and barcode values are maintained. This applet does not read them; export or copy them into the grid.
- Pricebook — where the prices you print come from.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The Barcode Template dropdown is empty | No template has been saved for this login. Templates are per user. | Create one on the Barcode Designer tab. |
| A colleague cannot see the template you designed | Templates are stored against the signed-in login’s applet link, not against the tenant. | Each user designs (or re-creates) their own. |
| Saving a template fails with “You do not have permission to do this” | The session effect first looks up an applet-login-subject link row for this applet and this login and throws when it finds none. | Make sure the applet is installed for that user. |
| Nothing appears when you press Generate | No template is selected, or the selected template has no lines. | Pick a template with at least one line. |
| Importing a CSV twice doubles the rows | Import appends to the grid rather than replacing it. | Delete the rows first, or use Delete Selected. |
| The Barcode Settings tab shows a label you never designed, and its Print does nothing | That tab is a mock over a hard-coded sample design; its print handler is empty. | Use Barcode Designer and the Print Barcode tab. |
| Settings → Application Settings has nothing on it | It genuinely has no controls; the SAVE button posts an empty object. | Nothing to configure there. |
| Setting Default Company / Ledger / Currency changes nothing | Those three keys are saved but read nowhere in the applet. | Ignore them. |
| Labels print at the wrong size | Layout is browser CSS plus whatever paper size and scaling the print dialog is set to; there is no server-side PDF. | Set the label Width and Height on the template, then set the browser print dialog to 100% scale and the right paper. |