Commit 9eeb08a9 authored by metivier's avatar metivier
Browse files

Ajout des observations

parent 9710399a
Loading
Loading
Loading
Loading
+86 −1
Changes for module/Application/config/merged/entretien-professionnel.config.php: 86 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -12,9 +12,15 @@ use Application\Form\EntretienProfessionnelCampagne\EntretienProfessionnelCampag
use Application\Form\EntretienProfessionnelCampagne\EntretienProfessionnelCampagneFormFactory;
use Application\Form\EntretienProfessionnelCampagne\EntretienProfessionnelCampagneHydrator;
use Application\Form\EntretienProfessionnelCampagne\EntretienProfessionnelCampagneHydratorFactory;
use Application\Form\EntretienProfessionnelObservation\EntretienProfessionnelObservationForm;
use Application\Form\EntretienProfessionnelObservation\EntretienProfessionnelObservationFormFactory;
use Application\Form\EntretienProfessionnelObservation\EntretienProfessionnelObservationHydrator;
use Application\Form\EntretienProfessionnelObservation\EntretienProfessionnelObservationHydratorFactory;
use Application\Provider\Privilege\EntretienproPrivileges;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelCampagneService;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelCampagneServiceFactory;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelObservationService;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelObservationServiceFactory;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelService;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
@@ -96,10 +102,20 @@ return [
                    ],
                    'roles' => [],
                ],
                [
                    'controller' => EntretienProfessionnelController::class,
                    'action' => [
                        'ajouter-observation',
                        'modifier-observation',
                        'historiser-observation',
                        'restaurer-observation',
                        'detruire-observation',
                    ],
                    'roles' => [],
                ],
            ],
        ],
    ],

    'navigation'      => [
        'default' => [
            'home' => [
@@ -242,6 +258,7 @@ return [
                            ],
                        ],
                    ],
                    /** CAMPAGNE */
                    'campagne' => [
                        'type'  => Literal::class,
                        'may_terminate' => false,
@@ -306,6 +323,71 @@ return [
                            ],
                        ]
                    ],
                    /** OBSERVATION */
                    'observation' => [
                        'type'  => Literal::class,
                        'may_terminate' => false,
                        'options' => [
                            'route'    => '/observation',
                        ],
                        'child_routes' => [
                            'ajouter' => [
                                'type'  => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route'    => '/ajouter/:entretien-professionnel',
                                    'defaults' => [
                                        'controller' => EntretienProfessionnelController::class,
                                        'action'     => 'ajouter-observation',
                                    ],
                                ],
                            ],
                            'modifier' => [
                                'type'  => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route'    => '/modifier/:observation',
                                    'defaults' => [
                                        'controller' => EntretienProfessionnelController::class,
                                        'action'     => 'modifier-observation',
                                    ],
                                ],
                            ],
                            'historiser' => [
                                'type'  => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route'    => '/historiser/:observation',
                                    'defaults' => [
                                        'controller' => EntretienProfessionnelController::class,
                                        'action'     => 'historiser-observation',
                                    ],
                                ],
                            ],
                            'restaurer' => [
                                'type'  => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route'    => '/restaurer/:observation',
                                    'defaults' => [
                                        'controller' => EntretienProfessionnelController::class,
                                        'action'     => 'restaurer-observation',
                                    ],
                                ],
                            ],
                            'detruire' => [
                                'type'  => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route'    => '/detruire/:observation',
                                    'defaults' => [
                                        'controller' => EntretienProfessionnelController::class,
                                        'action'     => 'detruire-observation',
                                    ],
                                ],
                            ],
                        ]
                    ],
                ],
            ],
        ],
