Commit 2596f927 authored by Thomas Hamel's avatar Thomas Hamel
Browse files

WIP

parent fbab6647
Loading
Loading
Loading
Loading
+115 −0
Changes for module/Application/config/others/autorisation-inscription.config.php: 115 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application;

use Application\Controller\AutorisationInscriptionController;
use Application\Controller\Factory\AutorisationInscriptionControllerFactory;
use Application\Form\AutorisationInscriptionForm;
use Application\Form\Factory\AutorisationInscriptionFormFactory;
use Application\Provider\Privilege\RapportPrivileges;
use Application\Service\AutorisationInscription\AutorisationInscriptionService;
use Application\Service\AutorisationInscription\AutorisationInscriptionServiceFactory;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;

return [
    'bjyauthorize'    => [
        'resource_providers' => [
            'BjyAuthorize\Provider\Resource\Config' => [
                'AutorisationInscription' => [],
            ],
        ],
        'rule_providers'     => [
            PrivilegeRuleProvider::class => [
                'allow' => [
                    [
                        'privileges' => [
                            RapportPrivileges::RAPPORT_CSI_LISTER_TOUT,
                            RapportPrivileges::RAPPORT_CSI_LISTER_SIEN,
                            RapportPrivileges::RAPPORT_CSI_TELEVERSER_TOUT,
                            RapportPrivileges::RAPPORT_CSI_TELEVERSER_SIEN,
                            RapportPrivileges::RAPPORT_CSI_SUPPRIMER_SIEN,
                            RapportPrivileges::RAPPORT_CSI_SUPPRIMER_TOUT,
                            RapportPrivileges::RAPPORT_CSI_RECHERCHER_SIEN,
                            RapportPrivileges::RAPPORT_CSI_TELECHARGER_TOUT,
                            RapportPrivileges::RAPPORT_CSI_TELECHARGER_SIEN,

                            RapportPrivileges::RAPPORT_MIPARCOURS_LISTER_TOUT,
                            RapportPrivileges::RAPPORT_MIPARCOURS_LISTER_SIEN,
                            RapportPrivileges::RAPPORT_MIPARCOURS_TELEVERSER_TOUT,
                            RapportPrivileges::RAPPORT_MIPARCOURS_TELEVERSER_SIEN,
                            RapportPrivileges::RAPPORT_MIPARCOURS_SUPPRIMER_SIEN,
                            RapportPrivileges::RAPPORT_MIPARCOURS_SUPPRIMER_TOUT,
                            RapportPrivileges::RAPPORT_MIPARCOURS_RECHERCHER_SIEN,
                            RapportPrivileges::RAPPORT_MIPARCOURS_TELECHARGER_TOUT,
                            RapportPrivileges::RAPPORT_MIPARCOURS_TELECHARGER_SIEN,
                        ],
                        'resources'  => ['Rapport'],
                        'assertion' => 'Assertion\\Rapport', /** @see RapportAssertion */
                    ],
                ],
            ],
        ],
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => AutorisationInscriptionController::class,
                    'action'     => [
                        'autoriser-inscription', // à modifier ensuite,
                        'ajouter'
                    ],
                    'privileges' => [
                        RapportPrivileges::RAPPORT_CSI_LISTER_TOUT,
                        RapportPrivileges::RAPPORT_CSI_LISTER_SIEN,
                    ],
                    'assertion' => 'Assertion\\Rapport',
                ],
            ],
        ],
    ],
    'router' => [
        'routes' => [
            'autoriser-inscription' => [
                'type' => 'Literal',
                'options' => [
                    'route' => '/autoriser-inscription',
                    'defaults' => [
                        'controller' => AutorisationInscriptionController::class,
                    ],
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'ajouter' => [
                        'type' => 'Segment',
                        'options' => [
                            'route' => '/ajouter/:rapport',
                            'constraints' => [
                                'rapport' => '\d+',
                            ],
                            'defaults' => [
                                'controller' => AutorisationInscriptionController::class,
                                'action' => 'ajouter',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'service_manager' => [
        'factories' => [
            AutorisationInscriptionService::class => AutorisationInscriptionServiceFactory::class
        ],
    ],
    'controllers' => [
        'factories' => [
            AutorisationInscriptionController::class => AutorisationInscriptionControllerFactory::class,
        ],
    ],
    'form_elements'   => [
        'factories' => [
            AutorisationInscriptionForm::class => AutorisationInscriptionFormFactory::class
        ],
    ],
];
+14 −0
Changes for module/Application/config/others/rapports.config.php: 14 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ return [
                    'controller' => RapportCsiController::class,
                    'action'     => [
                        'consulter',
                        'autoriser-reinscription' // à modifier ensuite
                    ],
                    'privileges' => [
                        RapportPrivileges::RAPPORT_CSI_LISTER_TOUT,
@@ -310,6 +311,19 @@ return [
                            ],
                        ],
                    ],
                    'autoriser-reinscription' => [
                        'type' => 'Segment',
                        'options' => [
                            'route' => '/autoriser-reinscription/:rapport',
                            'constraints' => [
                                'rapport' => '\d+',
                            ],
                            'defaults' => [
                                'controller' => RapportCsiController::class,
                                'action' => 'autoriser-reinscription',
                            ],
                        ],
                    ],
                ],
            ],

+101 −0
Changes for module/Application/src/Application/Controller/AutorisationInscriptionController.php: 101 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

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;

    public function ajouterAction(): Response|ViewModel
    {
        $form = $this->getAutorisationInscriptionForm();
        $rapport = $this->requestedRapport();
        $these = $rapport->getThese();
        $autorisationInscription = $this->autorisationInscriptionService->initAutorisationInscriptionFromRapport($rapport);

        $form->bind($autorisationInscription);
        $form->setAttribute('action', $this->url()->fromRoute('autoriser-inscription/ajouter', ['rapport' => $rapport->getId()], [], true));
        $viewModel = new ViewModel([
            'form' => $form,
        ]);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                /** @var AutorisationInscription $autorisationInscription */
                $autorisationInscription = $form->getData();

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

                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.");
                }

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

                return $this->redirect()->toRoute('rapport-csi/consulter', ['these' => $these->getId()]);
            }
        }
        return $viewModel;
    }

    /**
     * @return Rapport
     */
    protected function requestedRapport(): Rapport
    {
        $id = $this->params()->fromRoute('rapport') ?: $this->params()->fromQuery('rapport');
        try {
            $rapport = $this->rapportService->findRapportById($id);
        } catch (NoResultException $e) {
            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;
    }
}
+78 −0
Changes for module/Application/src/Application/Controller/Factory/AutorisationInscriptionControllerFactory.php: 78 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

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;

class AutorisationInscriptionControllerFactory
{
    /**
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container): AutorisationInscriptionController
    {
        /**
         * @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
         */
        $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;
    }
}


+6 −0
Changes for module/Application/src/Application/Controller/Factory/Rapport/RapportCsiControllerFactory.php: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -8,7 +8,9 @@ use Application\Entity\Db\TypeValidation;
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;
@@ -49,6 +51,8 @@ class RapportCsiControllerFactory
        $typeRapport = $rapportService->findTypeRapportByCode(TypeRapport::RAPPORT_CSI);
        $typeValidation = $validationService->findTypeValidationByCode(TypeValidation::CODE_RAPPORT_CSI);
        $anneeUnivService = $container->get(AnneeUnivService::class);
        $sourceService = $container->get(SourceService::class);
        $autorisationInscriptionService = $container->get(AutorisationInscriptionService::class);

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

@@ -65,6 +69,8 @@ class RapportCsiControllerFactory
        $controller->setTypeRapport($typeRapport);
        $controller->setTypeValidation($typeValidation);
        $controller->setMembreService($membreService);
        $controller->setSourceService($sourceService);
        $controller->setAutorisationInscriptionService($autorisationInscriptionService);

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

Loading