210 lines
7.8 KiB
PHP
210 lines
7.8 KiB
PHP
<?php
|
|
|
|
namespace App\Repository;
|
|
|
|
use App\Entity\Tallyday;
|
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
use Doctrine\Common\Persistence\ManagerRegistry;
|
|
|
|
class TallydayRepository extends ServiceEntityRepository
|
|
{
|
|
public function __construct(ManagerRegistry $registry)
|
|
{
|
|
parent::__construct($registry, Tallyday::class);
|
|
}
|
|
|
|
public function findTallyday($user,$start)
|
|
{
|
|
$start->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,$monthof=null) {
|
|
$datenow=new \DateTime('00:00');
|
|
$datas = $this->_em->getRepository('App:Tallyday')->findBy(["user"=>$user],["datestart"=>"DESC"]);
|
|
$tbweek=[];
|
|
$ework = new \DateTime('00:00');
|
|
$idweeknow=$datenow->format("Y").$datenow->format("W");
|
|
$lastdayvalidate=false;
|
|
|
|
foreach($datas as $data) {
|
|
if($data->getDateof()<$datenow) {
|
|
$idweek=$data->getDateof()->format("Y").$data->getDateof()->format("W");
|
|
if(!in_array($idweek,$tbweek)&&$idweek!=$idweeknow) array_push($tbweek,$idweek);
|
|
$ework->add($data->getTimeday());
|
|
}
|
|
|
|
if($data->getDateof()==$datenow&&($data->getValidateuser()||$data->getValidatemaster())) {
|
|
$lastdayvalidate=true;
|
|
$idweek=$data->getDateof()->format("Y").$data->getDateof()->format("W");
|
|
if(!in_array($idweek,$tbweek)&&$idweek!=$idweeknow) array_push($tbweek,$idweek);
|
|
$ework->add($data->getTimeday());
|
|
}
|
|
}
|
|
|
|
// Nbday worked
|
|
$nbdaywork=count($tbweek)*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(':day<tallydate.dateend')
|
|
->setParameter('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(':day<tallydate.dateend')
|
|
->setParameter('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;
|
|
}
|
|
}
|