src/Repository/LeaveRequestTrashRepository.php line 187

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\LeaveRequestTrash;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\ORM\OptimisticLockException;
  6. use Doctrine\ORM\ORMException;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. /**
  9.  * @method LeaveRequestTrash|null find($id, $lockMode = null, $lockVersion = null)
  10.  * @method LeaveRequestTrash|null findOneBy(array $criteria, array $orderBy = null)
  11.  * @method LeaveRequestTrash[]    findAll()
  12.  * @method LeaveRequestTrash[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  13.  */
  14. class LeaveRequestTrashRepository extends ServiceEntityRepository
  15. {
  16.     public function __construct(ManagerRegistry $registry)
  17.     {
  18.         parent::__construct($registryLeaveRequestTrash::class);
  19.     }
  20.     /**
  21.      * @throws ORMException
  22.      * @throws OptimisticLockException
  23.      */
  24.     public function add(LeaveRequestTrash $entitybool $flush true): void
  25.     {
  26.         $this->_em->persist($entity);
  27.         if ($flush) {
  28.             $this->_em->flush();
  29.         }
  30.     }
  31.     /**
  32.      * @throws ORMException
  33.      * @throws OptimisticLockException
  34.      */
  35.     public function remove(LeaveRequestTrash $entitybool $flush true): void
  36.     {
  37.         $this->_em->remove($entity);
  38.         if ($flush) {
  39.             $this->_em->flush();
  40.         }
  41.     }
  42.     public function findByUser($u_id)
  43.     {
  44.         return $this->createQueryBuilder('l')
  45.             ->andWhere('l.user = :u')
  46.             ->setParameter('u'$u_id)
  47.             ->getQuery()
  48.             ->getResult();
  49.     }
  50.     public function findLeaveApproved($u_id)
  51.     {
  52.         return $this->createQueryBuilder('l')
  53.             ->andWhere('l.isApproved = 1')
  54.             ->andWhere('l.user = :u')
  55.             ->setParameter('u'$u_id)
  56.             ->select('SUM(l.days) as LeaveApprovedDays')
  57.             ->getQuery()
  58.             ->getResult();
  59.     }
  60.     public function findLeaveUnapproved($u_id)
  61.     {
  62.         return $this->createQueryBuilder('l')
  63.             ->andWhere('l.isApproved = 0')
  64.             ->andWhere('l.user = :u')
  65.             ->setParameter('u'$u_id)
  66.             ->select('SUM(l.days) as LeaveUnapprovedDays')
  67.             ->getQuery()
  68.             ->getResult();
  69.     }
  70.     public function findUncheckLeaveRequest()
  71.     {
  72.         return $this->createQueryBuilder('l')
  73.             ->leftJoin('l.user''u')
  74.             ->andWhere('l.isApproved is null')
  75.             ->andWhere('u.isActive = :ia')
  76.             ->setParameter('ia'1)
  77.             ->getQuery()
  78.             ->getResult();
  79.     }
  80.     public function findTodayLeave()
  81.     {
  82.         $today = new \DateTime();
  83.         $today $today->format('Y-m-d 00:00:00');
  84.         return $this->createQueryBuilder('l')
  85.             ->leftJoin('l.user''u')
  86.             ->andWhere('l.isApproved = :ac')
  87.             ->setParameter('ac'1)
  88.             ->andWhere(':today BETWEEN l.startDate and l.endDate')
  89.             ->setParameter('today'$today)
  90.             ->andWhere('u.isActive = :ia')
  91.             ->setParameter('ia'1)
  92.             ->getQuery()
  93.             ->getResult();
  94.     }
  95.     public function findTodayLeaveByCompany($company,$ac 1,$date=null)
  96.     {
  97.         
  98.         if(is_null($date)){
  99.             $today = new \DateTime();
  100.         }else{
  101.             $today= new \DateTime($date);
  102.         }
  103.         $today $today->format('Y-m-d 00:00:00');
  104.         $query $this->createQueryBuilder('l')
  105.             ->leftJoin('l.user''u')
  106.             ->leftJoin('u.office''o')
  107.             ->andWhere('o.company= :co')
  108.             ->setParameter('co'$company)
  109.             ->andWhere(':today BETWEEN l.startDate and l.endDate')
  110.             ->setParameter('today'$today)
  111.             ->andWhere('u.isActive = :ia')
  112.             ->setParameter('ia'1);
  113.             if($ac > -1){
  114.                 $query->andWhere('l.isApproved = :ac')->setParameter('ac'1);
  115.             }
  116.             $query->orderBy('l.startDate''ASC');
  117.             // $query->orderBy('l.endDate', 'ASC');
  118.             
  119.         return $query->getQuery()->getResult();
  120.     }
  121.     public function findNextWeekLeave()
  122.     {
  123.         $startWeek date("Y-m-d"strtotime("monday next week"));
  124.         $startWeek = new \DateTime($startWeek);
  125.         $startWeek $startWeek->format('Y-m-d 00:00:00');
  126.         $endWeek date("Y-m-d"strtotime("sunday next week"));
  127.         $endWeek = new \DateTime($endWeek);
  128.         $endWeek $endWeek->format('Y-m-d 00:00:00');
  129.         return $this->createQueryBuilder('l')
  130.             ->leftJoin('l.user''u')
  131.             ->andWhere('l.isApproved = :ac')
  132.             ->setParameter('ac'1)
  133.             // ->andWhere('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  134.             ->andWhere('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end OR l.startDate < :start and l.endDate > :end')
  135.             ->setParameter('start'$startWeek)
  136.             ->setParameter('end'$endWeek)
  137.             ->andWhere('u.isActive = :ia')
  138.             ->setParameter('ia'1)
  139.             ->getQuery()
  140.             ->getResult();
  141.     }
  142.     public function findNextWeekLeaveByCompany($company)
  143.     {
  144.         $startWeek date("Y-m-d"strtotime("monday next week"));
  145.         $startWeek = new \DateTime($startWeek);
  146.         $startWeek $startWeek->format('Y-m-d 00:00:00');
  147.         $endWeek date("Y-m-d"strtotime("friday next week"));
  148.         $endWeek = new \DateTime($endWeek);
  149.         $endWeek $endWeek->format('Y-m-d 00:00:00');
  150.         return $this->createQueryBuilder('l')
  151.             ->leftJoin('l.user''u')
  152.             ->leftJoin('u.office''o')
  153.             ->andWhere('o.company= :co')
  154.             ->setParameter('co'$company)
  155.             ->andWhere('l.isApproved = :ac')
  156.             ->setParameter('ac'1)
  157.             // ->andWhere('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  158.             ->andWhere('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end OR l.startDate < :start and l.endDate > :end')
  159.             ->setParameter('start'$startWeek)
  160.             ->setParameter('end'$endWeek)
  161.             ->andWhere('u.isActive = :ia')
  162.             ->setParameter('ia'1)
  163.             ->orderBy('l.startDate''ASC')
  164.             // ->orderBy('l.endDate', 'ASC')
  165.             ->getQuery()
  166.             ->getResult();
  167.     }
  168.     public function findByPage($page$resultsPerPage$keyword ""$order 'ASC'$orderBy ""$manager ""$leaveStatus ""$leaveTypeName ""$office ""$start$end\App\Entity\User $user null)
  169.     {
  170.         $keyword filter_var($keywordFILTER_SANITIZE_STRING);
  171.         $order filter_var($orderFILTER_SANITIZE_STRING);
  172.         $orderBy filter_var($orderByFILTER_SANITIZE_STRING);
  173.         $leaveStatus filter_var($leaveStatusFILTER_SANITIZE_STRING);
  174.         // $year = filter_var($year, FILTER_SANITIZE_STRING);
  175.         // if (($year == '') || ($year == null)) {
  176.         //     $year = date('Y');
  177.         // }
  178.         
  179.         // $yearStart = $year.'-01-01';
  180.         // $yearEnd = $year.'-12-31';
  181.         try {
  182.             $query $this->createQueryBuilder('q')
  183.                 ->leftJoin('q.user''u')
  184.                 ->leftJoin('u.personalInfo''p')
  185.                 ->leftJoin('q.leaveType''lt')
  186.                 //->andWhere('u.isActive = :ia')
  187.                 //->setParameter('ia', 1)
  188.                 ->setMaxResults($resultsPerPage)
  189.                 ->setFirstResult(($page 1) * $resultsPerPage);
  190.             if (!is_null($user)) {
  191.                 $query->andWhere('u = :uid')->setParameter('uid'$user->getId());
  192.             }
  193.             // if(($yearStart != "") && ($yearEnd != "")){
  194.             //     $query->andWhere('q.startDate >= :sd AND q.endDate <= :ed')->setParameter('sd', $yearStart)
  195.             //     ->setParameter('ed', $yearEnd);
  196.             // }
  197.             
  198.             if ($start == "") {
  199.                 $start date('Y') . '-01-01 00:00:00';
  200.             }else{
  201.                 $start date('Y-m-d 00:00:00'strtotime($start));
  202.             }
  203.               
  204.             if ($end == "") {
  205.                 $end date('Y') . '-12-31 23:59:59';
  206.             }else{
  207.                 $end date('Y-m-d 23:59:59'strtotime($end));
  208.             }
  209.             // $query->andWhere('q.startDate >= :sd')->setParameter('sd', $start);
  210.             // $query->andWhere('q.startDate <= :ed')->setParameter('ed', $end);
  211.             $query->andWhere('q.endDate >= :sd AND q.endDate <= :ed OR q.startDate >= :sd AND q.startDate <= :ed')
  212.             ->setParameter('sd'$start)
  213.             ->setParameter('ed'$end);
  214.             
  215.             if ($keyword != "") {
  216.                 $query->andWhere('p.firstName LIKE :val OR p.middleName LIKE :val OR p.lastName LIKE :val OR CONCAT(p.firstName, \' \',p.lastName) LIKE :val OR CONCAT(p.firstName, \' \',p.middleName, \' \',p.lastName) LIKE :val')->setParameter('val''%' $keyword '%');
  217.             }
  218.            
  219.             if ($manager != "") {
  220.                 /*$query->andWhere('(u.manager = :m) or (u.subManager = :m)')
  221.                 ->setParameter('m', $manager);*/
  222.                 $query->andWhere('(:sm member of u.subManager ) or (u.manager = :m )')
  223.                 ->setParameter('m'$manager)
  224.                 ->setParameter('sm', array($manager));
  225.             };
  226.             if ($leaveStatus == "NULL") {
  227.                 $query->andWhere('q.isApproved IS NULL');
  228.             } elseif ($leaveStatus != "") {
  229.                 $query->andWhere('q.isApproved = :ls')->setParameter('ls'$leaveStatus);
  230.             }
  231.             // if ($leaveTypeName == '') {
  232.             //     $query->andWhere('lt.leaveName != :lt')->setParameter('lt', 'sick');
  233.             // } else {
  234.             //     $query->andWhere('lt.leaveName = :lt')->setParameter('lt', $leaveTypeName);
  235.             // }
  236.             if ($leaveTypeName != ''){
  237.                 if ($leaveTypeName == 'annual'){
  238.                     $query->andWhere('lt.leaveName != :lt')->setParameter('lt''sick');
  239.                 }else{
  240.                     $query->andWhere('lt.leaveName = :lt')->setParameter('lt'$leaveTypeName);
  241.                 }
  242.             }
  243.                 
  244.             if ($office != "") {
  245.                 $query->andWhere('u.office = :of')->setParameter('of'$office);
  246.             }
  247.             if ($orderBy == "") {
  248.                 $query->orderBy('q.createdAt''DESC');
  249.             } else if ($orderBy == "name") {
  250.                 $query->orderBy('p.firstName'$order);
  251.             } 
  252.             else if($orderBy == "manager") {
  253.                 $query->leftJoin('u.manager''m')
  254.                 ->leftJoin('m.personalInfo''mp')
  255.                 ->orderBy('mp.firstName'$order);
  256.             } 
  257.             else if($orderBy == "office") {
  258.                 $query->leftJoin('u.office''o')
  259.                 ->orderBy('o.fullName'$order);
  260.             } 
  261.             else if($orderBy == "file"){
  262.                 $query->orderBy("JSON_EXTRACT(q.attributes,'$.file')"$order);
  263.             }
  264.             else {
  265.                 $query->orderBy("q." $orderBy$order);
  266.             }
  267.             
  268.             return $query->getQuery()->getResult();
  269.         } catch (\Exception $exception) {
  270.             return [];
  271.         }
  272.     }
  273.     public function countByPage($keyword ""$manager ""$leaveStatus ""$leaveTypeName ""$office ""$start$end\App\Entity\User $user null)
  274.     {
  275.         $keyword filter_var($keywordFILTER_SANITIZE_STRING);
  276.         $leaveStatus filter_var($leaveStatusFILTER_SANITIZE_STRING);
  277.         // if (($year == '') || ($year == null)) {
  278.         //     $year = date('Y');
  279.         // }
  280.         
  281.         // $yearStart = $year.'-01-01';
  282.         // $yearEnd = $year.'-12-31';
  283.         try {
  284.             $query $this->createQueryBuilder('q')
  285.                 ->leftJoin('q.user''u')
  286.                 ->leftJoin('u.personalInfo''p')
  287.                 ->leftJoin('q.leaveType''lt')
  288.                 //->andWhere('u.isActive = :ia')
  289.                 //->setParameter('ia', 1)
  290.                 ->select('count(distinct(q.id))');;
  291.             if (!is_null($user)) {
  292.                 $query->andWhere('u = :uid')->setParameter('uid'$user->getId());
  293.             }
  294.             // if(($yearStart != "") && ($yearEnd != "")){
  295.             //     $query->andWhere('q.startDate >= :sd AND q.endDate <= :ed')->setParameter('sd', $yearStart)
  296.             //     ->setParameter('ed', $yearEnd);
  297.             // }
  298.             
  299.             if ($start == "") {
  300.                 $start date('Y') . '-01-01 00:00:00';
  301.             }else{
  302.                 $start date('Y-m-d 00:00:00'strtotime($start));
  303.             }
  304.               
  305.             if ($end == "") {
  306.                 $end date('Y') . '-12-31 23:59:59';
  307.             }else{
  308.                 $end date('Y-m-d 23:59:59'strtotime($end));
  309.             }
  310.             
  311.             // $query->andWhere('q.startDate >= :sd')->setParameter('sd', $start);
  312.             // $query->andWhere('q.startDate <= :ed')->setParameter('ed', $end);
  313.             
  314.             $query->andWhere('q.endDate >= :sd AND q.endDate <= :ed OR q.startDate >= :sd AND q.startDate <= :ed')
  315.             ->setParameter('sd'$start)
  316.             ->setParameter('ed'$end);
  317.             if ($keyword !== "") {
  318.                 $query->andWhere('p.firstName LIKE :val OR p.middleName LIKE :val OR p.lastName LIKE :val OR CONCAT(p.firstName, \' \',p.lastName) LIKE :val OR CONCAT(p.firstName, \' \',p.middleName, \' \',p.lastName) LIKE :val')->setParameter('val''%' $keyword '%');
  319.             }
  320.             if ($manager !== "") {
  321.                 //$query->innerJoin('u.user', 'uu', 'WITH', 'uu.target = :superCategoryName');
  322.                 //$query->andWhere('u.manager = :m')->setParameter('m', $manager);
  323.                 $query->andWhere('(:sm member of u.subManager ) or (u.manager = :m )')
  324.                 ->setParameter('m'$manager)
  325.                 ->setParameter('sm', array($manager));
  326.             };
  327.             if ($leaveStatus == "NULL") {
  328.                 $query->andWhere('q.isApproved IS NULL');
  329.             } elseif ($leaveStatus !== "") {
  330.                 $query->andWhere('q.isApproved = :ls')->setParameter('ls'$leaveStatus);
  331.             };
  332.             /*
  333.             if ($leaveTypeName == '') {
  334.                 $query->andWhere('lt.leaveName != :lt')->setParameter('lt', 'sick');
  335.             } else {
  336.                 $query->andWhere('lt.leaveName = :lt')->setParameter('lt', $leaveTypeName);
  337.             }
  338.             */
  339.             if ($leaveTypeName != ''){
  340.                 if ($leaveTypeName == 'annual'){
  341.                     $query->andWhere('lt.leaveName != :lt')->setParameter('lt''sick');
  342.                 }else{
  343.                     $query->andWhere('lt.leaveName = :lt')->setParameter('lt'$leaveTypeName);
  344.                 }
  345.             }
  346.             if ($office !== "") {
  347.                 $query->andWhere('u.office = :of')->setParameter('of'$office);
  348.             }
  349.             return $query->getQuery()->getSingleScalarResult();
  350.         } catch (\Exception $exception) {
  351.             return [];
  352.         }
  353.     }
  354.     public function findWeekLeaveByUser($user$week ""$leaveType "")
  355.     {
  356.         $startWeek date("Y-m-d"strtotime("monday this week"));
  357.         $startWeek = new \DateTime($startWeek);
  358.         $startWeek $startWeek->format('Y-m-d 00:00:00');
  359.         $endWeek date("Y-m-d"strtotime("friday this week"));
  360.         $endWeek = new \DateTime($endWeek);
  361.         $endWeek $endWeek->format('Y-m-d 00:00:00');
  362.         if($week != ""){
  363.             $startWeek date("Y-m-d 00:00:00",strtotime($week));
  364.             $endWeek date("Y-m-d 00:00:00"strtotime("$week friday this week"));
  365.         }
  366.        
  367.          $query $this->createQueryBuilder('l')
  368.             ->leftJoin('l.user''u')
  369.             ->leftJoin('l.leaveType''t')
  370.             ->andWhere('u.isActive = :ia')
  371.             ->setParameter('ia'1)
  372.             ->andWhere('l.user = :us')
  373.             ->setParameter('us'$user)
  374.             // ->andWhere('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end')
  375.             ->andWhere('l.startDate BETWEEN :start and :end OR l.endDate BETWEEN :start and :end OR l.startDate < :start and l.endDate > :end')
  376.             ->setParameter('start'$startWeek)
  377.             ->setParameter('end'$endWeek)
  378.             ->andWhere('l.isApproved = :ac')
  379.             ->setParameter('ac'1);
  380.         
  381.             if($leaveType !== ""){
  382.                 if ($leaveType == "annual"){
  383.                     $query->andWhere('t.leaveName != :lt')->setParameter('lt''sick');
  384.                 }else{
  385.                     $query->andWhere('t.leaveName = :lt')->setParameter('lt'$leaveType);
  386.                 }
  387.             }
  388.             // $query->getQuery()->getResult();
  389.             return $query->getQuery()->getResult();
  390.     }
  391.     public function isLeaveByUser($date$user){
  392.         if($date != ""){
  393.             $thisDate date("Y-m-d 00:00:00"strtotime($date));
  394.         }
  395.         $data $this->createQueryBuilder('l')
  396.         ->leftJoin('l.leaveType''t')
  397.         ->leftJoin('l.user''u')
  398.         ->andWhere('u.isActive = :ia')
  399.         ->setParameter('ia'1)
  400.         ->andWhere('l.user = :us')
  401.         ->setParameter('us'$user)
  402.         ->andWhere('l.startDate = :date OR l.endDate = :date OR :date between l.startDate and l.endDate')
  403.         // ->andWhere('l.startDate = :date OR l.endDate = :date OR :date between l.startDate and l.endDate OR l.startDate < :date and l.endDate > :date')
  404.         ->setParameter('date'$thisDate)
  405.         ->andWhere('l.isApproved = :ac')
  406.         ->setParameter('ac'1)
  407.         ->andWhere("JSON_EXTRACT(t.attributes,'$.label') = :an")
  408.         ->setParameter('an''Annual')
  409.         ->getQuery()
  410.         ->getResult();
  411.         $result false;
  412.         if (!empty($data)){
  413.             $result true;
  414.         }
  415.         return $result;
  416.     }
  417.     public function isSickByUser($date$user){
  418.         if($date != ""){
  419.             $thisDate date("Y-m-d 00:00:00"strtotime($date));
  420.         }
  421.         $data $this->createQueryBuilder('l')
  422.         ->leftJoin('l.leaveType''t')
  423.         ->leftJoin('l.user''u')
  424.         ->andWhere('u.isActive = :ia')
  425.         ->setParameter('ia'1)
  426.         ->andWhere('l.user = :us')
  427.         ->setParameter('us'$user)
  428.         ->andWhere('l.startDate = :date OR l.endDate = :date OR :date between l.startDate and l.endDate')
  429.         // ->andWhere('l.startDate = :date OR l.endDate = :date OR :date between l.startDate and l.endDate OR l.startDate < :date and l.endDate > :date')
  430.         ->setParameter('date'$thisDate)
  431.         ->andWhere('l.isApproved = :ac')
  432.         ->setParameter('ac'1)
  433.         ->andWhere("JSON_EXTRACT(t.attributes,'$.label') = :s")
  434.         ->setParameter('s''Sick')
  435.         ->getQuery()
  436.         ->getResult();
  437.         $result false;
  438.         if (!empty($data)){
  439.             $result true;
  440.         }
  441.         return $result;
  442.     }
  443.     public function findLeaveByDate($dates){
  444.         $conditions='';
  445.         $param=array();
  446.         $l=count($dates);
  447.         for($i=0;$i<$l;$i++){
  448.             $conditions.='(l.startDate <= :start'.$i.' and l.endDate >= :start'.$i.') or (l.startDate <= :end'.$i.' and l.endDate >= :end'.$i.') or (l.startDate >= :start'.$i.' and l.endDate <= :end'.$i.')';
  449.             $param['start'.$i]=$dates[$i]['start'];
  450.             $param['end'.$i]=$dates[$i]['end'];
  451.             if($i < ($l-1)){$conditions.=' or ';}
  452.         }
  453.         
  454.         $query$this->createQueryBuilder('l')
  455.         ->where(trim($conditions))
  456.         ->setParameters($param)
  457.         ->getQuery()
  458.         ->getResult();
  459.         return $query;
  460.     }
  461.     // /**
  462.     //  * @return LeaveRequest[] Returns an array of LeaveRequest objects
  463.     //  */
  464.     /*
  465.     public function findByExampleField($value)
  466.     {
  467.         return $this->createQueryBuilder('l')
  468.             ->andWhere('l.exampleField = :val')
  469.             ->setParameter('val', $value)
  470.             ->orderBy('l.id', 'ASC')
  471.             ->setMaxResults(10)
  472.             ->getQuery()
  473.             ->getResult()
  474.         ;
  475.     }
  476.     */
  477.     /*
  478.     public function findOneBySomeField($value): ?LeaveRequest
  479.     {
  480.         return $this->createQueryBuilder('l')
  481.             ->andWhere('l.exampleField = :val')
  482.             ->setParameter('val', $value)
  483.             ->getQuery()
  484.             ->getOneOrNullResult()
  485.         ;
  486.     }
  487.     */
  488. }