Commit d32ee80a authored by Thomas Hamel's avatar Thomas Hamel
Browse files

retour en arrière d'un retour en arrière : impossibilité pour le doctorant de...

retour en arrière d'un retour en arrière : impossibilité pour le doctorant de s'inscrire à plusieurs sessions de la même formation dans la même année universitaire (ajout d'une assertion)
parent c4c266b2
Loading
Loading
Loading
Loading
+37 −2
Changes for module/Formation/src/Formation/Assertion/Inscription/InscriptionAssertion.php: 37 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -90,7 +90,9 @@ class InscriptionAssertion extends AbstractAssertion implements AssertionInterf
                        $inscription = new Inscription();
                        $inscription->setDoctorant($doctorant);
                        $inscription->setSession($session);
                        return $this->scopeValide($inscription);
                        return $this->canInscrire($inscription);

//                        return $this->scopeValide($inscription);
                    }
                    return false;
                }
@@ -115,12 +117,45 @@ class InscriptionAssertion extends AbstractAssertion implements AssertionInterf

        if ($privilege == InscriptionPrivileges::INSCRIPTION_AJOUTER) {
            if ($inscription->getHistoCreateur()) return $this->canDesinscrire($entity);
            return $this->scopeValide($inscription);
            return $this->canInscrire($entity);
        }

        return true;
    }

    private function canInscrire(?Inscription $inscription): bool
    {
        if (!$this->scopeValide($inscription)) return false;
        $doctorant = $inscription->getDoctorant();
        $session = $inscription->getSession();
        $inscriptions = $this->inscriptionService->getRepository()->findInscriptionsByDoctorant($doctorant);

        /** @var Inscription $inscription */
        foreach ($inscriptions as $inscription) {
            $sessionInscriptionEnregistree = $inscription->getSession();
            if (!$sessionInscriptionEnregistree || !$sessionInscriptionEnregistree->getDateDebut()) {
                continue; // Passe à l'inscription suivante si la session ou la date de début est manquante
            }

            $premiereAnneeUnivSessionInscription = $this->anneeUnivService->fromDate($sessionInscriptionEnregistree->getDateDebut())->getPremiereAnnee();
            //si la session demandée possède la même formation qu'une inscription possédée par l'étudiant,
            //on vérifie que l'année universitaire ne soit pas la même
            //sinon on refuse l'inscription, car l'étudiant ne peut pas s'inscrire sur une session appartenant à une formation déjà suivie sur la même année universitaire
            if ($session && $session->getFormation() === $sessionInscriptionEnregistree->getFormation()) {
                $sessionOuverteDateDebut = $session->getDateDebut();
                if ($sessionOuverteDateDebut) {
                    $premiereAnneeUnivSessionOuverte = $this->anneeUnivService->fromDate($sessionOuverteDateDebut)->getPremiereAnnee();
                    // Si les années universitaires sont identiques, on interdit l'inscription
                    if ($premiereAnneeUnivSessionOuverte === $premiereAnneeUnivSessionInscription) {
                        return false;
                    }
                }
            }
        }
        return true;
    }


    private function canDesinscrire(?Inscription $inscription): bool
    {
        if (!$this->scopeValide($inscription)) return false;
+2 −0
Changes for module/Formation/view/formation/index/index-doctorant.phtml: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -217,6 +217,8 @@ $now = new DateTime();
                                          title="M'inscrire" data-bs-toggle="tooltip" data-bs-html="true"
                                    ></span>&nbsp;M'inscrire
                                </a>
                            <?php else: ?>
                                <span class="icon icon-unchecked" style="color:darkred;" data-bs-toggle="tooltip" title="Vous suivez déjà (ou avez déjà suivi) cette formation lors de cette année universitaire">&nbsp;Impossible de s'inscrire</span>
                            <?php endif;
                        endif; ?>
                    </td>