DOC OFFICE GED

Fiche CVthèque

Français
Retour à la CVthèque

Fiche du profil 2 fiches regroupées (même personne)

Qualification
Poste
Développeur Web &
Métier
Développement logiciel (non spécialisé)
Secteur d'activité
Éducation & Formation déduit
Indice ayant déclenché la déduction : « organisme de formation »
Valeur déduite du contenu du profil — à confirmer avant de s'en servir comme critère.
Origine
Profil sourcé
Expérience
0-2 ans
Compétences
GitHub
Identité et contact

Vous devez être abonné pour voir le nom et les coordonnées de ce profil.

Localisation
Maroc
Source
Recherche web
CV anonyme

CV anonymisé automatiquement : nom, coordonnées et liens retirés. Les mentions entre crochets remplacent une information retirée.

NextData
Curriculum vitae anonymisé
ND-CV-05C1B73B

Développement logiciel (non spécialisé)

Maroc Identité et coordonnées communiquées par NextData

[nom]

Titre Professionnel

Développeur Web &

Web Mobile

Session juin 2021

[nom]

Entreprise d’accueil : Green IT Solutions

Organisme de formation : ISFAC Poitiers

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Sommaire

Présentation de l’entreprise.................................................................................................................4

Présentation [nom]

Objectif.............................................................................................................................................5

Mise en Œuvre.................................................................................................................................5

Contexte................................................................................................................................................6

Qu’est ce que Dolibarr ?..................................................................................................................6

Qu’est ce qu’est une API ?................................................................................................................6

Cahiers des charges..............................................................................................................................7

Expression du besoin.......................................................................................................................7

Spécifications Fonctionnelles...........................................................................................................7

Spécifications Techniques................................................................................................................8

Analyse..................................................................................................................................................9

Étude de l’existant............................................................................................................................9

Modélisation des tables.................................................................................................................10

Modification des tables du module...............................................................................................12

Scripts SQL.....................................................................................................................................15

Modifications sur les écrans..........................................................................................................16

Points clefs du développement..........................................................................................................19

Versioning......................................................................................................................................19

Mise en place de l’API....................................................................................................................19

Programmation de la classe NdfpApi.............................................................................................26

Essai et vérification du code..........................................................................................................32

Mise en place de la gestion des véhicules utilisateurs..................................................................34

Veille sécuritaire.................................................................................................................................38

Recette de fonctionnement................................................................................................................39

Recherche sur sites Anglophones.......................................................................................................40

Traduction......................................................................................................................................41

Conclusion du stage............................................................................................................................42

ANNEXES.............................................................................................................................................43

Conventions dans Dolibarr.................................................................................................................44

Norme PHP.....................................................................................................................................44

Normes SQL...................................................................................................................................45

Normes HTML................................................................................................................................47

Autres Normes Dolibarr.................................................................................................................47

Arborescence Module Dolibarr..........................................................................................................48

Modèle physique de données............................................................................................................49

Extrait code fichier index.php « passerelle » API...............................................................................52

Exemple mise en place d’un serveur API Restler................................................................................55

Initialisation...................................................................................................................................55

Annotation.....................................................................................................................................55

Diagramme de classe NdfpVehicle.....................................................................................................56

ISFAC Poitiers -2020 / 2021

Développer la partie front-end d’une application Web ou Web

Mobile en intégrant les

Développeur Web et Web Mobile · Aurélien Girard

C1 : Maquetter une application

C2 : Réaliser une interface utilisateur web statique et

adaptable · X

recommandations de sécurité C3 : Développer une interface web dynamique

Développer la partie back-end d’une application Web ou Web

Mobile en intégrant les X

C4 : Réaliser une interface utilisateur avec une solution de gestion de contenu ou E-commerce

C5 : Créer une base de données · X

C6 : Développer les composants d’accès aux données · X

recommandations de sécurité C7 : Développer la partie back-end web ou web mobile

X

C8 : Élaborer et mettre en œuvre des composants dans

une application de gestion de contenu ou E-commerce · X

Page 3/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Présentation de l’entreprise

Green IT Solutions

Green IT solution est une société de services dans les systèmes d’information, située au centre-ville de Niort dans les Deux-Sèvres.

Depuis ça création en 2011 par Mr Bertrand FRUCHET, cette petite entreprise de cinq employés est le partenaire et l’allié des entreprises PME/PMI locales, quel que soit leur secteur d’activité pour fournir des serveurs, des solutions de virtualisation et de mise en clusters.

Green IT Solutions propose à ses partenaires des solutions sur mesures et innovantes tout en respectant l’environnement. Pour permettre aux entreprises de diminuer leur empreinte carbone, de réduire leurs émissions de gaz à effet de serre, leur consommation énergétique. En résumé permettre de réduire l’impact écologique du numérique.

Présentation de l’entreprise · Page 4/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Présentation [nom]

[nom] a été réalisé sur la période du 12 avril au 04 juin, au sein de l'entreprise Green IT

Solutions, en binôme avec un autre stagiaire, Hugo Milecamps provenant d’une formation similaire. Lui s’occupant de la partie développement mobile avec de la programmation sous Android Studio et moi de la partie Web avec la programmation du module Dolibarr.

Dolibarr est une application open source de gestion d’entreprise s’exécutant au sein d’un serveur web. qui peut être donc accessible au travers d’internet. Il comporte différents modules internes

(présents a l’installation) ou externes que l’utilisateur active selon ses besoins (gestion [nom], congé, gestion de stock,…).

Objectif

L’objectif [nom] est la mise en place d'un service API permettant à une application cliente, dans notre cas une application Android, de communiquer avec un module de gestion de note de frais d'un environnement Dolibarr.

Mise en Œuvre

Nous avons décidé, au vu du temps qui nous était alloué et des recommandations de notre superviseur, de partir sur un fork d’un module Dolibarr de gestion de note de frais déjà existant

Note de frais plus ou Ndfp, disponible en open source sur Github et déjà utilisé par notre entreprise d’accueil. Afin de nous concentrer en grande partie sur l'API et le développement de l'application Android (pour mon collègue), tout en ajoutant quelques fonctionnalités sur le module.

Résumé cahier des charges :

  • Programmation de l’API afin de permettre à la future application Android de communiquer avec le service de gestion de note de frais au travers de celui-ci.
  • Ajouter la possibilité de joindre des justificatifs aux dépenses d'une note de frais.
  • Ajouter la gestion des véhicules personnels des utilisateurs notamment pour les frais kilométriques.
  • Refonte graphique de l’interface d’une note de frais pour corriger les problèmes d’affichage.
  • Correction sur la base de données.

Le but étant pour notre entreprise d’accueil, de pouvoir à terme, proposer à ses clients, en plus de ses services habituels (serveurs, virtualisation) cet ensemble "logiciel" :

➔ Application Dolibarr avec module de gestion de notes de frais associé à l’application Android.

