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 | 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; } }