src/Calendar/CalendarSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\Calendar;
  3. use App\Repository\LeaveMCRecordRepository;
  4. use App\Repository\LeaveRequestRepository;
  5. use App\Repository\LeaveBankHolidayRepository;
  6. use CalendarBundle\CalendarEvents;
  7. use CalendarBundle\Entity\Event;
  8. use CalendarBundle\Event\CalendarEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  11. class CalendarSubscriber implements EventSubscriberInterface
  12. {
  13.   private $leaveMCRecordRepository;
  14.   private $leaveRequestRepository;
  15.   private $leaveBankHolidayRepository;
  16.   private $router;
  17.   public function __construct(
  18.     LeaveMCRecordRepository $leaveMCRecordRepository,
  19.     LeaveRequestRepository $leaveRequestRepository,
  20.     LeaveBankHolidayRepository $leaveBankHolidayRepository,
  21.     UrlGeneratorInterface $router
  22.   ) {
  23.     $this->leaveMCRecordRepository $leaveMCRecordRepository;
  24.     $this->leaveRequestRepository $leaveRequestRepository;
  25.     $this->leaveBankHolidayRepository $leaveBankHolidayRepository;
  26.     $this->router $router;
  27.   }
  28.   public static function getSubscribedEvents(): array
  29.   {
  30.     return [
  31.       CalendarEvents::SET_DATA => 'onCalendarSetData',
  32.     ];
  33.   }
  34.   public function onCalendarSetData(CalendarEvent $calendar)
  35.   {
  36.     $start $calendar->getStart();
  37.     $end $calendar->getEnd();
  38.     $filters $calendar->getFilters();
  39.     switch ($filters['calendar-id']) {
  40.       case 'mt-calendar':
  41.         $this->fillMtCalendar($calendar$start$end$filters);
  42.         break;
  43.       case 'user-calendar':
  44.         $this->fillUserCalendar($calendar$start$end$filters);
  45.         break;
  46.       case 'admin-calendar':
  47.         $this->fillAdminCalendar($calendar$start$end$filters);
  48.         break;
  49.     }
  50.   }
  51.   public function fillMtCalendar(CalendarEvent $calendar\DateTimeInterface $start\DateTimeInterface $end, array $filters)
  52.   {
  53.     $mcs $this->leaveRequestRepository
  54.       ->createQueryBuilder('l')
  55.       ->where('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  56.       ->setParameter('start'$start->format('Y-m-d H:i:s'))
  57.       ->setParameter('end'$end->format('Y-m-d H:i:s'))
  58.       ->getQuery()
  59.       ->getResult();
  60.     //->andWhere('l.isApproved = 1')
  61.     $requests $this->leaveRequestRepository
  62.       ->createQueryBuilder('l')
  63.       ->where('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  64.       ->andWhere('l.isApproved = 1')
  65.       ->setParameter('start'$start->format('Y-m-d H:i:s'))
  66.       ->setParameter('end'$end->format('Y-m-d H:i:s'))
  67.       ->getQuery()
  68.       ->getResult();
  69.     $otherLeaves $this->leaveRequestRepository
  70.       ->createQueryBuilder('l')
  71.       ->where('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  72.       ->andWhere('l.isApproved = 1')
  73.       ->setParameter('start'$start->format('Y-m-d H:i:s'))
  74.       ->setParameter('end'$end->format('Y-m-d H:i:s'))
  75.       ->getQuery()
  76.       ->getResult();
  77.     $holidays $this->leaveBankHolidayRepository
  78.       ->createQueryBuilder('l')
  79.       ->where('l.date BETWEEN :start and :end')
  80.       ->setParameter('start'$start->format('Y-m-d H:i:s'))
  81.       ->setParameter('end'$end->format('Y-m-d H:i:s'))
  82.       ->getQuery()
  83.       ->getResult();
  84.     foreach ($mcs as $mc) {
  85.       if ($mc->getLeaveType()->getAttributes()['label'] == 'Sick') {
  86.         $title $mc->getUser()->getOffice()->getCountry() . ' - MC - ' $mc->getUser()->getPersonalInfo()->getFullName();
  87.         $start $mc->getStartDate();
  88.         $start $start->format('Y-m-d');
  89.         $isHalfStart $mc->getIsHalfStart();
  90.         $end $mc->getEndDate();
  91.         $end $end->format('Y-m-d');
  92.         $isHalfEnd $mc->getIsHalfEnd();
  93.         if ($isHalfStart){
  94.           $start date('Y-m-d 13:00:00',strtotime($start));
  95.           $end date('Y-m-d 18:00:00',strtotime($end));
  96.         }
  97.         if($isHalfEnd){
  98.           $end date('Y-m-d 13:00:00',strtotime($end));
  99.           $start date('Y-m-d 09:00:00',strtotime($start));
  100.         }
  101.         $mcEvent = new Event(
  102.           $title,
  103.           new \DateTime($start),
  104.           new \DateTime($end)
  105.         );
  106.         $mcEvent->setOptions([
  107.           'backgroundColor' => '#616161',
  108.           'borderColor' => '#616161',
  109.           'allDay' => ($isHalfStart == false $isHalfEnd == false) ? true false,
  110.         ]);
  111.         $calendar->addEvent($mcEvent);
  112.       }
  113.     }
  114.     foreach ($otherLeaves as $otherLeave) {
  115.       if ($otherLeave->getLeaveType()->getAttributes()['label'] != 'Sick' && $otherLeave->getLeaveType()->getAttributes()['label'] != 'Annual') {
  116.         $title $otherLeave->getUser()->getOffice()->getCountry() . ' - ' ucwords($otherLeave->getLeaveType()->getLeaveName()) . ' - ' $otherLeave->getUser()->getPersonalInfo()->getFullName();
  117.         $start $otherLeave->getStartDate();
  118.         $start $start->format('Y-m-d');
  119.         $isHalfStart $otherLeave->getIsHalfStart();
  120.         $end $otherLeave->getEndDate();
  121.         $end $end->format('Y-m-d');
  122.         $isHalfEnd $otherLeave->getIsHalfEnd();
  123.         if ($isHalfStart){
  124.           $start date('Y-m-d 13:00:00',strtotime($start));
  125.           $end date('Y-m-d 18:00:00',strtotime($end));
  126.         }
  127.         if($isHalfEnd){
  128.           $end date('Y-m-d 13:00:00',strtotime($end));
  129.           $start date('Y-m-d 09:00:00',strtotime($start));
  130.         }
  131.         $otherLeaveEvent = new Event(
  132.           $title,
  133.           new \DateTime($start),
  134.           new \DateTime($end)
  135.         );
  136.         $otherLeaveEvent->setOptions([
  137.           'backgroundColor' => '#8e24aa',
  138.           'borderColor' => '#8e24aa',
  139.           'allDay' => ($isHalfStart == false $isHalfEnd == false) ? true false,
  140.         ]);
  141.         $calendar->addEvent($otherLeaveEvent);
  142.       }
  143.     }
  144.     foreach ($holidays as $holiday) {
  145.       $title $holiday->getLocation() . ' - ' $holiday->getDescription();
  146.       $start $holiday->getDate();
  147.       $end is_null($holiday->getEndDate()) ? $holiday->getDate() : $holiday->getEndDate();
  148.       $holidayEvent = new Event(
  149.         $title,
  150.         $start,
  151.         $end,
  152.       );
  153.       $holidayEvent->setOptions([
  154.         'backgroundColor' => '#f5511d',
  155.         'borderColor' => '#f5511d',
  156.         'allDay' => true
  157.       ]);
  158.       $calendar->addEvent($holidayEvent);
  159.     }
  160.     foreach ($requests as $request) {
  161.       if ($request->getLeaveType()->getAttributes()['label'] == 'Annual') {
  162.         $requestEvent = new Event(
  163.           $request->getUser()->getOffice()->getCountry() . ' - Annual - ' $request->getUser()->getPersonalInfo()->getFullName(),
  164.           $request->getStartDate(),
  165.           $request->getEndDate()->modify('+1 day')
  166.         );
  167.         $requestEvent->setOptions([
  168.           'backgroundColor' => '#7986cb',
  169.           'borderColor' => '#7986cb',
  170.         ]);
  171.         $calendar->addEvent($requestEvent);
  172.       }
  173.     }
  174.   }
  175.   public function fillUserCalendar(CalendarEvent $calendar\DateTimeInterface $start\DateTimeInterface $end, array $filters)
  176.   {
  177.   }
  178.   public function fillAdminCalendar(CalendarEvent $calendar\DateTimeInterface $start\DateTimeInterface $end, array $filters)
  179.   {
  180.     $mcs $this->leaveMCRecordRepository
  181.       ->createQueryBuilder('l')
  182.       ->where('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  183.       ->andWhere('l.isJustified = 1')
  184.       ->setParameter('start'$start->format('Y-m-d H:i:s'))
  185.       ->setParameter('end'$end->format('Y-m-d H:i:s'))
  186.       ->getQuery()
  187.       ->getResult();
  188.     $requests $this->leaveRequestRepository
  189.       ->createQueryBuilder('l')
  190.       ->where('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  191.       ->andWhere('l.isApproved = 1')
  192.       ->setParameter('start'$start->format('Y-m-d H:i:s'))
  193.       ->setParameter('end'$end->format('Y-m-d H:i:s'))
  194.       ->getQuery()
  195.       ->getResult();
  196.     $holidays $this->leaveBankHolidayRepository
  197.       ->createQueryBuilder('l')
  198.       ->where('l.date BETWEEN :start and :end')
  199.       ->setParameter('start'$start->format('Y-m-d H:i:s'))
  200.       ->setParameter('end'$end->format('Y-m-d H:i:s'))
  201.       ->getQuery()
  202.       ->getResult();
  203.     foreach ($mcs as $mc) {
  204.       $mcEvent = new Event(
  205.         $mc->getUser()->getOffice()->getCountry() . ' - mc - ' $mc->getUser()->getPersonalInfo()->getFullName(),
  206.         $mc->getStartDate(),
  207.         $mc->getEndDate()->modify('+1 day')
  208.       );
  209.       $mcEvent->setOptions([
  210.         'backgroundColor' => 'red',
  211.         'borderColor' => 'red',
  212.       ]);
  213.       $calendar->addEvent($mcEvent);
  214.     }
  215.     foreach ($holidays as $holiday) {
  216.       $holidayEvent = new Event(
  217.         $holiday->getLocation() . ' - ' $holiday->getDescription(),
  218.         $holiday->getDate(),
  219.       );
  220.       $holidayEvent->setOptions([
  221.         'backgroundColor' => 'blue',
  222.         'borderColor' => 'blue',
  223.       ]);
  224.       $calendar->addEvent($holidayEvent);
  225.     }
  226.     foreach ($requests as $request) {
  227.       $requestEvent = new Event(
  228.         $request->getUser()->getOffice()->getCountry() . ' - leave - ' $request->getUser()->getPersonalInfo()->getFullName(),
  229.         $request->getStartDate(),
  230.         $request->getEndDate()->modify('+1 day')
  231.       );
  232.       $requestEvent->setOptions([
  233.         'backgroundColor' => 'green',
  234.         'borderColor' => 'green',
  235.       ]);
  236.       $calendar->addEvent($requestEvent);
  237.     }
  238.   }
  239. }