EventRepository.php 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: alex
  5. * Date: 18/02/16
  6. * Time: 12:00
  7. */
  8. namespace AppBundle\Entity\Booking\Repository;
  9. use Doctrine\ORM\EntityRepository;
  10. use Recurr\DateExclusion;
  11. use Recurr\Rule;
  12. use Recurr\Transformer\ArrayTransformer;
  13. use Recurr\Transformer\Constraint\BetweenConstraint;
  14. use Doctrine\ORM\Tools\Pagination\Paginator;
  15. use Dunglas\ApiBundle\Api\ResourceInterface;
  16. use Symfony\Component\HttpFoundation\Request;
  17. class EventRepository extends EntityRepository {
  18. /**
  19. * Get Attendance records
  20. *
  21. * @param ResourceInterface $resource
  22. * @param Request $request
  23. * @param int $firstResult
  24. * @param mixed int|string $itemsPerPage
  25. * @return Paginator
  26. */
  27. public function getAttendanceRecord(ResourceInterface $resource, Request $request, $firstResult = 1, $itemsPerPage = 20) {
  28. $queryBuilder = $this->createQueryBuilder('o')
  29. ->select(''
  30. . 'NEW AppBundle\DTO\EventAttendanceRecord('
  31. . 'o.id,'
  32. . 'o.description,'
  33. . 'i.id,'
  34. . 'o.url,'
  35. . 'o.technicalDescription,'
  36. . 'o.visibility,'
  37. . 'o.report,'
  38. . 'o.datetimeMeeting,'
  39. . 'o.locationMeeting,'
  40. . 'o.comment,'
  41. . '(SELECT group_concat(eu.id) FROM AppBundle:Event\EventUser as eu WHERE eu.event = o.id), '
  42. . '(SELECT count(eupp.id) FROM AppBundle:Event\EventUser as eupp WHERE eupp.event = o.id AND eupp.participation = \'PARTICIPATE\'),' // plannedParticipation
  43. . '(SELECT count(eupnp.id) FROM AppBundle:Event\EventUser as eupnp WHERE eupnp.event = o.id AND eupnp.participation = \'NOT_PARTICIPATE\'),' // plannedNotParticipation
  44. . '(SELECT count(eunp.id) FROM AppBundle:Event\EventUser as eunp WHERE eunp.event = o.id AND eunp.participation = \'NOT_RESPONSE\'),' // withoutResponse
  45. . '(SELECT count(eua.id) FROM AppBundle:Event\EventUser as eua WHERE eua.event = o.id AND eua.attendance = 1)' // attendance
  46. . ')'
  47. )
  48. ->leftJoin('o.image', 'i')
  49. ;
  50. foreach ($resource->getFilters() as $filter) {
  51. $filter->apply($resource, $queryBuilder, $request);
  52. }
  53. // Item per page should be equal to 'ALL'
  54. if (is_int($itemsPerPage)) {
  55. $queryBuilder->setFirstResult($firstResult);
  56. $queryBuilder->setMaxResults($itemsPerPage);
  57. }
  58. $paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($queryBuilder);
  59. $paginator->setUseOutputWalkers(false);
  60. return $paginator;
  61. }
  62. public function getOrganizationEvent($organization){
  63. $datetime = new \DateTime();
  64. $today = $datetime->format('Y-m-d');
  65. $qb = $this->createQueryBuilder('a');
  66. $qb
  67. ->leftJoin('a.eventRecur', 'er')
  68. ->where('a.organization = :organization')
  69. ->andWhere('a.datetimeStart >= :today OR er.datetimeEnd >= :today')
  70. ->setParameter('today', $today)
  71. ->setParameter('organization', $organization);
  72. return $qb->getQuery()->getResult();
  73. }
  74. }