From ac9a7f6e4f78adcc7d4124f898b4b0e5c62275f2 Mon Sep 17 00:00:00 2001 From: metivier <jean-philippe.metivier@unicaen.fr> Date: Fri, 17 Jul 2020 09:22:57 +0200 Subject: [PATCH] Gestion des groupe d'application dans l'export des fiches metiers --- .../Controller/CategorieController.php | 1 - .../Controller/CompetenceController.php | 3 - .../Controller/FicheMetierController.php | 49 ++++++++------- .../FicheMetierControllerFactory.php | 4 ++ .../src/Application/Entity/Db/Metier.php | 27 +++++++- .../Export/FicheMetier/fiche-metier-pdf.phtml | 33 +++++++--- .../View/Helper/partial/fiche-metier.phtml | 1 - .../view/application/fiche-metier/index.phtml | 16 +++++ .../partial/fiche-metier-bis.phtml | 62 +++++++++++++++++++ .../metier/partial/listing-metier.phtml | 8 ++- public/css/app.css | 4 ++ 11 files changed, 169 insertions(+), 39 deletions(-) create mode 100644 module/Application/view/application/fiche-metier/partial/fiche-metier-bis.phtml diff --git a/module/Application/src/Application/Controller/CategorieController.php b/module/Application/src/Application/Controller/CategorieController.php index 2dd26c5d2..02edd56d9 100644 --- a/module/Application/src/Application/Controller/CategorieController.php +++ b/module/Application/src/Application/Controller/CategorieController.php @@ -99,7 +99,6 @@ class CategorieController extends AbstractActionController if ($request->isPost()) { $data = $request->getPost(); if ($data["reponse"] === "oui") $this->getCategorieService()->delete($categorie); - //return $this->redirect()->toRoute('home'); exit(); } diff --git a/module/Application/src/Application/Controller/CompetenceController.php b/module/Application/src/Application/Controller/CompetenceController.php index f2a2208f5..9bf2bf9be 100644 --- a/module/Application/src/Application/Controller/CompetenceController.php +++ b/module/Application/src/Application/Controller/CompetenceController.php @@ -127,7 +127,6 @@ class CompetenceController extends AbstractActionController { if ($request->isPost()) { $data = $request->getPost(); if ($data["reponse"] === "oui") $this->getCompetenceService()->delete($competence); - //return $this->redirect()->toRoute('competence', [], [], true); exit(); } @@ -229,7 +228,6 @@ class CompetenceController extends AbstractActionController { if ($request->isPost()) { $data = $request->getPost(); if ($data["reponse"] === "oui") $this->getCompetenceThemeService()->delete($theme); - //return $this->redirect()->toRoute('competence', [], [], true); exit(); } @@ -331,7 +329,6 @@ class CompetenceController extends AbstractActionController { if ($request->isPost()) { $data = $request->getPost(); if ($data["reponse"] === "oui") $this->getCompetenceTypeService()->delete($type); - //return $this->redirect()->toRoute('competence', [], [], true); exit(); } diff --git a/module/Application/src/Application/Controller/FicheMetierController.php b/module/Application/src/Application/Controller/FicheMetierController.php index 6e54d75d5..7ab4bb973 100644 --- a/module/Application/src/Application/Controller/FicheMetierController.php +++ b/module/Application/src/Application/Controller/FicheMetierController.php @@ -5,7 +5,6 @@ namespace Application\Controller; use Application\Entity\Db\Activite; use Application\Entity\Db\FicheMetier; use Application\Entity\Db\FicheMetierEtat; -use Application\Entity\Db\ParcoursDeFormation; use Application\Form\Activite\ActiviteForm; use Application\Form\Activite\ActiviteFormAwareTrait; use Application\Form\FicheMetier\ActiviteExistanteForm; @@ -26,6 +25,7 @@ use Application\Service\Domaine\DomaineServiceAwareTrait; use Application\Service\Export\FicheMetier\FicheMetierPdfExporter; use Application\Service\FicheMetier\FicheMetierServiceAwareTrait; use Application\Service\FicheMetierEtat\FicheMetierEtatServiceAwareTrait; +use Application\Service\Metier\MetierServiceAwareTrait; use Application\Service\ParcoursDeFormation\ParcoursDeFormationServiceAwareTrait; use Mpdf\MpdfException; use UnicaenApp\Exception\RuntimeException; @@ -35,7 +35,8 @@ use Zend\Http\Request; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; -class FicheMetierController extends AbstractActionController{ +class FicheMetierController extends AbstractActionController +{ use DateTimeAwareTrait; /** Traits associé aux services */ @@ -43,7 +44,9 @@ class FicheMetierController extends AbstractActionController{ use DomaineServiceAwareTrait; use FicheMetierServiceAwareTrait; use FicheMetierEtatServiceAwareTrait; + use MetierServiceAwareTrait; use ParcoursDeFormationServiceAwareTrait; + /** Traits associé aux formulaires */ use ActiviteFormAwareTrait; use ActiviteExistanteFormAwareTrait; @@ -72,17 +75,19 @@ class FicheMetierController extends AbstractActionController{ $domaine = null; $fichesMetiers = $this->getFicheMetierService()->getFichesMetiers(); } else { - $domaine = $this->getDomaineService()->getDomaine($domaineId); + $domaine = $this->getDomaineService()->getDomaine($domaineId); $fichesMetiers = $this->getFicheMetierService()->getFicheByDomaine($domaine); } $etats = $this->getFicheMetierEtatService()->getEtats(); + $metiers = $this->getMetierService()->getMetiers(); return new ViewModel([ - 'domaineSelect' => $domaine, + 'domaineSelect' => $domaine, 'domaines' => $domaines, - 'fiches' => $fichesMetiers, + 'fiches' => $fichesMetiers, 'etats' => $etats, + 'metiers' => $metiers, ]); } @@ -93,7 +98,7 @@ class FicheMetierController extends AbstractActionController{ $applications = $this->getFicheMetierService()->getApplicationsDictionnaires($fiche); return new ViewModel([ - 'title' => 'Visualisation d\'une fiche métier', + 'title' => "Visualisation d'une fiche métier", 'fiche' => $fiche, 'parcours' => $parcours, 'applications' => $applications, @@ -126,11 +131,11 @@ class FicheMetierController extends AbstractActionController{ ]); $metier = $fiche->getMetier(); - $filemane = "PrEECoG_" . $this->getDateTime()->format('YmdHis') ."_". str_replace(" ","_",$metier->getLibelle()).'.pdf'; + $filemane = "PrEECoG_" . $this->getDateTime()->format('YmdHis') . "_" . str_replace(" ", "_", $metier->getLibelle()) . '.pdf'; try { $exporter->getMpdf()->SetTitle($metier->getLibelle() . " - " . $fiche->getId()); } catch (MpdfException $e) { - throw new RuntimeException("Un problème est surevenu lors du changement de titre par MPDF.", 0 , $e); + throw new RuntimeException("Un problème est surevenu lors du changement de titre par MPDF.", 0, $e); } $exporter->export($filemane); exit; @@ -142,7 +147,7 @@ class FicheMetierController extends AbstractActionController{ $exporter = new FicheMetierPdfExporter($this->renderer, 'A4'); $exporter->setVars([]); - $filemane = "PrEECoG_" . $this->getDateTime()->format('YmdHis') ."_fiches_metiers.pdf"; + $filemane = "PrEECoG_" . $this->getDateTime()->format('YmdHis') . "_fiches_metiers.pdf"; $exporter->exportAll($fiches, $filemane); exit; } @@ -181,7 +186,7 @@ class FicheMetierController extends AbstractActionController{ 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]"), + '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), ]); @@ -197,7 +202,7 @@ class FicheMetierController extends AbstractActionController{ /** @var LibelleForm $form */ $form = $this->getLibelleForm(); - $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/ajouter', [], [] , true)); + $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/ajouter', [], [], true)); $form->bind($fiche); /** @var Request $request */ @@ -229,7 +234,7 @@ class FicheMetierController extends AbstractActionController{ /** @var LibelleForm $form */ $form = $this->getLibelleForm(); - $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/editer-libelle',['id' => $fiche->getId()],[], true)); + $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/editer-libelle', ['id' => $fiche->getId()], [], true)); $form->bind($fiche); /** @var Request $request */ $request = $this->getRequest(); @@ -258,7 +263,7 @@ class FicheMetierController extends AbstractActionController{ $activite = new Activite(); /** @var ActiviteForm $form */ $form = $this->getActiviteForm(); - $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/ajouter-nouvelle-activite',['id' => $fiche->getId()],[], true)); + $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/ajouter-nouvelle-activite', ['id' => $fiche->getId()], [], true)); $form->bind($activite); /** @var Request $request */ @@ -307,7 +312,7 @@ class FicheMetierController extends AbstractActionController{ $activites = $this->getActiviteService()->getActivites(); $options = []; - foreach($activites as $activite) { + foreach ($activites as $activite) { $options[$activite->getId()] = [ "title" => $activite->getLibelle(), "description" => $activite->getDescription(), @@ -337,8 +342,8 @@ class FicheMetierController extends AbstractActionController{ $coupleId = $this->params()->fromRoute('id'); $couple = $this->getActiviteService()->getFicheMetierTypeActivite($coupleId); - if ($direction === 'up') $this->getActiviteService()->moveUp($couple); - if ($direction === 'down') $this->getActiviteService()->moveDown($couple); + if ($direction === 'up') $this->getActiviteService()->moveUp($couple); + if ($direction === 'down') $this->getActiviteService()->moveDown($couple); $this->getActiviteService()->updateFicheMetierTypeActivite($couple); @@ -401,7 +406,7 @@ class FicheMetierController extends AbstractActionController{ /** @var SelectionCompetenceForm $form */ $form = $this->getSelectionCompetenceForm(); - $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/gerer-competences',['fiche' => $fiche->getId()], [], true)); + $form->setAttribute('action', $this->url()->fromRoute('fiche-metier-type/gerer-competences', ['fiche' => $fiche->getId()], [], true)); $form->bind($fiche); /** @var Request $request */ @@ -414,8 +419,8 @@ class FicheMetierController extends AbstractActionController{ $vm = new ViewModel(); $vm->setTemplate('application/default/default-form'); $vm->setVariables([ - 'title' => "Gestion des compétences de la fiche métier ". $fiche->getMetier()->getLibelle(), - 'form' => $form, + 'title' => "Gestion des compétences de la fiche métier " . $fiche->getMetier()->getLibelle(), + 'form' => $form, ]); return $vm; } @@ -425,7 +430,7 @@ class FicheMetierController extends AbstractActionController{ $fiche = $this->getFicheMetierService()->getRequestedFicheMetier($this); if ($fiche->hasExpertise()) { $fiche->setExpertise(false); - } else { + } else { $fiche->setExpertise(true); } $this->getFicheMetierService()->update($fiche); @@ -456,7 +461,7 @@ class FicheMetierController extends AbstractActionController{ $vm = new ViewModel(); $vm->setTemplate('application/default/default-form'); $vm->setVariables([ - 'title' => "Changement de l'état de la fiche metier [".$fiche->getMetier()->getLibelle()."]", + 'title' => "Changement de l'état de la fiche metier [" . $fiche->getMetier()->getLibelle() . "]", 'form' => $form, ]); return $vm; @@ -534,7 +539,7 @@ class FicheMetierController extends AbstractActionController{ if ($etat !== null) { $vm->setTemplate('application/default/confirmation'); $vm->setVariables([ - 'title' => "Suppression de l'état [".$etat->getCode()."]", + 'title' => "Suppression de l'état [" . $etat->getCode() . "]", 'text' => "La suppression est définitive êtes-vous sûr·e de vouloir continuer ?", 'action' => $this->url()->fromRoute('fiche-metier-type/etat/supprimer', ["etat" => $etat->getId()], [], true), ]); diff --git a/module/Application/src/Application/Controller/FicheMetierControllerFactory.php b/module/Application/src/Application/Controller/FicheMetierControllerFactory.php index 784a85753..462642cf8 100644 --- a/module/Application/src/Application/Controller/FicheMetierControllerFactory.php +++ b/module/Application/src/Application/Controller/FicheMetierControllerFactory.php @@ -15,6 +15,7 @@ use Application\Service\Configuration\ConfigurationService; use Application\Service\Domaine\DomaineService; use Application\Service\FicheMetier\FicheMetierService; use Application\Service\FicheMetierEtat\FicheMetierEtatService; +use Application\Service\Metier\MetierService; use Application\Service\ParcoursDeFormation\ParcoursDeFormationService; use Interop\Container\ContainerInterface; use Zend\View\Renderer\PhpRenderer; @@ -29,6 +30,7 @@ class FicheMetierControllerFactory { * @var FicheMetierService $ficheMetierService * @var FicheMetierEtatService $ficheMetierEtatService * @var ConfigurationService $configurationService + * @var MetierService $metierService * @var ParcoursDeFormationService $parcoursService */ $activiteService = $container->get(ActiviteService::class); @@ -36,6 +38,7 @@ class FicheMetierControllerFactory { $ficheMetierService = $container->get(FicheMetierService::class); $ficheMetierEtatService = $container->get(FicheMetierEtatService::class); $configurationService = $container->get(ConfigurationService::class); + $metierService = $container->get(MetierService::class); $parcoursService = $container->get(ParcoursDeFormationService::class); /** @@ -69,6 +72,7 @@ class FicheMetierControllerFactory { $controller->setFicheMetierService($ficheMetierService); $controller->setFicheMetierEtatService($ficheMetierEtatService); $controller->setConfigurationService($configurationService); + $controller->setMetierService($metierService); $controller->setParcoursDeFormationService($parcoursService); $controller->setLibelleForm($libelleForm); diff --git a/module/Application/src/Application/Entity/Db/Metier.php b/module/Application/src/Application/Entity/Db/Metier.php index aeef4a875..8b0a92a52 100644 --- a/module/Application/src/Application/Entity/Db/Metier.php +++ b/module/Application/src/Application/Entity/Db/Metier.php @@ -20,7 +20,7 @@ class Metier implements HistoriqueAwareInterface { private $domaines; /** @var ArrayCollection (MetierReference) */ private $references; - /** @var ArrayCollection (FicheMetierType) */ + /** @var ArrayCollection (FicheMetier) */ private $fichesMetiers; public function __construct() @@ -112,4 +112,29 @@ class Metier implements HistoriqueAwareInterface { $this->categorie = $categorie; return $this; } + + /** + * @return string + */ + public function generateTooltip() + { + $html = ''; + /** ligne sur le metier **/ + $html .= '<span class="highlight metier">'.htmlentities($this->getLibelle(),ENT_QUOTES).'</span><br/>'; + /** lignes sur les domaines du metier **/ + $html .= '<strong>Domaines</strong> :'; + $html .= '<ul>'; + foreach ($this->getDomaines() as $domaine) { + $html .= '<li>'.$domaine->getLibelle().'</li>'; + } + $html .= '</ul>'; + /** ligne sur l'expertise */ + //TODO statuer sur ce qui est expert ou pas + /** ligne sur les refs */ + $html .= '<strong>Références</strong> :'; + foreach ($this->getReferences() as $reference) { + $html .= '<span class="badge" style="margin:0.25rem;">'.$reference->getReferentiel()->getLibelleCourt().' - '.$reference->getCode().'</span><br/>'; + } + return '<span style="text-align:left;">'.$html.'</span>'; + } } \ No newline at end of file diff --git a/module/Application/src/Application/Service/Export/FicheMetier/fiche-metier-pdf.phtml b/module/Application/src/Application/Service/Export/FicheMetier/fiche-metier-pdf.phtml index 7c8ef8fda..0058a1958 100644 --- a/module/Application/src/Application/Service/Export/FicheMetier/fiche-metier-pdf.phtml +++ b/module/Application/src/Application/Service/Export/FicheMetier/fiche-metier-pdf.phtml @@ -193,7 +193,15 @@ foreach ($competences as $competence) { <?php $applications = $fiche->getApplications(); -usort($applications, function (Application $a, Application $b) { return $a->getLibelle() > $b->getLibelle();}); + +$nogroupe = "zzz"; +$dictionnaire = []; +foreach ($applications as $application) { + $groupe = $application->getGroupe(); + $libelle = ($groupe !== null)?$groupe->getLibelle():$nogroupe; + $dictionnaire[$libelle][] = $application; +} +ksort($dictionnaire); ?> <?php if (! empty($applications)) : ?> @@ -201,15 +209,20 @@ usort($applications, function (Application $a, Application $b) { return $a->getL Applications </div> - <table class="activite"> - <tr> - <td> - <?php foreach ($applications as $application) : ?> - – <?php echo $application->getLibelle(); ?> <br/> - <?php endforeach; ?> - </td> - </tr> - </table> + <?php foreach($dictionnaire as $key => $liste) : ?> + <table class="activite"> + <tr> + <th> <?php echo ($key !== $nogroupe)?$key:"Sans groupe ..."; ?> </th> + </tr> + <tr> + <td> + <?php foreach ($liste as $application) : ?> + – <?php echo $application->getLibelle(); ?> <br/> + <?php endforeach; ?> + </td> + </tr> + </table> + <?php endforeach; ?> <?php endif; ?> <?php diff --git a/module/Application/src/Application/View/Helper/partial/fiche-metier.phtml b/module/Application/src/Application/View/Helper/partial/fiche-metier.phtml index 31f947dc5..cf4ea7c5f 100644 --- a/module/Application/src/Application/View/Helper/partial/fiche-metier.phtml +++ b/module/Application/src/Application/View/Helper/partial/fiche-metier.phtml @@ -353,7 +353,6 @@ $a=1; window.location.reload(); }); }); - </script> <style> diff --git a/module/Application/view/application/fiche-metier/index.phtml b/module/Application/view/application/fiche-metier/index.phtml index 837fb9c73..b9c67e61f 100644 --- a/module/Application/view/application/fiche-metier/index.phtml +++ b/module/Application/view/application/fiche-metier/index.phtml @@ -3,6 +3,7 @@ use Application\Entity\Db\Domaine; use Application\Entity\Db\FicheMetier; use Application\Entity\Db\FicheMetierEtat; +use Application\Entity\Db\Metier; /** * @see \Application\Controller\FicheMetierController::indexAction() @@ -10,6 +11,7 @@ use Application\Entity\Db\FicheMetierEtat; * @var Domaine $domaineSelect * @var FicheMetier[] $fiches * @var FicheMetierEtat[] $etats + * @var Metier[] $metiers */ $this->headTitle('Index des fiches métiers'); @@ -32,6 +34,15 @@ $this->headTitle('Index des fiches métiers'); </a> </li> +<!-- <li role="metier">--> +<!-- <a href="#metier" aria-controls="metier" role="tab" data-toggle="tabz">--> +<!-- Fiches métiers bis --> +<!-- <span class="badge">--> +<!-- --><?php //echo count($metiers); ?> +<!-- </span>--> +<!-- </a>--> +<!-- </li>--> + <li role="etat"> <a href="#etat" aria-controls="etat" role="tab" data-toggle="tabz"> États @@ -52,6 +63,11 @@ $this->headTitle('Index des fiches métiers'); <?php echo $this->partial('partial/fiche-metier.phtml', ['fiches' => $fiches, 'domaines' => $domaines, 'domaineSelect' => $domaineSelect]); ?> </div> + <!-- FAMILLE ----------------------------------------------------------------------------------------------> + <div id="metier" class="tab-pane " role="tabpanel"> + <?php echo $this->partial('partial/fiche-metier-bis.phtml', ['metiers' => $metiers, 'domaines' => $domaines, 'domaineSelect' => $domaineSelect]); ?> + </div> + <!-- DOMAINE ----------------------------------------------------------------------------------------------> <div id="etat" class="tab-pane " role="tabpanel"> <?php echo $this->partial('partial/etat.phtml', ['etats' => $etats]); ?> diff --git a/module/Application/view/application/fiche-metier/partial/fiche-metier-bis.phtml b/module/Application/view/application/fiche-metier/partial/fiche-metier-bis.phtml new file mode 100644 index 000000000..10c4f6f44 --- /dev/null +++ b/module/Application/view/application/fiche-metier/partial/fiche-metier-bis.phtml @@ -0,0 +1,62 @@ +<?php + +use Application\Entity\Db\FicheMetier; +use Application\Entity\Db\Metier; + +/** + * @var Metier[] $metiers + * @var FicheMetier $fiche + */ + +?> + +<table class="datatable table table-condensed"> + <thead> + <tr> + <th> Métier </th> + <th> Fiche </th> + <th> État </th> + <th> Action </th> + </tr> + </thead> + <tbody> + <?php foreach ($metiers as $metier) : ?> + <?php + $fiches = $metier->getFichesMetiers(); + $nbFiche = count($fiches); + ?> + + <?php if ($nbFiche === 0) : ?> + <tr><td> + <span data-toggle="tooltip" data-html="true" title='<?php echo $metier->generateTooltip(); ?>'> + <?php echo $metier->getLibelle(); ?> + </span> + </td><td> + Aucune fiche métier + </td><td></td> + <td></td> + </tr> + <?php else : ?> + <?php $first = true; ?> + <?php foreach ($fiches as $fiche) : ?> + <tr> +<!-- --><?php //if ($first) : ?> +<!-- <td rowspan="--><?php //echo $nbFiche; ?><!--">--> + <td> + <span data-toggle="tooltip" data-html="true" title='<?php echo $metier->generateTooltip(); ?>'> + <?php echo $metier->getLibelle(); ?> + </span> + </td> +<!-- --><?php //$first = false; ?> +<!-- --><?php //else : ?> +<!-- <td></td>--> +<!-- --><?php //endif; ?> + <td> #<?php echo $fiche->getId(); ?> (Création <?php echo $fiche->getHistoCreation()->format("d/m/Y à H:m:i"); ?>)</td> + <td> <?php echo $this->ficheMetierEtat($fiche->getEtat()); ?></td> + <td></td> + </tr> + <?php endforeach; ?> + <?php endif; ?> + <?php endforeach; ?> + </tbody> +</table> \ No newline at end of file diff --git a/module/Application/view/application/metier/partial/listing-metier.phtml b/module/Application/view/application/metier/partial/listing-metier.phtml index 2113b7163..45f6a2a71 100644 --- a/module/Application/view/application/metier/partial/listing-metier.phtml +++ b/module/Application/view/application/metier/partial/listing-metier.phtml @@ -47,7 +47,13 @@ $canEffacer = $droits["effacer"]; <tbody> <?php foreach($metiers as $metier): ?> <tr <?php if ($metier->estHistorise()) echo ' class="historise" '; ?>> - <td> <?php echo $metier->getLibelle(); ?> </td> + <td> + <span title='<?php echo $metier->generateTooltip(); ?>' + data-toggle='tooltip' data-html='true' + > + <?php echo $metier->getLibelle(); ?> + </span> + </td> <td> <ul> <?php foreach ($metier->getDomaines() as $domaine) : ?> diff --git a/public/css/app.css b/public/css/app.css index 63dc144de..c17471eb9 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -645,4 +645,8 @@ span.highlight.structure { span.highlight.user { color: purple; +} + +span.highlight.metier { + color: darkorange; } \ No newline at end of file -- GitLab