Commit 24361479 authored by Johnny Leveneur's avatar Johnny Leveneur
Browse files

filtre des ateliers par année universitaire des programmes

parent dafb0802
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ use Atelier\Form\Atelier\AtelierFormAwareTrait;
use Atelier\Provider\Etat\SessionEtats;
use Atelier\Service\Atelier\AtelierServiceAwareTrait;
use Atelier\Service\Inscription\InscriptionServiceAwareTrait;
use Atelier\Service\Programme\ProgrammeServiceAwareTrait;
use Atelier\Service\Session\SessionServiceAwareTrait;
use DateTime;
use Etudiant\Service\Etudiant\EtudiantServiceAwareTrait;
@@ -41,6 +42,7 @@ class AtelierController extends AbstractActionController
    use SessionServiceAwareTrait;
    use SiteServiceAwareTrait;
    use UserServiceAwareTrait;
    use ProgrammeServiceAwareTrait;

    use AtelierFormAwareTrait;
    use UploadFormAwareTrait;
@@ -51,12 +53,14 @@ class AtelierController extends AbstractActionController
        $villeAsOptions = $this->getVilleService()->getVillesAsOptions();
        $siteAsOptions = $this->getSiteService()->getSitesAsOptions();
        $archivageAsOptions = ['0' => 'Non historisés', '1' => 'Historisés'];
        $anneeUnivAsOptions = $this->getProgrammeService()->getAnneesUnivOptions();

        $ateliers = $this->getAtelierService()->getAteliersWithFiltre($params, 'libelle','asc', true);

        return new ViewModel([
            'ateliers' => $ateliers,
            'params' => $params,
            'anneeUnivAsOptions' => $anneeUnivAsOptions,
            'villeAsOptions' => $villeAsOptions,
            'siteAsOptions' => $siteAsOptions,
            'archivageAsOptions' => $archivageAsOptions,
+4 −2
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Atelier\Controller;
use Atelier\Form\Atelier\AtelierForm;
use Atelier\Service\Atelier\AtelierService;
use Atelier\Service\Inscription\InscriptionService;
use Atelier\Service\Programme\ProgrammeService;
use Atelier\Service\Session\SessionService;
use DoctrineORMModule\Proxy\__CG__\Enquete\Entity\Db\Enquete;
use Etudiant\Controller\EtudiantController;
@@ -43,6 +44,7 @@ class AtelierControllerFactory
         * @var SiteService $siteService
         * @var UserService $userService
         * @var VilleService $villeService
         * @var ProgrammeService $programmeService
         *
         *
         * @var AtelierForm $atelierForm
@@ -62,6 +64,7 @@ class AtelierControllerFactory
        $villeService = $container->get(VilleService::class);
        $atelierForm = $container->get('FormElementManager')->get(AtelierForm::class);
        $uploadForm = $container->get('FormElementManager')->get(UploadForm::class);
        $programmeService = $container->get(ProgrammeService::class);

        $controller = new AtelierController();
        $controller->setAtelierService($atelierService);
@@ -78,8 +81,7 @@ class AtelierControllerFactory
        $controller->setVilleService($villeService);
        $controller->setAtelierForm($atelierForm);
        $controller->setUploadForm($uploadForm);


        $controller->setProgrammeService($programmeService);

        return $controller;
    }
+19 −0
Original line number Diff line number Diff line
@@ -129,6 +129,25 @@ class Atelier implements HistoriqueAwareInterface
        return $this->programmes->toArray();
    }

    public function getAnneesUnivProgrammes(): array
    {
        $anneesUniv = [];
        foreach ($this->getProgrammes() as $programme) {
            $anneesUniv[] = $programme->getAnneeDebutUniv();
            $anneesUniv[] = $programme->getAnneeFinUniv();
        }
        $anneesUniv = array_filter(array_unique($anneesUniv));
        sort($anneesUniv);

        return $anneesUniv;
    }

    public function getStringAnneesUnivProgrammes(): string
    {
        $anneesUniv = $this->getAnneesUnivProgrammes();
        return implode(', ', $anneesUniv);
    }

    public static function generateOptions(array $formations) : array
    {
        $groupes = [];
+13 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Atelier\Entity\Db;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Etudiant\Entity\Db\Etudiant;
use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;

@@ -85,4 +86,16 @@ class Programme implements HistoriqueAwareInterface
        return ($this->getDateDebut()?$this->getDateDebut()->format('d/m/Y'):"---"). " au ". ($this->getDateFin()?$this->getDateFin()->format('d/m/Y'):"---");
    }

    public function getAnneeDebutUniv(): ?int
    {
        if ($this->getDateDebut() === null) return null;
        return Etudiant::getAnneeDate($this->getDateDebut());
    }

    public function getAnneeFinUniv(): ?int
    {
        if ($this->getDateFin() === null) return null;
        return Etudiant::getAnneeDate($this->getDateFin());
    }

}
 No newline at end of file
+60 −25
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ use Doctrine\ORM\QueryBuilder;
use DoctrineModule\Persistence\ProvidesObjectManager;
use Atelier\Entity\Db\Atelier;
use Atelier\Entity\Db\Groupe;
use Etudiant\Entity\Db\Etudiant;
use Laminas\Mvc\Controller\AbstractActionController;
use UnicaenApp\Exception\RuntimeException;

