Commit 2612d921 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Extraction des formations des agents de la structure

parent e29f27f0
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ class AgentAffectation implements HasPeriodeInterface {
    /** @var string */
    private $principale;



    /**
     * @return int
     */
@@ -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
+12 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ return [
                    'action' => [
                        'afficher',
                        'lister-les-agents',
                        'extraction-formations',
                    ],
                    'privilege' => [
                        FormationstructurePrivileges::getResourceId(FormationstructurePrivileges::FORMATIONSTRUCTURE_AFFICHER),
@@ -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,
                            ],
                        ],
                    ],
                ],
+44 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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
+14 −0
Original line number Diff line number Diff line
@@ -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
+5 −5
Original line number Diff line number Diff line
@@ -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/> &nbsp;-->
<!--        </a>-->
<!--    </li>-->
    <li class="nav-item">
        <a href="#extraction" class="nav-link" aria-controls="extraction">
            Extractions  <br/> &nbsp;
        </a>
    </li>
</ul>

<div class="tab-content">
Loading