Présentation [nom] · Page 5/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Contexte

Qu’est ce que Dolibarr ?

Dolibarr est un progiciel de gestion Intégré pour les entreprises, en open source. C’est un logiciel modulaire qui s’adapte aux besoins de l’entreprise. Il s’exécute au sein d’un serveur Web.

Il nécessite APACHE, MySQL et PHP pour fonctionner.

Qu’est ce qu’est une API ?

Une API facilite l’interaction entre deux applications différentes. Elle sert d’intermédiaire, le client va envoyer une requête HTTP vers L’API, celle-ci va chercher l’information dans la base de données puis renvoyer la réponse au client. C’est une séparation entre le client et le serveur.

L’API permet d’accéder aux données de façon standardisée, c’est-à-dire que peu importe quel langage est utilisé par le client, et peu importe comment le serveur est construit, ils communiqueront en utilisant le protocole HTTP et en se transmettant les données sous un format compréhensible par eux deux (XML ou JSON).

Contexte · Page 6/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Cahiers des charges

Expression du besoin

L’objectif est de faciliter la gestion des frais pour les employés en déplacement. Ils pourront accéder au service à partir de leur téléphone portable, leur permettant de saisir presque immédiatement leurs frais et de joindre les justificatifs en même temps.

Le résultat souhaité étant un gain de temps et une charge de travail diminuée, à la fois du coté des employés en déplacement mais aussi du coté du personnel chargé de la vérification et de la validation des frais en fin de mois.

Spécifications Fonctionnelles

Mise en place d’un accès aux données depuis l’API

L’application mobile doit pouvoir avec des appels HTTP vers l’API, consulter, modifier ou supprimer les différentes notes de frais de l’utilisateur, lui permettant aussi d’en créer de nouvelle.

Gestion des justificatifs

Permettre l’ajout d’un fichier justificatif à une dépense. (Prise d’une photo depuis le téléphone pour envoyer avec une dépense par exemple).

Mise en place d’une gestion des véhicules personnels

Pour la gestion kilométrique, permettre à l’utilisateur d’enregistrer ses différents véhicules personnels, qu’il pourrait être amené à utiliser dans le cadre de sa pratique professionnelle. Afin de garder une trace kilométrique sur ceux-ci. Permettant de calculer ses frais kilométriques plus aisément.

Refonte et correction

Il a été demandé de corriger certains problèmes d’affichage présent sur le module d’origine, notamment sur les écrans les moins larges. Il n’a pas été demandé de passer l’interface en responsive design. Corriger quelques erreurs sur la base de données, notamment lors de l’installation du module d’origine.

Cahiers des charges · Page 7/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Spécifications Techniques

Front End · Back End

  • HTML5 · • · PHP 7.4
  • CSS3 · • · JSON
  • JS et JQUERY · • · MySQL
  • AJAX · • · Dolibarr 13.0

Logiciels et applications utilisés

  • Visual Studio Code
  • JMerise (le maquettage de la base de données)
  • GitLab (le versioning [nom] et sa gestion)
  • PhpMyAdmin
  • Composer
  • Git
  • PostMan (envoie de requêtes HTTP)

Environnement Dolibarr

Le développement d’un module externe Dolibarr impose certaines contraintes/règles de développement :

  • Arborescence des fichiers et [nom] dans le module ainsi que leur nommage.
  • Normes Copyright ( en-tête des fichiers ).
  • Utilisation des fonctions Dolibarr ( notamment pour la sécurité sur les données).
  • Convention de nommage des variables et des fonctions.
  • SQL :Règle sur les structures des tables et les champs ( convention de nommage, champs obligatoires, types de champs) et sur les requêtes.
  • Règles sur les accès à la base de données.
  • Norme HTML.
  • Dolibarr utilise le design pattern MVC, la particularité est que la partie controller C et la partie view V sont dans le même fichier et sont séparées par des balises commentaires.
  • Utilisation des classes de style Dolibarr dans le HTML.

Voir Annexe n°1 page 44 pour la liste non exhaustive des conventions de programmation dans Dolibarr

Cahiers des charges · Page 8/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Analyse

Étude de l’existant

Avant de faire le choix de modifier le module externe Note de frais plus, nous avons étudié les autres solutions possibles :

Solution 1 - Développer un tout nouveau module :

Si cela est la solution qui semble la plus intéressante niveau apprentissage et connaissance à acquérir, elle n’était pas réalisable dans les temps accordés.

Solution 2 - Modifier le module note de frais de base de Dolibarr :

L’avantage est que le code du module est d’actualité et correspond aux conventions actuelles de Dolibarr mais il reste simple, et ne comprend pas de gestion de frais kilométrique.

Solution 3 – Modifier un module externe existant :

Le module externe Ndfp, plus complet que le module de base de Dolibarr, nous a donc semblé le meilleur choix pour répondre au besoin.

En plus d’être déjà connu de notre entreprise d’accueil, il permettait de réaliser [nom] dans les temps. Le seul inconvénient est le code plus « ancien ».

Après ce choix technique fait, pour mener à bien la suite [nom], j’ai étudié le fonctionnement de l’application Dolibarr et plus particulièrement celui du module externe. Afin de déceler les éléments sur lesquels j’allais devoir intervenir pour apporter les modifications souhaitées

Liste des points de recherche :

  • Déterminer les différentes entités.
  • Les tables de la base de données et leurs relations.
  • L’organisation des fichiers (qui sert à quoi...etc…).
  • Comment modifier, installer un module dans Dolibarr.

Voir Annexe n°2 page 48 pour l’organisation des fichiers et [nom] d’un module

Dolibarr

Analyse · Page 9/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Modélisation de s tables

Rétro conception du modèle conceptuel de données du module Ndfp, avec le logiciel JMerise, afin d’avoir une idée plus précise des éléments qui « composent » la note de frais, et des différentes relations entre eux.

Pour information, les tables du module sont générées à l’installation de celui-ci dans Dolibarr, grâce aux scripts SQL placés dans [nom] « sql » à la racine du module.

Modèle conceptuel de données

J’ai uniquement modélisé les tables du module. J’ai donc représenté dans le mcd les clés étrangères qui renvoient vers des tables des modules internes du Dolibarr que j’ai choisi de ne pas modéliser dans un souci de lisibilité et aussi car elles n’interviennent pas dans le fonctionnement du module note de frais (à part la table utilisateur).

Analyse · Page 10/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Règles de Gestion

Avec le modèle conceptuel de données et en utilisant le module externe, j’ai pu déterminé les règles de gestion entre les entités.

Une note de frais peut contenir zéro ou plusieurs lignes de dépenses.

Une ligne de dépense appartient à une seule note de frais.

Une note de frais est la propriété d'un seul utilisateur

Un utilisateur peut avoir plusieurs notes de frais

Une note de frais est validée par un seul utilisateur (qui n’est pas forcément l’auteur).

