dolibarr-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dolibarr-dev] Projet multi-devises


From: Yannick Warnier
Subject: [Dolibarr-dev] Projet multi-devises
Date: Sat, 21 Jul 2007 16:02:16 -0500

Salut,

Comme indiqué il y a longtemps sur le wiki, j'aimerais développer un
système multi-devises léger (pour commencer) pour Dolibarr 2.2, qui
permettrait d'encoder ou d'imprimer des factures dans une devise
particulière, et de pouvoir utiliser un taux de change légal pour les
déclarations d'impôts lors d'un paiement sur un compte à l'étranger par
exemple.

Il y a donc deux aspects différents:
- un aspect informatif (qui viendra en premier dans le développement),
qui permet de savoir combien vaut un montant dans une autre devise
- un aspect légal (qui viendra de façon optionnelle dans un second
temps, peut-être dans la version 2.3) qui permet de faire une
déclaration de revenus propres et utilisant des taux légaux.

Les taux de change légaux sont disponibles, dans le cas de l'Angleterre
par exemple, par an ou par mois selon les revenus, sur un site web du
gouvernement. Ces taux *pourraient* être récupérés automatiquement par
une tâche cron et injectés dans Dolibarr, en utilisant des outils de
services web comme ceux utilisés par le module OSCommerce pour
l'instant.

L'utilisation de valeurs de change variables permettent, d'un côté, la
conservation d'anciennes valeurs de change, et d'un autre côté une
meilleur précision dans le taux. Par ailleurs, une deuxième table pour
ces valeurs changeantes permet également d'enregistrer des taux de
change dans plusieurs sens si nécessaire (voir structure).

Après mûre réflexion, j'arrive, du côté de la DB, à la structure
suivante:
Table llx_currency
------------------
rowid           int             //l'identifiant unique
name            char(20)        //un label pour la traduction
iso4217code     char(3)         //le code officiel en 3 lettres
symbol          char(2)         //le symbole, parfois inexistant
format          char(20)        //format type printf [1]
precision       int             //nombre de chiffres après la virgule
thousand_sep    char(1)         //séparateur des milliers
decimal_sep     char(1)         //séparateur décimal

Table llx_currency_rate
-----------------------
rowid                   int     //id unique
fk_currency_id          int     //devise
fk_ref_currency_id      int     //devise de référence [2]
tms_start               timestamp //date de début de validité
tms_end                 timestamp //date de fin de validité
change_rate             float   //taux de change pour une unité de la 
                                //devise de référence

[1] Le format d'affichage d'une chaîne de caractère dans cette devise
serait une chaîne de caractère de ce type:
S ND où:
- S est l'endroit où se trouve le symbole
- N est l'endroit où se trouve le marqueur négatif (si présent)
- D sont les chiffres (digits)

[2] La devise de référence est par défaut la devise indiquée dans la
configuration de Dolibarr comme devise par défaut, mais il peut y en
avoir +. L'utilisation d'entiers indexés permet un filtrage rapide du
sens dans lequel on veut avoir la devise. Les timestamps sont peut-être
à modifier pour utiliser des formats "date", ça dépend si c'est plus
rapide ou pas.

Par défaut, le système (Dolibarr) utiliserait une seule devise (un seul
enregistrement dans llx_currency_value) dont le taux de change serait de
1, la date de début le 1/1/1970 et la date de fin serait à NULL. A
l'activation du module multi-devises, il faudrait indiquer un URL où
puiser les valeurs (les valeurs légales ne sont pas les valeurs Yahoo!
Finance, c'est important), avec si possible des sites par défaut où
aller chercher ces infos.

Le module multi-devises ne serait pas utile dans beaucoup de cas, c'est
pourquoi il vaut mieux en faire un module. Par contre, il est important
que les différentes tables d'objets (factures par exemple) disposent
d'office d'un champ "devise" qui serait mis par défaut à la devise du
système, et il est aussi important que la table llx_currency soit
remplie des valeurs disponibles dans l'ISO 4217, histoire que la
référence à la devise dans les factures existantes soit correcte quand
on active le module multi-devises.

Des réflexions/objections/idées?

Yannick





reply via email to

[Prev in Thread] Current Thread [Next in Thread]