Introduction

Ce projet a été réalisé dans le cadre de mon stage de fin de Licence Professionnelle Responsable Technique d’Applications Internet (RTAI), réalisé au sein de l’entreprise Andil, société situé à Labège (près de Toulouse) spécialisée dans l’édition de solutions logicielles et la formation à distance via ses deux instituts, Andilcampus (métiers du numérique, titres RNCP Bac+2 à Bac+4) et Juriscampus (Droit et Gestion du Patrimoine, jusqu’à Bac+5). Le stage s’est déroulé en fin d’année 2020, dans un contexte particulier puisque la quasi-totalité de la mission a été effectuée en télétravail intégral en raison de la crise sanitaire liée au COVID-19.
Une première expérience professionnelle totalement nouvelle pour moi sur ce mode de fonctionnement hybride.

La mission principale consistait à intervenir sur l’ERP open source Dolibarr, afin d’ajouter des filtres supplémentaires dans le plugin d’e-mailing Brevo (ex-Sendinblue). L’objectif global était de permettre à l’entreprise de cibler précisément une liste d’étudiants (grâce à de nouveaux attributs) lors de ses futures campagnes de communication.

Rattaché directement à Olivier Heguy, Responsable R&D et Développement, et intégré à une équipe de développement structurée autour d’Arnaud Trouvé (Responsable Développement) ainsi que de plusieurs développeurs et webmasters, j’ai occupé le rôle de développeur stagiaire avec un accès complet aux outils internes de l’entreprise : un espace Gitlab pour le versioning et la mise à disposition des modules internes, une plateforme de ticketing nommée « Suivi Projet » pour la réception et le suivi des demandes, une adresse mail professionnelle dédiée ainsi qu’un serveur Discord répliquant virtuellement l’organisation spatiale de l’entreprise (Open Space, bureaux, salles de réunion) afin de pallier l’absence de présentiel. L’environnement de développement principal utilisé tout au long de la mission a été Visual Studio Code.

 

discord andil
Capture d'écran de la plateforme Discord mis en place pour la société Andil

Objectifs

 
Objectifs techniques

Sur l’aspect technique, il fallait tout d’abord mettre en place un environnement de développement local complet en utilisant le package XAMPP (Apache, MySQL, PHP) me permettant faire tourner l’application web. Il fallait ensuite développer en PHP et manipuler la base de données relationnelle pour rechercher et cibler les attributs supplémentaires ajoutés dans les fiches clients.

  • Prendre en main un ERP/CRM open source (Dolibarr, développé en PHP) et le déployer en environnement local de type Client/Serveur.
  • Étendre le modèle de données natif de Dolibarr via la création de champs personnalisés (extrafields) rattachés aux fiches contacts.
  • Développer, en PHP procédural, des filtres de sélection supplémentaires au sein du plugin commercial Brevo (ex-Sendinblue), en manipulant des requêtes SQL avec jointures multiples sur le schéma relationnel de l’ERP.
  • Intégrer et faire cohabiter deux modules tiers (Brevo (ex-Sendinblue) et sa dépendance Abricot) récupérés depuis le Gitlab interne de l’entreprise.
  • Réaliser une chaîne de production audiovisuelle complète (montage, encodage, compression) pour un client externe de l’entreprise.

L’auto-formation sur un outil ERP inconnu a représenté un sacré défi. Il m’a fallu comprendre l’architecture complexe mis à disposition tout en répondant à un besoin métier concret en permettant aux équipes d’optimiser leurs campagnes marketing.

Objectifs fonctionnels 
  • Permettre à Andil de segmenter finement sa base de contacts étudiants (Andilcampus/Juriscampus) selon trois critères métier : Formation suivie, Année de formation et Statut de formation, afin de cibler précisément les destinataires des campagnes d’e-mailing.
  • Livrer aux enseignants du M2 Droit International et Humanitaire de la Santé du CEERDS (Centre Européen d’Études et de Recherche Droit et Santé, Montpellier) des supports vidéo de cours exploitables et diffusables sur leur plateforme pédagogique Moodle.
Livrables 
  • Une instance locale fonctionnelle de Dolibarr 12.0.3 (mise à jour depuis la 12.0.2), incluant trois nouveaux attributs supplémentaires enregistrés en base.
  • Un module de filtrage PHP étendu, intégré nativement à l’interface d’administration Sendinblue.
  • Une campagne d’e-mailing de test opérationnelle avec segmentation ciblée validée.
  • Un ensemble de vidéos de cours montées, encodées,  compressées et déposées sur le Moodle du CEERDS.
Contexte