Un utilisateur peut valider plusieurs notes de frais.

Une dépense a zéro ou une catégorie de véhicule.

Une catégorie de véhicule à zéro ou plusieurs dépenses

Une ligne de dépense a un type de dépenses.

Un type de dépense à zéro ou plusieurs dépenses.

Une dépense si elle est de type jalon a zéro ou plusieurs lignes de taxes

Chaque ligne de taxes appartient à une seul dépense.

Une ligne de taxe peut avoir zéro ou plusieurs lignes de TVA.

Une ligne de TVA est associé à une ligne de taxe.

Une dépense à zéro ou une catégorie de paiement.

Une catégorie de paiement a zéro ou plusieurs dépenses.

Une catégorie de véhicules peut avoir zéro ou plusieurs barèmes kilométriques.

Un barème kilométrique n’a qu’une seule catégorie de véhicules.

Une catégorie de véhicules possède zéro ou plusieurs tranches kilométrique.

Une tranche kilométrique n’est associée qu’a une seule catégorie de véhicules.

Une tranche kilométrique a plusieurs barèmes kilométriques qui lui sont associés.

Un barème kilométrique n’a qu’une seule tranche kilométrique.

Voir annexe n°3 page 48 pour le modèle physique de données

Analyse · Page 11/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Modification d es tables du module

Création d’une nouvelle table, pour gérer les véhicules des utilisateurs, ndfp_vehicle.

Modification de la table ndfp_det (lignes de dépenses d’une note de frais), avec l’ajout de deux relations :

  • une relation avec la nouvelle table des véhicules utilisateur ndfp_vehicle.
  • une relation avec la table ecm_directories, qui contient les informations sur les justificatifs uploader sur le Dolibarr.

Modèle conceptuel de données Modifier

Analyse · Page 12/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Modèle logique de données

Analyse · Page 13/56

ISFAC Poitiers -2020 / 2021

Développeur Web et Web Mobile · Aurélien Girard

Modèle physique de données modifié

Nom colonne · TYPE

rowid · INT

fk_ndfp · INT

comment · TEXT

ref_ext · TEXT(30)

datec · DATETIME

dated · DATETIME

datef · DATETIME

fk_user_author · INT

previous_exp · INT

fk_exp · INT

tva · DOUBLE

qty · INT

cur_iso · TEXT(3)

rate · DOUBLE

total_ht_cur · DOUBLE

total_ttc_cur · DOUBLE

total_ht · DOUBLE

total_ttc · DOUBLE

total_tva · DOUBLE

milestone · INT

tms · TIMESTAMP

fk_vehicle · INT

fk_ecm_files · INT

Nom colonne · TYPE

rowid · INT

imma · TEXTR(11)

model · TEXT(30)

total_km · INT

km_curr_year · INT

km_last_year · INT

created_at · DATETIME

fk_cat · INT

fk_user · INT

tms · timestamp

Analyse

TABLE NDFP_DET (TABLE LIGNE DE DÉPENSE)

CP ? · Unique · Not Null · Clé · Remarques

étrangère ?

X · Auto incrément

X · X · ndfp_det.fk_ndfp = Ndfp.rowid

X

X

X · X

X · ndfp_det.fk_exp = _c_ndfp_exp.rowid

X

X

X · = ndfp_vehicle.rowid

X · = ecm_files.rowid

TABLE NDFP_VEHICLE (TABLE VEHICULE)

CP ? · Unique · Not Null · Clé étrangère ? Remarques

X · Auto incrément

X · X

X

X · ndfp_vehicle = ndfp_tax_cat.rowid

X · X · ndfp_vehicle.fk_user = User.rowid

X

Page 14/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Scripts SQL

Pour permettre la création des tables avec leurs modifications lors de l’installation du module, j’ai créé un nouveau script SQL pour la table ndfp_véhicle et modifié celui existant de la table ndfp_det.

Analyse · Page 15/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Modifications sur les écrans

Écran d’une note de frais

Formulaire de sélection d’un document déjà présent dans le répertoire document du module :

Formulaire d’upload d’un fichier :

Sélection du véhicule personnel, dans le cas d’un frais kilométrique

Analyse · Page 16/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Écran final d’une note frais après modification :

Analyse · Page 17/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Écran gestion des véhicules

Contient le formulaire de création d’un véhicule et le tableau des véhicules de l’utilisateur.

Avec les informations sur les kilomètres parcourus de chaque véhicule.

Analyse · Page 18/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Points clefs du développement

Versioning

Dans l’objectif que mon binôme qui était donc sur la partie cliente, qu’il développait en parallèle puisse bénéficier en permanence des dernières mise à jour fonctionnelles de L’API. Nous avons utilisé le GithLab de l’entreprise afin de travailler l’un et l’autre sur les mêmes versions du module.

Mise en place de l’API

Prérequis

  • Activer l’utilisation des services API de Dolibarr dans la pages de configuration des modules.
  • Le jeton API doit être généré sur les profils des utilisateurs (seul les comptes enregistrés sur le Dolibarr et avec un jeton d’api auront accès aux services).

Figure 1: Interface profil utilisateur avec clé pour api généré

Points clefs du développement · Page 19/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

L’API Dolibarr

Il m’a semblé nécessaire d’essayer de comprendre dans un premier temps, comment fonctionne l’API de Dolibarr en interne.

On peut dire qu’il y a deux niveaux à l’API Dolibarr, il y a tout d’abord, les classes qui constituent le cœur de l’API, situées dans [nom] /htdocs /api /. Elles utilisent le bundle Luracast Restler

(disponible sur Github), c’est un ensemble de classes PHP qui permettent de monter un serveur

API.

Ce composant va en outre se charger d’instancier les classes API des différents modules du Dolibarr, gérer la sérialization ou deserialization des données lors de la réception des requêtes

HTTP et l’envoi de réponses vers le client. Il permet aussi l’emploi d’annotations dans les classes

API des modules.

[nom] /htdocs /api / contient notamment les fichiers suivants :

  • api_login.class.php : Lorsque l’utilisateur depuis le client, envoie une requête de connexion vers l’Uri /login, c’est la méthode index() de cette classe qui la « réceptionne » et qui va vérifier les identifiants et renvoyer la clé API si tout est correct.
  • api_access.class.php : Son but est de vérifier les clés API reçu lors des requêtes, passées soit en paramètre de L’URL, soit dans le header de la requête. Elle vérifie après réception, que la clé à une correspondance avec un utilisateur existant. Si oui sa variable statique $user contiendra l’utilisateur connecté.
  • api.class.php : Contient la classe DolibarrApi, parente de la future classe PHP API du module note de frais.
  • index.php : C’est la « passerelle » de L’API. C’est par ce fichier qu’on accède aux différents services API du Dolibarr. Il instancie la classe DolibarrApi et utilise le bundle Luracast pour charger les différentes classes API détectées dans les modules Dolibarr.

