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

WIP Déclaration des mobilités

parent 4d91e3c9
Loading
Loading
Loading
Loading
+159 −0
Changes for module/Application/config/merged/agent-mobilite.config.php: 159 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application;

use Application\Controller\AgentMobiliteController;
use Application\Controller\AgentMobiliteControllerFactory;
use Application\Form\AgentMobilite\AgentMobiliteForm;
use Application\Form\AgentMobilite\AgentMobiliteFormFactory;
use Application\Form\AgentMobilite\AgentMobiliteHydrator;
use Application\Form\AgentMobilite\AgentMobiliteHydratorFactory;
use Application\Provider\Privilege\AgentmobilitePrivileges;
use Application\Service\AgentMobilite\AgentMobiliteService;
use Application\Service\AgentMobilite\AgentMobiliteServiceFactory;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenPrivilege\Guard\PrivilegeController;

return [
    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => AgentMobiliteController::class,
                    'action' => [
                        'ajouter',
                    ],
                    'privileges' => [
                        AgentMobilitePrivileges::AGENTMOBILITE_AJOUTER
                    ],
                ],
                [
                    'controller' => AgentMobiliteController::class,
                    'action' => [
                        'modifier',
                    ],
                    'privileges' => [
                        AgentMobilitePrivileges::AGENTMOBILITE_MODIFIER
                    ],
                ],
                [
                    'controller' => AgentMobiliteController::class,
                    'action' => [
                        'historiser',
                        'restaurer',
                    ],
                    'privileges' => [
                        AgentMobilitePrivileges::AGENTMOBILITE_HISTORISER
                    ],
                ],
                [
                    'controller' => AgentMobiliteController::class,
                    'action' => [
                        'supprimer',
                    ],
                    'privileges' => [
                        AgentMobilitePrivileges::AGENTMOBILITE_SUPPRIMER
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'agent' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/agent',
                ],
                'child_routes' => [
                    'mobilite' => [
                        'type' => Literal::class,
                        'options' => [
                            'route' => '/mobilite',
                            'defaults' => [
                                'controller' => AgentMobiliteController::class,
                            ],
                        ],
                        'may_terminate' => false,
                        'child_routes' => [
                            'ajouter' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/ajouter[/:agent]',
                                    'defaults' => [
                                        /** @see AgentMobiliteController::ajouterAction() */
                                        'action' => 'ajouter'
                                    ],
                                ],
                            ],
                            'modifier' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/modifier/:agent-mobilite',
                                    'defaults' => [
                                        /** @see AgentMobiliteController::modifierAction() */
                                        'action' => 'modifier'
                                    ],
                                ],
                            ],
                            'historiser' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/historiser/:agent-mobilite',
                                    'defaults' => [
                                        /** @see AgentMobiliteController::historiserAction() */
                                        'action' => 'historiser'
                                    ],
                                ],
                            ],
                            'restaurer' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/restaurer/:agent-mobilite',
                                    'defaults' => [
                                        /** @see AgentMobiliteController::restaurerAction() */
                                        'action' => 'restaurer'
                                    ],
                                ],
                            ],
                            'detruire' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/detruire/:agent-mobilite',
                                    'defaults' => [
                                        /** @see AgentMobiliteController::supprimer() */
                                        'action' => 'detruire'
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'service_manager' => [
        'factories' => [
            AgentMobiliteService::class => AgentMobiliteServiceFactory::class
        ],
    ],
    'controllers' => [
        'factories' => [
            AgentMobiliteController::class => AgentMobiliteControllerFactory::class
        ],
    ],
    'form_elements' => [
        'factories' => [
            AgentMobiliteForm::class => AgentMobiliteFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            AgentMobiliteHydrator::class => AgentMobiliteHydratorFactory::class,
        ],
    ]

];
 No newline at end of file
