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 getCapitaltime($user) { $datenow=new \DateTime('00:00'); $datas = $this->_em->getRepository('App:Tallyday')->findBy(["user"=>$user],["datestart"=>"DESC"]); $tbweek=[]; $ework = new \DateTime('00:00'); $lastdayvalidate=false; foreach($datas as $data) { if($data->getDateof()<$datenow) { $idweek=strval($data->getDateof()->format("Y"))."-".strval($data->getDateof()->format("W")); if(!in_array($idweek,$tbweek)) array_push($tbweek,$idweek); $ework->add($data->getTimeday()); } if($data->getDateof()==$datenow&&($data->getValidateuser()||$data->getValidatemaster())) { $lastdayvalidate=true; $idweek=strval($data->getDateof()->format("Y"))."-".strval($data->getDateof()->format("W")); if(!in_array($idweek,$tbweek)) array_push($tbweek,$idweek); $ework->add($data->getTimeday()); } } // Nbday worked $nbdaywork=(count($tbweek)-1)*5; if($datenow->format("w")==6||$datenow->format("w")==7) $nbdaywork+=5; else { $nbdaywork+=$datenow->format("w"); if(!$lastdayvalidate) $nbdaywork--; } if($nbdaywork<0) $nbdaywork=0; $etowork = new \DateTime('00:00'); $etowork->sub(new \DateInterval("PT".($nbdaywork*7)."H")); $interval = $etowork->diff($ework); $timeday = (($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i); if($ework>$etowork) $timeday="-".$timeday; 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; } }