Retrouvez cet article dans : Linux Magazine 77
De plus en plus d’entreprises s’équipent d’un logiciel pour leur gestion interne. Les ERP – Enterprise Ressource Planner – peuvent atteindre des prix très élevés pour des résultats parfois médiocres. Beaucoup sont développés avec l’environnement WinDev et ne disposent pas des fonctionnalités réseau pour le partage des données entre les différents services. Mais en plus, une grande majorité n’est compatible qu’avec le système d’exploitation Microsoft Windows. Dolibarr, quant à lui, est une application web en PHP sans exigence sur le navigateur web.
Rodolphe Quiedeville crée la société Lolix en 2000. Il code alors Dolibarr pour gérer sa nouvelle entreprise. C’est après l’avoir montré à des connaissances qu’il décide de le livrer à la communauté du Libre.
Il en garde cependant le contrôle et gère les contributions qui lui sont envoyées. Dès 2004, l’équipe devient plus forte, proposant alors tout un lot de nouvelles fonctionnalités.
Aujourd’hui, l’utilisation de Dolibarr pour une PME ou une TPE reste une solution tout à fait rentable et efficace.
[1] Vous trouverez l’archive à installer sur le site officiel http://www.dolibarr.com ou sur notre CD-ROM de couverture.
Installation
Il s’agit d’une étape délicate. Cet article est d’ailleurs consacré à la configuration et à l’installation. Un article dans un prochain numéro de Linux Pratique abordera l’administration et l’utilisation de Dolibarr.
Vous devrez disposer d’un serveur Apache avec PHP et MySQL – un support de PostgreSQL sera disponible dans les futures versions. Copiez le contenu du sous-répertoire htdocs de l’archive Dolibarr dans un dossier accessible par Apache.
Si vous utilisez PHP5, vous devrez modifier le nom de la fonction clone ainsi que tous ses appels. En effet, le mot clone est désormais un mot clé de PHP.
Ce problème n’est plus présent dans la version CVS de Dolibarr. Vous devez créer un utilisateur et une base de données MySQL.
Pour cela, vous pouvez utiliser phpMyAdmin ou encore MySQL Administrator – que vous pourrez obtenir sur le site même de MySQL. N’oubliez pas d’attribuer les privilèges de manipulation de tables et de données.
L’installation de Dolibarr [1] même débute par la copie du contenu du dossier Dolibarr dans un répertoire parent de la racine des données du serveur Apache. Dans le cas présent, ce sera dans /var/www. Bien sûr l’utilisation des hôtes virtuels d’Apache est parfaitement adaptée.
Créez alors un dossier documents et un fichier conf/conf.php dans votre répertoire d’installation (/var/www/htdocs). Vous devrez attribuer les droits d’écriture à ces deux entités. Différents scripts sont fournis pour vous permettre une migration au cas où vous utiliseriez déjà une version antérieure.
Afin de continuer, vous devez ouvrir votre navigateur web. Entrez alors l’adresse http://localhost/install/index.php. La première page vous informe alors de la disponibilité du fichier conf/conf.php. Cliquez tout simplement sur le bouton Next Step ->.
Acceptez alors la licence GPL v2. Vous découvrez ensuite un écran de configuration. Théoriquement, les trois premiers champs de texte sont correctement remplis. Ils sont en effet complétés selon les paramètres de votre navigateur et l’emplacement des scripts. La partie sur la base de données sera, elle, à compléter.
Le SGBD MySQL est recommandé car la compatibilité avec PostgreSQL n’est pas encore opérationnelle en totalité. L’ensemble des paramètres restant sur cette page est suffisamment explicite pour ne pas être commenté. Les deux écrans suivants ne demandent aucune donnée supplémentaire. Ils indiquent juste le bon ou le mauvais fonctionnement de la procédure.
Entrez ensuite le nom d’utilisateur et le mot de passe de l’administrateur. Vous pouvez alors entrer dans la page de configuration. Supprimez le répertoire /var/www/htdocs/install. L’ensemble des modules, l’administration et l’utilisation de Dolibarr seront présentés dans un prochain numéro de Linux Pratique.

Fig. 1 : Installation sous elinks

