src/Controller/admin/StatisticsController.php line 212

Open in your IDE?
  1. <?php
  2. namespace App\Controller\admin;
  3. use App\Entity\Company;
  4. use App\Entity\Formation;
  5. use App\Entity\Log;
  6. use App\Entity\User;
  7. use App\Security\Voter\CompanyVoter;;
  8. use App\Service\datatable\Builder;
  9. use App\Service\statistics\StatisticsService;
  10. use Doctrine\Persistence\ManagerRegistry;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class StatisticsController extends AbstractController
  17. {
  18.     private ManagerRegistry $managerRegistry;
  19.     public function __construct(ManagerRegistry $managerRegistry)
  20.     {
  21.         $this->managerRegistry $managerRegistry;
  22.     }
  23.     /**
  24.      * @param Request $request
  25.      * @Security("is_granted('ROLE_RH')")
  26.      * @Route("/api/subscription/stat", name="subscription-stat", methods={"POST"})
  27.      */
  28.     public function statContent(Request $requestManagerRegistry $managerRegistry){
  29.         $companyID $request->request->get('ID');
  30.         $company $managerRegistry->getRepository(Company::class)->find($companyID);
  31.         /* @see CompanyVoter */
  32.         $this->denyAccessUnlessGranted(CompanyVoter::COMPANY_SHOW,$company);
  33.         if(!$company) {
  34.             return new JsonResponse("ko",400);
  35.         }
  36.         $content $this->renderView('pages/admin/company/blocks/stat.html.twig',[
  37.             "company"=>$company,
  38.             'context'=> 'tools'
  39.         ]);
  40.         $actions $this->renderView('pages/admin/company/blocks/tab.actions.html.twig',[
  41.             'context'=> 'stat',
  42.             'company' => $company
  43.         ]);
  44.         return new JsonResponse(["content"=>$content,"actions"=>$actions]);
  45.     }
  46.     /**
  47.      * @param Request $request
  48.      * @Security("is_granted('ROLE_RH')")
  49.      * @Route("/api/subscription/stat/data", name="subscription-stat-data", methods={"POST"},options={"expose":true})
  50.      */
  51.     public function statData(Request $requestManagerRegistry $managerRegistry,StatisticsService $statisticsService){
  52.         $companyID $request->request->get('companyID');
  53.         $company $managerRegistry->getRepository(Company::class)->find($companyID);
  54.         /* @see CompanyVoter */
  55.         $this->denyAccessUnlessGranted(CompanyVoter::COMPANY_SHOW,$company);
  56.         if(!$company) {
  57.             return new JsonResponse("ko",400);
  58.         }
  59.         //Range date
  60.         $start $request->query->get('start');
  61.         $end $request->query->get('end');
  62.         $data $statisticsService->getData($start,$end,$company);
  63.         return new JsonResponse($data);
  64.     }
  65.     /**
  66.      * Alimente la datatable
  67.      * @param Request $request
  68.      * @Security("is_granted('ROLE_RH') or is_granted('ROLE_ADMIN')")
  69.      * @Route("/api/dt/stat/login/{company}", name="dt-stat-login", methods={"GET"},options={"expose":true})
  70.      * @return JsonResponse
  71.      */
  72.     public function dtStatLogin(Request $requestCompany $companyBuilder $dtBuilder)
  73.     {
  74.         $start $request->query->get('start_date');
  75.         $end $request->query->get('end_date');
  76.         $em $this->managerRegistry->getManager();
  77.         $params $request->query->all();
  78.         $query $em->getRepository(Log::class)->getQueryForLoginEvent($start,$end,$company);
  79.         $dataTables $dtBuilder
  80.             ->withColumnAliases([
  81. //                'id' => 'u.id',
  82. //                'department' => 'd.name',
  83.                 'lastname' => 'u.lastname',
  84.                 'firstname' => 'u.firstname',
  85.                 'email' => 'u.email',
  86.                 'loginAt' => 'l.createdAt',
  87.             ])
  88.             ->withIndexColumn('l.id')
  89.             ->withQueryBuilder($query)
  90.             ->withRequestParams($params);
  91.         $data $dataTables->getResponse();
  92.         return new JsonResponse($data);
  93.     }
  94.     /**
  95.      * Alimente la datatable
  96.      * @param Request $request
  97.      * @Security("is_granted('ROLE_RH') or is_granted('ROLE_ADMIN')")
  98.      * @Route("/api/dt/stat/video/{company}", name="dt-stat-video", methods={"GET"},options={"expose":true})
  99.      * @return JsonResponse
  100.      */
  101.     public function dtStatVideo(Request $requestCompany $companyBuilder $dtBuilder)
  102.     {
  103.         $start $request->query->get('start_date');
  104.         $end $request->query->get('end_date');
  105.         $em $this->managerRegistry->getManager();
  106.         $params $request->query->all();
  107.         $query $em->getRepository(Log::class)->getQueryForVideoEvent($start,$end,$company);
  108.         $dataTables $dtBuilder
  109.             ->withColumnAliases([
  110. //                'id' => 'u.id',
  111. //                'department' => 'd.name',
  112.                 'lastname' => 'u.lastname',
  113.                 'firstname' => 'u.firstname',
  114.                 'email' => 'u.email',
  115.                 'viewedAt' => 'l.createdAt',
  116.                 'sources' =>'l.sources'
  117.             ])
  118.             ->withIndexColumn('l.id')
  119.             ->withQueryBuilder($query)
  120.             ->withRequestParams($params);
  121.         $data $dataTables->getResponse();
  122.         $isAdmin $this->isGranted('ROLE_ADMIN');
  123.         foreach ($data['data'] as &$d){
  124.             $sources json_decode($d['sources'],true);
  125.             $cat $sources['feedData']['CAT'];
  126.             //Set visibility video
  127.             $isVisible =  isset($sources['visibility']) && $sources['visibility']['visible'] === true;
  128.             $d['CAT'] = $this->getCAT($cat);
  129.             $d['title_video'] = $isAdmin ||  (!$isAdmin && $isVisible)  ? $sources['title'] : 'Le titre de la vidéo n\'est pas disponible';
  130.             $d['title_playlist'] = $isAdmin ||  (!$isAdmin && $isVisible)   ? $sources['feedData']['title'] : 'Le titre de la playlist n\'est pas disponible';
  131.         }
  132.         return new JsonResponse($data);
  133.     }
  134.     private function getCAT($value)
  135.     {
  136.         $cat="";
  137.         switch (trim($value)){
  138.             case 'RENFO':
  139.                 $cat =  'Renforcement';
  140.                 break;
  141.             case 'ERGO':
  142.                 $cat =  'Ergonomie';
  143.                 break;
  144.             case 'ETIR':
  145.                 $cat =  'Etirement';
  146.                 break;
  147.             case 'CONS':
  148.                 $cat =  'Conseils';
  149.                 break;
  150.             case 'BIOMECA':
  151.                 $cat =  'Biomecanique';
  152.                 break;
  153.             case 'SECOURS':
  154.                 $cat =  'Premiers secours';
  155.                 break;
  156.             default:
  157.                 return '/';
  158.         }
  159.         return $cat;
  160.     }
  161.     /**
  162.      * Alimente la datatable
  163.      * @param Request $request
  164.      * @Security("is_granted('ROLE_RH') or is_granted('ROLE_ADMIN')")
  165.      * @Route("/api/dt/stat/formation/{company}", name="dt-stat-formation", methods={"GET"},options={"expose":true})
  166.      * @return JsonResponse
  167.      */
  168.     public function dtStatFormation(Request $requestCompany $companyBuilder $dtBuilder)
  169.     {
  170.         $start $request->query->get('start_date');
  171.         $end $request->query->get('end_date');
  172.         $em $this->managerRegistry->getManager();
  173.         $params $request->query->all();
  174.         $query $em->getRepository(Log::class)->getQueryForFormationEvent($start,$end,$company);
  175.         $dataTables $dtBuilder
  176.             ->withColumnAliases([
  177. //                'id' => 'u.id',
  178. //                'department' => 'd.name',
  179.                 'lastname' => 'u.lastname',
  180.                 'firstname' => 'u.firstname',
  181.                 'email' => 'u.email',
  182.                 'viewedAt' => 'l.updatedAt',
  183.             ])
  184.             ->withIndexColumn('l.id')
  185.             ->withQueryBuilder($query)
  186.             ->withRequestParams($params);
  187.         $data $dataTables->getResponse();
  188.         foreach ($data['data'] as &$d){
  189.             $f $this->managerRegistry->getRepository(Formation::class)->find($d['formation']);
  190.             if ($f){
  191.                 $d['title'] = $f->getTitle();
  192.             }
  193.             else{
  194.                 $d['title'] = '/';
  195.             }
  196.         }
  197.         return new JsonResponse($data);
  198.     }
  199. }