Leçons apprises : multi-devise avec Dolibarr sans casser l’existant

Leçons apprises : implémenter le mode multi‑devise dans Dolibarr sans casser l’existant
Par [Nom du rédacteur] – 3 Novembre 2025


1. Introduction

Dolibarr ERP/CRM est une solution open‑source très populaire pour la gestion des petites et moyennes entreprises. Son architecture modulaire permet d’ajouter de nouvelles fonctionnalités via des modules ou des extensions. Parmi les besoins grandissants des entreprises qui se développent à l’international, la gestion multi‑devise est souvent la première à être demandée.

Pourtant, ajouter le support multi‑devise à une installation déjà en production n’est pas une tâche anodine. Une mauvaise implémentation peut entraîner : pertes de données, incohérences comptables, accidents de version ou même la rupture du processus métier.

Cet article partage les leçons apprises d’une implémentation récente dans une boutique en ligne qui a adopté Dolibarr 9.0 avec le module Multi‑Currency tout en conservant l’ensemble de son parc existant de 1 500 transactions journalières.


2. Contexte & objectifs

Point Situation initiale Objectif
Produits Catalogue mono‑devise (EUR) Support des devises USD, GBP, CHF et EUR simultanément
Clients 3 000 comptes, frais fixes Factures et devis dans la devise du client
Paiement Stripe/SEPA uniquement en EUR Concaténation des passerelles de paiement selon la devise
Compta Plan comptable unique Conservation du plan comptable tout en publiant les écritures avec la bonne monnaie
Contrainte Aucun downtime, pas de re‑déploiement du serveur Implémentation progressif‑débogué


3. Analyse des risques

Risque Impact potentiel Mitigation prévue
Perte de données lors d’une migration du module Historique de factures perdu Sauvegarde incrémentale + test de restauration sur environnement de staging
Incohérences de conversion (taux de change obsolète) Erreurs de réconciliation bancaire Intégration d’une API taux de change (ex. : exchangerate.host) avec cache quotidien
Blocage des versions à cause de conflits de module Impossibilité de mettre à jour Dolibarr Utilisation d’un fork de multicurrency compatible avec la branche actuelle (ex. : dev-2024x)
Résistance du personnel face au changement Retard dans la prise en main Sessions de formation + documentation pas à pas


4. Stratégie d’implémentation pas‑à‑pas

4.1 Pré‑requis & environnement

  1. Sauvegarde complète de la base (mydatabase.sql) et du répertoire $DOL_HOME/doli (fichiers de configuration, pièces jointes).
  2. Copie locale du dépôt github.com/Dolibarr/dolibarr sur un serveur de test.
  3. Création d’un environnement isolé (Docker) pour éviter toute interférence avec la production.

4.2 Choix du module « Multi‑Currency »

  • Le module officiel multicurrency de la communauté est maintenu sur la branche 14.0-dev.
  • Pour éviter les conflits de dépendances, on crée un fork nommé multicurrency-9.0.
  • Les changements clés :

    • Compatibilité avec dolibarr 9.0 (mise à jour du dll* des fichiers).
    • Ajout d’un paramètre de taux de change fixe (au lieu du calcul dynamique par défaut).
    • Gestion du choix de la devise sur le formulaire de facture (client → devise).

4.3 Mise en place du cache de taux de change

// Cache simple basé sur des fichiers JSON
function get_rate(string $from, string $to) {
$cache_file = _PATH_ROOT.'/cache/rate_'.$from.'_'.$to.'.json';
if (file_exists($cache_file) && (time() - filemtime($cache_file) < 86400)) {
$rates = json_decode(file_get_contents($cache_file), true);
return $rates[$to] ?? 1;
}
// Appel API externe
$response = file_get_contents("https://api.exchangerate.host/latest?base=$from&symbols=$to");
$data = json_decode($response, true);
$rate = $data['rates'][$to];
file_put_contents($cache_file, json_encode([$to => $rate]));
return $rate;
}

  • Tous les montants stockés en base sont convertis au moment du paiement et déclarés dans la devise comptable (EUR) via le taux du jour.
  • Le journal comptable reçoit deux lignes : transaction et variation de change.

4.4 Migration des données existantes

Étape Action Exemple de script
1. Export CSV Extraire toutes les factures (devise EUR) SELECT id, amount, date FROM ll_facture;
2. Conversion Appliquer le taux du jour et créer une nouvelle ligne avec la devise cible UPDATE ll_facture SET currency='USD', amount=ROUND(amount * $rate_USD,2) WHERE currency='EUR';
3. Import Ré‑importer les lignes converties dans la table ll_facture avec champ currency rempli Script Python → API REST de Dolibarr (/api/v1/invoices)
4. Vérification Comparer le total facturé avant/après conversion SELECT SUM(amount) FROM ll_facture WHERE currency='EUR'; vs. nouveau devis

