Loading module/Application/src/Application/Controller/FichePosteController.php +5 −1 Original line number Diff line number Diff line Loading @@ -127,7 +127,8 @@ class FichePosteController extends AbstractActionController { $structures = $this->getStructureService()->getStructuresFilles($structure); $structures[] = $structure; $fiches = $this->getFichePosteService()->getFichesPostesByStructures($structures, true); // $fiches = $this->getFichePosteService()->getFichesPostesByStructures($structures, true); $fiches = $this->getFichePosteService()->getFichesPostesByStructuresAndAgent($structures, true, $agent); /** @var Request $request */ $request = $this->getRequest(); Loading Loading @@ -404,12 +405,15 @@ class FichePosteController extends AbstractActionController { public function ajouterFicheMetierAction() { $fiche = $this->getFichePosteService()->getRequestedFichePoste($this, 'fiche-poste'); $agent = $fiche->getAgent(); $ficheTypeExterne = new FicheTypeExterne(); $form = $this->getAjouterFicheTypeForm(); $form->setAttribute('action', $this->url()->fromRoute('fiche-poste/ajouter-fiche-metier', ['fiche-poste' => $fiche->getId()], [], true)); $form->bind($ficheTypeExterne); if ($agent AND ! empty($agent->getGradesActifs())) $form->reinitWithAgent($agent); /** @var Request $request */ $request = $this->getRequest(); if ($request->isPost()) { Loading module/Application/src/Application/Entity/Db/Agent.php +15 −0 Original line number Diff line number Diff line Loading @@ -440,4 +440,19 @@ class Agent implements ResourceInterface return false; } /** * @return int */ public function getMeilleurNiveau() { $niveau = 999; $grades = $this->getGradesActifs(); foreach ($grades as $grade) { $level = $grade->getCorps()->getNiveau(); if ($level !== null and $level <= $niveau) $niveau = $level; } return $niveau; } } No newline at end of file module/Application/src/Application/Form/AjouterFicheMetier/AjouterFicheMetierForm.php +46 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Application\Form\AjouterFicheMetier; use Application\Entity\Db\Agent; use Application\Entity\Db\FicheMetier; use Application\Entity\Db\MetierReference; use Application\Service\Domaine\DomaineServiceAwareTrait; Loading Loading @@ -156,4 +157,49 @@ class AjouterFicheMetierForm extends Form { return $options; } /** * @param Agent $agent */ public function reinitWithAgent(Agent $agent) { /** @var Select $ficheSelect */ $ficheSelect = $this->get('fiche_type'); $niveau = $agent->getMeilleurNiveau(); /** @var array $fiches */ $fiches = $this->getFicheMetierService()->getFichesMetiersWithNiveau($niveau - 1); $options = []; $dictionnaire = []; foreach ($fiches as $ficheMetier) { $domaines = $ficheMetier->getMetier()->getDomaines(); foreach ($domaines as $domaine) { $dictionnaire[($domaine) ? $domaine->getLibelle() : "Sans domaine"][] = $ficheMetier; } } ksort($dictionnaire); foreach ($dictionnaire as $clef => $listing) { $optionsoptions = []; /** @var FicheMetier $fiche */ foreach ($listing as $fiche) { $references = []; /** @var MetierReference $reference */ foreach ($fiche->getMetier()->getReferences() as $reference) { $references[] = $reference->getTitre(); } $str_references = implode(", ", $references); $optionsoptions[$fiche->getId()] = $fiche->getMetier()->getLibelle() . (!empty($references)?" (".$str_references.")":"") ; } $array = [ 'label' => $clef, 'options' => $optionsoptions, ]; $options[] = $array; } $ficheSelect->setValueOptions($options); } } No newline at end of file module/Application/src/Application/Service/FicheMetier/FicheMetierService.php +18 −2 Original line number Diff line number Diff line Loading @@ -114,6 +114,21 @@ class FicheMetierService { return $result; } /** * @param int $niveau * @return FicheMetier[] */ public function getFichesMetiersWithNiveau($niveau) { $qb = $this->createQueryBuilder() ->andWhere('metier.niveau IS NULL or metier.niveau >= :niveau') ->setParameter('niveau', $niveau) ; $result = $qb->getQuery()->getResult(); return $result; } /** * @param string $order an attribute use to sort * @return FicheMetier[] Loading Loading @@ -212,11 +227,12 @@ class FicheMetierService { } /** * @param int $niveau * @return array */ public function getFichesMetiersAsOptions() public function getFichesMetiersAsOptions($niveau =0) { $fiches = $this->getFichesMetiers(); $fiches = $this->getFichesMetiersWithNiveau($niveau); $array = []; foreach ($fiches as $fiche) { $array[$fiche->getId()] = $fiche->getMetier()->getLibelle(); Loading module/Application/src/Application/Service/FichePoste/FichePosteService.php +21 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,27 @@ class FichePosteService { return $result; } /** * @param Structure[] $structures * @param boolean $sousstructure * @param Agent $agent * @return FichePoste[] */ public function getFichesPostesByStructuresAndAgent($structures = [], $sousstructure = false, $agent = null) { $fiches = $this->getFichesPostesByStructures($structures, $sousstructure); $niveau = $agent->getMeilleurNiveau(); if ($niveau === 999) return $fiches; $result = []; foreach ($fiches as $fiche) { if ($fiche->isComplete() AND $fiche->getAgent()->getMeilleurNiveau() >= ($niveau - 1)) $result[] = $fiche; } return $result; } /** * @param Structure $structure * @param boolean $sousstructure Loading Loading
module/Application/src/Application/Controller/FichePosteController.php +5 −1 Original line number Diff line number Diff line Loading @@ -127,7 +127,8 @@ class FichePosteController extends AbstractActionController { $structures = $this->getStructureService()->getStructuresFilles($structure); $structures[] = $structure; $fiches = $this->getFichePosteService()->getFichesPostesByStructures($structures, true); // $fiches = $this->getFichePosteService()->getFichesPostesByStructures($structures, true); $fiches = $this->getFichePosteService()->getFichesPostesByStructuresAndAgent($structures, true, $agent); /** @var Request $request */ $request = $this->getRequest(); Loading Loading @@ -404,12 +405,15 @@ class FichePosteController extends AbstractActionController { public function ajouterFicheMetierAction() { $fiche = $this->getFichePosteService()->getRequestedFichePoste($this, 'fiche-poste'); $agent = $fiche->getAgent(); $ficheTypeExterne = new FicheTypeExterne(); $form = $this->getAjouterFicheTypeForm(); $form->setAttribute('action', $this->url()->fromRoute('fiche-poste/ajouter-fiche-metier', ['fiche-poste' => $fiche->getId()], [], true)); $form->bind($ficheTypeExterne); if ($agent AND ! empty($agent->getGradesActifs())) $form->reinitWithAgent($agent); /** @var Request $request */ $request = $this->getRequest(); if ($request->isPost()) { Loading
module/Application/src/Application/Entity/Db/Agent.php +15 −0 Original line number Diff line number Diff line Loading @@ -440,4 +440,19 @@ class Agent implements ResourceInterface return false; } /** * @return int */ public function getMeilleurNiveau() { $niveau = 999; $grades = $this->getGradesActifs(); foreach ($grades as $grade) { $level = $grade->getCorps()->getNiveau(); if ($level !== null and $level <= $niveau) $niveau = $level; } return $niveau; } } No newline at end of file
module/Application/src/Application/Form/AjouterFicheMetier/AjouterFicheMetierForm.php +46 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Application\Form\AjouterFicheMetier; use Application\Entity\Db\Agent; use Application\Entity\Db\FicheMetier; use Application\Entity\Db\MetierReference; use Application\Service\Domaine\DomaineServiceAwareTrait; Loading Loading @@ -156,4 +157,49 @@ class AjouterFicheMetierForm extends Form { return $options; } /** * @param Agent $agent */ public function reinitWithAgent(Agent $agent) { /** @var Select $ficheSelect */ $ficheSelect = $this->get('fiche_type'); $niveau = $agent->getMeilleurNiveau(); /** @var array $fiches */ $fiches = $this->getFicheMetierService()->getFichesMetiersWithNiveau($niveau - 1); $options = []; $dictionnaire = []; foreach ($fiches as $ficheMetier) { $domaines = $ficheMetier->getMetier()->getDomaines(); foreach ($domaines as $domaine) { $dictionnaire[($domaine) ? $domaine->getLibelle() : "Sans domaine"][] = $ficheMetier; } } ksort($dictionnaire); foreach ($dictionnaire as $clef => $listing) { $optionsoptions = []; /** @var FicheMetier $fiche */ foreach ($listing as $fiche) { $references = []; /** @var MetierReference $reference */ foreach ($fiche->getMetier()->getReferences() as $reference) { $references[] = $reference->getTitre(); } $str_references = implode(", ", $references); $optionsoptions[$fiche->getId()] = $fiche->getMetier()->getLibelle() . (!empty($references)?" (".$str_references.")":"") ; } $array = [ 'label' => $clef, 'options' => $optionsoptions, ]; $options[] = $array; } $ficheSelect->setValueOptions($options); } } No newline at end of file
module/Application/src/Application/Service/FicheMetier/FicheMetierService.php +18 −2 Original line number Diff line number Diff line Loading @@ -114,6 +114,21 @@ class FicheMetierService { return $result; } /** * @param int $niveau * @return FicheMetier[] */ public function getFichesMetiersWithNiveau($niveau) { $qb = $this->createQueryBuilder() ->andWhere('metier.niveau IS NULL or metier.niveau >= :niveau') ->setParameter('niveau', $niveau) ; $result = $qb->getQuery()->getResult(); return $result; } /** * @param string $order an attribute use to sort * @return FicheMetier[] Loading Loading @@ -212,11 +227,12 @@ class FicheMetierService { } /** * @param int $niveau * @return array */ public function getFichesMetiersAsOptions() public function getFichesMetiersAsOptions($niveau =0) { $fiches = $this->getFichesMetiers(); $fiches = $this->getFichesMetiersWithNiveau($niveau); $array = []; foreach ($fiches as $fiche) { $array[$fiche->getId()] = $fiche->getMetier()->getLibelle(); Loading
module/Application/src/Application/Service/FichePoste/FichePosteService.php +21 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,27 @@ class FichePosteService { return $result; } /** * @param Structure[] $structures * @param boolean $sousstructure * @param Agent $agent * @return FichePoste[] */ public function getFichesPostesByStructuresAndAgent($structures = [], $sousstructure = false, $agent = null) { $fiches = $this->getFichesPostesByStructures($structures, $sousstructure); $niveau = $agent->getMeilleurNiveau(); if ($niveau === 999) return $fiches; $result = []; foreach ($fiches as $fiche) { if ($fiche->isComplete() AND $fiche->getAgent()->getMeilleurNiveau() >= ($niveau - 1)) $result[] = $fiche; } return $result; } /** * @param Structure $structure * @param boolean $sousstructure Loading