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

améliorations assertion autorisationInscription

parent 102a36dc
Loading
Loading
Loading
Loading
+19 −0
Changes for doc/release-notes/8.x.0/01_saisie_these.sql: 19 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -654,6 +654,25 @@ from PROFIL_TO_ROLE p2r
where not exists (select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id)
;

-- Autorisation d'inscription
create table IF NOT EXISTS autorisation_inscription
(
    id                    bigserial                                                    not null
    primary key,
    individu_id           bigint REFERENCES individu (id)                              not null,
    these_id              bigint REFERENCES these (id),
    rapport_id               bigint REFERENCES rapport (id),
    annee_univ            bigint                                                       not null,
    tem_autor_inscription boolean not null,
    commentaires          text,
    histo_createur_id     bigint                                                       not null REFERENCES utilisateur (id),
    histo_creation        timestamp default ('now'::text)::timestamp without time zone not null,
    histo_modificateur_id bigint REFERENCES utilisateur (id),
    histo_modification    timestamp,
    histo_destructeur_id  bigint REFERENCES utilisateur (id),
    histo_destruction     timestamp
);

--
-- Nouvelle catégorie de privilèges : AutorisationInscription.
--
+12 −3
Changes for module/Application/src/Application/Assertion/AutorisationInscription/AutorisationInscriptionAssertion.php: 12 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -60,11 +60,11 @@ class AutorisationInscriptionAssertion extends AbstractAssertion implements User
            return false;
        }

        $this->getRequestedAutorisationInscription();
        $this->autorisationInscription = $this->getRequestedAutorisationInscription();
        $these = $this->rapport?->getThese();
        try {
            if ($action == 'ajouter') {
                if ($this->autorisationInscription === null) {
                if ($this->autorisationInscription !== null) return false;
                if ($roleEcoleDoctorale = $this->userContextService->getSelectedRoleEcoleDoctorale()) {
                    $this->assertTrue(
                        $these->getEcoleDoctorale()->getStructure()->getId() === $roleEcoleDoctorale->getStructure()->getId(),
@@ -73,7 +73,6 @@ class AutorisationInscriptionAssertion extends AbstractAssertion implements User
                }
                return $this->canAjouterAutorisationInscription($these);
            }
            }
        } catch (FailedAssertionException $e) {
            if ($e->getMessage()) {
                $this->getServiceMessageCollector()->addMessage($e->getMessage(), __CLASS__);
@@ -96,13 +95,20 @@ class AutorisationInscriptionAssertion extends AbstractAssertion implements User
        }

        $this->autorisationInscription = $entity;
        if($this->autorisationInscription->getId() === null){
            $this->autorisationInscription = $this->autorisationInscriptionService->getRepository()->findOneBy(["rapport" => $this->autorisationInscription->getRapport()->getId()]) ?
                $this->autorisationInscriptionService->getRepository()->findOneBy(["rapport" => $this->autorisationInscription->getRapport()->getId()]) :
                $this->autorisationInscription;
        }

        try {
            switch ($privilege) {
                case AutorisationInscriptionPrivileges::AUTORISATION_INSCRIPTION_AJOUTER:
                    if($this->autorisationInscription->getId()) return false;

                    $this->rapport = $this->autorisationInscription->getRapport();
                    $these = $this->rapport?->getThese();

                    if ($roleEcoleDoctorale = $this->userContextService->getSelectedRoleEcoleDoctorale()) {
                        $this->assertTrue(
                            $these->getEcoleDoctorale()->getStructure()->getId() === $roleEcoleDoctorale->getStructure()->getId(),
@@ -123,6 +129,9 @@ class AutorisationInscriptionAssertion extends AbstractAssertion implements User

    private function canAjouterAutorisationInscription(These $these): bool
    {
        //Si la thèse est importée, ne pas donner le droit de créer une autorisation d'inscription (pour l'instant)
        if($these->getSource()->getImportable()) return false;

        $anneesInscriptionThese = array_map(function(TheseAnneeUniv $anneeUniv) {
            return $anneeUniv->getPremiereAnnee();
        },  $these->getAnneesUnivInscription()->toArray());
+0 −1
Changes for module/Application/src/Application/Assertion/AutorisationInscription/AutorisationInscriptionAssertionFactory.php: 0 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@ namespace Application\Assertion\AutorisationInscription;
use Application\Assertion\AbstractAssertion;
use Application\Service\AutorisationInscription\AutorisationInscriptionService;
use Application\Service\Rapport\RapportService;
use Individu\Service\IndividuService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
+3 −26
Changes for module/Application/src/Application/Controller/AutorisationInscriptionController.php: 3 added lines, 26 removed lines.
Original line number Diff line number Diff line
@@ -5,28 +5,19 @@ namespace Application\Controller;
use Application\Entity\Db\AutorisationInscription;
use Application\Entity\Db\Rapport;
use Application\Form\AutorisationInscriptionFormAwareTrait;
use Application\Service\AnneeUniv\AnneeUnivServiceAwareTrait;
use Application\Service\AutorisationInscription\AutorisationInscriptionServiceAwareTrait;
use Application\Service\Rapport\RapportServiceAwareTrait;
use Application\Service\Source\SourceServiceAwareTrait;
use ComiteSuiviIndividuel\Service\Membre\MembreServiceAwareTrait;
use Doctrine\ORM\NoResultException;
use Individu\Service\IndividuServiceAwareTrait;
use Laminas\Http\Response;
use Laminas\View\Model\ViewModel;
use These\Entity\Db\TheseAnneeUniv;
use These\Service\These\TheseServiceAwareTrait;
use These\Service\TheseAnneeUniv\TheseAnneeUnivServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;

class AutorisationInscriptionController extends AbstractController
{
    use MembreServiceAwareTrait;
    use AnneeUnivServiceAwareTrait;
    use SourceServiceAwareTrait;
    use TheseServiceAwareTrait;
    use RapportServiceAwareTrait;
    use IndividuServiceAwareTrait;
    use AutorisationInscriptionFormAwareTrait;
    use AutorisationInscriptionServiceAwareTrait;
    use TheseAnneeUnivServiceAwareTrait;
@@ -41,6 +32,7 @@ class AutorisationInscriptionController extends AbstractController
        $form->bind($autorisationInscription);
        $form->setAttribute('action', $this->url()->fromRoute('autoriser-inscription/ajouter', ['rapport' => $rapport->getId()], [], true));
        $viewModel = new ViewModel([
            'title' => "Autorisation d'inscription pour l'année ".$autorisationInscription->getAnneeUniv()->getAnneeUnivToString()." de ".$these->getDoctorant()->getIndividu(),
            'form' => $form,
        ]);

@@ -55,26 +47,15 @@ class AutorisationInscriptionController extends AbstractController
                if($autorisationInscription->getThese() && $autorisationInscription->getAutorisationInscription() === true){
                    $theseAnneeUnivPremiereInscription = $this->theseAnneeUnivService->initFromAutorisationInscription($autorisationInscription);
                    $these->addAnneesUniv1ereInscription($theseAnneeUnivPremiereInscription);
                    foreach ($these->getAnneesUnivInscription() as $anneeUniv) {
                        /** @var TheseAnneeUniv $anneeUniv */
                        if ($anneeUniv->getPremiereAnnee() === $theseAnneeUnivPremiereInscription->getPremiereAnnee()) {
                            $this->flashMessenger()->addErrorMessage("L'année universitaire {$theseAnneeUnivPremiereInscription->getAnneeUnivToString()} a déjà reçu une autorisation pour une réinscription.");
                            return $this->redirect()->toRoute('rapport-csi/consulter', ['these' => $these->getId()]);
                        }
                    }
                    if (!$these->getSource()->getImportable()) $this->theseService->saveThese($these);
                    $this->theseService->saveThese($these);
                }

                if (!$these->getSource()->getImportable()) {
                $this->autorisationInscriptionService->create($autorisationInscription);
                    $this->flashMessenger()->addSuccessMessage("Autorisation de réinscription pour l'année {$autorisationInscription->getAnneeUniv()->getAnneeUnivToString()} effectuée avec succès.");
                }
                $this->flashMessenger()->addSuccessMessage("Avis concernant l'autorisation de réinscription pour l'année {$autorisationInscription->getAnneeUniv()->getAnneeUnivToString()} effectuée avec succès.");

                if ($redirectUrl = $this->params()->fromQuery('redirect')) {
                    return $this->redirect()->toUrl($redirectUrl);
                }

                return $this->redirect()->toRoute('rapport-csi/consulter', ['these' => $these->getId()]);
            }
        }
        return $viewModel;
@@ -92,10 +73,6 @@ class AutorisationInscriptionController extends AbstractController
            throw new RuntimeException("Aucun rapport trouvé avec cet id", 0, $e);
        }

//        if ($rapport->getTypeRapport() !== $this->typeRapport) {
//            throw new RuntimeException("Type de rapport attendu : " . $this->typeRapport->getCode());
//        }

        return $rapport;
    }
}
+2 −33
Changes for module/Application/src/Application/Controller/Factory/AutorisationInscriptionControllerFactory.php: 2 added lines, 33 removed lines.
Original line number Diff line number Diff line
@@ -3,21 +3,10 @@
namespace Application\Controller\Factory;

use Application\Controller\AutorisationInscriptionController;
use Application\Entity\Db\TypeRapport;
use Application\Entity\Db\TypeValidation;
use Application\Form\AutorisationInscriptionForm;
use Application\Form\Rapport\RapportAvisForm;
use Application\Form\Rapport\RapportForm;
use Application\Form\RapportCsiForm;
use Application\Service\AnneeUniv\AnneeUnivService;
use Application\Service\AutorisationInscription\AutorisationInscriptionService;
use Application\Service\Rapport\RapportService;
use Application\Service\Source\SourceService;
use Application\Service\Validation\ValidationService;
use ComiteSuiviIndividuel\Service\Membre\MembreService;
use Fichier\Service\Fichier\FichierService;
use Fichier\Service\VersionFichier\VersionFichierService;
use Individu\Service\IndividuService;
use Interop\Container\ContainerInterface;
use These\Service\These\TheseService;
use These\Service\TheseAnneeUniv\TheseAnneeUnivService;
@@ -32,44 +21,24 @@ class AutorisationInscriptionControllerFactory
    {
        /**
         * @var TheseService          $theseService
         * @var FichierService        $fichierService
         * @var RapportService        $rapportService
         * @var VersionFichierService $versionFichierService
         * @var IndividuService       $individuService
         * @var ValidationService     $validationService
         * @var RapportForm           $rapportForm
         * @var AnneeUnivService      $anneeUnivService
         *
         * @var MembreService $membreService
         * @var AutorisationInscriptionService $autorisationInscriptionService
         * @var TheseAnneeUnivService $theseAnneeUnivService
         */
        $theseService = $container->get('TheseService');
        $rapportService = $container->get(RapportService::class);
        $individuService = $container->get(IndividuService::class);
        $typeRapport = $rapportService->findTypeRapportByCode(TypeRapport::RAPPORT_CSI);
        $anneeUnivService = $container->get(AnneeUnivService::class);
        $sourceService = $container->get(SourceService::class);
        $rapportService = $container->get(RapportService::class);
        $autorisationInscriptionService = $container->get(AutorisationInscriptionService::class);
        $theseAnneeUnivService = $container->get(TheseAnneeUnivService::class);
        $form = $container->get('FormElementManager')->get(AutorisationInscriptionForm::class);

        $membreService = $container->get(MembreService::class);

        $controller = new AutorisationInscriptionController();
        $controller->setTheseService($theseService);
        $controller->setRapportService($rapportService);
        $controller->setIndividuService($individuService);
        $controller->setAnneeUnivService($anneeUnivService);
//        $controller->setTypeRapport($typeRapport);
        $controller->setMembreService($membreService);
        $controller->setSourceService($sourceService);
        $controller->setRapportService($rapportService);
        $controller->setAnneesUnivs($theseAnneeUnivService);
        $controller->setAutorisationInscriptionForm($form);
        $controller->setAutorisationInscriptionService($autorisationInscriptionService);

//        $theseService->attach($controller->getEventManager());

        return $controller;
    }
}
Loading