v3.3.0 — Internationalization & Multi-Tax
Highlights
Your ERP, your currency — FilaOps now supports 21 currencies and 20 locales out of the box. Set your company's currency and locale in Admin Settings, and every number, price, and PDF in the system renders accordingly. No more hardcoded dollar signs.
Multi-tax rates — Create named tax rates (GST 10%, VAT 20%, State Sales Tax 6.25%) and assign them to quotes and orders. The system supports a default rate, per-quote overrides, and graceful fallback to legacy settings. The frontend adapts automatically: checkbox for single-rate setups, dropdown selector when you have multiple rates.
PRO-ready architecture — Core now exposes a clean plugin registration system. PRO modules can inject routes, declare features, and set tier information without modifying any Core code. The frontend discovers available features at startup via /system/info.
What's New
Internationalization (i18n)
LocaleContextprovider withuseFormatCurrency()anduseFormatNumber()hooks- 21 ISO 4217 currencies (USD, EUR, GBP, CAD, AUD, JPY, CNY, INR, and more)
- 20 BCP-47 locales with human-readable labels and live preview
- Regional Settings UI in Admin Settings — currency and locale dropdowns
- Currency-aware PDF generation with proper symbol mapping
- 48 hardcoded
$signs replaced across 10 components - 13 duplicate
formatCurrencydefinitions consolidated into centralized hooks
Multi-Tax Rate System
- New
tax_ratestable with full CRUD API (/api/v1/tax-rates) - Named rates with percentage, default flag, and soft-delete
- Tax resolution: specific rate > default rate > legacy fallback
- QuoteFormModal adapts: checkbox (0–1 rates) or dropdown (2+ rates)
- Admin Settings tax rate management with inline add/remove
PRO Extension Points
plugin_registry.py— runtime tier and feature registration/api/v1/system/info— frontend discovers available featuresload_plugin()— environment-variable-driven plugin loadinguseApp()hook — frontend tier/feature awareness
Testing
- 98 new frontend unit tests (i18n hooks, locale context, currency/number formatting)
- Component-level currency integration tests for all currency-bearing components
- Frontend unit tests now run in CI via dedicated
vitest.unit.config.js
Bug Fixes
- Upload directory resolution:
Path(__file__)instead of hardcoded/app/paths — fixes CI and fresh VM installs (#365) FileStorageServicestartup hardened:mkdirwrapped in try/except- Module-level locale defaults synced for non-hook code (PDFs, modals)
- SQLAlchemy
.is_(True)for ruff E712 compliance - Migration 058 seed INSERT explicit for PostgreSQL compatibility
Full Changelog: v3.2.0...v3.3.0
94 files changed | +2,776 | -253