setTime(0,0,0); $end=clone $start; $end->setTime(23,59); $qb = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.dateof>=:start') ->andWhere('tallydate.dateof<=:end') ->orderBy('tallydate.datestart', 'ASC') ->setParameter('user',$user) ->setParameter('start',$start->format("Y-m-d H:i:s")) ->setParameter('end',$end->format("Y-m-d H:i:s")); $data = $qb->getQuery()->getResult(); return $data; } public function findTallydays($user,$start) { $start->setTime(0,0,0); $end=clone $start; $end->modify("friday this week"); $end->setTime(23,59); $qb = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.dateof>=:start') ->andWhere('tallydate.dateof<=:end') ->setParameter('user',$user) ->setParameter('start',$start->format("Y-m-d H:i:s")) ->setParameter('end',$end->format("Y-m-d H:i:s")); $datas = $qb->getQuery()->getResult(); return $datas; } public function getCapitaltimeinterval($user,$getnovalidate=false) { $datenow=new \DateTime('00:00'); $datas = $this->_em->getRepository('App:Tallyday')->findBy(["user"=>$user],["datestart"=>"DESC"]); $tbdays=[]; $ework = new \DateTime('00:00'); foreach($datas as $data) { if($data->getDateof()<$datenow) { $iddayweek=$data->getDateof()->format("w"); if($iddayweek>=1&&$iddayweek<=5) { if(!in_array($data->getDateof(),$tbdays)) array_push($tbdays,$data->getDateof()); } $ework->add($data->getTimeday()); } if($data->getDateof()==$datenow&&($getnovalidate||$data->getValidateuser()||$data->getValidatemaster())) { $iddayweek=$data->getDateof()->format("w"); if($iddayweek>=1&&$iddayweek<=5) { if(!in_array($data->getDateof(),$tbdays)) array_push($tbdays,$data->getDateof()); } $ework->add($data->getTimeday()); } } // Nbday worked $nbdaywork=count($tbdays); $etowork = new \DateTime('00:00'); $etowork->add(new \DateInterval("PT".($nbdaywork*7)."H")); $interval = $etowork->diff($ework); return $interval; } public function getCapitaltime($user) { $interval=$this->getCapitaltimeinterval($user); $timeday = $interval->format("%R").(($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); return $timeday; } public function vefifTallytime($tallyday) { $qb = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.datestart<=:day') ->andWhere(':daysetParameter('user',$tallyday->getUser()) ->setParameter('day',$tallyday->getDatestart()->format("Y-m-d H:i:s")); if($tallyday->getId()) { $qb ->andWhere('tallydate.id!=:id') ->setParameter('id',$tallyday->getId()); } $datas = $qb->getQuery()->getResult(); if($datas) return false; if($tallyday->getDateend()) { $qb = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.datestart<=:day') ->andWhere(':daysetParameter('user',$tallyday->getUser()) ->setParameter('day',$tallyday->getDateend()->format("Y-m-d H:i:s")); if($tallyday->getId()) { $qb ->andWhere('tallydate.id!=:id') ->setParameter('id',$tallyday->getId()); } $datas = $qb->getQuery()->getResult(); if($datas) return false; $qb = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.datestart>:start') ->andWhere('tallydate.dateend<:end') ->setParameter('user',$tallyday->getUser()) ->setParameter('start',$tallyday->getDatestart()->format("Y-m-d H:i:s")) ->setParameter('end',$tallyday->getDateend()->format("Y-m-d H:i:s")); if($tallyday->getId()) { $qb ->andWhere('tallydate.id!=:id') ->setParameter('id',$tallyday->getId()); } $datas = $qb->getQuery()->getResult(); if($datas) return false; } else { // Il ne peut pas avoir deux créneaux avec juste une date de début $qb = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.dateof=:day') ->andWhere('tallydate.dateend IS NULL') ->setParameter('user',$tallyday->getUser()) ->setParameter('day',$tallyday->getDateof()->format("Y-m-d H:i:s")); if($tallyday->getId()) { $qb ->andWhere('tallydate.id!=:id') ->setParameter('id',$tallyday->getId()); } $datas = $qb->getQuery()->getResult(); if($datas) return false; } return true; } public function findAM($user,$dateof,$isbreakday) { $start=clone $dateof; $start->setTime(8,30); $end=clone $dateof; $end->setTime(12,00); $datas = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.dateof=:day') ->andWhere('(tallydate.datestart<=:start AND :start<=tallydate.dateend)OR(tallydate.datestart>=:start AND tallydate.datestart<=:end) OR (tallydate.dateend>=:start AND tallydate.dateend<=:end)') ->andWhere('tallydate.isbreakday=:isbreakday') ->setParameter('user',$user) ->setParameter('isbreakday',$isbreakday) ->setParameter('day',$dateof->format("Y-m-d H:i:s")) ->setParameter('start',$start->format("Y-m-d H:i:s")) ->setParameter('end',$end->format("Y-m-d H:i:s")) ->getQuery()->getResult(); return $datas; } public function findPM($user,$dateof,$isbreakday) { $start=clone $dateof; $start->setTime(13,30); $end=clone $dateof; $end->setTime(17,00); $datas = $this->createQueryBuilder('tallydate') ->Where('tallydate.user=:user') ->andWhere('tallydate.dateof=:day') ->andWhere('(tallydate.datestart<=:start AND :start<=tallydate.dateend)OR(tallydate.datestart>=:start AND tallydate.datestart<=:end) OR (tallydate.dateend>=:start AND tallydate.dateend<=:end)') ->andWhere('tallydate.isbreakday=:isbreakday') ->setParameter('user',$user) ->setParameter('isbreakday',$isbreakday) ->setParameter('day',$dateof->format("Y-m-d H:i:s")) ->setParameter('start',$start->format("Y-m-d H:i:s")) ->setParameter('end',$end->format("Y-m-d H:i:s")) ->getQuery()->getResult(); return $datas; } }