Skip to content
Snippets Groups Projects
Commit 95dcca14 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Export d'inscription

parent 8e25981e
No related branches found
No related tags found
No related merge requests found
<?php
namespace Formation;
use Formation\Controller\ExportController;
use Formation\Controller\ExportControllerFactory;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenPrivilege\Guard\PrivilegeController;
return [
'bjyauthorize' => [
'guards' => [
PrivilegeController::class => [
[
'controller' => ExportController::class,
'action' => [
'index',
'extraction-inscription',
],
'roles' => [
],
],
],
],
],
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'export' => [
'label' => 'Extraction',
'route' => 'export',
'resource' => PrivilegeController::getResourceId(ExportController::class, 'index'),
'order' => 3100,
'icon' => 'fas fa-angle-right',
],
],
],
],
],
],
],
'router' => [
'routes' => [
'export' => [
'type' => Literal::class,
'options' => [
'route' => '/export',
'defaults' => [
/** @see ExportController::indexAction() */
'controller' => ExportController::class,
'action' => 'index',
],
],
'may_terminate' => true,
'child_routes' => [
'extraction-inscription' => [
'type' => Segment::class,
'options' => [
'route' => '/extraction-inscription[/:csv]',
'defaults' => [
/** @see ExportController::extractionInscriptionAction() */
'action' => 'extraction-inscription',
],
],
],
],
],
],
],
'service_manager' => [
'factories' => [
],
],
'controllers' => [
'factories' => [
ExportController::class => ExportControllerFactory::class,
],
],
'form_elements' => [
'factories' => [
],
],
'hydrators' => [
'factories' => [
],
],
'view_helpers' => [
'invokables' => [
],
],
];
\ No newline at end of file
<?php
namespace Formation\Controller;
use Agent\Entity\Db\Agent;
use DateTime;
use Formation\Entity\Db\Domaine;
use Formation\Entity\Db\StagiaireExterne;
use Formation\Provider\Etat\InscriptionEtats;
use Formation\Provider\Etat\SessionEtats;
use Formation\Service\Inscription\InscriptionServiceAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use UnicaenApp\View\Model\CsvModel;
use UnicaenEtat\Service\EtatCategorie\EtatCategorieServiceAwareTrait;
use UnicaenEtat\Service\EtatType\EtatTypeServiceAwareTrait;
class ExportController extends AbstractActionController {
use EtatCategorieServiceAwareTrait;
use EtatTypeServiceAwareTrait;
use InscriptionServiceAwareTrait;
public function indexAction(): ViewModel
{
return new ViewModel([]);
}
public function extractionInscriptionAction(): ViewModel|CsvModel
{
$csv = $this->params()->fromRoute('csv');
$inscriptionCategorie = $this->getEtatCategorieService()->getEtatCategorieByCode(InscriptionEtats::TYPE);
$inscriptionEtats = $this->getEtatTypeService()->getEtatsTypesByCategorie($inscriptionCategorie);
$sessionCategorie = $this->getEtatCategorieService()->getEtatCategorieByCode(SessionEtats::TYPE);
$sessionEtats = $this->getEtatTypeService()->getEtatsTypesByCategorie($sessionCategorie);
$params = $this->params()->fromQuery();
$params['historise'] = '0';
$inscriptions = $this->getInscriptionService()->getInscriptionsWithFiltre($params);
if ($csv) {
$headers = ["stagiaire", "affectation", "action de formation", "domaines", "période", "Au plan de formation"];
$records = [];
foreach ($inscriptions as $inscription) {
$stagiaire = $inscription->getIndividu();
$affecation = null;
if ($stagiaire instanceof StagiaireExterne) $affecation = $stagiaire->getStructure();
if ($stagiaire instanceof Agent) {
$structure = ($stagiaire->getAffectationPrincipale())?->getStructure();
if ($structure) $affecation = (($structure->getNiv2() AND $structure->getNiv2() !== $structure)?($structure->getNiv2()->getLibelleCourt()." > "):"").$structure->getLibelleCourt();
}
$session = $inscription->getSession();
$action = $session->getFormation();
$domaines = array_map(function (Domaine $domaine) {return $domaine->getLibelle();}, $action->getDomaines());
$records[] = [
"stagiaire" => $stagiaire->getDenomination(false),
"affectation" => $affecation,
"action de formation" => $action->getLibelle(),
"domaines" => implode("\n",$domaines),
"période" => $session->getPeriode(),
"Au plan de formation" => (!empty($session->getDemandesExternes())) ? "Hors plan de formation":"Dans le plan de formation",
];
}
$date = (new DateTime())->format('Ymd-His');
$filename="export_inscriptions_".$date.".csv";
$CSV = new CsvModel();
$CSV->setDelimiter(';');
$CSV->setEnclosure('"');
$CSV->setHeader($headers);
$CSV->setData($records);
$CSV->setFilename($filename);
return $CSV;
}
return new ViewModel([
'params' => $params,
'inscriptionEtats' => $inscriptionEtats,
'sessionEtats' => $sessionEtats,
'inscriptions' => $inscriptions,
]);
}
}
\ No newline at end of file
<?php
namespace Formation\Controller;
use Formation\Service\Inscription\InscriptionService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenEtat\Service\EtatCategorie\EtatCategorieService;
use UnicaenEtat\Service\EtatType\EtatTypeService;
class ExportControllerFactory {
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container): ExportController
{
/**
* @var EtatCategorieService $etatCategorieService
* @var EtatTypeService $etatTypeService
* @var InscriptionService $inscriptionService
*/
$etatCategorieService = $container->get(EtatCategorieService::class);
$etatTypeService = $container->get(EtatTypeService::class);
$inscriptionService = $container->get(InscriptionService::class);
$controller = new ExportController();
$controller->setEtatCategorieService($etatCategorieService);
$controller->setEtatTypeService($etatTypeService);
$controller->setInscriptionService($inscriptionService);
return $controller;
}
}
\ No newline at end of file
...@@ -279,9 +279,20 @@ class InscriptionService ...@@ -279,9 +279,20 @@ class InscriptionService
{ {
$qb = $this->createQueryBuilder()->orderBy('inscription.histoCreation', 'asc'); $qb = $this->createQueryBuilder()->orderBy('inscription.histoCreation', 'asc');
if (isset($params['etat'])) { if (isset($params['etat_inscription']) AND $params['etat_inscription'] != '') {
$qb = Inscription::decorateWithEtatsCodes($qb, 'inscription', [$params['etat']]); $qb = Inscription::decorateWithEtatsCodes($qb, 'inscription', [$params['etat_inscription']], 'inscriptionEtats');
} }
if (isset($params['etat_session']) AND $params['etat_session'] != '') {
$qb = Session::decorateWithEtatsCodes($qb, 'session', [$params['etat_session']], 'sessionEtats');
}
if (isset($params['liste']) AND $params['liste'] != '') {
if ($params['liste'] !== "non classée") {
$qb = $qb->andWhere('inscription.liste = :liste')->setParameter('liste', $params['liste']);
} else {
$qb = $qb->andWhere('inscription.liste IS NULL');
}
}
if (isset($params['historise'])) { if (isset($params['historise'])) {
if ($params['historise'] === '1') $qb = $qb->andWhere('inscription.histoDestruction IS NOT NULL'); if ($params['historise'] === '1') $qb = $qb->andWhere('inscription.histoDestruction IS NOT NULL');
if ($params['historise'] === '0') $qb = $qb->andWhere('inscription.histoDestruction IS NULL'); if ($params['historise'] === '0') $qb = $qb->andWhere('inscription.histoDestruction IS NULL');
...@@ -295,6 +306,14 @@ class InscriptionService ...@@ -295,6 +306,14 @@ class InscriptionService
->andWhere('journee.jour >= :debut')->setParameter('debut', $debut) ->andWhere('journee.jour >= :debut')->setParameter('debut', $debut)
->andWhere('journee.jour <= :fin')->setParameter('fin', $fin); ->andWhere('journee.jour <= :fin')->setParameter('fin', $fin);
} }
if (isset($params['date_debut']) AND $params['date_debut'] !== "") {
$dateDebut = DateTime::createFromFormat('Y-m-d H:i', $params['date_debut'].' 06:00');
$qb = $qb->join('session.journees', 'journeeDebut')->andWhere('journeeDebut.jour >= :debut')->setParameter('debut', $dateDebut);
}
if (isset($params['date_fin']) AND $params['date_fin'] !== "") {
$dateFin = DateTime::createFromFormat('Y-m-d H:i', $params['date_fin'].' 20:00');
$qb = $qb->join('session.journees', 'journeeFin')->andWhere('journeeFin.jour <= :fin')->setParameter('fin', $dateFin);
}
$result = $qb->getQuery()->getResult(); $result = $qb->getQuery()->getResult();
return $result; return $result;
......
<?php
/**
* @see \Formation\Controller\ExportController::extractionInscriptionAction()
* @var EtatType[] $inscriptionEtats
* @var EtatType[] $sessionEtats
* @var Inscription[] $inscriptions
* @var array $params
*
**/
use Agent\Entity\Db\Agent;
use Formation\Entity\Db\Inscription;
use Formation\Entity\Db\StagiaireExterne;
use UnicaenEtat\Entity\Db\EtatType;
$this->headTitle("Extraction d'inscription");
?>
<h1 class="page-header">
Extraction d'inscription
</h1>
<div class="card">
<div class="card-header bg-default">
Filtres pour l'extraction des inscriptions
</div>
<div class="card-body">
<form action="<?php $this->url('export/extraction-inscription', [], [], true); ?>" method="get">
<div class="row">
<div class="col-md-10">
<div class="row">
<div class="col-md-4">
<label for="etat_inscription">État de l'inscription :</label>
<select id="etat_inscription" name="etat_inscription" class="selectpicker form-control">
<option value="">Tous les états </option>
<?php foreach ($inscriptionEtats as $etat) : ?>
<option
value="<?php echo $etat->getCode(); ?>"
data-content='<?php echo $this->etattype($etat); ?> <?php echo htmlentities($etat->getLibelle()); ?>'
<?php if ($params['etat_inscription'] === $etat->getCode()) : ?> selected <?php endif;?>
>
<?php echo $etat->getLibelle(); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label for="etat_session">État de la session :</label>
<select id="etat_session" name="etat_session" class="selectpicker form-control">
<option value="">Tous les états </option>
<?php foreach ($sessionEtats as $etat) : ?>
<option
value="<?php echo $etat->getCode(); ?>"
data-content='<?php echo $this->etattype($etat); ?> <?php echo htmlentities($etat->getLibelle()); ?>'
<?php if ($params['etat_session'] === $etat->getCode()) : ?> selected <?php endif;?>
>
<?php echo $etat->getLibelle(); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label for="liste">Liste :</label>
<select id="liste" name="liste" class="selectpicker form-control">
<option value="">Toutes listes </option>
<option value="<?php echo Inscription::PRINCIPALE; ?>"
<?php if (isset($params['liste']) AND $params['liste'] === Inscription::PRINCIPALE) : ?> selected <?php endif;?>
>
Principale
</option>
<option value="<?php echo Inscription::COMPLEMENTAIRE; ?>"
<?php if (isset($params['liste']) AND $params['liste'] === Inscription::COMPLEMENTAIRE) : ?> selected <?php endif;?>
>
Complémentaire
</option>
<option value="non classée"
<?php if (isset($params['liste']) AND $params['liste'] === "non classée") : ?> selected <?php endif;?>
>
Non classée
</option>
</select>
</div>
<div class="col-md-4">
<label for="date_debut">Date de début</label>
<input type="date" id="date_debut" name="date_debut" class="form-control"
value="<?php if (isset($params['date_debut'])) echo $params['date_debut']; ?>"
/>
</div>
<div class="col-md-4">
<label for="date_fin">Date de fin</label>
<input type="date" id="date_fin" name="date_fin" class="form-control"
value="<?php if (isset($params['date_fin'])) echo $params['date_fin']; ?>"
/>
</div>
</div>
</div>
<div class="col-md-2">
<button class="btn btn-primary" id="filter">
<span class="icon icon-filtrer"></span>
Filtrer
</button>
<br>
<button class="btn btn-primary" id="clear">
<span class="icon icon-gommer"></span>
R.A.Z.
</button>
</div>
</div>
</form>
</div>
</div>
<?php /** @see \Formation\Controller\ExportController::extractionInscriptionAction(); */ ?>
<a href="<?php echo $this->url('export/extraction-inscription', ['csv' => 'csv'], [], true); ?>" class="btn btn-primary">
<span class="icon icon-csv"></span>
Exporter au format CSV
</a>
<table class="table table-condensed" id="inscriptions">
<thead>
<tr>
<th> Stagiaire </th>
<th> Affectation </th>
<!-- <th> État de l'inscription</th>-->
<th> Action de formation </th>
<th> Domaine </th>
<th> Période </th>
<!-- <th> État de la sesion</th>-->
<!-- <th> Liste </th>-->
<th> Au plan de formation</th>
</tr>
</thead>
<tbody>
<?php foreach ($inscriptions as $inscription) : ?>
<?php
$stagiaire = $inscription->getIndividu();
$affecation = null;
if ($stagiaire instanceof StagiaireExterne) $affecation = $stagiaire->getStructure();
if ($stagiaire instanceof Agent) {
$structure = ($stagiaire->getAffectationPrincipale())?->getStructure();
if ($structure) $affecation = (($structure->getNiv2() AND $structure->getNiv2() !== $structure)?($structure->getNiv2()->getLibelleCourt()." > "):"").$structure->getLibelleCourt();
}
$session = $inscription->getSession();
$action = $session->getFormation();
?>
<tr>
<td data-order="<?php echo $stagiaire->getDenomination(false); ?>">
<?php echo $stagiaire->getDenomination(); ?>
</td>
<td> <?php echo $affecation; ?> </td>
<!-- <td> --><?php //echo $this->etatinstance($inscription->getEtatActif()); ?><!--</td>-->
<td> <?php echo $action->getLibelle(); ?> </td>
<td>
<?php $domaines = $action->getDomaines(); ?>
<?php if (empty($domaines)): ?>
<em>Aucun domaine</em>
<?php else : ?>
<?php foreach ($domaines as $domaine) : ?>
<?php echo $domaine->getLibelle(); ?><br/>
<?php endforeach; ?>
<?php endif; ?>
</td>
<td> <?php echo $session->getPeriode(); ?> </td>
<!-- <td> --><?php //echo $this->etatinstance($session->getEtatActif()); ?><!--</td>-->
<!-- <td> --><?php //echo $inscription->getListe(); ?><!-- </td>-->
<td>
<?php if (!empty($session->getDemandesExternes())) : ?>
Hors plan de formation
<?php else: ?>
Dans le plan de formation
<?php endif ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<script>
$(document).ready(function () {
$('table#inscriptions').DataTable({
// sorting: false,
paging: false,
autoWidth: false,
language: {
url: '/js/datatables_fr.json'
}
});
});
$('button#clear').click(function (e) {
e.preventDefault();
window.location = '?';
});
</script>
<?php
/**
* @see \Formation\Controller\ExportController::indexAction())
*/
$this->headTitle("Extractions");
?>
<h1 class="page-header">
Extractions
</h1>
<h2>
Extractions basées sur les inscriptions
</h2>
<div class="row">
<div class="col-md-10">
Réaliser des extractions d'inscriptions en fonction de critères liés aux états des inscriptions, des sessions associées, des listes, ...
</div>
<div class="col-md-2">
<a href="<?php echo $this->url('export/extraction-inscription',[],[], true); ?>"
class="btn btn-secondary"
>
<span class="icon icon-listing"></span>
Accéder à l'extraction
</a>
</div>
</div>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment