src/Controller/GrandPublic/RechercheController.php line 182

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GrandPublic;
  3. use App\Entity\AssistantMaternel\AssistantMaternel;
  4. use App\Entity\Parametrage\EnumParametre;
  5. use App\Entity\Referentiel\EnumLieuAccueil;
  6. use App\Entity\Referentiel\FrequenceDispo;
  7. use App\Entity\Referentiel\JourSemaine;
  8. use App\Entity\Referentiel\Periode;
  9. use App\Entity\Referentiel\TrancheHoraire;
  10. use App\Form\GrandPublic\RechercheDispoListeIdType;
  11. use App\Form\GrandPublic\RechercheDispoType;
  12. use App\Service\AssistantMaternel\AssistantMaternelService;
  13. use App\Service\GDA\PlanningDispoService;
  14. use App\Service\Parametrage\ParametrageService;
  15. use App\Service\Referentiel\TrancheAgeService;
  16. use DateTime;
  17. use Psr\Log\LoggerInterface;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. /**
  22.  * GP Recherche
  23.  *
  24.  */
  25. class RechercheController extends AbstractController
  26. {
  27.     const HTML_TO_UPDATE 'htmlToUpdate';
  28.     const EST_ACTIF 'est_actif';
  29.     private $logger;
  30.     private $parametrageService;
  31.     private $assmatService;
  32.     private $planningDispoService;
  33.     private $trancheAgeService;
  34.     public function __construct(LoggerInterface $loggerParametrageService $parametrageServiceAssistantMaternelService $assmatServicePlanningDispoService $planningDispoServiceTrancheAgeService $trancheAgeService)
  35.     {
  36.         $this->logger $logger;
  37.         $this->parametrageService $parametrageService;
  38.         $this->assmatService $assmatService;
  39.         $this->planningDispoService $planningDispoService;
  40.         $this->trancheAgeService $trancheAgeService;
  41.     }
  42.     /// méthodes publiques : ROUTES
  43.     /**
  44.      * Formulaire de recherche de dispos grand public, issu de la sous liste de recherche carto
  45.      * 
  46.      * @Route("/grandpublic/rechercheliste", name="ajax_recherche_dispo_listeid")
  47.      */
  48.     public function rechercheDispoByIdAjax(Request $request)
  49.     {
  50.         $em $this->getDoctrine()->getManager();
  51.         $listePeriodes $em->getRepository(Periode::class)->findBy([self::EST_ACTIF => true], ['ordre' => 'ASC']);
  52.         $listeJours $em->getRepository(JourSemaine::class)->findBy([self::EST_ACTIF => true], ['id' => 'ASC']);
  53.         $listeTranches $em->getRepository(TrancheHoraire::class)->findBy([self::EST_ACTIF => true], ['id' => 'ASC']);
  54.         $listeDispos $em->getRepository(FrequenceDispo::class)->findBy(array('est_actif' => true));
  55.         /* Initialisation */
  56.         $active_bureau_distrib $this->parametrageService->getParametre(EnumParametre::ACTIVE_BUREAU_DISTRIBUTEUR)->getValeur();
  57.         $active_coche_nuit $this->parametrageService->getParametre(EnumParametre::ACTIVE_GERE_ACCUEIL_NUIT)->getValeur();
  58.         $active_atypique $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_ATYPIQUE)->getValeur();
  59.         $active_handicap $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_HANDICAP)->getValeur();
  60.         $planningDispo $this->planningDispoService->creerPlanningViergeRecherche();
  61.         $liste_assmats null;
  62.         $liste_assmats_non_participe null;
  63.         $liste_assmats_prev null;
  64.         $lieuAccueilCherche 'tous';
  65.         $communeId 0;
  66.         $bureauDistributeurId 0;
  67.         $atypiqueMatin null;
  68.         $atypiqueSoir null;
  69.         $handicap null;
  70.         if ($request->isMethod('POST')) {
  71.             $leForm $request->request->get('recherche_dispo_liste_id');
  72.             $listeIdASM $leForm['listeIdASM'];
  73.             $listeIdMAM $leForm['listeIdMAM'];
  74.         } else {
  75.             $listeIdASM explode(','$request->query->get('listeASM'));
  76.             $listeIdMAM explode(','$request->query->get('listeMAM'));
  77.         }
  78.         $form_recherche $this->createForm(RechercheDispoListeIdType::class, null, [
  79.             'action' => $this->generateUrl('ajax_recherche_dispo_listeid'),
  80.             'planning_dispo' => $planningDispo,
  81.             'active_atypique' => $active_atypique,
  82.             'active_handicap' => $active_handicap,
  83.             'listeIdASM' => $listeIdASM,
  84.             'listeIdMAM' => $listeIdMAM,
  85.         ]);
  86.         $form_recherche->handleRequest($request);
  87.         if ($form_recherche->isSubmitted() && $form_recherche->isValid()) {
  88.             $listeIdASM $form_recherche->get('listeIdASM')->getData();
  89.             $listeIdASM array_filter($listeIdASM'strlen');
  90.             $listeIdMAM $form_recherche->get('listeIdMAM')->getData();
  91.             $listeIdMAM array_filter($listeIdMAM'strlen');
  92.             $lieuId $this->traduitLieuAccueilToEnum($lieuAccueilCherche);
  93.             $dateNaissanceEnfant $form_recherche->get('date_naissance_enf')->getData();
  94.             $dateDebutAccueil $form_recherche->get('date_debut_accueil')->getData();
  95.             if ($dateNaissanceEnfant === null) {
  96.                 $dateNaissanceEnfant $dateDebutAccueil;
  97.                 if ($dateNaissanceEnfant === null) {
  98.                     $dateNaissanceEnfant = new \DateTime();
  99.                 }
  100.             }
  101.             $listeTranchesAge $this->trancheAgeService->getListTrancheAgeForDateNaissance($dateNaissanceEnfant$dateDebutAccueil);
  102.             if ($active_atypique == 'true') {
  103.                 $atypiqueMatin $form_recherche->get('accepte_atypique_matin')->getData();
  104.                 $atypiqueSoir $form_recherche->get('accepte_atypique_soir')->getData();
  105.             }
  106.             if ($active_handicap == 'true') {
  107.                 $handicap $form_recherche->get('accepte_handicap')->getData();
  108.             }
  109.             $postedForm $request->request->get($form_recherche->getName());
  110.             $planningDispo $postedForm['planning_dispo'];
  111.             $liste_assmats $em->getRepository(AssistantMaternel::class)
  112.                 ->rechercherDispoGrandPublic($communeId$bureauDistributeurId$lieuId$listeTranchesAge$atypiqueMatin$atypiqueSoir$handicap$planningDispotrue$listeIdASM$listeIdMAM);
  113.             if ($liste_assmats != null) {
  114.                 shuffle($liste_assmats);
  115.             }
  116.             $liste_assmats_non_participe $em->getRepository(AssistantMaternel::class)
  117.                 ->rechercherDispoGrandPublic($communeId$bureauDistributeurId$lieuId$listeTranchesAge$atypiqueMatin$atypiqueSoir$handicap, [], false$listeIdASM$listeIdMAM);
  118.             if ($liste_assmats_non_participe != null) {
  119.                 shuffle($liste_assmats_non_participe);
  120.             }
  121.             $liste_assmats_prev $em->getRepository(AssistantMaternel::class)
  122.                 ->rechercherDispoPrevGrandPublic($communeId$bureauDistributeurId$lieuId$listeTranchesAge$dateDebutAccueil$atypiqueMatin$atypiqueSoir$handicapfalse$listeIdASM$listeIdMAM);
  123.             if ($liste_assmats_prev != null) {
  124.                 shuffle($liste_assmats_prev);
  125.             }
  126.         }
  127.         return $this->render('grand_public/recherche/_recherche_dispo_listeid.html.twig', array(
  128.             'form_recherche' => $form_recherche->createView(),
  129.             'liste_assmats' => $liste_assmats,
  130.             'liste_assmats_non_participe' => $liste_assmats_non_participe,
  131.             'liste_assmats_prev' => $liste_assmats_prev,
  132.             'active_bureau_distrib' => $active_bureau_distrib,
  133.             'active_coche_nuit' => $active_coche_nuit,
  134.             'active_atypique' => $active_atypique,
  135.             'active_handicap' => $active_handicap,
  136.             'lieu_accueil' => $lieuAccueilCherche,
  137.             'planning_dispo' => $planningDispo,
  138.             'liste_jours' => $listeJours,
  139.             'liste_periodes' => $listePeriodes,
  140.             'liste_tranches' => $listeTranches,
  141.             'liste_disponibilite' => $listeDispos,
  142.             'listeIdASM' => $listeIdASM,
  143.             'listeIdMAM' => $listeIdMAM,
  144.         ));
  145.     }
  146.     /**
  147.      * Formulaire de recherche listes grand public (basé sur commune)
  148.      * 
  149.      * @Route("/grandpublic/recherche", name="gp_recherche_dispo_assmat")
  150.      */
  151.     public function rechercheDispoListe(Request $request)
  152.     {
  153.         $urlLogoEntete $this->parametrageService->getParametre(EnumParametre::URL_LOGO_ENTETE_GRANDPUBLIC)->getValeur();
  154.         $em $this->getDoctrine()->getManager();
  155.         $listePeriodes $em->getRepository(Periode::class)->findBy([self::EST_ACTIF => true], ['ordre' => 'ASC']);
  156.         $listeJours $em->getRepository(JourSemaine::class)->findBy([self::EST_ACTIF => true], ['id' => 'ASC']);
  157.         $listeTranches $em->getRepository(TrancheHoraire::class)->findBy([self::EST_ACTIF => true], ['id' => 'ASC']);
  158.         $listeDispos $em->getRepository(FrequenceDispo::class)->findBy(array('est_actif' => true));
  159.         /* Initialisation */
  160.         $active_bureau_distrib $this->parametrageService->getParametre(EnumParametre::ACTIVE_BUREAU_DISTRIBUTEUR)->getValeur();
  161.         $active_coche_nuit $this->parametrageService->getParametre(EnumParametre::ACTIVE_GERE_ACCUEIL_NUIT)->getValeur();
  162.         $active_atypique $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_ATYPIQUE)->getValeur();
  163.         $active_handicap $this->parametrageService->getParametre(EnumParametre::ACTIVE_OA_HANDICAP)->getValeur();
  164.         $planningDispo $this->planningDispoService->creerPlanningViergeRecherche();
  165.         $form_recherche $this->createForm(RechercheDispoType::class, null, [
  166.             'planning_dispo' => $planningDispo,
  167.             'active_bureau_distrib' => $active_bureau_distrib,
  168.             'active_atypique' => $active_atypique,
  169.             'active_handicap' => $active_handicap
  170.         ]);
  171.         $liste_assmats null;
  172.         $liste_assmats_non_participe null;
  173.         $liste_assmats_prev null;
  174.         $zoneCherchee 'commune';
  175.         $lieuAccueilCherche 'tous';
  176.         $bureauDistributeurId 0;
  177.         $atypiqueMatin null;
  178.         $atypiqueSoir null;
  179.         $handicap null;
  180.         /* Déclenchement de la recherche */
  181.         $form_recherche->handleRequest($request);
  182.         if ($form_recherche->isSubmitted() && $form_recherche->isValid()) {
  183.             $commune $form_recherche->get('commune')->getData();
  184.             $communeId = !\is_null($commune) ? $commune->getId() : 0;
  185.             if ($active_bureau_distrib == 'true') {
  186.                 $bureauDistributeur $form_recherche->get('bureau_distributeur')->getData();
  187.                 $bureauDistributeurId $zoneCherchee === 'bureau' && !\is_null($bureauDistributeur) ? $bureauDistributeur->getId() : 0;
  188.             }
  189.             $lieuAccueilCherche $form_recherche->get('lieu_accueil')->getData();
  190.             $lieuId $this->traduitLieuAccueilToEnum($lieuAccueilCherche);
  191.             $dateNaissanceEnfant $form_recherche->get('date_naissance_enf')->getData();
  192.             $dateDebutAccueil $form_recherche->get('date_debut_accueil')->getData();
  193.             if ($dateNaissanceEnfant === null) {
  194.                 $dateNaissanceEnfant $dateDebutAccueil;
  195.                 if ($dateNaissanceEnfant === null) {
  196.                     $dateNaissanceEnfant = new \DateTime();
  197.                 }
  198.             }
  199.             $listeTranchesAge $this->trancheAgeService->getListTrancheAgeForDateNaissance($dateNaissanceEnfant);
  200.             $listeTranchesAgePrev $this->trancheAgeService->getListTrancheAgeForDateNaissance($dateNaissanceEnfant$dateDebutAccueil);
  201.             if ($active_atypique == 'true') {
  202.                 $atypiqueMatin $form_recherche->get('accepte_atypique_matin')->getData();
  203.                 $atypiqueSoir $form_recherche->get('accepte_atypique_soir')->getData();
  204.             }
  205.             if ($active_handicap == 'true') {
  206.                 $handicap $form_recherche->get('accepte_handicap')->getData();
  207.             }
  208.             if ($request->isMethod('POST')) {
  209.                 $postedForm $request->request->get($form_recherche->getName());
  210.                 $planningDispo $postedForm['planning_dispo'];
  211.             }
  212.             $liste_assmats $em->getRepository(AssistantMaternel::class)
  213.                 ->rechercherDispoGrandPublic($communeId$bureauDistributeurId$lieuId$listeTranchesAge$atypiqueMatin$atypiqueSoir$handicap$planningDispotrue);
  214.             if ($liste_assmats != null) {
  215.                 shuffle($liste_assmats);
  216.             }
  217.             $liste_assmats_non_participe $em->getRepository(AssistantMaternel::class)
  218.                 ->rechercherDispoGrandPublic($communeId$bureauDistributeurId$lieuId$listeTranchesAge$atypiqueMatin$atypiqueSoir$handicap, [], false);
  219.             if ($liste_assmats_non_participe != null) {
  220.                 shuffle($liste_assmats_non_participe);
  221.             }
  222.             $liste_assmats_prev $em->getRepository(AssistantMaternel::class)
  223.                 ->rechercherDispoPrevGrandPublic($communeId$bureauDistributeurId$lieuId$listeTranchesAgePrev$dateDebutAccueil$atypiqueMatin$atypiqueSoir$handicaptrue);
  224.             if ($liste_assmats_prev != null) {
  225.                 //on enlève des dispos prev les assmats 'disponibles dès à présent'
  226.                 $liste_assmats_prev array_diff($liste_assmats_prev$liste_assmats);
  227.                 shuffle($liste_assmats_prev);
  228.             }
  229.         }
  230.         return $this->render('grand_public/recherche/recherche_dispo_assmat.html.twig', array(
  231.             'form_recherche' => $form_recherche->createView(),
  232.             'liste_assmats' => $liste_assmats,
  233.             'liste_assmats_non_participe' => $liste_assmats_non_participe,
  234.             'liste_assmats_prev' => $liste_assmats_prev,
  235.             'active_bureau_distrib' => $active_bureau_distrib,
  236.             'active_coche_nuit' => $active_coche_nuit,
  237.             'active_atypique' => $active_atypique,
  238.             'active_handicap' => $active_handicap,
  239.             'zone' => $zoneCherchee,
  240.             'lieu_accueil' => $lieuAccueilCherche,
  241.             'planning_dispo' => $planningDispo,
  242.             'liste_jours' => $listeJours,
  243.             'liste_periodes' => $listePeriodes,
  244.             'liste_tranches' => $listeTranches,
  245.             'liste_disponibilite' => $listeDispos,
  246.             'urlLogoEntete' => $urlLogoEntete
  247.         ));
  248.     }
  249.     /// méthodes privées
  250.     /**
  251.      * traduit la valeur du formulaire de recherche d'assmat en valeur générique basée sur les valeurs de l'EnumLieuAccueil
  252.      */
  253.     private function traduitLieuAccueilToEnum($libelleLieuAccueilCherche)
  254.     {
  255.         $lieuAccueilId 0;
  256.         switch ($libelleLieuAccueilCherche) {
  257.             case 'double':
  258.                 $lieuAccueilId EnumLieuAccueil::DOMICILE $lieuAccueilId EnumLieuAccueil::MAM;
  259.                 break;
  260.             case 'mam':
  261.                 $lieuAccueilId EnumLieuAccueil::MAM;
  262.                 break;
  263.             case 'domicile':
  264.                 $lieuAccueilId EnumLieuAccueil::DOMICILE;
  265.                 break;
  266.             case 'tous':
  267.             default:
  268.                 break;
  269.         }
  270.         return $lieuAccueilId;
  271.     }
  272. }