Ensuite dans un second niveau, il y a les classes API propre aux modules (internes ou externes) du Dolibarr.

De la même façon qu’on pourrait le voir dans un framework comme Symfony par exemple, ces fichiers font offices de Controller qui écouteront les requêtes sur les routes associées à leurs méthodes et appliqueront la logique de celles-ci lors de la réception de la requête attendue . On associe une route à une méthode en utilisant les annotations.

Voir Annexe n°3 page 52 pour un extrait de code du fichier index.php

Voir Annexe n°4 page 55 pour la mise en place d’un service api avec Luracast Restler

Points clefs du développement · Page 20/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Ajout d’un service API pour un module

Pour ajouter le service API à un module Dolibarr, il faut créer un unique fichier nommé sous une forme bien précise api_<monModule>.class.php à placer dans [nom] class du module.

Dolibarr détectera automatiquement le nouveau service et il sera alors visible sur l’explorateur de services du système (le fichier index.php vu précédemment, scanne les [nom] à la recherche des fichiers api, d’où le nom du fichier selon un forme bien précise, et les ajoute à la liste des classes

API à instancier) .

Le fichier créé qui dans mon cas se nomme api_ndfp.class.php, il contiendra la classe PHP

NdfpAPI, qui définira avec ses différentes méthodes les points d’accès aux données (ou endpoints) de notre service API note de frais.

La classe PHP NdfpApi hérite de la classe

DolibarrApi, ce qui lui permet de bénéficier des méthodes et propriétés de celle-ci, notamment l’instance de la connexion à la base de données

$db initialiser à la construction ou encore de la méthode statique _checkAcessToRessource() qui permet de vérifier les droits de l’utilisateur connecté sur le module.

Points clefs du développement · Page 21/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Définir la structure de l’API

Afin de définir les endpoints qui composeront mon API, c’est-à-dire les URL auxquels le client va envoyer des appels, je me suis posé les questions suivantes :

  • Quelles sont les ressources qui devront être accessibles ?
  • Quels sont les URI à partir desquelles le client accédera à mes ressources ? ( les URI seront le moyen d’identifier nos ressources par exemple : /ndfp/{id} pour accéder à une note de frais).
  • Quels sont les différents types d’action dont nous avons besoin sur les ressources. Ce sont les verbes HTTP (GET, PUT, DELETE, POST). Avons-nous besoin d’un CRUD complet ou juste d’une lecture ?
  • Dans le cas des requêtes du type POST et PUT, Quelles sont les données dans le JSON que je m’attends à recevoir ?
  • Quelles réponses je retourne selon les résultats ? (code erreur, réponse au format JSON).

Répondre à ces questions, m’a permis de définir une liste de requêtes auxquelles l’API pourra répondre, ainsi que les différents formats de réponses qu’elle retournera au client.

Les EndPoint :

Un endpoint est L’URL complet qu’on utilise pour nos requête HTTP vers l’API ( c’est donc le nom de domaine + l’URI d’accès à nos ressources ).

par exemple pour accéder aux documents :

  • URI : /documents
  • endpoint : [lien] mon- [lien] → permet d’accéder à la ressource documents.

Format d’un requête HTTP :

Verbe HTTP + URI + VERSION HTTP + HEADER + BODY

Format d’un Réponse HTTP

Version HTTP + Code de réponse HTTP + HEADER + BODY

Points clefs du développement · Page 22/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Je suis donc parti tout d’abord sur la rédaction d’une documentation de l’API, en renseignant pour chaque ressource accessible :

  • Les URI et les verbes HTTP disponibles.
  • Les paramètres qui doivent être passé à L’URL (si il y en a).
  • Un exemple de requête.
  • Les réponses possibles avec là aussi un exemple.

Cela à été utile pour mon binôme qui travaillait en parallèle sur le client d’Android d’avoir une documentation claire sur ce qu’attend l’API. Et cette documentation sera utile par la suite pour les futurs développeurs qui souhaiteront travailler sur cette API.

Points clefs du développement · Page 23/56

ISFAC Poitiers -2020 / 2021

Développeur Web et Web Mobile · Aurélien Girard

Extrait de la documentation API

Paramètres

Schéma

en gras les champs obligatoires

Requête

Réponse

renvoie l’id de la note de frais créée

Code http

Paramètres

Schéma

Requête

Réponse renvoie le JSON contenant la note de frais

Code HTTP

Points clefs du développement

POST - / nfpapi

{

"fk_user_author": "1", "fk_user_valid": "0", "fk_user": "1", "ref" : "PROV", "dates" : [téléphone], "datee" : [téléphone], "fk_cat": "6", "fk_mode_reglement": "3", “description”: “une description”, “comment_user” : “un commentaire de l’utilisateur’, “comment_admin” : “un commentaire de l’admin”

}

[lien]

31

200 · Note de frais créée

401 · L’utilisateur n’a pas l’autorisation

500 · Erreur lors de la création de la note de frais

GET - / nfpapi / {id}

id · Id d’une note de frais

[lien]

{

"id": "31", "cur_iso": "EUR", "ref": "(PROV31)", "entity": "1", "datec": [téléphone], "tms": [téléphone], "dates": [téléphone], "datee": [téléphone], "datef": [téléphone], "date_valid": "", "fk_user_author": "1", "fk_user_valid": "0", "fk_user": "1", "statut": "0", "fk_soc": "-1", "fk_project": "0", …

}

200 · Ok requête réussi

401 · L’utilisateur n’a pas les droits de lectures sur cette note de frais

500 · Erreur du serveur lors de la récupération des données

Page 24/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Mode de d’authentification

Pour pouvoir accéder aux différents services actifs du Dolibarr depuis le client, les utilisateurs doivent s’authentifier. Pour cela un premier appel vers une URL, en renseignant son login et son mot de passe, est nécessaire. Si les identifiants de connexion sont corrects alors le jeton de l’utilisateur est renvoyé.

Réponse JSON :

Le JSON contenant le statut de la requête (ici 200), le jeton de l’utilisateur. Ce jeton devra être fourni à chaque nouvel appel d’API ensuite, soit en tant que paramètre dans L’URL soit dans le header de la requête HTTP.

Points clefs du développement · Page 25/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Programmation de la classe NdfpApi

Une fois mes différents points d’accès de mon API définis, j’ai pu m’attaquer à la programmation de ceux-ci dans la classe NdfpApi.

J’utilise les annotations dans les entêtes de mes méthodes, pour définir :

  • L’ URI d’accès à ma méthode ainsi que le type de verbe HTTP auquel la méthode répond.
  • Les paramètres et leur type attendu.
  • Les réponses et les codes HTTP possibles en cas d’erreur.

Par exemple pour la méthode postLine() qui permet d’ajouter une ligne de dépense à une note de frais :

Points clefs du développement · Page 26/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Structure du code :

