Académique Documents
Professionnel Documents
Culture Documents
Mémoire
FraniTime : Conception et
réalisation d’un logiciel de gestion
du temps associé à un système de
timbrage
Travail de Bachelor
Préambule
Ce travail de Bachelor est réalisé en vue de l'obtention du titre de Bachelor of
Sciences en Ingénierie.
La cheffe du
Département de la formation
En Emploi
L. Larghi
_______________________________________________________________________________
HEIG-VD, av. Sport 20, 1401 Yverdon-les-Bains
Tél. 024/557 76 09 / 07 Fax : 024/557 76 01
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 4 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 5 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
4. Glossaire
AJAX (Asynchronous JAvascript and Xml) : technologie permettant de rendre
une page web dynamique sans devoir recharger cette dernière.
Canonique : « La mise en forme canonique est le procédé par lequel on convertit
des données qui ont plusieurs représentations possibles vers un format standard. »,
définition sur https://fr.wikipedia.org/wiki/Canonique_(informatique)
Crontab (chrono tab) : table de planification des tâches automatisées sous le
système d’exploitation Linux.
CRUD (Create, Read, Update and Delete) : en français : « créer, lire, mettre à jour
et supprimer ». Désigne les quatre opérations de base dans une base de données.
DMZ (DeMilitarized Zone) : traduite « Zone démilitarisée » est un sous-réseau du
réseau local. Tout appareil se situant dans cette zone est accessible depuis internet
à la différence des appareils dans le réseau local.
Dump : est une copie brute de données. Cela peut-être une copie à l’octet prêt d’un
disque dur. Dans le cadre d’une base de données, c’est la copie contenant la totalité
des informations (structures et données).
GIT : logiciel de gestion de version permettant aux développeurs d’avoir un suivi
sur la progression du code source.
Google Drive : service web permettant de stocker en ligne des documents et de
les partager avec ses contacts.
Hachage : « Fonction permettant de calculer une empreinte unique à partir des
données fournies. », définition sur http://www.culture-informatique.net/cest-quoi-
hachage. À la différence d’un cryptage où l’élément crypté peut être décrypté et
visible, le hachage ne va que dans un sens. Il n’est pas possible de retrouver les
données initiales suite à un hachage.
IDE (Integrated Development Environment) : ensemble d’outils de
développement pour aider à la réalisation d’un projet de programmation.
Image disque : c’est une copie conforme du contenu d’un disque dur mais sous la
forme numérique. Contient les données mais aussi le système d’exploitation.
JSON : « JSON est un format de données textuelles, générique, dérivé de la notation
des objets du langage ECMAScript. Il permet de représenter de l’information
structurée. », définition sur http://fr.wikipedia.org/wiki/JSON.
Media Queries : est un module de CSS (version 3) permettant d’ajouter des règles
selon le support détecté (dimension de l’écran, type d’écran, impression sur
feuille).
NFC (Near Field Communication) : technologie sans fil à courte portée (entre
1cm à 10cm en moyenne)
ORM (Object-Relational Mapping) : technique de programmation permettant de
simplifier l’accès et la mise à jour des données entre une classe (programmation
orientée objet) et une base de données.
QR Code : code barre à deux dimensions pouvant stocker une information sous la
forme d’un lien web, d’une carte de visite virtuelle, d’une configuration wifi, d’un
simple texte, etc.
__________________________________________________________________________________
Page 6 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 7 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
5. Introduction
5.1. Contexte
Franic Technologies SA – mentionné Franic par la suite – est une entreprise spécialisée
dans les domaines de la mécanique, de l’électronique et de l’informatique. Située à Renens
et depuis plus de 20 ans, Franic a su répondre à ses clients au travers de plus de 600 projets
réalisés.
Franic a construit des appareils de contrôle des billets de banque, des panneaux
signalétiques, des télécommandes radio, wifi ou Bluetooth. Il a développé un système de
comptage de parking et de contrôle d’accès, une application de verbalisation des places
de parc.
Depuis un peu plus d’une année, Franic a vu son nombre d’employés ainsi que la quantité
de travail augmenter. Franic souhaite quantifier le temps consacré pour chaque projet mais
aussi contrôler l’horaire de travail de chaque employé.
__________________________________________________________________________________
Page 8 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
6. Objectifs
6.1. Objectifs principaux
Le projet a subi des modifications depuis la pré-étude. Malgré le titre du travail, il n’y aura
plus d’interface de timbrage. Cette décision sera expliquée plus tard.
6.3. Contraintes
Liste des projets et des tâches : la gestion des projets ainsi que des tâches est
gérée dans GestiCom. Il a été nécessaire de me coordonner à Benoît Grendele afin
que l’on puisse connaître les besoins de chacun et définir une structure des
données communes. À savoir que ce que je nomme une tâche est l’équivalent d’une
fabrication dans le projet GestiCom.
Gestion du personnel : À l’inverse des projets et des tâches, la gestion du
personnel s’effectue dans FraniTime. Je dois communiquer les informations
nécessaires à GestiCom. Lors du développement, il y a eu une modification sur le
fonctionnement de cette gestion.
Technologie : Franic ne souhaite pas déployer un système complexe ou
demandant beaucoup d’entretien.
__________________________________________________________________________________
Page 9 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
6.4. Risques
Projet interne, gestion des priorités : les projets développés en interne
comportent un certain nombre de risques. L’un des plus fréquents est le
changement de priorité. Cela survient généralement à la suite d’une augmentation
de la charge de travail au sein de l’entreprise.
Projet interne, modification des objectifs : à la différence d’un contrat ou d’un
mandat avec un client, le cadre d’un projet interne est mal défini et les objectifs
peuvent changer à la dernière minute (il n’y a pas besoin de faire d’avenant).
Gestion des employés à temps partiel : au niveau administratif, la gestion d’un
employé à temps partiel est complexe. Le mandant devra avoir une vision claire sur
ce qu’il souhaite afin de déterminer avec précision les routines de contrôle pour un
employé à temps partiel dans FraniTime.
ORM « maison » : l’utilisation d’un outil développé en interne rend difficile la
reprise du projet par un intervenant externe. L’outil peut aussi comporter des failles
ou devenir obsolète.
__________________________________________________________________________________
Page 10 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
FraniTime comporte un système calendaire afin que l’employeur puisse indiquer les jours
fériés, les congés ainsi que les vacances des employés.
FraniTime est capable de détecter des anomalies tel un timbrage manquant ou une activité
anormale. Il n’y a pas de correction automatique : c’est l’employeur qui décide de l’action
à entreprendre.
L’employeur doit confirmer l’horaire de travail de tous les employés pour chaque journée
de travail.
FraniTime récupère la liste des projets et tâches à partir de GestiCom. À l’inverse,
FraniTime doit fournir les informations sur les employés à GestiCom.
FraniTime doit être accessible depuis n’importe quel poste de travail ou support mobile
connecté sur le réseau de l’entreprise. Un système d’identification personnelle est
nécessaire.
7.2. Rôles
Dans le cadre de ce projet, il existe deux rôles :
Employeur (administrateur) : gestion complète à FraniTime.
Employé (utilisateur) : timbrage personnel et accès aux statistiques personnelles.
7.3. Fonctionnalités
Timbrage
En tant qu’employé, je peux timbrer le début ou la fin d’une tâche.
En tant qu’employé, je peux voir mes timbrages du jour.
En tant qu’employeur, je peux voir tous les timbrages du jour et de tous les
utilisateurs.
En tant qu’employeur, je peux ajouter, modifier ou supprimer un timbrage.
En tant qu’employeur, je peux ajouter un ajustement horaire pour un employé.
En tant qu’employeur, je peux demander au logiciel de recalculer un horaire pour
un employé (suite à une correction).
En tant qu’employeur, je peux valider un horaire journalier.
__________________________________________________________________________________
Page 11 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Gestion du personnel
En tant qu’employé, je peux accéder à mes propres données.
En tant qu’employé, je peux modifier mon numéro de téléphone, mon numéro de
portable, mon adresse email ou mon mot de passe.
En tant qu’employeur, je peux modifier toutes les informations concernant un
employé.
En tant qu’employeur, je peux réinitialiser le mot de passe d’un utilisateur.
En tant qu’employeur, je peux ajouter ou supprimer un employé.
Statistiques
En tant qu’employé, je peux accéder à mes statistiques hebdomadaires et
mensuelles.
En tant qu’employeur, je peux accéder à toutes les statistiques hebdomadaires et
mensuelles.
__________________________________________________________________________________
Page 12 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 13 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Tous les jours, l’employeur doit quittancer l’horaire de tous les employés (avec ou sans
anomalies).
__________________________________________________________________________________
Page 14 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
8. Contraintes et solutions
8.1. Interface de timbrage
Contraintes
Dans un premier temps, il faut déterminer le moyen d’effectuer un timbrage et après
choisir une interface capable de saisir les timbrages. Il existe diverses technologies
comme le RFID, le NFC, le code-barres ou le QR Code. Chaque timbrage doit être lié à un
utilisateur mais aussi à une tâche. Chacune de ces technologies a des avantages mais aussi
des inconvénients.
L’utilisation d’une puce sans fil est très pratique si l’on souhaite attribuer uniquement un
utilisateur par badge. Le fait d’ajouter l’identification d’une tâche devient plus complexe :
procédé à double timbrage – un pour l’utilisateur et un autre pour la tâche – ou procédé
avec une puce unique par tâche et par utilisateur, mais l’on augmenterait la quantité de
puces nécessaire. Il faut aussi mettre en place un système d’attribution des puces.
L’utilisation d’un code-barres est plus pratique car il n’a pas le besoin d’être attribué : le
code-barres est généré selon l’identification.
Solution
Suite à plusieurs discussions avec Franic, nous sommes arrivés à la conclusion que
l’identification des tâches peut s’avérer compliquée tant pour les employés que pour le
responsable devant s’occuper de l’attribution du personnel aux différentes tâches.
Sachant que chaque employé a accès à un poste de travail ou à un support mobile connecté
au réseau de l’entreprise, Franic a décidé d’abolir l’interface de timbrage et d’utiliser une
plateforme web. Chaque utilisateur s’identifie, sélectionne une tâche et timbre.
__________________________________________________________________________________
Page 15 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
FraniTime a besoin de la liste des projets ainsi que des tâches (nommées fabrications dans
GestiCom).
GestiCom a besoin de la liste des utilisateurs ainsi que le décompte horaire pour chaque
tâche.
Solution
Suite aux décisions sur la technologie utilisée pour GestiCom et FraniTime, tous deux
utilisent du PHP avec une base de données MySQL. De cette situation, avec Benoît
Grendele, nous avons décidé d’utiliser une base de données commune et d’utiliser les
données des tables concernées directement.
Pour la suite, dans le cas où un programme externe devrait accéder aux données de
FraniTime comme GestiCom, nous avons décidé de mettre en place un service REST.
Solution
Sur une volonté de bien faire, j’ai accordé trop d’importance sur ce point. Avec l’accord
de Franic, il n’est plus question de gérer la planification de ses employés. FraniTime est
un logiciel permettant de saisir des timbrages et de calculer l’horaire de travail. Un
système d’alerte simple sera mis en place telles les absences ou la détection d’un grand
nombre d’heures supplémentaires.
__________________________________________________________________________________
Page 16 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
9. Environnement de travail
9.1. Choix technologique
Dépendant au souhait de Franic d’utiliser un serveur avec peu de maintenance et pas trop
complexe à mettre en place, je me suis dirigé sur un langage de programmation libre.
Ayant développé un ORM à l’école sous Java, j’ai souhaité reproduire la même chose sous
PHP et en faire un outil de développement rapide pour mes projets personnels.
Dans le cadre de ce projet, j’ai naturellement opté pour le PHP en utilisant cet ORM afin de
tester son efficacité sur un projet concret et de plus grande envergure.
Le logiciel pouvant être accessible depuis un support mobile, j’ai utilisé Bootstrap afin de
rendre le site responsive design.
Risques
Le choix d’utiliser un ORM « maison » n’est pas sans risque. Premièrement, peu de
personnes maîtrisent l’outil (actuellement, limité à moi-même). Il y a un risque
d’obsolescence même si actuellement, je l’utilise sous PHP 5 et PHP 7. Deuxièmement, en
termes de sécurité, j’ai appliqué différentes protections mais n’étant pas un expert
sécurité, l’outil pourrait contenir des failles malgré l’usage simple.
Malgré ces risques, l’intérêt de cet outil est la compréhension du fonctionnement d’un ORM
ainsi que son application dans un cas concret.
Les capacités de cette machine ne sont pas exceptionnelles mais sont largement suffisantes
pour l’utilisation de FraniTime et de GestiCom.
L’utilisation d’un Raspberry Pi est aussi due à plusieurs points avantageux :
__________________________________________________________________________________
Page 17 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Lors du développement, le logiciel a été testé depuis un ordinateur avec les navigateurs
suivants : Firefox, Google Chrome et Edge. Pour la partie mobile, cela a été testé depuis
un Sony Xperia M4 Aqua et un iPhone 4S ou simulé sur Firefox ou Google Chrome.
Afin de faciliter la création de la documentation, je développe selon une structure qui est
définie par le programme Doxygen. Ce dernier permet de générer la documentation d’un
projet de développement.
Pour ce qui est de la gestion de version, j’utilise GIT et synchronise les données sur un
serveur Gitlab mis en place par Franic.
__________________________________________________________________________________
Page 18 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
10. Planification
10.1. Segmentation du travail et description
La segmentation diffère légèrement de la pré-étude.
__________________________________________________________________________________
Page 19 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 20 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
______________________________________________________________________________________________________________________________
______________________________________________________________________________________________________________________________
Page 21 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
______________________________________________________________________________________________________________________________
______________________________________________________________________________________________________________________________
Page 22 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 23 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Simulation de timbrages et contrôle des valeurs. Pour chaque test, la ligne 1 est l’heure du
timbrage, la ligne 2 la tâche affectée, la ligne 3 si le chrono est actif ou pas (la fiche
complète des tests se trouve en annexe)
Lors d’une réunion avec Benoît Grendele, il m’a demandé la possibilité d’utiliser un
module Symfony pour la gestion des utilisateurs : FOS Users.
Suite à quelques analyses sur le fonctionnement de ce module, j’ai accepté la demande de
Benoît Grendele. Au niveau de l’interface utilisateur, il n’y a pas de différence. Sont
impliqués les classes utilisateurs et groupes ainsi que les tables dans la base de données.
Voici la liste des modifications effectuées :
Suppression de la classe Group qui n’a plus d’utilité. La gestion d’accès s’effectue
par une requête SQL sur le champ « roles ».
Ajout de plusieurs champs pour la classe Utilisateur.
Modification du hachage du mot de passe utilisateur
__________________________________________________________________________________
Page 24 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Le hachage du mot de passe nécessite un champ « salt » pour le salage du mot de passe.
Voici la procédure pour saler le mot de passe dans FOS User.
Basé sur FOS Users, voici le code permettant de hacher un mot de passe
FOS User donne une certaine liberté pour le nom d’utilisateur ainsi que l’adresse email. En
contrepartie, le module ajoute deux champs dit canoniques afin que le nom d’utilisateur et
l’adresse email soient dans un format standardisé. Pour cela, lorsqu’un employé modifie
son adresse email, je dois effectuer une double mise à jour : une pour le champ « libre » et
l’autre pour le champ « canonique ».
Commentaire au format Doxygen et déclaration d’une méthode avec le style BSD KNF
__________________________________________________________________________________
Page 25 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Le dossier « core » contient l’ORM « maison », dans ma gestion de version GIT, ce dossier
est un sous-module GIT pointant sur le projet original de l’ORM.
Le dossier « docs » contient la documentation HTML générée par Doxygen.
Le dossier « sql » contient la structure de la base de données. Chaque classe a son fichier
SQL. Il y a aussi deux autres fichiers : « database.sql » qui permet de créer une base de
données et un utilisateur pour le projet et « structure.sql » qui permet de créer toute la
structure de la base de données en une fois.
Le dossier « src » contient le code source du projet. Les fichiers sont placés selon une
convention.
Type de fichier Nom du fichier Répertoire par défaut
Classe x.class.php /src/system/classes/
Interface x.interface.php /src/system/classes/
Modèle de vue x.template.php /src/pages/
Vue x.page.php /src/pages/
Test x.test.php /tests/
Règles de nommages des fichiers selon le type
Le dossier « tests » contient les tests effectués ainsi que les résultats.
Lors du déploiement, seul le contenu du dossier « src » sera placé à la racine du serveur
web. Les dossiers « core » et « /src/system » devraient être placés dans un répertoire non
accessible au public. Le cas échéant, il faudrait placer un fichier .htaccess afin d’interdire
l’accès à ces derniers.
__________________________________________________________________________________
Page 26 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Ces règles sont définies par l’administrateur du serveur et sous la forme d’un RegEx. Dans
mon projet, voici ce que j’ai défini. Il est possible d’accéder à ces règles depuis le fichier
/src/.htaccess dans mon projet.
Remarque : il est possible d’utiliser plusieurs paramètres en les séparant par un tiret ‘-‘.
Exemple : http://www.nhuvo.ch/Timbrage-von-23 qui équivaut à
www.nhuvo.ch/index.php?page=Timbrage&a=von&b=23
__________________________________________________________________________________
Page 27 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Requêtes CRONJOB
Code RegEx /^~([A-Z]{1}[A-Za-z0-9]*)$/
Appel cron.php?job=$1
Règles 1. Commence par le caractère ‘~’ (tilde)
2. Suivi d’une lettre majuscule
3. Peut être suivi par une chaîne contenant des
lettres et des chiffres
URL modifiée http://www.nhuvo.ch/~ControleJournalier
URL réelle http://www.nhuvo.ch/cron.php?job=ControleJournalier
Service REST
Code RegEx /^!([A-Z]{1}[A-Za-z0-9]*)$/
Appel rest.php?command=$1
Règles 1. Commence par le caractère ‘!’ (exclamation)
2. Suivi d’une lettre majuscule
3. Peut être suivi par une chaîne contenant des
lettres et des chiffres
URL modifiée http://www.nhuvo.ch/!Utilisateur
URL réelle http://www.nhuvo.ch/rest.php?command=Utilisateur
Remarque : Seule la commande est envoyée par méthode GET. Les données
complémentaires sont envoyées par méthode POST.
__________________________________________________________________________________
Page 28 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 29 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
12.5. Classes-métier
Le développement s’effectue avec du PHP. Je fais de la programmation orientée objet et
utilise des classes. Le nom des classes, variables, méthodes sont en anglais mais les
commentaires sont en français. Voici la liste de toutes les classes-métier utilisées durant le
projet.
__________________________________________________________________________________
Page 30 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 31 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 33 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
En suivant le processus décrit ci-dessus, FraniTime est capable de calculer tous les
horaires journaliers pour un employé ainsi que calculer le temps de travail pour chaque
tâche.
__________________________________________________________________________________
Page 34 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Suivant ce même schéma, il m’est possible d’avoir un aperçu de l’état actuel pour chaque
utilisateur. Cela m’a permis d’ajouter un résumé de la journée sur la page de timbrage afin
que chacun puisse suivre l’évolution de son travail.
Aperçu des timbrages du jour avec l’indication de la durée de travail validée. La colonne
« État » indique si l’employé est en train de travailler. La barre avec le pourcentage indique
le taux de travail effectué pour une journée (8h30)
Suite au calcul temporaire pour l’aperçu, FraniTime récupère aussi l’état de l’employé : s’il
travaille actuellement. De cela, le logiciel peut proposer à l’employé d’arrêter sa tâche en
cours afin d’éviter qu’il doive aller chercher dans la sélection par défaut.
Saisie d’un timbrage par un employé. Il sélectionne un projet et une fabrication (tâche). Si
l’employé travaille, il peut cliquer sur le bouton « Arrêter » pour terminer la tâche actuelle
Actuellement, il existe deux méthodes très semblables. L’une pour effectuer le calcul
horaire ainsi que la détection des anomalies et l’autre ne contenant que les données du
calcul horaire temporairement. Une optimisation du code source est nécessaire à ce point.
__________________________________________________________________________________
Page 35 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 36 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
C’est ici que l’employeur pourra voir la liste des anomalies. Ces dernières doivent être
traitées au cas par cas.
Il peut ajouter ou supprimer des timbrages afin de corriger les anomalies. Il peut aussi
mettre un commentaire à un calcul journalier afin d’avoir des détails sur une anomalie.
__________________________________________________________________________________
Page 37 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
12.9. Statistiques
Chaque employé peut accéder à ses propres statistiques. Il existe deux types de
statistiques : hebdomadaires et mensuelles.
Il est possible de voir sous la forme d’un graphique la situation actuelle par rapport à ses
heures ainsi que la liste des calculs journaliers.
L’employeur aura la possibilité de sélectionner un employé afin de voir les statistiques de
ce dernier.
Chaque vue des statistiques a été optimisée pour l’impression sur papier. La méthode
utilisée est expliquée ci-après (Media Queries).
Pour générer le graphique, j’ai utilisé la librairie Chart.js basée sur du jQuery.
__________________________________________________________________________________
Page 38 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Dans mon projet, j’ai utilisé cette technologie pour l’impression des statistiques. Je cache
les informations inutiles comme la barre de navigation, le titre de la page et le pied de
page. Il ne reste ainsi que l’essentiel : le graphique de la situation actuelle ainsi que la liste
des calculs journaliers.
__________________________________________________________________________________
Page 39 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
J’ai développé un script JavaScript qui traite les formulaires. Cette technique est aussi
appliquée pour le chargement dynamique des données dans une page web. Par exemple,
lors d’un timbrage, l’employé doit choisir un projet puis une tâche. À chaque fois que le
projet change, la page fait appel à un formulaire invisible afin de charger la liste des tâches
du projet sélectionné.
Chaque fois que l’évènement « submit » d’un formulaire est appelé, j’utilise le jQuery pour
bloquer l’envoi du formulaire pour préparer une requête AJAX. Dans chaque formulaire,
j’ai placé un champ caché nommé « ax » qui équivaut à une commande pour que le serveur
sache quoi faire avec les données reçues.
__________________________________________________________________________________
Page 41 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
1. À la demande d’envoi d’un formulaire, le client web bloque l’envoi des données.
2. Le client web récupère les informations du formulaire appelé et les prépare pour
une requête AJAX.
3. Le client web exécute la requête AJAX qui envoie les données sur le serveur sans
changer la page web. Un script désactive tous les champs du formulaire le temps
d’exécuter la requête.
a. En cas de connexion impossible au serveur, les champs sont libérés et la
page indique un problème avec le serveur.
4. Le serveur reçoit les données et contrôle si la commande existe.
a. Si la commande n’existe pas, le serveur renvoie une erreur. Le client web
libère les champs du formulaire et indique une erreur.
5. Le serveur traite la commande et retourne le résultat (des données ou simplement
une indication de réussite).
6. Le client web reçoit la réponse et la traite.
Pour le traitement des requêtes AJAX du côté serveur, j’ai décidé que chaque vue pouvant
faire appel à une requête AJAX puisse gérer la requête elle-même. Au niveau du code
source, la vue comporte les lignes suivantes afin de séparer une requête AJAX d’une
demande d’accès à la page web.
Un autre moyen de traiter les requêtes AJAX est d’utiliser l’URL rewriting. La requête aura
une adresse particulière par exemple http://www.nhuvo.ch/@MaRequeteAJAX avec le
caractère ‘@’ pour indiquer que c’est une requête AJAX.
On centralise ainsi toutes les demandes dans un seul et unique fichier.
__________________________________________________________________________________
Page 42 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Actuellement, l’utilisation est simpliste mais elle permet de récupérer des données ou d’en
envoyer.
Les commandes s’écrivent directement dans l’URL et les données à envoyer doivent l’être
par la méthode POST.
Voici la liste des commandes actives :
__________________________________________________________________________________
Page 43 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
La gestion des commandes REST s’effectue dans le fichier /src/rest.php. Il est possible
d’ajouter d’autres commandes plus tard. Les tests ne nécessitant pas l’envoi de données
peuvent être directement testée dans le navigateur. Pour les autres cas, des fichiers tests
avec un formulaire sont placés dans le répertoire /tests/ et ont un nom commençant par
« rest ».
Plus tard, si le besoin existe, il est possible d’ajouter un système d’authentification afin de
sécuriser l’accès aux données. Voici un petit processus d’identification :
__________________________________________________________________________________
Page 44 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
__________________________________________________________________________________
Page 45 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
Suite à cela, nous avons rencontré un problème avec le dossier « cache » généré par
Symfony ainsi que des fichiers manquants (dossier vendors et librairie FontAwesome).
Après quelques recherches, nous avons pu tout déployer sur le serveur Franic.
Conclusion, cela fonctionne mais surtout, la gestion des utilisateurs, des projets, des tâches
ainsi que des calculs horaires des tâches est synchronisée entre les deux applications.
Les logiciels GestiCom et FraniTime sont disponibles sur un serveur web public afin que
le conseiller et l’expert puissent les tester. Ces logiciels sont disponibles jusqu’à la
défense orale.
Afin de prouver l’authenticité des projets ainsi que la version déployée pour le 23
septembre 2016, je mentionne ci-dessous les accès au serveur FTP ainsi qu’à la base de
données MySQL. Une copie des logiciels ainsi qu’un dump de la base de données MySQL
en date du 23 septembre 2016 sont déposés sur les CD remis en même temps que ce
rapport.
FraniTime GestiCom
http://www.nhuvo.ch/HEIG/FraniTime/ http://www.nhuvo.ch/HEIG/GestiCom/
Accès administrateur
Nom d’utilisateur : admin
Mot de passe : admin
Accès employé
Nom d’utilisateur : employe
Mot de passe : employe
Accès FTP
Serveur : ftp://www.nhuvo.ch
Nom d’utilisateur : fcuu_heig
Mot de passe : FranicHEIG
Accès à la base MySQL
Serveur : fcuu.myd.infomaniak.comNom de la base : fcuu_heig
Nom d’utilisateur : fcuu_heig
Mot de passe : FranicHEIG
PHPMyAdmin : https://h2-
phpmyadmin.infomaniak.ch/MySQLAdmin/?pma_servername=h2mysql2&pma_usernam
e=fcuu_heig
__________________________________________________________________________________
Page 46 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
13.2. Améliorations
Vues calendaires
Le design des calendriers est probablement le travail que j’ai le moins soigné. Il est
possible d’utiliser des librairies afin de personnaliser l’affichage d’un calendrier, mais je
n’ai pas effectué de recherche dans ce domaine.
Service après-vente
Franic effectue des dépannages externes. Il serait intéressant de mettre en place un
système de pointage pour du service après-vente. Je pourrais ajouter une section
dépannage où l’employé choisi un projet ou une tâche pour débuter un dépannage. Dès
qu’il a fini son activité, il clôture son travail. Le temps est directement calculé et enregistré
dans le système. GestiCom pourrait profiter de ces informations pour avoir des données
supplémentaires.
Planification
Actuellement, l’employeur peut indiquer les vacances des employés mais il n’y a pas de
gestion de doublon ou de contrôle sur la quantité. Comme mentionné dans mon travail, ce
projet a pour but de gérer les timbrages et non de planifier l’horaire de travail des
employés (voir la problématique des employés à temps partiel). Mais pourquoi ne pas
implémenter cela dans une deuxième phase ? Gestion des vacances, planification des
jours de travail pour les employés à temps partiel, gestion des absences (quota).
Un exemple en relation avec le service après-vente. Lors d’une tâche, le technicien place
une puce NFC dans la construction. Franic installe le matériel chez le client. Trois mois
après, il y a une panne et un employé est envoyé. Dès qu’il arrive sur place, il place son
mobile près de la puce et il démarre son dépannage. Il fait de même lorsqu’il a fini de
travailler : plus besoin d’aller sur la plateforme web et chercher la fabrication.
__________________________________________________________________________________
Page 47 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
14. Conclusion
Ce projet a retenu mon attention sur deux points : la définition du cahier des charges et le
calcul horaire.
Au final, après quatre ans d’études à la Haute École d’Ingénierie et de Gestion du Canton
de Vaud, ce travail a confirmé mon choix de poursuivre mon parcours professionnel dans
le domaine de l’informatique mais aussi de faire de la gestion de projet. La définition
d’objectifs clairs ainsi qu’une bonne communication avec le mandant sont cruciales pour
la réussite d’un projet. Les outils tels la gestion de version, les tests unitaires ainsi que les
schémas UML m’ont aidé à avancer tout au long du développement du logiciel.
__________________________________________________________________________________
Page 48 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
15. Remerciements
Je remercie Monsieur Laurent Francey pour m’avoir accordé sa confiance pour la
réalisation de ce travail ainsi que du soutien qu’il m’a apporté tout au long de ce travail.
Je remercie Monsieur Patrick Lachaize d’avoir accepté d’être mon conseiller, de sa
disponibilité et de ses conseils.
Je remercie ma chère et tendre femme Jessica pour sa lecture et correction de mon
mémoire et pour son soutien.
__________________________________________________________________________________
Page 49 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
16. Authentification
Le soussigné, Nhu-Hoai Robert Vo, atteste par la présente avoir réalisé seul ce travail et
n’avoir utilisé aucune autre source que celles expressément mentionnées, si ce n’est les
connaissances acquises durant ses études et son expérience acquise dans une activité
professionnelle.
N.-H. R. Vo
__________________________________________________________________________________
Page 50 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
17. Bibliographie
LAWSON Bruce, SHARP Remy, Introduction à HTML 5, Paris, Pearson, 2011.
HONDERMARCK Olivier, Javascript le guide complet, Paris, Ma Editions, 2011.
17.1. Webographie
http://www.alsacreations.com/article/lire/930-css3-media-queries.html
Explication et exemples sur le Media Queries
https://httpd.apache.org/docs/2.2/fr/
Documentation sur Apache
http://davidwalsh.name/detect-ajax
Code de détection d’une requête AJAX dans PHP
http://www.developpez.net/forums/
Site d’entraide pour développeurs
http://fontawesome.io
Téléchargement et documentation de la librairie Font Awesome
http://getbootstrap.com
Téléchargement et documentation de la librairie Bootstrap
https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/User.
php
Classe utilisateur dans FOS User
http://jquery.com
Téléchargement et documentation de la librairie jQuery
http://www.jquerybyexample.net/2012/06/show-only-month-and-year-in-jquery-
ui.html
Comment afficher uniquement le mois et l’année dans un datepicker
http://jqueryui.com
Téléchargement et documentation de la librairie jQuery
http://dev.mysql.com/doc
Documentation sur les commandes SQL dans MySQL
http://www.php.net
Documentation sur le langage PHP
https://www.smartapp.com/gantterforgoogledrive/
Outil gestion de projet pour réaliser un graphique de Gantt
http://stackoverflow.com
Site d’entraide pour développeurs
http://stackoverflow.com/questions/26699811/encryption-password-
fosuserbundle
Fonctionnement du hachage du mot de passe pour FOS User
http://stackoverflow.com/questions/320357/safe-width-in-pixel-for-printing-web-
pages
Dimension idéale pour l’impression d’une page HTML
https://www.startutorial.com/articles/view/how-to-build-a-web-calendar-in-php
Idée sur le développement d’une gestion calendaire (non utilisée)
__________________________________________________________________________________
Page 51 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
http://www.w3schools.com/js
Documentation sur le langage JavaScript
http://www.w3schools.com/cssref/css3_pr_mediaquery.asp
Utilisation du Media Query dans CSS3
http://www.wikipedia.org
Utiliser principalement pour les définitions
__________________________________________________________________________________
Page 52 sur 53
Nhu-Hoai Robert VO 23.09.2016
Travail de diplôme FraniTime Mémoire
__________________________________________________________________________________
18. Annexes
18.1. Simulation de timbrage
07:00 Total T1
Test 1 T1 00:00 00:00
ON NOK
__________________________________________________________________________________
Page 53 sur 53
Nhu-Hoai Robert VO 23.09.2016