Loading module/Atelier/src/Controller/AtelierController.php +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -41,6 +42,7 @@ class AtelierController extends AbstractActionController use SessionServiceAwareTrait; use SiteServiceAwareTrait; use UserServiceAwareTrait; use ProgrammeServiceAwareTrait; use AtelierFormAwareTrait; use UploadFormAwareTrait; Loading @@ -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, Loading module/Atelier/src/Controller/AtelierControllerFactory.php +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -43,6 +44,7 @@ class AtelierControllerFactory * @var SiteService $siteService * @var UserService $userService * @var VilleService $villeService * @var ProgrammeService $programmeService * * * @var AtelierForm $atelierForm Loading @@ -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); Loading @@ -78,8 +81,7 @@ class AtelierControllerFactory $controller->setVilleService($villeService); $controller->setAtelierForm($atelierForm); $controller->setUploadForm($uploadForm); $controller->setProgrammeService($programmeService); return $controller; } Loading module/Atelier/src/Entity/Db/Atelier.php +19 −0 Original line number Diff line number Diff line Loading @@ -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 = []; Loading module/Atelier/src/Entity/Db/Programme.php +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 module/Atelier/src/Service/Atelier/AtelierService.php +60 −25 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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); Loading @@ -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 ; } Loading @@ -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() Loading @@ -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); Loading @@ -159,7 +189,8 @@ class AtelierService /** * @return array */ public function getAtelierAsOptions(): array public function getAtelierAsOptions(): array { $ateliers = $this->getAteliers(); Loading @@ -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(); Loading @@ -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") Loading @@ -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) { Loading @@ -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); Loading @@ -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
module/Atelier/src/Controller/AtelierController.php +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -41,6 +42,7 @@ class AtelierController extends AbstractActionController use SessionServiceAwareTrait; use SiteServiceAwareTrait; use UserServiceAwareTrait; use ProgrammeServiceAwareTrait; use AtelierFormAwareTrait; use UploadFormAwareTrait; Loading @@ -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, Loading
module/Atelier/src/Controller/AtelierControllerFactory.php +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -43,6 +44,7 @@ class AtelierControllerFactory * @var SiteService $siteService * @var UserService $userService * @var VilleService $villeService * @var ProgrammeService $programmeService * * * @var AtelierForm $atelierForm Loading @@ -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); Loading @@ -78,8 +81,7 @@ class AtelierControllerFactory $controller->setVilleService($villeService); $controller->setAtelierForm($atelierForm); $controller->setUploadForm($uploadForm); $controller->setProgrammeService($programmeService); return $controller; } Loading
module/Atelier/src/Entity/Db/Atelier.php +19 −0 Original line number Diff line number Diff line Loading @@ -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 = []; Loading
module/Atelier/src/Entity/Db/Programme.php +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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
module/Atelier/src/Service/Atelier/AtelierService.php +60 −25 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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); Loading @@ -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 ; } Loading @@ -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() Loading @@ -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); Loading @@ -159,7 +189,8 @@ class AtelierService /** * @return array */ public function getAtelierAsOptions(): array public function getAtelierAsOptions(): array { $ateliers = $this->getAteliers(); Loading @@ -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(); Loading @@ -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") Loading @@ -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) { Loading @@ -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); Loading @@ -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; } }