Pour chaque méthode de ma classe NdfpApi, j’ai suivi une même « structure ».

Avant même d’agir sur la base de données, je vérifie les droits de l’utilisateur qui envoie la requête

(l’API à reçu son token dans le header de la requête http ). Si l’utilisateur ne possède pas les droits, une exception est levée et un code d’erreur est renvoyé. Si il possède les droits on poursuit.

Dans le cas d’un requête du type POST ou PUT, je vérifie si les données minimales attendues sont présentes, là aussi en cas d’erreur je lève une exception et renvoie un code d’erreur.

Ensuite, j’utilise les méthodes CRUD ou select de mes ressources pour accéder, créer, modifier ou supprimer les données. La aussi en cas d’erreur lors des requêtes SQL vers la base de données, je lève une exception et retourne un code d’erreur, en l’occurrence un code HTTP 500.

Et pour terminer, si tout est allé pour le mieux, je renvoie une réponse qui peut être un tableau au format JSON (dans le cas des requêtes GET) ou juste l’id de la ressource créée ou modifiée, avec un code HTTP 200

Exemple avec la méthode post() création d’une note de frais :

Points clefs du développement · Page 27/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Exemple d’accès à la ressource type de dépense (liste des dépenses ), méthode getExp() :

la méthode privé fetch qui exécute la requête vers la base de données :

Points clefs du développement · Page 28/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Méthode index qui correspond au GET /ndfpapi/ : Récupération des notes de frais :

Possède de nombreux paramètres pour trier sur la requête SQL ou même de rajouter un critère de recherche à la requête SQL. Elle retourne la liste des notes de frais, ou uniquement celles d’un utilisateur si le paramètre user_ids est renseigné.

Points clefs du développement · Page 29/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Exemple de JSON renvoyer lors d’un GET notes de frais

[

{

"id": "1", "cur_iso": "EUR", "ref": "(PROV1)", "entity": "1", "datec": [téléphone], "tms": [téléphone], "dates": [téléphone], "datee": [téléphone], "datef": [téléphone], "date_valid": "", "fk_user_author": "1", "fk_user_valid": "0", "fk_user": "1", "statut": "0", "fk_soc": "-1", "fk_project": "0", "fk_cat": "5", "fk_mode_reglement": "0", "billed": 0, "total_tva": "[téléphone]", "total_ht": "[téléphone]", "total_ttc": "[téléphone]", "mode_reglement": "", "autoclass": 0, "description": "", "comment_user": "", "comment_admin": "", "lines": [

{

"rowid": "1", "comment": "une dépense ajouter avec un post", "fk_cat": 0, "previous_exp": 0, "ref_ext": "", "fk_ndfp": "1", "datec": [téléphone], "dated": [téléphone], "datef": "", "fk_user_author": "0", "fk_exp": "9", "fk_tva": "[téléphone]", "qty": "1", "rate": "[téléphone]", "cur_iso": "EUR", "total_ht_cur": "[téléphone]", "total_ttc_cur": "[téléphone]", "total_ht": "[téléphone]", "total_ttc": "[téléphone]", "total_tva": "[téléphone]", "tms": [téléphone], "milestone": 0, "label": "Parking", "code": "EX_PAR", "fk_product": "0", "fk_product_type": null,

Points clefs du développement · Page 30/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

"fk_ecm_files": 0,

"fk_vehicle": 0, "tva_tx": "[téléphone]"

}

],

"tva_lines": [], "tax_lines": [], "user_author_infos": "SuperAdmin", "user_validator_infos": "", "ref_ext": null, "status": null, "note_public": null, "note_private": null, "date_creation": null, "date_validation": null, "date_modification": null, "alreadypaid": null

}

]

Points clefs du développement · Page 31/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Essai et vérification du code

L’interface explorer de Dolibarr, liste les différents services API actif et permet d’interagir avec ceux-ci. (accessible avec la route /api/index.php/explorer)

Cette interface permet de tester son code et vérifier la détection par le système des différents endpoints créés.

Elle permet d’interagir avec ceux-ci de la même façon que le client interagira avec eux, avec l’envoi de requêtes avec ou non des données au format JSON.

Ci-dessous les endpoints que j’ai créé pour l’API note de frais.

Points clefs du développement · Page 32/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Test d’une requête :

Toujours à partir de l’interface explorer de l’API Dolibarr, ci dessous le test d’une requête post vers ndfpapi/ 1/ line : ajout d’une ligne de dépense à la note de frais d’id :1

Réponse reçu de l’API : id de la ligne de dépense créée.

Points clefs du développement · Page 33/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Mise en place de la gestion des véhicules utilisateurs

Classe NdfpVehicle

Pour mettre en place la gestion des véhicules des utilisateurs, création d’une nouvelle classe PHP, NdfpVehicle. Cette classe contient les méthodes CRUD (create, read, update, delete) ainsi que les méthodes pour mettre à jour les valeurs kilométriques.

Points clefs du développement · Page 34/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Méthode création d’un véhicule :

voir annexe n° 5 page 56 pour le diagramme de classe NdfpVehicle

Points clefs du développement · Page 35/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Page vehicle.php

Un nouvel écran de gestion des véhicules à été ajouté, pour qu’il soit accessible depuis le menu

Dolibarr, il faut modifier le fichier descripteur de notre module pour indiquer la nouvelle entrée du menu.

Ensuite pour pouvoir accéder à l’environnement Dolibarr depuis la page il faut inclure le fichier main.inc.php ce qui permet d’accéder aux variables suivantes :

  • $user l'objet qui contient les caractéristiques de l'utilisateur et ses droits.
  • $conf l'objet qui contient la configuration de Dolibarr.
  • $db l'objet qui contient le handler de connexion à la base de données.
  • $langs l'objet qui contient la langue de l'utilisateur.

J’ai suivi les recommandations de programmation de Dolibarr pour la création de nouvelle page.

Par exemple l’inclusion de mes classes PHP doit se faire avec une fonction Dolibarr et non pas avec include_once.

De même en suivant les pratiques de Dolibarr, le fichier PHP doit être divisé en trois parties. Une partie inclusion des classes et librairies, ainsi qu’initialisations des objets et des variables.

Points clefs du développement · Page 36/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Une second section « Action » qui correspond au Controller du modèle MVC

Et enfin un troisième section VIEW :

Points clefs du développement · Page 37/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Veille sécuritaire

Concernant la veille sécuritaire, Dolibarr met à disposition des fonctionnalités pour vérifier facilement les droits d’accès de l’utilisateur. Et préconise par exemple d’utiliser les fonctions des librairies Dolibarr pour vérifier les données reçues et pour accéder à la base de données.

Dans le cas de l’accès à l’API :

La classe DolibarrApiAcces récupère la clé d’api dans L’URL ou dans le header de la requête. Si il est présent, elle vérifie que la clé reçue correspond à celle d’un utilisateur.

