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

Progess

parent a9127909
Loading
Loading
Loading
Loading
+0 −138
Original line number Diff line number Diff line
@@ -36,11 +36,8 @@ return [
                [
                    'controller' => FicheMetierController::class,
                    'action' => [
                        'afficher',
                        'afficher-applications',
                        'afficher-competences',
                        'exporter',
                        'exporter-toutes',
                        'graphique-applications',
                        'graphique-competences',

@@ -53,7 +50,6 @@ return [
                    'controller' => FicheMetierController::class,
                    'action' => [
                        'ajouter',
                        'dupliquer',
                        'importer-depuis-csv',
//                        'ajouter-terminer',
                    ],
@@ -64,15 +60,12 @@ return [
                [
                    'controller' => FicheMetierController::class,
                    'action' => [
                        'editer',

                        'retirer-activite',
                        'deplacer-activite',
                        'ajouter-nouvelle-activite',
                        'ajouter-activite-existante',

                        'changer-expertise',
                        'changer-etat',
                        'modifier-application',
                        'modifier-formation',

@@ -83,26 +76,6 @@ return [
                        FicheMetierPrivileges::FICHEMETIER_MODIFIER,
                    ],
                ],
                [
                    'controller' => FicheMetierController::class,
                    'action' => [
                        'detruire',
                    ],
                    'privileges' => [
                        FicheMetierPrivileges::FICHEMETIER_DETRUIRE,
                    ],
                ],
                [
                    'controller' => FicheMetierController::class,
                    'action' => [
                        'ajouter-etat',
                        'modifier-etat',
                        'supprimer-etat',
                    ],
                    'privileges' => [
                        FicheMetierPrivileges::FICHEMETIER_MODIFIER,
                    ],
                ],
            ],
        ],
    ],
@@ -156,52 +129,7 @@ return [
                    ],
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'etat' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/etat',
                            'defaults' => [
                                'controller' => FicheMetierController::class,
                            ],
                        ],
                        'may_terminate' => false,
                'child_routes' => [
                            'ajouter' => [
                                'type'  => Literal::class,
                                'options' => [
                                    'route'    => '/ajouter',
                                    'defaults' => [
                                        'controller' => FicheMetierController::class,
                                        'action'     => 'ajouter-etat',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
                            'modifier' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/modifier/:etat',
                                    'defaults' => [
                                        'controller' => FicheMetierController::class,
                                        'action'     => 'modifier-etat',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
                            'supprimer' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/supprimer/:etat',
                                    'defaults' => [
                                        'controller' => FicheMetierController::class,
                                        'action'     => 'supprimer-etat',
                                    ],
                                ],
                                'may_terminate' => true,
                            ],
                        ],
                    ],
                    'ajouter' => [
                        'type'  => Literal::class,
                        'options' => [
@@ -290,17 +218,6 @@ return [
//                        ],
//                        'may_terminate' => true,
//                    ],
                    'afficher' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/afficher/:id',
                            'defaults' => [
                                'controller' => FicheMetierController::class,
                                'action'     => 'afficher',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'graphique-applications' => [
                        'type'  => Segment::class,
                        'options' => [
@@ -323,50 +240,6 @@ return [
                        ],
                        'may_terminate' => true,
                    ],
                    'exporter' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/exporter/:id',
                            'defaults' => [
                                'controller' => FicheMetierController::class,
                                'action'     => 'exporter',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'exporter-toutes' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/exporter-toutes',
                            'defaults' => [
                                'controller' => FicheMetierController::class,
                                'action'     => 'exporter-toutes',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'editer' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/editer[/:id]',
                            'defaults' => [
                                'controller' => FicheMetierController::class,
                                'action'     => 'editer',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'detruire' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/detruire/:fiche-metier',
                            'defaults' => [
                                'controller' => FicheMetierController::class,
                                'action'     => 'detruire',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'changer-expertise' => [
                        'type'  => Segment::class,
                        'options' => [
@@ -378,17 +251,6 @@ return [
                        ],
                        'may_terminate' => true,
                    ],
                    'changer-etat' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/changer-etat/:fiche-metier',
                            'defaults' => [
                                'controller' => FicheMetierController::class,
                                'action'     => 'changer-etat',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'retirer-activite' => [
                        'type'  => Segment::class,
                        'options' => [
+49 −165
Original line number Diff line number Diff line
@@ -3,13 +3,11 @@
namespace Application\Controller;

use Application\Entity\Db\Activite;
use Application\Entity\Db\ParcoursDeFormation;
use Application\Form\Activite\ActiviteForm;
use Application\Form\Activite\ActiviteFormAwareTrait;
use Application\Form\FicheMetierImportation\FicheMetierImportationFormAwareTrait;
use Application\Form\SelectionFicheMetier\SelectionFicheMetierFormAwareTrait;
use Application\Provider\Etat\FicheMetierEtats;
use Application\Provider\Template\PdfTemplate;
use Application\Service\Activite\ActiviteServiceAwareTrait;
use Application\Service\ActiviteDescription\ActiviteDescriptionServiceAwareTrait;
use Application\Service\Agent\AgentServiceAwareTrait;
@@ -35,16 +33,13 @@ use Laminas\View\Model\ViewModel;
use Metier\Form\SelectionnerMetier\SelectionnerMetierFormAwareTrait;
use Metier\Service\Domaine\DomaineServiceAwareTrait;
use Metier\Service\Metier\MetierServiceAwareTrait;
use Mpdf\MpdfException;
use UnicaenApp\Exception\RuntimeException;
use UnicaenEtat\Form\SelectionEtat\SelectionEtatFormAwareTrait;
use UnicaenEtat\Service\Etat\EtatServiceAwareTrait;
use UnicaenEtat\Service\EtatType\EtatTypeServiceAwareTrait;
use UnicaenPdf\Exporter\PdfExporter;
use UnicaenRenderer\Service\Rendu\RenduServiceAwareTrait;

/** @method FlashMessenger flashMessenger() */

class FicheMetierController extends AbstractActionController
{
    /** Traits associés aux services */
@@ -99,23 +94,6 @@ class FicheMetierController extends AbstractActionController
        ]);
    }

    public function afficherAction() : ViewModel
    {
        $fiche = $this->getFicheMetierService()->getRequestedFicheMetier($this, 'id', true);
        $missions = $this->getActiviteService()->getActivitesByFicheMetierType($fiche);
        $parcours = ($fiche->getMetier()->getCategorie())?$this->getParcoursDeFormationService()->generateParcoursArrayFromFicheMetier($fiche):null;
        $applications = $this->getFicheMetierService()->getApplicationsDictionnaires($fiche, true);
        $competences = $this->getFicheMetierService()->getCompetencesDictionnaires($fiche, true);

        return new ViewModel([
            'fiche' => $fiche,
            'competences' => $competences,
            'applications' => $applications,
            'parcours' => $parcours,
            'missions' => $missions,
        ]);
    }

    public function ajouterAction(): ViewModel
    {
        /** @var FicheMetier $fiche */
@@ -152,83 +130,6 @@ class FicheMetierController extends AbstractActionController
        return $vm;
    }

    public function dupliquerAction() : Response
    {
        $fiche = $this->getFicheMetierService()->getRequestedFicheMetier($this, 'fiche-metier');

        if ($fiche !== null) {
            $duplicata = $this->getFicheMetierService()->dupliquerFicheMetier($fiche);
            return $this->redirect()->toRoute('fiche-metier-type/editer', ['id' => $duplicata->getId()], [], true);
        }
        exit();
    }

    public function editerAction() : ViewModel
    {
        $fiche = $this->getFicheMetierService()->getRequestedFicheMetier($this, 'id', false);
        $missions = $this->getActiviteService()->getActivitesByFicheMetierType($fiche);
        $parcours = ($fiche->getMetier()->getCategorie())?$this->getParcoursDeFormationService()->generateParcoursArrayFromFicheMetier($fiche):null;
        $applications = $this->getFicheMetierService()->getApplicationsDictionnaires($fiche, true);
        $competences = $this->getFicheMetierService()->getCompetencesDictionnaires($fiche, true);

        return new ViewModel([
            'fiche' => $fiche,
            'competences' => $competences,
            'applications' => $applications,
            'parcours' => $parcours,
            'missions' => $missions,
        ]);
    }

    public function exporterAction() : string
    {
        $fichemetier = $this->getFicheMetierService()->getRequestedFicheMetier($this, 'id', true);

        $vars = [
            'fichemetier' => $fichemetier,
            'metier' => $fichemetier->getMetier(),
            'parcours' => ($fichemetier->getMetier()->getCategorie())?$this->getParcoursDeFormationService()->getParcoursDeFormationByTypeAndReference(ParcoursDeFormation::TYPE_CATEGORIE, $fichemetier->getMetier()->getCategorie()->getId()):null,
        ];
        $rendu = $this->getRenduService()->generateRenduByTemplateCode(PdfTemplate::FICHE_METIER, $vars);

        try {
            $exporter = new PdfExporter();
            $exporter->getMpdf()->SetTitle($rendu->getSujet());
            $exporter->setHeaderScript('');
            $exporter->setFooterScript('');
            $exporter->addBodyHtml($rendu->getCorps());
            return $exporter->export($rendu->getSujet());
        } catch (MpdfException $e) {
            throw new RuntimeException("Un problème est survenu lors de l'export en PDF",0,$e);
        }
    }

    public function detruireAction() : ViewModel
    {
        $fiche = $this->getFicheMetierService()->getRequestedFicheMetier($this, 'fiche-metier');

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

        $vm = new ViewModel();
        if ($fiche !== null) {
            $vm->setTemplate('application/default/confirmation');
            $vm->setVariables([
                'title' => "Suppression de la fiche de poste  de " . (($fiche and $fiche->getMetier()) ? $fiche->getMetier()->getLibelle() : "[Aucun métier]"),
                'text' => "La suppression est définitive êtes-vous sûr·e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('fiche-metier-type/detruire', ["fiche-metier" => $fiche->getId()], [], true),
            ]);
        }
        return $vm;
    }

    /** ACTIVITE LIEE *************************************************************************************************/

    public function ajouterNouvelleActiviteAction(): ViewModel
@@ -429,34 +330,7 @@ class FicheMetierController extends AbstractActionController

        return $this->redirect()->toRoute('fiche-metier-type/editer', ['id' => $fiche->getId()], [], true);
    }
    /** GESTION DES ETATS DES FICHES METIERS **************************************************************************/

    public function changerEtatAction() : ViewModel
    {
        $fiche = $this->getFicheMetierService()->getRequestedFicheMetier($this, 'fiche-metier');

        $form = $this->getSelectionEtatForm();
        $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/changer-etat', ['fiche-metier' => $fiche->getId()], [], true));
        $form->bind($fiche);
        $form->reinit(FicheMetierEtats::TYPE);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getFicheMetierService()->update($fiche);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('application/default/default-form');
        $vm->setVariables([
            'title' => "Changer l'état de la fiche métier",
            'form' => $form,
        ]);
        return $vm;
    }

    /** IMPORTATION ***************************************************************************************************/

@@ -479,9 +353,13 @@ class FicheMetierController extends AbstractActionController

        // tri
        foreach (['Connaissances', 'Opérationnelles', 'Comportementales'] as $type) {
            usort($csvInfos['competences'][$type], function (Competence $a, Competence $b) {return $a->getLibelle() > $b->getLibelle();});
            usort($csvInfos['competences'][$type], function (Competence $a, Competence $b) {
                return $a->getLibelle() > $b->getLibelle();
            });
        }
        usort($csvInfos['applications'], function (Application $a, Application $b) {return $a->getLibelle() > $b->getLibelle();});
        usort($csvInfos['applications'], function (Application $a, Application $b) {
            return $a->getLibelle() > $b->getLibelle();
        });

        return $csvInfos;
    }
@@ -541,8 +419,11 @@ class FicheMetierController extends AbstractActionController
        $agent = $this->getAgentService()->getRequestedAgent($this);

        $dictionnaire = $this->getFicheMetierService()->getCompetencesDictionnaires($ficheMetier, true);
        $dictionnaire = array_filter($dictionnaire, function($item) { return ($item['entite'])->isClef();});
        $labels = []; $values = [];
        $dictionnaire = array_filter($dictionnaire, function ($item) {
            return ($item['entite'])->isClef();
        });
        $labels = [];
        $values = [];

        $valuesFiche = [];
        foreach ($dictionnaire as $entry) {
@@ -565,7 +446,7 @@ class FicheMetierController extends AbstractActionController
                /** @var CompetenceElement $element */
                $element = $entry['entite'];
                $id = $element->getCompetence()->getId();
                $niveau = (isset($competences[$id]) AND $competences[$id]->getNiveauMaitrise())?$competences[$id]->getNiveauMaitrise()->getNiveau():"'-'";
                $niveau = (isset($competences[$id]) and $competences[$id]->getNiveauMaitrise()) ? $competences[$id]->getNiveauMaitrise()->getNiveau() : "'-'";
                $valuesAgent[] = $niveau;
            }
            $values[] = [
@@ -592,8 +473,11 @@ class FicheMetierController extends AbstractActionController
        $agent = $this->getAgentService()->getRequestedAgent($this);

        $dictionnaire = $this->getFicheMetierService()->getApplicationsDictionnaires($ficheMetier, true);
        $dictionnaire = array_filter($dictionnaire, function($item) { return ($item['entite'])->isClef();});
        $labels = []; $values = [];
        $dictionnaire = array_filter($dictionnaire, function ($item) {
            return ($item['entite'])->isClef();
        });
        $labels = [];
        $values = [];

        $valuesFiche = [];
        foreach ($dictionnaire as $entry) {
@@ -616,7 +500,7 @@ class FicheMetierController extends AbstractActionController
                /** @var ApplicationElement $element */
                $element = $entry['entite'];
                $id = $element->getApplication()->getId();
                $niveau = (isset($applications[$id]) AND $applications[$id]->getNiveauMaitrise())?$applications[$id]->getNiveauMaitrise()->getNiveau():"'-'";
                $niveau = (isset($applications[$id]) and $applications[$id]->getNiveauMaitrise()) ? $applications[$id]->getNiveauMaitrise()->getNiveau() : "'-'";
                $valuesAgent[] = $niveau;
            }
            $values[] = [
+25 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Application\Service\FicheMetier;
use Application\Controller\FicheMetierController;
use Application\Entity\Db\Activite;
use Application\Entity\Db\ActiviteDescription;
use Application\Provider\Template\PdfTemplate;
use FicheMetier\Entity\Db\FicheMetier;
use Application\Entity\Db\FicheMetierActivite;
use Application\Provider\Etat\FicheMetierEtats;
@@ -29,9 +30,12 @@ use Laminas\Mvc\Controller\AbstractController;
use Metier\Entity\Db\Domaine;
use Metier\Service\Domaine\DomaineServiceAwareTrait;
use Metier\Service\Metier\MetierServiceAwareTrait;
use Mpdf\MpdfException;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenEtat\Service\Etat\EtatServiceAwareTrait;
use UnicaenPdf\Exporter\PdfExporter;
use UnicaenRenderer\Service\Rendu\RenduServiceAwareTrait;

class FicheMetierService {
    use ApplicationServiceAwareTrait;
@@ -41,6 +45,7 @@ class FicheMetierService {
    use DomaineServiceAwareTrait;
    use EtatServiceAwareTrait;
    use EntityManagerAwareTrait;
    use RenduServiceAwareTrait;

    use ActiviteServiceAwareTrait;
    use ActiviteDescriptionServiceAwareTrait;
@@ -557,4 +562,24 @@ class FicheMetierService {
        return $fiche;
    }

    public function exporter(?FicheMetier $fichemetier)
    {
        $vars = [
            'fichemetier' => $fichemetier,
            'metier' => $fichemetier->getMetier(),
        ];
        $rendu = $this->getRenduService()->generateRenduByTemplateCode(PdfTemplate::FICHE_METIER, $vars);

        try {
            $exporter = new PdfExporter();
            $exporter->getMpdf()->SetTitle($rendu->getSujet());
            $exporter->setHeaderScript('');
            $exporter->setFooterScript('');
            $exporter->addBodyHtml($rendu->getCorps());
            return $exporter->export($rendu->getSujet());
        } catch (MpdfException $e) {
            throw new RuntimeException("Un problème est survenu lors de l'export en PDF", 0, $e);
        }
    }

}
 No newline at end of file
+4 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ use Metier\Service\Metier\MetierService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenEtat\Service\Etat\EtatService;
use UnicaenRenderer\Service\Rendu\RenduService;

class FicheMetierServiceFactory {

@@ -42,6 +43,7 @@ class FicheMetierServiceFactory {
         * @var HasApplicationCollectionService $hasApplicationCollectionService
         * @var HasCompetenceCollectionService $hasCompetenceCollectionService
         * @var MetierService $metierService
         * @var RenduService $renduService
         */
        $entityManager = $container->get('doctrine.entitymanager.orm_default');
        $applicationService = $container->get(ApplicationService::class);
@@ -50,6 +52,7 @@ class FicheMetierServiceFactory {
        $competenceElementService = $container->get(CompetenceElementService::class);
        $domaineService = $container->get(DomaineService::class);
        $etatService = $container->get(EtatService::class);
        $renduService = $container->get(RenduService::class);

        $activiteService = $container->get(ActiviteService::class);
        $activiteDescriptionService = $container->get(ActiviteDescriptionService::class);
@@ -67,6 +70,7 @@ class FicheMetierServiceFactory {
        $service->setCompetenceElementService($competenceElementService);
        $service->setDomaineService($domaineService);
        $service->setEtatService($etatService);
        $service->setRenduService($renduService);

        $service->setActiviteService($activiteService);
        $service->setActiviteDescriptionService($activiteDescriptionService);
+0 −7
Original line number Diff line number Diff line
@@ -71,13 +71,6 @@ $this->headTitle('Index des fiches métiers');
        });
    });

    $(function() {
        $("body").on("destruction", function (event) {
            event.div.modal('hide');
            window.location.reload();
        });
    });

    $(function() {
        $("body").on("modification", function (event) {
            event.div.modal('hide');
Loading