feat(tax): VAT rates by country/state with a default, per-line VAT, invoicing catalog - #14
Merged
Merged
Conversation
- drop the level (Tax 1/Tax 2) column, add is_default to tax_rules - match tax rules on country/state with the default rule as fallback - seed Polish VAT rates (23%, 8%, 5%, 0%, ZW, NP) with 23% as default - add 'set as default' action and default column to the tax screen - single tax rate per invoice; secondary tax (tax2) no longer calculated
- tax rules are grouped by country and state; each group holds any number of rates (name + %) with one marked as default - list shows country, state and the group's default rate; add/edit manage a group's rates in one form - matching: country+state -> country default -> global default -> 0 - seed standard VAT rates for all European countries and Turkey
- invoice builder offers the client's country rates as a dropdown, defaulting to the country's default rate - persist the rate label on invoice items so invoices and the PDF show the descriptive name (VAT 23%, VAT ZW, VAT NP) with tax amount and net base - summary on invoice views: rate name, tax, net base; Netto moved under VAT - localize Netto/Brutto labels
- new invoice_products catalog (name, price, unit, VAT) on the products page with add/edit/delete and VAT narrowed to the company's country - catalog products appear in the invoice builder's description autocomplete and fill price, unit and their own VAT rate - add a per-line 'unit' field (Jed.) to invoices and persist it - pre-select the company default VAT rate when adding a catalog product - fix en.json overrides so the 'New Hosting Product' button label applies
Owner
|
Big, well-tested piece — thank you. Two things to confirm before we merge, since it's the foundation the other invoicing PRs build on:
We'll take this as the base and rebase #9/#15/#17 on top to avoid the invoice-file conflicts. |
This was referenced Aug 31, 2026
Contributor
Author
|
Confirmed on both points:
|
This was referenced Sep 1, 2026
Panelica
pushed a commit
that referenced
this pull request
Sep 3, 2026
… and the tax/proforma merges Adds the tr/zh strings for the new Add Service form, and backfills eleven keys the tax-model and proforma merges (#14, #21) added to English and Polish but not to Turkish and Chinese (invoicing catalog, per-line unit, proforma). This restores full pl/zh/tr parity with English.
Panelica
pushed a commit
that referenced
this pull request
Sep 3, 2026
The zh files had drifted from English after several merges (#9, #14, #17, #21, #23): same keys, but flattened/reordered, so the zh structure test failed. Rebuild admin/client/common/messages to English's exact nesting and order, keeping every existing Chinese translation. Also fix funds.amount_range, which carried :min/:max placeholders English does not pass, so it rendered the raw tokens; it now matches the English static form.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Polish VAT setup: rates matched by country/state with an is_default fallback, a per-line VAT rate with descriptive labels, and an invoicing catalog (products with a unit field). Removes the secondary tax (tax2) and the tax levels.