@@ -58,10 +59,10 @@ class AtelierService
    public function createQueryBuilder(): QueryBuilder
    {
        return $this->getObjectManager()->getRepository(Atelier::class)->createQueryBuilder('atelier')
            ->addSelect('groupe')->leftJoin('atelier.groupe', 'groupe')
        ;
            ->addSelect('groupe')->leftJoin('atelier.groupe', 'groupe');
    }
    public function createQueryBuilderWithFiltre(array $params = [],): QueryBuilder

    public function createQueryBuilderWithFiltre(array $params = []): QueryBuilder
    {
        foreach ($params as $key => $value) {
            if ($value == null) {
@@ -108,6 +109,12 @@ class AtelierService
    /** @return Atelier[] */
    public function getAteliersWithFiltre(array $params = [], string $champ = 'libelle', string $ordre = 'DESC', bool $withHisto = false): array
    {
        $anneeUniv = null ;
        if (array_key_exists('anneeuniv', $params)) {
            $anneeUniv = $params['anneeuniv'];
            unset($params['anneeuniv']);
        }

        $qb = $this->createQueryBuilderWithFiltre($params)
            ->orderBy('groupe.libelle, atelier.' . $champ, $ordre);

@@ -115,7 +122,28 @@ class AtelierService
            $qb = $qb->andWhere('programme.histoDestruction IS NULL');
        }

        return $qb->getQuery()->getResult();
        $ateliers = $qb->getQuery()->getResult();

        if ($anneeUniv !== null && $anneeUniv != '' ) {
            // filtrer sur l'année universitaire
            $ateliers = array_filter($ateliers, function ($atelier) use ($anneeUniv) {
                foreach ($atelier->getProgrammes() as $programme) {
                    if (
                        $programme->estNonHistorise() &&
                        (
                            $programme->getanneeDebutUniv() == $anneeUniv ||
                            $programme->getanneeFinUniv() == $anneeUniv
                        )
                    ) {
                        return true;
                    }
                }
                return false;
            });
            $ateliers = array_values($ateliers); // réindexer le tableau

        }
            return $ateliers ;
    }


@@ -134,7 +162,8 @@ class AtelierService
        return $result;
    }

    public function getAtelier(?int $id): ?Atelier
    public
    function getAtelier(?int $id): ?Atelier
    {
        if ($id === null) return null;
        $qb = $this->createQueryBuilder()
@@ -149,7 +178,8 @@ class AtelierService
        return $result;
    }

    public function getRequestedAtelier(AbstractActionController $controller, string $paramName = 'atelier'): ?Atelier
    public
    function getRequestedAtelier(AbstractActionController $controller, string $paramName = 'atelier'): ?Atelier
    {
        $id = $controller->params()->fromRoute($paramName);
        return $this->getAtelier($id);
@@ -159,7 +189,8 @@ class AtelierService
    /**
     * @return array
     */
    public function getAtelierAsOptions(): array
    public
    function getAtelierAsOptions(): array
    {
        $ateliers = $this->getAteliers();

@@ -174,7 +205,8 @@ class AtelierService
     * @param Atelier[] $formationsAlreadyUsed
     * @return Atelier[]
     */
    public function getFormationsDisponiblesAsOptions(array $formationsAlreadyUsed = []): array
    public
    function getFormationsDisponiblesAsOptions(array $formationsAlreadyUsed = []): array
    {
        $formations = $this->getAteliers();

@@ -196,14 +228,14 @@ class AtelierService
    }



    /** RECHERCHES ****************************************************************************************************/

    /**
     * @param string $texte
     * @return Atelier[]
     */
    public function findAtelierByTerm(string $texte): array
    public
    function findAtelierByTerm(string $texte): array
    {
        $qb = $this->createQueryBuilder()
            ->andWhere("LOWER(CONCAT(atelier.libelle, ' ', groupe.libelle)) like :search OR LOWER(CONCAT(groupe.libelle, ' ', atelier.libelle)) like :search")
@@ -217,7 +249,8 @@ class AtelierService
     * @param Atelier[] $ateliers
     * @return array
     */
    public function formatAtelierJSON(array $ateliers): array
    public
    function formatAtelierJSON(array $ateliers): array
    {
        $result = [];
        foreach ($ateliers as $atelier) {
@@ -235,7 +268,8 @@ class AtelierService

    /** FACADE *************************************************************************************/

    public function createAtelier(string $libelle, ?Groupe $groupe): Atelier
    public
    function createAtelier(string $libelle, ?Groupe $groupe): Atelier
    {
        $atelier = new Atelier();
        $atelier->setLibelle($libelle);
@@ -245,16 +279,17 @@ class AtelierService
    }

    /** @return Session[] */
    public function getSessionsActives(Atelier $atelier, ?DateTime $date = null): array
    public
    function getSessionsActives(Atelier $atelier, ?DateTime $date = null): array
    {
        if ($date === null) $date = new DateTime();
        $sessions = $atelier->getSessions();
        $sessions = array_filter($sessions, function (Session $s) use ($date) {
            return $s->estNonHistorise()
                AND $s->getEtatActif()  !== null
                AND in_array($s->getEtatActif()->getType()->getCode(), [SessionEtats::ETAT_INSCRIPTION_OUVERTE, SessionEtats::PREPARATION])
                AND $s->getDerniereSeance()->getDateTimeFin() > $date
                ; });
                and $s->getEtatActif() !== null
                and in_array($s->getEtatActif()->getType()->getCode(), [SessionEtats::ETAT_INSCRIPTION_OUVERTE, SessionEtats::PREPARATION])
                and $s->getDerniereSeance()->getDateTimeFin() > $date;
        });
        return $sessions;
    }
}
Loading