Skip to content

Paramétrage de la devise du foyer #50

@saifcores

Description

@saifcores
feat(settings): devise configurable pour budget, courses et dashboard

Résumé

Ajouter une préférence devise du foyer (ISO 4217) dans les paramètres
utilisateur, et l’utiliser pour afficher tous les montants de l’application
(budget, liste de courses, tableau de bord).

Aujourd’hui, l’euro est codé en dur ; les foyers hors zone euro ne peuvent pas
adapter l’affichage à leur contexte.

Contributeurs : issue adaptée à une PR ciblée (UI + API légère + migration).

Motivation

  • Cohérence : aujourd’hui mélange de , EUR et formatCurrency figé sur
    EUR / fr-FR.
  • Accessibilité internationale : familles en USD, GBP, CHF, XOF, etc.
  • Les montants en base restent des nombres (DECIMAL) ; une devise par
    compte
    suffit en v1.

Comportement attendu

  1. Dans Paramètres, l’utilisateur choisit une devise (liste ISO 4217 :
    EUR, USD, GBP, CHF, XOF, CAD, …).
  2. Tous les montants affichés utilisent cette devise (symbole, séparateurs,
    position du symbole via Intl.NumberFormat).
  3. La préférence est persistée et conservée après reconnexion.
  4. Les comptes existants gardent EUR par défaut (aucune régression).

État actuel (références code)

Zone Fichier Problème
Utilitaire client/src/lib/utils.ts formatCurrencycurrency: 'EUR' fixe
Budget client/src/pages/Budget.tsx toFixed(2) + '€', labels « Montant (€) »
Courses client/src/pages/ShoppingList.tsx suffixe EUR en dur
Dashboard client/src/pages/Dashboard.tsx suffixe en dur
Paramètres client/src/pages/Settings.tsx pas de préférences d’affichage
Schéma server/schema.sql table users sans colonne currency

Périmètre proposé

Interface

  • Sélecteur « Devise du foyer » sur /settings, avec courte explication
    (modules concernés).
  • Libellés de champs sans symbole monétaire en dur.

API / données

  • Stocker currency (VARCHAR(3), défaut EUR) sur users ou table
    user_preferences.
  • Exposer la valeur sur le profil utilisateur courant ; endpoint PATCH pour
    la modifier (validation code ISO 4217).
  • Inclure currency dans l’export/import JSON si les données du foyer sont
    transférées.

Client

  • Étendre formatCurrency(amount, currency?, locale?).
  • Contexte ou hook partagé (useCurrency / CurrencyProvider).
  • Refactor des 3 écrans listés ci-dessus pour supprimer tout formatage manuel.

Critères d’acceptation

  • Sélection et sauvegarde de la devise dans Paramètres
  • Affichage cohérent sur Budget, Liste de courses et Dashboard
  • Défaut EUR pour les installations existantes
  • Tests unitaires sur formatCurrency (minimum EUR + 1 autre devise)

Hors périmètre (v1)

  • Conversion de devises / taux de change
  • Devise différente par entrée budget ou par article de courses

Fichiers concernés (indicatif)

client/src/lib/utils.ts, client/src/pages/Settings.tsx,
client/src/pages/Budget.tsx, client/src/pages/ShoppingList.tsx,
client/src/pages/Dashboard.tsx, server/schema.sql, routes auth/profil,
export/import données.

Effort

M — migration DB simple, un endpoint, refactor d’affichage sur 3 pages.

Pour les contributeurs

  1. Commenter sur l’issue : « Je prends cette issue »
  2. Branche : feat/user-currency-preference
  3. PR vers main avec Closes #<numéro>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions