src/Controller/HomeController.php line 38

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