Gestion des salles Orano

Ce projet a été réalisé lors de mon alternance à Orano en tant que Développeur Full Stack pour ma 3ème année d’études à HETIC en Bachelor Développement Web.

J’ai été embauché spécifiquement pour réaliser ce projet, c’était donc mon projet principal bien que j’en ai fait d’autres cette année.
Je n’avais jamais fait de Django avant ça, j’ai appris sur le tas.

Description

Je devais développer un site web répondant à différents besoins :

Réservations

  • Permettre la réservation de salles de formations, parmi 3 bâtiments et plus de 6000 formations.
    • Pouvoir voir / ajouter / modifier / supprimer / partager par mail une réservation.
    • Faire en sorte que les réservations ne se chevauchent pas, barrer les salles indisponibles.
    • Filtrer les salles selon leur bâtiment, leur capacité, si elles sont équipées d’écrans ou d’ordinateurs.
    • Filtrer les jours du calendrier en fonction de la disponibilité des salles.
    • Il est possible qu’une formation ne soit pas dans la base de données, il faut pouvoir saisir manuellement un nom de formation.
    • Pouvoir ajouter un commentaire, qui sera visible par le reste de l’équipe.
    • Pouvoir définir si la réservation sera affichée sur la télé du bâtiment ou non.
  • Pouvoir voir les différentes réservations avec un planning « Jour », « Semaine », « Mois »
    • Voir les informations de la réservation au survol.
    • Les afficher le matin, l’après-midi ou toute la journée en fonction de l’horaire de réservation.
  • Avoir un calendrier personnalisé, où peut switcher facilement de jours, mois, années.

Formations, salles de formations

  • Pouvoir voir / ajouter / modifier / supprimer des données.
  • Filtrer les données à partir d’une barre de recherche et afficher le nombre de résultats.
  • Pouvoir effectuer des actions groupées, pour la suppression par exemple.
  • Pagination

Utilisateurs

  • Pouvoir voir / ajouter / modifier / supprimer des données.
  • Filtrer les données à partir d’une barre de recherche et afficher le nombre de résultats.
  • Pouvoir effectuer des actions groupées, pour la suppression par exemple.
  • Pagination
  • Faire en sorte que l’utilisateur ait un mot de passe fort.

Plan

  • Voir un plan des différents bâtiments.
  • Voir les informations des salles au survol sur le plan.
  • Pour l’un des bâtiments, ajouter une option de zoom.

Accueil

  • Pouvoir voir l’affichage TV.
  • Pouvoir voir / modifier des notes sur les jours du calendrier pour l’équipe.
  • Choisir entre afficher ou non le bandeau TV.
    • Pouvoir modifier le contenu du bandeau TV.
  • Accéder à une page permettant d’imprimer le planning de la semaine afin que les femmes de ménage puissent s’organiser facilement.

TV

  • Afficher les formations du jour, en tenant compte du responsive pour les grands écrans.
  • Afficher le jour, l’heure, les secondes.
  • Ajouter un système de pages qui défile lorsqu’il y a trop de formations en simultané.
  • Ne pas afficher les formations qui sont terminées.
  • Il y a plusieurs types de formations, chacune a sa propre image et sa propre couleur en fonction du bâtiment.
  • Il y a certaines formations à ne pas afficher selon leur bâtiment.
  • L’affichage de la télé doit se mettre à jour automatiquement selon les nouvelles réservations qui sont faites.

Catabase

C’est une partie assez complexe car elle est spécifique à l’entreprise. Pour faire simple, ils ont une base de données avec toutes les formations de l’entreprise, y compris celles qui ne font pas partie du site de La Hague, en Normandie dans un fichier Excel régulièrement mis à jour par l’entreprise.

  • Récupérer les données du Excel et les ajouter à la base de donnée.
    • Filtrer les données pour ne récupérer que celles qui sont utiles.
    • Si une donnée est déjà présente dans la base de donnée, passer à la suivante.
  • Pouvoir glisser-déposer le fichier.

Anomalies

