src/AdminBundle/Repository/DriverHistoryQueueRepository.php line 20

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Repository;
  3. use AdminBundle\Entity\Driver;
  4. use DateTime;
  5. use Doctrine\ORM\EntityRepository;
  6. /**
  7. * DriverHistoryQueueRepository
  8. */
  9. class DriverHistoryQueueRepository extends EntityRepository
  10. {
  11. /**
  12. * @param string $areaCode
  13. * @param Driver $driver
  14. *
  15. * @return array
  16. */
  17. public function getActiveWithinAreaAndDriver(string $areaCode = null, Driver $driver = null)
  18. {
  19. $qb = $this->createQueryBuilder('dhq');
  20. if ($areaCode) {
  21. $qb
  22. ->innerJoin('dhq.area', 'a')
  23. ->andWhere('a.areaCode = :areaCode')
  24. ->setParameter('areaCode', $areaCode)
  25. ;
  26. }
  27. if ($driver) {
  28. $qb
  29. ->andWhere('dhq.driver = :driver')
  30. ->setParameter('driver', $driver)
  31. ;
  32. }
  33. return $qb
  34. ->andWhere(
  35. $qb->expr()->between('dhq.createdAt', ':startDate', ':endDate')
  36. )
  37. ->andWhere('dhq.queueTimeCompleted = :false')
  38. ->andWhere($qb->expr()->isNull('dhq.leavedAt'))
  39. ->setParameter('startDate', new DateTime('-1 hour'))
  40. ->setParameter('endDate', new DateTime())
  41. ->setParameter('false', false)
  42. ->orderBy('dhq.createdAt', 'ASC')
  43. ->orderBy('dhq.priority', 'DESC')
  44. ->getQuery()
  45. ->getResult()
  46. ;
  47. }
  48. /**
  49. * @param string $areaCode
  50. *
  51. * @return int
  52. */
  53. public function countActiveWithinArea(string $areaCode)
  54. {
  55. return count($this->getActiveWithinAreaAndDriver($areaCode));
  56. }
  57. /**
  58. * @return array
  59. */
  60. public function getActiveUncompleted()
  61. {
  62. $qb = $this->createQueryBuilder('dhq');
  63. return $qb
  64. ->andWhere(
  65. $qb->expr()->between('dhq.createdAt', ':startDate', ':endDate')
  66. )
  67. ->andWhere($qb->expr()->isNull('dhq.leavedAt'))
  68. ->andWhere('dhq.queueTimeCompleted = :false')
  69. ->setParameter('startDate', new DateTime('-60 minutes'))
  70. ->setParameter('endDate', new DateTime('-65 minutes'))
  71. ->setParameter('false', false)
  72. ->getQuery()
  73. ->getResult()
  74. ;
  75. }
  76. /**
  77. * @param Driver $driver
  78. * @param string $areaCode
  79. *
  80. * @return int
  81. */
  82. public function countDriverEntriesOnCurrentDay(Driver $driver, string $areaCode)
  83. {
  84. $startDate = new DateTime();
  85. $startDate->setTime(0, 0, 0);
  86. $endDate = new DateTime();
  87. $endDate->setTime(23, 59, 59);
  88. $qb = $this
  89. ->createQueryBuilder('dhq')
  90. ->select('COUNT(dhq.id)')
  91. ->innerJoin('dhq.area', 'a')
  92. ;
  93. return (int) $qb
  94. ->where('a.areaCode = :areaCode')
  95. ->andWhere('dhq.driver = :driver')
  96. ->andWhere(
  97. $qb->expr()->between('dhq.createdAt', ':startDate', ':endDate')
  98. )
  99. ->setParameter('areaCode', $areaCode)
  100. ->setParameter('driver', $driver)
  101. ->setParameter('startDate', $startDate)
  102. ->setParameter('endDate', $endDate)
  103. ->getQuery()
  104. ->getSingleScalarResult()
  105. ;
  106. }
  107. }