CourseRepository.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace AppBundle\Entity\Booking\Repository;
  3. use AppBundle\Entity\AccessAndFunction\Access;
  4. use Doctrine\ORM\EntityRepository;
  5. class CourseRepository extends EntityRepository {
  6. /**
  7. * @param $date_start
  8. * @param $date_end
  9. * @param Access $access
  10. */
  11. public function getCourses($date_start, $date_end, Access $access) {
  12. $queryBuilder = $this->createQueryBuilder('o');
  13. $queryBuilder
  14. ->andWhere(
  15. $queryBuilder->expr()->between('o.datetimeStart', ':dateStart', ':dateEnd')
  16. )
  17. ->andWhere('o.organization = :organization')
  18. ->setParameter('dateStart', $date_start)
  19. ->setParameter('dateEnd', $date_end)
  20. ->setParameter('organization', $access->getOrganization())
  21. ;
  22. $query = $queryBuilder->getQuery();
  23. $results = $query->getResult();
  24. return $results;
  25. }
  26. /**
  27. * @param $organization
  28. * @param null $year
  29. * @param null $idsCourses
  30. * @return array
  31. */
  32. public function getCoursesToDuplicate($organization, $year = null, $idsCourses = null){
  33. $qb = $this->createQueryBuilder('courses');
  34. if($year){
  35. $qb
  36. ->andWhere($qb->expr()->eq('courses.startYear', ':year'))
  37. ->setParameter('year', $year);
  38. }else{
  39. $qb
  40. ->andWhere($qb->expr()->in('courses.id', ':ids'))
  41. ->setParameter('ids', $idsCourses);
  42. }
  43. $qb
  44. ->andWhere('courses.organization = :organization')
  45. ->andWhere('courses.isCanceled = :canceled')
  46. ->leftJoin('courses.timeline', 'timeline')
  47. ->leftJoin('timeline.eventRecur', 'booking_recurr')
  48. ->setParameter('organization', $organization)
  49. ->setParameter('canceled', false)
  50. ->having('COUNT(timeline.id) = 0')
  51. ->having('COUNT(booking_recurr.id) = 0')
  52. ->groupBy('courses.id')
  53. ;
  54. return $qb->getQuery()->getResult();
  55. }
  56. }