En raison de la crise sanitaire liée au COVID-19, ce stage s’est déroulé majoritairement en télétravail. La communication, le suivi de projet et le travail d’équipe ont été maintenus grâce à un serveur Discord structuré par l’entreprise comme un véritable open space virtuel.


accueil gitlab
Écran d'accueil de la plateforme "Suivi Projet" d'Andil

 

Enjeux, Risques & Contraintes

Le principal enjeu de cette mission résidait dans ma méconnaissance totale de l’écosystème Dolibarr au démarrage du stage : il a donc fallu engager une phase d’auto-formation accélérée (notamment grâce à la documentation officielle) tout en sollicitant les développeurs seniors de l’équipe pour lever les points de blocage. Il s’agissait d’un exercice d’autonomie renforcé par le télétravail intégral, qui limitait les échanges informels habituellement facilitateurs en présentiel.

Sur le plan technique, la mission comportait une dette technique structurelle propre à l’écosystème Dolibarr : le plugin Brevo (ex-Sendinblue) ne fonctionne pas de manière autonome et dépend impérativement du module Abricot, une bibliothèque de fonctions et classes étendant le comportement natif de l’ERP, sans activation propre ni impact visible. Une dépendance implicite qu’il fallait comprendre avant de pouvoir intervenir sur le code sans casser l’existant. A cela s’ajoutait une contrainte de compatibilité de version : la version initialement fournie (12.0.2, datée du 8 août 2020) devait être migrée vers la 12.0.3, dernière version stable disponible depuis le 26 septembre, sous peine de travailler sur une base obsolète.

D’un point de vue base de données, la manipulation de requêtes SQL avec jointures multiples exigeait une rigueur particulière pour éviter de dégrader les performances de la fonction getNbOfRecipients(), qui est appelée dynamiquement à chaque interaction utilisateur sur la page de sélection des destinataires.

Enfin, des contraintes de confidentialité liées à la manipulation de données personnelles d’étudiants (noms, e-mails, cursus) imposaient une vigilance sur la gestion des accès et des clés d’API. Côté production vidéo, la contrainte principale était matérielle et temporelle : les fichiers bruts encodés via Adobe Media Encoder généraient des volumes très lourds, incompatibles avec un hébergement Moodle standard, nécessitant une étape de compression dédiée sans dégrader la qualité pédagogique du contenu.

 

Les différentes étapes d’un projet

 
Analyse du besoin et déploiement de l’environnement technique

Déploiement du serveur local XAMPP et téléchargement de la version 12.0.2 de Dolibarr, puis mise à jour vers la version stable 12.0.3.

La mission a débuté par un ticket transmis via la plateforme « Suivi Projet », formalisant la demande : permettre le filtrage d’une liste d’étudiants pour une campagne de mailing Sendinblue. N’ayant jamais manipulé Dolibarr, j’ai procédé à son installation en local sur mon poste personnel afin de disposer d’un environnement de développement et de test isolé. 

Dolibarr étant une application web de type Client/Serveur, j’ai mobilisé la stack XAMPP (Apache 2.4.46, MariaDB 10.4.14, PHP 7.4.11) déjà installée sur ma machine, plutôt que le package natif « Doliwamp », pour des raisons de gain de temps. Après téléchargement de l’archive depuis SourceForge, extraction du dossier ‘htdocs’, création de la base de données via phpMyAdmin, puis passage par l’assistant d’installation web, j’ai configuré le fichier conf.php en définissant le nom de la base (« dolibarr7 »), le préfixe standard des tables (llx_) ainsi que les identifiants administrateur, avant de finaliser la création des tables, clés primaires, clés étrangères et index.

Modélisation des données via les attributs supplémentaires (extrafields)

Une fois l’ERP opérationnel, j’ai conçu le modèle de segmentation métier en créant trois attributs supplémentaires (extrafields) rattachés à l’entité Tiers/Contacts, accessibles depuis Modules/Applications > Tiers > Attributs supplémentaires (contacts/adresses) : un champ formation de type liste de sélection (valeurs Droit, Informatique, Médecine), un champ anneeformation de type numérique entier (ex. Promo 2020) et un champ statutformation de type liste de sélection (en cours / terminé). Ces attributs sont automatiquement persistés par Dolibarr dans la table llx_socpeople_extrafields, structurellement liée à la table principale des contacts llx_socpeople. J’ai ensuite constitué un répertoire de contacts de test, chaque fiche intégrant ces nouveaux champs aux côtés des informations standard (nom, prénom, e-mail, poste/fonction).

Intégration des plugins tiers