Fig. 2 : Installation avec Firefox
Architecture
Quelques répertoires ont déjà été utilisés. htdocs contient les scripts PHP qui génèrent les pages XHTML. mysql et pgsql contiennent respectivement les définitions des tables SQL pour MySQL et PostgreSQL. Les scripts dans un langage autre que PHP sont stockés dans le répertoire scripts et la documentation dans doc. Nous nous intéresserons par la suite au contenu de htdocs.

Fig. 3
Le répertoire htdocs/install était utile pour l’installation, mais il faut toujours le supprimer pour des raisons de sécurité. En effet, une personne mal intentionnée peut tout à fait ré-exécuter l’installation et récupérer un compte administrateur. Le dossier conf, quant à lui, doit être protégé.
Toutes les données de configuration y sont stockées dont le mot de passe de la base de données. Le fichier le plus important de ce répertoire est bien sûr conf/conf.php.
La syntaxe utilisée est celle de PHP. Vous trouverez ci-dessous l’exemple type de configuration. Le fichier est rempli automatiquement lors de l’installation, mais un changement de serveur ou de mot de passe pour la base de données nécessite sa modification.
<?php // URL de la page principale de Dolibarr $dolibarr_main_url_root=» http://localhost»; // Chemin du répertoire htdocs de Dolibarr $dolibarr_main_document_root=»/var/www/htdocs»; // Chemin du répertoire des documents $dolibarr_main_data_root=»/var/www/htdocs/documents»; // Serveur de base de données $dolibarr_main_db_host=»localhost»; // Nom de la base de données $dolibarr_main_db_name=»dolibarr»; // Utilisateur de la base de données $dolibarr_main_db_user=»dolibarr»; // Mot de passe $dolibarr_main_db_pass=»mdp»; // Type de la base de données $dolibarr_main_db_type=»mysql»; ?>
Comme vous avez pu le remarquer à l’utilisation, l’architecture même de Dolibarr est modulaire. Chaque module est déclaré par une classe enfantée de DolibarrModules.
Cette dernière est contenue dans un fichier htdocs/includes/modules/modMonmodule.class.php où Monmodule est le nom du module, la première lettre étant obligatoirement une majuscule.
Le module est automatiquement installé si le fichier est présent. Il faudra cependant l’activer pour pouvoir l’utiliser. La structure du fichier en question doit respecter quelques règles.
Pour commencer, le fichier contient une unique classe portant le même nom que celui-ci excepté l’extension .class.php.
Quatre tableaux – depends,const, boxes et rights – ainsi qu’un constructeur du même nom que la classe sont obligatoires.
Le premier tableau définit les dépendances avec d’autres modules, le second les constantes utiles, le troisième les différentes boîtes et le quatrième les différents droits. Bien sûr, si vous souhaitez créer votre module, vous devrez en étudier un existant.
Adaptez Dolibarr !
Le système est utilisable dès la fin de l’installation. Mais, sans une étape d’adaptation, vous serez dépendant des modèles de documents et de la numérotation choisis par les développeurs de Dolibarr.
Oui, vous avez le choix par défaut entre différents modèles. Mais sont-ils tous adaptés à votre entreprise ? Contrairement à d’autres logiciels coûteux, vous pouvez personnaliser vous-même l’ensemble du système. L’ensemble de l’application est conçu pour faciliter la modification d’un thème, d’une propale (proposition commerciale), d’une facture, du système de numérotation et même d’une traduction !
Pour créer un thème, le plus simple reste de copier le répertoire htdocs/theme/dolibarr en htdocs/theme/nouveautheme. Modifiez alors le fichier AUTHOR dans ce nouveau dossier. Rajoutez-y votre copyright. Renommez ensuite le fichier dolibarr.css en nouveautheme.css. Il doit effectivement correspondre au nom du répertoire. Vous pouvez alors l’éditer et apporter vos modifications. Les commentaires restent suffisamment explicites.
Si vous avez un doute, utilisez une couleur très vive et observez le résultat. Le sous-répertoire img contient les différentes images utilisées. Malheureusement, la place manque dans le magazine pour détailler l’ensemble des propriétés CSS et des images.
Les modèles de documents permettent de générer les factures et les propales au format PDF. L’envoi par courriel ou par voie postale en est bien sûr simplifié. Les variables diffèrent légèrement entre la facture et la propale. Le tableau ci-dessous indique l’emplacement des fichiers de modèle.

