PHP : développement de la partie comptable

Contexte

Ce projet personnel encadré se place dans le cadre de l’évolution du système d’information du laboratoire pharmaceutique GSB.

La force de vente du laboratoire pharmaceutique GSB est représentée par les visiteurs médicaux qui visitent les professionnels de santé susceptibles de prescrire à leurs patients les produits du laboratoire GSB.

Les déplacements et les actions des visiteurs médicaux sur le terrain engendrent des frais qui doivent être pris en charge par la comptabilité. Il a été choisi de conserver le principe d’un forfait mensuel pour les visiteurs : frais de nuit d’étape, forfait kilométrique, forfait repas et nuit d’hôtel).  Tout le reste représente les frais hors forfait qui doivent être justifiés auprès du service comptable par l’envoi de justificatifs.

La description du contexte du laboratoire GSB se trouve ici.

Liens utiles

Organisation du travail

La partie comptable a été seul, sous NetBeans et PHPStorm en PHP et MySQL. Le projet a été versionné avec Git et mis en ligne sur la forge GitHub.

Présentation rapide de l’espace des visiteurs (code fourni)

La page de connexion

Page de connexion

La page d’accueil des visiteurs

Page d’accueil

La partie « renseigner la fiche de frais »

Renseigner la fiche de frais

Et la page d’affichage des fiches de frais

Affichage des frais du mois séléctionné

Missions effectuées

Au début de ce projet, seule la partie réservée aux visiteurs était codée.

L’objectif de ce projet a été de développer la partie comptable en PHP selon le modèle MVC. Voici la liste des missions que j’ai effectuées dans le cadre de ce projet :

  • Validation des fiches de frais
  • Suivi du paiement des fiches de frais
  • Production de la documentation
  • Gestion du refus de certains frais hors forfait

Préparatifs

Avant de commencer la mission la première mission, il a fallu préparer l’espace comptable du site. J’ai ajouté dans la base de données, une table « comptable » basée sur le même schéma que la table des « visiteurs médicaux ».

Table créée pour les comptables

Dans laquelle j’ai inséré deux comptables imaginaires. La connexion se fait sur la même page que les visiteurs. C’est en fonction de leur rôle de la personne qui se connecte que le contrôle l’aiguillera sur la partie visiteur ou comptable.

Puis un espace d’accueil des comptables.

Page d’accueil des comptables

Le CSS est géré par Bootstrap 3.3.7

Une fois connecté, le comptable se verra proposé de valider une fiche de frais ou de suivre le paiement des fiches de frais.

Mission « valider la fiche de frais »

Les fiches de frais ont quatre états définis dans la base de données .

Etat des fiches de frais définis dans la base de données

La vue

Pour valider une fiche de frais, le comptable devra d’abord choisir un visiteur dans une liste déroulante

Liste déroulante contenant tous les visiteurs de la base de données

Puis le comptable se verra proposé de choisir parmi la liste de fiches de frais clôturées (état « CL »). Ici, c’est un choix que j’ai fait pour éviter que le comptable ne corrige une fiche de frais en cours ou déjà remboursée. (Ici, il y a un axe d’amélioration en prévenant le comptable lorsqu’il n’y a plus de fiche de frais clôturée pour un visiteur).

Sélection du mois

Une fois le mois et le visiteur choisi, le contrôleur modifie la vue et lui envoie les informations des frais forfait et de frais hors forfait.

Les vues contenant les frais forfait et les frais hors forfait

Aux vues des éléments fournis, le comptable peut

  • Soit corriger les éléments forfaitisés en cliquant sur le bouton « corriger », un bandeau l’informe du bon déroulement de l’opération
Validation des corrections apportées par le comptable
  • Soit « refuser » un frais hors forfait : un popup apparait pour valider le refus :
Popup de validation

Si le comptable valide le refus, le frais est retiré du tableau (reporté au mois suivant) et les informations de rais hors forfait sont mises automatiquement à jour.

Retrait du frais hors forfait sélectionné par le comptable
  • Soit mettre à jour le nombre de justificatifs à l’aide du bouton « mettre à jour », un bandeau apparait pour informer de la bonne exécution de la mise à jour et le nombre de justificatifs est mis à jour.
Confirmation de la mise à jour des justificatifs
  • Soit en cliquant sur le bouton « annuler » revenir à la vue de sélection du visiteur
  • Ou si toutes les informations sont exactes, cliquer sur le bouton « valider », pour mettre la fiche de frais en attente de remboursement (état « VA »). Elle n’apparaitra plus dans la liste de mois du visiteur. Là aussi, un popup demande au comptable s’il souhaite vraiment valider la fiche de frais.