@@ -315,6 +397,7 @@ return [
        'factories' => [
            EntretienProfessionnelService::class => EntretienProfessionnelServiceFactory::class,
            EntretienProfessionnelCampagneService::class => EntretienProfessionnelCampagneServiceFactory::class,
            EntretienProfessionnelObservationService::class => EntretienProfessionnelObservationServiceFactory::class,
        ],
    ],
    'controllers'     => [
@@ -326,12 +409,14 @@ return [
        'factories' => [
            EntretienProfessionnelForm::class => EntretienProfessionnelFormFactory::class,
            EntretienProfessionnelCampagneForm::class => EntretienProfessionnelCampagneFormFactory::class,
            EntretienProfessionnelObservationForm::class => EntretienProfessionnelObservationFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            EntretienProfessionnelHydrator::class => EntretienProfessionnelHydratorFactory::class,
            EntretienProfessionnelCampagneHydrator::class => EntretienProfessionnelCampagneHydratorFactory::class,
            EntretienProfessionnelObservationHydrator::class => EntretienProfessionnelObservationHydratorFactory::class,
        ],
    ]

+105 −3
Changes for module/Application/src/Application/Controller/EntretienProfessionnelController.php: 105 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -4,12 +4,15 @@ namespace Application\Controller;

use Application\Entity\Db\EntretienProfessionnel;
use Application\Entity\Db\EntretienProfessionnelCampagne;
use Application\Entity\Db\EntretienProfessionnelObservation;
use Application\Form\EntretienProfessionnel\EntretienProfessionnelForm;
use Application\Form\EntretienProfessionnel\EntretienProfessionnelFormAwareTrait;
use Application\Form\EntretienProfessionnelCampagne\EntretienProfessionnelCampagneFormAwareTrait;
use Application\Form\EntretienProfessionnelObservation\EntretienProfessionnelObservationFormAwareTrait;
use Application\Service\Agent\AgentServiceAwareTrait;
use Application\Service\Configuration\ConfigurationServiceAwareTrait;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelCampagneServiceAwareTrait;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelObservationServiceAwareTrait;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelServiceAwareTrait;
use Application\Service\Export\EntretienProfessionnel\EntretienProfessionnelPdfExporter;
use Application\Service\ParcoursDeFormation\ParcoursDeFormationServiceAwareTrait;
@@ -30,12 +33,14 @@ use Zend\Http\Request;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class EntretienProfessionnelController extends AbstractActionController {
class EntretienProfessionnelController extends AbstractActionController
{
    use DateTimeAwareTrait;
    use AgentServiceAwareTrait;
    use ConfigurationServiceAwareTrait;
    use EntretienProfessionnelServiceAwareTrait;
    use EntretienProfessionnelCampagneServiceAwareTrait;
    use EntretienProfessionnelObservationServiceAwareTrait;
    use MailingServiceAwareTrait;
    use ParcoursDeFormationServiceAwareTrait;
    use UserServiceAwareTrait;
@@ -45,6 +50,7 @@ class EntretienProfessionnelController extends AbstractActionController {

    use EntretienProfessionnelFormAwareTrait;
    use EntretienProfessionnelCampagneFormAwareTrait;
    use EntretienProfessionnelObservationFormAwareTrait;

    use FormulaireServiceAwareTrait;
    use FormulaireInstanceServiceAwareTrait;
@@ -77,7 +83,7 @@ class EntretienProfessionnelController extends AbstractActionController {

        // ne pas dupliquer les entretiens (si il existe alors on l'affiche)
        $entretien = null;
        if ($campagne !== null AND $agent !== null) $entretien = $this->getEntretienProfessionnelService()->getEntretienProfessionnelByAgentAndCampagne($agent, $campagne);
        if ($campagne !== null and $agent !== null) $entretien = $this->getEntretienProfessionnelService()->getEntretienProfessionnelByAgentAndCampagne($agent, $campagne);
        if ($entretien !== null) return $this->redirect()->toRoute('entretien-professionnel/afficher', ["campagne" => $campagne->getId()], [], true);

        $entretien = new EntretienProfessionnel();
@@ -281,7 +287,7 @@ class EntretienProfessionnelController extends AbstractActionController {
            if ($data["reponse"] === "non") {
                $validation = $this->getValidationInstanceService()->createValidation($validationType, $entretien, "Refus");
            }
            if ($validation !== null AND $entretien !== null) {
            if ($validation !== null and $entretien !== null) {
                switch ($type) {
                    case 'Agent' :
                        $entretien->setValidationAgent($validation);
@@ -446,4 +452,100 @@ class EntretienProfessionnelController extends AbstractActionController {
        }
        return $vm;
    }

    /** OBSERVATION ***************************************************************************************************/

    public function ajouterObservationAction()
    {
        $entretien = $this->getEntretienProfessionnelService()->getRequestedEntretienProfessionnel($this);
        $observation = new EntretienProfessionnelObservation();
        $observation->setEntretien($entretien);

        $form = $this->getEntretienProfessionnelObservationForm();
        $form->setAttribute('action', $this->url()->fromRoute('entretien-professionnel/observation/ajouter', ['entretien-professionnel' => $entretien->getId()], [], true));
        $form->bind($observation);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getEntretienProfessionnelObservationService()->create($observation);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('application/entretien-professionnel/observation-form');
        $vm->setVariables([
            'title' => "Ajout d'une observation",
            'form' => $form,
        ]);
        return $vm;
    }

    public function modifierObservationAction()
    {
        $observation = $this->getEntretienProfessionnelObservationService()->getRequestedEntretienProfessionnelObservation($this);

        $form = $this->getEntretienProfessionnelObservationForm();
        $form->setAttribute('action', $this->url()->fromRoute('entretien-professionnel/observation/modifier', ['observation' => $observation->getId()], [], true));
        $form->bind($observation);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getEntretienProfessionnelObservationService()->update($observation);
            }
        }

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

    public function historiserObservationAction()
    {
        $observation = $this->getEntretienProfessionnelObservationService()->getRequestedEntretienProfessionnelObservation($this);
        $this->getEntretienProfessionnelObservationService()->historise($observation);
        return $this->redirect()->toRoute('entretien-professionnel/renseigner', ['entretien-professionnel' => $observation->getEntretien()->getId()], ['fragment' => 'avis'], true);
    }

    public function restaurerObservationAction()
    {
        $observation = $this->getEntretienProfessionnelObservationService()->getRequestedEntretienProfessionnelObservation($this);
        $this->getEntretienProfessionnelObservationService()->restore($observation);
        return $this->redirect()->toRoute('entretien-professionnel/renseigner', ['entretien-professionnel' => $observation->getEntretien()->getId()], ['fragment' => 'avis'], true);
    }

    public function detruireObservationAction()
    {
        $observation = $this->getEntretienProfessionnelObservationService()->getRequestedEntretienProfessionnelObservation($this);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            if ($data["reponse"] === "oui") $this->getEntretienProfessionnelObservationService()->delete($observation);
            exit();
        }

        $vm = new ViewModel();
        if ($observation !== null) {
            $vm->setTemplate('application/default/confirmation');
            $vm->setVariables([
                'title' => "Suppression de l'observation",
                'text' => "La suppression est définitive êtes-vous sûr·e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('entretien-professionnel/observation/detruire', ["observation" => $observation->getId()], [], true),
            ]);
        }
        return $vm;
    }
}
+11 −0
Changes for module/Application/src/Application/Controller/EntretienProfessionnelControllerFactory.php: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -4,9 +4,11 @@ namespace Application\Controller;

use Application\Form\EntretienProfessionnel\EntretienProfessionnelForm;
use Application\Form\EntretienProfessionnelCampagne\EntretienProfessionnelCampagneForm;
use Application\Form\EntretienProfessionnelObservation\EntretienProfessionnelObservationForm;
use Application\Service\Agent\AgentService;
use Application\Service\Configuration\ConfigurationService;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelCampagneService;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelObservationService;
use Application\Service\EntretienProfessionnel\EntretienProfessionnelService;
use Application\Service\ParcoursDeFormation\ParcoursDeFormationService;
use Application\Service\Structure\StructureService;
@@ -29,6 +31,7 @@ class EntretienProfessionnelControllerFactory {
         * @var ConfigurationService $configurationService
         * @var EntretienProfessionnelService $entretienProfesionnelService
         * @var EntretienProfessionnelCampagneService $entretienProfesionnelCampagneService
         * @var EntretienProfessionnelObservationService $entretienProfessionnelObservationService
         * @var FormulaireService $formulaireService
         * @var FormulaireInstanceService $formulaireInstanceService
         * @var MailingService $mailingService
@@ -42,6 +45,7 @@ class EntretienProfessionnelControllerFactory {
        $configurationService = $container->get(ConfigurationService::class);
        $entretienProfesionnelService = $container->get(EntretienProfessionnelService::class);
        $entretienProfesionnelCampagneService = $container->get(EntretienProfessionnelCampagneService::class);
        $entretienProfessionnelObservationService = $container->get(EntretienProfessionnelObservationService::class);
        $formulaireService = $container->get(FormulaireService::class);
        $formulaireInstanceService = $container->get(FormulaireInstanceService::class);
        $mailingService = $container->get(MailingService::class);
@@ -53,9 +57,11 @@ class EntretienProfessionnelControllerFactory {
        /**
         * @var EntretienProfessionnelForm $entretienProfessionnelForm
         * @var EntretienProfessionnelCampagneForm $campagneForm
         * @var EntretienProfessionnelObservationForm $observationForm
         */
        $entretienProfessionnelForm = $container->get('FormElementManager')->get(EntretienProfessionnelForm::class);
        $campagneForm = $container->get('FormElementManager')->get(EntretienProfessionnelCampagneForm::class);
        $observationForm = $container->get('FormElementManager')->get(EntretienProfessionnelObservationForm::class);

        /* @var PhpRenderer $renderer  */
        $renderer = $container->get('ViewRenderer');
@@ -63,11 +69,13 @@ class EntretienProfessionnelControllerFactory {
        /** @var EntretienProfessionnelController $controller */
        $controller = new EntretienProfessionnelController();
        $controller->setRenderer($renderer);

        $controller->setAgentService($agentService);
        $controller->setUserService($userService);
        $controller->setConfigurationService($configurationService);
        $controller->setEntretienProfessionnelService($entretienProfesionnelService);
        $controller->setEntretienProfessionnelCampagneService($entretienProfesionnelCampagneService);
        $controller->setEntretienProfessionnelObservationService($entretienProfessionnelObservationService);
        $controller->setFormulaireInstanceService($formulaireInstanceService);
        $controller->setParcoursDeFormationService($parcoursDeFormationService);
        $controller->setValidationInstanceService($validationInstanceService);
@@ -75,8 +83,11 @@ class EntretienProfessionnelControllerFactory {
        $controller->setFormulaireService($formulaireService);
        $controller->setMailingService($mailingService);
        $controller->setStructureService($structureService);

        $controller->setEntretienProfessionnelForm($entretienProfessionnelForm);
        $controller->setEntretienProfessionnelCampagneForm($campagneForm);
        $controller->setEntretienProfessionnelObservationForm($observationForm);

        return $controller;
    }
}
+17 −0
Changes for module/Application/src/Application/Entity/Db/EntretienProfessionnel.php: 17 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Application\Entity\Db;
use Autoform\Entity\Db\FormulaireInstance;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use UnicaenApp\Exception\RuntimeException;
use UnicaenUtilisateur\Entity\Db\User;
use UnicaenUtilisateur\Entity\HistoriqueAwareInterface;
use UnicaenUtilisateur\Entity\HistoriqueAwareTrait;
@@ -194,6 +195,22 @@ class EntretienProfessionnel implements HistoriqueAwareInterface {
        return $this;
    }

    /**
     * @return EntretienProfessionnelObservation
     */
    public function getObservationActive()
    {
        $observation = null;
        /** @var EntretienProfessionnelObservation $obs */
        foreach ($this->observations as $obs) {
            if ($obs->estNonHistorise()) {
                if ($observation !== null) throw new RuntimeException("Plusieurs observations actives pour l'entretien #".$this->id, 0, null);
                $observation = $obs;
            }
        }
        return $observation;
    }

    /** VALIDATION ****************************************************************************************************/

    /**
+59 −0
Changes for module/Application/src/Application/Form/EntretienProfessionnelObservation/EntretienProfessionnelObservationForm.php: 59 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Form\EntretienProfessionnelObservation;

use Zend\Form\Element\Button;
use Zend\Form\Element\Textarea;
use Zend\Form\Form;

class EntretienProfessionnelObservationForm extends Form {

    public function init()
    {
        // entretien
        $this->add([
            'name' => 'obs-entretien',
            'type' => Textarea::class,
            'options' => [
                'label' => "Observation sur l'entretien : ",
                'label_attributes' => [
                    'class' => 'control-label',
                ],
            ],
            'attributes' => [
                'id' =>  'obs-entretien',
                'class' => 'type2 form-control',
            ]
        ]);
        // perspective
        $this->add([
            'name' => 'obs-perspective',
            'type' => Textarea::class,
            'options' => [
                'label' => "Observation sur les perspectives : ",
                'label_attributes' => [
                    'class' => 'control-label',
                ],
            ],
            'attributes' => [
                'id' => 'obs-perspective',
                'class' => 'type2 form-control',
            ]
        ]);
        // button
        $this->add([
            'type' => Button::class,
            'name' => 'submit',
            'options' => [
                'label' => '<i class="fas fa-save"></i> Ajouter',
                'label_options' => [
                    'disable_html_escape' => true,
                ],
            ],
            'attributes' => [
                'type' => 'submit',
                'class' => 'btn btn-primary',
            ],
        ]);
    }
}
 No newline at end of file
Loading