src/Controller/HomeController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Entreprise;
  4. use App\Entity\Informationeps;
  5. use App\Form\InformationepsType;
  6. use App\Repository\CalendarEventRepository;
  7. use App\Repository\EntrepriseRepository;
  8. use App\Repository\FormationRepository;
  9. use App\Repository\InscritRepository;
  10. use App\Repository\SessionRepository;
  11. use App\Repository\SiteRepository;
  12. use App\Repository\StatusRepository;
  13. use Doctrine\ORM\EntityManager;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Knp\Component\Pager\PaginatorInterface;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. class HomeController extends AbstractController
  22. {
  23.     private $_inscritRepo;
  24.     private $_siteRepo;
  25.     private $_calendarRepo;
  26.     private $_statusRepo;
  27.     private $_formationRepo;
  28.     private $_entrepriseRepo;
  29.     protected $sitefilter;
  30.     protected $sessionsfilter;
  31.     private $_paginator;
  32.     public function __construct(InscritRepository $inscritRepository,SiteRepository $siteRepository,CalendarEventRepository $calendarEventRepositoryStatusRepository $statusRepositoryFormationRepository $formationRepositoryPaginatorInterface $paginatorEntrepriseRepository $entrepriseRepository){
  33.         $this->_inscritRepo $inscritRepository;
  34.         $this->_siteRepo $siteRepository;
  35.         $this->_calendarRepo $calendarEventRepository;
  36.         $this->_statusRepo $statusRepository;
  37.         $this->_formationRepo $formationRepository;
  38.         $this->_entrepriseRepo $entrepriseRepository;
  39.         $this->_paginator $paginator;
  40.     }
  41.     /**
  42.      * @Route("/", name="app_home")
  43.      */
  44.     public function home(){
  45.         return $this->redirectToRoute('app_login');
  46.     }
  47.     /**
  48.      * @Route("/admin/", name="app_home_admin")
  49.      */
  50.     public function index(SessionRepository $sessionRepositoryRequest $requestSessionInterface $session,EntityManagerInterface $entityManagerInterface): Response
  51.     {
  52.         //dd($request->get('entreprise'));
  53.         $site 0;
  54.         $sessionData = [];
  55.         $formations $this->_formationRepo->findAll();
  56.         if ($this->isGranted('ROLE_FORMATEUR')) {
  57.             return $this->redirectToRoute('app_session_index');
  58.         }
  59.         if ($this->isGranted('ROLE_ADMIN')) {
  60.             $user $this->getUser();
  61.             if ($user->getFirstconnexion() == false or $user->getFirstconnexion() == null) {
  62.                 $user->setFirstconnexion(true);
  63.                 $entityManagerInterface->persist($user);
  64.                 $entityManagerInterface->flush();
  65.                 return $this->redirectToRoute('app_onboarding');
  66.             }
  67.             $site $this->_siteRepo->findAll();
  68.             
  69.             for ($i=0$i count($site); $i++) { 
  70.               $sessionData[$site[$i]->getWording()] = [
  71.                 'encour'=> $sessionRepository->recap($site[$i]->getId(),2)[0],
  72.                 'planifie'=> $sessionRepository->recap($site[$i]->getId(),1)[0],
  73.                 'cloture'=> $sessionRepository->recap($site[$i]->getId(),3)[0],
  74.                 'annule'=> $sessionRepository->recap($site[$i]->getId(),4)[0],
  75.             ];//2 pour en cour     
  76.             }
  77.         }else {
  78.             $site $this->_siteRepo->findBy(["id"=>(string)$this->getUser()->getSite()->getId()]);
  79.             for ($i=0$i count($site); $i++) { 
  80.                 $sessionData[$site[$i]->getWording()] = [
  81.                     'encour'=> $sessionRepository->recap($site[$i]->getId(),2)[0],
  82.                     'planifie'=> $sessionRepository->recap($site[$i]->getId(),1)[0],
  83.                     'cloture'=> $sessionRepository->recap($site[$i]->getId(),3)[0],
  84.                     'annule'=> $sessionRepository->recap($site[$i]->getId(),4)[0],
  85.               ];//2 pour en cour     
  86.               }
  87.         }
  88.         //dd($sessionData);
  89.         $data = [];
  90.         $colorId 0;
  91.         $color = [
  92.             'rgba(210, 214, 222, 1)',
  93.             'rgb(255, 99, 132)',
  94.             'rgba(255, 206, 86, 0.5)',
  95.             'rgba(222, 114, 222, 1)',
  96.             'rgba(122, 114, 122, 1)',
  97.         ];
  98.         foreach ($site as $value) {
  99.             $t = ['site'=>$value->getWording(),'data'=>$this->_inscritRepo->findInscritSite($value->getId())];
  100.             array_push($data,$t);
  101.         }
  102.         $dataGraphe = [];
  103.         foreach ($site as $value) {
  104.             $dataInOrder[0]=0;
  105.             $dataInOrder[1]=0;
  106.             $dataInOrder[2]=0;
  107.             $dataInOrder[3]=0;
  108.             $dataInOrder[4]=0;
  109.             $dataInOrder[5]=0;
  110.             $dataInOrder[6]=0;
  111.             $dataInOrder[7]=0;
  112.             $dataInOrder[8]=0;
  113.             $dataInOrder[9]=0;
  114.             $dataInOrder[10]=0;
  115.             $dataInOrder[11]=0;
  116.             
  117.             $tt $this->_inscritRepo->findInscritSiteMonth($value->getId());
  118.             
  119.            for ($i=0$i 12$i++) { 
  120.                foreach ($tt as $value2) {
  121.                    if ($value2['month'] == $i 1) {
  122.                        $dataInOrder[$value2['month']] = $value2['valide'];
  123.                    }
  124.                }
  125.            }
  126.             //dd($dataGraphe);
  127.             $t = [
  128.                     'label'=>$value->getWording(),
  129.                     "backgroundColor" =>$color[$colorId],
  130.                     "borderColor" => $color[$colorId],
  131.                     "pointRadius"=> false,
  132.                     "pointColor "=> $color[$colorId],
  133.                     "pointStrokeColor"=> '#c1c7d1',
  134.                     "pointHighlightFill"=> '#fff',
  135.                     "pointHighlightStroke"=> 'rgba(220,220,220,1)',
  136.                     'data'=>$dataInOrder
  137.                 ];
  138.             array_push($dataGraphe,$t);
  139.             $colorId++;
  140.         }
  141.         $sourceFinancement $this->_inscritRepo->findInscritSourcefinancement();
  142.         //dd($sourceFinancement);
  143.         $task 0;
  144.         if ($this->isGranted('ROLE_ADMIN')) {
  145.             $task $this->_calendarRepo->getTodayEvent(2);
  146.         }else {
  147.             $task $this->_calendarRepo->getTodayEvent(2,$this->getUser()->getSite()->getId());
  148.         }
  149.         $nextsession 0;
  150.         if ($this->isGranted('ROLE_ADMIN')) {
  151.             $nextsession $sessionRepository->findNextWeekSessions();
  152.         }else {
  153.             $nextsession $sessionRepository->findNextWeekSessions($this->getUser()->getSite()->getId());
  154.         }
  155.         /*$json = [
  156.                 [
  157.                     "label" => 'Ivry-sur-Seine',
  158.                     "backgroundColor" =>'rgba(210, 214, 222, 1)',
  159.                     "borderColor" => 'rgba(210, 214, 222, 1)',
  160.                     "pointRadius"=> false,
  161.                     "pointColor "=> 'rgba(210, 214, 222, 1)',
  162.                     "pointStrokeColor"=> '#c1c7d1',
  163.                     "pointHighlightFill"=> '#fff',
  164.                     "pointHighlightStroke"=> 'rgba(220,220,220,1)',
  165.                     "data"=> [65, 59, 80, 81, 56, 55, 40]
  166.                 ]
  167.               
  168.         ];*/
  169.         //Données dashboard session et site
  170.         $sessionsbystatus = array();
  171.         if($request->getMethod() == "POST")
  172.         {
  173.             if($request->request->get('site') == null)
  174.             {
  175.                 if ($this->isGranted('ROLE_ADMIN')) {
  176.                     $user $this->getUser();
  177.                     $site $this->_siteRepo->findAll();
  178.                     
  179.                 }else {
  180.                     $site $this->_siteRepo->findBy(["id"=>(string)$this->getUser()->getSite()->getId()]);
  181.                 }
  182.             }
  183.             else
  184.                 $site $this->_siteRepo->findBy(["id"=>$request->request->get('site')]);
  185.             
  186.             //$filterby sera pour effectuer le filtre au niveau de getSessionsByStatus. si vide on passe sinon on fera des find by avec args en parametre
  187.             $filterby $this->getFilterArgs($request);
  188.             //dd($filterby);
  189.             if($filterby["statut_id"] != "all"){
  190.                 //si statut choisi filtrer selon le staut choisi
  191.                 $sessionsbystatus["planifie"] = $this->getSessionsByStatus($filterby["statut_id"] == "1" 0$sessionRepository$filterby$site);
  192.                 $sessionsbystatus["encours"] = $this->getSessionsByStatus($filterby["statut_id"] == "2" 0$sessionRepository$filterby$site);
  193.                 $sessionsbystatus["clotureannule"] = $this->getSessionsByStatus(($filterby["statut_id"] == "3" || $filterby["statut_id"] == "4") ? (int)$filterby["statut_id"] : 0$sessionRepository$filterby$site);
  194.             }
  195.             else{
  196.                 //si aucun statut renseigné filtrer normalement
  197.                 $sessionsbystatus["planifie"] = $this->getSessionsByStatus1$sessionRepository$filterby$site);
  198.                 $sessionsbystatus["encours"] = $this->getSessionsByStatus(2$sessionRepository$filterby$site);
  199.                 $sessionsbystatus["clotureannule"] = $this->getSessionsByStatus([3,4], $sessionRepository$filterby$site);
  200.             }
  201.             //cas ou le fitre viens de inscrit/liste (fichier inscription.html.twig)
  202.             //recupere les sessions, les compact et recherche les inscrits avec ces sessions
  203.             $previousurl $request->headers->get('referer');
  204.             if($previousurl != null && str_contains($previousurl'inscrit'))
  205.             {
  206.                 $sessions  array_merge($sessionsbystatus["planifie"]["sessions"], $sessionsbystatus["encours"]["sessions"], $sessionsbystatus["clotureannule"]["sessions"]);
  207.                 $session->set('sitefilter'$site);
  208.                 $session->set('sessionsfilter'$sessions);
  209.                 $session->set('entreprise'$filterby['entreprise']);
  210.                 
  211.                 return $this->indexFiltered($session$request);
  212.                 
  213.                 //return $this->redirectToRoute("app_inscrits_filtered"); 
  214.             }
  215.         }else{
  216.             $sessionsbystatus["planifie"] = $this->getSessionsByStatus(1$sessionRepository, [], $site);
  217.             $sessionsbystatus["encours"] = $this->getSessionsByStatus(2$sessionRepository, [], $site);
  218.             $sessionsbystatus["clotureannule"] = $this->getSessionsByStatus([3,4], $sessionRepository, [], $site);
  219.         }
  220.           
  221.         return $this->render('admin/welcome.html.twig', [
  222.             'menu' => 'Accueil',
  223.             'page' => 'Tableau de bord',
  224.             'menuLink' => 'dashboard',
  225.             'data' =>$data,
  226.             'dataGraphe' =>$dataGraphe,
  227.             'sourceFinancement'=>$sourceFinancement,
  228.             'todo'=> $task,
  229.             'nextsessions' => $nextsession,
  230.             'sessionsbystatus' => $sessionsbystatus,
  231.             'sessionData' => $sessionData,
  232.             'sites'=>$site,
  233.             'formations' => $formations,
  234.             'status' => $this->_statusRepo->findAll(),
  235.         ]);
  236.     }
  237.     /**
  238.      * @Route("/admin/calendrier", name="calendar")
  239.      */
  240.     public function calendar(): Response
  241.     {
  242.         return $this->render('admin/calendar.html.twig', [
  243.             'menu' => 'Accueil',
  244.             'page' => 'Calendrier',
  245.             'menuLink' => 'calendar'
  246.         ]);
  247.     }
  248.     
  249.     /**
  250.      * @param mixed $status
  251.      * @param SessionRepository $sessionRepository
  252.      * @param array|null $filterBy
  253.      * @param array $site
  254.      * 
  255.      * @return array
  256.      */
  257.     private function getSessionsByStatus($status$sessionRepository, ?array $filterby$site ):array
  258.     {
  259.         //recupere toutes les sessions selon le statut et definie pour chacune d'elle le nombre de valide, en attente et et le total
  260.         $sessions = array();
  261.         if(isset($filterby) && count($filterby) >= 4){
  262.             $filterby["status"] = (array)$status;
  263.             $sessions["sessions"] = $sessionRepository->findByWelcomeFilterBy($filterby);
  264.         } else{
  265.             $sessions["sessions"] = $sessionRepository->findBy(['status' => $status'site' => $site],['start_date'=>'asc']);
  266.         }
  267.         
  268.         $sessions["statuswording"] = $this->getSessionsByStatusWording($status);
  269.         foreach ($sessions["sessions"]  as $key => $session) {
  270.             $sessions["sessions"][$key] = array();
  271.             $sessions["sessions"][$key]["session"] = $session;
  272.             $sessions["sessions"][$key]["inscrits"] = $sessions["sessions"][$key]["enattentes"] = $sessions["sessions"][$key]["valides"] = 0;
  273.             
  274.             foreach ($session->getInscrits() as $inscrit) {
  275.                 $sessions["sessions"][$key]["inscrits"]++;  
  276.                  // $statutInscrit = $inscrit->getStatutInscrit();  
  277.             
  278.                     if($inscrit->getStatutInscrit()->getId() == 1){
  279.                         $sessions["sessions"][$key]["enattentes"]++;
  280.                     }
  281.                     else if($inscrit->getStatutInscrit()->getId() == 2){ 
  282.                         //dd($statutInscrit); 
  283.                         $sessions["sessions"][$key]["valides"]++;
  284.                     }
  285.               
  286.                 
  287.             }
  288.         }
  289.         return $sessions;
  290.     }
  291.     private function getSessionsByStatusWording($status)
  292.     {
  293.         if(is_array($status))
  294.         {
  295.             $wording "";
  296.             $i=1;
  297.             foreach ($status as $statu) {
  298.                 $wording .= $this->_statusRepo->find($statu) != null $this->_statusRepo->find($statu)->getWording() : "";
  299.                 if($i count($status))
  300.                     $wording .= " | ";
  301.                 $i++;
  302.             }
  303.         }
  304.         else
  305.             $wording $this->_statusRepo->find($status) != null $this->_statusRepo->find($status)->getWording() : "";
  306.         
  307.         return $wording;
  308.     }
  309.     /**
  310.      * Returns welwome.html.twig filter values to pass to repositories
  311.      *
  312.      * @param Request $request
  313.      * @return array
  314.      */
  315.     public function getFilterArgs(Request $request):array
  316.     {
  317.         $datedebut $request->request->get('datedebut') == "" '1970-01-01' date_create($request->request->get('datedebut'))->format("Y-m-d");
  318.         $datefin $request->request->get('datefin') == "" '2900-12-31' date_create($request->request->get('datefin'))->format("Y-m-d");
  319.         $site $request->request->get('site') == "" null $this->_siteRepo->find($request->request->get('site'));
  320.         $formation $request->request->get('formation') == "" null $this->_formationRepo->find($request->request->get('formation'));
  321.         $entreprise $request->request->get('entreprise') == ""null $this->_entrepriseRepo->find($request->request->get('entreprise'));
  322.         /*if($request->request->get('formation') == "")
  323.             $session = null;
  324.         else
  325.             $session = $this->_sessionRepo->find($request->request->get('session'));
  326.         */
  327.         $statut_id = ($request->request->get('statut_id') == "all" || $request->request->get('statut_id') == null) ? "all" $request->request->get('statut_id'); //if null or all findAll status or find($id)
  328.         
  329.         return [
  330.             "datedebut" => $datedebut,                
  331.             "datefin" => $datefin,                
  332.             "site" => $site,
  333.             "formation" => $formation,
  334.             "statut_id" => $statut_id,
  335.             "entreprise" => $entreprise,
  336.         ];
  337.     }
  338.     /**
  339.      * @Route("/admin/liste-inscrits/filtre", name="app_inscrits_filtered")
  340.      */
  341.     public function indexFiltered(SessionInterface $sessionRequest $request)
  342.     {      
  343.         $site $session->get('sitefilter'); $sessions $session->get('sessionsfilter');
  344.         $entreprise $session->get('entreprise');
  345.         
  346.         if($site == null || /*$sessions == null ||*/ !(is_array($sessions)))
  347.             return $this->redirectToRoute('app_inscrit_index');
  348.         // $session->remove('entreprise');
  349.         // $session->remove('sessionsfilter');
  350.         // $session->remove('sitefilter');
  351.         foreach ($sessions as $key => $session) {
  352.             $sessions[$key] = $session["session"];
  353.         }
  354.         $findByAttributes = ['session' => $sessions];
  355.         //add entreprise on filter if not null
  356.         if($entreprise instanceof Entreprise)
  357.         {
  358.             $findByAttributes['entreprise'] = $entreprise;
  359.         }
  360.         $inscrits $this->_paginator->paginate(
  361.             $this->_inscritRepo->findBy($findByAttributes),
  362.             $request->query->getInt('page'1),
  363.             40 
  364.         );
  365.         return $this->render('admin/inscrit/inscription.html.twig', [
  366.             'inscrits' => $inscrits,
  367.             'statuts' => $this->_statusRepo->findAll(),
  368.             'statutfiltered' => '',
  369.             'menu' => 'Inscription',
  370.             'page' => 'Liste inscription',
  371.             'menuLink' => 'inscription',
  372.             'path'=>'app_inscrit_index',
  373.             'sites'=>$site,
  374.             'entreprise'=> $this->_entrepriseRepo->findAll(),
  375.             'formations' => $this->_formationRepo->findAll(),
  376.             'status' => $this->_statusRepo->findAll(),
  377.         ]);
  378.     }
  379.     /**
  380.      * @Route("/admin/parametres", name="app_parameter")
  381.      */
  382.     public function parametre(SessionInterface $sessionRequest $request)
  383.     {    
  384.         return $this->render('admin/param.html.twig');
  385.     }
  386.     /**
  387.      * @Route("/admin/onboard", name="app_onboarding")
  388.      */
  389.     public function onboarding(SessionInterface $sessionRequest $request)
  390.     {    
  391.         return $this->render('admin/onboarding/index.html.twig');
  392.     }
  393. }