+4 −1
Changes for module/Application/src/Application/Controller/AgentController.php: 4 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ use Application\Service\AgentAffectation\AgentAffectationServiceAwareTrait;
use Application\Service\AgentAutorite\AgentAutoriteServiceAwareTrait;
use Application\Service\AgentGrade\AgentGradeServiceAwareTrait;
use Application\Service\AgentMissionSpecifique\AgentMissionSpecifiqueServiceAwareTrait;
use Application\Service\AgentMobilite\AgentMobiliteServiceAwareTrait;
use Application\Service\AgentPPP\AgentPPPServiceAwareTrait;
use Application\Service\AgentQuotite\AgentQuotiteServiceAwareTrait;
use Application\Service\AgentStageObservation\AgentStageObservationServiceAwareTrait;
@@ -100,6 +101,8 @@ class AgentController extends AbstractActionController
    use AgentAccompagnementServiceAwareTrait;
    use AgentAccompagnementFormAwareTrait;

    use AgentMobiliteServiceAwareTrait;


    public function indexAction(): ViewModel
    {
@@ -144,7 +147,7 @@ class AgentController extends AbstractActionController
        $parametreIntranet = $this->getParametreService()->getParametreByCode('ENTRETIEN_PROFESSIONNEL', 'INTRANET_DOCUMENT');
        $lienIntranet = ($parametreIntranet) ? $parametreIntranet->getValeur() : "Aucun lien vers l'intranet";

        $mobilites = [];
        $mobilites = $this->getAgentMobiliteService()->getAgentsMobilitesByAgent($agent);

        return new ViewModel([
            'title' => 'Afficher l\'agent',
+4 −0
Changes for module/Application/src/Application/Controller/AgentControllerFactory.php: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ use Application\Service\AgentAffectation\AgentAffectationService;
use Application\Service\AgentAutorite\AgentAutoriteService;
use Application\Service\AgentGrade\AgentGradeService;
use Application\Service\AgentMissionSpecifique\AgentMissionSpecifiqueService;
use Application\Service\AgentMobilite\AgentMobiliteService;
use Application\Service\AgentPPP\AgentPPPService;
use Application\Service\AgentQuotite\AgentQuotiteService;
use Application\Service\AgentStageObservation\AgentStageObservationService;
@@ -79,6 +80,7 @@ class AgentControllerFactory
         * @var AgentAffectationService $agentAffectationService
         * @var AgentGradeService $agentGradeService
         * @var AgentMissionSpecifiqueService $agentMissionSpecifiqueService
         * @var AgentMobiliteService $agentMobiliteService
         * @var AgentQuotiteService $agentQuotiteService
         * @var AgentStatutService $agentStatutService
         * @var EntretienProfessionnelService $entretienProfessionnelService
@@ -91,6 +93,7 @@ class AgentControllerFactory
        $agentAffectationService = $container->get(AgentAffectationService::class);
        $agentGradeService = $container->get(AgentGradeService::class);
        $agentMissionSpecifiqueService = $container->get(AgentMissionSpecifiqueService::class);
        $agentMobiliteService = $container->get(AgentMobiliteService::class);
        $agentQuotiteService = $container->get(AgentQuotiteService::class);
        $agentStatutService = $container->get(AgentStatutService::class);
        $entretienProfessionnelService = $container->get(EntretienProfessionnelService::class);
@@ -136,6 +139,7 @@ class AgentControllerFactory
        $controller->setAgentAffectationService($agentAffectationService);
        $controller->setAgentGradeService($agentGradeService);
        $controller->setAgentMissionSpecifiqueService($agentMissionSpecifiqueService);
        $controller->setAgentMobiliteService($agentMobiliteService);
        $controller->setAgentQuotiteService($agentQuotiteService);
        $controller->setAgentStatutService($agentStatutService);
        $controller->setEntretienProfessionnelService($entretienProfessionnelService);
+118 −0
Changes for module/Application/src/Application/Controller/AgentMobiliteController.php: 118 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller;

use Application\Entity\Db\AgentMobilite;
use Application\Form\AgentMobilite\AgentMobiliteFormAwareTrait;
use Application\Service\AgentMobilite\AgentMobiliteServiceAwareTrait;
use Laminas\Http\Response;
use Laminas\View\Model\ViewModel;

class AgentMobiliteController extends AgentController {
    use AgentMobiliteServiceAwareTrait;
    use AgentMobiliteFormAwareTrait;

    public function ajouterAction() : ViewModel
    {
        $agent = $this->getAgentService()->getRequestedAgent($this);
        $agentMobilite = new AgentMobilite();
        $agentMobilite->setAgent($agent);

        $form = $this->getAgentMobiliteForm();
        $form->setAttribute('action', $this->url()->fromRoute('agent/mobilite/ajouter', ['agent' => ($agent)?$agent->getId():null], [], true));
        $form->bind($agentMobilite);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);

            if ($form->isValid()) {
                //historiser les éventuelles ouvertes
                $mobilites = $this->getAgentMobiliteService()->getAgentsMobilitesByAgent($agent);
                foreach ($mobilites as $mobilite) $this->getAgentMobiliteService()->historise($mobilite);
                // enregistrer la nouvelle
                $this->getAgentMobiliteService()->create($agentMobilite);
                exit();
            }
        }

        $vm = new ViewModel([
            'title' => "Ajout d'une mobilité",
            'form' => $form,
        ]);
        $vm->setTemplate('default/default-form');
        return $vm;

    }

    public function modifierAction() : ViewModel
    {
        $agentMobilite = $this->getAgentMobiliteService()->getRequestedAgentMobilite($this);

        $form = $this->getAgentMobiliteForm();
        $form->setAttribute('action', $this->url()->fromRoute('agent/mobilite/modifier', ['agent-mobilite' => $agentMobilite->getId()], [], true));
        $form->bind($agentMobilite);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);

            if ($form->isValid()) {
                $this->getAgentMobiliteService()->update($agentMobilite);
                exit();
            }
        }

        $vm = new ViewModel([
            'title' => "Modification d'une mobilité",
            'form' => $form,
        ]);
        $vm->setTemplate('default/default-form');
        return $vm;
    }

    public function historiserAction() : Response
    {
        $agentMobilite = $this->getAgentMobiliteService()->getRequestedAgentMobilite($this);
        $this->getAgentMobiliteService()->historise($agentMobilite);

        $retour = $this->params()->fromQuery('retour');
        if ($retour) return $this->redirect()->toUrl($retour);
        return $this->redirect()->toRoute('agent/afficher', ['agent' => $agentMobilite->getAgent()->getId()], ['fragment' => "mobilite"], true);
    }

    public function restaurerAction() : Response
    {
        $agentMobilite = $this->getAgentMobiliteService()->getRequestedAgentMobilite($this);
        $this->getAgentMobiliteService()->restore($agentMobilite);

        $retour = $this->params()->fromQuery('retour');
        if ($retour) return $this->redirect()->toUrl($retour);
        return $this->redirect()->toRoute('agent/afficher', ['agent' => $agentMobilite->getAgent()->getId()], ['fragment' => "mobilite"], true);
    }

    public function supprimerAction() : ViewModel
    {
        $agentMobilite = $this->getAgentMobiliteService()->getRequestedAgentMobilite($this);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            if ($data["reponse"] === "oui") $this->getAgentMobiliteService()->delete($agentMobilite);
            exit();
        }

        $vm = new ViewModel();
        if ($agentMobilite !== null) {
            $vm->setTemplate('default/confirmation');
            $vm->setVariables([
                'title' => "Suppression d'une mobilité pour l'agent " . $agentMobilite->getAgent()->getDenomination(),
                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('agent/mobilite/supprimer', ["agent-mobilite" => $agentMobilite->getId()], [], true),
            ]);
        }
        return $vm;
    }
}
 No newline at end of file
+35 −0
Changes for module/Application/src/Application/Controller/AgentMobiliteControllerFactory.php: 35 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller;

use Application\Form\AgentMobilite\AgentMobiliteForm;
use Application\Service\Agent\AgentService;
use Application\Service\AgentMobilite\AgentMobiliteService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;

class AgentMobiliteControllerFactory {

    /**
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container): AgentMobiliteController
    {
        /**
         * @var AgentService $agentService
         * @var AgentMobiliteService $agentMobiliteService
         * @var AgentMobiliteForm $agentMobiliteForm
         */
        $agentService = $container->get(AgentService::class);
        $agentMobiliteService = $container->get(AgentMobiliteService::class);
        $agentMobiliteForm = $container->get('FormElementManager')->get(AgentMobiliteForm::class);

        $controller = new AgentMobiliteController();
        $controller->setAgentService($agentService);
        $controller->setAgentMobiliteService($agentMobiliteService);
        $controller->setAgentMobiliteForm($agentMobiliteForm);
        return $controller;
    }
}
 No newline at end of file
Loading