Dolibarr est une suite ERP/CRM open‑source très appréciée des PME et des auto‑entrepreneurs. Sa force réside dans sa modularité : chaque module (achat, vente, stocks, comptabilité, etc.) s’installe comme un plugin et possède ses propres écrans, mais l’ensemble de la solution repose sur un schéma d’architecture unique qui facilite la création de rapports personnalisés et automatisés.
Dans cet article, nous allons détailler comment exploiter l’architecture de Dolibarr pour mettre en place un reporting fiable et rapide, permettant ainsi de libérer du temps précieux pour les activités à plus forte valeur ajoutée.
1. L’architecture de base de Dolibarr| Niveau | Description | Impact sur le reporting |
|——–|————-|————————–|
| 1. Base de données | MySQL, PostgreSQL ou SQLite selon la configuration. Toutes les données (clients, fournisseurs, stocks, factures, etc.) sont stockées dans des tables simples et normalisées. | Les requêtes SQL sont rapides et permettent d’extraire exactement les champs dont vous avez besoin. |
| 2. Core Dolibarr | Système commun à tous les modules (menus, fonctions PHP, hooks). | Les hooks ($hooks->add) offrent un point d’extension pour injecter du code de reporting sans toucher au cœur du module. |
| 3. Modules | Chaque processus métier (ex. : Card, Product, Invoice) possède des tables dédiées, mais partagent le même schéma de connexion. | Un seul point d’accès aux données ; vous pouvez bâtir des rapports transversaux (ex. : “ventes par client et par produit”). |
| 4. API / Front‑office | REST‑like endpoints (Dolibarr 7+), JSON, XML. | Idéaux pour créer des tableaux de bord externes ou des intégrations avec des outils tiers (Power BI, Grafana). |
Résultat : Une architecture « unifiée » où les données sont structurées mais accessibles de plusieurs façons (via les écrans back‑office, les API, ou directement via SQL).
2. Pourquoi le reporting Dolibarr est rapide à mettre en place ?
-
Modularité native
Chaque module possède déjà des listes, des graphiques (Chart module) et des exportations CSV/Excel. Il suffit de copier ces widgets et de les assembler. -
Accès direct aux tables Pas besoin d’une couche d’abstraction supplémentaire : on interroge simplement les tables (
$db->query(...)) ou on utilise les classes d’objet (new Product($db)). -
Hooks & Plugins
$hook->addpermet d’intercepter la génération d’une commande ou d’un paiement afin d’enregistrer des événements dans une table dédiée.$hooks->add('functionName', 'class::method')crée des déclencheurs qui peuvent alimenter des tables de logs ou de KPI.
- Exportation intégrée
CSV, PDF, XLSX sont générés à la volée; vous pouvez les placer dans un répertoire partagé et les consommer depuis un script de consolidation.
3. Étapes concrètes pour créer un tableau de bord de reporting
3.1. Préparer l’environnement
# Installation type (Ubuntu/Debian)
apt-get update && apt-get install -y apache2 php php-mysql mariadb-server
wget https://github.com/Dolibarr/dolibarr/archive/refs/tags/v14.0.0.tar.gz
tar xzf v14.0.0.tar.gzmv dolibarr-14.0.0 /var/www/dolibarr
chmod -R 0755 /var/www/dolibarr
- Créez une base
dolibarr_dbet un user dédié. - Testez l’accès via
http://votre‑domaine/dolibarr.
3.2. Installer les modules indispensables
| Module | Fonction | Utilité pour le reporting |
|---|---|---|
| Dashboard (core) | Graphiques rapides | Visualisation de KPI clé (CA, stocks). |
| Chart | Génère des graphiques via pChart | Personnalisation des courbes, barres, diagrammes de Gantt. |
| Export | Export CSV/ODS | Extraction automatisée des listes. |
| CRON | Scheduler intégré | Planification d’exports récurrents. |
3.3. Créer une table de KPI personnalisée (ex. : dol_kpi)
CREATE TABLE dol_kpi (
id INT AUTO_INCREMENT PRIMARY KEY,
date_report DATE NOT NULL,
label VARCHAR(255) NOT NULL,
value DECIMAL(15,2) NOT NULL,
source VARCHAR(100) -- ex. 'sales_today', 'stock_alert'
);
- Hook : enrichir la facturation avec un compteur de KPI.
// dans un module custom/KPI.php
$hook->add('endOrBooking', 'KPI::saveKPI');
class KPI {
public static function saveKPI($parameters) {
$db = new Sql_db();
$db->connexion();
$sql = 'INSERT INTO dol_kpi (date_report, label, value, source)
VALUES ('.$db->quote($db->now().'), "CA du jour", '.$db->quote($_SESSION['total_facture']).', "sales_today")';
$db->query($sql);
}
}
3.4. Construire le tableau de bord
- Créer une page PHP (
reporting_dashboard.php) dans le répertoire du module custom. - Récupérer les KPI :
« `php$res = $db->query(‘SELECT * FROM dol_kpi WHERE date_report >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) ORDER BY date_report DESC’);
while ($obj = $db->fetchObject($res)) {
$data[] = (array)$obj;
}
3. **Inclure le moteur Chart** et générer le graphique :
```php
require_once('/var/www/dolibarr/core/modules/chart/chart.class.php');
$chart = new Chart();
$chart->addLine('CA Journalier', $labelsArray, $valuesArray);
echo $chart->getHTML();
- Export automatisé via un script cron (ex. :
php export_kpi.php). « `php
// export_kpi.php
require_once ‘/var/www/dolibarr/includes/config.php’;
requireonce ‘/var/www/dolibarr/core/lib.php’;
$file = ‘/var/www/dolibarr/docs/exports/kpi‘ . date(‘Ymd’) . ‘.csv’;
$fp = fopen($file, ‘w’);
fputcsv($fp, [‘date’, ‘label’, ‘value’]);
while ($row = $db->fetchObject($res)) {
fputcsv($fp, [$row->date_report, $row->label, $row->value]);
}
fclose($fp);
- Cron :
0 2 * * * /usr/bin/php /var/www/dolibarr/export_kpi.php >> /var/log/kpi_export.log 2>&1
4. Automatiser les flux de reporting
| Besoin | Solution Dolibarr | Exemple d’automatisation |
|---|---|---|
| Rapports mensuels | Module Report + CRON | Générer un PDF résumant CA, marge et rotation des stocks chaque 1er du mois. |
| Alertes de seuil | Hook + Table dol_alerts |
Quand le stock d’un produit passe sous 5 %, créer un ticket via l’API ou envoyer un email. |
| Intégration Power BI | API REST (Dolibarr 7+) | Power BI interroge /dolibarr/api.php?resource=invoice&range=last30days et rafraîchit le tableau de bord quotidiennement. |
| Dashboard temps réel | WebSocket via plugin Pusher ou socket.io | Notification instantanée lorsqu’une facture dépasse le montant de seuil configuré. |
5. Bonnes pratiques pour gagner du temps
| ✔️ Astuce | Pourquoi elle compte |
|---|---|
Utiliser le même prefixed td_ (prefix table) dans tous vos scripts |
Évite les collisions de noms avec les modules cœur ou d’autres plugins. |
Centraliser les requêtes SQL dans une classe ReportDB |
Facilite la maintenance ; un seul endroit où vous modifiez le schéma si vous devez ajouter un champ. |
| Profiter du cache des graphiques Chart | Enregistrer les images générées dans /docs/reports/ et les réutiliser tant que les données n’ont pas changé. |
| Planifier les exports lourds la nuit | Réduit la charge sur le serveur pendant les heures de pic et garantit des rapports disponibles le matin. |
| Documenter chaque hook (nom, fichier, classe) | Permet aux équipes de reprendre le projet sans douter de la fonction du hook. |
| Versionner le code custom (Git) | Historiser les évolutions du reporting ; possibilité de revenir à une version stable si un bug apparaît. |
| Faire des tests unitaires sur les fonctions de calcul KPI | Garantit la cohérence des indicateurs (ex. : réconciliation avec le module comptable). |
6. Exemple complet : Rapport “Ventes par client & produit”
-
Création d’une vue SQL (
vw_client_product_sales) :CREATE VIEW vw_client_product_sales AS SELECT
c.label AS client,
p.ref AS produit,
SUM(l.price * l.qty) AS total,
COUNT(l.id) AS nb_lignes
FROM llx_sales l
JOIN llx_client c ON l.fk_client = c.id
JOIN llx_product p ON l.fk_product = p.id
WHERE l.fk_compte = 1
AND l.date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
GROUP BY c.label, p.ref; -
Récupération dans le script
$res = $db->query('SELECT * FROM vw_client_product_sales ORDER BY total DESC');
$ rows = [];
while ($obj = $db->fetchObject($res)) {
$rows[] = (array)$obj;
}
// Convertir en JSON pour le front‑end ou en CSV pour export. - Affichage via un simple tableau HTML ou via Chart.js (intégration possible grâce au module js).
- Planification :
php export_client_product_report.phpexécuté chaque 1er du mois.
7. Conclusion
L’architecture de Dolibarr repose sur un système de tables partagées et d’API uniformisées, ce qui rend la construction de rapports très naturelle et rapide à mettre en œuvre. En exploitant :
- Les hooks et plugins pour enrichir les flux métier,
- Les modules intégrés (Chart, Export, Dashboard),
- Les scripts CRON et les API REST,
il devient possible de créer des rapports automatisés, prenables en charge par des outils de Business Intelligence externes, et de les diffuser sous forme PDF/CSV/Graphiques avec un minimum de code.
En suivant les bonnes pratiques ci‑dessus (organisation du code, versionning, planification nocturne), vous libérez plusieurs heures chaque semaine qui peuvent être consacrées à l’analyse stratégique plutôt qu’à la génération manuelle de rapports.
En bref : avec Dolibarr, le reporting n’est pas une tâche supplémentaire ; c’est une composante native, extensible et parfaitement intégrée qui, lorsqu’elle est correctement configurée, vous permet de gagner du temps à chaque cycle de reporting. Bonne implémentation ! 🎯