src/Repository/TeacherRepository.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Subject;
  4. use App\Entity\SubjectLevel;
  5. use App\Entity\Teacher;
  6. use App\Entity\Category;
  7. use Doctrine\ORM\Query\Expr\Join;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Symfony\Bridge\Doctrine\RegistryInterface;
  10. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  11. /**
  12.  * @method Teacher|null find($id, $lockMode = null, $lockVersion = null)
  13.  * @method Teacher|null findOneBy(array $criteria, array $orderBy = null)
  14.  * @method Teacher[]    findAll()
  15.  * @method Teacher[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  16.  */
  17. class TeacherRepository extends ServiceEntityRepository
  18. {
  19.     public function __construct(ManagerRegistry $registry)
  20.     {
  21.         parent::__construct($registryTeacher::class);
  22.     }
  23.     // /**
  24.     //  * @return Teacher[] Returns an array of Teacher objects
  25.     //  */
  26.     /*
  27.     public function findByExampleField($value)
  28.     {
  29.         return $this->createQueryBuilder('t')
  30.             ->andWhere('t.exampleField = :val')
  31.             ->setParameter('val', $value)
  32.             ->orderBy('t.id', 'ASC')
  33.             ->setMaxResults(10)
  34.             ->getQuery()
  35.             ->getResult()
  36.         ;
  37.     }
  38.     */
  39.     public function findAllForAdminList()
  40.     {
  41.         return $this->createQueryBuilder('t')
  42.                     ->leftJoin('t.userId''t_u')
  43.                     ->addSelect('t_u')
  44.                     ->leftJoin('t.categories''t_c')
  45.                     ->addSelect('t_c')
  46.                     ->leftJoin('t.teacherSubjects''t_ts')
  47.                     ->addSelect('t_ts')
  48.                     ->leftJoin('t_ts.subject''t_ts_s')
  49.                     ->addSelect('t_ts_s')
  50.                     ->getQuery()
  51.                     ->getResult();
  52.     }
  53.     //Optimisé (par moi)
  54.     public function teachersList()
  55.     {
  56.         return $this->createQueryBuilder('t')
  57.                     ->addSelect('user_id')
  58.                     ->leftJoin('t.userId''user_id')
  59.                     ->getQuery()
  60.                     ->getResult();
  61.     }
  62.     public function getActifTeachers()
  63.     {
  64.         return $this->createQueryBuilder('t')
  65.                     ->leftJoin('t.userId''userId')
  66.                     ->addSelect('userId')
  67.                     ->andWhere('t.isActif = :true')
  68.                     ->setParameter('true'true)
  69.                     ->orderBy('userId.firstname')
  70.                     ->getQuery()
  71.                     ->getResult();
  72.     }
  73.     public function getActifTeachersForSubjectLevel(SubjectLevel $subjectLevel, ?bool $forGroup null)
  74.     {
  75.         $query $this->createQueryBuilder('t')
  76.                       ->leftJoin('t.userId''userId')
  77.                       ->innerJoin('t.teacherSubjects''teacherSubjects')
  78.                       ->andWhere('teacherSubjects.subject = :subject')
  79.                       ->setParameter('subject'$subjectLevel->getSubject())
  80.                       ->innerJoin('teacherSubjects.fromLevel''fromLevel')
  81.                       ->innerJoin('teacherSubjects.toLevel''toLevel')
  82.                       ->innerJoin(SubjectLevel::class, 'subjectlevel'Join::WITH'subjectlevel.order >= fromLevel.order AND subjectlevel.order <= toLevel.order AND subjectlevel.id = :subjectLevelId')
  83.                       ->setParameter('subjectLevelId'$subjectLevel->getId())
  84.                       ->addSelect('userId')
  85.                       ->andWhere('t.isActif = :true')
  86.                       ->setParameter('true'true)
  87.                       ->orderBy('userId.firstname');
  88.         if ($forGroup === true) {
  89.             $query->andWhere('teacherSubjects.isGroup = 1');
  90.         }
  91.         return $query->getQuery()
  92.                      ->getResult();
  93.     }
  94.     public function getInactiveTeachers()
  95.     {
  96.         return $this->createQueryBuilder('t')
  97.                     ->leftJoin('t.userId''userId')
  98.                     ->addSelect('userId')
  99.                     ->andWhere('t.isActif = :false')
  100.                     ->setParameter('false'false)
  101.                     ->orderBy('userId.firstname')
  102.                     ->getQuery()
  103.                     ->getResult();
  104.     }
  105.     //Optimisé (par moi)
  106.     public function findOneTeacherById($id)
  107.     {
  108.         return $this->createQueryBuilder('t')
  109.                     ->addSelect('userId')
  110.                     ->leftJoin('t.userId''userId')
  111.                     ->andWhere('t.id = :id')
  112.                     ->setParameter('id'$id)
  113.                     ->getQuery()
  114.                     ->getOneOrNullResult();
  115.     }
  116.     public function findTeachersHasVideoCourses()
  117.     {
  118.         return $this->createQueryBuilder('t')
  119.                     ->leftJoin('t.videoPrograms''v')
  120.                     ->addSelect('v')
  121.                     ->andWhere('v.teacher = t')
  122.                     ->getQuery()
  123.                     ->getResult();
  124.     }
  125.     public function findTeachersWithFreeSchedules()
  126.     {
  127.         $currentDate = new \DateTimeImmutable();
  128.         $tomorrow    $currentDate->modify('+1 day');
  129.         $limiteDate  $currentDate->modify('+7 days');
  130.         return $this->createQueryBuilder('t')
  131.                     ->leftJoin('t.schedules''s')
  132.                     ->addSelect('s')
  133.                     ->andWhere('s.isFree = :true')
  134.                     ->andWhere('s.forCatchUp = :false')
  135.                     ->setParameter('false'false)
  136.                     ->andWhere('s.isBlocked = :false')
  137.                     ->setParameter('false'false)
  138.                     ->andWhere('s.freeDate BETWEEN :tomorrow AND :limiteDate')
  139.                     ->setParameter('true'true)
  140.                     ->setParameter('tomorrow'$tomorrow)
  141.                     ->setParameter('limiteDate'$limiteDate)
  142.                     ->orderBy('s.freeDate''ASC')
  143.                     ->getQuery()
  144.                     ->getResult();
  145.     }
  146.     public function findTeachersWithFreeSchedulesByCategoryAndGender($categoryNameId$genderId$level$isChild)
  147.     {
  148.         //reception possible $level : beginner, intermediate, advanced, null
  149.         //reception possible isChild : "0", "1", null
  150.         //UTILISÉ DANS L'INDEX DES HORAIRES LIBRES AVANT LE CHECKOUT
  151.         $currentDate = new \DateTimeImmutable('03:00');
  152.         $tomorrow    $currentDate->modify('+1 day');
  153.         $limitDate   $currentDate->modify('+8 days');
  154.         $qb $this->createQueryBuilder('teacher')
  155.                    ->leftJoin('teacher.schedules''s')
  156.                    ->leftJoin('s.scheduleInstitute''s_si')
  157.                    ->leftJoin('teacher.teacherSubjects''ts')
  158.                    ->leftJoin('ts.subject''ts_s')
  159.                    ->leftJoin('ts_s.category''ts_s_c')
  160.                    ->leftJoin('teacher.categories''c')
  161.                    ->leftJoin('teacher.userId''userId')
  162.                    ->leftJoin('userId.gender''g')
  163.                    ->addSelect('s')
  164.                    ->addSelect('s_si')
  165.                    ->addSelect('ts')
  166.                    ->addSelect('ts_s''ts_s_c')
  167.                    ->addSelect('c')
  168.                    ->addSelect('userId')
  169.                    ->addSelect('g')
  170.                    ->andWhere('s.isFree = :true')
  171.                    ->andWhere('s.forCatchUp = :false')
  172.                    ->setParameter('false'false)
  173.                    ->andWhere('s.isBlocked = :false')
  174.                    ->setParameter('false'false)
  175.                    ->andWhere('s.forVideo = :false')
  176.                    ->setParameter('false'false)
  177.                    ->andWhere('s.isForLevelTest = :false')
  178.                    ->setParameter('false'false)
  179.                    ->andWhere('c.id = :categoryNameId')
  180.                    ->setParameter('categoryNameId'$categoryNameId)
  181.                    ->andWhere('s.freeDate BETWEEN :tomorrow AND :limitDate')
  182.                    ->setParameter('true'true)
  183.                    ->setParameter('tomorrow'$tomorrow)
  184.                    ->setParameter('limitDate'$limitDate);
  185.         if ($level) {
  186.             if ($level == "beginner") {
  187.                 $qb->andWhere('teacher.isBeginner = :true')
  188.                    ->setParameter('true'true);
  189.             }
  190.             if ($level == "intermediate") {
  191.                 $qb->andWhere('teacher.isIntermediate = :true')
  192.                    ->setParameter('true'true);
  193.             }
  194.             if ($level == "advanced") {
  195.                 $qb->andWhere('teacher.isAdvanced = :true')
  196.                    ->setParameter('true'true);
  197.             }
  198.         }
  199.         if ($isChild) {
  200.             if ($isChild == "1") {
  201.                 $qb->andWhere('teacher.forChildren = :true')
  202.                    ->setParameter('true'true)
  203.                    ->andWhere('g.id = :feminin OR g.id= :masculin')
  204.                    ->setParameter('feminin'2)
  205.                    ->setParameter('masculin'1);
  206.             }
  207.         } else {
  208.             $qb->andWhere('g.id = :genderId')
  209.                ->setParameter('genderId'$genderId);
  210.         }
  211.         $qb->orderBy('s.freeDate''ASC');
  212.         return $qb->getQuery()->getResult();
  213.     }
  214.     public function findTeachersWithFreeSchedulesByCategoryAndGenderForTickets($categoryNameId$genderId)
  215.     {
  216.         $currentDate = new \DateTimeImmutable('03:00');
  217.         $tomorrow    $currentDate->modify('+1 day');
  218.         $limitDate   $currentDate->modify('+8 days');
  219.         return $this->createQueryBuilder('t')
  220.                     ->leftJoin('t.schedules''s')
  221.                     ->leftJoin('s.scheduleInstitute''s_si')
  222.                     ->leftJoin('t.teacherSubjects''ts')
  223.                     ->leftJoin('ts.subject''ts_s')
  224.                     ->leftJoin('ts_s.category''ts_s_c')
  225.                     ->leftJoin('t.categories''c')
  226.                     ->leftJoin('t.userId''userId')
  227.                     ->leftJoin('userId.gender''g')
  228.                     ->addSelect('s')
  229.                     ->addSelect('s_si')
  230.                     ->addSelect('ts')
  231.                     ->addSelect('ts_s''ts_s_c')
  232.                     ->addSelect('c')
  233.                     ->addSelect('userId')
  234.                     ->addSelect('g')
  235.                     ->andWhere('s.isFree = :true')
  236.                     ->andWhere('s.isBlocked = :false')
  237.                     ->setParameter('false'false)
  238.                     ->andWhere('s.isForLevelTest = :false')
  239.                     ->setParameter('false'false)
  240.                     ->andWhere('c.id = :categoryNameId')
  241.                     ->setParameter('categoryNameId'$categoryNameId)
  242.                     ->andWhere('g.id = :genderId')
  243.                     ->setParameter('genderId'$genderId)
  244.                     ->andWhere('s.freeDate BETWEEN :tomorrow AND :limitDate')
  245.                     ->setParameter('true'true)
  246.                     ->setParameter('tomorrow'$tomorrow)
  247.                     ->setParameter('limitDate'$limitDate)
  248.                     ->orderBy('s.freeDate''ASC')
  249.                     ->getQuery()
  250.                     ->getResult();
  251.     }
  252.     //For Level Test
  253.     public function findTeachersWithFreeSchedulesBySubjectAndGenderForTest($subjectId$genderId$limitDateRegistration)
  254.     {
  255.         $currentDate = new \DateTimeImmutable('03:00');
  256.         $tomorrow    $currentDate->modify('+1 day');
  257.         //$limitDate = $limitDateRegistration;
  258.         $limitDate $currentDate->modify('+2 weeks');
  259.         return $this->createQueryBuilder('t')
  260.                     ->leftJoin('t.schedules''s')
  261.                     ->leftJoin('s.scheduleInstitute''s_si')
  262.                     ->leftJoin('t.teacherSubjects''ts')
  263.                     ->leftJoin('ts.subject''ts_s')
  264.                     ->leftJoin('ts_s.category''ts_s_c')
  265.                     ->leftJoin('t.categories''c')
  266.                     ->leftJoin('t.userId''userId')
  267.                     ->leftJoin('userId.gender''g')
  268.                     ->leftJoin('t.teacherLeveltests''teacherLeveltests')
  269.                     ->addSelect('s')
  270.                     ->addSelect('s_si')
  271.                     ->addSelect('ts')
  272.                     ->addSelect('ts_s''ts_s_c')
  273.                     ->addSelect('c')
  274.                     ->addSelect('userId')
  275.                     ->addSelect('g')
  276.                     ->addSelect('teacherLeveltests')
  277.                     ->andWhere('s.isFree = :true')
  278.                     ->andWhere('s.isBlocked = :false')
  279.                     ->setParameter('false'false)
  280.                     ->andWhere('teacherLeveltests.subject = :subjectId')
  281.                     ->setParameter('subjectId'$subjectId)
  282.                     ->andWhere('g.id = :genderId')
  283.                     ->setParameter('genderId'$genderId)
  284.                     ->andWhere('s.freeDate BETWEEN :tomorrow AND :limitDate')
  285.                     ->setParameter('true'true)
  286.                     ->setParameter('tomorrow'$tomorrow)
  287.                     ->setParameter('limitDate'$limitDate)
  288.                     ->orderBy('s.freeDate''ASC')
  289.                     ->getQuery()
  290.                     ->getResult();
  291.     }
  292.     public function findTeachersWithFreeSchedulesBySubjectAndGenderForTestForRamadan($subjectId$genderId)
  293.     {
  294.         $currentDate = new \DateTimeImmutable('03:00');
  295.         $tomorrow    $currentDate->modify('+1 day');
  296.         $limitDate   $currentDate->modify('+2 weeks');
  297.         return $this->createQueryBuilder('t')
  298.                     ->leftJoin('t.schedules''s')
  299.                     ->leftJoin('s.scheduleInstitute''s_si')
  300.                     ->leftJoin('t.teacherSubjects''ts')
  301.                     ->leftJoin('ts.subject''ts_s')
  302.                     ->leftJoin('ts_s.category''ts_s_c')
  303.                     ->leftJoin('t.categories''c')
  304.                     ->leftJoin('t.userId''userId')
  305.                     ->leftJoin('userId.gender''g')
  306.                     ->leftJoin('t.teacherLeveltests''teacherLeveltests')
  307.                     ->addSelect('s')
  308.                     ->addSelect('s_si')
  309.                     ->addSelect('ts')
  310.                     ->addSelect('ts_s''ts_s_c')
  311.                     ->addSelect('c')
  312.                     ->addSelect('userId')
  313.                     ->addSelect('g')
  314.                     ->addSelect('teacherLeveltests')
  315.                     ->andWhere('s.isForLevelTest = :true')
  316.                     ->setParameter('true'true)
  317.                     ->andWhere('teacherLeveltests.subject = :subjectId')
  318.                     ->setParameter('subjectId'$subjectId)
  319.                     ->andWhere('g.id = :genderId')
  320.                     ->setParameter('genderId'$genderId)
  321.                     ->andWhere('s.freeDate BETWEEN :tomorrow AND :limitDate')
  322.                     ->setParameter('tomorrow'$tomorrow)
  323.                     ->setParameter('limitDate'$limitDate)
  324.                     ->orderBy('s.freeDate''ASC')
  325.                     ->getQuery()
  326.                     ->getResult();
  327.     }
  328.     public function findTeachersWithFreeSchedulesByCategoryAndGenderWithoutCurrentTeacher($categoryNameId$genderId$currentTeacher)
  329.     {
  330.         $currentDate = new \DateTimeImmutable('03:00');
  331.         $tomorrow    $currentDate->modify('+1 day');
  332.         $limitDate   $currentDate->modify('+8 days');
  333.         return $this->createQueryBuilder('teacher')
  334.                     ->leftJoin('teacher.schedules''schedules')
  335.                     ->leftJoin('teacher.teacherSubjects''teacher_subjects')
  336.                     ->leftJoin('teacher.categories''categories')
  337.                     ->leftJoin('teacher.userId''userId')
  338.                     ->leftJoin('userId.gender''gender')
  339.                     ->addSelect('schedules')
  340.                     ->addSelect('teacher_subjects')
  341.                     ->addSelect('categories')
  342.                     ->addSelect('userId')
  343.                     ->addSelect('gender')
  344.                     ->andWhere('schedules.isFree = :true')
  345.                     ->andWhere('schedules.forCatchUp = :false')
  346.                     ->setParameter('false'false)
  347.                     ->andWhere('schedules.isBlocked = :false')
  348.                     ->setParameter('false'false)
  349.                     ->andWhere('schedules.forVideo = :false')
  350.                     ->setParameter('false'false)
  351.                     ->andWhere('schedules.isForLevelTest = :false')
  352.                     ->setParameter('false'false)
  353.                     ->andWhere('categories.id = :categoryNameId')
  354.                     ->setParameter('categoryNameId'$categoryNameId)
  355.                     ->andWhere('gender.id = :genderId')
  356.                     ->setParameter('genderId'$genderId)
  357.                     ->andWhere('schedules.freeDate BETWEEN :tomorrow AND :limitDate')
  358.                     ->setParameter('true'true)
  359.                     ->andWhere('teacher != :currentTeacher')
  360.                     ->setParameter('currentTeacher'$currentTeacher)
  361.                     ->setParameter('tomorrow'$tomorrow)
  362.                     ->setParameter('limitDate'$limitDate)
  363.                     ->orderBy('schedules.freeDate''ASC')
  364.                     ->getQuery()
  365.                     ->getResult();
  366.     }
  367.     /*
  368.     public function findOneBySomeField($value): ?Teacher
  369.     {
  370.         return $this->createQueryBuilder('t')
  371.             ->andWhere('t.exampleField = :val')
  372.             ->setParameter('val', $value)
  373.             ->getQuery()
  374.             ->getOneOrNullResult()
  375.         ;
  376.     }
  377.     */
  378. }