AttendanceBookingRepository.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. namespace AppBundle\Entity\Booking\Repository;
  3. use AppBundle\Entity\AccessAndFunction\Access;
  4. use Doctrine\ORM\EntityRepository;
  5. class AttendanceBookingRepository extends EntityRepository {
  6. /**
  7. * @param \DateTime $date_start
  8. * @param \DateTime $date_end
  9. * @param Access $access
  10. */
  11. public function getAttendance(\DateTime $date_start, \DateTime $date_end, Access $access) {
  12. $queryBuilder = $this->createQueryBuilder('o');
  13. $queryBuilder
  14. ->select('SUM(TIMESTAMPDIFF(MINUTE, o.datetimeStart, o.datetimeEnd)) AS time')
  15. ->leftJoin('o.access', 'access')
  16. ->andWhere('o.datetimeStart < :datetimeEnd')
  17. ->andWhere(
  18. $queryBuilder->expr()->orX(
  19. $queryBuilder->expr()->gt('o.datetimeEnd', ':datetimeStart'),
  20. $queryBuilder->expr()->isNull('o.datetimeEnd')
  21. ))
  22. ->andWhere('o.access = :access')
  23. ->andWhere('access.organization = :organization')
  24. ->setParameter('datetimeStart', $date_start)
  25. ->setParameter('datetimeEnd', $date_end)
  26. ->setParameter('access', $access)
  27. ->setParameter('organization', $access->getOrganization())
  28. ;
  29. $query = $queryBuilder->getQuery();
  30. $results = $query->getResult();
  31. return $results;
  32. }
  33. }