src/Controller/GrandPublic/IndexGrandPublicController.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GrandPublic;
  3. use App\Entity\AssistantMaternel\AssistantMaternel;
  4. use App\Entity\MAM\MAM;
  5. use App\Entity\OffreAccueil\Categorie;
  6. use App\Entity\Parametrage\EnumModule;
  7. use App\Entity\Parametrage\EnumParametre;
  8. use App\Entity\Referentiel\EnumLieuAccueil;
  9. use App\Entity\Referentiel\EnumRemplissageAccueil;
  10. use App\Entity\Referentiel\FrequenceAccueil;
  11. use App\Entity\Referentiel\JourSemaine;
  12. use App\Entity\Referentiel\LieuAccueil;
  13. use App\Entity\Referentiel\Periode;
  14. use App\Entity\Referentiel\TrancheHoraire;
  15. use App\Service\AssistantMaternel\AssistantMaternelService;
  16. use App\Service\Parametrage\ParametrageService;
  17. use InvalidArgumentException;
  18. use Psr\Log\LoggerInterface;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. class IndexGrandPublicController extends AbstractController
  22. {
  23.     const EST_ACTIF 'est_actif';
  24.     const ARR_PLANNING 'arrPlanning';
  25.     const HAS_DEPASSEMENT 'hasDepassement';
  26.     const ASSMAT 'assmat';
  27.     const MAM 'mam';
  28.     const ACTIVE_BUREAU_DISTRIB 'active_bureau_distrib';
  29.     const ACTIVE_ENFANTS_11ANS 'active_enfants_11ans';
  30.     const PREFERENCE 'preferences_publication';
  31.     private $logger;
  32.     private $parametrageService;
  33.     private $assmatService;
  34.     public function __construct(LoggerInterface $loggerParametrageService $parametrageServiceAssistantMaternelService $assmatService)
  35.     {
  36.         $this->logger $logger;
  37.         $this->parametrageService $parametrageService;
  38.         $this->assmatService $assmatService;
  39.     }
  40.     private function verifierActivationModule()
  41.     {
  42.         if (!$this->parametrageService->estModuleActif(EnumModule::GRANDPUBLIC)) {
  43.             throw $this->createAccessDeniedException();
  44.         }
  45.     }
  46.     /**
  47.      * Obtient la chaîne du client EFC à utiliser dans les nom des twigs
  48.      * @return string la chaîne correspondant au client efc compatible avec les twig customs
  49.      */
  50.     private function getClientEFCForTwig()
  51.     {
  52.         $clientEnv $this->getParameter('clientEFC'); //cf .env et services.yaml
  53.         if ($clientEnv == '' || $clientEnv == 'efc' || $clientEnv == 'efclocal' || $clientEnv == 'efcXX') {
  54.             return '';
  55.         } else {
  56.             return $clientEnv;
  57.         }
  58.     }
  59.     /**
  60.      * Point d'entrée grand public
  61.      * 
  62.      * @Route("/grandpublic", name="gp_index")
  63.      */
  64.     public function index()
  65.     {
  66.         $this->verifierActivationModule();
  67.         //obtient l'information comme quoi la recherche cartographique est disponible
  68.         $isCartoAvailable $this->parametrageService->getParametre(EnumParametre::URL_CARTO_CONTENT)->getValeur();
  69.         $textePresentation $this->parametrageService->getParametre(EnumParametre::CONTENU_PRES_CARTO)->getValeur();
  70.         $urlLogoEntete $this->parametrageService->getParametre(EnumParametre::URL_LOGO_ENTETE_GRANDPUBLIC)->getValeur();
  71.         return $this->render('grand_public/index_' $this->getClientEFCForTwig() . '.html.twig', [
  72.                     'isCartoAvailable' => $isCartoAvailable != '',
  73.                     'textePresentation' => $textePresentation,
  74.                     'urlLogoEntete' => $urlLogoEntete
  75.         ]);
  76.     }
  77.     /**
  78.      * Point d'entrée carto
  79.      * 
  80.      * @Route("/grandpublic/carto", name="gp_carto")
  81.      */
  82.     public function rechercheCarto()
  83.     {
  84.         $this->verifierActivationModule();
  85.         //récupération de la configuration de cartographie
  86.         $urlCartoIframe $this->parametrageService->getParametre(EnumParametre::URL_CARTO_CONTENT)->getValeur();
  87.         $urlCartoJs $this->parametrageService->getParametre(EnumParametre::URL_CARTO_JS)->getValeur();
  88.         $urlLogoEntete $this->parametrageService->getParametre(EnumParametre::URL_LOGO_ENTETE_GRANDPUBLIC)->getValeur();
  89.         return $this->render('grand_public/carto/evermaps.html.twig', [
  90.                     'urlCartoIframe' => $urlCartoIframe,
  91.                     'urlCartoJs' => $urlCartoJs,
  92.                     'urlLogoEntete' => $urlLogoEntete
  93.         ]);
  94.     }
  95.     /**
  96.      * @Route("/grandpublic/mentions_legales/", name="gp_mentions_legales")
  97.      */
  98.     public function mentionsLegales()
  99.     {
  100.         $this->verifierActivationModule();
  101.         $urlLogoEntete $this->parametrageService->getParametre(EnumParametre::URL_LOGO_ENTETE_GRANDPUBLIC)->getValeur();
  102.         $content $this->parametrageService->getParametre(EnumParametre::CONTENU_MENTIONS_LEGALES_GRANDPUBLIC)->getValeur();
  103.         return $this->render('grand_public/commun/mentions_legales.html.twig', [
  104.                     'urlLogoEntete' => $urlLogoEntete,
  105.                     'content' => $content
  106.         ]);
  107.     }
  108.     /**
  109.      * @Route("/grandpublic/protection_donnees/", name="gp_protection_donnees")
  110.      */
  111.     public function protectionDonnees()
  112.     {
  113.         $this->verifierActivationModule();
  114.         $urlLogoEntete $this->parametrageService->getParametre(EnumParametre::URL_LOGO_ENTETE_GRANDPUBLIC)->getValeur();
  115.         $num $this->getClientEFCForTwig();
  116.         if ($num == '') {
  117.             return $this->mentionsLegales();
  118.         }
  119.         return $this->render('grand_public/commun/protection_donnees_' $num '.html.twig', [
  120.                     'urlLogoEntete' => $urlLogoEntete
  121.         ]);
  122.     }
  123.     /**
  124.      * @Route("/grandpublic/accessibilite/", name="gp_accessibilite")
  125.      */
  126.     public function accessibilite()
  127.     {
  128.         $this->verifierActivationModule();
  129.         $urlLogoEntete $this->parametrageService->getParametre(EnumParametre::URL_LOGO_ENTETE_GRANDPUBLIC)->getValeur();
  130.         $num $this->getClientEFCForTwig();
  131.         if ($num == '') {
  132.             $num 'efc';
  133.         }
  134.         return $this->render('grand_public/commun/accessibilite_' $num '.html.twig', [
  135.                     'urlLogoEntete' => $urlLogoEntete
  136.         ]);
  137.     }
  138.     /**
  139.      * Afficher la modale en lecture seule de la fiche d'une MAM
  140.      *
  141.      * @Route("/grandpublic/mam/fiche/{idFonctionnel}", defaults={"idFonctionnel"=0}, name="mod_mam_fiche_gp")
  142.      */
  143.     public function voirFicheMamLectureSeule($idFonctionnel)
  144.     {
  145.         $this->verifierActivationModule();
  146.         if (is_null($idFonctionnel)) {
  147.             throw new InvalidArgumentException("Le paramètre id est obligatoire.");
  148.         }
  149.         $active_bureau_distrib $this->parametrageService->getParametre(EnumParametre::ACTIVE_BUREAU_DISTRIBUTEUR)->getValeur();
  150.         $em $this->getDoctrine()->getManager();
  151.         $repo_mam $em->getRepository(MAM::class);
  152.         $mam $repo_mam->findOneBy(['id_fonctionnel' => $idFonctionnel]);
  153.         if (!$mam) {
  154.             throw $this->createNotFoundException('Cette MAM n\'existe pas.');
  155.         }
  156.         $preferences_publication $mam->getPreferencesPublication();
  157.         $presentation_mam $mam->getPresentationMAM();
  158.         $active_atypique $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_ATYPIQUE)->getValeur();
  159.         $active_handicap $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_HANDICAP)->getValeur();
  160.         $active_enfants_11ans $this->parametrageService->getParametre(EnumParametre::ACTIVE_ENFANTS_11_ANS)->getValeur();
  161.         return $this->render('offre_accueil/mam/_mod_index.html.twig', [
  162.                     self::MAM => $mam,
  163.                     'preferences_publication' => $preferences_publication,
  164.                     'presentation_mam' => $presentation_mam,
  165.                     'active_atypique' => $active_atypique,
  166.                     'active_handicap' => $active_handicap,
  167.                     'lecture_seule' => true,
  168.                     self::ACTIVE_BUREAU_DISTRIB => $active_bureau_distrib,
  169.                     'photos' => $mam->getPhotosValidees(),
  170.                     self::ACTIVE_ENFANTS_11ANS => $active_enfants_11ans
  171.         ]);
  172.     }
  173.     /**
  174.      * obtient la vue partielle pour représenter l'offre d'accueil grand public
  175.      * d'une assmat, selon son lieu d'accueil
  176.      * @param type $assmat
  177.      * @param type $idLieuAccueil
  178.      * @return type
  179.      */
  180.     private function offreAccueilAssmatByLieu($assmat$idLieuAccueil)
  181.     {
  182.         $this->verifierActivationModule();
  183.         $edition false;
  184.         $active_bureau_distrib $this->parametrageService->getParametre(EnumParametre::ACTIVE_BUREAU_DISTRIBUTEUR)->getValeur();
  185.         $active_atypique $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_ATYPIQUE)->getValeur();
  186.         $active_handicap $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_HANDICAP)->getValeur();
  187.         $active_enfants_11ans $this->parametrageService->getParametre(EnumParametre::ACTIVE_ENFANTS_11_ANS)->getValeur();
  188.         $preferences_publication $assmat->getPreferencesPublication();
  189.         $presentation_assmat $assmat->getPresentationAssmat();
  190.         $dispos_prev_assmat $assmat->getDisposPrev();
  191.         $em $this->getDoctrine()->getManager();
  192.         $dispos_vacances_assmat $em->createQueryBuilder()
  193.                 ->from(\App\Entity\OffreAccueil\PeriodeVacances::class, 'p')
  194.                 ->select('p')
  195.                 ->join('p.semaines''s')
  196.                 ->addSelect('s')
  197.                 ->join('s.dispos''d')
  198.                 ->addSelect('d')
  199.                 ->join('d.assmat''a')
  200.                 ->andWhere('a = :assmat')
  201.                 ->setParameter('assmat'$assmat)
  202.                 ->getQuery()
  203.                 ->getResult();
  204.         $categoriesCadreAccueil $em->getRepository(Categorie::class)->categoriesOngletAvecSaisieAssmat(Categorie::ONGLET_CADRE_ACCUEIL$assmat);
  205.         $categoriesTarifs $em->getRepository(Categorie::class)->categoriesOngletAvecSaisieAssmat(Categorie::ONGLET_TARIFS$assmat);
  206.         $listeJours $em->getRepository(JourSemaine::class)->findBy(array(self::EST_ACTIF => true), array('id' => 'ASC'));
  207.         $listeTranches $em->getRepository(TrancheHoraire::class)->findBy(array(self::EST_ACTIF => true), array('id' => 'ASC'));
  208.         $listeFrequences $em->getRepository(FrequenceAccueil::class)->findBy(array(self::EST_ACTIF => true));
  209.         $tranchesAge $assmat->getTranchesAgeAgreesByIdLieu($idLieuAccueil);
  210.         $lieuAccueil $em->getRepository(LieuAccueil::class)->findOneById($idLieuAccueil);
  211.         $dispos_public_assmat $assmat->getDisposPublicByLieuAccueil($lieuAccueil);
  212.         //gère le conteneur d'édition de l'offre d'accueil de l'assmat
  213.         return $this->render('offre_accueil/assistant_maternel/_mod_index.html.twig', [
  214.                     'choix' => 'choix',
  215.                     self::ASSMAT => $assmat,
  216.                     self::ACTIVE_BUREAU_DISTRIB => $active_bureau_distrib,
  217.                     'edition' => $edition,
  218.                     'idLieuAccueil' => $idLieuAccueil,
  219.                     'categoriesCadreAccueil' => $categoriesCadreAccueil,
  220.                     'categoriesTarifs' => $categoriesTarifs,
  221.                     'preferences_publication' => $preferences_publication,
  222.                     'presentation_assmat' => $presentation_assmat,
  223.                     'active_atypique' => $active_atypique,
  224.                     'active_handicap' => $active_handicap,
  225.                     'dispos_prev_assmat' => $dispos_prev_assmat,
  226.                     'dispos_public_assmat' => $dispos_public_assmat,
  227.                     'dispos_vacances_assmat' => $dispos_vacances_assmat,
  228.                     'liste_jours' => $listeJours,
  229.                     'liste_tranches' => $listeTranches,
  230.                     'liste_frequences' => $listeFrequences,
  231.                     'tranches_age_assmat' => $tranchesAge,
  232.                     'photos' => $assmat->getPhotosValidees(),
  233.                     self::ACTIVE_ENFANTS_11ANS => $active_enfants_11ans
  234.         ]);
  235.     }
  236.     /**
  237.      * @Route("/grandpublic/asm/oa/{idFonctionnel}/{idLieuAccueil}", defaults={"idFonctionnel"=0, "idLieuAccueil"=0 }, name="mod_assmat_oa_gp")
  238.      */
  239.     public function offreAccueilAssmat($idFonctionnel$idLieuAccueil)
  240.     {
  241.         $this->verifierActivationModule();
  242.         if (is_null($idFonctionnel)) {
  243.             throw new InvalidArgumentException("Le paramètre id est obligatoire.");
  244.         }
  245.         $em $this->getDoctrine()->getManager();
  246.         $repo_assmat $em->getRepository(AssistantMaternel::class);
  247.         $assmat $repo_assmat->findOneBy(['id_fonctionnel' => $idFonctionnel]);
  248.         if (!$assmat) {
  249.             throw $this->createNotFoundException('Cet assistant maternel n\'existe pas.');
  250.         }
  251.         if ($idLieuAccueil == 0) {
  252.             $lieuxAggrees $assmat->getLieuxAccueilAgrees();
  253.             $nbLieux count($lieuxAggrees);
  254.             if ($nbLieux == 0) {
  255.                 throw new InvalidArgumentException("L'asssistant maternel n'a aucun lieu d'accueil aggréé.");
  256.             } else if ($nbLieux 1) {
  257.                 //par défaut, en cas de double agrément, on fait accéer à l'offre en MAM
  258.                 $idLieuAccueil EnumLieuAccueil::MAM;
  259.             } else {
  260.                 $idLieuAccueil reset($lieuxAggrees)->getId();
  261.             }
  262.         }
  263.         return $this->offreAccueilAssmatByLieu($assmat$idLieuAccueil);
  264.     }
  265.     /**
  266.      * Afficher la modale en lecture seule de la fiche d'un Assmat
  267.      *
  268.      * @Route("/grandpublic/asm/fiche/{id}", defaults={"id"=0}, name="mod_assmat_fiche_gp")
  269.      */
  270.     public function voirFicheAssmatLectureSeule($id)
  271.     {
  272.         $this->verifierActivationModule();
  273.         if (is_null($id)) {
  274.             throw new InvalidArgumentException("Le paramètre id est obligatoire.");
  275.         }
  276.         $active_bureau_distrib $this->parametrageService->getParametre(EnumParametre::ACTIVE_BUREAU_DISTRIBUTEUR)->getValeur();
  277.         $active_coche_nuit $this->parametrageService->getParametre(EnumParametre::ACTIVE_GERE_ACCUEIL_NUIT)->getValeur();
  278.         $active_enfants_11ans $this->parametrageService->getParametre(EnumParametre::ACTIVE_ENFANTS_11_ANS)->getValeur();
  279.         $em $this->getDoctrine()->getManager();
  280.         $listePeriodes $em->getRepository(Periode::class)->findBy(array(self::EST_ACTIF => true), array('ordre' => 'ASC'));
  281.         $listeJours $em->getRepository(JourSemaine::class)->findBy(array(self::EST_ACTIF => true), array('id' => 'ASC'));
  282.         $listeTranches $em->getRepository(TrancheHoraire::class)->findBy(array(self::EST_ACTIF => true), array('id' => 'ASC'));
  283.         $listeFrequences $em->getRepository(FrequenceAccueil::class)->findBy(array(self::EST_ACTIF => true));
  284.         $repo_assmat $em->getRepository(AssistantMaternel::class);
  285.         $assmat $repo_assmat->find($id);
  286.         if (!$assmat) {
  287.             throw $this->createNotFoundException('Cet assistant maternel n\'existe pas.');
  288.         }
  289.         $recap_accueil $this->assmatService->getRecapAccueil($assmat); //affichage planning
  290.         return $this->render('assistant_maternel/_mod_fiche_lecture_seule.html.twig', [
  291.                     self::ASSMAT => $assmat,
  292.                     self::ARR_PLANNING => $recap_accueil[self::ARR_PLANNING],
  293.                     self::HAS_DEPASSEMENT => $recap_accueil[self::HAS_DEPASSEMENT],
  294.                     'liste_enfants_assmat_gardes' => $recap_accueil['listeEnfantsAssmatGardes'],
  295.                     'liste_enfants' => $recap_accueil['listeEnfants'],
  296.                     'liste_lieux_accueils' => $recap_accueil['listeLieux'],
  297.                     'liste_types_agrem' => $recap_accueil['listeTypes'],
  298.                     'liste_tranches_agrem' => $recap_accueil['listeTranchesAge'],
  299.                     'liste_periodes' => $listePeriodes,
  300.                     'liste_jours' => $listeJours,
  301.                     'liste_tranches' => $listeTranches,
  302.                     'liste_frequences' => $listeFrequences,
  303.                     'liste_remplissages' => EnumRemplissageAccueil::GetRemplissageAccueilClassName(),
  304.                     self::ACTIVE_BUREAU_DISTRIB => $active_bureau_distrib,
  305.                     'active_coche_nuit' => $active_coche_nuit,
  306.                     'allow_link_enfant' => false,
  307.                     'lecture_seule' => true,
  308.                     self::ACTIVE_ENFANTS_11ANS => $active_enfants_11ans,
  309.         ]);
  310.     }
  311. }