Popup de validation des frais

A l’issue, le contrôleur renvoie le comptable à la page d’accueil et l’informe du bon déroulement de l’opération de validation.

Retour à l’accueil avec information de bonne prise en compte de la validation

Le contrôleur « c_validerFicheFrais.php »

Dans la capture d’écran suivante, nous avons les différentes actions du contrôleur : la sélection du visiteur, la sélection des fiches de frais « clôturées » via la fonction getLesMoisNonValides.

Une partie du contrôleur de validation des frais

On peut également voir la fonction que j’ai créée moisVersFrancais qui convertit les dates issues de la base de données au format « aaaamm » vers le format « mm/aaaa »

La fonction getLesMoisValides

Fonction qui se charge de récupérer les mois dont l’état est « clôturé » (CL)

Et la fonction moisVersFrancais citée plus haut.

Fonction de conversion de date de aaaamm vers mm/aaaa

A chaque fois, le contrôleur récupère l’identifiant du visiteur et le mois de la fiche de frais. Voici la suite des actions gérés par le contrôleur.

Quelques actions du contrôleur

Modèle

Pour valider la fiche de frais, le contrôleur demande au modèle, la classe PDO, de faire les modifications dans la base de données. Notre fiche est passée de l’état clôturée (CL) à l’état validée (VA).

Fonction de validation de la fiche de frais dans la base de données

Ainsi dans la base de données, nous retrouvons l’état « validé » (VA) de la fiche de frais de mois d’avril 2021 du visiteur Villachane (idvisiteur = a131).

Confirmation du changement d’état dans la base de données.

Mission : « suivi du paiement des fiches de frais« 

La vue

Dans notre exemple pour le contrôle des frais, nous avons validé la fiche du mois d’avril du visiteur Villechalane. Nous la retrouvons dans un tableau regroupant toutes les fiches se trouvant dans l’état « validé » (VA). J’ai choisi de classer le tableau par ordre de date décroissant. Le bouton « consulter » permet de choisir la fiche de frais voulue.

Tableau des fiches de frais ayant été validées par un comptable

Et la vue pour consultée une fiche de frais.

Vue résumant tous les frais du visiteur sélectionné

C’est dans la vue, avec les informations reçues du contrôleur que je procède aux calculs.

Calcul des frais inclus dans le forfait
Calcul des frais hors forfait

Le contrôleur « c_suiviPaiement.php »

Code du contrôleur de mis en paiement

Le modèle

En confirmant, le contrôleur envoie les informations au modèle pour mettre à jour la base de données, à l’aide d’une requête préparée.

Fonction mettant en état « remboursé » (RB) d’une fiche de frais

Mission « Production de la documentation »

A l’aide phpDocumentor que j’ai installé sur mon serveur et avec l’aide des commentaires, j’ai pu générer la documentation des fonctions et des classes que j’ai écrites. La documentation gérée se trouve à l’adresse suivante : https://site-en-vrac.com/gsb/doc/

Page de la classe Pdo générée par phpDocumentor

Mission : « Gestion du refus de certains frais hors forfait »

Il est stipulé dans le cahier des charges que lors d’un refus de frais hors forfait, il faut ajouter au libellé : « refusé » et limiter sa longueur à 100 caractères. Voici la fonction « refuserFrais » du contrôleur c_validerFicheFrais.

Fonction « refuserFrais » du contrôleur

J’ai créé une fonction « libelleMax » qui se charge de vérifier et de couper le libellé à 100 caractères en partant de la fin.

Fonction « libelleMax » limitant à 100 caractères un libellé en tronquant par la fin

Mais avant, grâce à la concaténation, j’ajoute le mot « REFUSE : » devant le libellé.

Concaténation du libellé en ajoutant « REFUSE : « 

Ici, j’ai recours au transtypage. Comme j’additionne « 1 » au mois, PHP convertit implicitement la variable « mois » en nombre. Or pour la fonction (fournie) EstPremierFraisMois, j’ai besoin d’une chaîne et non d’un nombre.

Transtypage de la variable « $moisSuivant » en string

Ce qui donne sur le mois suivant le résultat suivant

Exemple de libellé refusé à 100 caractères incluant « REFUSE : « 

Le code source est accessible sur mon dépôt GitHub à l’adresse suivante : https://github.com/olivieerr/gsb

La rapport d’activité au format « pdf » est disponible à cette adresse : PHP : développement de la partie comptable (site-en-vrac.com)