Loading module/Application/src/Application/Entity/Db/AgentAffectation.php +23 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ class AgentAffectation implements HasPeriodeInterface { /** @var string */ private $principale; /** * @return int */ Loading Loading @@ -66,4 +68,25 @@ class AgentAffectation implements HasPeriodeInterface { return ($this->principale === 'O'); } /** * @param AgentAffectation[] $agentAffectations * @return string[] */ public static function generateAffectationsArray(array $agentAffectations) : array { $affectations = []; foreach ($agentAffectations as $agentAffectation) { $structure = $agentAffectation->getStructure(); $niveau2 = null; if ($structure) $niveau2 = $structure->getNiv2(); if ($structure) { $texte = $structure->getLibelleCourt(); if ($niveau2 !== null AND $niveau2 !== $structure) $texte = $niveau2->getLibelleCourt() . " > ".$texte; $affectations[] = $texte; } else { $affectations[] = "Structure inconnue"; } } return $affectations; } } No newline at end of file module/Formation/config/merged/structure.config.php +12 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ return [ 'action' => [ 'afficher', 'lister-les-agents', 'extraction-formations', ], 'privilege' => [ FormationstructurePrivileges::getResourceId(FormationstructurePrivileges::FORMATIONSTRUCTURE_AFFICHER), Loading Loading @@ -114,6 +115,17 @@ return [ ], 'may_terminate' => true, ], 'extraction-formations' => [ 'type' => Segment::class, 'options' => [ 'route' => '/extraction-formations', 'defaults' => [ 'controller' => StructureController::class, 'action' => 'extraction-formations', ], ], 'may_terminate' => true, ], ], ], ], Loading module/Formation/src/Formation/Controller/StructureController.php +44 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ namespace Formation\Controller; use Application\Entity\Db\AgentAffectation; use Application\Entity\Db\AgentStatut; use Application\Service\Agent\AgentServiceAwareTrait; use DateTime; use Formation\Entity\Db\Formation; Loading @@ -11,6 +13,7 @@ use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Structure\Entity\Db\StructureAgentForce; use Structure\Service\Structure\StructureServiceAwareTrait; use UnicaenApp\View\Model\CsvModel; use UnicaenUtilisateur\Service\User\UserServiceAwareTrait; class StructureController extends AbstractActionController Loading Loading @@ -98,4 +101,45 @@ class StructureController extends AbstractActionController 'agents' => $allAgents, ]); } public function extractionFormationsAction() : CsvModel { /** Récupération du sous-arbre des structures */ $structure = $this->getStructureService()->getRequestedStructure($this); $structures = $this->getStructureService()->getStructuresFilles($structure); $structures[] = $structure; /** Récupération des agents et postes liés aux structures */ $agents = $this->getAgentService()->getAgentsByStructures($structures); $agentsForces = $this->getStructureService()->getAgentsForces($structure); $agentsForces = array_map(function (StructureAgentForce $a) { return $a->getAgent(); }, $agentsForces); $allAgents = array_merge($agents, $agentsForces); $header = ['Dénomination', 'Statuts', 'Affectation', 'Formation', 'Période', 'Volume suivi', 'Volume dispensé']; $formations = $this->getFormationInstanceInscritService()->getFormationsByAgents($allAgents); $result = []; foreach ($formations as $formation) { $agent = $formation->getAgent(); $session = $formation->getInstance(); $result[] = [ 'Dénomination' => $agent->getDenomination(), 'Status' => implode("\n",AgentStatut::generateStatutsArray($agent->getStatutsActifs())), 'Affectations' => implode("\n",AgentAffectation::generateAffectationsArray($agent->getAffectationsActifs())), 'Période' => $session->getPeriode(), 'Volume suivi' => $formation->getDureePresence(), 'Volume dispensé' => $session->getDuree(), ]; } $filename = (new DateTime())->format("Ymd-his")."_extraction_formations.csv"; $CSV = new CsvModel(); $CSV->setDelimiter(';'); $CSV->setEnclosure('"'); $CSV->setHeader($header); $CSV->setData($result); $CSV->setFilename($filename); return $CSV; } } No newline at end of file module/Formation/src/Formation/Service/FormationInstanceInscrit/FormationInstanceInscritService.php +14 −0 Original line number Diff line number Diff line Loading @@ -363,4 +363,18 @@ class FormationInstanceInscritService } return $result; } /** * @param Agent[] $agents * @return FormationInstanceInscrit[] */ public function getFormationsByAgents(array $agents) : array { $agentIds = array_map(function (Agent $a) { return $a->getId();}, $agents); $qb = $this->getEntityManager()->getRepository(FormationInstanceInscrit::class)->createQueryBuilder('inscrit') ->leftJoin('inscrit.agent', 'agent')->addSelect('agent') ->andWhere('agent.id in (:agentIds)')->setParameter('agentIds', $agentIds) ; return $qb->getQuery()->getResult(); } } No newline at end of file module/Formation/view/formation/structure/afficher.phtml +5 −5 Original line number Diff line number Diff line Loading @@ -85,11 +85,11 @@ $filles = array_filter($filles, function (Structure $a) use ($now) { Listes des <br/> formations </a> </li> <!-- <li class="nav-item">--> <!-- <a href="#extraction" class="nav-link" aria-controls="extraction">--> <!-- Extractions <br/> --> <!-- </a>--> <!-- </li>--> <li class="nav-item"> <a href="#extraction" class="nav-link" aria-controls="extraction"> Extractions <br/> </a> </li> </ul> <div class="tab-content"> Loading Loading
module/Application/src/Application/Entity/Db/AgentAffectation.php +23 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ class AgentAffectation implements HasPeriodeInterface { /** @var string */ private $principale; /** * @return int */ Loading Loading @@ -66,4 +68,25 @@ class AgentAffectation implements HasPeriodeInterface { return ($this->principale === 'O'); } /** * @param AgentAffectation[] $agentAffectations * @return string[] */ public static function generateAffectationsArray(array $agentAffectations) : array { $affectations = []; foreach ($agentAffectations as $agentAffectation) { $structure = $agentAffectation->getStructure(); $niveau2 = null; if ($structure) $niveau2 = $structure->getNiv2(); if ($structure) { $texte = $structure->getLibelleCourt(); if ($niveau2 !== null AND $niveau2 !== $structure) $texte = $niveau2->getLibelleCourt() . " > ".$texte; $affectations[] = $texte; } else { $affectations[] = "Structure inconnue"; } } return $affectations; } } No newline at end of file
module/Formation/config/merged/structure.config.php +12 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ return [ 'action' => [ 'afficher', 'lister-les-agents', 'extraction-formations', ], 'privilege' => [ FormationstructurePrivileges::getResourceId(FormationstructurePrivileges::FORMATIONSTRUCTURE_AFFICHER), Loading Loading @@ -114,6 +115,17 @@ return [ ], 'may_terminate' => true, ], 'extraction-formations' => [ 'type' => Segment::class, 'options' => [ 'route' => '/extraction-formations', 'defaults' => [ 'controller' => StructureController::class, 'action' => 'extraction-formations', ], ], 'may_terminate' => true, ], ], ], ], Loading
module/Formation/src/Formation/Controller/StructureController.php +44 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ namespace Formation\Controller; use Application\Entity\Db\AgentAffectation; use Application\Entity\Db\AgentStatut; use Application\Service\Agent\AgentServiceAwareTrait; use DateTime; use Formation\Entity\Db\Formation; Loading @@ -11,6 +13,7 @@ use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Structure\Entity\Db\StructureAgentForce; use Structure\Service\Structure\StructureServiceAwareTrait; use UnicaenApp\View\Model\CsvModel; use UnicaenUtilisateur\Service\User\UserServiceAwareTrait; class StructureController extends AbstractActionController Loading Loading @@ -98,4 +101,45 @@ class StructureController extends AbstractActionController 'agents' => $allAgents, ]); } public function extractionFormationsAction() : CsvModel { /** Récupération du sous-arbre des structures */ $structure = $this->getStructureService()->getRequestedStructure($this); $structures = $this->getStructureService()->getStructuresFilles($structure); $structures[] = $structure; /** Récupération des agents et postes liés aux structures */ $agents = $this->getAgentService()->getAgentsByStructures($structures); $agentsForces = $this->getStructureService()->getAgentsForces($structure); $agentsForces = array_map(function (StructureAgentForce $a) { return $a->getAgent(); }, $agentsForces); $allAgents = array_merge($agents, $agentsForces); $header = ['Dénomination', 'Statuts', 'Affectation', 'Formation', 'Période', 'Volume suivi', 'Volume dispensé']; $formations = $this->getFormationInstanceInscritService()->getFormationsByAgents($allAgents); $result = []; foreach ($formations as $formation) { $agent = $formation->getAgent(); $session = $formation->getInstance(); $result[] = [ 'Dénomination' => $agent->getDenomination(), 'Status' => implode("\n",AgentStatut::generateStatutsArray($agent->getStatutsActifs())), 'Affectations' => implode("\n",AgentAffectation::generateAffectationsArray($agent->getAffectationsActifs())), 'Période' => $session->getPeriode(), 'Volume suivi' => $formation->getDureePresence(), 'Volume dispensé' => $session->getDuree(), ]; } $filename = (new DateTime())->format("Ymd-his")."_extraction_formations.csv"; $CSV = new CsvModel(); $CSV->setDelimiter(';'); $CSV->setEnclosure('"'); $CSV->setHeader($header); $CSV->setData($result); $CSV->setFilename($filename); return $CSV; } } No newline at end of file
module/Formation/src/Formation/Service/FormationInstanceInscrit/FormationInstanceInscritService.php +14 −0 Original line number Diff line number Diff line Loading @@ -363,4 +363,18 @@ class FormationInstanceInscritService } return $result; } /** * @param Agent[] $agents * @return FormationInstanceInscrit[] */ public function getFormationsByAgents(array $agents) : array { $agentIds = array_map(function (Agent $a) { return $a->getId();}, $agents); $qb = $this->getEntityManager()->getRepository(FormationInstanceInscrit::class)->createQueryBuilder('inscrit') ->leftJoin('inscrit.agent', 'agent')->addSelect('agent') ->andWhere('agent.id in (:agentIds)')->setParameter('agentIds', $agentIds) ; return $qb->getQuery()->getResult(); } } No newline at end of file
module/Formation/view/formation/structure/afficher.phtml +5 −5 Original line number Diff line number Diff line Loading @@ -85,11 +85,11 @@ $filles = array_filter($filles, function (Structure $a) use ($now) { Listes des <br/> formations </a> </li> <!-- <li class="nav-item">--> <!-- <a href="#extraction" class="nav-link" aria-controls="extraction">--> <!-- Extractions <br/> --> <!-- </a>--> <!-- </li>--> <li class="nav-item"> <a href="#extraction" class="nav-link" aria-controls="extraction"> Extractions <br/> </a> </li> </ul> <div class="tab-content"> Loading