<?php
namespace AdminBundle\Repository;
use AdminBundle\Entity\Driver;
use DateTime;
use Doctrine\ORM\EntityRepository;
/**
* DriverHistoryQueueRepository
*/
class DriverHistoryQueueRepository extends EntityRepository
{
/**
* @param string $areaCode
* @param Driver $driver
*
* @return array
*/
public function getActiveWithinAreaAndDriver(string $areaCode = null, Driver $driver = null)
{
$qb = $this->createQueryBuilder('dhq');
if ($areaCode) {
$qb
->innerJoin('dhq.area', 'a')
->andWhere('a.areaCode = :areaCode')
->setParameter('areaCode', $areaCode)
;
}
if ($driver) {
$qb
->andWhere('dhq.driver = :driver')
->setParameter('driver', $driver)
;
}
return $qb
->andWhere(
$qb->expr()->between('dhq.createdAt', ':startDate', ':endDate')
)
->andWhere('dhq.queueTimeCompleted = :false')
->andWhere($qb->expr()->isNull('dhq.leavedAt'))
->setParameter('startDate', new DateTime('-1 hour'))
->setParameter('endDate', new DateTime())
->setParameter('false', false)
->orderBy('dhq.createdAt', 'ASC')
->orderBy('dhq.priority', 'DESC')
->getQuery()
->getResult()
;
}
/**
* @param string $areaCode
*
* @return int
*/
public function countActiveWithinArea(string $areaCode)
{
return count($this->getActiveWithinAreaAndDriver($areaCode));
}
/**
* @return array
*/
public function getActiveUncompleted()
{
$qb = $this->createQueryBuilder('dhq');
return $qb
->andWhere(
$qb->expr()->between('dhq.createdAt', ':startDate', ':endDate')
)
->andWhere($qb->expr()->isNull('dhq.leavedAt'))
->andWhere('dhq.queueTimeCompleted = :false')
->setParameter('startDate', new DateTime('-60 minutes'))
->setParameter('endDate', new DateTime('-65 minutes'))
->setParameter('false', false)
->getQuery()
->getResult()
;
}
/**
* @param Driver $driver
* @param string $areaCode
*
* @return int
*/
public function countDriverEntriesOnCurrentDay(Driver $driver, string $areaCode)
{
$startDate = new DateTime();
$startDate->setTime(0, 0, 0);
$endDate = new DateTime();
$endDate->setTime(23, 59, 59);
$qb = $this
->createQueryBuilder('dhq')
->select('COUNT(dhq.id)')
->innerJoin('dhq.area', 'a')
;
return (int) $qb
->where('a.areaCode = :areaCode')
->andWhere('dhq.driver = :driver')
->andWhere(
$qb->expr()->between('dhq.createdAt', ':startDate', ':endDate')
)
->setParameter('areaCode', $areaCode)
->setParameter('driver', $driver)
->setParameter('startDate', $startDate)
->setParameter('endDate', $endDate)
->getQuery()
->getSingleScalarResult()
;
}
}