Après cette vérification, si tout est correct, l’utilisateur alors connecté est représenté par la variable statique $user, ce qui me permet ensuite de vérifier ses droits sur le module en lui même.

La définition des différents droits possibles sur un module est dans le fichier descriptif du module.

Veille sécuritaire · Page 38/56

Développeur Web et Web Mobile

ISFAC Poitiers -2020 / 2021

Recette de fonctionnement

Fonctionnalité

Interagir avec le module note de frais au travers de l’API depuis un client Mobile

Ajouter des justificatifs aux dépenses

Gérer les véhicules personnels des utilisateurs

Correction des bugs et refonte du code légacy

Recette de fonctionnement

Aurélien Girard

Fonctionnelle · Non-fonctionnelle

X

X

X

X

Page 39/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Recherche sur sites Anglophones

Dans le cadre de mon [nom], j’ai eu à effectuer des recherches, notamment en Anglais, pour trouver des informations sur le fonctionnement de L’API Dolibarr et en particulier du bundle

Luracast restler.

Site web utilise :

[lien]

Recherche sur sites Anglophones · Page 40/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Traduction

Vous avez deux options pour créer votre propre serveur d’API REST

  • L’option la plus pratique est d’utiliser un modèle d’application comme « Restler Application » lequel est fourni avec de nombreux paquets qui vous aideront avec votre logique métier. Si vous choisissez cette option, sélectionner une branche dans le dépôt (Github) et procédez en suivant les instructions qui s’y trouvent.
  • Créer un [nom] à partir de zéro, de cette façon vous avez le contrôle sur chaque aspect de votre application. Si vous choisissez cette option, suivez les différentes étapes ci-dessous.
  • Créez un [nom] qui contiendra votre [nom] et ouvrez le dans le terminal.
  • Saisissez « composer init » pour créer le composer.json.
  • Quand cela sera demandé pour les dépendances, saisissez « restler/framework » et « ^5 » pour la contrainte de version.
  • En alternative, vous pouvez laisser les champs vides et créer le composer.json en premier avec lancer : « composer require restler/framework:^5 ».

Recherche sur sites Anglophones · Page 41/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Conclusion du stage

Ce stage fut pour moi, une très bonne expérience. Ce fut l’occasion de mettre en pratique et en valeur les connaissances acquises lors de la formation au sein de l’ISFAC de Poitiers.

Le sujet [nom] fut l’opportunité pour moi de découvrir l’environnement Dolibarr, d’avoir une vision globale de son fonctionnement et vision encore plus précise du fonctionnement d’un module externe grâce à la modification de l’un deux.

Ce stage m’a aussi permis de travailler en équipe, ce qui implique une organisation différente d’un travail en autonomie, tant dans l’organisation des tâches et leur répartition que dans la communication.

De plus, être au contact de professionnels qui ne sont pas forcement dans le développement web, mais dans d’autres domaines de l’informatique m’a permis aussi d’étendre mes connaissances.

Je tiens à remercier nos formateurs, les équipes de l’ISFAC toujours à notre écoute, ainsi que mon

Maître de Stage M. Bertrand Fruchet, qui m’ont permis d’effectuer mon [nom] dans les meilleures conditions.

Conclusion du stage · Page 42/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

ANNEXES

ANNEXES · Page 43/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Conventions dans Dolibarr

Norme PHP

  • Les chaînes doivent avoir les variables sorties de chaîne print "Mon texte affiche ma ".$variable." !\n";
  • Les commentaires doivent suivre la syntaxe C

/* Bloc de commentaire

  • Fin du bloc

*/

$monobjet = new MonObjet($db);

$result=$monobjet->fetch($idobject);

for ($i = 1 , $i < 2 ; $i++)

{

// commentaire sur une ligne print $i;

}

  • Les fonctions doivent retourner une valeur strictement > à 0 en cas de succès, et un nombre < à 0 en cas d'erreur.
  • Pas de code mort (non utilisé) dans le code principal de Dolibarr (le code utilisé uniquement par un module externe doit être inclus dans le module externe).
  • Utiliser "include_once" pour l'inclusion de tout fichier contenant des définitions de fonction ou de classes (donc fichiers *.class.php et *.lib.php), utiliser "include" pour tout inclusion de fichier de type template ou contenant un mixte de HTML et PHP (donc fichiers *.inc.php et *.tpl.php).

Conventions dans Dolibarr · Page 44/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Structures des classes et champs

Certaines propriétés de classes se retrouvent dans de nombreuses classes. Pour homogénéité, on utilisera les noms suivants:

  • entity · that is id for the multicompany feature
  • date_creation: · date of creation
  • date_modification: · date of last modification
  • date_validation: · date validation
  • tms
  • fk_user_creation: · id of user creating object
  • fk_user_modification: · id of user doing modification
  • import_key · qui contiendra le code d'import YYYYMMDDHHMMSS si vous faites des imports en masse dans la table.
  • fk_user_validation: · object User

Normes SQL

  • Structure des tables.

Lorsque vous créez une table, il est recommandé de prendre les même conventions de nommages de tables que les autres tables Dolibarr. Avec, à minima les champs suivant:

  • rowid INTEGER AUTO_INCREMENT PRIMARY KEY · qui est l'id technique
  • entity INTEGER default 1 · that is id for the multicompany feature
  • date_creation · datetime · that is the creation date
  • tms · timestamp · qui sera un champ contenant la date de chaque mise à jour (la base de donnée le gère tout seul, pas besoin de le gérer par le code)
  • import_key · varchar(32) · qui contiendra le code d'import YYYYMMDDHHMMSS si vous faites des imports en masse dans la table.
  • status · smallint · pour stocker le status d'un object
  • Type de champs
  • integer pour tout nombre entier, id ou clé étrangère (bigint éventuellement accepté pour les id des très grosses tables)
  • smallint pour tout numérique entier de petite taille
  • double(24,8) pour tout montant
  • double(6,3) pour les taux de tva
  • real pour une quantité
  • varchar pour une chaine (y compris de longueur 1)
  • timestamp pour un champ date+heure devant être mis a jour automatiquement
  • datetime pour un champ date+heure
  • date pour un champ date

Conventions dans Dolibarr · Page 45/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

  • Clé primaire

La clé primaire d'une table s'appelle rowid.

Il y a quelques tables qui échappent à cette règle actuellement (ex Table llx_c_actioncomm), pour des raisons historiques. Une évolution pourra être étudiée pour une prochaine version.

  • Clés étrangères

Le nom d'une clé étrangère commence par le préfixe fk_ suivi du nom de la table liée (requis pour éviter doublons globales à la base, problématiques sous certains SGBD comme postgresql) puis du champ lié (pour permettre plusieurs clés étrangères différentes sur une même table).

Exemple: fk_facture_fourn_fk_soc