Leçon clé : garder un identifiant de version (ex. : v1.0‑2025‑11‑01) sur chaque ligne importée afin de pouvoir la retracer en cas d’erreur.

4.5 Tests fonctionnels & de charge

  • Tests unitaires sur le module multicurrency (PHPUnit).
  • Scénarios de conversion : 5% de variation de taux quotidien, dates limites de paiement.
  • Tests de charge avec 10 000 requêtes simultanées (JMeter) pour s’assurer que le cache ne crée pas de goulot d’étranglement.

4.6 Déploiement progressif

Phase Action Durée
Pilot 5 % des clients (groupe interne) activent la devise 1 semaine
Beta 30 % des clients en conversion auto (tests manuels) 2 semaines
Production Activation globale avec monitoring (Grafana) 1 jour (hors heures de pic)

  • Rollback possible via le backup du module multicurrency-9.0 et la restauration de la base avant la migration.


5. Lessons apprises (les points qui ont le plus marqué)

# Leçon Pourquoi est‑ce important ?
1 Ne jamais modifier le cœur de Dolibarr sans fork Toute modification du core empêche les futures mises à jour et crée des conflits de mise à jour.
2 Cache de taux de change Un appel API à chaque transaction ralentit le serveur et génère des coûts inutiles. Un cache persistant garantit la performance.
3 Sauvegarde + restauration testée Laisser les sauvegardes « au cas où » n’est pas suffisant ; le test de restauration sur un environnement de test est le seul moyen de garantir la récupération.
4 Séparer les flux monétaires Stockage interne : lier chaque transaction à une devise. Reporting comptable : convertir systématiquement en devise comptable (EUR).
5 Documentation pas à pas Les équipes techniques et non‑techniques (comptabilité, service client) doivent disposer d’un guide visuel (flowchart, screenshots).
6 Communication progressive Informer petit‑bout en petit‑bout les parties prenantes évite les résistances et permet de corriger les bugs en production contrôlée.
7 Gestion des variations de devise Ajouter une entrée comptable « gain/perte de change » évite que les écarts inattendus passent inaperçus dans les états financiers.
8 Tests de charge dès le début Découvrir un goulet d’étranglement après le déploiement nuit à la réputation. Simuler le pic de trafic dès la phase de développement évite cela.


6. Bonnes pratiques à retenir

  1. Fork & versionnage : créez toujours un fork du module et conservez le numéro de version (ex. : multicurrency-9.0.1).
  2. Isolation du déploiement : tests en Docker/CI avant de toucher à la prod.
  3. Cache intelligent : choisissez un intervalle de mise à jour qui correspond à votre fréquence de transaction (ex. : 24 h pour les petites boutiques).
  4. Journalisation : loggez chaque conversion ($old_amount, $new_amount, $rate) pour traçabilité.
  5. Versionning de la base : ajoutez une colonne currency_version qui indique la version du taux appliquée lors de l’enregistrement.
  6. Formation utilisateur : préparez un mini‑tutoriel de 10 minutes (vidéo ou slide) montrant comment changer la devise d’une facture.
  7. Suivi post‑déploiement : pendant les 48 h suivantes, surveillez les écarts de sortie du module (rapport d’écarts > 2 % → alerte).


7. Conclusion

L’ajout du support multi‑devise dans Dolibarr n’est pas une simple activation de case à cocher. Il s’agit d’une modernisation du processus de gestion financière qui implique : sommation de plusieurs flux monétaires, conversion exacte des montants, mise à jour des écritures comptables et, surtout, une forte discipline de sauvegarde, de test et de communication.

En suivant les étapes décrites ci‑dessus :

  • Vous préservez l’intégrité de votre installation existante,
  • Vous garantis la cohérence comptable et fiscale,
  • Vous offrez à vos clients la possibilité de payer dans leur devise préférée,
  • Vous respectez les exigences légales (taux de change, variations de change).

Dans les organisations où la rapidité d’évolution est un avantage concurrentiel, ces leçons vous permettront de déployer de nouvelles fonctionnalités sans crainte de « casser l’existant », tout en préservant la stabilité et la confiance de vos utilisateurs.


À votre prochaine mise à jour ?

“Le meilleur changement est celui qui s’opère sans bruit, mais qui laisse une empreinte durable.”
— Proverbe agile appliqué à Dolibarr.

Publications similaires