Accounting

Invoices

The Invoices tab is where you generate, view, and re-issue invoices — for guests, for owners, and for city-tax reporting.

Generate from reservation

The most common flow: open a reservation drawer → INVOICE section → GENERATE.

What the modal asks for

After gh#407, the Generate from reservation modal includes the legacy parity fields the V28 version was missing:

  • Guest invoice details: name, email, address — pre-filled from the reservation, editable.
  • Property — set automatically.
  • Language — picked automatically from the guest's invoice language preference, but operator can override.

The language field is no longer dropped on send (gh#397 — earlier Zod rejected empty language, every Generate-invoice-stay task failed silently since rule 23 was authored).

EN vs SK labels

If the language is English, the entire invoice PDF renders in English — including the supplier block (gh#410 — earlier the supplier block hardcoded Slovak labels Nie je platiteľ DPH / Forma úhrady / Variabilný symbol regardless of language, so an "English" invoice arrived with three Slovak phrases in it).

The label set is picked from the LabelSet for the chosen language; missing translations fall back to English.

Existing invoices

If an invoice has already been generated for this reservation, the INVOICE section shows a link to the existing invoice instead of the GENERATE button (gh#406). The link opens the PDF in a new tab.

To re-issue or correct: open the existing-invoice link, hit RE-ISSUE at the top of the PDF preview, edit fields, save. This creates a new invoice row and marks the old one as superseded.

Invoice-generation tasks

Some properties have a task template Rule 23 — Generate invoice for stay that auto-spawns an invoice-generation task at check-out. The task's overview text is now Invoice requested for <property> instead of an empty Invoice requested for (gh#445 — earlier {{property.name}} had no fallback when the reservation's propertyId was null on spawn).

If you see an invoice task with an empty for overview, that's a regression of gh#445 — file a bug report.

City-tax invoices

City-tax invoices are issued monthly per property in bulk — open the City tax page → pick a month → GENERATE CITY-TAX INVOICES to issue all reservations for the month at once.

This flow no longer shows a bogus "Generation failed" error when the backend succeeds (gh#347 — earlier the frontend checked the wrong response field and showed a failure when the invoice was actually generated and the file was downloadable from the link).


Implements: gh#406 (link existing invoice instead of GENERATE), gh#407 (guest invoice details fields), gh#410 (EN invoice EN labels), gh#445 (invoice task overview), gh#397 (Zod accepts language placeholder), gh#347 (Generate City Tax Invoice no longer false-fails).

Source: the FlatsBratislava operator manual.