Les meilleurs développeurs web freelances sont sur Codeur.com

Package Laravel Gestion créneaux

 Fermé·Moins de 500 €·5 offres·1410 vues·23 interactions


Mission : Création d’un package/module Laravel permettant de gérer les demandes de créneaux horaires.
Il s’agit de créer le code fonctionnel (controllers, models, migrations etc) de ce module ainsi que les views (ne pas s’attacher à la mise en page fine car l’intégration sera faite avec les vues actuelles du projet).

Contexte :Une plateforme permet de gérer au quotidien la gestion d’une paroisse.

Objectif :
Proposer aux crématoriums/pompes funèbres des créneaux pour qu’un célébrant assure la célébration de funérailles.

Le profil Responsable peut
• Suivre, modifier, supprimer des demandes de célébrations
• Ajouter, modifier et supprimer des célébrants
• Définir des affectations types entre les demies journées de chaque jour avec un célébrant
Ajouter, modifier, supprimer des créneaux de célébration

Les profils Crématorium et Pompes funèbres peuvent
Ajouter des demandes de célébrations

Le profil Célébrant peut
Visualiser ses célébrations

Principe général de fonctionnement d’une demande :
Lorsque le formulaire apparait sur la page, tous les champs sont affichés, à l’exception des créneaux horaires.
A la sélection d’une date, (et d'un lieu pour le profil Pompes funèbres) un traitement est exécuté coté serveur en Ajax pour déterminer les créneaux disponibles en fonction de diverses contraintes.
La réponse (JSON) de ce traitement est envoyée dans la page du formulaire.
L’utilisateur peut alors sélectionner un créneau dans une liste déroulante et continuer ainsi la saisie du formulaire et le soumettre.

Caractéristiques et besoins

Il faut pouvoir définir des lieux avec leurs plages horaires journalières acceptant les célébrations

Par exemple pour le lieu Clinique
Plages disponibles :
Lundi : 9:00 à 12:00
Mardi : 9:00 à 12:00
Mercredi : 9:00 à 12:00 et 14:00 à 17:00
Jeudi : 9:00 à 12:00
Vendredi : 9:00 à 12:00
Samedi : 9:00 à 12:00
Dimanche : Néant

Il faut pouvoir définir pour un utilisateur s’il a accès à un ou plusieurs lieux (par exemple, l’utilisateur Crematorium X, ne pourra faire des demandes que pour le lieu Crematorium X; une entreprise de pompes funèbres pourra elle, avoir le choix entre tous les lieux disponibles pour faire sa demande de célébration.

Utilisateur Pompes funèbres A a accès à tous les lieux : Clinique, Hôpital, Chambre funéraire, Crématorium X…
Utilisateur Crematorium X a accès uniquement au lieu Crematorium X

Il faut pouvoir affecter les célébrants aux lieux en définissant la plage horaire de la demie journée ou le célébrant est disponible, le nombre maximum de célébrations qu’il peut honorer pour cette plage horaire et son temps entre 2 célébrations.
Un célébrant peut être affecté à 1 ou plusieurs lieux
L’affectation d’un célébrant est par demie-journée puis par plages horaires de disponibilités

Célébrant 1 est affecté au lieu Hopital le matin et de 9:00 à 11:00 et peut honorer 3 célébrations avec comme paramètre « temps entre 2 célébrations » de 30 minutes.
Célébrant 2 est affecté au lieu Crématorium X l’après midi et de 14:00 à 16:00 et peut honorer 2 célébrations avec comme paramètre « temps entre 2 célébrations » de 20 minutes.
Célébrant 1 est affecté au lieu Crématorium X le matin et de 9:00 à 12:00 et peut honorer 3 célébrations avec comme paramètre « temps entre 2 célébrations » de 30 minutes.

Le paramètre « temps entre 2 célébrations » est une durée de 30 minutes, modifiable pour chaque affectation de célébrant, de façon à permettre au célébrant de se poser entre 2 célébrations, et donc de rendre indisponible les créneaux 30 minutes avant et après celui déjà réservé.

Cas d’un utilisateur ayant le profil Crématorium:

Après connexion de l’utilisateur Crematorium X, il remplit le formulaire de demandes.

Il choisit une date, par exemple Mardi 9 octobre 2019

Le système récupère dans un premier temps les horaires du lieu associé à cet utilisateur, soit le lieu Crematorium X.
Les horaires définis pour ce lieu sont : 9:00 - 9:30 - 10:00 - 10:30 - 11:00 - 11:30 - 14:00 - 14:30 - 15:00 - 15:30 - 16:00

Le système récupère ensuite le/les célébrants affectés à ce lieu et leurs plages horaires.
Célébrant 1 est affecté au Crematorium X et qui peut honorer de 9:00 à 12:00
Célébrant 2 est affecté au Crematorium X et qui peut honorer de 17:00 à 18:00

Un premier tri est effectué en comparant la plage horaire du jour demandé du lieu avec la/les plages horaires du/des célébrants affectés.
Par exemple, une plage horaire d’un célébrant est en dehors de la plage horaire du lieu, il est alors exclu de la sélection
Le Célébrant 2 est exclu

Le système récupère ensuite les célébrations déjà enregistrées pour ce même jour.

Un test vérifie que le total des célébrations demandées n’excèdent pas la limite du nombre maximal que le célébrant peut honorer pour ce jour et ce lieu.
Si c’est le cas, le célébrant en question est exclu de la sélection, et c’est à l’autre célébrant (s’il existe) de subir le test. Si aucun célébrant n’est disponible, un message indiquant que tous les créneaux sont pris, sinon les horaires déjà pris sont exclus ainsi que ceux avant ou après grâce au paramètre « temps entre 2 célébrations » défini pour une affectation d’un célébrant.
Pour ce Mardi 9 octobre 2019, il existe des célébrations à 9:00 et 16:00 pour le célébrant 1
Ces 2 créneaux sont retirés, donc les horaires disponibles deviennent 9:30 - 10:00 - 10:30 - 11:00 - 11:30 - 14:00 - 14:30 - 15:00 - 15:30
Le célébrant 1 a une contrainte de 30 minutes entre 2 célébrations et son nombre maximum de célébrations est fixé à 3, la demande en cours sera donc sa 3eme célébration. Donc, le message indiquant qu’il n’ya plus de créneaux disponibles ne s’affiche pas et par conséquent les horaires disponibles deviennent 10:00 - 10:30 - 11:00 - 11:30 - 14:00 - 14:30 - 15:00 (suppression des créneaux 30 minutes avant et des créneaux 30 minutes après de 9:00 et 16:00)

Au final, après tous ces traitements une liste des créneaux disponibles (10:00 - 10:30 - 11:00 - 11:30 - 14:00 - 14:30 - 15:00 ) est affichée dans le formulaire pour que l’utilisateur Crematorium X en choisisse un et termine le remplissage de celui-ci.

Deux autres scénarios sont a prendre en considération (manque de place ici)

Il faut également rendre possible, dans une table, des indisponibilités ponctuelles.
Par exemple, le célébrant Y est affecté au lieu Clinique le lundi matin de 9:00 à 12:00.

Il prévient le responsable que du 09/12/2019 au 15/12/2019 il part en congés.

Ce responsable rempli un formulaire pour indiquer cette indisponibilité et affecte manuellement un autre célébrant (célébrant Z) pour cette période.

Ainsi lorsqu’une demande est effectuée par un Crématorium ou Pompes funèbres, à la selection de la date, un test supplémentaire est effectué pour savoir s’il existe une indisponibilité du célébrant affecté normalement (célébrant Y). Si non processus normal de vérification des contraintes est effectué, si oui alors vérification des contraintes avec ce célébrant Z de remplacement.

La base de travail est disponible en archive
Décompresser l’archive
Editer fichier .env pour la base de données
Exécuter composer install
Exécuter php artisan key:generate
Exécuter php artisan migrate
Exécuter php artisan db:seed
Nom d’utilisateur : [E-mail visible pour les membres Pro]
Mot de passe : Admin2019

Budget indicatif : Moins de 500 €

Publication : 02 octobre 2019 à 17h24

Profils recherchés : Développeur de plugin freelance, Développeur spécifique freelance, Développeur Symfony freelance, Développeur PHP freelance, Développeur back-end freelance

Le profil du client est reservé aux prestataires abonnés

Créer un compte

5 freelances ont répondu à ce projet

3 propositions de devis en moins de 2h

Publier un projet similaire

Chaque jour, des centaines de clients utilisent Codeur.com pour trouver un prestataire. Créez votre compte dès maintenant, remplissez votre profil et trouvez de nouveaux clients.

Trouver des nouveaux clients

Votre navigateur Web n’est plus à jour. Il ne permet pas d’afficher correctement le site Codeur.com.
Nous vous invitons à mettre à jour votre navigateur ou à utiliser un autre navigateur plus récent.