Une anomalie, c’est une information qui concerne l’utilisateur, que ce soit pour le prévenir d’une nouveauté, si une personne a modifier notre réservation par exemple ou lui rappeler une action.

  • Avoir une cloche indiquant le nombre d’anomalies à voir.
  • Un système de vue, qui permet de savoir si on a vu ou non le message.
  • Voir la liste des anomalies, le nombre, avec une pagination.
  • Actions groupées pour voir, supprimer les anomalies, les définir comme lus.
  • En tant qu’admin, on peut voir les anomalies des autres.
  • On peut voir d’où provient l’anomalie, si c’est dû à notre action ou celle d’un autre, la date et l’heure.
  • Si c’est une anomalie qui concerne une réservation, nous rediriger vers celle-ci lors du clic.

Stack technique

Ce projet a été fait en Django. C’était l’outil utilisé par mon chef.
En ce qui concerne le développement, j’étais seul, en autonomie mais il était important de prendre en compte le fait qu’il puisse reprendre le projet une fois partis.

J’ai utilisé Redis pour la mise en cache de certaines informations, comme les réservations ou bien la liste des formations.
Sans ça, le site ramait beaucoup car c’est le genre d’information qu’il faut récupérer à chaque changement de page.

J’ai déployé l’application avec Docker, sur un VPS de chez Hostinger, encore une fois, en totale autonomie mais avec le consentement de mon chef et de l’entreprise bien entendu.

En ce qui concerne le design du site, j’ai été accompagné de Virginie Ferey, chargée d’ingénierie de formation.
Elle s’est occupée des maquettes avant mon arrivée à Orano, elle m’a présentée les besoins des chargés de formations, m’a expliquée les problématiques. On utilisait un outil, fait par l’entreprise, pour gérer le projet sous forme de Kanban.
On avait rendez-vous environ une fois par semaine afin de voir l’avancée du site, voir si le design convenait, le cas échéant je le modifiais directement avec elle.

Résultat

En un an de développement, en alternance (3 semaine entreprise, 1 semaine école), en apprenant à utiliser Django sur le tas, j’ai réussi à répondre à tous ces besoins et même à travailler sur d’autres projets en simultané.

J’ai fait exprès de flouter, retirer certains éléments de l’entreprise.

Réservations

Avant ça, ils devaient passer par pas moins de 7 outils pour faire une réservation. Chercher les formations à la main dans le fichier Excel, connaître plus ou moins de tête les caractéristiques des salles…
Il n’y avait pas de planning pour le ménage, cette fonctionnalité a été ajoutée pour que ce soit plus pratique pour eux en cours de projet.

Formations, salles de formations

Django a sa propre interface d’administration, certes, mais je devais développer une meilleure interface, avec des fonctionnalités personnalisées.
Je me suis inspiré du design de Django si vous la connaissez, en accord avec Virginie Ferey.

Utilisateurs

Plan

Ça permet de facilement avoir des informations sur les salles, connaître leur emplacement.

Accueil

Ça permet de voir les petites notes de l’équipe si besoin, voir l’affichage TV et accéder au planning de la semaine.

TV

Avant, ils devaient créer une image du planning de la journée, la mettre sur une clé USB puis l’afficher sur la télé du bâtiment.
Il n’y avait donc pas de système de pagination qui défile comme ici et ça prenait du temps.

La télé du batîment en question, en entreprise, n’était pas compatible Wifi. J’ai donc installé un Raspberry PI à l’arrière qui se contente d’afficher le contenu de la page TV.

Catabase

Ça a été une partie assez délicate, récupérer les données, filtrer pour ne garder que ce qui nous intéresse, la gestion d’erreur, l’optimisation pour que ce soit le plus rapide possible.
En tout cas, ça fonctionne bien. L’équipe était très contente car, je ne sais pas exactement comment c’était avant, mais ils m’ont expliqué que la récupération des formations leur prenait une demi-journée en temps normal. Ici, quelques secondes.

J’avais fait le test, environ 40 secondes pour tout récupérer en partant de 0.

Anomalies

Il y a certaines tâches spécifiques que je ne peux pas automatiser, le fait de prévenir une personne de leur équipe sur un Excel, ils ont donc une notification pour ne pas oublier.
Mais ça sert aussi à être informé des modifications de réservations et autres. Ils ont d’ailleurs l’information de qui est à l’origine du changement.