ninebadge/src/ninebadge-1.0/src/Repository/TallydayRepository.php

166 lines
6.0 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) {
$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(':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;
}
}