| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- namespace App\Service\OnlineRegistration;
- use App\Entity\AccessWish\AccessWish;
- use App\Entity\Access\Access;
- use App\Service\Utils\DatesUtils;
- use App\Enum\OnlineRegistration\RegistrationStatusEnum;
- use App\Enum\OnlineRegistration\WishRegistrationEnum;
- /**
- * --- SERVICE INUTILISE POUR LE MOMENT ---
- * Fournit le statut de l'enregistrement en ligne d'un Access
- */
- class RegistrationStatusService
- {
- /**
- * Temps de validité du statut (en jours)
- * (correspond au temps d'affichage de l'avertissement dans l'application)
- */
- const DISPLAYING_TIME = 30;
- public function __construct(
- private OnlineRegistrationService $onlineRegistrationService
- ) {}
- /**
- * Détermine er retourne le statut de l'enregistrement en ligne d'un Access.
- *
- * @param Access $access
- * @return string|null
- */
- public function getStatus(Access $access): string | null {
- $currentAccessWish = $this->onlineRegistrationService->getCurrentAccessWish($access);
- if ($currentAccessWish === null) {
- // TODO: est-ce qu'il ne faudrait pas plutôt lever une erreur ici plutôt que de retourner null?
- return null;
- }
- if (!$currentAccessWish->getAccessFamilyWish()->isRegistrationCompleted()) {
- // TODO: est-ce qu'on ne retournerait pas un statut incomplet plutôt que null?
- return null;
- }
- $wishesCountByStatus = $this->countEducationsByRegistrationStatus($currentAccessWish);
- if ($wishesCountByStatus === null) {
- // TODO: est-ce qu'il ne faudrait pas plutôt lever une erreur ici plutôt que de retourner null?
- return null;
- }
- $hasNegotiable = $wishesCountByStatus[RegistrationStatusEnum::NEGOTIABLE()->getValue()] > 0;
- $hasAccepted = $wishesCountByStatus[RegistrationStatusEnum::ACCEPTED()->getValue()] > 0;
- $hasPending = $wishesCountByStatus[RegistrationStatusEnum::PENDING()->getValue()] > 0;
- $hasDenied = $wishesCountByStatus[RegistrationStatusEnum::DENIED()->getValue()] > 0;
- // Après acceptation ou refus, le bandeau est affiché pour une durée de 30 jours.
- if(
- !$hasNegotiable && ($hasAccepted || $hasDenied) &&
- $this->getDaysSinceLastUpdate($currentAccessWish) > self::DISPLAYING_TIME
- ) {
- // TODO: est-ce qu'on ne retournerait pas ici un statut EXPIRED par ex?
- return null;
- }
- if (!$hasAccepted && !$hasPending && $hasNegotiable) {
- // La demande est dans la liste des inscriptions en ligne et n'a pas été traitée par l'administration
- return RegistrationStatusEnum::NEGOTIABLE()->getValue();
- }
- else if ($hasPending && !$hasAccepted) {
- // La demande est dans la liste des inscriptions en ligne car l'administration a mis "En attente" à au moins l'un des enseignements.
- return RegistrationStatusEnum::PENDING()->getValue();
- }
- else if ($hasAccepted)
- {
- // La demande a été traitée par l'administration. L'élève a été accepté pour au moins l'une de ses activités.
- // Et il a été placé dans la liste des "Inscriptions rentrée prochaine".
- return RegistrationStatusEnum::ACCEPTED()->getValue();
- }
- else if ($hasDenied && !$hasNegotiable) {
- // La demande a été traitée par l'administration. L'élève n'a pas été accepté dans l'établissement.
- // Il est dans la liste des "Inscriptions en ligne" avec le statut "Refusé" sur tous ses enseignements.
- return RegistrationStatusEnum::DENIED();
- }
- // TODO: est-ce qu'il ne faudrait pas plutôt lever une erreur ici plutôt que de retourner null?
- return null;
- }
- public function getDaysSinceLastUpdate(AccessWish $accessWish): int {
- $lastUpdate = $accessWish->getAccessFamilyWish()->getUpdateDate();
- return DatesUtils::daysSince($lastUpdate);
- }
- /**
- * Retourne le décompte des souhaits de l'utilisateur par RegistrationStatus, ou null si aucun souhaits.
- *
- * @param AccessWish $currentAccessWish
- * @return array<string, int> | null
- */
- protected function countEducationsByRegistrationStatus(AccessWish $currentAccessWish): array | null {
- $wishes = $currentAccessWish->getEducationStudentWishes();
- $reregistrationWishes = $currentAccessWish->getEducationStudentReregistrationsWishes();
- if ($reregistrationWishes->isEmpty() && $wishes->isEmpty()) {
- // TODO: est-ce qu'il ne faudrait pas plutôt lever une erreur ici plutôt que de retourner null?
- return null;
- }
- $registrationStatuses = [
- RegistrationStatusEnum::NEGOTIABLE()->getValue() => 0,
- RegistrationStatusEnum::ACCEPTED()->getValue() => 0,
- RegistrationStatusEnum::PENDING()->getValue() => 0,
- RegistrationStatusEnum::DENIED()->getValue() => 0
- ];
- foreach ($reregistrationWishes as $reregistrationWish) {
- if ($reregistrationWish->getWishRegistration() !== WishRegistrationEnum::REREGISTER()->getValue()) {
- continue;
- }
- $registrationStatuses[$reregistrationWish->getRegistrationStatus()]++;
- }
- foreach ($wishes as $educationStudentWish){
- $registrationStatuses[$educationStudentWish->getRegistrationStatus()]++;
- }
- return $registrationStatuses;
- }
- }
|