Expérience de déploiements Odoo dans des entreprises françaises
Auteur : Alexis de Lattre <alexis _chez_ miluni.fr>

Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0.
La version la plus à jour de ce document se trouve à l'adresse https://alexis.miluni.fr/odoo/
N'hésitez pas à m'envoyer un mail pour me faire part de votre propre expérience sur Odoo et/ou me signaler une erreur ou une faute d'orthographe dans le document.
Introduction
Ce document a pour objectif de faire profiter les personnes envisageant un déploiement d'Odoo dans leur entreprise de l'expérience que j'ai acquise. Son objectif principal est de partager mon avis personnel et ma vision d'Odoo construits à partir de ma propre expérience sur le terrain et de mes contributions au sein de la communauté Odoo. Le lecteur pourra trouver ce témoignage parfois assez éloigné du discours marketo-idéaliste dominant sur Odoo !
Une des limitations de ce retour d'expérience est que vous n'y trouverez pas un comparatif entre Odoo et d'autres ERPs du marché ; en effet, comme je n'ai jamais déployé d'autres ERPs qu'Odoo, je ne suis pas en mesure de faire des comparaisons précises. Mais un de mes collègues, qui a été formé sur d'autres ERPs, en particulier CEGID et Microsoft Dynamics Nav, a publié une serie de petits articles où il compare ces deux ERPs propriétaires avec Odoo.
Historique
| Date | Changement |
|---|---|
| 2012-10-18 | Version initiale |
| 2012-10-19 | Premiers ajouts et correctifs suite au feedback de la communauté. Mention du moteur de rapport basé sur BIRT, signalé par Christophe Chauvet. |
| 2012-12-22 | Mise à jour du projet de moteur de rapport basé sur Pentaho et ajout du projet de moteur de rapport basé sur opengraphane. |
| 2013-01-14 | Mise à jour suite à la sortie d'Odoo 7.0. |
| 2013-01-22 | Ajout d'un lien vers le site openerp2tryton. |
| 2013-03-30 | Mise à jour de la liste des modules utilisés à Anevia (ajout des modules pour les export CSV des balances). Mise à jour de la partie La maturité d'Odoo avec l'arrivée des branches OCB (Odoo Community Branches). Mention du fiasco de la gestion des contacts dans Odoo 7.0 dans le SWOT. |
| 2013-12-30 | Mise à jour importante en cours : OCA, nouvelles pratiques de la communauté, relecture et mise à jour de chaque chapitre, etc. |
| 2014-01-20 | Mise à jour de la partie La maturité d'Odoo avec un lien vers le suivi des bugs d'un autre de mes clients. Mise à jour de la partie Comment utiliser la comptabilité d'Odoo ? à propos de la liasse fiscale, avec un lien vers le blog très détaillé d'Aurélien Dumaine. |
| 2014-04-20 | Petite mise à jour, notamment sur Odoo 8.0 et les moteurs de rapport. |
| 2014-06-05 | Mise à jour sur l'actualité récente d'Odoo. |
| 2015-08-11 | Grosse mise à jour avec toute l'actualité 2014/2015 et un retour d'expérience actualisé avec la v8. |
| 2015-09-15 | Mise à jour de la partie Exemple d'un cas réel avec l'exemple de l'Abbaye du Barroux qui utilise Odoo v8 depuis le 1er Janvier 2015. |
| 2015-09-27 | Mise à jour de la partie Comment utiliser la comptabilité d'Odoo avec la recommandation du module OCA account_asset_management pour la gestion des immobilisations. Mise à jour du schéma d'architecture et ajout d'un schémas sur l'architecture que je recommande. |
| 2016-03-14 | Mise à jour du SWOT avec un mot sur la traduction en français |
| 2024-12-25 | Remise en ligne sur une nouvelle URL alexis.miluni.fr/odoo |
A propos de l'auteur
L'auteur et le logiciel libre
Je suis passionné par le logiciel libre. J'ai fait mes classes à VideoLAN quand j'étais étudiant, où je me suis principalement occupé de la documentation, du site Web, de l'organisation d'événements et de la mise en production de VideoLAN sur le campus de mon école. Comme je n'avais pas de compétences en développement à l'époque, je n'ai pas codé grand chose (à l'exception du support IGMPv3 et MLDv2 dans VLC). VideoLAN m'a permis de "vivre" un logiciel libre de l'intérieur et m'a énormément appris sur la philosophie du logiciel libre, la motivation des développeurs et le fonctionnement des communautés.
Dans la même série, j'ai écrit un document retour d'expérience d'un déploiement Asterisk dans une entreprise française.
Je suis membre actif de l'Odoo Community Association (OCA).
L'expérience Odoo de l'auteur
Je suis le co-fondateur de la société Anevia, qui est un équipementier télécom français spécialisé dans les serveurs de vidéo sur IP. J'ai fondé cette société en 2003 avec 3 camarades d'école, anciens membres du projet VideoLAN comme moi. A Anevia, j'avais la responsabilité de l'administratif (comptabilité, paye, déclarations sociales), de la production/logistique et de l'informatique interne (même si, dans les premières années de la société, comme ces 3 domaines ne m'occupaient pas à temps plein, j'ai surtout œuvré en tant qu'ingénieur commercial et ingénieur support).
Aux débuts d'Anevia, pour parer au plus pressé, j'ai adopté des outils de gestion simples et basiques, à savoir :
- Ciel Compta pour la comptabilité (logiciel mono-poste pour Windows, qu'on peut trouver à la Fnac à 200 €),
- des tableurs OpenOffice multiples et variés pour l'administration des ventes, la facturation client, la production des équipements, la gestion des expéditions, etc... déposés dans un partage Samba,
- une base de contact client/fournisseur faite maison en PHP/MySQL.
Il faut noter qu'Anevia a toujours tenu sa comptabilité en interne.
Ces outils simples et peu onéreux étaient bien adaptés au début de la société. Mais, avec la croissance de la société, quand j'ai commencé à avoir plusieurs employés dans mon équipe, ces outils ont vite révélé leurs limites :
- beaucoup de duplication d'informations et beaucoup de re-saisie d'informations, avec un risque d'erreur à la clé : par exemple, l'adresse du client était dupliquée à au moins 4 endroits : dans la base de contact, dans les devis OpenOffice, dans les bons de livraison OpenOffice et dans les factures OpenOffice ! Plus grave, le montant total d'une vente était re-saisi 4 fois : une fois dans le devis OpenOffice, une fois dans la facture OpenOffice, une fois dans le tableau OpenOffice qui récapitulait les factures client et une dernière fois en comptabilité dans Ciel Compta !
- problèmes de gestion des accès simultanés. Par exemple, notre tableau OpenOffice de gestion de la production et des expéditions client était utilisé à la fois par la responsable de l'administration des ventes et par le technicien logistique. Quand l'un avait le document ouvert sur son poste, l'autre n'avait plus qu'un accès en lecteur seule ; il décrochait alors son téléphone pour demander à l'autre s'il pouvait fermer le document sur son poste, pour pouvoir ensuite l'ouvrir en lecture/écriture sur le sien ! Autre exemple : comme Ciel Compta était un logiciel mono-poste, il ne m'était pas possible de consulter depuis mon poste les écritures comptables saisies par la comptable. Pas facile de travailler à deux sur la comptabilité dans ces conditions !
Face à cette situation, il devenait urgent de changer nos outils de travail... l'ERP s'imposait.
Comme j'étais un fan de logiciel libre, je me suis d'abord intéressé aux ERPs libres. J'ai lu des articles sur Internet, j'ai discuté sur des salons, etc. A l'époque, en 2007, les ERPs OpenSource qui faisaient parler d'eux étaient :
Compière était le plus visible des trois au niveau médiatique ; il avait une communauté d'intégrateurs significative avec plusieurs intégrateurs français expérimentés qui affichaient déjà des références solides. C'était donc un bon candidat. Le gros point noir était le fait que Compière ne marchait qu'avec une base de données Oracle, ce qui était très surprenant pour un logiciel OpenSource, alors qu'il existe un large choix de bases de données OpenSource, dont un certain nombre ont une très bonne réputation en terme de fiabilité et de performances et ont des références prestigieuses. Avec Compière, on avait le sentiment que "l'OpenSource c'est bien, mais le logiciel propriétaire c'est mieux" !
A l'époque, Odoo s'appelait encore TinyERP. Son discours n'était pas encore très rodé, il n'y avait pas d'intégrateur français d'envergure et seule l'interface Gtk était disponible, ce qui n'était pas super sexy pour les démos. J'avais lu que TinyERP était écrit en Python, ce que j'avais du mal à comprendre car je pensais que Python était un langage de script (Python est souvent utilisé pour écrire des scripts, mais je ne savais pas à l'époque qu'il pouvait également convenir pour des applications complètes). Dans tous les cas, je ne me voyais pas aller convaincre mes associés qu'il fallait choisir TinyERP, un logiciel sous-entendu destiné à des Tiny-entreprises, alors qu'on avait l'ambition de construire une PME la plus grosse possible !
Ma préférence allait plutôt vers OpenBravo, qui avait un discours très rodé, une approche "full-Web" séduisante qui permettait à l'éditeur de faire de belles démos. OpenBravo était un ancien fork de Compière, mais l'éditeur avait abandonné le client Java pour une interface "full-Web" et était en train d'ajouter le support officiel de PostgreSQL en plus du support d'Oracle. OpenBravo affichait des ambitions importantes et l'éditeur était proche car basé en Espagne. OpenBravo n'avait pas encore d'intégrateur français mais la société apparaissait très dynamique. J'ai alors décidé de m'inscrire à la formation fonctionnelle d'une semaine organisée par l'éditeur d'OpenBravo à Barcelone en Mars 2008.
Après une semaine de formation à Barcelone, je suis arrivé à la conclusion qu'OpenBravo n'était probablement pas un bon choix pour Anevia. Attention, mon avis sur OpenBravo date de Mars 2008 et n'est donc certainement plus d'actualité. Je vous le partage quand même pour que vous puissiez comprendre mon choix :
- Les points forts d'OpenBravo étaient :
- une vraie démarche de logiciel libre, qui marquait une vraie différence par rapport à Compière. L'éditeur faisait des releases publiques régulières, avait un processus de développement ouvert (bug tracker public, subversion public, meetings IRC publics, roadmap disponible dans le Wiki public, documentation également disponible dans le wiki public). Les traductions dans les différentes langues et les plans comptables pour les différents pays étaient également disponibles sous licence libre (ce qui n'était pas forcément le cas de Compière).
- la communauté semblait à première vue dynamique et l'éditeur faisait en sorte d'entretenir de bonnes relations avec elle.
- le choix d'une interface "full-Web" était visionnaire pour l'époque (ni Odoo ni Compière ne disposaient à l'époque d'une interface Web).
- les choix techniques affichés par l'éditeur (Java et DB PostgreSQL) me semblaient les bons (j'ai appris plus tard par Raphaël Valyi que le code "métier" d'OpenBravo était surtout constitué de procédures stockées écrites en PL/SQL, et que le Java était peu utilisé).
- la proximité d'un éditeur basé à Barcelone.
- des plans de développement ambitieux et une équipe sympathique.
- Malheureusement, pendant cette semaine de formation, j'avais déjà pu me rendre compte d'un certain nombre de points faibles :
- le logiciel était loin d'être aussi mature que ce que je pensais : plusieurs bugs ont été mis à jour pendant la formation, ce qui était particulièrement choquant pour moi !
- le périmètre fonctionnel m'avait déçu. Il n'y avait pas de CRM (l'éditeur envisageait de développer un connecteur avec SugarCRM, mais n'avait pas encore commencé le développement), aucune notion de calendrier ni d'emploi du temps, il n'était pas possible de sortir une balance analytique qui fasse apparaître à la fois le plan de compte analytique et le plan comptable général (chose très basique que tous les logiciels comptables font, même Ciel Compta).
- Certaines fonctionnalités très basiques étaient absentes. Par exemple, il n'y avait pas nativement un paramètre sur la fiche client pour renseigner sa langue, dans le but de spécifier si les documents destinés à ce client (devis, bon de livraison, facture) devaient sortir en français ou en anglais. Cette fonctionnalité très basique était évidemment nécessaire à Anevia. J'avais interrogé le formateur à ce sujet, et il m'avait répondu que c'était un petit développement spécifique pas très compliqué. Mais mon interprétation était surtout que, si on commençait à devoir financer des développements spécifiques pour des fonctionnalités aussi basiques, alors on n'aurait plus de budget pour développer les "vraies" fonctionnalités spécifiques au métier d'Anevia, comme par exemple la gestion des contrats de maintenance.
- J'avais le sentiment qu'OpenBravo était une grosse machine dont il n'était pas facile de prendre le contrôle. Voir le formateur se battre pendant une demie heure avec Tomcat lors de la première matinée de la formation n'y était pas étranger... ma méconnaissance de l'environnement Java faisant le reste.
- OpenBravo n'avait encore aucune référence en France et n'avait donc aucun intégrateur français ayant déjà réalisé un déploiement.
Après cette expérience décevante avec OpenBravo, je m'étais dit : si l'ERP OpenSource que je considérais comme étant le plus à même de satisfaire les besoins d'Anevia ne fait pas l'affaire, alors il va falloir commencer à étudier les ERPs propriétaires.
J'ai alors commencé à prendre contact avec quelques ERPs propriétaires pour PME, comme Sage, Cegid ou Divalto. Lors de cette étude très succincte, je me suis notamment rendu compte combien il était difficile (impossible ?) de trouver un ERP propriétaire utilisable depuis un poste de travail Linux. En sachant qu'à Anevia les 2/3 des postes de travail étaient sous Linux - à commencer par le mien - c'était évidemment un critère de choix. Tous proposaient un client lourd Windows. Divalto proposait en plus une interface Web, mais uniquement pour la CRM. Cegid proposait une interface Web, mais uniquement compatible Internet Explorer... et, quand j'ai essayé d'accéder au site de démo qui en fait la présentation, la première chose qu'il m'a proposé est de télécharger un plugin... sous forme d'un fichier .exe ! Quand je les interrogeais sur la problématique de l'accès à l'ERP depuis un poste de travail sous Linux, leur réponse était toujours la même : pas de problème, il suffit d'installer un serveur Citrix ! Bienvenue au royaume de la légèreté ! Sans parler du coût...
Mon étude rapide des ERPs propriétaires m'a aussi fait découvrir une chose importante. Dans le cas de Divalto par exemple, un intégrateur spécialisé sur Divalto avait développé un module pour gérer les contrats de maintenance. Ce module était la propriété de l'intégrateur et non la propriété de l'éditeur ; il était donc développé, maintenu et commercialisé par l'intégrateur. Cela avait deux conséquences :
- Anevia n'avait plus le choix de l'intégrateur ! Donc pas la possibilité de mettre en concurrence plusieurs intégrateurs Divalto...
- Anevia aurait eu pour sa technologie d'ERP une double dépendance, à la fois sur l'éditeur mais aussi sur l'intégrateur. Autant être dépendant de l'éditeur de son ERP propriétaire semble normal, mais je ne m'attendais pas à être dépendant technologiquement de l'intégrateur, qui était une petite société française d'une dizaine de personnes sur laquelle je n'avais pas de visibilité.
J'ai compris par la suite que cette pratique était courante dans le monde des ERPs propriétaires, où les intégrateurs développent des verticalisations métier (propriétaires également) pour s'arroger un quasi-monopole du déploiement de l'ERP en question dans ce secteur d'activité et s'assurer une fidélité forcée de leurs clients.
Mi-2008, j'ai alors rencontré Raphaël Valyi, qui travaillait à l'époque chez Smile, et qui venait de finir de rédiger le livre blanc de Smile sur les ERPs OpenSource. Dans le cadre de sa mission de veille technologique chez Smile, il avait passé plusieurs mois à évaluer les nombreux ERPs OpenSource disponibles et avait pris le temps de les installer, de regarder le code source, d'évaluer le périmètre fonctionnel, etc. Sa conclusion était claire : OpenERP (qui venait tout juste de changer de nom et avait abandonné l'ancien nom TinyERP) était le meilleur ERP OpenSource. J'ai compris que le Python n'était pas un simple langage de script, mais un vrai langage de développement orienté objet. L'éditeur venait de sortir un livre pour apprendre à se servir d'Odoo. C'était le premier livre sur un ERP OpenSource ! Même si ça peut paraître anecdotique, j'ai toujours considéré que ce point était important, car ça permet d'abaisser considérablement la barrière à l'entrée pour quelqu'un qui souhaite découvrir le logiciel : plutôt que de se payer une semaine de formation chez l'éditeur à 2 500 €, on pouvait désormais commander le bouquin sur Amazon à 40 € ! En abaissant ainsi la barrière à l'entrée sur le logiciel, l'éditeur se préparait à élargir considérablement la diffusion du logiciel, et s'assurait ainsi d'avoir la communauté la plus importante, ce qui est un élément très important pour le succès d'un logiciel libre.
Raphaël Valyi m'a expliqué les qualités d'Odoo. Il a pu me montrer via une démonstration que les fonctionnalités dont l'absence m'avait choqué dans OpenBravo étaient bien présentes dans Odoo : Odoo disposait nativement d'une balance analytique croisée avec le plan comptable général, il disposait nativement d'un réglage de la langue sur la fiche client permettant d'éditer les documents (devis, bon de livraison, facture) dans la langue du client, il disposait nativement d'une CRM, etc. Raphaël avait de très solides connaissances techniques et n'était pas un commercial qui raconte des bobards pour vendre sa camelote. Quand il m'a dit que, au vu des besoins d'Anevia, il était possible de déployer avec succès Odoo, je lui ai fait confiance.
J'ai pu convaincre mes associés de faire le choix d'Odoo pour Anevia et la décision a été officiellement prise le 10 Octobre 2008. Le travail a commencé aux alentours du 20 Octobre 2008. Parmi les modules métier à développer, il y avait notamment un module de gestion des contrats de maintenance. Vu le timing très serré du passage en prod, nous nous étions laissé la possibilité de développer ce module après le passage en prod. Mais comme Raphaël était un développeur expérimenté et que le framework d'Odoo permettait de développer assez efficacement, le module de gestion de contrats de maintenance a pu être développé avant le passage en production. Le passage en production a eu lieu le 1er Janvier 2009 avec OpenERP 5.0, qui était encore en version beta (OpenERP v5.0 a été releasé le 8 Févier 2009) sur le périmètre suivant :
- gestion des stocks (initialisée avec l'inventaire de fin d'année)
- administration des ventes
- comptabilité
Le projet avait pris son envol... J'ai formé mes équipes sur le tas et adapté l'organisation interne de la société en conséquence. Comme j'étais personnellement responsable de la comptabilité, de l'administration des ventes et de la production/logistique à Anevia, les choses étaient facilitées car j'étais personnellement le manager de toutes les personnes impactées par le démarrage de l'ERP ; je connaissais parfaitement leur façon de travailler et c'était moi qui avais mis au point leurs méthodes et leurs processes (et c'était également moi qui faisais leur boulot quand ils étaient absents !).
Le démarrage d'Odoo à Anevia avait fait l'objet d'un article sur le site erp-infos.com.
Après ce démarrage réussi, nous n'avons cessé d'élargir le périmètre fonctionnel d'Odoo à Anevia en ajoutant :
- l'édition des devis,
- la gestion des RMAs,
- l'import des écritures de paye,
- la gestion des prêts d'équipements aux clients,
- la gestion des notes de frais,
- l'établissement de la DEB (Déclaration d'Echange de Biens) et de la DES (Déclaration Européenne des Services),
- l'import automatique des données de la Coface, qui est l'assureur crédit d'Anevia,
- la gestion des demandes de congés pour les employés basés en dehors de la France,
- la connection à Pentaho pour la Business Intelligence,
- la connection à Asterisk (logiciel libre pour faire des PBX IP), pour les fonctionnalités de click2dial et de remontée de fiche,
J'ai quitté mes fonctions opérationnelles à Anevia début 2010. Raphaël Valyi avait lui-même quitté Smile mi-2009 et créé sa société Akretion au Brésil, avec comme objectif de devenir intégrateur Odoo et de lancer Odoo sur le marché brésilien. Raphaël m'a rapidement proposé de créer le frère jumeau de sa société en France. Avec Sébastien Beau, qui était de retour en France après son stage de fin d'étude chez Akretion au Brésil, je me suis formé au développement en Python dans le framework d'Odoo et nous avons commencé à développer l'activité d'Akretion en France.
Je suis donc, depuis fin 2010, devenu moi-même intégrateur d'Odoo. L'équipe d'Akretion France a grossi au fil des années et est maintenant composée d'une dizaine de consultants, à la fois développeurs et experts fonctionnels, basée à Lyon (sauf une personne basée en région parisienne). En 2016, Akretion est devenue une coopérative et a ainsi rejoint le mouvement de l'économie sociale et solidaire.
Cette section sur mon histoire personnelle sur Odoo est un peu longue et très égocentrique, mais je pensais que c'était important de la présenter car, étant donné que je présente mon avis personnel sur Odoo dans ce document, il faut que les lecteurs aient les informations nécessaires pour mettre en perspective mon opinion.
Les contributions sur Odoo de l'auteur
Ma contribution à Odoo prend principalement la forme du développement de modules communautaires. J'ai notamment développé :
- le connecteur Odoo-Asterisk, qui est le premier module que j'ai développé sur Odoo !
- le support complet de la Déclaration d'Echange de Biens (DEB) et de la Déclaration Européenne des Services (DES), qui sont des déclarations douanières obligatoires (cf ce lien),
- le support des virements et des prélèvements SEPA dans Odoo,
- le support des provisions comptables (PCA/CCA/FNP/FAE) dans Odoo,
- le support des locations dans Odoo,
- de nombreux modules de la localisation française d'Odoo, dont le support du FEC (Fichier d'Echanges Comptables, qui est devenu obligatoire pour les contrôles fiscaux en France depuis le 1er Janvier 2014), le support des fichiers de LCRs et l'import des relevés de banque au format CFONB,
- les modules de gestion des dons dans Odoo, qui permet de gérer les dons ponctuels, les dons récurrents, les dons en nature, les reçus fiscaux, les dons par virement, les dons par prélèvement SEPA, les dons par chèque, etc.
- la verticalisation métier pour les abbayes, qui permet la gestion du planning des messes, la gestion des demandes de messe (en relation avec la gestion des dons), la gestion des séjours à l'abbaye, etc.
- les modules qui ajoutent le support de l'afficheur LCD, des lecteurs de carte bancaires Ingenico/Sagem et des imprimantes de chèque Ingenico pour le point de vente d'Odoo,
- les modules d'import automatique de factures PDF ainsi que des modules pour l'émission et l'import de factures électroniques au format ZUGFeRD (TODO : ajouter lien),
- une série de modules permettant d'ajouter un niveau d'accès Viewer sur Odoo, qui donne un accès en lecture seule aux différents domaines fonctionnels,
- des petits modules spécialisés, pour la plupart destinés à améliorer l'utilisation de la comptabilité d'Odoo : le module account_analytic_required, le module account_reversal, le module account_move_csv_import, le module currency_rate_date_check, le module account_fiscal_position_vat_check, le module account_journal_always_check_date, etc.
- de nombreux modules pour rendre l'utilisation d'Odoo plus pratique et plus facile, que j'ai regroupé dans un projet d'Akretion appelé odoo-usability,
- des modules communautaires divers et variés : base_location_geonames_import, partner_external_maps, ovh_supplier_invoice, account_statement_completion_label_simple, etc.
- j'ai aussi participé à de nombreux modules communautaires : le connecteur Odoo-PrestaShop, le module product_serial, le projet OpenUpgrade qui vise à fournir des scripts de migration pour Odoo sous licence libre, etc...
Je prends également du temps pour faire des améliorations sur les modules officiels d'Odoo, maintenus par l'éditeur. Voici mes principales contributions sous la forme de merge proposals :
- amélioration de la localisation française d'Odoo (un travail d'équipe avec Frédéric Clémenti de Camptocamp) : round 1 et round 2,
- ajout d'une option permettant de choisir la méthode d'arrondi des taxes dans Odoo (l'arrondi de la somme vs la somme des arrondis),
- des améliorations du code pour rendre plus facilement extensible la génération des factures tout en gardant de bonnes performances : introduction de fonctions
_prepare_invoice*, cf ce merge et celui-là. - ajout d'un code analytique sur les lignes de taxe des factures,
- et de nombreux autres petites améliorations : possibilité d'affichage de la monnaie du compte bancaire (merge 1, 2 et 3), nettoyage du code pour permettre une meilleure gestion des variantes, etc.
Enfin, j'essaye de participer le plus possible aux bugs reports, en proposant des patchs pour les corriger quand ils sont de mon niveau !
A propos d'Odoo
Petit historique d'Odoo
Fabien Pinckaers a démarré TinyERP (l'ancien nom d'Odoo) en 2001-2002, alors qu'il était encore étudiant à l'université de Louvain-la-neuve. Il crée la société Tiny sprl pour commercialiser ses services autour de TinyERP, sa principale source de revenus étant constituée par les services d'intégration de TinyERP.
La première release publique de TinyERP a lieu en 2004 et les versions se sont ensuite succédées à un rythme soutenu :
- la toute première version est publiée le 6 Juillet 2004 sous licence GPL ; l'annonce précise que le logiciel est déjà utilisé en production dans 3 entreprises belges,
- la version 2.0 est releasée le 25 Mars 2005 avec des améliorations fonctionnelles et une simplification de la procédure d'installation,
- la version 3.0 est releasée le 2 Septembre 2005 avec l'ajout d'un module de gestion de production (MRP) et une amélioration de la gestion des données multilingues,
- la version 3.1 est releasée le 15 Octobre 2005 avec la possibilité de concevoir les rapports (devis, factures, bons de livraison) avec OpenOffice et la possibilité d'hériter les objets Python natifs,
- la version 3.2 est releasée le 29 Janvier 2006 avec un module de comptabilité entièrement réécrit pour supporter la comptabilité générale et analytique,
- la version 3.3 est releasée le 4 Mai 2006 avec toujours plus de localisations, une amélioration de la gestion multi-sociétés et un client Gtk complètement refait,
- la version 3.4.1 est releasée le 19 Septembre 2006 avec un manuel utilisateur libre, alors qu'il était auparavant payant,
- la version 4.1 est releasée le 13 Juin 2007 avec une toute première version de l'interface Web dénommée eTiny,
- la version 4.2 est releasée en Octobre 2007 (si vous trouvez une annonce officielle faite par l'éditeur, je suis preneur),
En 2005-2006 arrivent les premiers intégrateurs, notamment Camptocamp, qui commencent le travail de localisation de TinyERP, qui consiste à adapter l'ERP aux spécificités légales, comptables et fiscales de chaque pays.
Sous la pression de ses intégrateurs, TinyERP adopte la plateforme Launchpad en 2008 pour faciliter le développement communautaire d'Odoo. En Juin 2008, TinyERP change de nom pour devenir Odoo et sort son premier livre chez Eyrolles. L'année 2008 est également marquée par le démarrage de Tryton, un fork d'Odoo, initié par deux anciens employés de Tiny sprl, et qui est toujours actif aujourd'hui et continue son développement indépendamment d'Odoo. La motivation affichée de ce fork était de mettre la priorité sur le nettoyage du code fonctionnel plutôt que de se disperser en fonctionnalités bling-bling type "on a codé un Webmail avec Odoo" (véridique, cf l'annonce de la version 5.0) ou on peut chatter dans Odoo (cf cette news de Février 2013 qui annonce l'ajout d'une messagerie instantannée dans le futur Odoo 8.0). L'autre priorité affichée était de travailler à l'amélioration du framework en corrigeant ses principaux défauts au prix d'un changement de l'API qui nécessita une adaptation en profondeur du code des modules fonctionnels. Ce fork aurait aussi une cause humaine, liée à des mésententes entre le patron de TinyERP et les deux développeurs en question.
En Février 2009, la release d'Odoo version 5.0 marque un saut qualitatif significatif avec une amélioration de l'interface Web, l'introduction des diagrammes de Gantt et de l'éditeur de workflow et de nombreuses améliorations dans le code fonctionnel.
Début 2010, la société Tiny sprl, qui deviendra ensuite Odoo S.A., annonce une levée de fonds de 3 millions d'euros auprès de Sofinnova (une société française de capital risque), de Xavier Niel (le fondateur de Free) et d'Olivier Rosenfeld (membre du conseil d'administration d'Iliad). Jusqu'à cette date, la société avait financé sa croissance sur ses fonds propres sans actionnaire extérieur. Malgré cette levée de fonds, Fabien Pinckaers reste l'actionnaire majoritaire d'Odoo S.A., les investisseurs extérieurs ayant une participation minoritaire. Antony Lesuisse, qui avait aidé Fabien sur certains aspects techniques au démarrage de TinyERP et avait poursuivi sa carrière dans d'autres entreprises, rejoint Odoo S.A. en tant que directeur de la R&D. Sous son impulsion, le développement d'Odoo se professionnalise et marque la fin de la fâcheuse tendance qu'avait Odoo à développer en propre certains composants logiciels plutôt que d'adopter des composants logiciels existants sous licence libre.
En Janvier 2011, la release d'Odoo version 6.0 marque de nouveau un saut qualitatif important, avec une amélioration du code fonctionnel, la réécriture complète de la CRM et une amélioration de l'interface Web. Cette version est la première à être diffusée sous licence AGPL, en remplacement de la licence GPL.
En Février 2012, la release d'Odoo version 6.1 introduit une toute nouvelle interface Web, réécrite from scratch sous la direction d'Antony Lesuisse. Elle utilise les technologies Web modernes en ayant recours à des librairies Web libres reconnues et matures ; ses performances sont grandement améliorées à tel point qu'elle devient aussi rapide que le client Gtk.
Le 21 Décembre 2012, la release d'Odoo 7.0 (version avec support à long terme) apporte une amélioration importante de l'ergonomie et de la facilité d'utilisation de l'interface Web d'Odoo et marque l'abandon du client Gtk. Des fonctionnalités sociales font leur apparition, avec un système de commentaires/discussion sur chaque objet, une intégration avec Linked'In. Un module de gestion de flottes de véhicules est ajouté. Cette release, sortie le jour de la prétendue fin du monde, a été précédé d'une campagne marketing bâtisée Sorry SAP, où Odoo prétend avec cette release marquer la fin de l'ère des ERPs dinosaures et l'avènement d'une nouvelle ère dominée par des ERPs légers et agiles. L'origine de cette campagne a fait l'objet d'un post sur le blog officiel de l'éditeur, intitulé Sorry SAP Campaign - The Making Of. Le site Web classique d'Odoo est remplacé par l'interface Web d'un serveur Odoo de démo (avec des petits liens en bas pour basculer sur le site Web classique). Plus d'infos sur cette nouvelle version dans les release notes d'Odoo 7.0.
L'année 2013 a très mal commencé pour Odoo et se finit très bien. En effet, en Mars 2013, quelques mois après la sortie de la version 7.0, de nombreux bugs sont constatés par les utilisateurs suite au changement du modèle de donnée des partenaires dans Odoo 7.0 (un partenaire est un fournisseur et/ou un client), qui sont rassemblés dans un seul bug report. D'une part, ces soucis étaient totalement prévisibles vu les changements introduits dans le modèle de donnée et l'éditeur a fait preuve d'un grand amateurisme en laissant de tels bugs dans la release d'Odoo 7.0. D'autre part, il y a eu une énorme polémique concernant la solution à adopter pour résoudre tous ces bugs liés au changement du modèle de donnée des partenaires. Après plusieurs semaines de débats enflammés sur la solution technique à adopter, on s'est retrouvé avec d'un côté l'éditeur qui défendait sa solution technique (l'ajout d'un mécanisme de synchronisation des paramètres comptables entre la société et ses contacts) et de l'autre la grande majorité de la communauté qui défendait une autre solution technique (le champ partner_id pointerait vers la société client/fournisseur comme dans les versions antérieures d'Odoo et un nouveau champ contact_id serait utilisé pour pointer vers le contact de facturation). L'éditeur a finalement commité sa solution dans la branche stable d'Odoo avec une petite concession, à savoir l'ajout d'un nouveau champ commercial_partner_id sur les factures qui pointe vers la société client/fournisseur. Cette polémique à laissé des traces et la communauté ne s'est pas sentie très écoutée et respectée par l'éditeur.
Avant même le début de la polémique, Joël Grand-Guillaume de Camptocamp travaillait secrètement au lancement de l'Odoo Community Association (OCA), dont un des objectifs était justement de rassembler la communauté pour qu'elle puisse parler d'une seule voix face à l'éditeur et ainsi mieux se faire entendre. L'annonce officielle de la création de l'Odoo Community Association a été faite lors des Odoo Community Days en Juillet 2013 par 5 sociétés faisant partie des plus gros contributeurs communautaires sur Odoo : Camptocamp, SavoirFaireLinux, Therp, Vauxoo et Akretion. La section suivante contient plus de détails sur l'Association Communautaire Odoo. La fin de l'année a été marquée par la publication du nouveau framework de synchronisation (le module connector) développé par Camptocamp dans le cadre d'un crowd-funding et l'annonce dans la foulée par Camptocamp et Akretion de la disponibilité des connecteurs Odoo-Magento et Odoo-PrestaShop pour Odoo 7.0 basés sur ce nouveau framework de synchronisation.
Le 15 Mai 2014, Odoo S.A. a annoncé plusieurs nouvelles importantes :
- le nouveau nom Odoo, qui remplace le nom OpenERP pour désigner le logiciel. Officiellement, ce changement de nom est motivé par le fait que les nouvelles fonctionnalités de CMS et de e-commerce de la version 8.0 élargissent le périmètre d'OpenERP au delà du périmètre traditionnel de l'ERP ; le mot ERP était devenu trop restrictif pour désigner l'étendue des possibilités du logiciel !
- une 2ème levée de fonds de 6 millions d'euros,
- une nouvelle politique de prix pour les contrats de maintenance. Auparavant, le prix dépendait uniquement du nombre d'utilisateurs ; désormais, le prix dépend à la fois du nombre d'utilisateurs et du nombre d'applications installées sur Odoo.
- le déplacement du projet de Launchpad vers Github.
Si le passage à Github a été unanimement applaudi par la communauté, la nouvelle politique de pricing des contrats de maintenance a été beaucoup critiquée et a sucité beaucoup d'inquiétude. Comme l'a reconnu l'éditeur sur ce post de blog, la nouvelle politique de pricing va provoquer une importante augmentation de tarif pour les clients qui utilisent de nombreuses applications d'Odoo. Par exemple, pour un client qui utilise la comptabilité, la gestion de stock, les achats, les ventes et les notes de frais, le prix public est désormais de 72 € / utilisateur / mois, au lieu de 35 € / utilisateur / mois avec l'ancienne politique de prix. Le prix a doublé !
Pour moi, cette modification était une grave erreur de la part de l'éditeur. Les entreprises qui ont utilisé des ERPs propriétaires par le passé ont souvent eu le sentiment d'être prises en otage par la décision unilatérale des éditeurs d'augmenter le prix des contrats de maintenance (cf cet article sur SAP par exemple). Si certaines font le choix d'un ERP libre, c'est parfois pour ne pas revivre ce genre de racket. Evidemment, avec un ERP libre, les entreprises ne sont pas obligées de souscrire au contrat de maintenance. La réaction de la communauté à cette modification a été immédiate : 2 semaines après cette annonce, un code sprint a eu lieu pour avancer sur le développement du projet OpenUpgrade, qui vise à fournir une solution libre et communautaire de migration des bases de données Odoo vers les nouvelles versions. Ce code sprint a rassemblé une douzaine de personnes de 6 sociétés différentes pour avancer sur les scripts de migration de la version 7.0 vers 8.0. Le projet OpenUpgrade n'avait jamais connu un tel succès !
La version 8.0 d'Odoo est publiée le 20 Septembre 2014. C'est une version majeure d'Odoo qui comprend :
- l'introduction de la nouvelle API pour le développement des modules. Cette nouvelle API corrige les limitations et les défauts de l'ancienne API ; l'ancienne API continue d'être supportée au moins jusqu'à la version suivante et peut-être un peu au-delà.
- la gestion des stocks a été totalement réécrite pour Odoo 8.0 ; elle est plus scalable (i.e. offre de meilleure performances sur les déploiements avec des gros volumes de mouvements de stock), intègre nativement la notion de flux poussés et de flux tirés, gère mieux les numéros de série et l'emballage, supporte nativement le drop-shipping, etc.
- un nouveau moteur de rapport est introduit : QWeb ; la quasi-totalité des rapports natifs sont convertis du vieux format RML au format QWeb. Ce moteur QWeb utilise Webkit pour la version de HTML en PDF et introduit le mécanisme d'héritage dans les rapports (auparavant, les rapports était un des rares composants non héritable ; quand on voulait modifier un rapport, il fallait le remplacer en totalité)
- l'introduction de fonctionnalités de CMS et de boutique en ligne.
Cette version 8.0 est pour moi une très bonne nouvelle pour le projet Odoo pour 2 raisons :
- les bases techniques d'Odoo ont enfin été modernisées, avec l'introduction de la nouvelle API et du nouveau moteur de rapports... enfin ! Les développeurs attendaient cela depuis longtemps ! La nouvelle API permet un développement plus simple et rapide ; pour une même fonctionnalité, elle utilise 10 à 20% de lignes de code en moins !
- par la réécriture complète du module de gestion des stocks, l'éditeur a montré sa capacité et sa volonté d'améliorer les modules essentiels de l'ERP sans avoir peur de casser la compatibilité avec l'existant. Lors des releases précédentes, les modules essentiels (vente, achats, stock, comptabilité) avaient tendance à être délaissés au profit des modules plus bling-bling, du type module de blogs ou module de messagerie instantanée.
Début 2015, l'éditeur a annoncé son retour à l'ancienne politique de pricing des contrats de maintenance (dénommés Odoo Enterprise), en abandonnant le pricing par application, et par conséquent en mettant fin à l'augmentation des tarifs pour les entreprises utilisant Odoo comme un ERP. Ce retour en arrière est une bonne chose, mais il est malheureusement trop tardif, car de nombreuses entreprises n'ont pas renouvelé leur contrat de maintenance et se sont habituées à fonctionner sans contrat de maintenance avec l'éditeur. De plus, la confiance entre l'éditeur et les entreprises utilisatrices mettra du temps à se rétablir. Par ailleurs, ce retour en arrière souligne un autre problème : l'éditeur n'a pas encore trouvé de business model satisfaisant pour lui, ce qui explique ses changements fréquents de business model et de politique tarifaire. Cette décision s'accompagne d'une nouvelle stratégie pour l'éditeur et d'un nouveau business model qui ne fait pas le bonheur de la communauté Odoo : l'éditeur choisi un modèle Freemium où certains modules seront payants ou disponibles uniquement aux entreprises ayant souscrit au contrat de maintenance (qui par conséquent n'est plus seulement un contrat de maintenance, mais devient aussi une licence pour utiliser les modules propriétaires). Pour que cela soit possible, l'éditeur annonce un changement de licence pour la version 9 d'Odoo : la licence AGPL est remplacée par la licence LGPL. En effet, la licence AGPL est contagieuse : elle oblige tous les modules à être publiés sous la même licence ; il n'est alors pas possible de développer et vendre des modules propriétaires pour Odoo. La licence LGPL est, comme la licence AGPL, une licence libre très utilisée, écrite par la FSF (Free Software Fondation), mais, contrairement à la licence AGPL, elle n'est pas contagieuse, donc les modules Odoo peuvent utiliser une autre licence, libre ou propriétaire. Conscient que ce changement de licence pourrait lui amener des ennuis juridiques étant donné que certains contributeurs sur les modules officiels risquent d'être opposés à ce changement qui ne va pas dans le "bon" sens du point de vue des militants du logiciel libre, l'éditeur annonce que les contributeurs vont devoir signer un CLA (Contributor Licence Agreement) qui donnera tous pouvoirs à l'éditeur sur le code écrit par les contributeurs. L'éditeur précise que si certains contributeurs ne signent pas le CLA, leur code sera retiré des modules officiels ou réécrit.
Cette annonce déclanche imméditement une grosse polémique dans la communauté Odoo, comme ça a été le cas dans le passé lors de chaque changement de licence. Cette annonce a été précédée d'échanges et de discussions non publiques entre le bureau de l'OCA et Fabien Pinckers. Ces échanges ont permis d'infléchir la position de l'éditeur, qui souhaitait initialement passer le code d'Odoo sous licence MIT, qui est une licence ultra-permissive qui permet non seulement d'utiliser des modules propriétaires mais en plus de rendre tout le code source d'Odoo propriétaire. Ces échanges ont abouti au choix par l'éditeur de la licence LGPL, qui permet 2 choses que ne permettait pas la licence AGPL : le développement et la vente de modules propriétaires, et le développement et la vente d'une offre SaaS basée sur Odoo sans mise à disposition du code source pour les utilisateurs. Ces échanges ont également permis de faire prendre conscience à l'éditeur que ce changement n'était juridiquement possible que si les contributeurs signent un CLA, alors que Fabien estimait initialement que le portage des modules officiels vers la nouvelle API réalisé par l'éditeur suffirait à "effacer" les copyrights des contributeurs sur les morceaux de code qu'ils ont contribués.
La réplique de l'OCA a été la suivante : les modules OCA peuvent utiliser n'importe quelle licence approuvée par l'OSI, mais l'OCA recommande l'utilisation de la licence AGPL, qui est la plus protectrice pour les utilisateurs et les développeurs. Et l'OCA ne prendra pas l'initiative de changer la licence de ses modules, qui resteront donc sous licence AGPL, même si le CLA de l'OCA permet techniquement de passer les modules OCA sous licence LGPL. Or, comme la licence AGPL contamine les autres modules, cette décision avait pour conséquence que, quand on utilise au moins un module OCA sous licence AGPL, on n'a pas le droit d'utiliser les modules propriétaires. Autrement dit : les utilisateurs doivent choisir entre utiliser des modules OCA ou utiliser des modules propriétaires, ils ne peuvent pas profiter des deux ! Or, l'OCA compte parmi ses modules certains modules très importants d'un point de vue fonctionnel (rapports comptables Webkit, modules de localisation, module de gestion des virements et des prélèvements SEPA, etc) et sans équivalent à l'heure actuelle parmi les modules de l'éditeur. Cela signifiait que, pour tous les déploiements Odoo où les modules OCA sont indispensables à la réussite du déploiement, les modules propriétaires ne pourront pas être utilisés. Cela signifiait par conséquent que le nouveau business model de l'éditeur serait de nouveau un échec. Finalement, un compromis a été trouvé entre l'OCA et l'éditeur : l'OCA garde ses modules actuels sous licence AGPL et continue de recommander l'utilisation de la licence AGPL, mais l'éditeur et l'OCA interprèteront l'effet de contagion de la licence AGPL d'une façon plus restreinte : un module AGPL contamine les modules qui dépendent de lui et seulement ceux-ci. Avec cette interprétation, il est possible d'utiliser des modules OCA sous licence AGPL et des modules propriétaires sur une même installation Odoo à condition que les modules propriétaires ne dépendent pas des modules AGPL et inversement. Lors des journées Odoo Experience 2015 à Louvain-la-neuve, quand Alexandre Fayolle a expliqué cette interprétation de la licence AGPL pour les modules Odoo, il a bien précisé la chose suivante : ceci est une interprétation retenue par l'OCA et l'éditeur, mais vous pouvez ne pas être d'accord avec cette interprétation et penser qu'un module AGPL contamine tous les autres modules sans exception quelles que soient les dépendances entre modules. Dans tous les cas, seul un juge pourrait trancher entre ces 2 interprétations dans le cadre d'un litige et une éventuelle décision de justice prise dans un pays donné ne signifierait pas forcément qu'un juge dans un autre pays prenne la même décision. Cet épisode montre deux choses : que l'OCA a clairement son indépendance vis-à-vis de l'éditeur et est attachée au logiciel libre, mais que la majorité du bureau de l'OCA n'est pas sur une ligne de puristes du logiciel libres mais plutôt sur une ligne pragmatique en cherchant des compromis avec l'éditeur quand cela est possible.
v9 : - retard portage v10 : - consolution - fix betises compta - MRP - abandon ancienne APITryton, un fork d'Odoo
Tryton, le fork d'Odoo, continue ses développements de son côté et se prépare à basculer vers Python 3. J'ai pu discuter avec les développeurs principaux de Tryton à l'occasion de PyconFR 2012, le rendez-vous annuel de la communauté Python francophone. Je leur ai demandé quels étaient les principaux points forts de Tryton par rapport à Odoo (je ne leur ai pas demandé quels étaient les points faibles... ils auraient été encore moins objectifs !), et voilà leur réponse :
- un meilleur framework. Tryton a déjà corrigé depuis plusieurs années les principaux défauts du framework d'Odoo, même si Tryton ne propose pas encore d'interface Web (des développements en ce sens sont en cours). Odoo promet de rattraper ce retard avec la nouvelle API prévue dans la future version 7.1.
- un code propre dans les modules fonctionnels. Tryton a une couverture fonctionnelle plus réduite qu'Odoo (il n'y a pas de module de gestion des notes de frais par exemple), mais un gros effort a été fait pour mettre au propre et rationnaliser le code des modules fonctionnels standards de Tryton.
- un système de migration de la base de données intégré au framework, qui facilite grandement les montées de version et n'oblige pas à avoir recours au contrat de maintenance vendu par l'éditeur pour la migration de la base de données, comme pour Odoo.
- des tests unitaires plus avancés qui couvrent un périmètre fonctionnel plus large, ce qui permet de mieux se prémunir contre les régressions lors du développement du logiciel. Pour illustrer l'importance des tests unitaires chez Tryton, les développeurs m'ont cité le fait que les tests unitaires d'Odoo mettent 15 minutes à s'exécuter alors que ceux de Tryton mettent près d'une heure.
Outre ces différences techniques mises en avant par les développeurs de Tryton, la principale différence est probablement dans la gouvernance et le contrôle du projet :
- le projet Odoo est sous le contrôle de l'entreprise Odoo S.A.,
- Tryton est, depuis 2012, sous le contrôle d'une fondation, la fondation Tryton.
Pour en savoir plus sur les différences entre Tryton et Odoo, vous pouvez consulter le site Odoo 2 Tryton, dont le contenu a été rédigé par deux sociétés espagnoles (NaN-tic et Zikzakmedia) qui sont toutes deux des intégrateurs de Tryton et d'anciens intégrateurs d'Odoo (ces deux sociétés étaient à l'époque très impliquées dans la communauté Odoo, avec de grosses contributions à leur actif).
L'Odoo Community Association
L'Odoo Community Association (OCA) a été lancée en Juillet 2013 et a commencé son travail immédiatement après. C'est une association de droit suisse qui est née juridiquement début 2014. Les statuts de l'association sont disponibles en ligne. Le premier board a été formé le 3 Juin 2014 pour une durée d'un an et est présidé par Joël Grand-Guillaume.
L'association a plusieurs objectifs :
- rassembler les contributeurs et les utilisateurs d'Odoo au sein d'une entité officielle non commerciale, qui ne soit pas liée aux intérêts de l'éditeur ou d'un intégrateur en particulier,
- représenter la communauté Odoo et lui permettre de parler d'une seule voix, en particulier face à l'éditeur,
- coordonner le travail communautaire sur Odoo en évitant les doublons (par le passé, il était très courant d'avoir plusieurs modules communautaires qui ajoutent la même fonctionnalité ; par exemple, il y avait 3 modules communautaires pour faire des virements SEPA !).
Le travail le plus visible de l'association au quotidien consiste à développer sur Github des projets communautaires thématiques qui rassemblent des modules communautaires utiles et de qualité qui ont vocation à être largement déployés. La liste complète des projets est visible en consultant le compte Github de l'OCA. Ces projets, appelés projets OCA, sont gérés selon des règles décidées par la communauté. Pour pouvoir ajouter ou modifier un module dans une branche OCA, il faut d'abord réaliser l'ajout ou la modification dans une branche de développement, puis faire une pull request sur la branche principale appartenant à l'OCA. Cette proposition est alors auditée par la communauté ; si la proposition obtient une approbation de la part d'au moins deux personnes et que personne n'a formulé d'objection valable, alors une personne ayant les droits de commit sur la branche OCA fusionne la branche de développement dans la branche OCA.
Le lancement des projets OCA a changé de façon importante la méthode de travail des développeurs de la communauté Odoo. Auparavant, seules les branches officielles de l'éditeur avaient une visibilité et une audience importante ; par conséquent, quand on voulait ajouter une nouvelle fonctionnalité importante, on l'ajoutait dans un des modules officiels maintenus par l'éditeur et on faisait ensuite une merge proposal pour intégrer les améliorations dans la branche officielle de développement. Malheureusement, l'éditeur était submergé de merge proposals et avait souvent d'autres priorités. Le parcours du combattant-contributeur était le suivant :
- faire des pieds et des mains pour arriver à obtenir une review de l'éditeur sur sa merge proposal,
- espérer que la personne qui fasse la review comprenne bien le but de la modification ; argumenter et ré-expliquer le pourquoi de la modification,
- espérer que le reviewer approuve la merge proposal
- et voir enfin sa contribution arriver dans la branche officielle de développement.
Il fallait souvent compter de 6 à 9 mois, parfois plus, même pour des contributions simples. Cela devenait démotivant pour les développeurs de la communauté.
Désormais, étant donné que les projets OCA ont une visibilité importante et sont largement connus et déployés par les intégrateurs Odoo, la méthode de travail des développeurs communautaires Odoo a radicalement changé. Plutôt que d'essayer d'apporter des modifications sur les branches officielles maintenues par l'éditeur et d'élargir leur périmètre fonctionnel, les développeurs de la communauté préfèrent développer des modules dans les branches OCA :
- cela peut prendre la forme de mini-modules qui activent systématiquement un certain paramètre (par exemple le module account_journal_always_check_date) ou retirent une fonctionnalité jugée contre-productive (par exemple le module disable_openerp_online) ou encore ajoute une mini-fonctionnalité super pratique (par exemple le module cron_run_manually).
- cela peut prendre la forme de modules très importants qui améliorent une fonctionnalité native d'Odoo (par exemple les modules account_financial_report_webkit et account_financial_report_webkit_xls qui remplacent les rapports comptables natifs d'Odoo : Balance, Grand-livre, etc) ou qui élargissent le périmètre fonctionnel (exemple : les modules account_cutoff_* qui gèrent un certain nombre de provisions comptables : PCA, CCA, FNP, FAE)
L'objectif est que les modules des projets OCA deviennent des modules de référence dans la communauté Odoo et qu'ils soient largement déployés. Cette diffusion importante doit permettre d'atteindre une masse critique d'utilisateurs et de développeurs qui permette :
- de trouver et corriger les bugs rapidement,
- d'attirer des traducteurs,
- de porter rapidement les modules vers une nouvelle version d'Odoo.
L'autre objectif non avoué est que les modules OCA deviennent indispensables au point qu'ils soient utilisés dans la grande majorité des déploiements Odoo ; cela permet à l'OCA de peser face à l'éditeur et d'être un acteur incontournable de l'éco-système Odoo.
L'association maintient également les branches OCB (Odoo Community Backport), qui sont des branches qui évoluent en parallèle des branches de l'éditeur et qui contiennent des bugs fix en plus et parfois des mini-améliorations. Ces branches permettent à la communauté d'avoir plus de réactivité du certains bugs et de gagner en autonomie. Dans la section sur la maturité d'Odoo, je reviens plus en détail sur la naissance des branches OCB et leur fonctionnement.
Le business model de l'éditeur
L'éditeur d'Odoo est la société belge Odoo S.A. avec son siège en Belgique et ses bureaux en Inde et aux Etats-Unis. Les principales sources de revenus de l'éditeur sont :
- la vente des contrats de maintenance Odoo, anciennement appelés OPW et maintenant appelés Odoo Entreprise ; à partir de la version 9, les contrats Odoo Entreprise ne sont plus seulement des contrats de maintenance mais deviennent des contrats de licence permettant l'utilisation des modules propriétaires proposés par l'éditeur,
- les services aux intégrateurs - souvent appelés partenaires : les intégrateurs Odoo, s'ils veulent être référencés sur le site de l'éditeur et devenir un intégrateur "officiel", doivent payer une certaine somme chaque année à l'éditeur. L'éditeur propose également aux intégrateurs une palette de services pour les aider à réaliser leur travail.
- les projets d'intégration Odoo qui sont assurés directement par l'éditeur. L'éditeur a parfois le rôle d'intégrateur pour certains projets Odoo.
- la vente d'abonnements à son offre SaaS (Software as a Service) appelée Odoo Online.
En plus de ces principales sources de revenus, l'éditeur gagne aussi sa vie en vendant des formations techniques ou fonctionnelles avec une certification à la clé : ces formations sont soit assurées par l'éditeur lui-même, soit assurées par des partenaires, qui reversent une partie du prix de vente de la formation à l'éditeur pour la fourniture des supports de formation et l'accès à l'examen qui permet aux élèves d'obtenir la certification officielle.
L'éditeur publie aussi une série de livres en anglais sur Odoo, mais il utilise ces livres comme un moyen de diffusion d'Odoo et non comme une source de revenus, ce qui explique que la version électronique de la plupart de ces livres soit disponible gratuitement en PDF (en échange d'un Tweet ou d'un message sur Facebook).
Depuis sa création, l'éditeur a changé très souvent de business model :
- au début, l'éditeur se rémunérait principalement avec le travail d'intégration sur de gros projets qu'il gérait en direct ; les scripts de migration pour passer à une nouvelle version d'Odoo étaient publics ;
- avec l'introduction des contrats de maintenance, l'éditeur a arrêté de publier les scripts de migration et annoncé que le service de migration faisait partie du contrat de maintenance,
- après la première levée de fonds, lors de journées Odoo 2010, l'éditeur annonce qu'il arrête l'intégration de projets en direct pour se focaliser sur les contrats de maintenance et le service aux intégrateurs,
- un ou deux ans plus tard, l'éditeur se remet à faire des projets d'intégration en direct en parallèle des contrats de maintenance, à la fois pour de gros et de petits projets,
- en Mai 2014, à l'occasion de sa 2ème levée de fonds, l'éditeur change radicalement le pricing de ses contrats de maintenance, ce qui augmente beaucoup le prix des contrats de maintenance pour la plupart des entreprises et par réaction booste la motivation de la communauté pour faire avancer le projet OpenUpgrade visant à proposer des scripts de migration libres. Lors des journées Odoo 2014 à Louvain-la-neuve, Fabien met en garde la communauté sur les effets néfastes d'OpenUpgrade sur le business model de l'éditeur, avec un discours visant à faire comprendre à la communauté qu'elle a intérêt à garder un éditeur en bonne santé pour financer la R&D sur Odoo et donc qu'elle n'a pas intérêt à mettre en avant le projet OpenUpgrade,
- Six mois plus tard, l'éditeur fait machine arrière et revient à l'ancienne logique de prix pour les contrats de maintenance,
- à partir de la version 9, l'éditeur compte se rémunérer principalement grâce à la vente de ses modules propriétaires qui proposent des fonctionnalités supplémentaires et grâce aux commissions perçues sur la vente de modules payants par des tiers sur l'App Store de l'éditeur. Lors des journées Odoo 2015 à Louvain-la-neuve, Fabien évoque même la possibilité que les scripts de migration redeviennent libres à l'avenir et soient publiés au sein du projet OpenUpgrade, si le nouveau business model de l'éditeur fonctionne bien !
Ces changements fréquents de business model de l'éditeur est une source d'instabilité pour les intégrateurs et toute la communauté Odoo. Le business model d'un éditeur de logiciel libre n'est pas une chose évidente et on peut comprendre que l'éditeur d'Odoo ait du mal à trouver le siens ; mais changer de business model chaque année est une folie que peu d'entreprises peuvent se permettre de faire sans désorienter complètement leurs clients et leurs partenaires.
Comment suivre l'actualité d'Odoo
Pour ceux qui voudraient suivre l'actualité d'Odoo "de loin", sans avoir beaucoup de temps à y consacrer, je leur conseille de s'abonner aux deux blogs suivants (disponibles en RSS) :
- le blog officiel d'Odoo, qui constitue la communication officielle de l'éditeur,
- le blog de l'OCA.
Malheureusement, cela est loin d'être suffisant ! Pour suivre correctement l'actualité d'Odoo, il faut également utiliser d'autres sources d'information moins classiques ; par ordre d'importance :
- Twitter, en vous abonnant à certains comptes d'employés d'Odoo ou de contributeurs actifs de la communauté (vous pouvez par exemple vous inspirer de la liste des comptes que je suis, cf mon compte Twitter),
- les flux RSS de Github qui suivent les commits, sur les branches stables et les branches de développement. Par exemple, pour suivre les commits dans la branche master (qui est la branche de développement) d'Odoo, il faut utiliser l'URL
https://github.com/odoo/odoo/commits/master.atom; pour la branche 8.0, l'URL à utiliser esthttps://github.com/odoo/odoo/commits/8.0.atom, - les mailing-listes communautaires de l'éditeur (cf cette page) et celles de l'OCA (cf cette autre page),
- les bug reports et les pull requests sur Github,
- les journées Odoo, appelées Odoo Experience, qui ont lieu chaque année à Louvain-la-neuve en Belgique pendant 3 jours.
Vue générale sur Odoo : diagramme de SWOT
J'ai toujours trouvé ce truc de SWOT (Strenghts, Weaknesses, Opportunities, Threats) très pipeau quand on devait en faire à l'école, et me voilà maintenant en train de l'utiliser !
| Forces | Faiblesses |
|---|---|
|
|
| Opportunités | Menaces |
|
|
Odoo, la licence et les copyrights
Odoo était initialement disponible sous licence GPL, puis est passé sous licence AGPL en Octobre 2009 pour les branches de développement ; la première version d'Odoo diffusée sous licence AGPL est donc la version 6.0 sortie en Janvier 2011. La licence a de nouveau été modifiée en Juin 2011 (cf l'annonce de la nouvelle offre Odoo Enterprise, concomitante à la refonte du site web) pour devenir une licence "AGPL spéciale", dont j'expliquerai l'aspect "spécial" ci-dessous. Début 2015, l'éditeur annonce le passage sous licence LGPL pour la version 9 et demande aux contributeurs de signer un CLA.
Odoo, dans sa version actuelle, est composé des briques logicielles suivantes :
- le serveur Odoo avec ses modules officiels dont le code source est disponible sur le projet Github odoo,
- les modules communautaires maintenus par l'Odoo Community Association, qu'on pourrait appeler les modules "communautaires officiels",
- les autres modules communautaires, qui ne sont pas gérés par l'association.
Le premier composant (le serveur avec les modules officiels souvent appelés official addons) est maintenu par l'éditeur et les développeurs de l'éditeur sont les seuls à avoir le droit de commit sur la version officielle de ces composants. Depuis début 2015, pour qu'un patch d'un membre de la communauté soit accepté par l'éditeur sur ce composant, il faut que le contributeur ait signé un CLA qui donne tous les droits à l'éditeur pour changer la licence, sans restriction. C'est ce composant qui va passer de la licence AGPL "spéciale" à la licence LGPL à l'occasion de la sortie de la version 9.
Le deuxième composant, les modules communautaires de l'OCA, sont quasi-exclusivement publiés sous licence AGPL. L'OCA recommande l'utilisation de la licence AGPL mais accepte les contributions sous d'autres licences OpenSource compatibles avec la nouvelle licence LGPL de l'éditeur. Pour contribuer sur le code des projets de l'OCA, il faut avoir signé le CLA de l'OCA qui précise que l'OCA peut changer la licence de ses modules vers n'importe quelle licence approuvée par l'OSI (OpenSource Initiative). Mais, comme l'OCA a un fonctionnement démocratique avec un bureau élu pour une durée de 1 an, si le bureau de l'OCA décidait de changer la licence des modules OCA contre l'avis de la majorité des membres de l'OCA, on peut imaginer qu'il serait sanctionné aux élections suivantes et qu'un nouveau bureau serait élu qui pourrait décider de revenir à l'ancienne licence. Un petit groupe de contributeurs possède les droits de commit sur la totalité des branches de l'OCA et, sur chaque projet, des droits de commits sont attribués aux principaux reviewers du projet (les reviewers sont des contributeurs qui font des revues de code sur les pull requests).
Pour le dernier composant, les "autres" modules communautaires, il n'existe pas de règle particulière. Chaque auteur a les droits de commit sur son module et choisi la licence qui s'applique à son module ; il peut décider (en accord avec les autres auteurs éventuels si le module compte plusieurs auteurs) de changer la licence comme bon lui semble.
Le passage de la licence GPL à la licence AGPL en Octobre 2009 a été globalement bien accueilli. La licence AGPL ressemble à la licence GPL, mais introduit une clause supplémentaire : si une personne utilise le logiciel en mode SaaS, elle peut exiger de la personne qui héberge le serveur qu'elle lui transmette le code source de ce qui est exécuté côté serveur (l'utilisateur d'un logiciel sous licence GPL peut exiger le code source si le logiciel lui a été distribué/transmis, or, dans le cas d'un logiciel en mode SaaS utilisé via une interface Web, le logiciel reste sur le serveur de l'hébergeur et ne lui est jamais distribué/transmis... il ne peut donc pas exiger le code source !).
Ensuite, Odoo a de nouveau changé sa licence en Juin 2011 pour passer à une sorte de double licence :
- les utilisateurs ayant un contrat de maintenance en cours de validité ont une licence AGPL + private use,
- les utilisateurs n'ayant pas de contrat de maintenance ont la licence AGPL normale.
Cette licence AGPL + private use permettait de développer des modules privés i.e. des modules dont l'utilisateur ne pourrait pas exiger le code source. Cette possibilité demeurait très encadrée car la licence prévoyait que, si le module en question était distribué à un tiers, alors il devait être distribué sous la licence AGPL normale. Elle a été introduite à la demande de certaines grosses entreprises utilisatrices d'Odoo qui souhaitaient garder privés certains modules développés par leurs soins (sinon, ces modules auraient été "contaminés" par la licence AGPL), car elles affirmaient que certains modules qu'elles avaient développés implémentent des secrets industriels ou leur confèrent un avantage compétitif par rapport à leurs concurrents.
La question de la licence est toujours un sujet sensible chez les développeurs de logiciels libres. Etant donné que ce deuxième changement de licence introduisait la possibilité de développer des modules privés sous certaines conditions, une polémique avait éclaté au sein des développeurs de la communauté Odoo. Cette polémique avait permis de souligner deux points importants.
Le premier point concernait la compatibilité entre l'utilisation de modules communautaires et la clause spéciale "private use". Les modules communautaires sont généralement disponibles sous licence AGPL normale. Or, si un serveur Odoo utilise à la fois des modules officiels et des modules communautaires sous licence AGPL normale, alors l'ensemble devenait soumis à la licence AGPL normale sans la clause "private use". Autrement dit, si vous aviez souscrit à un contrat de maintenance et que vous utilisiez des modules communautaires, vous ne pouviez pas développer des modules privés... sauf à contacter chacun des auteurs des modules communautaires et leur demander, éventuellement contre rémunération, qu'ils vous accordent une licence AGPL + private use sur leur module.
Le deuxième point avait trait au fait que l'éditeur ne possédait pas l'ensemble du copyright sur le premier composant (le serveur et les modules officiels dits addons) car il avait accepté des contributions de certains développeurs de la communauté. Or, dans le cas d'un co-développement, un changement de licence nécessite l'accord explicite et tous les co-auteurs. Or l'éditeur avait pris la décision de changer la licence de façon unilatérale sans demander l'accord des contributeurs. Et à l'époque, l'éditeur n'avait pas mis en place de contributor licence agreement (CLA) prévoyant un droit qui lui serait donné de changer la licence sans accord explicite des contributeurs. Cela engendrait un risque : si vous déteniez un contrat de maintenance et que vous utilisiez la possibilité qui vous était offerte de développer des modules privés, un ou plusieurs contributeurs de la communauté ayant apporté des contributions sur le serveur Odoo ou un des addons officiels pouvaient vous poursuivre pour violation de licence, car vous utilisiez la licence AGPL + private use alors que ces contributeurs pouvaient prétendre que le code qu'ils avaient contribué était sous licence AGPL normale.
A l'époque, l'éditeur d'Odoo ne prenait pas au sérieux cette problématique de la détention du copyright, à laquelle les développeurs de logiciels libres sont pourtant très sensibilisés. Pour l'anecdote, il semble que ce manque de rigueur au niveau de ce qui tourne autour de la licence soit très ancien, car le problème était déjà présent dans la toute première release de TinyERP le 6 Juillet 2004, cf le premier commentaire posté par snspy sur la news d'annonce de la version 1.0 sur LinuxFR !
Heureusement, avec le passage sous licence LGPL décidé début 2015, l'éditeur a enfin commencé à traiter cette problématique de façon sérieuse et a mis en place un CLA qui doit être signé par tous les contributeurs de la communauté s'ils souhaitent voir leurs patchs intégrés dans le serveur ou dans les modules officiels. On peut seulement regretter que le CLA de l'éditeur donne tous les droits à l'éditeur pour changer la licence, y compris passer le code du contributeur sous une licence propriétaire ! Par contraste, le CLA de l'OCA a une clause qui dit que le CLA permet à l'OCA de changer la licence mais que la nouvelle licence doit obligatoirement être une licence libre approuvée par l'OSI.
Le framework
Distinguer les projets framework des projets ERP
J'insiste souvent sur ce point quand je présente Odoo : il faut distinguer les "projets framework" des "projets ERP". Qu'est-ce que j'entends par un "projet framework" ? C'est un projet dans lequel seul le framework d'Odoo est utilisé et où les modules fonctionnels officiels (comptabilité, stock, vente, achat, CRM, production, gestion de projet) ne sont pas utilisés ou seulement un ou deux. Dans le cas d'un "projet framework", l'entreprise aurait pu choisir de développer son application en PHP/MySQL, en Ruby-on-rails ou en Python/Django, mais elle a choisi de développer son application dans le framework d'Odoo.
En effet, la quasi-totalité des grosses références d'Odoo sont des "projets framework". Des références comme La Poste, Véolia transport, Free, etc... sont toutes des "références framework".
L'entreprise qui a fait ce choix tire ainsi parti des avantages du framework d'Odoo : l'ORM, la gestion des droits d'accès, le moteur de workflow, le moteur de rapport et l'interface Web. En réalité, d'après mes discussions avec certains intégrateurs qui font souvent des projets framework, il semble que certains décideurs, pas forcément très au fait des réalités techniques, font le choix de développer leur application métier dans le framework d'Odoo car il contient le mot magique "ERP" ; ils peuvent ainsi dire "j'ai déployé un ERP pour gérer xxxxxx", ce qui sous-entend qu'il a utilisé un logiciel déjà fait pour cette fonction avec certains développements spécifiques pour les adaptations nécessaires, alors qu'en fait il a fait faire un énorme développement spécifique, où tout le code fonctionnel est entièrement sur mesure, ce qui implique qu'il devra supporter seul le coût des évolutions et le coût du portage du code vers les nouvelles versions du framework s'il souhaite tirer parti des améliorations du framework.
Cela signifie aussi que ces grosses "références framework" très prestigieuses n'utilisent pas la comptabilité d'Odoo, n'utilisent pas la gestion de stock d'Odoo, etc. Cela limite un peu la portée de ces références ! Par contre, cela prouve que le framework d'Odoo est de qualité, ce qui n'est pas rien !
En réalité, dans le cadre de "projets ERP", Odoo est adapté pour des déploiements dans des PMEs de quelques dizaines à quelques centaines d'employés, mais le nom de ces PMEs est rarement connu du grand public, ce qui ne permet pas de les ranger dans la catégorie des références prestigieuses !
Une exception à cela : le déploiement Odoo réalisé par Danone. Evidemment, Danone utilise SAP et n'est pas prêt d'en changer ! Mais Danone a choisi de déployer Odoo dans 3 filiales ou join-ventures en phase de démarrage en Colombie et en Australie (2 installations en Colombie pour 5 et 10 utilisateurs ; 1 installation en Australie pour 20 utilisateurs). Plutôt que d'assomer leurs filiales en phase de démarrage avec SAP, ils ont préféré leur installer Odoo pour gérer l'administration des ventes, les achats, les stocks, etc. Vous trouverez plus de détails sur cette success story dans cet article sur 01net.
Les qualités du framework
Je ne suis pas le plus à même de parler des qualités du framework d'Odoo car je n'ai pas développé avec les frameworks concurrents, donc je ne peux pas faire des comparaisons précises. Cependant, je peux quand même affirmer que le framework d'Odoo se distingue sur les points suivants :
- l'ORM : dès ses débuts, Odoo s'est doté d'un ORM, alors que cette technologie était encore très peu répandue. L'ORM permet d'avoir une couche d'abstraction par rapport à la base de données ; il gère les droits d'accès, les traductions et évite d'avoir à écrire le code SQL dans lequel il faut refaire toutes les relations entre les tables avec des JOIN. Odoo a fait évoluer son ORM au fur et à mesure des versions, mais continue d'utiliser son propre ORM et n'a pas basculé vers un ORM libre "standard" tel que SQLAlchemy par exemple. Cependant, il reste possible d'utiliser des requêtes SQL dans le code d'Odoo, par exemple pour certaines parties du code où les performances sont très importantes. Mais attention, le fait d'utiliser une requête SQL dans le code d'Odoo contourne la gestion des droits d'accès d'Odoo ! L'ORM d'Odoo ne fonctionne qu'avec PostgreSQL, même si l'éditeur avait ajouté à une époque dans une branche de test le support de MySQL, dans le cadre d'un partenariat avec Sun Microsystem (après le rachat de MySQL par Sun et avant le rachat de Sun par Oracle), mais cette branche n'a jamais été mergée avec la branche officielle et on n'a plus jamais entendu parler de ce partenariat. Cela n'est pas du tout un problème, bien au contraire ; PostgreSQL est une excellente base de données, bien meilleure que le "bling-bling" MySQL. PostgreSQL est réputée pour sa fiabilité, son sérieux dans son mode de développement et ses performances. PostgreSQL est par exemple utilisée par leboncoin (cf ce témoignage), par la Caisse d'Allocations Familiales (cf ce lien) ou encore par Météo-France (cf ce témoignage). Le fait de ne supporter qu'une seule base de données permet de garder un code simple et permet d'uniformiser les installations d'Odoo.
- l'accès généralisé via les webservices en XML-RPC et JSON-RPC. Tous les objets d'Odoo (exemple d'objets : les commandes, les factures, les écritures comptables, ...) sont accessibles via les webservices en lecture, écriture, création et suppression. Mieux : toutes les fonctions d'Odoo sont accessibles en webservices. Cela signifie par exemple que n'importe quel clic sur un bouton de l'interface d'Odoo (comme par exemple le bouton Créer la facture ou le bouton Valider le mouvement de stock) peut être fait depuis un webservice. Comme l'accès via les webservices est une fonction native du framework, si vous développez un module spécifique qui crée un nouvel objet, par exemple l'objet élève, et un nouveau bouton, par exemple assigner une heure de colle, alors cet objet et ce bouton seront automatiquement accessibles en webservices, sans que vous ayez besoin d'écrire du code spécifiquement pour cela.
- le moteur de workflow : Odoo a un moteur de workflow simple mais généralement suffisant pour les besoins ERP des PMEs. Ce moteur de workflow est spécifique à Odoo.
- l'interface Web d'Odoo. L'interface Web d'Odoo a été lancée avec Odoo v4.2. Elle a été améliorée dans Odoo verion 5.0 et 6.0, puis elle a été entièrement réécrite dans Odoo v6.1 sous l'impulsion du nouveau directeur R&D d'Odoo, Antony Lesuisse. Son design et son ergonomie ont été grandement améliorés dans Odoo version 7.0 ; les améliorations ont continué dans Odoo version 8.0 notamment avec les vues graphes de type OLAP/tableaux croisés dynamiques. Avec la nouvelle interface Web introduite dans Odoo 6.1, l'interface Web est même devenue aussi rapide que le client Gtk utilisé avec le protocole Net-RPC (Net-RPC était le plus rapide des protocoles disponibles avec le client Gtk) ! Elle fonctionne bien sous Firefox, Chrome et Safari, ce qui en fait une solution d'accès à Odoo multi-plateforme (Windows, Mac, Linux... mais aussi iPad ou tablette Android !). Une variante mobile de l'interface Web était disponible dans Odoo 6.1 en version beta et permettait un accès en lecture seule à l'ERP adapté à la petite taille des écrans des téléphones mobiles. Cette variante mobile a été retirée d'Odoo 7.0 ; le directeur technique d'Odoo voudrait à terme qu'il y ait une seule interface responsive qui s'adapte à toutes les tailles d'écran, ce qui éviterait d'avoir une version mobile de l'interface Web avec du code dédié (cf son tweet à ce sujet). Cette version responsive est annoncée dans Odoo 9 et des démos ont été faites lors des journées Odoo de Juin 2015, mais ce sera probablement une fonctionnalité réservée à la version payante d'Odoo.
- le framework d'Odoo utilise le langage Python (version 2.7) ; plus précisément, il impose que les modules soient écrits en Python et il est lui-même codé en Python. Python est un langage de programmation libre et orienté-objet, qui est connu pour être lisible et facile/naturel à utiliser pour le développeur. C'est un language concis, comme le prouve la comparaison effectuée entre le language ABAP de SAP et le Python d'Odoo dans le livre Odoo evaluation with SAP as reference page 56 (livre téléchargeable gratuitement) : une même fonction requiert 111 lignes de code en ABAP et seulement 13 lignes en Python ! Il est livré avec un débugger intégré, qui permet de travailler efficacement sur les bugs. C'est un langage interprété et non compilé, ce qui implique qu'il est beaucoup moins rapide que des langages compilés comme le C ou le C++ et un peu moins rapide que des langages semi-compilés comme Java. Python dispose d'une large communauté, ce qui permet d'avoir accès à un vaste choix de librairies, matures pour la plupart.
- le framework d'Odoo intègre une gestion des modules et permet
de travailler par héritage. Comme je l'ai expliqué dans le diagramme
de SWOT, Odoo est un ERP très modulaire et le code fonctionnel est
réparti dans de très nombreux modules (comptabilité, gestion de stock,
vente, achat, CRM, gestion de production, gestion de projet, notes de
frais, gestion des congés, module pour la localisation française, pour
la localisation brésilienne, etc). Certains modules implémentent
un domaine fonctionnel, d'autres modules ajoutent simplement une
option (par exemple le module product_visible_discount ajoute
une option pour que le pourcentage de discount soit visible pour le
client au lieu d'être directement intégré dans le prix unitaire).
Les modules ont des dépendances entre-eux et, quand on installe un nouveau module, Odoo s'occupe d'installer les dépendances nécessaires.
Mais, le plus important, c'est qu'il est possible de modifier le
comportement natif des modules officiels d'Odoo ou de leur ajouter
des fonctionnalités dans des modules séparés en travaillant par
héritage. Il est ainsi possible d'hériter des objets (exemple d'objets : les commandes, les factures, les emplacements de stock, ...), des vues, des rapports ou
des fonctions (que ce soit des fonctions Python ou Javascript). C'est un outil très puissant qui permet, quand il est bien utilisé par le développeur, de modifier finement le comportement natif des modules fonctionnels standards. Par exemple : dans un module spécifique dont je suis
l'auteur, je peux par exemple :
- hériter l'objet commande et l'objet facture pour ajouter un champ type de projet, qui sert à faire des stats par type de projet, et qui est un champ sélection i.e. l'utilisateur choisi la valeur du champ dans une liste ;
- hériter la vue des commandes et la vue des factures pour que ce champ soit visible de l'utilisateur et qu'il puisse lui attribuer une valeur,
- hériter le rapport de commande et le rapport de facture pour que ce champ apparaisse dans le PDF du devis et dans le PDF de la facture (possible depuis Odoo v8 uniquement avec le nouveau moteur de rapport QWeb),
- hériter la fonction de création de la facture à partir de la commande pour que la valeur de ce champ type de projet se recopie depuis la commande vers la facture.
Le meilleur exemple qui illustre la qualité du framework d'Odoo est l'ajout de vues cartographiques dans Odoo, qui a été réalisé par l'intégrateur Camptocamp. En 2011, Camptocamp a fait évoluer le framework d'Odoo pour ajouter le support des vues cartographiques : en un clic dans Odoo, vous pouvez par exemple voir tous vos clients sur une carte, comme le montre cette vidéo. Pour cela, ils ont fait évoluer intelligement le framework d'Odoo et développé des modules spécifiques. Cela aurait été impossible si le framework d'Odoo avait été mal conçu ! Si vous voulez en savoir plus, vous pouvez lire l'annonce initiale, consulter ces slides présentés aux community days Odoo 2012 et obtenir le code sur le projet OCA GeoSpacial.
Les défauts du framework
Il est rare de trouver un framework parfait et celui d'Odoo n'est pas exempt de défauts. Heureusement, la nouvelle API introduite avec Odoo v8 corrige les principaux défauts du framework ; cependant, il faudra attendre que tous les modules officiels soient portés en nouvelle API pour ne plus être impactés par les défauts de l'ancienne API. Or, dans Odoo v8, seul le module event utilise la nouvelle API ainsi qu'une petite partie du module account (la partie qui a trait aux factures). Voici les défauts du framework, abstraction faite des défauts de l'ancienne API (même si les développeurs y sont encore confrontés quand ils héritent un module écrit en ancienne API) :
- le problème des champs read-only, qui ne sont pas écrits dans la base de données. Dans Odoo, on peut déclarer un champ comme étant read-only. L'éditeur considère que, comme le champ est read-only, sa valeur n'a pas à être écrite en base de données. Mais il arrive fréquemment que, lors du développement d'un module, on ait besoin de faire en sorte qu'un champ prenne une certaine valeur à l'occasion du changement de valeur d'un autre champ (par exemple, quand je change le produit sur une ligne de commande, je veux que le prix unitaire change ; cela se fait via le mécanisme des on_change) et on veut que sa valeur ne soit pas modifiable par l'utilisateur. Or, pour que le champ ne soit pas modifiable par l'utilisateur, on doit le mettre en read-only... mais il n'est alors pas écrit en base, ce qui fait que la valeur de ce champ n'est pas conservée ! Pour plus d'informations, cf le bug report correspondant. Personnellement, je rencontre ce problème assez fréquemment lors de mes développements sur Odoo. Il existe plusieurs méthodes de contournement, mais elles sont lourdes et difficiles à mettre en oeuvre. On espère que la nouvelle API qui sera introduite dans Odoo 8.0 permettra de résoudre ce problème.
- le framework d'Odoo ne supporte pas l'IPv6, mais seulement l'IPv4. Il est cependant possible de se connecter à l'interface Web d'Odoo en IPv6 en intercalant entre le navigateur Web et le serveur Odoo un proxy HTTP qui écoute en IPv6. On est de toute façon obligé d'utiliser un proxy HTTP pour que l'accès à Odoo se fasse en SSL et non en clair : le serveur Odoo est placé derrière un serveur proxy qui servira d'intermédiaire entre le navigateur Web de l'utilisateur et le serveur Web d'Odoo. Ce serveur proxy est connecté d'un côté en HTTP/IPv4 au serveur Odoo et de l'autre en HTTPS et/ou IPv6 au navigateur de l'utilisateur. Presque tous les serveurs Web peuvent remplir cette fonction : c'est notamment le cas d'Apache et de Nginx.
- Quand on est sur une vue formulaire qui intègre un objet one2many en vue liste éditable, une fois passé en mode édition, il n'est pas possible d'obtenir la vue formulaire de l'objet one2many pour modifier certains champs qui ne seraient pas disponibles dans la vue liste. Cela était possible avec le client Gtk, mais cela n'a jamais été possible avec le client Web. On trouve pourtant beaucoup plus de formulaires qui intègrent un objet one2many en vue liste éditable : les bons de commande client et fournisseur, les factures, les notes de frais, etc...
Pour clore cette partie sur les qualités et les défauts du framework Odoo, je vous invite à lire cet article très intéressant d'un développeur habitué à coder des applications métier dans Lotus Domino et qui a suivi une semaine de formation technique pour apprendre à développer dans le framework d'Odoo. Il compare les deux framework et donne son avis sur ce qui est mieux dans l'un par rapport à l'autre ; attention, ce témoignage date de 2011 et ne tient pas compte de la nouvelle API d'Odoo.
Le choix du moteur de rapport
Voilà un tableau récapitulatif des moteurs de rapport utilisables avec Odoo :
| Nom du moteur de rapport | Module | Mainteneur | Outil de conception des rapports | Formats de sortie possibles |
|---|---|---|---|---|
| QWeb | intégré dans le serveur Odoo 8.0 ; c'est le moteur utilisé dans les rapports officiels d'Odoo 8.0. | Odoo S.A. | Codage manuel | HTML, PDF, TXT |
| RML | intégré dans le serveur Odoo + module officiel base_report_designer. C'est le moteur par défaut jusqu'à Odoo 7.0 compris. Il fait encore partie d'Odoo 8.0 mais n'est utilisé que dans quelques cas "spéciaux". | Odoo S.A. | Codage manuel en RML ou conception dans OpenOffice | SXW, HTML, PDF, TXT |
| Jasper | projet openerp-jasperserver de Syleam | Syleam (intégrateur français) | Jasper iReport | Tous les formats supportés par Jasper |
| Aeroo | module communautaire report_aeroo | Alistek (intégrateur letton) | LibreOffice | Tous les formats supportés par LibreOffice : ODT, ODS, PDF, HTML, DOC, XLS, TXT... |
| Webkit | module report_webkit, devenu un module officiel avec Odoo 6.0. Dans Odoo 9.0, il ne fera plus parti des modules officiels (cf ce mail) et deviendra un module communautaire. | Camptocamp (intégrateur suisse) | Editeur HTML |
Pour être exhaustif, il y a aussi :
- le projet Pentaho reports for Odoo, qui utilise le moteur de rapport de Pentaho et qui est hébergé sur github (ces slides, présentés aux Community days Odoo 2012, sont une bonne introduction).
- le projet report_birt, hébergé sur github, qui utilise le moteur de rapport OpenSource BIRT, et dont le développement initial a été financé par l'association CARIF-OREF de l'île de la Réunion. La page github mentionne que ce projet est au stade early alpha !
- le projet report_graphane qui utilise le projet opensource opengraphane. Opengraphane est développé par la société française Callidoc ; ce logiciel permet non seulement de générer des documents mais il gère aussi leur diffusion (par mail, fax, impression, etc...).
La profusion de choix dans les moteurs de rapports pour Odoo s'explique en partie par les défauts du moteur de rapport utilisé par défaut dans Odoo, qui ont poussé la communauté à développer des alternatives.
Le moteur de rapport QWeb - le nouveau moteur par défaut d'Odoo
Le moteur de rapport QWeb a été développé par l'éditeur et livré dans Odoo 8.0. En même temps que la livraison de ce nouveau moteur de rapport Qweb, l'éditeur a fait l'effort de convertir tous les rapports livrés par défaut dans Odoo dans ce nouveau format, ce qui a permis d'imposer ce moteur de rapport dès la sortie d'Odoo 8.0 en Septembre 2014.
Qweb est le nom d'un moteur de template XML écrit par Antony Lesuisse et utilisé dans Odoo pour la génération des pages Web et maintenant également pour les rapports. A ma connaissance, Qweb n'est pas utilisé par d'autres logiciels qu'Odoo et n'est pas disponible en mode standalone en dehors d'Odoo.
La principale qualité de Qweb par rapport à d'autres moteurs de template est qu'il intègre nativement un mécanisme d'héritage, qui permet de définir une structure dans un module A et de la modifier dans un module B qui dépend du module A.
Les rapports au format QWeb sont développés en HTML/CSS ; ils ont 2 formats de sortie possibles :
- le format HTML, par simple rendu du template en tenant compte de l'héritage,
- le format PDF, en utilisant le programme wkhtmltopdf, qui fait partie du projet Webkit et permet la conversion de HTML vers PDF.
Par rapport à ce que les développeurs avaient l'habitude avec les autres moteurs de rapports d'Odoo, le moteur de rapport Qweb a introduit quelques détails pratiques : la notion de widget pour permettre un rendu particulier de certains champs (par exemple le widget monetary pour afficher un montant avec sa devise associée), le fait que les champs soient traduisibles par défaut, que les dates et les nombres soient dans le format associé à la langue du rapport sans appel à une fonction spécifique, et quelques autres détails.
Les seuls défauts que je connais à ce moteur de rapport ne sont pas des défauts d'implémentation mais des défauts liés à la nature même du moteur :
- le fait que les rapports Qweb doivent être développés en HTML/CSS, ce qui requiert les compétences d'un développeur et rend difficile la prédiction du rendu sur un format A4,
- le fait qu'il n'y ait pas de sortie possible dans un format facilement éditable par l'utilisateur, ce qui peut être nécessaire quand on veut que les utilisateurs puissent modifier le document généré par l'ERP.
Le moteur de rapport RML - l'ancien moteur par défaut d'Odoo
Le moteur de rapport par défaut d'Odoo est basé sur le
langage RML (Report Markup Language), qui est un standard mis au point par la société anglaise ReportLab.
Malheureusement, ce langage ne s'est pas imposé et son utilisation
dans l'industrie du logiciel est restée confidentielle. La société ReportLab a développé une implémentation OpenSource limitée et une implémentation propriétaire payante plus complète du langage RML (cf la "feature comparison" sur cette page). Odoo a réalisé sa propre implémentation du langage RML
en développant un outil de conversion RML vers PDF et RML vers HTML.
Cette implémentation est disponible dans le serveur Odoo (cf les
répertoires server/openerp/report/render/rml2html/ et
server/openerp/report/render/rml2pdf/). Malheureusement,
cette implémentation n'est pas complète et beaucoup de balises RML
ne sont pas supportées. Pour éviter aux développeurs d'apprendre le
langage RML, Odoo dispose d'un outil de conversion de SXW (le format
de fichier d'OpenOffice 1.x) vers RML, qui est localisé dans le module
base_report_designer des addons officiels (cf répertoire
addons/base_report_designer/openerp_sxw2rml/). Comme on
peut facilement l'imaginer, cette implémentation de la conversion SXW
vers RML n'est pas complète... ce serait d'ailleurs un travail assez
titanesque !
Il y a 2 façons de se servir de ce moteur de rapport :
- coder le rapport directement en RML. Cela implique d'apprendre ce langage ; ce n'est pas très compliqué, mais ce n'est pas très rigolo non plus. C'est un peu la méthode "à la dure" !
- concevoir le rapport dans LibreOffice et transférer le fichier SXW résultant dans un module Odoo. Le fichier est alors stocké au format SXW et converti au format RML. Ensuite, il y a 2 possibilités :
- si le format de sortie du rapport est le format SXW, alors le serveur Odoo va lire le fichier SXW du module Odoo, va remplacer les champs par leur valeur et envoyer le fichier SXW résultant au client Odoo. Il n'y a alors aucune conversion de format (le document reste au format SXW depuis la conception jusqu'à l'utilisation) et donc la mise en page et les styles utilisés lors de la conception du rapport avec LibreOffice sont parfaitement conservés.
- si le format de sortie du rapport est le format PDF ou HTML, alors le serveur Odoo va lire le fichier RML généré à partir du fichier SXW, puis il va remplacer les champs par leur valeur, et enfin il va utiliser son moteur de conversion RML2PDF ou RML2HTML pour convertir le fichier RML au format PDF ou HTML. Le rapport aura donc subi deux conversions de format entre sa conception et son utilisation (SXW -> RML -> PDF/HTML). Or, comme ces conversions sont faites par des moteurs spécifiques à Odoo qui n'ont pas une implémentation complète de ces formats (encore une fois, une implémentation complète de ces conversions de format est un travail titanesque), beaucoup d'informations de mise en page et de style sont perdues... et le document résultant est assez différent de ce qui avait été voulu par le développeur lors de la conception du rapport.
Le moteur RML a été le moteur par défaut jusqu'à Odoo 7.0 inclus. Vu ses défauts et ses limitations, notamment en ce qui concerne les "pertes" de style et de mise en page, vous comprenez pourquoi la communauté Odoo était si motivée pour développer des alternatives, ce qui explique pourquoi il y a autant de moteurs de rapports communautaires alternatifs !
Le moteur de rapport Jasper
JasperReports est un moteur de rapport OpenSource reconnu, écrit en Java. Il fait partie de la solution de business intelligence de l'éditeur JasperSoft. C'est le moteur de rapport par défaut de l'ERP OpenSource OpenBravo. C'est une solution mature et performante. La conception des rapports se fait avec le logiciel iReport, qui fait partie de la suite Jasper. Cet outil est quand même un peu technique et nécessite un apprentissage, contrairement à LibreOffice par exemple ; il faut donc prendre le temps de se former sur cet outil. Le rendu est réalisé par le serveur Jasper, qui peut être installé sur la même machine que le serveur Odoo ou sur une autre machine. Les deux modules concurrents développés par Syleam et Nan-tic assurent l'interconnexion entre le serveur Odoo et le serveur JasperReports. C'est une solution que je connais assez peu car je ne l'ai jamais utilisée... je ne peux donc pas en parler de façon détaillée.
Le moteur de rapport Aeroo - celui que j'utilise
Aeroo Report est un moteur de rapport basé sur LibreOffice, qui est similaire à la solution utilisée par défaut dans Tryton. C'est le moteur de rapport que j'ai adopté pour tous mes déploiements Odoo en remplacement du moteur de rapport par défaut ; je le connais donc très bien. Il supporte de nombreux formats en entrée et en sortie :
| Format d'entrée | Format de sortie | Outil requis coté serveur |
|---|---|---|
| TXT/CSV | TXT/CSV avec choix du charset | Genshi |
| HTML | HTML | Genshi |
| ODT | ODT | Genshi + aeroolib |
| ODS | ODS | Genshi + aeroolib |
| ODT | PDF ou DOC | Genshi + aeroolib + LibreOffice |
| ODS | PDF, XLS ou CSV | Genshi + aeroolib + LibreOffice |
Les deux principaux cas d'utilisation d'Aeroo sont :
- concevoir un rapport en ODT avec une sortie en ODT. Dans ce cas, l'utilisateur pourra modifier à sa guise sur son PC avec LibreOffice le document généré par Odoo. Techniquement, seul le moteur de template Genshi est utilisé côté serveur (paquet Debian python-genshi) pour remplacer les champs par leur valeur ; LibreOffice n'est pas requis côté serveur (à condition qu'il n'y ait pas d'inclusion de sous-rapports).
- concevoir un rapport en ODT avec une sortie en PDF. Techniquement, cela requiert que 2 composants soient installés côté serveur (pas forcément le même serveur que le serveur Odoo) et tournent en tâche de fond : le serveur aeroo_docs (qui tourne par défaut sur localhost:8989) et LibreOffice (qu'il est conseillé de faire tourner dans un serveur xvfb ; il écoutera par défaut sur localhost:8100). Quand un utilisateur demande le rapport au format PDF, le module report_aeroo va d'abord utiliser aeroolib (une librairie Python développée pour le projet Aeroo report et disponible sur ce projet Github) et Genshi pour remplacer les champs par leur valeur. Le fichier ODT résultant sera alors envoyé par le module report_aeroo au démon aeroo_docs qui lui-même enverra le document au serveur LibreOffice. LibreOffice va convertir le fichier ODT en fichier PDF et le renvoyer au serveur aeroo_docs qui lui-même va le renvoyer au serveur Odoo. Comme la conversion de ODT en PDF est réalisée par LibreOffice côté serveur, le fichier PDF résultant est identique à ce qui aurait été obtenu en exportant un fichier ODT en PDF sur le LibreOffice installé sur son PC. Cela signifie que la mise en page et les styles sont parfaitement conservés.
Le composant aeroo_docs est un mini-démon de moins de 500 lignes de code ; son utilité principale est de faire l'interface entre Odoo écrit en Python 2 et la librairie Python UNO qui permet d'accéder à LibreOffice, et dont les paquets disponibles dans les principales distributions Linux sont compatibles uniquement avec Python 3 (sur Ubuntu, il y a un paquet python3-uno, mais il n'existe plus de paquet python-uno). Aeroo_docs est donc écrit en Python 3 pour pouvoir utiliser la librairie uno et dialogue via une socket réseau avec le module report_aeroo d'Odoo, écrit en Python 2.
En résumé :
- les points forts du moteur de rapport Aeroo sont :
- le développement facile des rapports avec LibreOffice, ce qui permet de faire concevoir et/ou modifier les rapports par des personnes qui ne sont pas informaticiens,
- le large choix des formats de sortie,
- le seul moteur permettant de générer des rapports dans un format éditable (format ODT, ODS, DOC ou XLS) que l'utilisateur peut facilement modifier avec sa suite bureautique préférée. Cela est parfois nécessaire pour certains documents ; je pense par exemple aux documents de douane, qu'il faut parfois adapter manuellement en fonction du pays de destination.
- les points faibles du moteur de rapport Aeroo sont :
- un peu de complexité au niveau de l'environnement technique, avec aeroo_docs et libreoffice qui doivent tourner en tâche de fond (mais mon expérience d'utilisation en production chez plusieurs clients m'a montré que le système était très stable).
- les performances ? J'utilise aeroo pour des rapports d'une ou deux pages comme les devis, les factures, les bons de livraison, les bons de commande ou encore les notes de frais avec une sortie PDF, qui sont généralement les rapports que les entreprises qui déploient Odoo veulent personnaliser et la rapidité de génération par Libreoffice est très bonne (TODO : donner un chiffre). Par contre, Aeroo report ne serait peut-être pas adapté pour sortir un grand livre comptable en PDF, qui peut faire des centaines de pages... je ne sais pas s'il serait compétitif par rapport à d'autres solutions en terme de performance, il faudrait faire des tests !
Pour terminer sur le moteur de rapport Aeroo, un petit secret à connaitre : pour utiliser report_aeroo sur Odoo v8.0, il ne faut pas prendre la branche 8.0 du projet Github aeroo_reports mais prendre la branche master !
Le moteur de rapport Webkit
Le moteur de rapport Webkit a été développé par la société suisse Camptocamp, qui est un intégrateur pionnier sur Odoo et qui a fait de nombreuses contributions importantes et de grande qualité sur Odoo. Webkit est le moteur de rendu HTML libre utilisé par Google Chrome et Safari ; c'est un concurrent du moteur Gecko utilisé par Firefox. Il est réputé pour ses très bonnes performances. Le moteur de rapport Webkit a été initialement développé par Camptocamp pour un de ses clients sous Odoo 5.0 qui avait un très grand nombre de factures à sortir à chaque début de mois. Il avait donc besoin d'une solution performante, capable de sortir des documents en masse dans un format non éditable (je veux dire pas en ODT ou DOC). Avec le moteur de rapport Webkit, le rapport doit être développé en HTML/CSS et il y a un seul format de sortie possible : le format PDF. Pour générer le fichier PDF, le module report_webkit utilise le moteur de template Mako pour remplacer les champs par leur valeur et envoie ensuite le document HTML résultant au programme wkhtmltopdf qui est un composant du projet Webkit qui converti les documents HTML en documents PDF.
Camptocamp a réussi à convaincre l'éditeur d'Odoo d'inclure le module report_webkit parmi les modules officiels, ce qui a été fait dans Odoo 6.0. Cela lui donne une forte visibilité et implique que le module est couvert par le contrat de maintenance proposé par l'éditeur. En résumé :
- les principaux points forts du moteur Webkit sont :
- ses performances,
- le fait qu'il est devenu un module officiel... mais l'éditeur a dit qu'il serait retiré des modules officiels pour la prochaine version d'Odoo,
- et les points faibles sont :
- sortie uniquement en PDF,
- la nécessité de concevoir le rapport en HTML/CSS. Comme les rapports sont souvent demandés en PDF dans le but d'être ensuite imprimés sur une feuille A4, il faut connaître les méthodes pour développer en HTML/CSS un document A4...
Avec l'arrivée du moteur de rapport QWeb, le moteur Webkit n'a plus d'intérêt à mon sens. En effet, le moteur de rapport QWeb a les mêmes qualités que le moteur Webkit et utilise la même base technique (le programme wkhtmltopdf), et possède des avantages supplémentaires (l'héritage, la sortie HTML et le fait d'être le moteur de rapport par défaut d'Odoo). Le moteur Webkit continuera à être utilisé chez les clients qui ont développé leurs rapports en Webkit et qui ne souhaitent pas les redévelopper en QWeb à l'occasion d'une mise à jour de leur Odoo, mais je ne pense pas que ce soit une bonne idée de choisir le moteur de rapport Webkit pour un nouveau projet Odoo.
Plateforme et requirements hardware pour le serveur
Odoo n'est pas un logiciel gourmand en ressources. Pour un déploiement du serveur Odoo et de sa base de données PostgreSQL dans une PME de quelques dizaines de personnes, on peut normalement se contenter d'un processeur décent et de 512 Mo de RAM ! Par contre, il faut aussi tenir compte des ressources requises par le moteur de rapport ; si vous faites le choix du moteur de rapport Jasper ou Aeroo, il faut prévoir plus de RAM pour faire tourner le serveur Jasper en Java ou LibreOffice sur le serveur !
Python et PostgreSQL étant des solutions multi-plateformes, il est possible de déployer le serveur Odoo sur l'OS de votre choix : Linux, Windows, Mac OS X, etc. Le mieux est probablement de le déployer sur l'OS serveur que vous connaissez le mieux, car c'est vous qui aurez ensuite à administrer le serveur, faire les mises à jour de sécurité, faire les backups, etc. La quasi-totalité des installations Odoo tournent sur des serveurs Linux : un OS libre pour héberger un ERP libre, quoi de plus naturel ? C'est aussi sur cette plateforme que vous trouverez le plus facilement de l'aide au sein de la communauté Odoo.
Il n'est pas envisageable aujourd'hui de déployer Odoo sur un serveur de production via des packages, que ce soit des packages de distributions Linux, les archives de type tarball ou des installeurs all-in-one Windows. En effet, vous serez très certainement amenés à appliquer des patchs sur les modules fonctionnels pour corriger certains bugs, ce qui ne serait pas du tout pratique si vous avez installé Odoo via les packages de votre distribution Linux par exemple. De plus, l'éditeur ne fait plus de releases mineures d'Odoo i.e. la release majeure 6.1 n'est plus suivie de releases mineures 6.1.1 puis 6.1.2, etc... Je conseille donc de déployer le code d'Odoo sur votre serveur de production :
- soit avec git, qui est l'outil de gestion de version utilisé par Github, la plateforme de développement d'Odoo ;
- soit avec buildout, via la célèbre recipe buildout d'Anybox, qui fourni une couche d'abstraction supplémentaire au dessus de git (ou de tout autre outil de suivi de version de code source) et permet une automatisation et une industrialisation du processus de déploiement.
La business intelligence avec Odoo
La business intelligence (BI) est un mot très pompeux qui désigne le fait de "faire parler" les données stockées dans ses bases de données, par le biais de statistiques, qui peuvent prendre la forme de graphiques, de tableaux croisés dynamiques (on dit OLAP en langage "BI"), de tableaux de bord, etc.
Il est possible de développer des graphiques ou des tableaux croisés dynamiques directement dans Odoo. Historiquement, les graphiques intégrés dans Odoo étaient très limités, mais l'éditeur a redéveloppé from scratch la vue des graphiques dans Odoo 7.0, cf ce post sur le blog officiel. Dans Odoo 8.0, l'éditeur a développé des fonctionnalités de tableau croisé dynamique (OLAP) dans Odoo, avec possibilité d'export Excel (cf ces slides). Ces tableaux croisés disponibles directement dans Odoo fonctionnent bien et devraient pouvoir satisfaire la plupart des utilisateurs. La solution est simple pour le développeur et intuitive pour les utilisateurs. Le seul manque important au niveau des cubes OLAP d'Odoo est la fonction de drill-through.
Si les fonctionnalités de graphiques et de tableaux croisés dynamiques intégrés dans Odoo ne donnent pas satisfaction, il existe de nombreuses solutions OpenSource de Business Intelligence, les plus connues et matures étant :
- Pentaho (racheté en Février 2015 par Hitachi),
- JasperSoft,
- Birt,
- SpagoBI,
- Saiku.
L'offre OpenSource dans le domaine de la business intelligence est large, diversifiée et mature. Pour suivre l'actualité de la business intelligence OpenSource, je vous conseille de suivre le blog OSBI.fr de Sylvain Decloix d'ATOL CD.
Les modules
Le nombre de modules
Tout d'abord, il faut aujourd'hui différencier trois catégories de modules :
- les modules officiels de l'éditeur qui sont disponibles dans le projet Github odoo https://github.com/odoo/odoo. Ils sont un peu moins de 200. Ils sont maintenus par l'éditeur, c'est-à-dire que c'est l'entreprise Odoo S.A. qui s'occupe du portage du code à chaque nouvelle version et qui a le contrôle du code source i.e. la communauté n'a pas le droit de commit directement sur ces modules : toute proposition d'amélioration d'un membre de la communauté doit être approuvée par une personne de l'équipe R&D d'Odoo S.A. via une pull request. Seuls les modules officiels sont couverts par le contrat de maintenance vendu par l'éditeur.
- les modules OCA, que l'on pourrait également appeler communautaires officiels qui sont disponibles dans les projects Github gérés par l'Odoo Community Association (OCA). Ils sont développés et contrôlés par la communauté Odoo en suivant des règles spécifiques aux modules OCA. En fait, les branches OCAs sont des branches Odoo comme les autres et il ne devrait donc pas y avoir de règle spécifique OCA, mais il se trouve que de nombreuses règles concernant le code ne sont pas respectées par les modules officiels de l'éditeur, d'où le fait que je parle de règles spécifiques OCA. Seuls certains membres actifs de l'OCA ont les droits de commit sur les branches OCA ; toute proposition d'amélioration doit faire l'objet d'une pull request et doit obtenir au moins deux revues de code positives pour être mergée dans la branche principale. C'est à l'occasion de la review que la conformité aux règles de développement est vérifiée ainsi que la non-redondance de fonctionnalité i.e. on vérifie que la nouvelle fonctionnalité proposée n'est pas déjà présente dans un autre module (le cas s'est déjà produit, comme par exemple sur cette merge proposal).
- les autres modules communautaires, qui ne sont pas maintenus par OCA. Il n'y a pas de règle de gestion particulière pour ces modules communautaires ; souvent, ces modules sont contrôlés et maintenus par un intégrateur en particulier. Certains de ces modules ont vocation à terme à rejoindre les projets OCAs quand ils seront suffisamment matures ; d'autres ont vocation à rester en dehors du périmètre OCA. En fait, le processus de review systématique qui s'applique à toutes les branches OCA est assez lourd et long. Par conséquent, les modules qui évoluent rapidement et/ou qui n'ont pas une audience suffisante pour attirer plusieurs reviewers pour chaque changement dans le code ont vocation à rester en dehors du périmètre OCA.
L'ensemble de ces modules est répertorié sur le site Odoo Apps (à condition que le développeur du module ait enregistré la branche dans laquelle se trouve son module dans Odoo Apps). Ce site permet de rechercher des modules par mots clés et de voir leur description et la branche Launchpad ou Github dans laquelle ils se trouvent. Mais, comme les possibilités de recherche sur Odoo Apps sont un peu limitées, l'intégrateur allemand initOS a lancé un moteur de recherche odoo code search qui permet à la fois de chercher dans les métadonnées d'un module mais aussi dans le code source d'un module. Contrairement à Odoo Apps, ce moteur de recherche trouve par lui-même les modules Odoo sans besoin d'un enregistrement préalable.
Une des choses qui m'énerve le plus dans le discours qu'on peut entendre sur Odoo est "qu'il y a N milliers de modules fonctionnels disponibles". Il y a effectivement plus de 5800 modules référencés sur Odoo Apps, donc cette affirmation n'est a priori pas mensongère en sens strict. Sur les 5800 modules, il y a les 200 modules officiels qui sont maintenus par l'éditeur, environ 700 modules OCA, et 4900 autres modules communautaires (ce dernier chiffre a été obtenu par simple soustraction par rapport aux deux premiers). Sur ces 4900 autres modules communautaires, j'estime qu'il y a 90% de modules inutilisables, car :
- ils ne sont pas génériques i.e. ils ont été développés pour un client particulier pour ses besoins très spécifiques qu'on ne retrouvera pas dans une autre entreprise,
- ils ont été développés pour une ancienne version d'Odoo et ils n'ont jamais été portés vers les versions ultérieures,
- ils ont été codés "à l'arrache" pour un besoin particulier et n'ont jamais été améliorés depuis.
J'ai l'habitude de dire : "un module Odoo, tant qu'on ne l'a pas essayé, on ne sait pas ce qu'il vaut !"
Parmi les modules communautaires non-OCA, on trouve tous les niveaux de qualités. Si je devais faire une classification, par ordre croissant :
- les modules peu génériques qui sont trop spécifiques à un cas particulier,
- les modules génériques mais pas bien maintenus i.e. qui ne supportent qu'une ancienne version d'Odoo,
- les modules génériques et maintenus, mais qui n'ont pas été finalisés, par exemple des modules qui créent de nouveaux objets sans s'occuper des ACL (Access Control List) correspondantes et/ou dont l'ergonomie est mal fichue ou n'est pas conforme aux standards d'ergonomie d'Odoo,
- les modules génériques, maintenus, qui ont été finalisés/peaufinés... ils ne sont pas si nombreux !
- le top étant les modules génériques, maintenus, peaufinés et qui sont dotés d'une suite de tests automatisés pour tracker les régressions éventuelles lors du développement ! Je n'en connais pas beaucoup, car la plupart des bons modules communautaires font maintenant partie de l'OCA.
Dans cette jungle de modules, où le meilleur côtoie le pire, il est souvent difficile de s'y retrouver. Au début du travail d'intégration d'Odoo à Anevia, il nous était même arrivé à deux reprises de nous lancer dans un développement spécifique avant de s'apercevoir par la suite qu'un module communautaire était disponible pour ce qu'on voulait faire ! Savoir quels sont les "bons" modules Odoo i.e. ceux qui marchent vraiment, qui sont codés correctement et dont la couverture fonctionnelle est intéressante, est une connaissance précieuse et longue à acquérir. Et comme personne ne peut connaître tous les modules ni avoir le temps de tous les tester, les experts Odoo ont l'habitude d'échanger entre eux leur expérience des bons et mauvais modules.
Les modules officiels : le minimum dans chaque domaine
N'allez pas vous imaginer qu'Odoo concurrence avec ses modules officiels des ERPs propriétaires de premier plan dans le domaine fonctionnel. Odoo fournit le minimum dans chaque domaine fonctionnel, je dirai presque le minimum vital !
Une des conclusions à laquelle je suis arrivé en observant les priorités de l'éditeur et en discutant avec ses équipes, est que cela fait partie de la philosophie d'Odoo. Odoo, avec ses modules officiels, fournit un socle minimum dans chaque domaine, et le framework Odoo est conçu pour permettre de facilement étendre ce périmètre fonctionnel minimum pour les besoins particuliers du client.
Dit autrement :
- dans un ERP propriétaire de premier plan, vous allez trouver un périmètre fonctionnel large, avec pléthore de paramétrages à réaliser pour que la grosse masse de code qui constitue le large périmètre fonctionnel puisse fonctionner selon vos besoins propres. Comme le périmètre fonctionnel est vaste et vise à couvrir les besoins d'un maximum d'entreprises aux profils très variés, le code fonctionnel est très volumineux. En réalité, une entreprise n'utilisera qu'une toute petite partie de ce volumineux code fonctionnel... et il faut espérer que, pour les besoins particuliers de son métier, elle trouvera ce qu'il faut dans cette masse.
- dans Odoo, les modules officiels sont tellement basiques qu'ils ne vont correspondre qu'à de petites entreprises ayant des besoins très simples et très standards. Pour les moyennes entreprises et/ou des entreprises ayant des besoins particuliers liés à leur métier, il va être nécessaire d'étendre le périmètre fonctionnel des modules officiels via des modules additionnels. Soit il existe déjà un projet communautaire qui fournit les modules additionnels dont l'entreprise a besoin, soit l'entreprise financera un développement spécifique pour coder ces modules additionnels. Au final, l'entreprise aura un ERP simple dans les domaines où elle n'a pas de besoins spécifiques, et elle aura amélioré l'ERP avec des modules additionnels dans les domaines où son métier présente une complexité particulière. La philosophie d'Odoo consiste à dire que cette solution est meilleure que d'avoir un ERP complexe dans tous les domaines !
Voilà quelques exemples de "manques" fonctionnels qui ne sont pas couverts par les modules officiels :
- Comptabilité :
- pas d'export CSV de la balance générale, ni de la balance analytique,
- pas de support des virements ou prélèvements SEPA,
- pas de mise à jour automatique des taux de change des devises depuis Internet,
- pas de possibilité de configurer un blocage ou un avertissement quand le taux de change utilisé est trop vieux (par exemple, lors de la validation d'un facture en devise, Odoo prend le taux de change le plus proche de la date de la facture pour cette devise... même si ce taux date de plusieurs années !)
- Douane :
- pas d'implémentation de la DES (Déclaration Européenne des Services),
- implémentation très partielle et très limitée de la DEB (Déclaration d'Echange de Biens),
- Gestion des stocks :
- Odoo v8 gère le drop-shipping nativement, mais il ne permet pas de générer les 2 factures (client et fournisseur) à partir du bon de livraison de l'opération de drop-shippment.
- Odoo gère les numéros de série nativement, mais il ne permet pas nativement une saisie facile et pratique des produits tracés par numéro de série unitaire (i.e. un S/N unique pour chaque produit).
- Notes de frais :
- Odoo permet la récupération de TVA sur les notes de frais, mais n'affiche aucune information sur la TVA au niveau de la vue des notes de frais (ce point sera corrigé dans la version 9).
Pour tous les exemples de "manques" fonctionnels cités ci-dessus, il existe un ou plusieurs modules communautaires qui assurent la fonction. Il est donc très rare de faire des déploiements Odoo en utilisant uniquement les modules officiels.
Autre exemple pour illustrer l'aspect minimaliste des modules officiels : voilà la liste de toutes les fonctionnalités qu'Anevia a eu besoin d'ajouter dans un module spécifique pour étendre la couverture fonctionnelle du module officiel de gestion des notes de frais (module hr_expense) :
- ajout de la gestion des frais kilométriques quand un employé utilise son véhicule personnel pour un déplacement professionnel : sur sa fiche employé, on configure sa plaque d'immatriculation et son prix au kilomètre (qui dépend de la puissance fiscale de sa voiture) ; ses données seront recopiées sur sa note de frais et, quand il ajoutera une ligne de frais kilométriques, le prix unitaire de la ligne sera bloqué sur son prix au kilomètre,
- les notes de frais sont saisies en TTC dans Odoo. Sur certaines dépenses de notes de frais (pas sur toutes, il faut se référer aux règles fiscales), il est possible de récupérer la TVA. Pour cela, il a fallu ajouter une visualisation d'un montant HT et du montant de TVA correspondant au montant TTC saisi par l'utilisateur, pour qu'il puisse contrôler qu'il utilise bien le bon taux de TVA.
- refonte complète des droits sur les transitions du workflow des notes de frais (si quelqu'un sait m'expliquer quelle est la logique derrière le paramétrage par défaut des droits sur le workflow des notes de frais, je suis preneur !). Modification également pour que les managers ne puissent valider que les notes de frais des personnes de leur équipe,
- à Anevia, le plan analytique correspond à un découpage par départements de l'entreprise. On a ajouté un paramètre code analytique par défaut sur la fiche employé ; c'est ce code analytique qui est utilisé par défaut sur chaque ligne de note de frais, ce qui évite à l'employé d'avoir à le saisir à chaque fois (il peut toujours le modifier, par exemple quand il a engagé une dépense pour un autre département que celui dans lequel il travaille).
- redéveloppement du rapport de notes de frais : ce rapport a été réécrit en utilisant le moteur de rapport choisi par Anevia (Aeroo report) et en ajoutant les champs ajoutés par les développements spécifiques décrits ci-dessus (plaque d'immatriculation, montant HT et TVA, ...) et avec une mise en page beaucoup plus jolie et soignée.
J'espère que les exemples que je viens de citer vous permettent de mieux comprendre ce que je veux dire quand j'affirme que "les modules officiels fournissent le minimum dans chaque domaine". J'insiste un peu sur ce point car je crois qu'il est très important pour bien comprendre Odoo. S'il y avait une chose à retenir, ce serait celle-là : Odoo est un ERP simple et minimaliste doté d'un bon framework qui permet d'étendre facilement ses fonctionnalités dans les domaines où vous en avez besoin en développant des modules additionnels qui vont utiliser le mécanisme d'héritage.
Cela me rappelle ce que me disait mon père, qui travaillait à l'époque dans les ERPs propriétaires, quand j'ai commencé à chercher un ERP pour Anevia : "si un vendeur d'ERP te dit qu'il faut réaliser des développements spécifiques pour répondre à tes besoins, fuis-le comme la peste !" En disant cela, il faisait référence au coût important des développements spécifiques qui, avec un ERP propriétaire, s'ajoute au coût non négligeable des licences logicielles. En effet, quand on se lance dans un développement spécifique sur n'importe quel ERP, il faut compter :
- le coût d'implémentation initial des fonctionnalités demandées,
- le coût de finition du module, pour le rendre intuitif, ergonomique, y ajouter les règles de sécurité, développer des tests automatisés pour éviter les régressions (malheureusement, les budgets prévus pour les développements spécifiques permettent rarement cela, car le temps d'implémentation initial est déjà important),
- le coût de la traduction éventuelle,
- le coût des améliorations/modifications qui vont inévitablement être demandées par les utilisateurs (ou imposé par une évolution législative ou par une évolution de l'activité et des process de l'entreprise) une fois que le module commencera à être réellement utilisé,
- le coût de maintenance de ces modules, pour avoir une garantie sur la correction rapide des bugs qui seront probablement trouvés par les utilisateurs,
- le coût de portage du code quand l'entreprise souhaite migrer vers une version plus récente d'Odoo.
Comme on le voit, la décision de réaliser un développement spécifique ne doit pas être prise à la légère, car cela demande des ressources importantes dans la durée. Néanmoins, dans le cas d'Odoo, cela fait partie de la méthode d'implémentation, dès que l'on s'adresse à des sociétés de taille moyenne et/ou à des sociétés qui ont des besoins qui sortent un peu du périmètre très basique des modules officiels. Heureusement, un certain nombre de projets communautaires ambitionnent de développer des verticalisations métier d'Odoo en publiant une série de modules permettant d'étendre le périmètre fonctionnel natif d'Odoo pour certains secteurs d'activité. Si vous avez la chance de faire partie de l'un de ces secteurs d'activité, alors cela devrait vous éviter d'avoir trop de développements spécifiques à réaliser.
C'est la raison pour laquelle il existe des initiatives pour développer des verticalisations métier d'Odoo pour certains secteurs d'activité. Ces verticalisations métier développent des modules pour couvrir les besoins d'un secteur d'activité donné ; ainsi, quand une entreprise de ce secteur d'activité veut déployer Odoo, elle bénéficiera d'un périmètre fonctionnel déjà large pour son métier et pourra financer certaines améliorations de la verticalisation métier et des développements spécifiques. Au contraire, si une entreprise a un métier spécifique avec des processus bien particuliers qui ne sont pas couverts par le modules actuellement disponible pour Odoo, elle devra financer de gros développements ; si son budget est trop limité, elle risque de limiter ces développements au strict minimum et de ne pas être satisfaite du résultat car elle estimera que son ERP n'est pas assez efficace et adapté pour son mode de fonctionnement.
Voilà un exemple de quelques verticalisations métier que je connais qui sont bien couvertes par Odoo :
- le e-commerce, avec les connecteurs Magento-Odoo, PrestaShop-Odoo, Amazon-Odoo et eBay-Odoo,
- les abbayes, avec le projet OCA vertical-abbey pour la gestion des messes et des séjours et le projet OCA donation pour la gestion des dons,
- les ONG humanitaires, avec le projet OCA vertical-ngo.
Cette liste n'est pas exhaustive ; vous en trouverez d'autres en cherchant les projets OCA qui commencent par "vertical-".
Exemple d'un cas réel
Je publie ici la liste des modules utilisés par l'Abbaye du Barroux, qui utilise Odoo 8.0 en production depuis le 1er Janvier 2015. Cela permet de voir :
- quels sont les modules officiels utilisés,
- quels sont les modules OCA et les modules communautaires non OCA qui ont été choisis pour compléter les modules officiels,
- quels modules spécifiques ont été développés.
Je ferai ensuite une analyse sur la répartition du volume de code entre les modules officiels, les modules OCA, les modules communautaires non OCA et les modules spécifiques.
| Nom du module | Type de module | Mainteneur | Branche | Nombre de patchs appliqués | Nombre de lignes de code | Fonctionnalités et commentaires | |
|---|---|---|---|---|---|---|---|
| account | officiel | Odoo S.A. | github/odoo/odoo | 12 | 28 473 | Le module de facturation et de comptabilité. | |
| account_accountant | officiel | Odoo S.A. | github/odoo/odoo | 0 | 64 | Mini-module qui permet à l'administrateur d'avoir accès à la comptabilité. | |
| account_cancel | officiel | Odoo S.A. | github/odoo/odoo | 0 | 61 | Module qui autorise l'annulation d'une facture en cas d'erreur | |
| account_chart | officiel | Odoo S.A. | github/odoo/odoo | 0 | 35 | ||
| account_payment | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1 456 | Module de gestion des paiements fournisseur | |
| account_voucher | officiel | Odoo S.A. | github/odoo/odoo | 0 | 5 493 | Ajoute une méthode de saisie des règlements client et fournisseur (plutôt que de saisir les écritures comptables directement dans le journal de banque) | |
| analytic | officiel | Odoo S.A. | github/odoo/odoo | 0 | 422 | Module pour la comptabilité analytique | |
| auth_crypt | officiel | Odoo S.A. | github/odoo/odoo | 0 | 72 | Module pour le stockage des mots de passe sous forme de hash | |
| auth_signup | officiel | Odoo S.A. | github/odoo/odoo | 0 | 542 | Module pour l'authentification et la ré-initialisation des mots de passe | |
| base | officiel | Odoo S.A. | github/odoo/odoo | 1 | 27 723 | Le module qui fournit les objets de base : utilisateurs, pays, monnaies, partenaires, ... | |
| base_iban | officiel | Odoo S.A. | github/odoo/odoo | 0 | 179 | Module pour la gestion des IBANs | |
| base_import | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1645 | Module pour la gestion des imports de données | |
| base_setup | officiel | Odoo S.A. | github/odoo/odoo | 0 | 411 | Module qui enrichit les pages de configuration | |
| base_vat | officiel | Odoo S.A. | github/odoo/odoo | 0 | 302 | Module pour la gestion des numéros de TVA intra-communautaires | |
| board | officiel | Odoo S.A. | github/odoo/odoo | 0 | 976 | Module pour les tableaux de board | |
| decimal_precision | officiel | Odoo S.A. | github/odoo/odoo | 0 | 166 | Module pour la gestion de la précision décimale | |
| delivery | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1 065 | Module de gestion des livraisons | |
| document | officiel | Odoo S.A. | github/odoo/odoo | 0 | 2 663 | Module de gestion des pièces jointes sur les objects de l'ERP. | |
| edi | officiel | Odoo S.A. | github/odoo/odoo | 0 | 608 | Module de support de l'EDI. Ce module est installé automatiquement par le jeu des dépendances. | |
| email_template | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1 543 | Module qui permet de développer des templates de mail, qui sont ensuite envoyés lors d'une action particulière (validation d'une commande, validation d'une facture, etc...). | |
| fetchmail | officiel | Odoo S.A. | github/odoo/odoo | 0 | 465 | Module qui permet de télécharger les mails stockés sur un compte POP3/IMAP et de s'en servir comme point de départ d'un process ERP (exemple : mail envoyé à l'adresse rma@mycompany.com, qui va aboutir à la création d'un CRM claim). Ce module est installé automatiquement par dépendance lors de l'installation de la CRM. Il n'est pas utilisé dans ce déploiement. | |
| knowledge | officiel | Odoo S.A. | github/odoo/odoo | 0 | 95 | Module technique sans intérêt fonctionnel. | |
| l10n_fr | officiel | Communauté française d'Odoo | github/odoo/odoo | 0 | 10 969 | Contient la localisation française d'Odoo : plan comptable général, taxes, régimes fiscaux, etc... La définition du plan comptable général en XML représente 80% du code du module. | |
| officiel | Odoo S.A. | github/odoo/odoo | 0 | 9847 | Module qui gère les mails et le chatter. | ||
| mrp | officiel | Odoo S.A. | github/odoo/odoo | 0 | 5 181 | Module de gestion de la production | |
| payment | officiel | Odoo S.A. | github/odoo/odoo | 0 | 639 | Module de base pour la gestion des règlements | |
| payment_transfer | officiel | Odoo S.A. | github/odoo/odoo | 0 | 135 | Module non utilisé (installé automatiquement) | |
| point_of_sale | officiel | Odoo S.A. | github/odoo/odoo | 10 | 15 466 | Module pour la gestion de la caisse | |
| procurement | officiel | Odoo S.A. | github/odoo/odoo | 0 | 657 | Module pour la gestion des ré-approvisionnements | |
| product | officiel | Odoo S.A. | github/odoo/odoo | 3 | 4 575 | Module qui contient les objets correspondant aux produits et tous les objets annexes. | |
| product_visible_discount | officiel | Odoo S.A. | github/odoo/odoo | 2 | 135 | Permet de rendre le discount visible par le client sur le devis et la facture, plutôt que d'intégrer le discount dans le montant du prix unitaire (qui est le comportement par défaut d'Odoo). | |
| purchase | officiel | Odoo S.A. | github/odoo/odoo | 7 | 5 216 | Module de gestion des achats chez les fournisseurs. | |
| purchase_double_validation | officiel | Odoo S.A. | github/odoo/odoo | 0 | 160 | Module qui active la double validation des commandes fournisseurs. | |
| report | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1 106 | Module technique pour les rapports Qweb, décrit dans la section de ce document dédiée aux Moteurs de rapport. | |
| report_webkit | officiel | Camptocamp | github/odoo/odoo | 0 | 984 | Module qui fournit le moteur de rapport Webkit, décrit dans la section de ce document dédiée aux Moteurs de rapport. | |
| resource | officiel | Odoo S.A. | github/odoo/odoo | 0 | 4 555 | Module qui gère la disponibilité d'une resource et son calendrier associé ainsi que ses absences. | |
| sale | officiel | Odoo S.A. | github/odoo/odoo | 3 | 4 959 | Module de gestion des ventes (devis, commandes client) | |
| sale_mrp | officiel | Odoo S.A. | github/odoo/odoo | 0 | 362 | Module technique de lien entre le module sale et le module mrp | |
| sales_team | officiel | Odoo S.A. | github/odoo/odoo | 0 | 519 | Module qui définit les équipes de vente | |
| sale_stock | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1 312 | Module de lien entre le module sale et le module stock. | |
| share | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1 063 | Module qui permet de partage certaines données de l'ERP avec des utilisateurs extérieurs à l'organisation. A désinstaller ? | |
| stock | officiel | Odoo S.A. | github/odoo/odoo | 3 | 12 728 | Module de gestion des stocks. | |
| stock_account | officiel | Odoo S.A. | github/odoo/odoo | 0 | 1 367 | Module de lien entre la gestion des stocks et la comptabilité. | |
| stock_picking_wave | officiel | Odoo S.A. | github/odoo/odoo | 0 | 388 | Module pour la gestion des courses dans l'entrepôt. | |
| Modules Web | officiel | Odoo S.A. | github/odoo/odoo | 2 | 43 039 | Modules techniques nécessaires pour le fonctionnement de l'interface Web d'Odoo : web, web_calendar, web_diagram, web_gantt, web_graph, web_kanban, web_kanban_gauge, web_kanban_sparkline, web_tests, web_view_editor. Je n'ai pas compté ces modules dans le décompte des lignes de code des modules fonctionnels. | |
| Modules OCA | |||||||
| mass | OCA | Akretion & Barroux | github/OCA/vertical-abbey | 0 | 1 593 | Module de gestion des messes | |
| stay | OCA | Akretion & Barroux | github/OCA/vertical-abbey | 0 | 1 012 | Module de gestion des séjours à l'abbaye | |
| donation_stay | OCA | Akretion & Barroux | github/OCA/vertical-abbey | 0 | 175 | Connexion entre le module de gestion des séjours et le module de gestion des dons | |
| donation_mass | OCA | Akretion & Barroux | github/OCA/vertical-abbey | 0 | 271 | Connexion entre le module de gestion des dons et le module de gestion des messes | |
| donation | OCA | Akretion & Barroux | github/OCA/donation | 0 | 1 160 | Module de gestion des dons | |
| donation_bank_statement | OCA | Akretion & Barroux | github/OCA/donation | 0 | 221 | Module de gestion des dons à partir des relevés de banque (pour les dons par virement) | |
| donation_direct_debit | OCA | Akretion & Barroux | github/OCA/donation | 0 | 213 | Module qui facilite la gestion des dons par prélèvement SEPA | |
| donation_recurring | OCA | Akretion & Barroux | github/OCA/donation | 0 | 310 | Module pour la gestion des dons récurrents | |
| donation_tax_receipt | OCA | Akretion & Barroux | github/OCA/donation | 0 | 745 | Module pour la gestion des reçus fiscaux | |
| donation_recurring_tax_receipt | OCA | Akretion & Barroux | github/OCA/donation | 0 | 72 | Connexion entre le module de gestion des dons récurrents et le module de gestion des reçus fiscaux | |
| donation_thanks | OCA | Akretion & Barroux | github/OCA/donation | 0 | 76 | Module pour les lettres de remerciements pour les dons | |
| account_analytic_required | OCA | Akretion | github/OCA/account-analytic | 0 | 190 | Permet d'obliger (ou d'empêcher) la saisie d'un compte analytique quand l'écriture comptable utilise certains comptes de comptabilité générale. Utile pour les sociétés qui utilisent systématiquement de l'analytique sur toutes leurs charges, ou sur tous leurs produits. | |
| account_financial_report_webkit | OCA | Camptocamp | github/OCA/account-financial-reporting | 0 | 5 008 | Contient les célèbres rapports financiers de Camptocamp. Ce module remplace les rapports financiers natifs d'Odoo. | |
| account_financial_report_webkit_xls | OCA | Noviat | github/OCA/account-financial-reporting | 0 | 2 425 | Ajoute l'export XLS sur les rapports financiers. | |
| account_journal_report_xls | OCA | Noviat | github/OCA/account-financial-reporting | 0 | 1 293 | Ajoute l'export XLS sur les journaux comptables. | |
| account_move_line_report_xls | OCA | Noviat | github/OCA/account-financial-reporting | 0 | 501 | Ajoute l'export XLS sur les écritures comptables. | |
| account_auto_fy_sequence | OCA | Acsone | github/OCA/account-financial-tools | 0 | 169 | Permet de mettre facilement l'année fiscale dans les séquences des journaux, et évite une intervention manuelle à chaque changement d'année fiscale. | |
| account_check_deposit | OCA | Akretion | github/OCA/account-financial-tools | 0 | 588 | Module pour la gestion des remises de chèque en banque. | |
| account_fiscal_position_vat_check | OCA | Akretion | github/OCA/account-financial-tools | 0 | 116 | Blocage en cas de tentative de validation d'une facture client intracommunautaire HT sans numéro de TVA sur la fiche client. | |
| account_journal_always_check_date | OCA | Akretion | github/OCA/account-financial-tools | 0 | 33 | Active automatiquement l'option de cohérence entre date et période comptable. | |
| account_move_line_no_default_search | OCA | Therp | github/OCA/account-financial-tools | 0 | 38 | Module qui désactive la sélection par défaut d'un journal et d'une période sur la vue des lignes comptables. | |
| account_partner_required | OCA | Acsone | github/OCA/account-financial-tools | 0 | 193 | Module qui rend le champ partenaire obligatoire pour certains types de comptes comptables. | |
| account_reversal | OCA | Akretion | github/OCA/account-financial-tools | 0 | 277 | Permet d'extourner facilement une écriture comptable sans saisie manuelle. | |
| currency_rate_update | OCA | Camptocamp | github/OCA/account-financial-tools | 0 | 904 | Permet l'import journalier des taux de change depuis une sélection de sites Internet. | |
| account_invoice_merge | OCA | Elico Corp | github/OCA/account-invoicing | 0 | 293 | Permet la fusion de factures. | |
| account_payment_term_extension | OCA | Camptocamp | github/OCA/account-invoicing | 0 | 169 | Permet notamment le décompte des échéances de paiement en mois et pas seulement en jours. Sans ce module, une facture datée du 30 Janvier et ayant des conditions de paiement à "30 jours fin de mois" aura un échéance au 31 Mars ; avec ce module et un paramétrage en mois, l'échéance sera le 28 Février. | |
| invoice_fiscal_position_update | OCA | Julius et Akretion | github/OCA/account-invoicing | 0 | 63 | Met à jour les lignes de facture lors d'un changement de la position fiscale. | |
| account_banking_mandate | OCA | Akretion et Compassion CH | github/OCA/bank-payment | 0 | 458 | Ajoute l'objet mandat de prélèvement. | |
| account_banking_pain_base | OCA | Akretion et Noviat | github/OCA/bank-payment | 0 | 547 | Module de base pour les virements et prélèvements SEPA. | |
| account_banking_payment_export | OCA | Acsone et Therp | github/OCA/bank-payment | 0 | 640 | Module de base pour les modules bancaires. | |
| account_banking_payment_transfer | OCA | Multiples | github/OCA/bank-payment | 0 | 447 | Génère des écritures comptables de transfert lors de la validation d'un virement ou d'un prélèvement. | |
| account_banking_sepa_credit_transfer | OCA | Akretion | github/OCA/bank-payment | 0 | 456 | Module pour les virements SEPA. | |
| account_banking_sepa_direct_debit | OCA | Akretion | github/OCA/bank-payment | 0 | 947 | Module pour les prélèvements SEPA. | |
| account_direct_debit | OCA | Therp, Smile | github/OCA/bank-payment | 0 | 424 | Module de base pour les prélèvements. | |
| account_payment_partner | OCA | Akretion | github/OCA/bank-payment | 0 | 167 | Module qui ajoute le mode de paiement sur la fiche partenaire | |
| account_payment_purchase | OCA | Akretion | github/OCA/bank-payment | 0 | 88 | Module qui gère le mode de paiement sur les commandes fournisseur | |
| account_payment_sale | OCA | Akretion | github/OCA/bank-payment | 0 | 62 | Module qui gère le mode de paiement sur les commandes client | |
| account_payment_sale_stock | OCA | Akretion | github/OCA/bank-payment | 0 | 30 | Module technique pour la gestion du mode de paiement sur les commandes client | |
| connector | OCA | Camptocamp | github/OCA/connector | 5 591 | Framework de base pour la synchronisation avec un logiciel externe | ||
| connector_base_product | OCA | Multiples | github/OCA/connector | 32 | Ajoute les informations de synchronisation à la fiche article | ||
| connector_ecommerce | OCA | Camptocamp et Akretion | github/OCA/connector-ecommerce | 1 075 | Ajoute les fonctions de base du e-commerce au dessus du module connector | ||
| sale_automatic_workflow | OCA | Camptocamp et Akretion | github/OCA/e-commerce | 454 | Adapte le workflow de vente pour le e-commerce | ||
| sale_payment_method | OCA | Akretion | github/OCA/e-commerce | 361 | Adapte le workflow de paiement pour le e-commerce | ||
| sale_payment_method_automatic_workflow | OCA | Camptocamp et Akretion | github/OCA/e-commerce | 219 | Automatise le workflow de paiement pour le e-commerce | ||
| account_banking_fr_lcr | OCA | Akretion | github/OCA/l10n-france | 330 | Génère les fichiers CFONB des LCRs | ||
| l10n_fr_base_location_geonames_import | OCA | Akretion (développé pour le Barroux) | github/OCA/l10n-france | 88 | Adapte l'import automatique des villes et code postaux français depuis le site geonames | ||
| l10n_fr_department | OCA | GRAP et Akretion | github/OCA/l10n-france | 950 | Ajoute le support des départements français | ||
| l10n_fr_siret | OCA | Numérigraphe | github/OCA/l10n-france | 143 | Ajoute le SIREN et SIRET sur la fiche partenaire | ||
| l10n_fr_state | OCA | GRAP | github/OCA/l10n-france | 175 | Ajoute les données des régions françaises (non utilisé, mais le module l10n_fr_department dépend de ce module | ||
| base_location | OCA | Camptocamp | github/OCA/partner-contact | 260 | Permet la saisie rapide des codes postaux/villes/Etat/pays sur la fiche partenaire grâce à une base de données de ces informations | ||
| base_location_geonames_import | OCA | Akretion (développé pour le projet du Barroux) | github/OCA/partner-contact | 225 | Permet de remplir la base de données des codes postaux/villes/Etat/pays par téléchargement à partir du site geonames.org | ||
| partner_address_street3 | OCA | Camptocamp | github/OCA/partner-contact | 131 | Ajoute une 3e ligne d'adresse sur les partenaires | ||
| partner_firstname | OCA | Camptocamp | github/OCA/partner-contact | 303 | Sépare le prénom du nom de famille sur la fiche partenaire | ||
| partner_helper | OCA | Akretion | github/OCA/partner-contact | 51 | Module technique qui concerne le traitement des adresses | ||
| pos_customer_display | OCA | Akretion | github/OCA/pos | 352 | Ajoute le support de l'afficheur LCD pour la caisse | ||
| pos_payment_terminal | OCA | Akretion | github/OCA/pos | 124 | Ajoute le support du lecteur de carte et de l'imprimante de chèque pour la caisse | ||
| product_m2mcategories | OCA | Multiples | github/OCA/product-attribute | 44 | Ajoute le support des catégories multiples sur les articles (pour le e-commerce) | ||
| purchase_partner_invoice_method | OCA | Akretion | github/OCA/purchase-workflow | 79 | Permet la configuration de la méthode de facturation pour les commandes fournisseur sur la fiche fournisseur | ||
| report_xls | OCA | Noviat | github/OCA/reporting-engines | 297 | Module technique pour l'export XLS sur les rapports comptables | ||
| base_report_to_printer | OCA | Multiples | github/OCA/report-print-send | 708 | Module pour l'envoi automatique de documents à l'imprimante | ||
| sale_exceptions | OCA | Akretion | github/OCA/sale-workflow | 354 | Module pour la gestion des cas particuliers sur les commandes de vente (module requis pour le e-commerce) | ||
| sale_partner_order_policy | OCA | Akretion | github/OCA/sale-workflow | 79 | Permet la configuration de la méthode de facturation pour les commandes client sur la fiche client | ||
| base_optional_quick_create | OCA | Agile Business Group | github/OCA/server-tools | 68 | Permet de pouvoir retirer la fonction quick create sur les modèles que l'on veut | ||
| cron_run_manually | OCA | Therp | github/OCA/server-tools | 103 | Permet de lancer un tâche plannifiée à la main | ||
| disable_openerp_online | OCA | Therp | github/OCA/server-tools | 73 | Désactive tous les liens vers openerp.com | ||
| stock_packaging_usability | OCA | Akretion (développé pour le projet du Barroux) | github/OCA/stock-logistics-tracking | 78 | Facilite la gestion de l'attribution des colis sur les expéditions | ||
| stock_packaging_usability_ul | OCA | Akretion (développé pour le projet du Barroux) | github/OCA/stock-logistics-tracking | 112 | Facilite la gestion de l'emballage sur les expéditions | ||
| stock_picking_invoice_link | OCA | Agile Business Group | github/OCA/stock-logistics-workflow | 140 | Ajoute un lien entre les pickings et les factures | ||
| stock_transfer_split_multi | OCA | Akretion (développé dans le cadre du projet du Barroux) | github/OCA/stock-logistics-workflow | 98 | Permet de diviser des lignes par N unités lors de la validation d'une picking | ||
| base_phone | OCA | Akretion (développé dans le cadre du projet du Barroux) | github/OCA/connector-telephony | 923 | Module pour le formattage des numéros de téléphone | ||
| web_easy_switch_company | OCA | GRAP | github/OCA/web | 198 | Permet de facilement passer d'une société à l'autre | ||
| web_sheet_full_width | OCA | Therp | github/OCA/web | 48 | Elargit les écrans d'Odoo | ||
| account_bank_statement_import | OCA | Odoo S.A. | github/OCA/bank-statement-import | 371 | Module de base pour l'import de fichiers de relevé bancaire | ||
| account_bank_statement_import_ofx | OCA | Odoo S.A. | github/OCA/bank-statement-import | 119 | Module pour l'import de fichiers de relevé de banque au format OFX | ||
| account_statement_operation_multicompany | OCA | Akretion (développé pour le projet du Barroux) | github/OCA/bank-statement-reconcile | 61 | Module pour corriger ce bug du module account officiel, que l'éditeur ne voulait pas corriger dans la branche stable car c'était contre ses règles d'intervention dans la branche stable | ||
| base_delivery_carrier_label | OCA | Camptocamp et Akretion | github/OCA/carrier-delivery | 457 | Module de base pour la gestion des transporteurs | ||
| delivery_carrier_b2c | OCA | Akretion | github/OCA/carrier-delivery | 64 | Mini-module qui enrichit la fiche partenaire avec des informations pour livrer chez des particuliers (code porte, etc...) | ||
| delivery_carrier_deposit | OCA | Akretion | github/OCA/carrier-delivery | 368 | Module pour la gestion des enlèvements par les transporteurs | ||
| prestashoperpconnect | OCA | Akretion et d'autres intégrateurs | github/OCA/connector-prestashop | 0 | 5840 | Module principal du connecteur Odoo-PrestaShop. | |
| prestashoperpconnect_catalog_manager | OCA | Akretion et d'autres intégrateurs | github/OCA/connector-prestashop | 0 | 813 | Module qui permet de gérer le catalogue produit dans Odoo et de le synchroniser vers PrestaShop (sans ce module, le catalogue produit est géré dans PrestaShop et synchronisé vers Odoo). | |
| product_image | OCA | Akretion et d'autres intégrateurs | github/OCA/product-attribute | 0 | 175 | Ajoute la gestion des images sur les fiches produit. Requis par le connecteur Odoo-PrestaShop. | |
| intrastat_base | OCA (PR en cours) | Akretion | github/OCA/account-financial-reporting | 0 | 465 | Module de base pour la DEB/DES. | |
| intrastat_product | OCA (PR en cours) | Akretion | github/OCA/account-financial-reporting | 0 | 258 | Module qui ajoute le codes douaniers sur les fiches articles. | |
| l10n_fr_intrastat_product | OCA (PR en cours) | Akretion | github/OCA/l10n-france | 0 | 1 863 | Module pour la DEB (Déclaration d'Echange de Biens) qui inclus la génération du fichier XML à déposer sur le site pro.douane. | |
| Modules Communautaires (hors OCA) | |||||||
| l10n_be_account_bank_statement_import_bpost | communautaire | Akretion | github.com/akretion/l10n-belgium | 0 | 79 | Importe les fichiers de relevé de compte de la Banque Postale belge (BPost) au format CSV. | |
| report_aeroo | communautaire | Alistek | github.com/aeroo/aeroo_reports | 0 | 5 323 | Fourni le moteur de rapport Aeroo, décrit en détail dans la section de ce document dédiée aux Moteurs de rapport. | |
| account_statement_completion_label_simple | communautaire | Akretion (développé pour le projet du Barroux) | github.com/akretion/bank-statement-reconcile-simple | 0 | 147 | Permet d'associer des extraits de labels de relevé de compte à des partenaires et permettre ainsi une reconnaissance automatique des partenaires récurrents lors de l'import des relevés de compte. Ce module est une alternative simple aux modules OCA du projet bank-statement-reconcile qui n'ont pas été portés en v8. | |
| base_partner_one2many_phone | communautaire | Akretion | Pas encore publié | 0 | 164 | Module pour avoir autant de numéros de téléphone que l'on veut sur une fiche partenaire (chaque numéro de téléphone étant ayant un type : Maison, Bureau, Mobile, etc...). Ce module n'a pas encore été publié (TODO : le publier) | |
| delivery_carrier_file_document | communautaire | Akretion | github.com/akretion/carrier-delivery-ak | 0 | 35 | Module technique qui fait le lien entre le module base_delivery_carrier_label et le module file_document. | |
| delivery_carrier_colipostefr | communautaire | Akretion | github.com/akretion/carrier-delivery-colipostefr | 0 | 1159 | Module de base pour la gestion des colis normaux avec La Poste, qui comprend la gestion des télé-transmissions. | |
| delivery_carrier_label_colissimo | communautaire | Akretion | github.com/akretion/carrier-delivery-colipostefr | 0 | 373 | Module pour la gestion des étiquettes d'expédition des colis avec La Poste. | |
| cn23_aeroo | communautaire | Akretion (développé pour le projet du Barroux) | github.com/akretion/cn23-aeroo | 0 | 127 | Contient un rapport CN23 (facture de douane des envois postaux) au format Aeroo. | |
| connector_dev | communautaire | Akretion ??? | github.com/akretion/connector-dev???? | 0 | 78 | Outils pour les développeurs qui travaillent sur le module connector. | |
| connector_dev_delete_job | communautaire | Akretion ??? | github.com/akretion/connector-dev???? | 0 | 45 | Permet de supprimer un job dans la queue de connector. | |
| purchase_dilicom_csv | communautaire | Akretion | github.com/akretion/dilicom | 0 | 39 | Mini-module qui édite un fichier CSV permettant de passer une commande sur l'extranet de Dilicom, qui est une plateforme qui fait le lien entre les librairies et les distributeurs de livres. | |
| abstract_automatic_task | communautaire | Akretion | github.com/akretion/file-exchange | 0 | 180 | Module technique utilisé pour la télétransmission des fichiers pour les colis expédiés par La Poste. | |
| file_autotask_rel | communautaire | Akretion | github.com/akretion/file-exchange | 0 | 65 | Module technique utilisé pour la télétransmission des fichiers pour les colis expédiés par La Poste. | |
| file_document | communautaire | Akretion | github.com/akretion/file-exchange | 0 | 292 | Module technique utilisé pour la télétransmission des fichiers pour les colis expédiés par La Poste. | |
| file_repository | communautaire | Akretion | github.com/akretion/file-exchange | 0 | 529 | Module technique utilisé pour la télétransmission des fichiers pour les colis expédiés par La Poste. | |
| bank_statement_import_camt | communautaire | Akretion | github.com/akretion/bank-statement-import-camt | 0 | 119 | Module pour l'import des relevés de compte au format CAMT .052 et .053. Ce module est une alternative au module OCA d'import des relevés de compte CAMT qui a l'époque ne gérait pas le format .052 et était trop lourd et trop gros. | |
| partner_relation | communautaire | Akretion | github.com/akretion/partner-contact | 0 | 393 | Module permettant d'établir des liens entre les partenaires. J'ai proposé ce module à l'OCA courant 2014, mais un autre intégrateur (Therp) a fait de même pour un module similaire appelé partner_relations et c'est ce dernier module qui a été accepté dans l'OCA, car son auteur a été plus rapide que moi à le re-proposer sur github suite à la migration de Launchpad vers Github. Il faudrait donc que je mette ce module sur un projet séparé, ce que je n'ai pas encore fait (ce serait trop compliqué à court terme de migrer sur le module OCA). | |
| sale_tax_included_excluded | communautaire | Akretion | github.com/akretion/sale-workflow | 0 | 338 | Module permettant de faire des ventes avec des prix HT (pour le marché B2B) et des ventes avec des prix TTC (pour le marché B2C). Je suis très fier de ce module car il traite cette problématique de façon relativement simple, alors que c'est un très vieux problème sur Odoo sur lequel plusieurs personnes avaient déjà planché et avaient élaboré d'autres solutions beaucoup plus compliquées. L'inconvénient de ce module est qu'il nécessite un patch sur les addons officiels car certains morceaux de code dans le module sale et le module product_visible_discount ne passent pas le context correctement ; j'ai fait une pull request pour corriger cela (ce qui éviterai d'avoir recours à un patch), mais elle n'a pas été acceptée pour le moment | |
| account_fiscal_position_translate | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 20 | Petit module qui permet d'afficher une phrase traduite sur la facture en fonction de la position fiscale. | |
| account_invoice_picking_label | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 41 | Petit module qui permet d'afficher les noms des pickings sur la facture | |
| account_invoice_sale_link | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 41 | Petit module qui ajoute le lien des factures vers les commandes, notamment pour pouvoir afficher le numéro de commande du client sur la facture | |
| account_payment_hide_communication2 | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 29 | Petit module qui masque un champ inutile sur les virements/prélèvements, pour éviter une confusion | |
| account_usability | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 134 | Petit module qui améliore la facilité d'utilisation de la comptabilité | |
| base_fix_display_address | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 26 | Petit module qui corrige un problème dans l'affichage des adresses dans les rapports | |
| base_other_report_engines | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 21 | Petit module qui corrige un problème qui empêche d'utiliser un moteur de rapport alternative dans un certain cas | |
| base_partner_always_multi_contacts | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 32 | Petit module qui permet d'avoir plusieurs contacts sur une fiche partenaire même si cette fiche n'est pas une société | |
| base_usability | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 63 | Petit module qui améliore la facilité d'utilisation du module de base | |
| delivery_no_invoice_shipping | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 21 | Petit module qui évite une double facturation des frais de port | |
| eradicate_quick_create | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 25 | Petit module qui supprime le quick create partout dans Odoo | |
| mrp_usability | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 18 | Petit module qui améliore la facilité d'utilisation de la gestion de production | |
| partner_products_shortcut | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 80 | Petit module qui permet d'accéder rapidement aux produits vendus par un fournisseur depuis sa fiche | |
| pos_journal_sequence | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 46 | Petit module qui permet de contrôler l'ordre des méthodes de paiement dans le point de vente. Cette fonctionnalité a été intégrée en standard dans Odoo v9 suite à mon initiative. | |
| pos_sale_report | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 109 | Petit module qui permet d'avoir un rapport avec la somme des produits vendus par le point de vente et par les devis/commandes. | |
| procurement_usability | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 66 | Petit module qui améliore la facilité d'utilisation des procurements | |
| product_manager_group | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 25 | Petit module qui restaure le groupe Product Manager, qui existait à une époque dans Odoo et qui a malheureusement été supprimé | |
| product_manager_group_stock | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 15 | Petit module technique | |
| product_no_translation | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 37 | Petit module qui rend les articles (et d'autres objets associés) non traduisibles, ce qui simplifie les choses pour les entreprises qui ne sont pas en multi-langue | |
| product_variant_csv_import | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 31 | Petit module qui débloque l'import de modèles d'articles par fichiers CSV | |
| purchase_auto_invoice_method | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 49 | Petit module qui permet de facturer systématiquement depuis les réceptions, sauf quand la commande ne contient que du service, de façon automatisée | |
| purchase_suggest | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 464 | Module qui change le comportement d'Odoo pour les ré-approvisionnements : au lieu de créer des bons de commande brouillon (ce qui est très intrusif et pas toujours adapté), les règles de stock minimum vont créer des alertes, que l'acheteur pourra facilement transformer en bon de commande. | |
| purchase_usability_extension | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 86 | Petit module qui améliore la facilité d'utilisation des achats | |
| sale_stock_show_delivery_address | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 44 | Petit module qui permet d'afficher l'adresse complète sur les bons de livraison, au lieu d'afficher seulement le nom du destinataire. | |
| sale_usability_extension | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 81 | Petit module qui améliore la facilité d'utilisation des ventes | |
| stock_display_destination_move | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 49 | Petit module qui affiche le champ move_dest_id qui est important dans la gestion des stocks d'Odoo et qui est masqué par défaut. | |
| stock_display_sale_id | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 29 | Petit module qui affiche le champ sale_id sur les bons de livraison, ce qui permet de revenir facielement à la commande depuis le bon de livraison. | |
| stock_usability | communautaire | Akretion | github.com/akretion/odoo-usability | 0 | 171 | Petit module qui améliore la facilité d'utilisation de la gestion des stocks. | |
| Modules spécifiques | |||||||
| barroux_account | spécifique | Barroux et Akretion | Branche interne | 0 | 537 | Module contenant les développements spécifiques sur la comptabilité et la partie bancaire. | |
| barroux_base | spécifique | Barroux et Akretion | Branche interne | 0 | 949 | Module contenant les développements spécifiques sur le module de base. | |
| barroux_donation | spécifique | Barroux et Akretion | Branche interne | 0 | 243 | Module contenant les développements spécifiques pour la gestion des dons. | |
| barroux_mrp | spécifique | Barroux et Akretion | Branche interne | 0 | 35 | Module contenant les développements spécifiques pour la gestion de production. | |
| barroux_pos | spécifique | Barroux et Akretion | Branche interne | 0 | 183 | Module contenant les développements spécifiques pour le point de vente. | |
| barroux_product | spécifique | Barroux et Akretion | Branche interne | 0 | 592 | Module contenant les développements spécifiques pour enrichir les articles. | |
| barroux_profile | spécifique | Barroux et Akretion | Branche interne | 0 | 39 | Module qui chapeaute tous les autres modules. | |
| barroux_purchase | spécifique | Barroux et Akretion | Branche interne | 0 | 253 | Module contenant les développements spécifiques pour la gestion des achats. | |
| barroux_sale | spécifique | Barroux et Akretion | Branche interne | 0 | 404 | Module contenant les développements spécifiques pour la gestion des ventes. | |
| barroux_stay | spécifique | Barroux et Akretion | Branche interne | 0 | 98 | Module contenant les développements spécifiques pour la gestion des séjours. | |
| barroux_stock | spécifique | Barroux et Akretion | Branche interne | 0 | 1 126 | Module contenant les développements spécifiques pour la gestion des stocks. |
Pour compter les lignes de code des modules, j'ai utilisé le module base_module_code_stats que j'ai développé pour l'occasion et qui est publié sur la branche github/akretion/odoo-module-stats. Pour compter les lignes de code, ce module utilise le programme cloc avec la ligne de commande suivante : cloc --exclude-dir=lib --skip-uniqueness --exclude-ext=xsd --not-match-f="__openerp__.py|index.html". Pour compter les patchs appliqués sur les modules, j'ai simplement compté les blocs de diff ; pour une modification (ou un correctif), il peut donc y avoir blocs de diff. Pour être précis, le titre de la colonne devrait être Nombre de blocs de diff, mais ce n'est pas un terme très compréhensible.
Voici la répartition du nombre de lignes de code entre les différents modules fonctionnels (je ne compte pas les modules qui font l'interface Web, qui sont les modules qui commencent par le préfixe web_) selon le type de module : officiel, OCA, communautaire ou spécifique :
| Type de module | Nombre de lignes de code | Pourcentage du total |
|---|---|---|
| Officiels (hors modules web) | 156 782 | 71 % |
| OCA (hors modules web) | 47 494 | 22 % |
| Communautaires | 11 836 | 5 % |
| Spécifiques | 4 459 | 2 % |
| Total | 220 571 | 100 % |
Quels enseignements tirer de cette liste ?
- Je vous avais dit qu'Odoo était un ERP très modulaire et l'Odoo déployé à l'abbaye de Barroux en est un bon exemple : 200 modules provenant de 42 branches de code différentes sont utilisés ! Cela permet de comprendre l'une des difficultés d'un projet Odoo : le choix et la sélection d'un très grand nombre de modules d'origines très variées, avec les problèmes de compatibilité et de cohérence que cela peut engendrer.
- Le nombre de lignes de code en valeur absolue dans les modules OCA et les autres modules communautaires étant importante, cela donne une idée de l'effort à fournir par la communauté pour porter les modules que l'on utilise vers une version supérieure d'Odoo.
- Le nombre de lignes de code dans les modules spécifiques est un point important : cela donne une idée du travail de maintenance et de portage vers une version supérieure d'Odoo que l'on devra fournir seul, sans aide de la communauté, puisque le code n'est pas mutualisé.
- On constate que l'on retrouve toujours les mêmes sociétés en tant qu'auteur et mainteneur de modules communautaires (OCA et non OCA) ; en l'occurrence, dans les modules OCA et les autres modules communautaires utilisés à l'abbaye du Barroux, la grande majorité sont développés par Camptocamp, Alistek, Acsone, Therp, Noviat et Akretion. Certes, ces sociétés ne sont pas les seules à maintenir des modules, loin de là, mais je pense que c'est quand même une illustration du fait qu'il existe un noyau dur de contributeurs qui est constitué d'un petit nombre de sociétés, qui n'a rien à voir avec le très grand nombre d'intégrateurs officiels d'Odoo. Une grande partie du travail de développement sur les modules communautaires est donc porté par un petit nombre de sociétés très actives, qui ne sont pas aussi nombreuses qu'on pourrait le penser.
Je profite de cette section où le nombre de lignes de code des modules fonctionnels a été analysé pour faire l'analyse globale du nombre de lignes de code d'Odoo :
| Composant | Nombre de lignes de code | Pourcentage du total | Méthode de comptage |
|---|---|---|---|
| Server | 27 872 | 9 % | Module base exclus car compté dans les modules fonctionnels |
| Interface Web | 43 285 | 15 % | Tous les modules préfixés par web (officiels et OCA) |
| Modules fonctionnels | 220 571 | 76 % | Tous les autres modules du tableau ci-dessus |
| Total | 291 728 | 100 % |
La maturité d'Odoo
Odoo est-il un ERP mature ? C'est un peu la question qui tue... mais je vais essayer d'y répondre de façon objective, en me basant sur les bugs que j'ai personnellement constaté sur Odoo 7.0 depuis sa release en Décembre 2012. A mon sens, la meilleure façon de se rendre compte de la maturité d'un projet est d'analyser les bugs qu'on rencontre : si le projet est mature, les bugs rencontrés seront rares et se produiront dans des scénarios particuliers et a priori peu répandus ; à l'inverse, si l'on rencontre des bugs dans des scénarios basiques et standards, alors on ne peut pas affirmer que le logiciel est mature.
| Domaine fonctionnel concerné | Conditions particulières pour être concerné par le bug | Résumé du scénario du bug | Lien vers le bug report | Date du bug report | Date de disponibilité du fix | Auteur du fix | Date d'intégration du fix dans la branche stable |
|---|---|---|---|---|---|---|---|
| Procurements | Avoir produits fabriqués en interne avec des règles de ré-approvisionnement | Les dates panifiées des ordres de fabrication sont fausses. | Bug 1269528 | 15 Janvier 2014 | pas encore disponible | - | - |
| Comptabilité | Avoir une condition de paiement avec plusieurs échéances | Après enregistrement d'un premier paiement partiel, le montant restant à payer calculé par Odoo est faux. | Bug 1263106 | 20 Décembre 2013 | pas encore disponible | - | - |
| Achats | Avoir renseigné un code produit et/ou un nom de produit et/ou un prix spécifique au fournisseur du produit | Odoo ne tient pas compte du code produit et/ou du nom de produit et/ou du prix spécifique au fournisseur si le bon de commande est relié à un contact chez le fournisseur qui n'est pas le même que le contact fournisseur renseigné sur la fiche produit. Ce bug est une des conséquences non encore corrigées du fiasco lié au changement du modèle de donnée des partenaires dans Odoo 7.0. | Bug 1246116 | 29 Octobre 2013 | 29 Octobre 2013 (workaround) | Moi-même | - |
| Achats | Avoir une unité de mesure à l'achat différent de l'unité de mesure par défaut du produit (par exemple : l'unité de mesure à l'achat est le kilo alors que l'unité de mesure par défaut est le gramme). | Si le prix est issu d'un prix spécifique au fournisseur du produit, Odoo se trompe dans le calcul du prix sur la ligne du bon de commande fournisseur. | Bug 1220241 | 3 Septembre 2013 | 3 Septembre 2013 | Moi-même | en attente |
| Stocks | Avoir une unité de mesure à l'achat différent de l'unité de mesure par défaut du produit (par exemple : l'unité de mesure à l'achat est le kilo alors que l'unité de mesure par défaut est le gramme) et faire de la tracabilité par lots. | Odoo se trompe dans le calcul de la quantité de produit disponible pour un lot donné à cause des unités de mesures différentes. Ce bug et le précédent montrent qu'Odoo 7.0 ne sait pas gérer correctement un produit avec plusieurs unités de mesure. | Bug 1229271 | 23 Septembre 2013 | - | - | - |
Pour compléter cette liste, j'ai obtenu l'autorisation de certains de mes clients de mettre en partage leur document de suivi des bugs Odoo qui les impactent :
- L'abbaye du Barroux qui a été un pionnier d'Odoo 8.0 sur un très large périmètre fonctionnel, cf le Google Doc en anglais Odoo 8.0 bugs followup. Comme vous le verrez, la liste des bugs est très longue, mais la plupart ont été patchés par mes soins.
- un autre de mes clients qui est également un pionnier d'Odoo 8.0 mais avec un périmètre fonctionnel plus réduit, cf le Google Doc en anglais Odoo 8.0 bugs followup. La liste est plus petite, et tous les bugs ont été patchés par moi-même ou par l'éditeur, ou sinon on a pu trouver un workaround.
- L'abbaye de Randol qui déployé Odoo plus tardivement (passage en prod le 1er Mai 2015) sur un périmètre fonctionnel réduit, cf le Google Doc en anglais Odoo 8.0 bugs followup. Comme vous pouvez le constater, le nombre de bugs est très réduit, ce qui s'explique à la fois par le périmètre fonctionnel réduit sur ce projet mais surtout par le fait que les autres utilisateurs d'Odoo 8.0 qui étaient passés en prod plus tôt avaient déjà levé les plus gros bugs et les correctifs avaient été intégrés.
- un de mes clients qui utilise Odoo 7.0, cf le Google Doc en anglais Odoo 7.0 bugs followup (les bugs du tableau ci-dessous sont extraits de cette liste) ;
Au vu des bugs que je rencontre, mon avis est qu'Odoo ne peut pas être considéré aujourd'hui comme un logiciel mature. Je le considère plutôt comme un logiciel en cours de maturation.
Les exemples de bugs que j'ai détaillés ci-dessus peuvent sembler effrayants pour une personne novice sur Odoo. Elle est effectivement effrayante, il ne faut pas se cacher la réalité. Mais il faut aussi souligner que, pour la plupart d'entre-eux, ils sont faciles à patcher pour un développeur Python de niveau moyen avec une bonne expérience du framework d'Odoo. Personnellement, je ne suis pas un développeur Python très expérimenté, loin de là, et je me suis mis à coder dans le framework d'Odoo seulement depuis fin 2010, et j'ai pu patcher une partie des bugs exposés ci-dessus moi-même. Cela demande de la patience et ça prend du temps, mais c'est tout à fait abordable.
En fait, ce manque de maturité d'Odoo a pour moi plusieurs conséquences concrètes :
- Il faut prévoir du temps pour travailler sur les bugs lors de la phase d'intégration d'Odoo et après sa mise en production. Le temps à y consacrer n'est pas négligeable ; il faut donc le prévoir dans le timing du projet et dans le budget.
- Il faut bien connaître et utiliser la méthodologie à adopter quand on rencontre un bug sur un logiciel libre :
- Vérifier que le bug se produit également quand on utilise le code le plus à jour dans la branche en question et avec uniquement les modules officiels (si le bug concerne un module communautaire, il faut essayer de le reproduire en utilisant uniquement des modules officiels et le module communautaire en question ainsi que ses dépendances). Cela permet de s'assurer que le bug n'est pas causé par un des modules spécifiques i.e. que le bug n'est pas dans notre propre code !
- Regarder si le bug n'est pas déjà référencé dans le bug tracker d'Odoo i.e. sur Github. Si c'est le cas, il faut lire le bug report et tous les commentaires, car on y trouvera peut-être un patch ou un workaround.
- Si le bug n'a pas encore été remonté, ne pas avoir peur de se plonger dans le code pour corriger soi-même le bug, en utilisant efficacement le débugger de Python,
- Une fois la solution trouvée, il faut ouvrir un bug report sur Github : faire une description détaillée dans le meilleur anglais possible, en décrivant un scénario précis permettant de reproduire le bug. Ensuite, faites une pull request avec votre patch en citant le numéro du bug précédé d'un #.
- Faire du lobbying pour que le bug report soit considéré par l'éditeur ou l'auteur du module et que le correctif (votre patch ou un autre... car l'auteur du module ou d'autres membres de la communauté peuvent avoir une meilleure idée que vous sur la façon de corriger le bug) soit intégré dans la branche officielle.
Concrètement, quand je corrige un bug moi-même sur Odoo, les étapes 1 à 4 me prennent en moyenne 2 heures.
- Avoir recours aux services d'un ou plusieurs intégrateurs Odoo compétents et expérimentés (ils sont assez rares, cf la section dédiée au choix de l'intégrateur) et connaître les bonnes personnes à contacter dans la communauté en fonction du sujet. Quand il s'agit d'un module communautaire, il ne faut pas hésiter à prendre contact directement avec l'auteur du module ou sa société.
- Avoir le courage d'assumer le choix audacieux d'Odoo malgré tous ses bugs... ce qui n'est pas facile tous les jours !
Dans les release notes d'Odoo 7.0, l'éditeur a promis que les bugfix sur Odoo 7.0 seront mergés dans la branche stable d'Odoo dans un délai court. Extrait des release notes, section 7.2 Maintenance : "We realize that up to now Odoo was sending within a few days a patch to the customer or partner, but was taking time to merge it into the latest stable version of Odoo. We have reinforced the support team to ensure that the patches will be merged promptly. This reactivity process is more demanding on us, but will allow us to provide superior customer satisfaction."
Les intégrateurs de la communauté sont les premiers impactés par ce problème :
- ce sont eux qui essuient les critiques des clients mécontents face à tous ces bugs,
- s'ils veulent être pro-actifs face à ces bugs, ils doivent trouver des solutions pour appliquer les correctifs chez tous leurs clients sans attendre que les correctifs arrivent dans les branches stables officielles.
A l'époque d'Odoo 6.1, plusieurs intégrateurs, notamment Therp, Camptocamp et Akretion, avaient mis en place leurs propres branches stables avec des correctifs en plus par rapport à la branche officielle et utilisaient ces branches chez leurs clients en lieu et place des branches officielles. Pour Odoo 7.0, ces intégrateurs ont décidé d'unir leurs efforts et de développer une branche stable commune, dénommées Odoo Community Branches, alias OCB. Cette branche est devenue un projet de l'OCA ; elle est disponible sur le projet Github OCB.
Cette initiative a été annoncée par Stefan Rijnhart de Therp le 8 Février 2013 dans ce post sur la mailing-list openerp-community. Le mail d'annonce détaille les règles de fonctionnement de ces branches, qui peuvent se résumer ainsi :
- pour qu'un correctif soit commité dans une branche OCB, il faut que le bug report correspondant soit créé sur Launchpad et que le correctif soit présent dans une merge proposal sur la branche officielle,
- les bugfix commités dans les branches stables officielles (et tous les autres commits) sont automatiquement commités dans les branches OCB,
- aucune nouvelle fonctionnalité n'est acceptée dans les branches OCB.
Cette initiative a tout de suite reçu un très bon accueil de la communauté. De nombreux intégrateurs utilisent désormais les branches OCB en production chez leurs clients en lieu et place des branches stables officielles. Même si cela peut sembler un peu triste d'en être arrivé là, cette initiative montre que la communauté Odoo sait désormais s'organiser par elle-même et trouver des solutions concrètes à un certain nombre de problèmes, sans tout attendre de l'éditeur.
Il est intéressant de constater que l'éditeur est aujourd'hui beaucoup plus réactif qu'à l'époque d'Odoo 6.1 pour appliquer les correctifs dans les branches stables. Il faut dire que la mise en place des branches OCB a renforcé la pression sur l'éditeur pour qu'il applique les correctifs sur les branches stables officielles : en effet, si l'éditeur veut que ses branches stables continuent d'être les branches de référence pour la communauté Odoo, il se doit d'être réactif sur l'application des correctifs, sinon toute la communauté se mettra à utiliser les branches OCB à la place de ses branches stables. D'ailleurs, l'adoption des branches OCB par la communauté Odoo est tellement importante que cela a attiré l'attention de l'éditeur : par exemple, Fabien Pinckaers n'a pas hésité à critiquer les branches OCB dans ce mail sur la mailing-liste openerp-community en utilisant de faux arguments, ce qui a été immédiatement dénnoncé comme du FUD dans cette réponse de Stefan Rijnhart (si le terme FUD ne vous est pas familier, lisez l'article sur Wikipedia).
La comptabilité avec Odoo
Est-il envisageable de tenir la comptabilité de son entreprise dans Odoo ? Avec quel résultat ? Telle est la question à laquelle je vais essayer d'apporter certains éléments de réponse.
Les 2 scénarios
Si vous demandez à une entreprise "Est-ce que vous utilisez la comptabilité d'Odoo ?" et qu'elle vous répond Oui... vous n'avez qu'une partie de la réponse. En effet, il faut bien distinguer deux types d'utilisation de la comptabilité :
- Scénario 1 : Odoo est utilisé comme un générateur d'écritures comptables, qui sont ensuite transférées dans un logiciel tiers. Dans Odoo, quand on valide une facture client (ou une facture fournisseur), l'écriture comptable dans le journal de vente (ou d'achat) est automatiquement générée. Ainsi, si toutes les factures client et les factures fournisseur sont dans Odoo, alors le journal de vente et le journal d'achat sont intégralement générés. Si tous les règlements client et tous les règlements fournisseur sont rentrés dans l'ERP (ce qui est nécessaire si on veut que les factures payées soient marquées comme tel dans l'ERP), alors le journal de banque est presque intégralement généré. Les entreprises qui sont dans le scénario 1 tiennent en réalité leur comptabilité dans un logiciel tiers, qui est souvent chez leur Expert comptable, mais elles vont profiter du fait qu'Odoo génère le journal de vente, le journal d'achat et éventuellement le journal de banque pour ne pas re-saisir ces journaux manuellement dans le logiciel de comptabilité, et vont réaliser un transfert des écritures comptables d'Odoo vers le logiciel de comptabilité. Le référentiel comptable de la société (i.e. l'endroit où se trouvent l'intégralité des écritures comptables de la société) n'est donc pas situé dans Odoo mais dans le logiciel de comptabilité. Ce scénario est très courant, pour la simple et bonne raison que la plupart des PMEs ont une comptabilité tenue par leur Expert comptable.
- Scénario 2 : Odoo est le référentiel comptable de la société i.e. toutes les écritures comptables de la société sont dans Odoo. Si la paye ou les immobilisations sont tenues dans un logiciel tiers, alors les écritures comptables générées par ces logiciels vont être importées dans Odoo. La clôture comptable annuelle sera faite dans Odoo, et la liasse fiscale sera générée à partir des données présentes dans Odoo.
Ces deux scénarios sont en réalité très différents :
- le scénario 1 est le plus courant. Mais ce n'est pas ce que j'appelle tenir sa comptabilité dans Odoo. Dans ce scénario, quasiment aucune des fonctionnalités comptables d'Odoo ne sont utilisées. Ce scénario est donc le scénario le plus facile du point de vue d'Odoo. En réalité, ce scénario correspond à une utilisation d'Odoo pour la facturation, mais pas réellement pour la comptabilité. Les principaux inconvénients de ce scénario sont :
- duplication d'informations : la liste des clients et des fournisseurs est dupliquée entre les 2 logiciels, ainsi que les comptes de comptabilité ajoutés au plan comptable général,
- il faut mettre au point une sorte de connecteur entre les 2 logiciels pour réaliser le transfert des écritures comptables ; ce n'est généralement pas compliqué à faire car les logiciels comptables sont habitués à échanger des écritures comptables via de simples fichiers CSV, mais cela reste une fonctionnalité à mettre au point et dont il faudra vérifier le bon fonctionnement à chaque mise à jour d'Odoo ou du logiciel comptable,
- il faut s'assurer régulièrement qu'il n'y ait pas de divergence entre les données de l'ERP et le logiciel comptable ; concrètement, il faut régulièrement réconcilier l'état des comptes client et fournisseur dans Odoo et dans le logiciel comptable.
- le scénario 2 est beaucoup moins répandu. C'est le plus ambitieux du point de vue d'Odoo. C'est uniquement dans ce scénario que vous pourrez réellement dire que vous utilisez la comptabilité d'Odoo. Et c'est aussi uniquement dans ce scénario que vous serez confrontés aux éventuels bugs et problèmes de la comptabilité d'Odoo. La majorité de mes clients sont dans le scénario 2.
Les conséquences de cette confusion des scénarios sont les suivantes :
- on a tendance à sur-estimer le nombre de sociétés qui tiennent vraiment leur comptabilité dans Odoo, car on compte à la fois les sociétés dans le scénario 1 et les sociétés dans le scénario 2, alors qu'on ne devrait compter que les sociétés dans le scénario 2.
- si vous faites le choix du scénario 2 pour votre société, assurez-vous que votre intégrateur ait déjà des références de sociétés dans le scénario 2... sinon votre intégrateur n'aura pas de réelle expérience de la comptabilité d'Odoo. Or, comme il y a beaucoup d'expérience à acquérir pour bien tenir sa comptabilité dans Odoo, si votre intégrateur n'a aucune expérience du scénario 2, je vous conseille de prendre un deuxième intégrateur qui ait l'expérience du scénario 2 pour s'occuper de l'aspect comptabilité de votre déploiement Odoo. La plupart des intégrateurs français ont uniquement l'expérience du scénario 1. Les intégrateurs français ayant réellement l'expérience du scénario 2 se comptent sur les doigts d'une main (et encore, je ne suis pas capable d'en citer 5 !).
Comment utiliser la comptabilité d'Odoo ?
Dans cette section et les sections suivantes, je n'aborderai que le scénario n°2, où Odoo constitue le référentiel comptable de la société.
La façon dont la majorité de mes clients utilise le scénario 2 est schématisée ci-dessous :

Si la comptabilité est effectivement tenue intégralement dans Odoo, cela ne veut pas dire qu'Odoo fait tout ! La paye est toujours gérée dans un logiciel dédié, et l'écriture comptable mensuelle de paye est exportée du logiciel de paye sous forme d'un fichier CSV puis importée dans Odoo, en utilisant le module account_move_csv_import que j'ai développé. Depuis Odoo 6.0, il existe un module pour faire la paye dans Odoo, dénommé hr_payroll, mais nous n'en sommes qu'au tout début de la paye dans Odoo et je ne connais encore aucune entreprise qui l'utilise en production.
Souvent, les immobilisations sont également gérées dans un logiciel dédié (souvent un logiciel Windows propriétaire), et l'écriture comptable qu'il génère au format CSV est ensuite importée dans Odoo. Mais, depuis Odoo 6.1, le module de gestion des immobilisations account_asset est devenu un module officiel. Et, à partir d'Odoo 7.0, il existe un module OCA qui dérive du module officiel de l'éditeur (c'est une sorte de fork du module de l'éditeur) qui est disponible dans la branche account-financial-tools sous le nom account_asset_management. Ce module est complété par le module account_asset_management_xls développé par Noviat et disponible dans la même branche, qui ajoute un rapport Excel sur les immobilisations pour un exercice donné. Le module communautaire est plus riche fonctionnellement que le module officiel, ce qui se ressent sur le nombre de lignes de code : 3261 pour le module OCA vs 1225 pour le module officiel. J'ai commencé à utiliser le module OCA de gestion des immobilisations pour ma comptabilité personnelle pour mon exercice 2014-2015, et j'ai été très satisfait du module : le module marche bien, il est assez simple à paramétrer et à utiliser et couvre tous les scénarios dont j'ai besoin. Petit détail très pratique : quand on saisit une facture fournisseur, dès qu'on indique un compte d'immobilisation sur une ligne de facture (et que ce compte d'immobilisation est configuré sur une catégorie d'immobilisation), le système propose automatiquement la bonne catégorie d'immobilisation et l'immobilisation sera créée automatiquement en mode brouillon lors de la validation de la facture fournisseur, et la quasi-totalité des paramètres sont déjà configurés : le nom de l'immobilisation, sa date de début, sa durée, les comptes comptables de dépréciation, etc... Il n'y a plus qu'à vérifier la configuration de l'immobilisation, la modifier si nécessaire et confirmer l'immobilisation. On peut ensuite générer l'écriture d'amortissement de l'exercice en un clic. Je pense que ce module conviendra à la grande majorité des PMEs qui n'ont pas des besoins extra-ordinaires au niveau de la gestion des immobilisations. Un des gros client d'Akretion qui tient sa comptabilité dans Odoo utilise d'ailleurs le module OCA de gestion des immmobilisations en production.
En ce qui concerne la liasse fiscale, on entend parfois dire "On ne peut pas utiliser la comptabilité d'Odoo en France car Odoo ne sait pas générer les liasses fiscales". Cela est évidemment faux, et les personnes qui affirment cela ne connaissent généralement pas bien les méthodes de travail et les outils habituels des comptables. En réalité, la liasse fiscale est très souvent gérée dans un logiciel dédié, qu'il faut mettre à jour (comprendre "repayer") chaque année car la liasse fiscale change chaque année. Les éditeurs de logiciels de liasse fiscale sont tous également éditeurs de logiciels de comptabilité, et font en sorte de donner l'illusion que les deux logiciels sont intégrés... alors que ce sont en réalité deux logiciels séparés qui communiquent par un fichier texte ou assimilé. Les logiciels de liasse fiscale sont a priori toujours utilisables indépendamment du logiciel de comptabilité du même éditeur. Pour commencer à l'utiliser, il faut importer dans le logiciel de liasse fiscale la balance comptable en date du dernier jour de l'exercice fiscal.
Les logiciels de liasse fiscale les plus connus sont des logiciels propriétaires pour Windows ; on peut citer par exemple :
- chez Ciel :
- Ciel Liasse fiscale, mono-société (dit mono-dossier dans le langage comptable),
- Ciel Etats comptables et fiscaux, multi-société (i.e. multi-dossier),
- chez EBP :
- EBP Liasse fiscale, mono-société,
- EBP Etats financiers, multi-société.
Les prix commencent à 300/400 euros HT pour les versions mono-société, et jusqu'à 600/900 euros HT pour les versions multi-société jusqu'à 10 sociétés. Mais attention, le logiciel de liasse fiscale ne suffit pas ; toutes les entreprises soumises à l'IS ont également l'obligation de télé-déclarer leur liasse fiscale depuis le 1er Mai 2013, et pour cela ils doivent passer par un prestataire agréé pour la télé-déclaration de la liasse fiscale. Les éditeurs de logiciels de liasse fiscale proposent aussi leurs services de télé-déclaration de la liasse... mais c'est généralement une option ! Et oui, il n'y a pas de petits profits ! Par exemple, chez Ciel, cette option s'appelle Ciel directDéclaration Fiscal et coûte 49 € HT / an / SIRET.
Comme le logiciel de liasse fiscale est un logiciel qu'il faut mettre à jour chaque année car la liasse fiscale change chaque année, il est pertinent de s'intéresser aux logiciels de liasse fiscale en mode SaaS. L'administration fiscale répertorie une liste de solutions de liasse fiscale en mode SaaS avec interface Web ; cf ce document. Pour les besoins d'Akretion France, nous avons choisi Teledec.fr pour établir et télétransmettre notre liasse fiscale ; c'est une solution que nous recommandons car les tarifs sont compétitifs par rapport à la concurrence, l'interface est simple et ergonomique et nous n'avons pas eu de bugs lors de l'utilisation. Pour réaliser le transfert de la balance d'Odoo vers Teledec.fr, nous avons utilisé l'astuce suivante : j'ai développé un petit module Odoo dénommé account_balance_ebp_csv_export (disponible dans la localisation française d'Odoo pour Odoo 7.0, et bientôt pour la version 8.0 également) qui permet d'exporter d'Odoo la liasse fiscale au format EBP Compta ; et comme Teledec.fr sait importer la liasse fiscale au format EBP Compta, la balance peut s'importer en quelques clics sans aucune re-saisie. Le seul manque au niveau de la solution Teledec.fr est qu'il n'est pas possible pour le moment d'éditer une plaquette des comptes ; j'ai questionné Teledec.fr à ce sujet fin Mai 2015 et l'éditeur m'a répondu quelques jours plus tard qu'il réfléchissait à l'ajout de cette nouvelle fonctionnalité, mais qu'aucune décision n'avait encore été prise.
Je profite de ces explications sur les liasses fiscales pour contre-dire une autre légende urbaine qu'on entend régulièrement : "On n'a pas le droit d'utiliser la comptabilité d'Odoo en France car Odoo n'est pas certifié par la DGI (Direction Générale des Impôts)". Cela est faux. Un logiciel comptable n'a pas besoin d'être certifié par la DGI pour être utilisé en France. Vous pouvez tenir votre comptabilité avec l'outil de votre choix. Si vous voulez la tenir dans un cahier Clairefontaine, il n'y a pas besoin de demander à Clairefontaine si ce modèle de cahier est certifié par la DGI ! Tout comme un logiciel de paye n'a pas à être certifié par l'URSSAF pour être utilisé en France. Cela ne veut pas dire que vous pouvez tenir votre comptabilité comme vous voulez ; quel que soit l'outil que vous utilisez, il faut respecter les lois et les textes officiels qui stipulent comment une comptabilité doit être tenue. Par contre, le logiciel de liasse fiscale doit effectivement être conforme aux spécifications de la DGI, et il existe une procédure officielle de certification pour la télé-déclaration. Cela peut se comprendre, puisque la liasse fiscale est un document officiel conçu par la DGI et les logiciels qui l'implémentent doivent respecter parfaitement son format, tout comme le protocole de sa télé-transmission pour éviter des problèmes d'inter-opérabilité avec les serveurs de l'administration fiscale. A ce sujet, je vous conseille la lecture de ce post du blog d'Aurélien Dumaine, qui détaille le format utilisé et la procédure de certification par l'administration fiscale. Dans son blog, Aurélien dénonce à juste titre la barrière à l'entrée que constitue la procédure de certification pour la télé-déclaration de la liasse : la loi impose à toutes les entreprises soumises à l'IS de télé-déclarer leur liasse fiscale, mais seuls des services payants d'éditeurs de logiciels permettent aux entreprises de télé-déclarer leur liasse fiscale... par conséquent, les entreprises sont obligées de payer pour pouvoir télé-déclarer leur liasse fiscale !
Au final, est-ce vraiment utilisable ?
La comptabilité d'Odoo est utilisable, à plusieurs conditions :
- il faut que vous soyez un pragmatique de la comptabilité, et non un orthodoxe. Certaines façons de faire la comptabilité dans Odoo sortent de l'ordinaire, je pense par exemple à la façon dont sont faites les marques de lettrage sur l'écriture de report à nouveau lors d'une clôture comptable, ce qui va choquer voire scandaliser les orthodoxes, mais sera acceptable pour un pragmatique. On peut aussi citer le fait que, dans une écriture comptable générée automatiquement par Odoo (lors de la validation d'une facture par exemple), le libellé des lignes comptables qui constituent l'écriture n'est pas unique (le libellé varie d'une ligne à l'autre) : plusieurs comptables m'ont dit que ce n'était conforme aux pratiques, sans que ce soit pour autant rédhibitoire. Il faut être prêt à accepter quelques incongruités, comme par exemple les colonnes "Débit" et "Crédit" inversées dans la balance analytique, que les développeurs de l'éditeur justifient avec des arguments qu'ils sont les seuls à comprendre.
- il faut être bon en comptabilité. L'utilisation de la comptabilité dans Odoo n'est pas adaptée pour les débutants ; les logiciels dédiés à la comptabilité ont souvent des interfaces plus intuitives et ont plus de sécurités pour empêcher de faire des erreurs. Il faut être capable de vérifier certaines écritures comptables générées par Odoo pour s'assurer quelles sont bonnes, ce qui suppose une certaine expérience de la comptabilité. Je pense notamment à l'utilisation d'Odoo en multi-currency, qui n'est pas toujours simple... mais je ne pense pas que ce soit beaucoup plus simple dans d'autres logiciels !
- il faut utiliser les rapports comptables de Camptocamp fournis dans le module account_financial_report_webkit, même si ce n'est pas un module officiel, pour avoir des performances acceptables lors de l'édition d'un grand livre, pour avoir accès à toutes les options indispensables pour l'édition des rapports comptables et pour avoir une présentation dense et soignée.
- il faut connaître et utiliser de nombreux modules OCA qui complètent les manques des modules officiels sur la comptabilité. Je ne vais pas dresser la liste ici, mais la section les modules: exemple d'un cas réel vous donnera un exemple de modules OCA à utiliser pour un déploiement Odoo avec la comptabilité.
- il faut accepter la limitation à 1 axe analytique. Odoo ne sait pas gérer correctement le multi-axe analytique. Si vous interrogez l'éditeur à ce sujet, il vous répondra que le module officiel account_analytic_plans permet de faire du multi-axe, mais si vous regardez le fonctionnement de ce module plus en détail, vous verrez que c'est une solution un peu bizarre qui n'est pas vraiment du multi-axe analytique.
Ensuite, votre niveau de satisfaction à l'utilisation de la comptabilité dans Odoo dépendra notamment de :
- quel était le logiciel comptable que vous utilisiez avant. Si vous aviez un logiciel dédié à la comptabilité i.e. un logiciel qui ne fait que la comptabilité et qui a été conçu uniquement pour cela, vous serez probablement déçu, car vous n'y retrouverez pas tous les raffinements des logiciels dédiés à la comptabilité. Si vous utilisiez la comptabilité d'un autre ERP, il est probable que vous serez moins déçu, car de nombreux autres ERPs ne disposent pas des raffinements que l'on retrouve dans les logiciels dédiés à la comptabilité, cela n'est pas un manque spécifique à Odoo.
- votre volume écriture comptable mensuel. Si votre volume d'écriture comptable mensuel est important et que vous n'étiez pas doté d'un ERP, vous aviez un énorme travail de saisie manuelle pour le journal de vente, le journal d'achat et le journal de banque. Odoo va vous économiser beaucoup de temps en vous permettant automatiser la génération de ces journaux. Un tel gain de temps vaut bien quelques concessions sur l'ergonomie et certains raffinements ! Cela vous permettra aussi de relativiser le fait que l'interface de saisie manuelle des écritures comptables d'Odoo n'est pas très pratique ni rapide... mais ce n'est pas choquant : si vous utilisez bien Odoo, vous n'aurez pas beaucoup à l'utiliser ! En effet, une fois que les flux de vente et d'achat sont bien configurés dans Odoo et que vous avez mis en place l'import automatique des relevés bancaires, il ne devrait plus vous rester beaucoup d'écritures comptables à saisir à la main, hormis les OD (Opérations Diverses).
Pour conclure ce chapitre sur la comptabilité, voilà l'architecture et les choix logiciels que je recommande :

Si vous envisagez de déployer Odoo dans votre entreprise : conseils et questions fréquentes
Quel intégrateur choisir ?
Comme je l'ai indiqué dans la section l'expérience Odoo de l'auteur, je travaille chez Akretion, qui est un intégrateur Odoo. Mes conseils sur le choix d'un intégrateur ne sont donc probablement pas parfaitement objectifs !
Voilà en vrac quelques conseils pour bien choisir son intégrateur Odoo :
- si vous avez besoin d'une verticalisation métier d'Odoo qui existe déjà, vous avez intérêt à utiliser les services de la société qui maintient cette verticalisation métier d'Odoo. Qui mieux que l'auteur du module lui-même serait plus à même de vous aider à bien le mettre en œuvre ? L'auteur du module bénéficie de plusieurs avantages par rapport à ses concurrents :
- il connaît très bien le code ; il est donc plus rapide que n'importe qui d'autre s'il faut le débugger ou le faire évoluer,
- si vous avez besoin de développements supplémentaires par rapport à ce qui est déjà développé et que ces besoins sont génériques, il peut s'engager à ce que ces améliorations fassent partie de la branche principale du module. C'est autant de code qui ne fera pas partie de vos développements spécifiques, et donc autant de code dont vous ne supporterez pas seul le coût de maintenance, de bugfix, de migration vers les nouvelles versions, etc... Si vous faites appel à un intégrateur tiers, il peut apporter des améliorations au code du module (c'est le principe du logiciel libre), mais il ne pourra pas vous garantir que ces améliorations seront fusionnées dans la branche principale : cela dépendra de la décision du mainteneur du module. Si ce dernier estime que le code n'est pas propre, que le modèle de données n'est pas le bon, que l'ergonomie est mauvaise ou que cette évolution ne s'inscrit pas dans sa vision de l'avenir du module, il sera libre de refuser d'intégrer cette amélioration dans la branche principale du module.
- Pour faire partie des intégrateurs officiels et être ainsi référencés sur la page partenaire du site de l'éditeur, il faut que l'intégrateur paye un montant annuel auprès de l'éditeur ; certains intégrateurs ne souhaitent pas entrer dans cette logique et ne sont pas référencés sur le site de l'éditeur. L'appartenance d'un intégrateur officiel Odoo à l'une des 3 catégories - Ready, Silver et Gold - ne dépend que du chiffre d'affaires généré par l'intégrateur ou ses clients auprès de l'éditeur, via la vente des contrats de maintenance de l'éditeur ou la sous-traitance à l'éditeur de développements spécifiques. En gros, un intégrateur officiel Odoo est par défaut au niveau Ready ; s'il génère plus de x dizaines de milliers d'euros de chiffre d'affaires par an auprès de l'éditeur, il passe au niveau Silver ; s'il génère plus du double de ce montant, il passe au niveau Gold. Certains intégrateurs sont même propulsés directement au niveau Silver sur la base de prévisions de chiffre d'affaires, alors qu'ils n'ont jamais fait le moindre déploiement Odoo en production. Ces 3 catégories ne reflètent donc en aucun cas le niveau de contribution de l'intégrateur sur Odoo, sa participation à l'amélioration du code d'Odoo, à la résolution des bugs, au développement de modules communautaires, etc...
- pour connaître le niveau de contribution d'un intégrateur Odoo sous la forme de modules communautaires, vous pouvez consulter le classement des contributeurs du site Odoo Apps ; pour cela, cliquez sur le lien Filter by Contributors qui se trouve sur la gauche. Ce classement est généré automatiquement et se base sur le champ author des modules Odoo. Par exemple, Akretion est actuellement le 4ème intégrateur de ce classement, derrière Vauxoo, AvanzOSC et Camptocamp. Attention, ce classement a une portée limitée car il ne compte que le nombre de modules, pas leur taille/complexité ni leur qualité. Mais dans tous les cas, pour se faire une idée sur un intégrateur, c'est une bonne pratique, de regarder les modules Odoo qu'il publie.
- faites bien la différence entre les intégrateurs Odoo plutôt spécialisés framework et ceux qui sont plutôt spécialisés ERP. En effet, certains intégrateurs Odoo font essentiellement des projets framework (cf la section distinguer les projets framework des projets ERP) ; ils sont donc très à l'aise quand il s'agit de coder une application métier à partir du cahier des charges du client, mais ils connaissent peu le fonctionnement et les subtilités des modules officiels et des modules communautaires. Ces intégrateurs spécialisés framework, quand ils sont amenés à réaliser un projet ERP, ont une fâcheuse tendance, quand ils sont confrontés à une limitation des modules existants ou à quelque chose qu'ils ne comprennent pas dans les modules existants, à les re-coder entièrement. Dans certains cas, c'est peut-être la bonne solution, mais vous vous retrouvez alors avec un gros développement spécifique dont vous serez le seul à supporter le coût de maintenance !
- si vous envisagez de tenir la comptabilité de votre société avec Odoo, choisissez un intégrateur qui a déjà des références de sociétés qui utilisent la comptabilité d'Odoo dans le scénario 2 (cf la section les 2 scénarios d'utilisation de la comptabilité d'Odoo).
- n'hésitez pas, si c'est nécessaire, à avoir recours à plusieurs intégrateurs qui auraient des domaines d'expertise complémentaires. Après tout ce que j'ai exposé ci-dessus, vous aurez probablement du mal à trouver la perle rare qui cumulera toutes les qualités requises ! Il est tout à faire envisageable d'avoir un intégrateur principal et un ou plusieurs intégrateurs secondaires. Par exemple, si votre intégrateur principal n'a pas de références de sociétés qui utilisent la comptabilité d'Odoo dans le scénario 2, c'est probablement mieux d'utiliser les services d'un autre intégrateur qui aurait cette expérience pour vous aider sur les aspects comptables d'Odoo (malheureusement, ils ne sont pas nombreux). Autre exemple : si vous comptez déployer un module communautaire et que vous avez besoin d'améliorations ou de support technique sur ce module, c'est probablement mieux, en coordination avec votre intégrateur principal, d'entrer en contact avec la société qui maintient le module en question pour lui demander de réaliser les améliorations nécessaires et d'exiger, si ces améliorations sont génériques (et non spécifiques à votre projet), qu'elles soient intégrées dans la branche principale du module.
- les bons intégrateurs Odoo français sont très sollicités et souvent un peu sur-bookés. Pour travailler avec ces intégrateurs, il faut s'organiser à l'avance et pouvoir anticiper ses besoins. Un projet ERP dans une PME de plusieurs dizaines de personnes dure souvent 6 mois voire plus. Il est donc peu probable qu'un intégrateur Odoo expérimenté puisse démarrer immédiatement un nouveau projet.
Choisir Odoo, est-ce un choix pérenne ?
Beaucoup de décideurs ont peur de choisir un logiciel libre parce qu'ils pensent que ce n'est pas un choix pérenne. Ils se disent "certes, les ERPs propriétaires abusent parfois au niveau des tarifs, mais au moins ce sont des sociétés riches qui ne vont pas faire faillite du jour au lendemain !" Alors qu'un éditeur de logiciel libre, qui n'a aucun revenu de licences...
Effectivement, il est assez rare qu'un éditeur d'ERP propriétaire ayant une bonne part de marché fasse faillite. En réalité, le facteur limitant de la durée de vie d'un ERP propriétaire n'est pas la faillite de son éditeur mais son rachat par un autre éditeur d'ERP plus riche que lui ! Bien souvent, au moment du rachat, l'éditeur qui a réalisé l'acquisition s'empresse d'annoncer que l'ERP racheté continuera d'être maintenu, histoire de rassurer les clients. Mais, après quelques années, la logique économique l'incite à arrêter de développer activement deux bases de code pour deux ERPs qui remplissement les mêmes fonctions. Il va alors arrêter de maintenir une des deux bases de code et inciter/forcer les clients à migrer vers l'autre base de code. Les clients équipés de l'ERP abandonné vont donc devoir changer d'ERP, et dépenser des fortunes pour refaire tous les développements spécifiques et tout le travail d'intégration !
C'est par exemple le cas d'Amaris, un ERP spécialisé pour l'industrie, racheté par Cegid en 1997, cf la page Wikipedia de Cegid, rubrique La croissance externe comme levier de développement. Cegid a repris toute l'équipe de développeurs d'Amaris, avec comme objectif de redévelopper les fonctionnalités proposées par Amaris pour l'industrie dans l'offre ERP principale de Cegid. Dès que la nouvelle implémentation a été finalisée, elle a été commercialisée auprès des anciens clients d'Amaris, avec un positionnement plus haut de gamme qu'auparavant (comprendre : des tarifs plus élevés). Certains clients ont suivi et ont dû assumer la hausse du coût des licences. D'autres clients n'ont pas voulu suivre, et ont préféré rester sur la base de code d'Amaris, qui n'évolue plus. Cela n'est pas sans poser certains problèmes : par exemple, le logiciel client de la solution Amaris ne fonctionne pas sous Windows 7. Les exemples de ce type sont nombreux ; l'exemple que je cite est un peu vieux... mais quand on voit la longue liste des acquisitions de CEGID telle que présentée sur leur page Wikipedia (24 acquisitions), on se doute que le scénario s'est répété à de nombreuses reprises. Le groupe Sage, un des principaux concurrents de CEGID, a aussi réalisé de très nombreuses acquisitions d'ERPs propriétaires concurrents, cf la page Wikipedia de Sage, rubrique Principales acquisitions de Sage Group (14 acquisitions) et Acquisitions de Sage en France (12 acquisitions).
Avec un ERP libre, l'éditeur peut effectivement faire faillite ou se faire racheter. Si cet évènement entraîne l'abandon de la base de code par l'éditeur, la communauté a la possibilité de continuer le travail en reprenant à son compte le maintien et l'amélioration de la base de code : c'est un des gros avantages des logiciels libres par rapport aux logiciels propriétaires. Pour que cela soit possible, il faut que les développeurs de la communauté soient suffisamment nombreux et aient une connaissance en profondeur du code, et pas seulement de certaines couches "hautes". On peut clairement dire que c'est le cas aujourd'hui de la communauté Odoo.
Vais-je faire des économies en choisissant Odoo plutôt qu'un ERP propriétaire ?
La deuxième question qui tue ! Je vais tout de même essayer d'apporter quelques éléments de réponse.
Le profil de société idéal pour un déploiement Odoo est le suivant :
- pour le métier de cette société, il n'existe pas de solution adaptée et disponible out-of-the-box sans nécessiter des développements spécifiques parmi les logiciels métier ou les ERPs propriétaires à un coût raisonnable,
- pour le métier de cette société, il existe une verticalisation d'Odoo mature et bien maintenue,
- la société a des postes de travail Linux ou Mac qui ont besoin d'avoir accès à l'ERP (très peu d'ERPs propriétaires ont un client Linux ou Mac ou une interface Web iso-fonctionnelle qui fonctionne sur autre chose qu'Internet Explorer... à l'exception des ERPs propriétaires en mode SaaS),
- la société dispose de compétences informatiques en interne, qui sont capables de s'approprier Odoo et de faire en interne certaines adaptations ou certains développements spécifiques simples (voire plus, selon les compétences en développement Python).
Si votre société possède une ou plusieurs des caractéristiques listées ci-dessus, il est probable que vous ferez des économies substentielles en choisissant Odoo plutôt qu'un ERP propriétaire.
D'une manière générale, en supposant qu'il n'existe pas de solution adaptée à votre métier et disponible out-of-the-box sans besoin de développements spécifiques dans le monde propriétaire, le choix d'Odoo ne vous fera probablement pas réaliser d'économies sur le court terme (i.e. la première année, celle du déploiement), car l'argent économisé pour l'achat des licences logicielles devra être investi dans le développements de modules Odoo pour élargir le périmètre fonctionnel natif d'Odoo.
Etant donné que les ERPs propriétaires sont pricés par utilisateur (ou par utilisateur simultané), plus la société compte d'employés, plus les économies réalisées sur les licences logicielles seront importantes. Mais, d'une manière générale, plus la société est grosse, plus ses besoins fonctionnels sont larges et complexes, et donc plus le coût des développements nécessaires pour pallier les limitations fonctionnelles d'Odoo sera important.
Mais, sur le moyen/long terme, Odoo devrait se révéler plus économique. Cette source d'économie n'est pas spécifique à Odoo mais à l'utilisation d'un logiciel libre :
- vous avez beaucoup plus de libertés vis-à-vis de l'éditeur que si vous aviez choisi un ERP propriétaire. L'éditeur peut donc difficilement abuser de sa position dominante et organiser un racket collectif, comme cela s'est déjà vu dans le monde des ERPs propriétaires (par exemple chez SAP, cf cet article ou celui-ci ou encore chez Oracle, cf cet article en anglais).
- vous êtes libre de souscrire ou pas au contrat de maintenance de l'éditeur. Contrairement à un ERP propriétaire, vous ne serez pas soumis à un chantage du type "Si vous ne souscrivez pas au contrat de maintenance de l'éditeur, vous n'aurez pas accès aux mises à jour requises par les évolutions réglementaires" ou autre argument fallacieux du type "Imaginez que vous rencontriez un bug qui vous empêche soudain d'éditer vos factures client... !". Comme le code source est ouvert, vous pouvez corriger les bugs vous-même ou les faire corriger par une personne sans lien avec l'éditeur ayant le niveau technique requis.
- vous serez doté d'un ERP ouvert et moderne, entièrement pilotable via XML-RPC ou JSON-RPC et reposant sur des composants libres et standards (PostgreSQL, Python, ...). Si vous avez besoin de faire des échanges de données avec un logiciel tiers, votre travail devrait en être largement facilité et le coût allégé. Certains ERPs propriétaires font payer très cher l'accès à leurs APIs de développement, ce qui renchérit d'autant le coût de mise en place d'une passerelle d'échange de données avec un logiciel tiers. Je pense par exemple à Salesforce, qui est un logiciel de CRM en mode SaaS, et qui facture très cher la possibilité d'accès à ses APIs : il faut être au niveau Enterprise pour avoir accès aux APIs, or ce niveau est deux fois plus cher que le niveau Professional qui est généralement adopté par les PMEs, cf le pricing Salesforce.
Dans tous les cas, sauf pour de très petites entreprises aux besoins très standards, il est conseillé de prévoir un budget significatif pour la phase de déploiement d'Odoo car, comme expliqué dans la section les modules officiels : le minimum dans chaque domaine, on ne fait pas énormément de choses avec un Odoo out-of-the-box.
Le mot de la fin
Pour ceux qui n'ont pas encore d'expérience avec Odoo et qui étudient l'opportunité de l'adopter, j'espère, à travers ce document, avoir pu éclaircir leur lanterne d'une lueur différente de celle du discours marketo-idéaliste ambiant. Quand j'étais en position de faire le choix d'un ERP pour Anevia, j'étais à la recherche de ce genre de témoignage, mais ils sont particulièrement difficiles à trouver. J'avais eu la chance d'avoir été mis en relation à ce moment là avec Raphaël Valyi, qui m'avait tenu un discours de vérité, et qui m'avait permis de faire un choix éclairé loin des mensonges et des exagérations commerciales.
En conclusion, en caricaturant un peu, je dirai qu'Odoo est un paradis pour les développeurs et un enfer pour les experts fonctionnels. En effet, le développeur pourra tirer parti d'un code source relativement simple, lisible et concis et d'un bon framework reposant sur des outils reconnus et de qualité (PostgreSQL, Python, ...). A l'inverse, l'expert fonctionnel qui n'a pas de compétences de programmation restera sur sa faim à cause du faible périmètre fonctionnel d'Odoo et pourra être agacé de rencontrer un peu trop souvent des bugs qu'il ne saura pas corriger, et il sera toujours en attente du travail de son collègue développeur pour lui corriger les bugs et lui développer de nouvelles fonctionnalités !
Il faut aussi souligner que, si je parle dans ce document de certains défauts d'Odoo qui peuvent sembler effrayants pour une personne qui envisage de déployer Odoo (je pense notamment au manque de maturité et aux exemples de bugs que j'ai cités), les autres ERPs propriétaires du marché ont aussi leurs défauts et leurs points noirs. La différence, c'est qu'avec Odoo vous avez la liberté : la liberté de corriger vous-même les bugs (vous en rêviez, n'est-ce pas ?), la liberté d'améliorer les modules fonctionnels, de modifier leur comportement natif, de personnaliser votre ERP autant que vous le voulez, etc... Cette liberté est précieuse car elle vous permet de vous approprier votre ERP et d'en (re)prendre le contrôle. Mais pour cela, il faut s'intéresser de près aux aspects techniques et ne pas hésiter à collaborer avec l'éditeur et la communauté Odoo. C'est la raison pour laquelle il me semble préférable d'avoir déjà une ou plusieurs expériences de déploiements réussis avec d'autres logiciels libres dans votre entreprise avant de vous lancer dans un déploiement d'Odoo.
N'hésitez pas à m'envoyer vos commentaires par mail pour me faire part de votre propre expérience et/ou de votre opinion sur ce document. Si vous trouvez une erreur ou une faute d'orthographe, je suis aussi preneur !
XHTML 1.1 et CSS valides. Lien vers sites partenaires : Appartement Miluni.