Bien sûr, chacun de ces types de modèle suit la syntaxe du PHP et propose une structure commune. Comme pour les thèmes, il vaut mieux utiliser un modèle existant et l’adapter selon les besoins initiaux.
Pour cela, nous allons étudier la génération d’une propale. Le modèle le plus complet se nomme vert, mais nous observerons le modèle rouge. Ce dernier, plus simple, convient parfaitement pour une démonstration. Cependant, il n’affiche pas la remise sur chacun des articles.
Cela peut être voulu dans certaines entreprises, ne voulant pas montrer les tarifs appliqués. C’est une pratique courante dans le monde professionnel. Copiez le fichier pdf_propale_rouge.modules.php du répertoire htdocs/includes/modules/propale en pdf_propale_perso.modules.php. Éditez alors ce dernier fichier.
Le nom de la classe doit être changé. Pour respecter les règles de codage, vous devez l’appeler pdf_propale_perso. Cette modification doit également être apportée sur le nom du constructeur. Renommez le modèle en perso et changez la description sur les deux lignes suivantes.
// Changer rouge en perso $this->name = «rouge»; // Remplacer “par défaut» par «personnalisé» $this->description = «Modèle de propale par défaut»;
Vous pouvez désormais activer le modèle sous Dolibarr. Au sein du fichier, trois méthodes nous intéressent : _pagehead (création de l’en-tête), _tableau (création de la liste des produits et des prix) et write_pdf_file (génération du PDF).
Tout d’abord, la méthode _pagehead affiche les adresses en haut de la page. Les modifications qui vont suivre concernent l’apparence même du document. Les couleurs souhaitées sont celles de Tux, la mascotte de Linux.
Par exemple, l’adresse de la société émettrice sera noire. La méthode $pdf->SetTextColor(0,0,200); donne la couleur bleue du titre.
Un peu plus bas, un autre appel à cette méthode avec les valeurs 70, 70 et 170 s’occupe de l’adresse complète. En remplaçant les trois composantes par 0, le texte de la partie concernée du document devient noir.
Il s’agit en effet des trois couleurs rouge, verte et bleue dont la valeur est comprise entre 0 et 255. Il en va de même pour le texte en rouge (la date et la référence du document) que nous mettrons en orange (valeurs 255, 213 et 0).
La première et la troisième lignes suivantes sont à rajouter autour de la seconde. Elles permettent de changer la couleur du cadre de l’adresse en gris et de passer la couleur de dessin à noir pour la suite.
$pdf->SetDrawColor(150,150,150); $pdf->rect(100, 40, 100, 40); $pdf->SetDrawColor(0,0,0);
Le texte « proposition commerciale » paraît pompeux. Ainsi, le terme devis semble plus adapté. Cela se fait en remplaçant la ligne :
$pdf->Text(11, 94, «Proposition commerciale : «.$propale->ref);
par
$pdf->Text(11, 94, «Devis : «.$propale->ref);
L’insertion d’une image en filigrane fait beaucoup d’effets. Le logo, Tux pour notre exemple, doit être une image accessible par Apache.
Son chemin se configure au sein même de l’interface web de Dolibarr. Par défaut, il s’agit de /documents/logo/mylogo.png. L’image sera placée sur le fond au milieu de la page. Bien sûr, Tux a légèrement été retouché pour être beaucoup plus clair.
Il faut absolument garder un texte parfaitement lisible. Les lignes suivantes sont alors rajoutées au début de la méthode _pagehead, pour que l’image soit située en dessous du texte. De plus, cette fonction est appelée à la création d’une nouvelle page.
if (defined(«FAC_PDF_LOGO») && FAC_PDF_LOGO)
{
if (file_exists(FAC_PDF_LOGO)) {
$pdf->Image(FAC_PDF_LOGO, 60, 120, 90, 96, ‘PNG’);
}
}
La méthode Image prend en paramètres le chemin du fichier, l’abscisse et l’ordonnée du coin haut gauche, les coordonnées du coin bas droit et le type du fichier. Après ces quelques modifications, des données importantes manquent sur le devis.
Une entreprise doit afficher son numéro de TVA intracommunautaire. C’est une obligation légale. Pour cela, nous rajoutons la méthode _pagefoot contenant le pied de page.
function _pagefoot(&$pdf, $propale)
{
$pdf->SetTextColor(0,0,0);
$pdf->SetFont(‘Arial’,’I’,8);
$pdf->SetXY(10,250);
$pdf->MultiCell(190, 3, FAC_PDF_INTITULE .
“ - SARL au Capital de “ . MAIN_INFO_CAPITAL .
“ - “ . MAIN_INFO_RCS.” “ . MAIN_INFO_SIREN , 0, ‘L’);
$pdf->SetXY(10,253);
$pdf->MultiCell(190, 3, “N° TVA Intracommunautaire : « .
MAIN_INFO_TVAINTRA , 0, ‘L’);
$pdf->SetXY(190,270);
$pdf->MultiCell(10, 3, $pdf->PageNo().’/{nb}’, 0, ‘R’);
}
Il reste à réaliser l’appel vers cette dernière méthode. Pour cela, la ligne suivante est rajoutée dans write_pdf_file après l’appel à _pagehead.
$this-,_pagefoot($pdf, $propale);
Toute cette démarche peut être reprise pour la facture, la fiche d’intervention ou tout autre document généré par Dolibarr.
Après avoir réalisé ce point, nous passons alors à la modification de la numérotation. Nous nous occuperons de la propale encore une fois. Mais, comme précédemment, vous pourrez utiliser la méthode sur la facture, le client ou toute autre entité.
La numérotation des documents permet l’identification de ces derniers. Il est alors important d’utiliser un système simple et logique.
Le numéro que vous donnerez vous permettra de retrouver la propale. Cela signifie que ce numéro doit être unique sur une grande période.
Si vous attribuez le nombre 1 à la première propale du jour, 2 à la suivante et ainsi de suite, votre utilisation de la numérotation ne sera pas optimale. Imaginez tout simplement un client vous appelant.
Il vous demande de lui renvoyer la facture numéro 4, et il a oublié la date de sortie. Cette facture datant de six mois, vous aurez certainement quelques difficultés à retrouver ce document dans vos archives papier.
Même si ces dernières sont classées par client, vous aurez de fortes chances d’avoir plusieurs factures numérotées 4.
Il est également vivement recommandé de garder le système de numérotation actuel dans votre entreprise.
L’exemple que nous prendrons garde l’unicité permanente des numéros. L’identifiant de la propale sera de cet acabit : «DEV2004-03-1512».
Les trois premières lettres, «DEV», représentent le type de document. Ici, bien sûr, c’est un devis. Les quatre chiffres suivants sont l’année du document.
Ensuite, le mois sur deux chiffres est inscrit. Enfin, la dernière partie correspond au numéro du document dans le mois.
Cela signifie que le document en question est le mille cinq cent douzième devis du mois de mars 2004.
Le nom du fichier de numérotation est de la forme mod_propale_nom.php pour la propale. Les chemins des modules selon les entités sont listés dans le tableau ci-dessous.

