Application de suivi pour l'entreprise Alexis Léglise Informatique SARL
Périodes: Mars-Avril 2024
L’objectif de ce projet est de concevoir une application web qui permet aux employés de créer et de gérer les clients, les materiels, les prises en charge et les commandes au sein de l'entreprise. Egalement permettre aux clients de suivre l'avancement de la prise en charge de leurs materiels.
Compétences : HTML/CSS (Bootstrap 5.3), PHP, MySQL, JavaScript.
Répondre aux incidents et aux demandes d’assistance et d’évolution.
Mettre à disposition des utilisateurs un service informatique.
Développer la présence en ligne de l’organisation.
Gérer le patrimoine informatique.
Modèle relationel
User (id, email, password, role, companyname, firstname, lastname, adress, postcode, city, phone, lastconnect, createdon)
clé primaire : id
Material (id, iduser, type, brand, model, serialnumber, description, createdon)
clé primaire : id
clé étrangère : iduser référence User(id)
Support (id, idmaterial, idintervenant, description, observation, sessionacces, sessionpassword, accessory, savedata, contact, donate, state, createdon)
clé primaire : id
clés étrangères : idmaterial référence Material(id), idintervenant référence User(id)
Note (id, idsupport, status, note, idintervenant, createdon)
clé primaire : id
clés étrangères : idsupport référence Support(id), idintervenant référence User(id)
Pour gérer l'héritage, j'ai choisi de distinguer les utilisateurs par un attribut "role" dans la table User plutôt que de créer plusieurs tables. Cette approche consiste à intégrer tous les attributs nécessaires pour les deux sous-classes, en utilisant l'attribut "role" pour distinguer les différents types d'utilisateur.
Cette méthode présente des avantages, le plus grand étant qu'elle me permet de réutiliser la base de données client existante qui ne distinguait pas les roles auparavant. Et cela limite le nombre de tables dans la base de données. Également, cette méthode simplifie les opérations de maintenance en uniformisant les données du profil utilisateur.
Les points négatifs sont qu'il y aura plusieurs colonnes "vides" pour les utilisateurs n'ayant pas d'attribut de l'autre sous-classe. Par exemple, la colonne "companyname" reste vide pour la majorité des utilisateurs étant des particuliers. Et cette méthode peut complexifier les requêtes.
Modèle conceptuel
Diagramme des classes

Seulement les utilisateurs avec le rôle d'admin peuvent créer et éditer des prises en charge, c'est également eux qui peuvent ajouter des notes afin d'assurer le suivi. Les admins (les employés de l'entreprise) ont accès aux informations des clients et de leurs matériels. Les utilisateurs clients, eux, ont accès uniquement à leurs informations et à leurs prises en charge personnelles.
Limiter l'accès aux données personnelles est très important pour assurer le respect du Règlement général sur la protection des données.
Pour des raisons de sécurité, le mot de passe de l'utilisateur n'est pas accessible dans la classe User, il est préférable de le stocker uniquement en base de données et de le requêter à chaque fois qu'il a besoin d'être vérifié.
Le mot de passe étant une donnée sensible, le stocker dans une variable objet l'expose aux risques d'être accédé par des logiciels malveillants ou divulgué involontairement dans des logs ou des dumps de mémoire.
Même si les mots de passe ne sont jamais manipulés en "clair" dans l'application, limiter son accès est un axe primordial pour la sécurité des données utilisateur.
Demande spécifique
La mise en place d'une barre de recherche en auto-complétion etait nécessaire pour naviguer vers la fiche des client ou la fiche des materiels via un lien direct. Mais elle pose quelques problèmes d'optimisation.
Pour répondre à ce besoin, j'ai utilisé la technologie AJAX, qui permet d'envoyer des données au serveur et de recevoir une réponse sans avoir à recharger la page entière. Cela améliore significativement l'expérience utilisateur en fournissant une réponse rapide et automatique. Pour éviter une surcharge du serveur due à un trop grand nombre de requêtes il faut mettre en place des stratégies d'optimisation.
Premièrement, j'ai implémenté une fonction appelée "debounce". Cette fonction retarde l'exécution de la requête jusqu'à ce que l'utilisateur ait cessé de taper pendant un intervalle défini. Ainsi, au lieu d'envoyer une requête après chaque caractère saisi, le système attend que l'utilisateur termine ou fasse une pause dans sa frappe. Cela réduit le nombre de requêtes envoyées, limitant ainsi la charge sur le serveur et améliorant les temps de réponse.
Deuxièmement, j'ai configuré le système pour que les requêtes AJAX ne soient activées qu'après que l'utilisateur a entré au moins deux caractères. Cette approche garantit que les requêtes soit suffisamment spécifiques pour renvoyer des résultats pertinents, en réduisant le volume des données interrogées et transférées.
Ces deux méthodes combinées permettent à l'application de fournir un accès rapide et efficace aux données, tout en minimisant l'utilisation des ressources serveur et en évitant les requêtes inutiles ou imprécises. La barre de recherche est à la fois rapide et peu gourmande en performance.
Chaque client, lors de la création d'une prise en charge pour l'un de ses équipements informatiques, reçoit un document récapitulatif en format papier. Ce document détaille la demande du client de manière précise et transparente, en énumérant les services attendus ainsi que les particularités de l'équipement à réparer ou à entretenir. Outre les informations spécifiques à chaque client, le document inclut également les conditions générales de l'entreprise. Ces conditions générales clarifient les droits et les obligations des deux parties, couvrant des aspects tels que la durée de la garantie, les frais de réparation, les délais de traitement, et les politiques de retour ou d'échange.
En travaillant sur des équipements informatiques, l'entreprise attache une grande importance à la protection des données personnelles conformément au Règlement Général sur la Protection des Données (RGPD). Le document précise donc les mesures prises pour garantir la sécurité des informations confidentielles du client, ainsi que les droits de ce dernier concernant la collecte, le traitement, et la conservation de ses données. Cela inclut la possibilité pour le client de demander l'accès, la modification ou la suppression de ses informations personnelles à tout moment.