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

filtres ville et site sur les programmes

parent c382695a
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -312,3 +312,15 @@ alter table public.atelier_session
    add constraint atelier_session_site_site_id_fk
        foreign key (site_id) references public.site_site;


/* site et ville d'un programme */

select prg.id, prg.libelle, at.libelle, ats.lieu, ss.libelle, sv.nom
from atelier_programme prg
         join atelier_atelier_programme aap on prg.id = aap.programme_id
         join atelier_atelier at on aap.atelier_id = at.id
         join atelier_session ats on at.id = ats.atelier_id
         left join  site_site ss on ats.site_id = ss.id
         left join site_ville sv on ss.ville_id = sv.id
order by prg.id;
;
 No newline at end of file
+12 −1
Original line number Diff line number Diff line
@@ -12,6 +12,8 @@ use Laminas\Http\Request;
use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use Site\Service\Site\SiteServiceAwareTrait;
use Site\Service\Ville\VilleServiceAwareTrait;

class ProgrammeController extends AbstractActionController
{
@@ -19,13 +21,22 @@ class ProgrammeController extends AbstractActionController
    use ProgrammeServiceAwareTrait;
    use ProgrammeFormAwareTrait;
    use SelectionnerAtelierFormAwareTrait;
    use VilleServiceAwareTrait;
    use SiteServiceAwareTrait;

    public function indexAction(): ViewModel
    {
        $programmes = $this->getProgrammeService()->getProgrammes('dateDebut', 'DESC', true);
        $params = $this->params()->fromQuery();
        $villeAsOptions = $this->getVilleService()->getVillesAsOptions();
        $siteAsOptions = $this->getSiteService()->getSitesAsOptions();

        $programmes = $this->getProgrammeService()->getProgrammesWithFiltre($params,'dateDebut', 'DESC', true);

        return new ViewModel([
            'programmes' => $programmes,
            'params' => $params,
            'villeAsOptions' => $villeAsOptions,
            'siteAsOptions' => $siteAsOptions,
        ]);
    }

+9 −0
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@ use Atelier\Service\Programme\ProgrammeService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use Site\Service\Site\SiteService;
use Site\Service\Ville\VilleService;

class ProgrammeControllerFactory {

@@ -23,17 +25,24 @@ class ProgrammeControllerFactory {
         * @var ProgrammeService $programmeService
         * @var ProgrammeForm $programmeForm
         * @var SelectionnerAtelierForm $selectionnerAtelierForm
         * @var SiteService $siteService
         * @var VilleService $villeService
         */
        $atelierService = $container->get(AtelierService::class);
        $programmeService = $container->get(ProgrammeService::class);
        $programmeForm = $container->get('FormElementManager')->get(ProgrammeForm::class);
        $selectionnerAtelierForm = $container->get('FormElementManager')->get(SelectionnerAtelierForm::class);
        $villeService = $container->get(VilleService::class);
        $siteService = $container->get(SiteService::class);

        $controller = new ProgrammeController();
        $controller->setAtelierService($atelierService);
        $controller->setProgrammeService($programmeService);
        $controller->setProgrammeForm($programmeForm);
        $controller->setSelectionnerAtelierForm($selectionnerAtelierForm);
        $controller->setVilleService($villeService);
        $controller->setSiteService($siteService);

        return $controller;
    }
}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ class SessionForm extends Form
            'type' => Text::class,
            'name' => 'lieu',
            'options' => [
                'label' => "Lieu <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :",
                'label' => "Lieu <span class='icon icon-obligatoire'></span> :",
                'label_options' => [ 'disable_html_escape' => true, ],
            ],
            'attributes' => [
@@ -91,7 +91,7 @@ class SessionForm extends Form
            'type' => Select::class,
            'name' => 'site',
            'options' => [
                'label' => "Site <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :",
                'label' => "Site <span class='icon ' title='Champ obligatoire'></span> :",
                'label_options' => [ 'disable_html_escape' => true, ],
                'empty_option' => "Sélectionner un site ...",
                'value_options' => $this->getSiteService()->getSitesAsOptions(),
+31 −0
Original line number Diff line number Diff line
@@ -101,4 +101,35 @@ class ProgrammeService {
        ;
        return $qb->getQuery()->getResult();
    }

    /** @return Programme[] */
    public function getProgrammesWithFiltre(array $params = [], string $champ = 'dateDebut', string $ordre = 'DESC', bool $withHisto = false): array
    {
        foreach ($params as $key => $value) {
            if ($value == null) {
                unset($params[$key]);
            }
        }

        $qb = $this->createQueryBuilder()
            ->orderBy('programme.' . $champ, $ordre);

        if (!$withHisto) {
            $qb = $qb->andWhere('programme.histoDestruction IS NULL');
        }

        $qb->leftjoin('atelier.sessions', 'session');
        $qb->leftjoin('session.site', 'site');

        if(array_key_exists('site', $params) ) {
            $qb = $qb->andWhere('site.id = :site')->setParameter('site', $params['site']);
        }

        if(array_key_exists('ville',$params)){
            $qb = $qb->join('site.ville', 'ville');
            $qb = $qb->andWhere('ville.id = :ville')->setParameter('ville', $params['ville']);
        }

        return $qb->getQuery()->getResult();
    }
}
 No newline at end of file
Loading