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

Restauration de l'ajout/gestion/retrait des missions additionnelles dans les fiches de postes

parent 40ed94a1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ Version 3.2.5 (XX/XX/2023)
- [Fix] Retrait de restes de l'ancien système de chaine hiérarchique dans la page d'index des agents. 
- Remplacement de l'affichage Administratif par Administratif/BIATSS 
- Lors de la saisie manuelle de la chaine hiérarchique l'existant est réaffiché après la saisie de l'agent
- Restauration de l'ajout/gestion/retrait des missions additionnelles dans les fiches de postes

Modification en BD
---
+84 −74
Original line number Diff line number Diff line
@@ -2,8 +2,11 @@

namespace Application\Controller;

use Application\Entity\Db\SpecificitePoste;
use Application\Service\FichePoste\FichePosteServiceAwareTrait;
use Application\Service\SpecificitePoste\SpecificitePosteServiceAwareTrait;
use FicheMetier\Service\MissionPrincipale\MissionPrincipaleServiceAwareTrait;
use FichePoste\Service\MissionAdditionnelle\MissionAdditionnelleServiceAwareTrait;
use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
@@ -11,95 +14,102 @@ use Laminas\View\Model\ViewModel;
class SpecificiteController extends AbstractActionController
{
    use FichePosteServiceAwareTrait;
    use MissionAdditionnelleServiceAwareTrait;
    use MissionPrincipaleServiceAwareTrait;
    use SpecificitePosteServiceAwareTrait;

    /** TODO Déclarer la gestion du formulaire de specificité ici et non plus dans le controller FichePosteController */

    /** ACTIVITES LIEES A LA SPECIFICITE DE POSTE *********************************************************************/

    /** TODO reecrire avec les missions additionnelles */
    public function ajouterActiviteAction() : ViewModel
    {
//        $fichePoste = $this->getFichePosteService()->getRequestedFichePoste($this);
//        $specificite = $this->getSpecificitePosteService()->getRequestedSpecificitePoste($this);
//        if ($specificite === null) $specificite = $fichePoste->getSpecificite();
        $fichePoste = $this->getFichePosteService()->getRequestedFichePoste($this);
        $specificite = $this->getSpecificitePosteService()->getRequestedSpecificitePoste($this);
        if ($specificite === null) $specificite = $fichePoste->getSpecificite();
//
//        if ($specificite === null) {
//            $specificite = new SpecificitePoste();
//            $specificite->setFiche($fichePoste);
//            $this->getSpecificitePosteService()->create($specificite);
//            $fichePoste->setSpecificite($specificite);
//            $this->getFichePosteService()->update($fichePoste);
//        }
//
//        $alreadyIn = [];
//        foreach ($specificite->getActivites() as $activite) {
//            $alreadyIn[$activite->getActivite()->getId()] = $activite;
//        }
//        $activites = $this->getActiviteService()->getActivites();
//
//        $request = $this->getRequest();
//        if ($request->isPost()) {
//            $data = $request->getPost();
//            $activite = $this->getActiviteService()->getActivite((int)$data['activite']['id']);
//            if ($activite !== null) {
//                $specificiteActivite = new SpecificiteActivite();
//                $specificiteActivite->setActivite($activite);
//                $specificiteActivite->setSpecificite($specificite);
//                $this->getSpecificiteActiviteService()->create($specificiteActivite);
//            }
//        }
//
//        $vm = new ViewModel([
//            'title' => "Ajout d'une activité spécifique au poste",
//            'fichePoste' => $fichePoste,
//            'specificite' => $specificite,
//            'activites' => $activites,
//            'alreadyIn' => $alreadyIn,
//            'url' => $this->url()->fromRoute('specificite/ajouter-activite', ['fiche-poste' => $fichePoste->getId(), 'specificite-poste' => $specificite->getId()], [], true),
//        ]);
//        $vm->setTemplate('application/fiche-metier/ajouter-activite-existante');
//        return $vm;
        if ($specificite === null) {
            $specificite = new SpecificitePoste();
            $specificite->setFiche($fichePoste);
            $this->getSpecificitePosteService()->create($specificite);
            $fichePoste->setSpecificite($specificite);
            $this->getFichePosteService()->update($fichePoste);
        }

        $alreadyIn = [];
        foreach ($specificite->getActivites() as $activite) {
            $alreadyIn[$activite->getActivite()->getId()] = $activite;
        }
        $activites = $this->getMissionPrincipaleService()->getMissionsPrincipales();

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $mission = $this->getMissionPrincipaleService()->getMissionPrincipale((int)$data['activite']['id']);
            if ($mission !== null) {
                $this->getMissionAdditionnelleService()->ajouterMissionAdditionnelle($fichePoste, $mission);
            }
        }