J’ai récupéré depuis le Gitlab interne d’Andil les deux modules nécessaires : Brevo (ex-Sendinblue), plugin payant disponible sur le Dolistore permettant le pilotage de campagnes de mailing/SMS via une clé d’API, et Abricot, module de dépendance requis par Brevo (ex-Sendinblue) pour fonctionner. Ces deux dossiers ont été extraits puis activés depuis l’interface Modules/Applications, faisant apparaître un nouvel onglet « SendinBlue » dans le menu principal de Dolibarr.

Développement PHP des filtres de segmentation

C’est le cœur technique de la mission. La page native du plugin Sendinblue expose une fonction nommée formFilter() générant dynamiquement le formulaire de filtrage des destinataires (par défaut, un filtre unique sur le champ « Poste/Fonction »). 

J’ai donc reproduit rigoureusement ce même schéma pour y intégrer mes trois nouveaux filtres : d’abord une requête SQL de comptage permettant de dénombrer les contacts concernés par chaque valeur d’attribut, puis la génération des balises <select> correspondantes, et enfin la restitution conditionnelle des résultats. La logique de restitution des destinataires, quant à elle, réside dans la fonction getNbOfRecipients() de la même page : j’ai étendu la requête SQL principale en y ajoutant des LEFT JOIN vers llx_societe et llx_socpeople_extrafields, afin de faire remonter, en plus des champs standards tel que id, e-mail, nom, prénom et poste. 

Enfin, la page target.php, chargée d’afficher le tableau des « Destinataires Sélectionnés » suite à l’exécution du filtre, a été mise à jour pour exposer les colonnes Formation, Année de Formation et Statut de Formation. Les tests réalisés (par exemple un filtrage isolant tous les étudiants de la filière Informatique) ont validé le bon fonctionnement de la chaîne complète, de la sélection du filtre côté interface jusqu’au retour SQL correct.

page config dolibarr
Capture d'écran de la page de Configuration du module avec les attributs "Formation", "Année de Formation" et "Statut de Formation" de Dolibarr
 
Production et post-production audiovisuelle pour le CEERDS 

En parallèle de la mission de développement, j’ai pris en charge le montage de plusieurs enregistrements de cours du M2 Droit International et Humanitaire de la Santé du CEERDS de Montpellier, sous Adobe Premiere Pro, en respectant un cahier des charges précis : incrustation du logo de l’établissement, réduction du bruit ambiant via la fonction DeNoise, et export au format YouTube 720p. Les fichiers exportés étaient ensuite traités par Adobe Media Encoder pour l’encodage final, puis compressés via HandBrake afin de réduire drastiquement leur poids avant dépôt sur le Moodle de la formation, garantissant ainsi un accès fluide aux étudiants.

 

Retour d’expérience et perspective d’avenir

Ce stage a été particulièrement formateur car il m’a confronté pour la première fois à la réalité du télétravail total et à la rigueur nécessaire pour que cette mission soit une réussite. Cette expérience m’a également donné la méthodologie nécessaire pour appréhender n’importe quel progiciel ou écosystème SaaS. 

Cette mission a constitué ma première expérience concrète de montée en compétence autonome sur un écosystème logiciel métier complexe (ERP/CRM), et m’a confronté pour la première fois aux réalités du télétravail intégral, avec ses avantages en matière d’autonomie mais aussi ses limites en termes d’accompagnement informel. Avec le recul, je reconnais avoir par moments manqué de rigueur et de méthode dans l’organisation de mon travail, notamment sur la gestion du temps entre la phase d’exploration/documentation et la phase de production effective, ce qui a rallongé certaines étapes du développement.

Si je devais reprendre ce projet aujourd’hui avec mes connaissances actuelles, plusieurs axes d’amélioration s’imposeraient. D’abord, sur le plan méthodologique, je structurerais mon travail selon une approche plus proche du Kanban, avec un découpage plus fin des tâches sur la plateforme de suivi de projet, pour objectiver ma progression au lieu de la subir. 

Ensuite, sur le plan technique, je pousserais davantage la démarche de versioning Git en multipliant les commits atomiques et documentés autour de chaque fonction modifiée plutôt que de livrer des blocs de modification plus globaux, afin de faciliter la relecture par l’équipe et la traçabilité des changements. Je porterais également une attention accrue à la sécurisation de la clé d’API Sendinblue, en l’externalisant dans une configuration dédiée plutôt qu’en dur dans le code, et j’introduirais une couche minimale de tests pour valider les requêtes SQL de segmentation avant mise en production, réduisant ainsi le risque de régression sur un module aussi central que la génération des campagnes de mailing. 

Enfin, cette expérience a confirmé mon appétence pour le développement web et la structuration de données métier, et a directement motivé la poursuite de mes études vers des formations davantage orientées développement et ingénierie logicielle.

Retour en haut