Commit eff6d4c0 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Simulation des remontés du SI pour le Jury

parent d8ff1c0a
Loading
Loading
Loading
Loading
+6 −0
Changes for doc/release-notes/v3.0.1.md: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
```SQL
INSERT INTO privilege (id, categorie_id, code, libelle, ordre) values (privilege_id_seq.nextval, 101, 'simuler_remontees', 'Simulation des remontées du jury du SI', 123456);
```

Penser a modifier les profil en conséquence
+30 −0
Changes for module/Soutenance/config/others/presoutenance.config.php: 30 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -45,6 +45,14 @@ return [
        ],
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => PresoutenanceController::class,
                    'action' => [
                        'generer-simulation',
                        'nettoyer-simulation',
                    ],
                    'privileges' => PresoutenancePrivileges::PRESOUTENANCE_SIMULER_REMONTEES,
                ],
                [
                    'controller' => PresoutenanceController::class,
                    'action' => [
@@ -134,6 +142,28 @@ return [
                            ],
                        ],
                        'child_routes' => [
                            'generer-simulation' => [
                                'type' => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route' => '/generer-simulation',
                                    'defaults' => [
                                        'controller' => PresoutenanceController::class,
                                        'action' => 'generer-simulation',
                                    ],
                                ],
                            ],
                            'nettoyer-simulation' => [
                                'type' => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route' => '/nettoyer-simulation',
                                    'defaults' => [
                                        'controller' => PresoutenanceController::class,
                                        'action' => 'nettoyer-simulation',
                                    ],
                                ],
                            ],
                            'avis-soutenance' => [
                                'type' => Segment::class,
                                'may_terminate' => true,
+110 −1
Changes for module/Soutenance/src/Soutenance/Controller/PresoutenanceController.php: 110 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -5,17 +5,22 @@ namespace Soutenance\Controller;
use Application\Controller\AbstractController;
use Application\Entity\Db\Acteur;
use Application\Entity\Db\Etablissement;
use Application\Entity\Db\Individu;
use Application\Entity\Db\NatureFichier;
use Application\Entity\Db\Profil;
use Application\Entity\Db\Role;
use Application\Entity\Db\Source;
use Application\Entity\Db\TypeValidation;
use Application\Service\Acteur\ActeurServiceAwareTrait;
use Application\Service\Fichier\FichierServiceAwareTrait;
use Application\Service\Individu\IndividuServiceAwareTrait;
use Application\Service\Role\RoleServiceAwareTrait;
use Application\Service\Source\SourceServiceAwareTrait;
use Application\Service\StructureDocument\StructureDocumentServiceAwareTrait;
use Application\Service\These\TheseServiceAwareTrait;
use Application\Service\Utilisateur\UtilisateurServiceAwareTrait;
use DateInterval;
use Doctrine\ORM\OptimisticLockException;
use Soutenance\Entity\Avis;
use Soutenance\Entity\Etat;
use Soutenance\Entity\Membre;
@@ -60,6 +65,7 @@ class PresoutenanceController extends AbstractController
    use FichierServiceAwareTrait;
    use StructureDocumentServiceAwareTrait;
    use TokenServiceAwareTrait;
    use SourceServiceAwareTrait;

    use DateRenduRapportFormAwareTrait;
    use AdresseSoutenanceFormAwareTrait;
@@ -548,7 +554,7 @@ class PresoutenanceController extends AbstractController
        //membres
        /** @var Membre $membre */
        foreach ($proposition->getMembres() as $membre) {
            if ($membre->isMembre()) {
            if ($membre->estMembre()) {
                $email = ($membre->getIndividu() and $membre->getIndividu()->getEmail()) ? $membre->getIndividu()->getEmail() : $membre->getEmail();
                /** @see PresoutenanceController::convocationMembreAction() */
                $url = $this->url()->fromRoute('soutenance/presoutenance/convocation-membre', ['proposition' => $proposition->getId(), 'membre' => $membre->getId()], ['force_canonical' => true], true);
@@ -583,4 +589,107 @@ class PresoutenanceController extends AbstractController
        $nomusuel = strtolower($acteur->getIndividu()->getNomUsuel());
        return ($nomusuel . "_" . $membre->getId());
    }

    public function genererSimulationAction()
    {
        $these = $this->requestedThese();
        $proposition = $this->getPropositionService()->findByThese($these);
        $membres = $proposition->getMembres();

        /** @var Role $rapporteur */
        /** @var Role $membreJury */
        $rapporteur = $this->getRoleService()->getRepository()->findOneBy(['code' => 'R', 'structure' => $these->getEtablissement()->getStructure()]);
        $membreJury = $this->getRoleService()->getRepository()->findOneBy(['code' => 'M', 'structure' => $these->getEtablissement()->getStructure()]);

        /** @var Source $sygal */
        $sygal = $this->sourceService->getRepository()->findOneBy(['code' => 'SYGAL::sygal']);

        /** @var Membre $membre */
        foreach($membres as $membre) {
            /** @var Individu $individu */
            $source_code_individu = 'SyGAL_Simulation_' . $membre->getId();
            $individu = $this->getIndividuService()->getRepository()->findOneBy(['sourceCode' => $source_code_individu]);
            if ($individu === null) {
                $individu = new Individu();
                $individu->setPrenom($membre->getPrenom());
                $individu->setNomUsuel($membre->getNom());
                $individu->setEmail($membre->getEmail());
                $individu->setSource($sygal);
                $individu->setSourceCode($source_code_individu);
                $this->getIndividuService()->getEntityManager()->persist($individu);
                $this->getIndividuService()->getEntityManager()->flush($individu);
            }

            if ($membre->estRapporteur()) {
                /** @var Acteur $acteur */
                $source_code_acteur = 'SyGAL_Simulation_Rapporteur_' . $membre->getId();
                $acteur = $this->getActeurService()->getRepository()->findOneBy(['sourceCode' => $source_code_acteur]);

                if ($acteur === null) {
                    $acteur = new Acteur();
                    $acteur->setRole($rapporteur);
                    $acteur->setIndividu($individu);
                    $acteur->setThese($these);
                    $acteur->setSource($sygal);
                    $acteur->setSourceCode($source_code_acteur);
                    $this->getActeurService()->getEntityManager()->persist($acteur);
                    $this->getActeurService()->getEntityManager()->flush($acteur);
                }
            }

            if ($membre->estMembre()) {
                /** @var Acteur $acteur */
                $source_code_acteur = 'SyGAL_Simulation_Membre_' . $membre->getId();
                $acteur = $this->getActeurService()->getRepository()->findOneBy(['sourceCode' => $source_code_acteur]);

                if ($acteur === null) {
                    $acteur = new Acteur();
                    $acteur->setRole($membreJury);
                    $acteur->setIndividu($individu);
                    $acteur->setThese($these);
                    $acteur->setSource($sygal);
                    $acteur->setSourceCode($source_code_acteur);
                    $this->getActeurService()->getEntityManager()->persist($acteur);
                    $this->getActeurService()->getEntityManager()->flush($acteur);
                }
            }
        }

        return $this->redirect()->toRoute('soutenance/presoutenance', ['these' => $these->getId()], [], true);
    }

    public function nettoyerSimulationAction()
    {
        $these = $this->requestedThese();
        $proposition = $this->getPropositionService()->findByThese($these);
        $membres = $proposition->getMembres();

        foreach ($membres as $membre) {
            /** @var Acteur $acteur */
            $source_code_acteur = 'SyGAL_Simulation_Rapporteur_' . $membre->getId();
            $acteur = $this->getActeurService()->getRepository()->findOneBy(['sourceCode' => $source_code_acteur]);
            if ($acteur !== null) {
                $this->getActeurService()->getEntityManager()->remove($acteur);
                $this->getActeurService()->getEntityManager()->flush($acteur);
            }

            /** @var Acteur $acteur */
            $source_code_acteur = 'SyGAL_Simulation_Membre_' . $membre->getId();
            $acteur = $this->getActeurService()->getRepository()->findOneBy(['sourceCode' => $source_code_acteur]);
            if ($acteur !== null) {
                $this->getActeurService()->getEntityManager()->remove($acteur);
                $this->getActeurService()->getEntityManager()->flush($acteur);
            }

            /** @var Individu $source_code_individu */
            $source_code_individu = 'SyGAL_Simulation_' . $membre->getId();
            $individu = $this->getIndividuService()->getRepository()->findOneBy(['sourceCode' => $source_code_individu]);
            if ($individu !== null) {
                $this->getActeurService()->getEntityManager()->remove($individu);
                $this->getActeurService()->getEntityManager()->flush($individu);
            }
        }

        return $this->redirect()->toRoute('soutenance/presoutenance', ['these' => $these->getId()], [], true);
    }
}
 No newline at end of file
+4 −0
Changes for module/Soutenance/src/Soutenance/Controller/PresoutenanceControllerFactory.php: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ use Application\Service\Acteur\ActeurService;
use Application\Service\Fichier\FichierService;
use Application\Service\Individu\IndividuService;
use Application\Service\Role\RoleService;
use Application\Service\Source\SourceService;
use Application\Service\StructureDocument\StructureDocumentService;
use Application\Service\These\TheseService;
use Application\Service\Utilisateur\UtilisateurService;
@@ -48,6 +49,7 @@ class PresoutenanceControllerFactory
         * @var FichierService $fichierService
         * @var StructureDocumentService $structureDocumentService
         * @var TokenService $tokenService
         * @var SourceService $sourceService
         */
        $propositionService = $container->get(PropositionService::class);
        $membreService = $container->get(MembreService::class);
@@ -65,6 +67,7 @@ class PresoutenanceControllerFactory
        $fichierService = $container->get(FichierService::class);
        $structureDocumentService = $container->get(StructureDocumentService::class);
        $tokenService = $container->get(TokenService::class);
        $sourceService = $container->get(SourceService::class);

        /**
         * @var DateRenduRapportForm $dateRenduRapportForm
@@ -85,6 +88,7 @@ class PresoutenanceControllerFactory
        $controller->setActeurService($acteurService);
        $controller->setNotifierSoutenanceService($notifierService);
        $controller->setValidationService($validationService);
        $controller->setSourceService($sourceService);
        $controller->setRoleService($roleService);
        $controller->setAvisService($avisService);
        $controller->setUtilisateurService($utilisateurService);
+1 −1
Changes for module/Soutenance/src/Soutenance/Entity/Membre.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -292,7 +292,7 @@ class Membre {
        return $this;
    }

    public function isMembre() {
    public function estMembre() {
        switch ($this->getRole()) {
            case Membre::RAPPORTEUR_JURY :
            case Membre::RAPPORTEUR_VISIO :
Loading