        $vm = new ViewModel([
            'title' => "Ajout d'une mission additionnelle au poste",
            'fichePoste' => $fichePoste,
            'specificite' => $specificite,
            'activites' => $activites,
            'alreadyIn' => $alreadyIn,
            'url' => $this->url()->fromRoute('specificite/ajouter-activite', ['fiche-poste' => $fichePoste->getId(), 'specificite-poste' => $specificite->getId()], [], true),
        ]);
        return $vm;
    }

    /** TODO reecrire avec les missions additionnelles */
    public function retirerActiviteAction() : Response
    public function retirerActiviteAction() : ViewModel
    {
//        $specificiteActivite = $this->getSpecificiteActiviteService()->getRequestSpecificiteActivite($this);
//        $retour = $this->params()->fromQuery('retour');
//
//        $this->getSpecificiteActiviteService()->delete($specificiteActivite);
//
//        if ($retour) return $this->redirect()->toRoute($retour);
//        return $this->redirect()->toRoute('fiche-poste/editer', ['fiche-poste' => $specificiteActivite->getSpecificite()->getFiche()->getId()], [], true);
        $missionadditionnelle = $this->getMissionAdditionnelleService()->getRequestedMissionAdditionnelle($this, 'specificite-activite');

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

        $vm = new ViewModel();
        if ($missionadditionnelle !== null) {
            $vm->setTemplate('default/confirmation');
            $vm->setVariables([
                'title' => "Suppression de la mission additionnelle <strong>" . $missionadditionnelle->getMission()->getLibelle() . '</strong>',
                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('specificite/retirer-activite', ["specificite-activite" => $missionadditionnelle->getId()], [], true),
            ]);
        }
        return $vm;
    }

    /** TODO reecrire avec les missions additionnelles */
    public function gererActiviteAction() : ViewModel
    {
//        $specificiteActivite = $this->getSpecificiteActiviteService()->getRequestSpecificiteActivite($this);
//
//        $descriptions = $specificiteActivite->getActivite()->getDescriptions();
//        $descriptions = array_filter($descriptions, function ($a) {
//            return $a->estNonHistorise();
//        });
//
//        $request = $this->getRequest();
//        if ($request->isPost()) {
//            $data = $request->getPost();
//            $toRemove = [];
//            foreach ($descriptions as $description) {
//                if (!isset($data["" . $description->getId()]) or $data["" . $description->getId()] !== "on") $toRemove[] = $description->getId();
//            }
//            $retrait = implode(";", $toRemove);
//            $specificiteActivite->setRetrait($retrait);
//            $this->getSpecificiteActiviteService()->update($specificiteActivite);
//        }
//
//        return new ViewModel([
//            'title' => 'Sélectionner les descriptions à conserver',
//            'specificiteActivite' => $specificiteActivite,
//            'descriptions' => $descriptions,
//        ]);
        $missionadditionnelle = $this->getMissionAdditionnelleService()->getRequestedMissionAdditionnelle($this, 'specificite-activite');

        $descriptions = $missionadditionnelle->getMission()->getActivites();
        $descriptions = array_filter($descriptions, function ($a) {
            return $a->estNonHistorise();
        });

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $toRemove = [];
            foreach ($descriptions as $description) {
                if (!isset($data["" . $description->getId()]) or $data["" . $description->getId()] !== "on") $toRemove[] = $description->getId();
            }
            $retrait = implode(";", $toRemove);
            $missionadditionnelle->setRetraits($retrait);
            $this->getMissionAdditionnelleService()->update($missionadditionnelle);
        }

        return new ViewModel([
            'title' => 'Sélectionner les descriptions à conserver',
            'missionAdditionnelle' => $missionadditionnelle,
            'descriptions' => $descriptions,
        ]);
    }
}
 No newline at end of file
+8 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@ namespace Application\Controller;