Règles de codage SQL

  • Utilisation des alias/nommage de champs. Dans le cas des select on pourra utiliser les alias pour simplifier l'écriture des requêtes: select chp1, chpxxx2 as chp2 from table2 as t1, table2 as t2 where t1.chpx = t2.chpy
  • Les SELECT * sont interdits ! Chaque SELECT doit spécifier la liste complète des champs à récupérer. Cela permet d'éviter les confusions. Exemple:

SELECT field_a, field_b, field_c FROM table_1 WHERE field_d = '$id'

  • Dans les requêtes SQL, on quote les champs mais pas les numériques qui contiennent des montants destinés à être stockés dans des champs de type double ou real. Les quotes sur les numériques de type float provoquent parfois un stockage d'une valeur différente.

Bon: · INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', 412.62)

Mauvais: INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', '412.62')

  • Les fonctions NOW, SYSDATE ou DATEDIFF sont interdites au sein des ordres SQL. S'il faut saisir la date du moment dans un champ, la valeur doit venir du PHP, par exemple par la fonction dol_now(), et non du moteur de base de données. Ceci afin d'avoir une meilleure portabilité du code mais surtout d'avoir une gestion correcte des TimeZone et ne pas dépendre du TimeZone de la base de donnée.

Par exemple, on ne fera pas:

$sql="SELECT rowid FROM table where datefield = NOW()";

mais:

$sql="SELECT rowid FROM table where datefield = '".$this->db->idate(dol_now())."'";

Conventions dans Dolibarr · Page 46/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Par exemple, on ne fera pas:

$sql="SELECT rowid FROM table where DATEDIFF(table.datefield, NOW()) > 7";

mais:

$sql="SELECT rowid FROM table where datefield < '".$this->db->idate(dol_now() - (7 * 24 *

3600))."'";

Normes HTML

  • Tous les attributs dans les balises HTML doivent être *en minuscule* et quotés avec des *doubles quote*.
  • Les liens href doivent être absolus en se basant sur la fonction dol_buildpath() pour obtenir un chemin absolu depuis un chemin relatif au répertoire htdocs. Pour les tags img, il faut faire appel à la fonction img_picto().

Par exemple:

print '<a href="'.dol_buildpath('/monrep/mapage.php').'">'.img_picto('Texte alt','nompictopng','').'</a>';

Autres Normes Dolibarr

Les nombres réels, montants et calculs

En PHP comme dans d'autres langages (Java par exemple), les données non entières (float, real, double) ne sont pas fiables. Essayer de faire par exemple print [téléphone];

Vous n'obtiendrez pas zéro mais un nombre très petit en puissance de 10 négative. Si vous obtenez zéro, vous pourrez trouvez d'autres exemples qui ne fonctionnent pas. Le problème des float est général, une variable résultante de calcul de nombre réels doit SYSTEMATIQUEMENT être nettoyée par la fonction price2num() avec le 2eme paramètre renseigné à: 'MU', 'MT' ou 'MS' selon le besoin (voir doc fonction).

print price2num[téléphone], 'MT');

S'il ne s'agit pas d'un prix sur lequel s'adapte les paramètres MU, MT ou MS, il faut utiliser la fonction round().

Conventions dans Dolibarr · Page 47/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Ar borescence Module Dolibarr

  • Mymodule/ : contient les pages php
  • mymodule/build/les pages de compilation ou de building
  • mymodule/core/modules/contient le fichier de description du module modMyModule.class.php
  • mymodule/core/triggers contains triggers provided by module
  • mymodule/admin/ contient les pages de paramétrage et d’interface d’administration du module
  • mymodule/class/ contient les class PHP utilisées par le module
  • mymodule/css/ contient les fichiers css utilisé par les pages du module
  • mymodule/docs les documents du module (fichier descriptif)
  • mymodule/img contient les fichiers images utilisé par le module
  • mymodule/langs/xx_XX contient les fichiers langs utilisé par le module pour les traductions
  • mymodule/lib contient les fichiers libraries de fonctions utilisé par le module
  • mymodule/scripts
  • mymodule/sql contient les fichiers sql des tables du modules, chargé à l’installation du module par la fonction init du module descriptor modMyModule,class.php

Arborescence Module Dolibarr · Page 48/56

ISFAC Poitiers -2020 / 2021

Développeur Web et Web Mobile · Aurélien Girard

Modèle physique de données

Nom colonne · TYPE

rowid · INT

cur_iso · TEXT( 3 )

ref · TEXT(30)

entity · INT

datec · DATETIME

dates · DATETIME

datee · DATETIME

datef · DATETIME

fk_user · INT

fk_user_author · INT

statut · INT

fk_soc · INT

fk_project · INT

fk_cat · INT

fk_mode_reglement · INT

billed · INT

previous_exp · INT

total_tva · DOUBLE

total_ht · DOUBLE

total_ttc · DOUBLE

description · TEXT

note_public · TEXT

note_provate · TEXT

tms · TIMESTAMP

date_valid · DATETIME

fk_user_valid · INT

comment_user · TEXT

comment_admin · TEXT

model_pdf · TEXT(255)

Modèle physique de données

TABLE NDFP (TABLE NOTE DE FRAIS)

CP ? · Unique · Not Null · Clé · Remarques

etrangère ?

X · Auto incrément

X

X

X

X

X · X · Ndfp.fk_user = user.rowid

X · X · Ndfp.fk_user_author = user.rowid

X

X · X

X · X

X · Ndfp.fk_cat = c_ndfp_exp_tax_cat.rowid

X · Ndfp.fk_mode_reglement =

c_ndfp_exp_pay_cat.rowid

X

X · X · Ndfp.fk_user_valid = user.rowid

Page 49/56

ISFAC Poitiers -2020 / 2021

Nom colonne · TYPE

rowid · INT

fk_ndfp · INT

comment · TEXT

ref_ext · TEXT(30)

datec · DATETIME

dated · DATETIME

datef · DATETIME

fk_user_author · INT

previous_exp · INT

fk_exp · INT

fk_cat · INT

tva · DOUBLE

qty · INT

cur_iso · TEXT(3)

rate · DOUBLE

total_ht_cur · DOUBLE

total_ttc_cur · DOUBLE

total_ht · DOUBLE

total_ttc · DOUBLE

total_tva · DOUBLE

milestone · INT

tms · TIMESTAMP

Développeur Web et Web Mobile · Aurélien Girard

TABLE NDFP_DET (TABLE LIGNE DE DÉPENSE)

CP ? · Unique · Not Null · Clé étrangère ? · Remarques

X · Auto incrément

X · X · ndfp_det.fk_ndfp = Ndfp.rowid

X

X

X · X · Ndfp.fk_user_author = user.rowid

X · = _c_ndfp_exp.rowid

X · = c_ndfp_exp_atx_cat.rowid

X

X

TABLE C_NDFP_EXP (TABLE DES TYPES DE DEPENSES)

