src/Controller/EmployeeLogHourController.php line 74

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Employee;
  4. use App\Entity\EmployeeHourLog;
  5. use App\Enum\EmployeeHourLog\InOut;
  6. use App\Repository\EmployeeHourLogRepository;
  7. use App\Service\EmployeeService;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Dompdf\Dompdf;
  10. use Dompdf\Options;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. /**
  18.  * @Route("/employee_log_hour")
  19.  */
  20. class EmployeeLogHourController extends AbstractController
  21. {
  22.     /** @var ManagerRegistry $entityManager */
  23.     private $entityManager;
  24.     /** @var EmployeeService $employeeService */
  25.     private $employeeService;
  26.     /** @var EmployeeHourLogRepository $employeeHourLogRepository */
  27.     private $employeeHourLogRepository;
  28.     public function __construct(
  29.         ManagerRegistry           $entityManager,
  30.         EmployeeService           $employeeService,
  31.         EmployeeHourLogRepository $employeeHourLogRepository,
  32.     )
  33.     {
  34.         $this->entityManager $entityManager->getManager();
  35.         $this->employeeService $employeeService;
  36.         $this->employeeHourLogRepository $employeeHourLogRepository;
  37.     }
  38.     /**
  39.      * @Route("/", name="employee_log_hour_index", methods={"GET"})
  40.      * @IsGranted("EMPLOYEE_LOG_HOUR_INDEX")
  41.      */
  42.     public function employee()
  43.     {
  44.     }
  45.     /**
  46.      * @Route("/calendar", name="employee_log_hour_calendar", methods={"GET"})
  47.      * @IsGranted("EMPLOYEE_LOG_HOUR_CALENDAR", subject="", message="Permission requise")
  48.      */
  49.     public function calendar()
  50.     {
  51.         return $this->render(
  52.             'employee_log_hour/calendar.html.twig',
  53.             [
  54.                 'title' => 'Calendar',
  55.                 'menu' => 'employee_log_hour_calendar',
  56.                 'employees' => $this->employeeService->getActiveAndHourlyEmployees(),
  57.                 'employees_log_hour' => $this->employeeService->getEmployeesHourLog()
  58.             ]
  59.         );
  60.     }
  61.     /**
  62.      * @Route("/log", name="employee_log_hour_new", methods={"GET"})
  63.      * @IsGranted("EMPLOYEE_LOG_HOUR_NEW", subject="", message="Permission requise: EMPLOYEE_LOG_HOUR_NEW")
  64.      */
  65.     public function log(Request $request): Response
  66.     {
  67.         $date $request->get('date');
  68.         $logDate $date ?? (new \DateTime())->format('d/m/Y');
  69.         return $this->render(
  70.             'employee_log_hour/log.html.twig',
  71.             [
  72.                 'title' => 'Pointages',
  73.                 'employees' => $this->employeeService->getActiveAndHourlyEmployeesWithLog(false$logDate),
  74.                 'date' => $logDate,
  75.                 'menu' => 'employee_log_hour_new',
  76.             ]
  77.         );
  78.     }
  79.     /**
  80.      * @Route("/new", name="employee_log_hour_add", methods={"GET","POST"})
  81.      * @IsGranted("EMPLOYEE_LOG_HOUR_NEW", subject="", message="Permission requise")
  82.      */
  83.     public function addLog(Request $request): JsonResponse
  84.     {
  85.         $employeeId = (int)$request->get('employeeId');
  86.         $logDate = (string)$request->get('logDate');
  87.         $logTime = (string)$request->get('logTime');
  88.         $inOut = (int)$request->get('inOut');
  89.         $employee $this->employeeService->findOneBy(['id' => $employeeId]);
  90.         if (!$employee instanceof Employee) {
  91.             return new JsonResponse(
  92.                 [
  93.                     'message' => 'Aucun employée trouvé',
  94.                     'status' => false,
  95.                     'history' => []
  96.                 ]
  97.             );
  98.         }
  99.         $logDateTime \DateTime::createFromFormat('d/m/Y H:i'sprintf('%s %s'$logDate$logTime));
  100.         $employeeLogData $this->employeeService->getActiveAndHourlyEmployeesWithLog($employee$logDateTime->format('Y-m-d'));
  101.         $checkIfExist $this->employeeHourLogRepository->findBy(
  102.             [
  103.                 'employee' => $employee,
  104.                 'date' => $logDateTime
  105.             ]
  106.         );
  107.         if ($checkIfExist) {
  108.             return new JsonResponse(
  109.                 [
  110.                     'message' => 'Cet enregistrement existe déja',
  111.                     'status' => false,
  112.                     'historyHtml' => $employeeLogData[0]['historyHtml']
  113.                 ]
  114.             );
  115.         }
  116.         $lastLog $this->employeeHourLogRepository->findLastLog($employee$logDateTime);
  117.         if (!empty($lastLog)) {
  118.             $lastLog $lastLog[0];
  119.             /** @var EmployeeHourLog $lastLog */
  120.             if ($inOut === $lastLog->getInOut()->value) {
  121.                 return new JsonResponse(
  122.                     [
  123.                         'message' => 'L\'employée est déja en état : ' InOut::from($inOut)->title(),
  124.                         'status' => false,
  125.                         'historyHtml' => $employeeLogData[0]['historyHtml']
  126.                     ]
  127.                 );
  128.             }
  129.             if ($logDateTime $lastLog->getDate()) {
  130.                 return new JsonResponse(
  131.                     [
  132.                         'message' => 'l\'enregistrement est inférieur au dernier enregistrement saisie : ' $lastLog->getDate()->format('H:i'),
  133.                         'status' => false,
  134.                         'historyHtml' => $employeeLogData[0]['historyHtml']
  135.                     ]
  136.                 );
  137.             }
  138.         }
  139.         $employeeLogHour = new EmployeeHourLog();
  140.         $employeeLogHour
  141.             ->setEmployee($employee)
  142.             ->setInOut(InOut::from($inOut))
  143.             ->setDate($logDateTime);
  144.         $this->entityManager->persist($employeeLogHour);
  145.         $this->entityManager->persist($employee);
  146.         $this->entityManager->flush();
  147.         $this->entityManager->refresh($employee);
  148.         return new JsonResponse(
  149.             [
  150.                 'message' => 'Enregistrement ajouté avec succés',
  151.                 'status' => true,
  152.                 'historyHtml' => $this->employeeService->htmlEmployeeHourLog($employee$logDateTime)
  153.             ]
  154.         );
  155.     }
  156.     /**
  157.      * @Route("/log_sheet", name="employee_log_sheet", methods={"GET","POST"})
  158.      * @IsGranted("EMPLOYEE_LOG_HOUR_PRINT", subject="", message="Permission requise")
  159.      */
  160.     public function print_prepare(
  161.         Request $request
  162.     )
  163.     {
  164.         $date $request->get('date');
  165.         $logDate $date ?? (new \DateTime())->format('d/m/Y');
  166.         $employees $this->employeeService->getActiveAndHourlyEmployeesWithLog(false$logDate);
  167.         $pdfOptions = new Options();
  168.         $pdfOptions->setDefaultFont('Arial');
  169.         $pdfOptions->setIsRemoteEnabled(true);
  170.         $pdfOptions->setIsHtml5ParserEnabled(true);
  171.         $pdfOptions->setDefaultPaperSize('A4');
  172.         $dompdf = new Dompdf($pdfOptions);
  173.         $logDate \DateTime::createFromFormat('d/m/Y'$logDate)->format('d-m-Y');
  174.         $html $this->renderView(
  175.             'employee_log_hour/sheet_pdf.html.twig',
  176.             [
  177.                 'title' => $fileName sprintf(
  178.                     '%s-%s.pdf',
  179.                     'Liste du pointage : ',
  180.                     $logDate
  181.                 ),
  182.                 'employees' => $employees,
  183.                 'logDate' => $logDate
  184.             ]
  185.         );
  186.         $dompdf->loadHtml($html);
  187.         $dompdf->setPaper('A4''portrait');
  188.         $dompdf->render();
  189.         $this->injectPageCount($dompdf);
  190.         $dompdf->stream(
  191.             $fileName,
  192.             [
  193.                 "Attachment" => false,
  194.             ]
  195.         );
  196.         return new Response(''200, [
  197.             'Content-Type' => 'application/pdf',
  198.         ]);
  199.     }
  200.     private function injectPageCount(Dompdf $dompdf)
  201.     {
  202.         $canvas $dompdf->getCanvas();
  203.         $pdf $canvas->get_cpdf();
  204.         foreach ($pdf->objects as &$o) {
  205.             if ($o['t'] === 'contents') {
  206.                 $o['c'] = str_replace('PG'$canvas->get_page_count(), $o['c']);
  207.             }
  208.         }
  209.     }
  210.     /**
  211.      * @Route("/absence_day", name="absence_day", methods={"GET"})
  212.      * @param Request $request
  213.      * @return Response
  214.      */
  215.     public function absence_day(Request $request): Response
  216.     {
  217.         $date $request->get('date');
  218.         $startDate $endDate $date ?? (new \DateTime())->format('d/m/Y');
  219.         $absenceList $this->employeeService->absenceInDate($startDate$endDate);
  220.         //group by position
  221.         $absenceListByDepartment = [];
  222.         foreach ($absenceList as $absentEmployee) {
  223.             /** @var Employee $absentEmployee */
  224.             $department $absentEmployee->getLastHistory()->getDepartment();
  225.             if (empty($absenceListByDepartment[$department->getId()])) {
  226.                 $absenceListByDepartment[$department->getId()] = [];
  227.                 $absenceListByDepartment[$department->getId()]['department'] = $department;
  228.             }
  229.             $absenceListByDepartment[$department->getId()]['absenceList'][$absentEmployee->getId()] = $absentEmployee;
  230.         }
  231.         asort($absenceListByDepartment);
  232.         return $this->render(
  233.             'employee_log_hour/absence.html.twig',
  234.             [
  235.                 'title' => 'Absence du : ' $startDate,
  236.                 'menu' => 'employee_log_hour_absence',
  237.                 'absenceListByDepartment' => $absenceListByDepartment,
  238.                 'count' => count($absenceList),
  239.             ]
  240.         );
  241.     }
  242.     /**
  243.      * @Route("/presence_day", name="presence_day", methods={"GET"})
  244.      * @param Request $request
  245.      * @return Response
  246.      */
  247.     public function presence_day(Request $request): Response
  248.     {
  249.         $date $request->get('date');
  250.         $startDate $endDate $date ?? (new \DateTime())->format('d/m/Y');
  251.         $presenceList $this->employeeService->presenceInDate($startDate$endDate);
  252.         //group by position
  253.         $presenceListByDepartment = [];
  254.         foreach ($presenceList as $presentEmployee) {
  255.             /** @var Employee $presentEmployee */
  256.             $department $presentEmployee->getLastHistory()->getDepartment();
  257.             if (empty($presenceListByDepartment[$department->getId()])) {
  258.                 $presenceListByDepartment[$department->getId()] = [];
  259.                 $presenceListByDepartment[$department->getId()]['department'] = $department;
  260.             }
  261.             $presenceListByDepartment[$department->getId()]['presenceList'][$presentEmployee->getId()] = $presentEmployee;
  262.         }
  263.         asort($presenceListByDepartment);
  264.         return $this->render(
  265.             'employee_log_hour/presence.html.twig',
  266.             [
  267.                 'title' => 'Présence du : ' $startDate,
  268.                 'menu' => 'employee_log_hour_presence',
  269.                 'presenceListByDepartment' => $presenceListByDepartment,
  270.                 'count' => count($presenceList),
  271.             ]
  272.         );
  273.     }
  274. }