ERP Triple Bilan : Evaluation d'ERPNext
Après avoir évalué les outils Odoo, Anyblok et Tryton, HashBang réalise sa dernière évaluation sur l'ERP ERPNext. Ces évaluations ont pour but de choisir l'outil le plus adapté à notre projet d'ERP Triple Bilan : un ERP comportant des modules permettant de faire des bilans de comptabilité, mais aussi des bilans sociaux et environnementaux.
Contexte de l’évaluation
Notre évaluation s'est portée sur l'application ERPNext en version 12, en traduction française.
L'entreprise Frappé Technologies
Frappé Technologies, l'entreprise qui est à l'origine d'ERPNext, est une entreprise indienne, basée à Mumbai. Elle a été fondée par Rushabh Mehta en 2010. Dès le début de l'entreprise, le projet ERPNext est un logiciel libre. Il vise en particulier les PME. L'entreprise compte environ 70 employés, et en 2017, le fondateur estime à 3000 le nombre d'entreprises utilisatrices d'ERPNext dans le monde.
Outre ERPNext, l'entreprise est également à l'origine de Frappé Framework. Ce framework, également opensource, permet à des développeurs d'apporter des modifications à ERPNext, créer de nouveaux modules, voire créer un site web à part d'ERPNext, mais ayant la même structure et le même type d'interface.
L'entreprise propose des services payants autour d'ERPNext : hébergement, support, aide à la montée de version, etc. Enfin, elle porte des valeurs, comme la liberté donnée aux utilisateurs grâce à la licence libre, la transparence et le respect des individus.
La communauté
ERPNext dispose d'une communauté assez active sur son forum. Ce dernier est trié par thématiques pour utilisateurs comme pour développeurs, et des messages sont épinglés pour chaque thématique pour répondre aux questions les plus posées à ce sujet.
La communauté d'ERPNext s'organisait, à l'origine, autour de l'ERPNext Foundation. On peut trouver sur le site de la fondation un blog, des TODO, des événements autour d'ERPNext, etc. Cependant, beaucoup de sections ne sont plus mises à jour depuis quelques années. En effet, la communauté se déplace vers FOSS United, qui réunit des communautés de plusieurs logiciels libres indiens. La communauté exclusive à ERPNext n'est plus présente que sur le forum.
Sur le site de la fondation, nous avons remarqué une mise en avant des entreprises qui, comme ERPNext, développent et proposent des services autour d'ERPNext. Nous avons ainsi découvert Dokos, une entreprise française à l'origine d'un fork d'ERPNext, et dont le but est d'adapter l'ERP aux normes françaises et européennes.
Enfin, Frappé ne propose pas de marketplace pour publier des modules communautaires ERPNext, mais des passionnés de la communauté ont créé une marketplace communautaire, leur permettant de partager leurs modules customs au reste de la communauté.
Points positifs :
- Les messages épinglés pour chaque thématique du forum
- Le fait que les employés de Frappé, y compris le fondateur, soient assez actifs sur le forum
Points négatifs :
- Le manque de modération du forum au niveau de la suppression des tickets, ce qui rend son utilisation plus compliquée
- Le relatif manque d'organisation de la communauté en ce moment
- Le dépôt Dokos n'est pas lié au dépôt d'ERPNext, ce qui donne l'impression qu'ils ne souhaitent pas contribuer à la communauté amont ERPNext.
Les licences
ERPNext est sous licence GNU General Public Licence version 3, toute personne hébergeant une instance d'ERPNext doit donc rendre public son code source et doit le laisser sous licence libre. Cependant, Frappé Framework est sous licence MIT, ce qui signifie que des outils créés à l'aide de Frappé Framework peuvent être sous licence propriétaire.
Au niveau de la communauté, Dokos est également sous licence GNU GPL3, et les modules de la marketplace sont sous diverses licences opensources.
L'ergonomie
Points positifs :
- Il est possible de renseigner beaucoup de détails
- Le système de pastilles qui permet de savoir quoi faire pour pouvoir utiliser tel ou tel outil
- La possibilité de créer un objet pendant la création d'un autre objet
Points négatifs :
- Très verbeux, beaucoup de texte et beaucoup de champs pour créer un objet, on peut s'y perdre facilement
- De gros défauts de traduction dans la version française
Les fonctionnalités
Fonctionnalités | Présente ? | ERPNext ou Communauté ? |
---|---|---|
CRM | Oui | ERPNext |
Vente | Oui | ERPNext |
Facturation | Oui | Communauté (moyen sur ERPNext) |
Comptabilité | Oui | Communauté (moyen sur ERPNext) |
Notes de frais | Oui | ERPNext |
Congés | Oui | ERPNext |
Fiches | Non | ERPNext |
Planning prévisionnel | Oui | |
Gestion de projet | Oui | ERPNext |
Messagerie | Oui | ERPNext |
Point de vente | Oui | Communauté (moyen sur ERPNext) |
Gestion des stocks | Oui | ERPNext |
Billeterie | Non |
Dans le cadre de notre utilisation d'ERPNext, nous avons utilisé plusieurs documentations : la documentation d'ERPNext pour l'utilisation de l'outil, et la documentation de Frappé Framework pour la customisation par le code.
La documentation écrite d'ERPNext est divisée en grandes catégories : commencer, customiser, l'utilisation des modules, etc. Chaque catégorie est composée de sections, incluant des sous-sections qui sont soit une présentation d'un concept, soit un tutoriel. Une sous-section aborde son sujet du plus simple au plus complexe, il n'est pas obligatoire d'avoir compris une section dans son intégralité pour pouvoir utiliser la fonctionnalité présentée.
La documentation de Frappé est constituée d'un plan également progressif. Elle commence par une section qui explique pourquoi utiliser Frappé, quels sont les concepts à maitriser, l'architecture d'un module, puis enchaine sur un tutoriel progressif pour concevoir soi-même ce qu'on appelle une "app", c'est à dire un outil sous Frappé Framework qui peut interagir avec ERPNext, ou alors être utilisé seul en tant qu'application web. Il y a enfin les documentation de toutes les API et autres outils utilisés dans Frappé Framework.
Points positifs :
- Beaucoup de détails dans les documentations, présentés du plus simple au plus complexe
- L'explication des notions propres à ERPNext, et des liens vers ces explications quand les notions sont évoquées ailleurs
- Les illustrations par des GIF dans la documentation d'ERPNext, plus efficaces que des légendes sur une image statique
- L'excellent tutoriel pour créer un module pas à pas sur Frappé Framework
Points négatifs :
- Ce n'est pas très bien expliqué dans la documentation ERPNext qu'on peut faire de la customisation par le code avec Frappé Framework, et dans la documentation Frappé Framework qu'on peut l'utiliser pour faire de la customisation sur ERPNext
- Le fait d'utiliser la traduction française de l'outil rend assez difficile l'utilisation de la documentation ERPNext
Les technologies utilisées
ERPNext utilise par défaut le gestionnaire de base de données opensource MariaDB, mais il est compatible avec PostgreSQL. Il utilise également Jinja pour pouvoir éditer des templates de factures et autres documents.
Frappé Framework utilise ses propres API pour le développement : une API Python pour faire du backend (incluant de l'ORM), une API Javascript pour le frontend de l'application et du Bootstrap (HTML/CSS) pour la partie site web.
L'architecture
ERPNext étant un outil développé avec Frappé Framework, l'architecture d'ERPNext est semblable à l'architecture de n'importe quelle app développée avec Frappé Framework.
L'architecture d'une app est basée sur un système de modèles (classes python assimilées à des tables SQL) et de vues (fichier qui implémente l'interface) associés à des modules (les outils d'un ERP correspondant chacun à une fonctionnalité). Mais Frappé Framework ajoute une surcouche aux notions de modèles et de vues : les Doctypes.
Un Doctype est un formulaire présentant différents champs et différentes options. Les champs que l'on choisit de mettre servent ensuite à créer le modèle associé au Doctype, et les options sélectionnées servent à générer une des différentes vues préexistantes de Frappé Framework.
Ainsi, dans l'architecture d'une app, chaque module présente un dossier doctype, composé lui-même d'autant de dossiers que de Doctypes dans le module en question. Le dossier d'un Doctype présente un fichier JSON comportant tous les champs du Doctype et toutes les options qui ont été choisies. Il présente aussi un fichier Python pour la customisation du modèle, et un fichier Javascript pour la customisation de l'interface. Le Doctype peut fonctionner avec ces 2 derniers fichiers vides de contenu.
Points positifs :
- Pouvoir créer des modèles dans des modules à part des modules d'ERPNext, ou même dans une autre app Frappé Framework
- Avoir un fichier pour customiser le backend, et un pour le frontend
- Pas besoin de penser à déclarer ses nouveaux modèles/modules dans un fichier de paramétrage
Points négatifs :
- La surcouche du Doctype qui nous cache beaucoup de code, ce qui réduit notre contrôle sur l'application
Les API
Il est possible d'accéder à son instance ERPNext en tant qu'API en ajoutant /api après le nom de domaine de l'instance. On peut ainsi aller chercher des données de la base de données ou sur les modules ERPNext, le tout au format JSON. Ce système est protégé par un système d'authentification qui peut être customisé.
L'installation
Nous avons rencontré de grandes difficultés à installer ERPNext sur nos machines, en particulier sur Ubuntu 20.10 (l'installation n'a pas été mise à jour pour cette version d'Ubuntu).
Il y a plusieurs manières d'installer ERPNext, réparties dans différents liens sur le dépôt GitHub de Frappé. Nous avons fini par réussir à installer ERPNext en réalisant une installation des fichiers sources d'un outil développé par Frappé : Bench. C'est un outil en ligne de commande qui permet de faciliter l'installation de Frappé Framework et ERPNext, et de gérer les applications créées avec Frappé Framework. Il faut alors utiliser la commande bench pour pouvoir installer ERPNext, la lier à son adresse localhost, et enfin démarrer une instance.
Pour les personnes qui connaissent Docker, il est également possible d'installer ERPNext en utilisant une image Docker pour environnement de développement. Après installation de cette image, on entre dans le container dans lequel la commande Bench est déjà installée. Il suffit alors de suivre les mêmes étapes décrites au dessus. C'est une installation plus simple que l'installation manuelle, mais, la documentation étant assez succintes, des connaissances sur Docker sont nécessaires pour la réussir.
Parmi toutes les méthodes d'installation que nous avons essayé, beaucoup ne sont pas complètes : elles n'indiquent pas les dépendances, et il doit manquer des étapes, puisque nous avons échoué à installer ERPNext avec plusieurs méthodes.
Points positifs :
- Avoir un binaire qui permet de faciliter l'installation et l'utilisation d'ERPNext avec un terminal
- Pouvoir installer avec Docker dans un environnement de développement
Points négatifs :
- Trop de manières différentes d'installer
- Des explications incomplètes pour les différentes installations
- Les informations d'installation éparpillées dans trop de liens différents
- La documentation d'installation avec Docker qui ne permet pas à des novices de Docker de réaliser cette installation
La customisation
Il existe deux manières de faire de la customisation sur ERPNext : par l'interface et par le code.
En tant qu'administrateur, il est possible depuis l'interface ERPNext de créer un Doctype, le lier à d'autres Doctypes de l'ERP, calculer un champ à partir d'un autre, paramétrer la vue, régler les permissions d'accès, etc. Il est même possible de créer des scripts Python pour pouvoir spécifier le comportement d'un champ. Cependant, cette méthode ne permet pas de faire beaucoup de customisation frontend. De plus, comme cette customisation n'est pas inscrite dans le code, cette manière ne permet pas de sauver ses modifications dans un dépôt git, et donc de développer un module que nous pourrons déployer sur d'autres instances.
Pour contourner ces problèmes, il est possible de faire de la customisation par le code grâce à Frappé Framework. Le tutoriel de sa documentation nous permet ainsi de créer des Doctypes de la même manière que précédemment, mais surtout de les sauver dans une nouvelle "app". Les fonctions Python peuvent s'écrire dans le fichier Python du Doctype qu'on souhaite modifier. Il devient aussi possible de customiser l'interface d'un Doctype en modifiant son fichier Javascript. Enfin, il est possible de créer une vue web du Doctype et de la customiser en modifiant le fichier HTML associé.
Points positifs :
- La facilité de customisation, en particulier par l'interface
- La clarté des explications, que ce soit par l'interface ou par le code
- Pouvoir sauver ses modifications (y compris des modifications de modules d'ERPNext) dans un dossier à part d'ERPNext
Points négatifs :
- Quelques détails manquants à trouver sur le forum (par exemple, passer en mode Développeur)
- La customisation qui ne peut pas vraiment se faire entièrement par le code, il semble nécessaire de passer par l'interface pour la création de Doctypes
- Le fait qu'il y ait deux API à maitriser pour pouvoir faire de la customisation : l'API Python et l'API Javascript. Ça complique granLa gestion de permissions des utilisateursdement l'apprentissage de la customisation sur ERPNext
La gestion de permissions des utilisateurs
La gestion des permissions peut se faire grâce à trois outils. Il est possible de créer des rôles de permissions qui peuvent hériter d'autres rôles, et dont on peut régler l'accès à tel ou tel module. On peut aussi régler les permissions CRUD d'un Doctype pour tel ou tel rôle ou utilisateur. Enfin on peut paramétrer n'importe quel champ d'un Doctype pour que seulement les rôles ayant un certain niveau de permission (représenté par un entier) aient accès à ce champ.
Afin de pouvoir réutiliser des rôles dans d'autres instances, il est possible d'exporter au format CSV les permissions de n'importe quel rôle, puis d'importer ce fichier CSV dans une autre instance d'ERPNext.
Points positifs :
- Une gestion des permissions très poussée qui permet de répondre à beaucoup de besoins
- La simplicité de cette gestion
Points négatifs :
- Les permissions n'ont pas l'air de pouvoir se gérer par le code, ce qui complique la documentation et l'importation dans d'autres instances
Les tests unitaires
Frappé Framework propose des fonctions de test, que ce soit pour les fichiers Python (backend) comme les fichiers Javascript (frontend). En mode Développeur, lorsqu'on crée un Doctype, les fichiers de test Python sont automatiquement créés. Il suffit d'écrire ses fonctions de test dans ce fichier. On peut ainsi tester le fonctionnement d'un Doctype, d'un module ou d'une "app".
La partie Javascript peut être testée grâce à l'outil Cypress, qui est intégré à Frappé Framework. Il permet de réaliser des tests en utilisant l'interface ERPNext, pour vérifier que l'action qui a été faite dans l'interface s'exécute correctement, jusque dans la base de données.
Points positifs :
- La possibilité de tester les différentes entités d'ERPNext dans leur ensemble
- Le test backend et le test frontend
Le déploiement
Une fois que l'installation d'ERPNext est réussie, le déploiement est extrêmement simple à faire. A la place de lier ERPNext à son adresse localhost, il suffit de le lier à l'adresse sur laquelle on souhaite déployer l'instance.
Dans le cas où on a installé ERPNext avec l'image Docker de développement, le déploiement est cependant un peu plus laborieux, mais il est bien documenté sur le dépôt GitHub de Frappé.
Points positifs :
- La simplicité de réalisation grâce à Frappé Framework
- La documentation présente pour le déploiement à partir de l'image Docker de développement
Les migrations
La commande Bench permet de pouvoir effectuer les migrations très simplement. En effet, les "app" qui sont installées sont souvent liées à un dépôt git. Lorsque ce dépôt est mis à jour, il suffit alors de faire un backup de sa base de données, puis de se placer dans le dossier de l'"app", faire un "git pull", et exécuter des commandes bench afin de bien installer les mises à jour, notamment au niveau de la base de données.
On remarque ainsi qu'on peut gérer de la même manière les migrations d'ERPNext et et celles d'une "app" qu'on aurait créée avec des modules customs dedans. Si on effectue des modifications sur le dépôt git où ces modules se trouvent, il faudra exécuter les mêmes étapes pour appliquer les modifications à son instance.
Points positifs :
- La très grande simplicité de migration, même pour la base de données, tous les scripts sont inclus dans Frappé Framework
- Le fait de pouvoir gérer de la même manière les changements sur ses modules customs
La cohérence entre les versions
Il est possible de trouver des CHANGELOG et release notes d'ERPNext sur le site d'ERPNext, sur le forum, ou encore sur le dépôt GitHub.
ERPNext présente des CHANGELOG très denses et donc assez difficiles à étudier. Même entre deux versions mineures, les releases notes sont très longues et comportent en général de nouvelles fonctionnalités. De plus, les releases notes entre deux versions majeures ne font pas de comparatif avec la version précédente, ce qui nous informe difficilement sur les changements qui ont été faits. On peut donc considérer qu'il y a beaucoup de changements entre deux versions, en particulier entre deux versions majeures, ce qui risque de rendre difficile l'utilisation à long terme de l'outil : les utilisateurs comme les développeurs devront potentiellement réapprendre à utiliser ERPNext à chaque montée de version.
Points positifs :
- La présence de releases notes et de CHANGELOG très précis et exhaustifs
Points négatifs :
- La difficulté d'étude des CHANGELOG par leur densité et l'absence de résumé
- Les très nombreuses modifications d'une version à l'autre
Conclusion
Après évaluation de l'outil ERPNext, nous reconnaissons de grandes qualités à cet ERP qui nous semble très puissant, par la facilité déconcertante de customisation, de déploiement et de migration, une interface assez élégante, et un grand nombre de fonctionnalités de base.
Cependant, certains aspects de l'outil nous effraient un peu en ce qui concerne le développement sur ERPNext. D'abord, l'apprentissage de deux API très conséquentes pour pouvoir faire de la customisation backend et frontend. Enfin et surtout, le fait que beaucoup de code soit caché à l'intérieur de Frappé Framework et de Bench, ce qui risque de poser des problèmes pour mettre certains de nos travaux sur git, ou bien si une commande bench échoue et abime notre instance.
Un grand merci à Florian Henry de nous avoir aidé dans notre évaluation d'ERPNext.