Le système de numérotation est géré par un objet. Comme tout à l’heure, pour la propale, c’est un fichier contenant une classe du même nom hormis l’extension.
Pour la facture, ce fichier est placé dans un sous-répertoire à part. La classe est une extension de ModeleNumRefPropales.
Elle contient au moins quatre méthodes. info retourne la description du système de numérotation. getExample permet de connaître un exemple de numérotation. Ici, cette méthode retournera «DEV2004-03-1512». getNextValue calcule l’identifiant suivant et propale_get_num retourne cet identifiant.
Créez un fichier htdocs/includes/modules/propale/mod_propale_perso.php et éditez-le. La première étape consiste à définir la classe comme ci-dessous.
class mod_propale_perso extends ModeleNumRefPropales
{
}
Maintenant, il faut la compléter avec les quatre méthodes. Les deux premières s’implémentent très facilement.
function info()
{
return «Renvoie le numéro sous la forme DEVyyyy-mm-n»;
}
function getExample()
{
return «DEV2004-03-1512»;
}
Évidemment, le calcul du prochain identifiant n’est pas aisé. Deux solutions existent. La première consiste à compter les devis dont l’identifiant commence par «DEVyyyy-mm» où «yyyy» est l’année et «mm» le mois en cours.
Cela permet alors de déterminer le numéro suivant. Cependant, un problème important se pose. Si, le premier mois, le numéro ne doit pas commencer à 1 mais à 60, le bon numéro ne sera pas choisi. Certes, il reste tout à fait possible de modifier le numéro à la main, mais ce n’est pas la meilleure solution.
De même, si une maintenance sur la base de données supprime un devis, le numéro choisi existera déjà. Pour cela, nous procéderons autrement. Ici, nous chercherons effectivement tous les devis dont l’identifiant commence par «DEVyyyy-mm». Ensuite, l’algorithme devra extraire la dernière partie, c’est-à-dire le numéro du devis dans le mois. Le plus grand sera mémorisé et incrémenté de 1. La fonction retournera alors l’identifiant correspondant.
function getNextValue()
{
global $db;
$num = 0;
$i = 0;
$y = strftime(«%Y»,time());
$m = strftime(«%m»,time());
$sql = «SELECT ref FROM «.MAIN_DB_PREFIX.
»propal WHERE ref LIKE ‘DEV$y-$m-%’» ;
if ( $db->query($sql) )
{
$row = $db->fetch_row($i);
while(!empty($row))
{
$test = explode(«-», $row[0]);
if(!empty($test[2]))
$temp = (integer) $test[2];
else
$temp = 0;
if($temp > $num)
$num = $temp;
$i++;
$row = $db->fetch_row($i);
}
}
$num++;
return «DEV» . “$y” . “-” . “$m” . “-” . $num;
}
Enfin, la dernière méthode consiste à retourner le résultat de la précédente. Le code est donc vraiment simple.
function propale_get_num($objsoc=0)
{
return $this->getNextValue();
}
Nous passons alors à la dernière modification abordée dans cet article. La traduction est un long travail souvent difficile. L’ensemble des fichiers de langue sont disponibles dans le répertoire htdocs/langs.
Ce dernier contient un sous-répertoire par langue. Par exemple, le français utilisé en France se situe dans htdocs/langs/fr_FR.
Vu la quantité de données, il vaut mieux copier un répertoire de traduction plutôt que de tout refaire. La traduction se fait dans tous les fichiers .lang dont la syntaxe ressemble à ceci :
# Un commentaire CodeTexteATraduire=Le texte traduit.
Le code ci-dessous est une partie du fichier bills.lang pour la France. Les traductions sont classées par module pour en faciliter la gestion.
OtherBills=Autres factures DraftBills=Factures brouillons Unpayed=Impayées ConfirmDeleteBill=Êtes-vous sûr de vouloir supprimer cette facture ? ConfirmValidateBill=Êtes-vous sûr de vouloir valider cette facture sous la référence %s ? ConfirmCancelBill=Êtes-vous sûr de vouloir annuler cette facture ?
Vous trouverez dans un sous-répertoire html les fichiers gpl.txt et spam.html. Ce dernier est la traduction d’un avertissement sur les lois contre le pourriel. Comme vous avez pu le constater tout au long de l’article, Dolibarr se perfectionne facilement. Malgré quelques différences, la structure est la même sur l’ensemble des composants.
Cette capacité à l’adaptation sert fortement aux entreprises. Cet ERP respecte à la lettre les grands standards du web hormis WAI. Mais même, sans cela, la structure de l’IHM permet de naviguer facilement en mode texte et permet néanmoins une accessibilité accrue pour les déficients visuels.
Même l’installation se réalise sans problème sous elinks, malgré un problème de dépassement de délai. Il vous sera donc aisé d’installer et de configurer Dolibarr pour une entreprise ainsi que les postes clients quel que soit l’utilisateur. Vous pourrez également utiliser les interfaces pour WebCalendar, PostNuke, OsCommerce ou en développer pour vos logiciels. Seulement, Dolibarr demande un serveur Apache et PHP très permissif, surtout à l’installation.
Avec un serveur de petite capacité, il a fallu augmenter les délais autorisés pour l’exécution des scripts. Le plus problématique était vraiment l’installation.
De plus, beaucoup d’hébergeurs « discount » ne proposent pas les librairies nécessaires pour la création des graphiques et encore moins ImageMagick. Enfin, le fait que Dolibarr s’installe à la racine même du serveur par défaut paraît parfois gênant. Vous trouverez sur le site officiel http://www.dolibarr.com un wiki et des liens vers les listes de diffusion.

