2022-02-09 09:55:14 +01:00
< ? 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' )
2022-02-12 09:46:16 +01:00
-> 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 " ));
2022-02-09 09:55:14 +01:00
2022-02-12 09:46:16 +01:00
$data = $qb -> getQuery () -> getResult ();
2022-02-09 09:55:14 +01:00
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' )
2022-02-12 09:46:16 +01:00
-> 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 " ));
2022-02-09 09:55:14 +01:00
2022-02-12 09:46:16 +01:00
$datas = $qb -> getQuery () -> getResult ();
2022-02-09 09:55:14 +01:00
return $datas ;
}
2022-03-29 09:34:25 +02:00
public function getCapitaltimeinterval ( $user , $getnovalidate = false ) {
2022-02-12 09:46:16 +01:00
$datenow = new \DateTime ( '00:00' );
$datas = $this -> _em -> getRepository ( 'App:Tallyday' ) -> findBy ([ " user " => $user ],[ " datestart " => " DESC " ]);
2022-03-29 09:34:25 +02:00
$tbdays = [];
2022-02-12 09:46:16 +01:00
$ework = new \DateTime ( '00:00' );
2022-02-14 13:41:30 +01:00
2022-02-12 09:46:16 +01:00
foreach ( $datas as $data ) {
if ( $data -> getDateof () < $datenow ) {
2022-03-29 09:34:25 +02:00
$iddayweek = $data -> getDateof () -> format ( " w " );
if ( $iddayweek >= 1 && $iddayweek <= 5 ) {
if ( ! in_array ( $data -> getDateof (), $tbdays )) array_push ( $tbdays , $data -> getDateof ());
}
2022-02-12 09:46:16 +01:00
$ework -> add ( $data -> getTimeday ());
}
2022-03-29 09:34:25 +02:00
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 ());
}
2022-02-12 09:46:16 +01:00
$ework -> add ( $data -> getTimeday ());
}
}
// Nbday worked
2022-03-29 09:34:25 +02:00
$nbdaywork = count ( $tbdays );
2022-02-12 09:46:16 +01:00
$etowork = new \DateTime ( '00:00' );
2022-03-29 09:34:25 +02:00
$etowork -> add ( new \DateInterval ( " PT " . ( $nbdaywork * 7 ) . " H " ));
$interval = $etowork -> diff ( $ework );
2022-02-21 09:36:27 +01:00
return $interval ;
}
public function getCapitaltime ( $user ) {
$interval = $this -> getCapitaltimeinterval ( $user );
$timeday = $interval -> format ( " %R " ) . (( $interval -> days * 24 ) + $interval -> h ) . " : " . sprintf ( " %02s " , $interval -> i );
2022-02-12 09:46:16 +01:00
return $timeday ;
}
2022-02-21 09:36:27 +01:00
2022-02-12 09:46:16 +01:00
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 ;
}
2022-02-14 13:41:30 +01:00
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 ;
}
2022-02-09 09:55:14 +01:00
}