src/Controller/AdminDashboardController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\PaidCourseList;
  4. use App\Entity\Session;
  5. use App\Entity\UserPlacementTest;
  6. use App\Form\CourseTrackEditType;
  7. use App\Notification\EmailNotification;
  8. use App\Repository\AbsenceLogRepository;
  9. use App\Repository\PaidCourseListRepository;
  10. use App\Subscription\SubscriptionHelper;
  11. use DateTimeImmutable;
  12. use DateTimeZone;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. /**
  19.  * @Route("admin")
  20.  * @Security("is_granted('ROLE_SECRETARIAT')")
  21.  */
  22. class AdminDashboardController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/", name="admin_dashboard", defaults={"teacher"=1})
  26.      */
  27.     public function index(PaidCourseListRepository $paidCourseListRepositoryRequest $request)
  28.     {
  29.         $date = new \DateTimeImmutable('now', new DateTimeZone('Africa/Cairo'));
  30.         if ($request->query->get('q')){
  31.             $q $request->query->get('q');
  32.             $dateChoosen = new \DateTimeImmutable($q, new DateTimeZone('Africa/Cairo'));
  33.         }else{
  34.             $dateChoosen $date;
  35.         }
  36.         $courseOfTheDay $paidCourseListRepository->getAllCoursesOfTheCurrentDay($dateChoosen);
  37.         return $this->render('admin/dashboard/index.html.twig', [
  38.             'coursesOfTheDay' => $courseOfTheDay,
  39.             'currentDay' => $date,
  40.         ]);
  41.     }
  42.     /**
  43.      * @Route("/course/tracking", name="admin_course_tracking", methods={"POST"})
  44.      * @param Request $request
  45.      * @param EntityManagerInterface $em
  46.      * @param PaidCourseListRepository $paidCourseListRepository
  47.      * @param SubscriptionHelper $subscriptionHelper
  48.      * @param EmailNotification $emailNotification
  49.      * @param EmailNotification\TicketEmailNotification $ticketEmailNotification
  50.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  51.      */
  52.     public function makeCourseAsDone(Request $requestEntityManagerInterface $emPaidCourseListRepository $paidCourseListRepositorySubscriptionHelper $subscriptionHelperEmailNotification $emailNotificationEmailNotification\TicketEmailNotification $ticketEmailNotificationEmailNotification\LevelTestEmailNotification $levelTestEmailNotification)
  53.     {
  54.         if ($request->isMethod('POST')) {
  55.             $appUser $this->getUser();
  56.             $coursesDone $request->get('done');
  57.             $coursesNotDone $request->get('notDone');
  58.             $coursesDoneStudentAbsent $request->get('studentAbsent');
  59.             $lostMinutes $request->get('lostMinutes');
  60.             $catchupMinutes $request->get('catchupMinutes');
  61.             $comments $request->get('comment');
  62.             $penalties $request->get('penalty');
  63.             if ($comments){
  64.                 foreach ($comments as $key => $comment){
  65.                     $course $paidCourseListRepository->findOneBy(['id'=> $key]);
  66.                     if($course){
  67.                         if ($course->getComment()){
  68.                             $course->setComment($course->getComment().' '.$comment);
  69.                         }else{
  70.                             $course->setComment($comment);
  71.                         }
  72.                         if($comment != ''){
  73.                             $course->setUpdateBy($appUser->getFullname())->setUpdateAt(new \DateTime());
  74.                         }
  75.                         $em->persist($course);
  76.                     }
  77.                 }
  78.             }
  79.             if ($lostMinutes){
  80.                 foreach ($lostMinutes as $key => $minute){
  81.                     $course $paidCourseListRepository->findOneBy(['id'=> $key]);
  82.                     if($course->getIsForGroup() == true){
  83.                         $session $course->getSessionGroup();
  84.                         $newTotal $session->incrementTotalListMinutes((int)$minute);
  85.                         $session->setTotalLostMinutes($newTotal);
  86.                         $course->setLostMinutes((int)$minute)
  87.                         ;
  88.                         $em->persist($course);
  89.                         $em->persist($session);
  90.                     }elseif ($course->getSubscriptionOrder() != null){
  91.                         $subscription $course->getSubscriptionOrder();
  92.                         $newTotal $subscription->incrementTotalListMinutes((int)$minute);
  93.                         $subscription->setTotalLostMinutes($newTotal);
  94.                         $course->setLostMinutes((int)$minute)
  95.                         ;
  96.                         $em->persist($course);
  97.                         $em->persist($subscription);
  98.                     }
  99.                     if($minute != ''){
  100.                         $course->setUpdateBy($appUser->getFullname())
  101.                             ->setUpdateAt(new \DateTime());
  102.                         $em->persist($course);
  103.                     }
  104.                 }
  105.             }
  106.             if ($catchupMinutes){
  107.                 foreach ($catchupMinutes as $key => $minute){
  108.                     $course $paidCourseListRepository->findOneBy(['id'=> $key]);
  109.                     if($course->getIsForGroup() == true){
  110.                         $session $course->getSessionGroup();
  111.                         $newTotal $session->decrementTotalListMinutes((int)$minute);
  112.                         $session->setTotalLostMinutes($newTotal);
  113.                         $course->setCatchUpMinutes((int)$minute);
  114.                         $em->persist($course);
  115.                         $em->persist($session);
  116.                     }elseif ($course->getSubscriptionOrder() != null){
  117.                         $subscription $course->getSubscriptionOrder();
  118.                         $newTotal $subscription->decrementTotalListMinutes((int)$minute);
  119.                         $subscription->setTotalLostMinutes($newTotal);
  120.                         $course->setCatchUpMinutes((int)$minute);
  121.                         $em->persist($course);
  122.                         $em->persist($subscription);
  123.                     }
  124.                     if($minute != ''){
  125.                         $course->setUpdateBy($appUser->getFullname())
  126.                             ->setUpdateAt(new \DateTime());
  127.                         $em->persist($course);
  128.                     }
  129.                 }
  130.             }
  131.             //Pour les cours fait
  132.             if ($coursesDone) {
  133.                 foreach ($coursesDone as $courseId) {
  134.                     $course $paidCourseListRepository->findOneBy(['id'=> $courseId]);
  135.                     if ($course->getIsCatchUpDate() == true){
  136.                         $catchup $course->getAbsenceLogRelated();
  137.                         $catchup->setWasCaughtUp(true);
  138.                         $catchup->setCatchUpSchedule(null);
  139.                         $em->persist($catchup);
  140.                     }
  141.                     if($course->getIsForGroup() == true){
  142.                         $session $course->getSessionGroup();
  143.                         $coursePrice $this->calculatePriceCourseForGroup($session);
  144.                         $course->setPrice($coursePrice);
  145.                         $em->persist($course);
  146.                     }
  147.                     $course->setIsDone(true)
  148.                         ->setUpdateAt(new \DateTime())
  149.                         ->setUpdateBy($appUser->getFullname())
  150.                         ->setIsCanceled(false)
  151.                         ->setIsCanceledByUs(false)
  152.                     ;
  153.                     $em->persist($course);
  154.                 }
  155.                 $em->flush();
  156.             }
  157.             //Pour les cours non fait
  158.             if($coursesNotDone) {
  159.                 foreach ($coursesNotDone as $courseId) {
  160.                     $course $paidCourseListRepository->findOneBy(['id'=> $courseId]);
  161.                     if($course->getIsForGroup() == true){
  162.                         $session $course->getSessionGroup();
  163.                         $course->setIsCanceled(true)
  164.                             ->setUpdateAt(new \DateTime())
  165.                             ->setUpdateBy($appUser->getFullname())
  166.                         ;
  167.                         $lastTwoCourses $paidCourseListRepository->findLastCourseForGroup($session->getId());
  168.                         $lastBeforeCourseDate =  DateTimeImmutable::createFromMutable($lastTwoCourses[1]->getCourseDate());
  169.                         $lastBeforeCourseSchedule $lastTwoCourses[1]->getTeacherSchedule();
  170.                         $newEndDate $lastBeforeCourseDate->modify('+1 week');
  171.                         $session->setEndDate($newEndDate);
  172.                         $paidCourse = new PaidCourseList();
  173.                         $paidCourse->setTeacherSchedule($lastBeforeCourseSchedule)
  174.                             ->setCourseDate($newEndDate)
  175.                             ->setIsDone(false)
  176.                             ->setIsCanceled(false)
  177.                             ->setIsCatchUpDate(false)
  178.                             ->setIsForGroup(true)
  179.                             ->setIsCatchable(false)
  180.                             ->setIsWaiting(false)
  181.                             ->setSessionGroup($session)
  182.                             ->setIsAbandoned(false)
  183.                             ->setIsCanceledForHoliday(false)
  184.                             ->setIsTest(false)
  185.                             ->setIsCanceledByStudent(false)
  186.                             ->setIsCanceledByUs(false)
  187.                         ;
  188.                         $em->persist($session);
  189.                         $em->persist($course);
  190.                         $em->persist($paidCourse);
  191.                         $emailNotification->notifyStudentGroupNewEndDate($session$course$newEndDate);
  192.                     }elseif ($course->getSubscriptionOrder() != null){
  193.                         $subscription $course->getSubscriptionOrder();
  194.                         $course->setUpdateAt(new \DateTime())
  195.                             ->setUpdateBy($appUser->getFullname());
  196.                         $em->persist($course);
  197.                         if ($course->getIsCatchUpDate() == true){
  198.                             $catchup =  $course->getAbsenceLogRelated();
  199.                             $catchup->setCatchUpSchedule(null);
  200.                             $catchup->setIsCanceled(true);
  201.                             $em->persist($catchup);
  202.                         }
  203.                         $subscriptionHelper->cancelPaidCourse($course);
  204.                         $subscriptionHelper->addNewAbsenceToCatchUp($course$subscription);
  205.                         $emailNotification->notifyStudentAddReportForCanceledCourse($course$subscription);
  206.                     }elseif ($course->getVideoRegistration() != null){
  207.                         $videoCourseRegistration $course->getVideoRegistration();
  208.                         $videoCourseRegistration->setNbLesson($videoCourseRegistration->getNbLesson() + 1);
  209.                         $course->setUpdateAt(new \DateTime())
  210.                             ->setUpdateBy($appUser->getFullname())
  211.                             ->setIsCanceled(true)
  212.                             ->setIsCanceledByUs(true)
  213.                         ;
  214.                         $em->persist($videoCourseRegistration);
  215.                         $emailNotification->notifyStudentVideoCourseCanceled($videoCourseRegistration$course);
  216.                     }elseif ($course->getTicketOrder() != null){
  217.                         $ticketOrder $course->getTicketOrder();
  218.                         $ticketOrder->setClassLeft($ticketOrder->getClassLeft() + 1);
  219.                         $course->setUpdateAt(new \DateTime())
  220.                             ->setUpdateBy($appUser->getFullname())
  221.                             ->setIsCanceled(true)
  222.                             ->setIsCanceledByUs(true)
  223.                         ;
  224.                         $em->persist($ticketOrder);
  225.                         $ticketEmailNotification->cancelTicketLessonEmailNotification($course);
  226.                     }elseif ($course->getUserTestLevel() != null){
  227.                         $course->setIsCanceledByUs(true)
  228.                             ->setIsCanceled(true)
  229.                             ->setIsDone(false)
  230.                             ->setUpdateBy($appUser->getFullname())
  231.                         ;
  232.                         $levelTest $course->getUserTestLevel();
  233.                         $levelTest->setIsCanceledbyUs(true);
  234.                         $em->persist($levelTest);
  235.                         $levelTestEmailNotification->notifyStudentTestCanceled($course);
  236.                     }
  237.                 }
  238.                 $em->flush();
  239.             }
  240.             //Pour les cours où l'élève était absent et le prof à attendu
  241.             if($coursesDoneStudentAbsent) {
  242.                 foreach ($coursesDoneStudentAbsent as $courseId) {
  243.                     $course $paidCourseListRepository->findOneBy(['id'=> $courseId]);
  244.                     if ($course->getIsCatchUpDate() == true){
  245.                         $catchup $course->getAbsenceLogRelated();
  246.                         $catchup->setCatchUpSchedule(null);
  247.                         $catchup->setWasCaughtUp(true);
  248.                         $em->persist($catchup);
  249.                     }
  250.                     if($course->getIsForGroup() == true){
  251.                         $session $course->getSessionGroup();
  252.                         $coursePrice $this->calculatePriceCourseForGroup($session);
  253.                         $course->setPrice($coursePrice)
  254.                             ->setUpdateAt(new \DateTime())
  255.                             ->setUpdateBy($appUser->getFullname())
  256.                         ;
  257.                         $em->persist($course);
  258.                     }
  259.                     if ($course->getUserTestLevel() != null){
  260.                         $userLevelTest $course->getUserTestLevel();
  261.                         $userLevelTest->setIsStudentAbsent(true)
  262.                         ;
  263.                         $em->persist($userLevelTest);
  264.                     }
  265.                     $course->setIsDone(true)
  266.                         ->setIsWaiting(true)
  267.                         ->setUpdateAt(new \DateTime())
  268.                         ->setUpdateBy($appUser->getFullname())
  269.                     ;
  270.                     $em->persist($course);
  271.                 }
  272.                 $em->flush();
  273.             }
  274.             if($penalties){
  275.                 foreach ($penalties as $key => $penalty){
  276.                     $course $paidCourseListRepository->findOneBy(['id'=> $key]);
  277.                     $course->setPenalty((float)$penalty);
  278.                     $em->persist($course);
  279.                     $em->flush();
  280.                 }
  281.             }
  282.             $em->flush();
  283.             $this->addFlash('success''Tracking sent with success');
  284.             return $this->redirectToRoute('admin_dashboard');
  285.         }
  286.     }
  287.     /**
  288.      * @Route("/course/tracking/{id}/edit", name="admin_course_tracking_edit", methods={"GET", "POST"})
  289.      */
  290.     public function courseTrackingEdit($idPaidCourseListRepository $paidCourseListRepositoryRequest $requestEntityManagerInterface $emEmailNotification $emailNotificationSubscriptionHelper $subscriptionHelperAbsenceLogRepository $absenceLogRepositoryEmailNotification\LevelTestEmailNotification $levelTestEmailNotification)
  291.     {
  292.         $courseToEdit $paidCourseListRepository->findOneBy(['id' => $id]);
  293.         $oldLostMinutes $courseToEdit->getLostMinutes();
  294.         $oldCatchUpMinutes $courseToEdit->getCatchUpMinutes();
  295.         $oldCourseIsDone $courseToEdit->getIsDone();
  296.         $oldCourseIsCanceled $courseToEdit->getIsCanceled();
  297.         $oldCourseIsWaiting $courseToEdit->getIsWaiting();
  298.         $form $this->createForm(CourseTrackEditType::class, $courseToEdit);
  299.         $form->handleRequest($request);
  300.         if ($form->isSubmitted() && $form->isValid()) {
  301.             $course $form->getData();
  302.             $appUser $this->getUser();
  303.             if ($oldLostMinutes != $course->getLostMinutes()){
  304.                 if ($oldLostMinutes == 0){
  305.                     if($course->getIsForGroup() == true){
  306.                         $session $course->getSessionGroup();
  307.                         $newTotal $session->incrementTotalListMinutes((int)$course->getLostMinutes());
  308.                         $session->setTotalLostMinutes($newTotal);
  309.                         $em->persist($session);
  310.                     }elseif ($course->getSubscriptionOrder() != null){
  311.                         $subscription $course->getSubscriptionOrder();
  312.                         $newTotal $subscription->incrementTotalListMinutes((int)$course->getLostMinutes());
  313.                         $subscription->setTotalLostMinutes($newTotal);
  314.                         $em->persist($subscription);
  315.                     }
  316.                 }else{
  317.                     if($course->getIsForGroup() == true){
  318.                         $session $course->getSessionGroup();
  319.                         $newTotal1 $session->decrementTotalListMinutes((int)$oldLostMinutes);
  320.                         $session->setTotalLostMinutes($newTotal1);
  321.                         $em->persist($session);
  322.                         $em->flush();
  323.                         $newTotal2 $session->incrementTotalListMinutes((int)$course->getLostMinutes());
  324.                         $session->setTotalLostMinutes($newTotal2);
  325.                         $em->persist($session);
  326.                         $em->flush();
  327.                     }elseif ($course->getSubscriptionOrder() != null){
  328.                         $subscription $course->getSubscriptionOrder();
  329.                         $newTotal1 $subscription->decrementTotalListMinutes((int)$oldLostMinutes);
  330.                         $subscription->setTotalLostMinutes($newTotal1);
  331.                         $em->persist($subscription);
  332.                         $em->flush();
  333.                         $newTotal2 $subscription->incrementTotalListMinutes((int)$course->getLostMinutes());
  334.                         $subscription->setTotalLostMinutes($newTotal2);
  335.                         $em->persist($subscription);
  336.                         $em->flush();
  337.                     }
  338.                 }
  339.             }
  340.             if ($oldCatchUpMinutes != $course->getCatchUpMinutes()){
  341.                 if($oldCatchUpMinutes == 0){
  342.                     if($course->getIsForGroup() == true){
  343.                         $session $course->getSessionGroup();
  344.                         $newTotal $session->decrementTotalListMinutes((int)$course->getCatchUpMinutes());
  345.                         $session->setTotalLostMinutes($newTotal);
  346.                         $em->persist($session);
  347.                     }elseif ($course->getSubscriptionOrder() != null){
  348.                         $subscription $course->getSubscriptionOrder();
  349.                         $newTotal $subscription->decrementTotalListMinutes((int)$course->getCatchUpMinutes());
  350.                         $subscription->setTotalLostMinutes($newTotal);
  351.                         $em->persist($subscription);
  352.                     }
  353.                 }else{
  354.                     if($course->getIsForGroup() == true){
  355.                         $session $course->getSessionGroup();
  356.                         $newTotal1 $session->incrementTotalListMinutes((int)$oldCatchUpMinutes);
  357.                         $session->setTotalLostMinutes($newTotal1);
  358.                         $em->persist($session);
  359.                         $em->flush();
  360.                         $newTotal2 $session->decrementTotalListMinutes((int)$course->getCatchUpMinutes());
  361.                         $session->setTotalLostMinutes($newTotal2);
  362.                         $em->persist($session);
  363.                         $em->flush();
  364.                     }elseif ($course->getSubscriptionOrder() != null){
  365.                         $subscription $course->getSubscriptionOrder();
  366.                         $newTotal1 $subscription->incrementTotalListMinutes((int)$oldCatchUpMinutes);
  367.                         $subscription->setTotalLostMinutes($newTotal1);
  368.                         $em->persist($subscription);
  369.                         $em->flush();
  370.                         $newTotal2 $subscription->decrementTotalListMinutes((int)$course->getCatchUpMinutes());
  371.                         $subscription->setTotalLostMinutes($newTotal2);
  372.                         $em->persist($subscription);
  373.                         $em->flush();
  374.                     }
  375.                 }
  376.             }
  377.             //Pour les cours fait
  378.             if ($course->getIsDone() != $oldCourseIsDone){
  379.                 if ($course->getIsDone() == true) {
  380.                     if ($course->getIsCatchUpDate() == true){
  381.                         $catchup $course->getAbsenceLogRelated();
  382.                         $catchup->setWasCaughtUp(true);
  383.                         $catchup->setCatchUpSchedule(null);
  384.                         $em->persist($catchup);
  385.                     }
  386.                     if($course->getAbsenceLog() != null){
  387.                         $absenceToRemove $absenceLogRepository->findOneBy([
  388.                             'id' => $course->getAbsenceLog()->getId()
  389.                         ]);
  390.                         $absenceToRemove->setIsAbandoned(true);
  391.                         //TODO Voir pourquoi erreur quand on efface
  392.                         //$em->remove($absenceToRemove);
  393.                         $em->flush();
  394.                     }
  395.                     if($course->getIsForGroup() == true){
  396.                         $session $course->getSessionGroup();
  397.                         $coursePrice $this->calculatePriceCourseForGroup($session);
  398.                         $course->setPrice($coursePrice);
  399.                         $lastTwoCourses $paidCourseListRepository->findLastCourseForGroup($session->getId());
  400.                         $lastBeforeCourseDate =  DateTimeImmutable::createFromMutable($lastTwoCourses[1]->getCourseDate());
  401.                         $lastCourseDate =  $lastTwoCourses[0];
  402.                         $session->setEndDate($lastBeforeCourseDate);
  403.                         $em->remove($lastCourseDate);
  404.                         $em->persist($session);
  405.                         $em->persist($course);
  406.                         $em->flush();
  407.                     }
  408.                     if ($course->getVideoRegistration() != null){
  409.                         if ($course->getIsCanceledByUs() == true){
  410.                             $videoCourseRegistration $course->getVideoRegistration();
  411.                             $videoCourseRegistration->setNbLesson($videoCourseRegistration->getNbLesson() - 1);
  412.                             $em->persist($videoCourseRegistration);
  413.                         }
  414.                     }
  415.                     if ($course->getUserTestLevel() != null){
  416.                         /** @var UserPlacementTest $levelTest */
  417.                         $levelTest $course->getUserTestLevel();
  418.                         $levelTest->setIsCanceledbyUs(false)
  419.                             ->setIsStudentAbsent(false)
  420.                             ;
  421.                     }
  422.                     $course->setIsDone(true)
  423.                             ->setIsCanceled(false)
  424.                             ->setIsWaiting(false)
  425.                             ->setIsCatchable(false)
  426.                             ->setIsCanceledByUs(false)
  427.                             ->setIsCanceledByStudent(false)
  428.                             ->setUpdateAt(new \DateTime())
  429.                             ->setUpdateBy($appUser->getFullname())
  430.                     ;
  431.                     $em->persist($course);
  432.                 }
  433.             }
  434.             //Pour les cours non fait
  435.             if ($course->getIsCanceled() != $oldCourseIsCanceled){
  436.                 if($course->getIsCanceled() == true) {
  437.                     if($course->getIsForGroup() == true){
  438.                         $session $course->getSessionGroup();
  439.                         $course->setIsCanceled(true)
  440.                                 ->setPrice(0)
  441.                                 ->setUpdateAt(new \DateTime())
  442.                                 ->setUpdateBy($appUser->getFullname())
  443.                         ;
  444.                         $lastTwoCourses $paidCourseListRepository->findLastCourseForGroup($session->getId());
  445.                         $lastBeforeCourseDate =  DateTimeImmutable::createFromMutable($lastTwoCourses[1]->getCourseDate());
  446.                         $lastBeforeCourseSchedule $lastTwoCourses[1]->getTeacherSchedule();
  447.                         $newEndDate $lastBeforeCourseDate->modify('+1 week');
  448.                         $session->setEndDate($newEndDate);
  449.                         $paidCourse = new PaidCourseList();
  450.                         $paidCourse->setTeacherSchedule($lastBeforeCourseSchedule)
  451.                             ->setCourseDate($newEndDate)
  452.                             ->setIsDone(false)
  453.                             ->setIsCanceled(false)
  454.                             ->setIsCatchUpDate(false)
  455.                             ->setIsForGroup(true)
  456.                             ->setIsCatchable(false)
  457.                             ->setIsWaiting(false)
  458.                             ->setSessionGroup($session)
  459.                             ->setIsAbandoned(false)
  460.                             ->setIsCanceledForHoliday(false)
  461.                         ;
  462.                         $em->persist($session);
  463.                         $em->persist($course);
  464.                         $em->persist($paidCourse);
  465.                         $emailNotification->notifyStudentGroupNewEndDate($session$course$newEndDate);
  466.                     }elseif ($course->getSubscriptionOrder() != null){
  467.                         $subscription $course->getSubscriptionOrder();
  468.                         if ($course->getIsCatchUpDate() == true){
  469.                             $catchup =  $course->getAbsenceLogRelated();
  470.                             $catchup->setCatchUpSchedule(null);
  471.                             $catchup->setIsCanceled(true);
  472.                             $em->persist($catchup);
  473.                         }
  474.                         $subscriptionHelper->cancelPaidCourse($course);
  475.                         $subscriptionHelper->addNewAbsenceToCatchUp($course$subscription);
  476.                         $emailNotification->notifyStudentAddReportForCanceledCourse($course$subscription);
  477.                     }elseif ($course->getVideoRegistration() != null){
  478.                         $videoCourseRegistration $course->getVideoRegistration();
  479.                         $videoCourseRegistration->setNbLesson($videoCourseRegistration->getNbLesson() + 1);
  480.                         $em->persist($videoCourseRegistration);
  481.                     }if ($course->getUserTestLevel() != null){
  482.                         /** @var UserPlacementTest $levelTest */
  483.                         $levelTest $course->getUserTestLevel();
  484.                         $levelTest->setIsCanceledbyUs(true)
  485.                             ->setIsStudentAbsent(false)
  486.                         ;
  487.                         $levelTestEmailNotification->notifyStudentTestCanceled($course);
  488.                     }
  489.                     $course->setIsDone(false)
  490.                             ->setIsWaiting(false)
  491.                             ->setIsCanceledByUs(true)
  492.                             ->setIsCanceledByStudent(false)
  493.                             ->setUpdateAt(new \DateTime())
  494.                             ->setUpdateBy($appUser->getFullname())
  495.                     ;
  496.                     $em->flush();
  497.                     if ($course->getVideoRegistration() != null){
  498.                         $emailNotification->notifyStudentVideoCourseCanceled($videoCourseRegistration$course);
  499.                     }
  500.                 }
  501.             }
  502.             //Pour les cours où l'élève était absent et le prof à attendu
  503.             if ($course->getIsWaiting() != $oldCourseIsWaiting){
  504.                 if($course->getIsWaiting() == true) {
  505.                     if ($course->getIsCatchUpDate() == true){
  506.                         $catchup $course->getAbsenceLog();
  507.                         //$catchup->setCourseToCatchUp(null);
  508.                         $catchup->setIsCanceled(true);
  509.                         $em->persist($catchup);
  510.                         $em->remove($catchup);
  511.                     }
  512.                     if($course->getIsForGroup() == true){
  513.                         $session $course->getSessionGroup();
  514.                         $coursePrice $this->calculatePriceCourseForGroup($session);
  515.                         $course->setPrice($coursePrice)
  516.                             ->setUpdateAt(new \DateTime())
  517.                             ->setUpdateBy($appUser->getFullname())
  518.                         ;
  519.                         $em->persist($course);
  520.                     }
  521.                     if ($course->getVideoRegistration() != null){
  522.                         if ($course->getIsCanceledByUs() == true){
  523.                             $videoCourseRegistration $course->getVideoRegistration();
  524.                             $videoCourseRegistration->setNbLesson($videoCourseRegistration->getNbLesson() - 1);
  525.                             $em->persist($videoCourseRegistration);
  526.                         }
  527.                     }
  528.                     if ($course->getUserTestLevel() != null){
  529.                         /** @var UserPlacementTest $levelTest */
  530.                         $levelTest $course->getUserTestLevel();
  531.                         $levelTest->setIsCanceledbyUs(false)
  532.                             ->setIsStudentAbsent(true)
  533.                         ;
  534.                     }
  535.                     $course->setIsDone(true)
  536.                         ->setIsWaiting(true)
  537.                         ->setIsCanceled(false)
  538.                         ->setIsCanceledByUs(false)
  539.                         ->setIsCanceledByStudent(false)
  540.                         ->setUpdateAt(new \DateTime())
  541.                         ->setUpdateBy($appUser->getFullname())
  542.                     ;
  543.                     $em->persist($course);
  544.                     $em->flush();
  545.                 }
  546.             }
  547.             $courseToEdit->setUpdateAt(new \DateTime())
  548.                 ->setUpdateBy($appUser->getFullname());
  549.             $em->persist($courseToEdit);
  550.             $em->flush();
  551.             $this->addFlash('success''تم تغيير التقرير بالنجاح');
  552.             return $this->redirectToRoute('admin_dashboard');
  553.         }
  554.         return $this->render('admin/dashboard/edit-course-tracking.html.twig', [
  555.             'form' => $form->createView(),
  556.             'course' =>$courseToEdit
  557.         ]);
  558.     }
  559.     public function calculatePriceCourseForGroup(Session $session)
  560.     {
  561.         $total 0;
  562.         $orders $session->getSessionOrder();
  563.         $nbCourses 26;
  564.         if ($session->getLevel()->getSubject()->getTagName() == "alKunuz"){
  565.             $nbCourses 26;
  566.         }else{
  567.             $nbCourses 22;
  568.         }
  569.         foreach ($orders as $order){
  570.             $paidAmount $order->getAmountPaid();
  571.             $coursePrice $paidAmount/$nbCourses;
  572.             $fees = ($coursePrice *2.9) /100;
  573.             $finalCoursePrice $coursePrice $fees;
  574.             $total += $finalCoursePrice;
  575.         }
  576.         return number_format($total,2);
  577.     }
  578.     /*
  579.     /**
  580.      * @Route("/course/clickup/{id}", name="admin_course_alert_clickup", methods={"GET", "POST"})
  581.      */
  582.     /*
  583.     public function alertOnClickup(PaidCourseList $paidCourseList)
  584.     {
  585.         if ($paidCourseList->getIsForGroup())
  586.         {
  587.             $sessionId = $paidCourseList->getSessionGroup()->getId();
  588.             $url = $this->container->get('router')->generate('admin_session_list', [
  589.                 'id' => $sessionId
  590.             ]);
  591.         }elseif ($paidCourseList->getSubscriptionOrder() != null)
  592.         {
  593.             $subscriptionId = $paidCourseList->getSubscriptionOrder()->getId();
  594.             $url = $this->container->get('router')->generate('admin_subscription_show', [
  595.                 'id' => $subscriptionId
  596.             ]);
  597.         }else{
  598.             $this->addFlash('error', 'هذا الفروم لطلاب لديهم اشتراك أو مجموعة. اخبر الإدارة');
  599.             $url = '#';
  600.             return $this->redirectToRoute('admin_dashboard');
  601.         }
  602.         return $this->render('admin/dashboard/edit-course-tracking.html.twig', [
  603.             'url' => $url,
  604.         ]);
  605.     }*/
  606. }