mirror of
https://github.com/Luchexx/wacrm.git
synced 2026-11-02 09:19:51 +00:00
wacrm hardcoded USD across every deal-value formatter, the new-deal form, and automation-created deals, making deal tracking unhelpful for non-US self-hosted users. Add a per-account default currency. - Migration 021: accounts.default_currency TEXT NOT NULL DEFAULT 'USD' with a 3-letter-code CHECK. The existing admin-only accounts_update RLS policy already gates writes. - New src/lib/currency.ts: single source of truth (CURRENCIES list, formatCurrency, formatCurrencyShort), replacing ~6 duplicated USD-hardcoded helpers. - useAuth exposes defaultCurrency (joined from accounts), falling back to USD while loading / on pre-021 schemas. - Settings → Deals tab to pick the currency (admin-only, read-only for others to match RLS). - Deal form defaults new deals to the account currency and sources its dropdown from CURRENCIES; existing deals keep their saved currency. - Pipeline board/analytics, dashboard "Open Deals Value", and the pipeline donut format totals in the account currency. Individual deal cards still show each deal's own currency. - Automation create_deal sets the new deal's currency from the account default instead of the static DB default. One currency per account (no FX conversion) per the issue's recommended first pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.4 KiB
SQL
33 lines
1.4 KiB
SQL
-- ============================================================
|
|
-- 021_account_default_currency
|
|
--
|
|
-- Make the default deal currency configurable per account.
|
|
--
|
|
-- Before this, the app hardcoded USD everywhere — deal-value
|
|
-- formatters, the new-deal form, and automation-created deals all
|
|
-- assumed USD. wacrm is self-hostable and used globally, so a fixed
|
|
-- USD default made deal tracking unhelpful for non-US businesses
|
|
-- (issue #218).
|
|
--
|
|
-- We add a single `default_currency` column to `accounts`. New deals
|
|
-- and all aggregated totals (pipeline/dashboard) format in this
|
|
-- currency; existing deals keep their own saved `deals.currency`.
|
|
-- We enforce one currency per account (no FX conversion) — the
|
|
-- issue's recommended first pass.
|
|
--
|
|
-- RLS: no change needed. The existing `accounts_update` policy
|
|
-- (017) already restricts writes to admins+, which is exactly who
|
|
-- should change an account-wide setting.
|
|
-- ============================================================
|
|
|
|
ALTER TABLE accounts
|
|
ADD COLUMN IF NOT EXISTS default_currency TEXT NOT NULL DEFAULT 'USD';
|
|
|
|
-- Keep the value an ISO-4217-shaped 3-letter uppercase code without
|
|
-- pinning to a fixed enum — forks can use any currency Intl supports.
|
|
ALTER TABLE accounts
|
|
DROP CONSTRAINT IF EXISTS accounts_default_currency_format;
|
|
ALTER TABLE accounts
|
|
ADD CONSTRAINT accounts_default_currency_format
|
|
CHECK (default_currency ~ '^[A-Z]{3}$');
|