use Application\Service\FichePoste\FichePosteService;
use Application\Service\SpecificitePoste\SpecificitePosteService;
use FicheMetier\Service\MissionPrincipale\MissionPrincipaleService;
use FichePoste\Service\MissionAdditionnelle\MissionAdditionnelleService;
use Interop\Container\ContainerInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
@@ -20,13 +22,19 @@ class SpecificiteControllerFactory {
    {
        /**
         * @var FichePosteService $fichePosteService
         * @var MissionAdditionnelleService $missionAdditionnelleService
         * @var MissionPrincipaleService $missionPrincipaleService
         * @var SpecificitePosteService $specificitePosteService
         */
        $fichePosteService = $container->get(FichePosteService::class);
        $missionAdditionnelleService = $container->get(MissionAdditionnelleService::class);
        $missionPrincipaleService = $container->get(MissionPrincipaleService::class);
        $specificitePosteService = $container->get(SpecificitePosteService::class);

        $controller = new SpecificiteController();
        $controller->setFichePosteService($fichePosteService);
        $controller->setMissionAdditionnelleService($missionAdditionnelleService);
        $controller->setMissionPrincipaleService($missionPrincipaleService);
        $controller->setSpecificitePosteService($specificitePosteService);
        return $controller;
    }
+1 −1
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ class SpecificitePosteService {
    public function createQueryBuilder() : QueryBuilder
    {
        $qb = $this->getEntityManager()->getRepository(SpecificitePoste::class)->createQueryBuilder('specificite')
            ->leftJoin('specificite.activites', 'activite')->addSelect('specificite')
//            ->leftJoin('specificite.activites', 'activite')->addSelect('specificite')
        ;
        return $qb;
    }
+19 −23
Original line number Diff line number Diff line
@@ -30,10 +30,10 @@ $agent = $missionAdditionnelle->getFicheposte()->getAgent();
$delta = ($mission->getNiveau())?$mission->getNiveau()->getDeltaWithAgent($agent):null;
?>

<div class="specificite-activite">
    <div class="activite-titre delta_<?php echo $delta; ?>">
<div class="card">
    <div class="card-header delta_<?php echo $delta; ?>">
        <div class="row">
            <div class="col-md-10">
            <div class="col-md-9">
                <h3><?php echo $mission->getLibelle(); ?>
                    <?php if ($delta AND $delta !== 0) : ?>
                        <span class="icon icon-attention" title="Il existe un écart de <?php echo $delta; ?> niveau(x) entre l'agent et l'activité"></span>
@@ -41,18 +41,27 @@ $delta = ($mission->getNiveau())?$mission->getNiveau()->getDeltaWithAgent($agent
                </h3>
            </div>
            <?php if($mode === 'edition') : ?>
                <div class="pull-right activite-action">
                <div class="col-md-3 action">
                    <?php if ($canGererActivite) : ?>
                        <?php /** @see \Application\Controller\SpecificiteController::gererActiviteAction() */ ?>
                        <a href="<?php echo $this->url('specificite/gerer-activite', ['specificite-activite' => $missionAdditionnelle->getId()], [], true); ?>"
                            class="ajax-modal" data-event="modification"
                        >
                            <span class="icon icon-listing"></span></a>
                            <span class="icon icon-listing"></span>
                            Sélectionner des activités
                        </a>
                    <?php endif; ?>
                    <br>
                    <?php if ($canRetirerActivite) : ?>
                        <?php /** @see \Application\Controller\SpecificiteController::retirerActiviteAction() */ ?>
                        <a href="<?php echo $this->url('specificite/retirer-activite', ['specificite-activite' => $missionAdditionnelle->getId()], [], true); ?>">
                            <span class="icon icon-retirer"></span></a>
                        <a href="<?php echo $this->url('specificite/retirer-activite', ['specificite-activite' => $missionAdditionnelle->getId()], [], true); ?>"
                           class="ajax-modal" data-event="modification"
                        >
                            <span class="text-danger">
                            <span class="icon icon-retirer"></span>
                            Retirer
                            </span>
                        </a>
                    <?php endif; ?>
                </div>
            <?php endif; ?>
@@ -69,7 +78,7 @@ $delta = ($mission->getNiveau())?$mission->getNiveau()->getDeltaWithAgent($agent
        <br/>
        <?php endif; ?>
    </div>

    <div class="card-body">
        <div class="row">
        <div class="col-md-8">
            <div class="activite-description">
@@ -116,18 +125,5 @@ $delta = ($mission->getNiveau())?$mission->getNiveau()->getDeltaWithAgent($agent
            </div>
        </div>
    </div>


    </div>

<style>
    div.specificite-activite div.activite-titre {
        border: 1px solid black;
        padding-left: 2rem;
    }

    div.specificite-activite div.activite-action {
        padding-top: 2rem;
        padding-right: 1rem;
    }
</style>
 No newline at end of file
</div>
Loading