Nom colonne · TYPE

rowid · INT

code · TEXT( 12 )

label · TEXT(48)

tva · DOUBLE

fk_product · INT

active · INT

accountancy_code · TEXT(11)

Modèle physique de données

CP ? · Unique · Not Null · Clé étrangère ? · Remarques

X · Auto incrément

X

X

X

X

Page 50/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile

TABLE C_NDFP_TAX_CAT (TABLE DES CATÉGORIES DE VÉHICULES)

Nom colonne · TYPE · CP ? · Unique · Not Null · Clé étrangère ?

rowid · INT · X

label · TEXT( 48) · X

active · INT · X

fk_parent · INT · X

Aurélien Girard

Remarques

Auto incrément

c_ndfp_tax_cat.rowid

TABLE C_NDFP_EXP_TAX (BAREME POUR CHAQUE TRANCHE KILOMÉTRIQUE)

Nom colonne · TYPE · CP ? · Unique · Not Null · Clé étrangère ?

rowid · INT · X

coef · DOUBLE · X

offset · DOUBLE · X

fk_cat · INT · X · X

fk_range · INT · X · X

TABLE C_NDFP_EXP_RANGE (FOURCHETTE KILOMÉTRIQUE)

Nom colonne · TYPE · CP ? · Unique · Not Null · Clé étrangère ?

rowid · INT · X

range · DOUBLE · X

active · INT · X

fk_cat · INT · X · X

Remarques

Auto incrément

c_ndfp_tax_cat.rowid

c_ndfp_exp_range.rowid

Remarques

Auto incrément

c_ndfp_tax_cat.rowid

Les trois tables ci-dessus avec leur relation, permette de modéliser la table ci-dessous. Qui est le barème Urssaf pour les frais kilométriques.

Modèle physique de données

Page 51/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Extrait code fichier index.php « passerelle » API

$api = new DolibarrApi($db, '', $refreshcache);

//var_dump($api->r->apiVersionMap);

// Enable the Restler API Explorer.

// See [lien] for more info.

$api->r->addAPIClass('Luracast\\Restler\\Explorer');

$api->r->setSupportedFormats('JsonFormat', 'XmlFormat', 'UploadFormat'); // 'YamlFormat'

$api->r->addAuthenticationClass('DolibarrApiAccess', '');

// Define accepted mime types

UploadFormat::$allowedMimeTypes = array('image/jpeg', 'image/png', 'text/plain', 'application/octet-stream');

// Restrict API to some IPs if (!empty($conf->global->API_RESTRICT_ON_IP))

{

$allowedip = explode(' ', $conf->global->API_RESTRICT_ON_IP);

$ipremote = getUserRemoteIP();

if (!in_array($ipremote, $allowedip))

{

dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTRICT_ON_IP);

print 'APIs are not allowed from the IP '.$ipremote;

header('HTTP/1.1 503 API not allowed from your IP '.$ipremote);

//session_destroy();

exit(0);

}

}

// Call Explorer file for all APIs definitions (this part is slow) if (!empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/ swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root'))

{

// Scan all API files to load them

$listofapis = array();

$modulesdir = dolGetModulesDirs();

foreach ($modulesdir as $dir)

{

// Search available module dol_syslog("Scan directory ".$dir." for module descriptor files, then search for API files");

$handle = [lien](dol_osencode($dir));

if (is_resource($handle))

{

Extrait code fichier index.php « passerelle » API · Page 52/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

while (($file = readdir($handle)) !== false)

{

$regmod = array();

if (is_readable($dir.$file) && preg_match("/^mod(.*)\.class\.php$/i", $file, $regmod))

{

$module = strtolower($regmod[1]);

$moduledirforclass = getModuleDirForApiClass($module);

$modulenameforenabled = $module;

if ($module == 'propale') { $modulenameforenabled = 'propal'; } if ($module == 'supplierproposal') { $modulenameforenabled = 'supplier_proposal'; } if ($module == 'ficheinter') { $modulenameforenabled = 'ficheinter'; }

dol_syslog("Found module file ".$file." - module=".$module." - modulenameforenabled=".

$modulenameforenabled." - moduledirforclass=".$moduledirforclass);

// Defined if module is enabled

$enabled = true;

if (empty($conf->$modulenameforenabled->enabled)) $enabled = false;

if ($enabled)

{

// If exists, load the API class for enable module

// Search files named api_<object>.class.php into /htdocs/<module>/class directory

// [lien] : use getElementProperties() function ?

$dir_part = dol_buildpath('/'.$moduledirforclass.'/class/');

$handle_part = [lien](dol_osencode($dir_part));

if (is_resource($handle_part))

{

while (($file_searched = readdir($handle_part)) !== false)

{

if ($file_searched == 'api_access.class.php') continue;

$regapi = array();

if (is_readable($dir_part.$file_searched) && preg_match("/^api_(.*)\.class\.php$/i", $file_searched, $regapi))

{

$classname = ucwords($regapi[1]);

$classname = str_replace('_', '', $classname);

require_once $dir_part.$file_searched;

if (class_exists($classname.'Api'))

{

//dol_syslog("Found API by index.php: classname=".$classname."Api for module ".

$dir." into ".$dir_part.$file_searched);

$listofapis[strtolower($classname.'Api')] = $classname.'Api';

} elseif (class_exists($classname))

{

Extrait code fichier index.php « passerelle » API · Page 53/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

//dol_syslog("Found API by index.php: classname=".$classname." for module ".

$dir." into ".$dir_part.$file_searched);

$listofapis[strtolower($classname)] = $classname;

} else { dol_syslog("We found an api_xxx file (".$file_searched.") but class ".

$classname." does not exists after loading file", LOG_WARNING);

}

}

}

}

}

}

}

}

}

// Sort the classes before adding them to Restler.

// The Restler API Explorer shows the classes in the order they are added and it's a mess if they are not sorted.

asort($listofapis);

foreach ($listofapis as $apiname => $classname)

{

$api->r->addAPIClass($classname, $apiname);

}

//var_dump($api->r);

}

Extrait code fichier index.php « passerelle » API · Page 54/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Exemple mise en place d’un serveur API Restler

Initialisation

Annotation

Exemple mise en place d’un serveur API Restler · Page 55/56

ISFAC Poitiers -2020 / 2021 · Développeur Web et Web Mobile · Aurélien Girard

Diagramme de classe NdfpVehicle

Diagramme de classe NdfpVehicle · Page 56/56

CV anonymisé présenté par NextData · Confidentiel · contact@nextdata.ma ND-CV-05C1B73B

Pour être mis en relation avec ce profil, indiquez la référence ND-CV-05C1B73B : contact@nextdata.ma

Versement dans la GED

Vous devez être abonné pour ouvrir ce CV. Pour vous abonner, contactez-nous : contact@nextdata.ma · Déjà abonné ? Se connecter