src/Controller/School/ReportCardController.php line 223

Open in your IDE?
  1. <?php
  2. namespace App\Controller\School;
  3. use Knp\Snappy\Pdf;
  4. use App\Entity\User;
  5. use App\Entity\ReportCard;
  6. use App\Entity\SchoolMatter;
  7. use App\Entity\SettingLevel;
  8. use App\Entity\SchoolReportCard;
  9. use App\Entity\SchoolYearPeriode;
  10. use App\Form\School\ReportCardType;
  11. use App\Entity\SchoolAverageReportCard;
  12. use App\Entity\SchoolReportCardAbsence;
  13. use App\Repository\ReportCardRepository;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use App\Form\School\SchoolReportCardType;
  16. use App\Service\StudentAverageCalculator;
  17. use App\Repository\SchoolMatterRepository;
  18. use App\Repository\SettingLevelRepository;
  19. use App\Repository\SchoolTeacherRepository;
  20. use Knp\Component\Pager\PaginatorInterface;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use App\Repository\SchoolMatterTypeRepository;
  23. use App\Repository\SchoolReportCardRepository;
  24. use App\Repository\SettingClassroomRepository;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use App\Entity\RegistrationStudentRegistration;
  27. use App\Repository\SchoolYearPeriodeRepository;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Doctrine\Common\Collections\ArrayCollection;
  30. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  31. use App\Repository\SchoolAbsenceAndDelayRepository;
  32. use App\Repository\SchoolAverageReportCardRepository;
  33. use App\Repository\SchoolReportCardAbsenceRepository;
  34. use App\Repository\SchoolAbsenceAndDelaySettingRepository;
  35. use App\Repository\RegistrationStudentRegistrationRepository;
  36. use App\Service\StudentAverageReportCardCalculator;
  37. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  38. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  39. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  40. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  41. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  42. /**
  43.  * @Route("/report/card")
  44.  */
  45. class ReportCardController extends AbstractController
  46. {
  47.     /**
  48.      * @Route("/index", name="report_card_index", methods={"GET"})
  49.      */
  50.     public function index(Request $requestPaginatorInterface $paginatorReportCardRepository $reportCardRepositorySchoolTeacherRepository $schoolTeacherRepository): Response
  51.     {
  52.         /**@var User $user */
  53.         $user $this->getUser();
  54.         $schoolYear $user->getSchoolYear();
  55.         $establishment $user->getEstablishment();
  56.         $schoolTeacher $schoolTeacherRepository->findOneBy(['establishment' => $establishment'salary' => $user->getRhSalary()], []);
  57.         $report_cards $paginator->paginate(
  58.             $reportCardRepository->createQueryBuilder('entity')
  59.             ->andWhere('entity.establishment = :establishment')
  60.             ->setParameter('establishment'$establishment)
  61.             ->andWhere('entity.schoolYear = :schoolYear')
  62.             ->setParameter('schoolYear'$schoolYear)
  63.             ->orderBy('entity.id''DESC')
  64.             ->getQuery(),
  65.             $request->query->getInt('page'1),
  66.             1000
  67.         );
  68.         return $this->render('school/report_card/index.html.twig', [
  69.             'report_cards' => $report_cards,
  70.         ]);
  71.     }
  72.     /**
  73.      * @Route("/new", name="report_card_new", methods={"GET","POST"})
  74.      */
  75.     public function new(Request $requestSchoolYearPeriodeRepository $schoolYearPeriodeRepositorySettingLevelRepository $settingLevelRepositoryReportCardRepository $reportCardRepositoryStudentAverageCalculator $studentAverageCalculator): Response
  76.     {
  77.         /**@var User $user */
  78.         $user $this->getUser();
  79.         $schoolYear $user->getSchoolYear();
  80.         $establishment $user->getEstablishment();
  81.         $schoolYearPeriodes $schoolYearPeriodeRepository->findBy(['schoolYear' => $schoolYear'establishment' => $establishment'is_closed' => 0]);
  82.         $levels $settingLevelRepository->findBy(['establishment' => $establishment], ['label' => 'ASC']);
  83.         $reportCard = new ReportCard();
  84.         $form $this->createForm(ReportCardType::class, $reportCard)
  85.         ->add('schoolYearPeriode'EntityType::class, [
  86.             'class' => SchoolYearPeriode::class,
  87.             'choices' => $schoolYearPeriodes,
  88.             'required' => true
  89.         ])
  90.         ->add('level'EntityType::class, [
  91.             'class' => SettingLevel::class,
  92.             'choices' => $levels,
  93.             'required' => true
  94.         ]);
  95.         $form->handleRequest($request);
  96.         if ($form->isSubmitted() && $form->isValid()) {
  97.             $entityManager $this->getDoctrine()->getManager();
  98.             if (null != $reportCardRepository->findOneBy(['schoolYearPeriode' => $reportCard->getSchoolYearPeriode(), 'level' => $reportCard->getLevel()], [])) {
  99.                 $this->addFlash('warning'"Ce bulletin existe déjà.");
  100.                 return $this->redirectToRoute('report_card_new');
  101.             }
  102.             $reportCard->setEstablishment($establishment);
  103.             $reportCard->setSchoolYear($schoolYear);
  104.             $reportCard->setCode('B'.rand(100000999999).$reportCard->getSchoolYearPeriode()->getId().$reportCard->getLevel()->getId());
  105.             $reportCard->setCoefficient($reportCard->getSchoolYearPeriode()->getCoefficient());
  106.             foreach ($reportCard->getLevel()->getSettingClassrooms() as $key => $classroom) {
  107.                 if ($classroom->getSchoolYear() == $schoolYear) {
  108.                     $index 1;
  109.                     foreach ($classroom->getRegistereds($schoolYear) as $key => $registrationStudentRegistration) {
  110.                         if (!$registrationStudentRegistration->isAbandonne()) {
  111.                             $schoolReportCard = new SchoolReportCard();
  112.                             $schoolReportCard->setClassroom($classroom);
  113.                             $schoolReportCard->setCode('BE'.$reportCard->getCode().$registrationStudentRegistration->getId());
  114.                             $schoolReportCard->setCoefficient($reportCard->getCoefficient());
  115.                             $schoolReportCard->setEstablishment($establishment);
  116.                             $schoolReportCard->setLabel($reportCard->getLabel());
  117.                             $schoolReportCard->setOrderNum($index);
  118.                             $schoolReportCard->setReportCard($reportCard);
  119.                             $schoolReportCard->setNoteOn($reportCard->getNoteOn());
  120.                             $schoolReportCard->setSchoolYear($schoolYear);
  121.                             $schoolReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
  122.                             $schoolReportCard->setStudentRegistration($registrationStudentRegistration);
  123.                             $schoolReportCard->setType('normal');
  124.                             $entityManager->persist($schoolReportCard);
  125.                             foreach ($classroom->getLevel()->getSchoolMatters() as $key => $matter) {
  126.                                 if (!$matter->getIsTestMatter()) {
  127.                                     if ($matter->getNoteOnReportCard() <= 0) {
  128.                                         $this->addFlash('warning'"Veuillez configurer correctement la matière: ".$matter->getLabel()." 'Noté sur Bulletin' doit être defini.");
  129.                                         return $this->redirectToRoute('report_card_new');
  130.                                     }
  131.                                     if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter$reportCard)) {
  132.                                         $schoolAverageReportCard = new SchoolAverageReportCard();
  133.                                         $schoolAverageReportCard->setCode('MY'.$schoolReportCard->getCode().$matter->getId());
  134.                                         //$schoolAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computePeriodeAverage($matter, $reportCard, $schoolAverageReportCard));
  135.                                         $schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubjectAverage($registrationStudentRegistration$matter$reportCard->getSchoolYearPeriode()));
  136.                                         $schoolAverageReportCard->setClassroom($classroom);
  137.                                         $schoolAverageReportCard->setCoefficient($matter->getCoefficient());
  138.                                         $schoolAverageReportCard->setCoefficientXAverage($schoolAverageReportCard->getAverage() * $schoolAverageReportCard->getCoefficient());
  139.                                         $schoolAverageReportCard->setEstablishment($establishment);
  140.                                         $schoolAverageReportCard->setMatter($matter);
  141.                                         $schoolAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
  142.                                         $schoolAverageReportCard->setNoteOn($matter->getNoteOnReportCard());
  143.                                         $schoolAverageReportCard->setOrderNum($matter->getOrderNum());
  144.                                         $schoolAverageReportCard->setReportCard($schoolReportCard);
  145.                                         $schoolAverageReportCard->setSchoolYear($schoolYear);
  146.                                         $schoolAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
  147.                                         $schoolAverageReportCard->setStudentRegistration($registrationStudentRegistration);
  148.                                         $countSubMatters 0;
  149.                                         foreach ($matter->getSchoolSubMatters() as $key => $schoolSubMatter) {
  150.                                             $schoolAverageReportCard->setAsSubmatter(true);
  151.                                             //if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter, $reportCard)) {
  152.                                                 $schoolSubAverageReportCard = new SchoolAverageReportCard();
  153.                                                 $schoolSubAverageReportCard->setCode('SMY'.$schoolReportCard->getCode().$schoolSubMatter->getId());
  154.                                                 //$schoolSubAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computeSubPeriodeAverage($schoolSubMatter, $reportCard, $schoolAverageReportCard));
  155.                                                 $schoolSubAverageReportCard->setAverage($studentAverageCalculator->calculateSubMatterAverage($registrationStudentRegistration$schoolSubMatter$reportCard->getSchoolYearPeriode()));
  156.                                                 $schoolSubAverageReportCard->setClassroom($classroom);
  157.                                                 $schoolSubAverageReportCard->setCoefficient($schoolSubMatter->getCoefficient());
  158.                                                 $schoolSubAverageReportCard->setCoefficientXAverage($schoolSubAverageReportCard->getAverage() * $schoolSubAverageReportCard->getCoefficient());
  159.                                                 $schoolSubAverageReportCard->setEstablishment($establishment);
  160.                                                 $schoolSubAverageReportCard->setMatter($matter);
  161.                                                 $schoolSubAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
  162.                                                 $schoolSubAverageReportCard->setSubMatter($schoolSubMatter);
  163.                                                 $schoolSubAverageReportCard->setNoteOn($schoolSubMatter->getNotedOn());
  164.                                                 $schoolSubAverageReportCard->setOrderNum($matter->getOrderNum());
  165.                                                 $schoolSubAverageReportCard->setReportCard($schoolReportCard);
  166.                                                 $schoolSubAverageReportCard->setSchoolYear($schoolYear);
  167.                                                 $schoolSubAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
  168.                                                 $schoolSubAverageReportCard->setStudentRegistration($registrationStudentRegistration);
  169.                                                 $entityManager->persist($schoolSubAverageReportCard);
  170.                                             //}
  171.                                         }
  172.                                         //if ($countSubMatters <= 0) {
  173.                                             $entityManager->persist($schoolAverageReportCard);
  174.                                         //}
  175.                                     }
  176.                                 }
  177.                             }
  178.                             $index++;
  179.                         }
  180.                     }
  181.                 }
  182.             }
  183.             $entityManager->persist($reportCard);
  184.             try {
  185.                 $entityManager->flush();
  186.                 $this->addFlash('success'"Enrégistrement effectué.");
  187.             } catch (\Throwable $th) {
  188.                 $this->addFlash('warning'"Une erreure est survenue lors de l'ajout de la classe.");
  189.                 $this->addFlash('info'$th->getMessage());
  190.                 return $this->redirectToRoute('report_card_new');
  191.             }
  192.             return $this->redirectToRoute('report_card_edit', ['id' => $reportCard->getId()]);
  193.         }
  194.         return $this->renderForm('school/report_card/new.html.twig', [
  195.             'report_card' => $reportCard,
  196.             'form' => $form,
  197.         ]);
  198.     }
  199.     /**
  200.      * @Route("/{id}/edit", name="report_card_edit", methods={"GET","POST"})
  201.      */
  202.     public function edit(Request $requestStudentAverageReportCardCalculator $studentAverageReportCardCalculatorStudentAverageCalculator $studentAverageCalculatorSchoolReportCardAbsenceRepository $schoolReportCardAbsenceRepositoryReportCard $reportCardRegistrationStudentRegistrationRepository $registrationStudentRegistrationRepositorySchoolReportCardRepository $schoolReportCardRepository): Response
  203.     {
  204.          /**@var User $user */
  205.          $user $this->getUser();
  206.          $schoolYear $user->getSchoolYear();
  207.         $establishment $user->getEstablishment();
  208.         $registrationStudentRegistrations $registrationStudentRegistrationRepository->createQueryBuilder('entity')
  209.         ->innerJoin('entity.classroom''classroom')
  210.         ->addSelect('classroom')
  211.         ->innerJoin('entity.student''student')
  212.         ->addSelect('student')
  213.         ->andWhere('classroom.level = :level')
  214.         ->setParameter('level'$reportCard->getLevel())
  215.         ->andWhere('entity.establishment = :establishment')
  216.         ->setParameter('establishment'$establishment)
  217.         ->andWhere('entity.status != :status')
  218.         ->setParameter('status'RegistrationStudentRegistration::STATUS_ABANDONNE)
  219.         ->orderBy('student.last_name''ASC')
  220.         ->getQuery()
  221.         ->getResult();
  222.         $entityManager $this->getDoctrine()->getManager();
  223.         $form $this->createForm(ReportCardType::class, $reportCard);
  224.         $form->handleRequest($request);
  225.         if ($form->isSubmitted() && $form->isValid()) {
  226.             try {
  227.                 $entityManager->flush();
  228.                 $this->addFlash('success'"Enrégistrement effectué.");
  229.             } catch (\Throwable $th) {
  230.                 $this->addFlash('warning'"Une erreure est survenue lors de l'ajout de la classe.");
  231.                 $this->addFlash('info'$th->getMessage());
  232.                 
  233.             }
  234.             return $this->redirectToRoute('report_card_edit', ['id' => $reportCard->getId()]);
  235.         }
  236.         $schoolReportCard = new SchoolReportCard();
  237.         
  238.         $schoolReportCardForm $this->createForm(SchoolReportCardType::class, $schoolReportCard)
  239.         
  240.         ->add('studentRegistration'EntityType::class, [
  241.             'class' => RegistrationStudentRegistration::class,
  242.             'choices' => $registrationStudentRegistrations
  243.         ])
  244.         ->remove('coefficient')
  245.         ->remove('note_on');
  246.         $schoolReportCardForm->handleRequest($request);
  247.         if ($schoolReportCardForm->isSubmitted() && $schoolReportCardForm->isValid()) {
  248.             $entityManager $this->getDoctrine()->getManager();
  249.             $schoolReportCard->setEstablishment($establishment);
  250.             $schoolReportCard->setSchoolYear($schoolYear);
  251.             $schoolReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
  252.             $schoolReportCard->setClassroom($schoolReportCard->getStudentRegistration()->getClassroom());
  253.             $schoolReportCard->setReportCard($reportCard);
  254.             $schoolReportCard->setNoteOn($reportCard->getNoteOn());
  255.             $schoolReportCard->setCoefficient($reportCard->getCoefficient());
  256.             $schoolReportCard->setCode('BE'.$reportCard->getCode().$schoolReportCard->getStudentRegistration()->getId());
  257.             $schoolReportCard->setLabel($reportCard->getLabel());
  258.             $schoolReportCard->setOrderNum($reportCard->getOrderNum());
  259.             $schoolReportCard->setType("normal");
  260.             
  261.             foreach ($schoolReportCard->getClassroom()->getLevel()->getSchoolMatters() as $key => $matter) {
  262.                 if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter$reportCard)) {
  263.                     $schoolAverageReportCard = new SchoolAverageReportCard();
  264.                     $schoolAverageReportCard->setCode('MY'.$schoolReportCard->getCode().$matter->getId());
  265.                     //$schoolAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computePeriodeAverage($matter, $reportCard, $schoolAverageReportCard));
  266.                     $schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubjectAverage($schoolReportCard->getStudentRegistration(), $matter$reportCard->getSchoolYearPeriode()));
  267.                     $schoolAverageReportCard->setClassroom($schoolReportCard->getClassroom());
  268.                     $schoolAverageReportCard->setCoefficient($matter->getCoefficient());
  269.                     $schoolAverageReportCard->setCoefficientXAverage($schoolAverageReportCard->getAverage() * $schoolAverageReportCard->getCoefficient());
  270.                     $schoolAverageReportCard->setEstablishment($establishment);
  271.                     $schoolAverageReportCard->setMatter($matter);
  272.                     $schoolAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
  273.                     $schoolAverageReportCard->setNoteOn($matter->getNotedOn());
  274.                     $schoolAverageReportCard->setOrderNum($matter->getOrderNum());
  275.                     $schoolAverageReportCard->setReportCard($schoolReportCard);
  276.                     $schoolAverageReportCard->setSchoolYear($schoolYear);
  277.                     $schoolAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
  278.                     $schoolAverageReportCard->setStudentRegistration($schoolReportCard->getStudentRegistration());
  279.                     $countSubMatters 0;
  280.                     foreach ($matter->getSchoolSubMatters() as $key => $schoolSubMatter) {
  281.                         $schoolAverageReportCard->setAsSubmatter(true);
  282.                         //if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter, $reportCard)) {
  283.                             $schoolSubAverageReportCard = new SchoolAverageReportCard();
  284.                             $schoolSubAverageReportCard->setCode('SMY'.$schoolReportCard->getCode().$schoolSubMatter->getId());
  285.                             //$schoolSubAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computeSubPeriodeAverage($schoolSubMatter, $reportCard, $schoolAverageReportCard));
  286.                             $schoolSubAverageReportCard->setAverage($studentAverageCalculator->calculateSubMatterAverage($schoolReportCard->getStudentRegistration(), $schoolSubMatter$reportCard->getSchoolYearPeriode()));
  287.                             $schoolSubAverageReportCard->setClassroom($schoolReportCard->getClassroom());
  288.                             $schoolSubAverageReportCard->setCoefficient($schoolSubMatter->getCoefficient());
  289.                             $schoolSubAverageReportCard->setCoefficientXAverage($schoolSubAverageReportCard->getAverage() * $schoolSubAverageReportCard->getCoefficient());
  290.                             $schoolSubAverageReportCard->setEstablishment($establishment);
  291.                             $schoolSubAverageReportCard->setMatter($matter);
  292.                             $schoolSubAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
  293.                             $schoolSubAverageReportCard->setSubMatter($schoolSubMatter);
  294.                             $schoolSubAverageReportCard->setNoteOn($schoolSubMatter->getNotedOn());
  295.                             $schoolSubAverageReportCard->setOrderNum($matter->getOrderNum());
  296.                             $schoolSubAverageReportCard->setReportCard($schoolReportCard);
  297.                             $schoolSubAverageReportCard->setSchoolYear($schoolYear);
  298.                             $schoolSubAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
  299.                             $schoolSubAverageReportCard->setStudentRegistration($schoolReportCard->getStudentRegistration());
  300.                             $entityManager->persist($schoolSubAverageReportCard);
  301.                         //}
  302.                     }
  303.                     //if ($countSubMatters <= 0) {
  304.                         $entityManager->persist($schoolAverageReportCard);
  305.                     //}
  306.                 }
  307.             }
  308.             
  309.             $entityManager->persist($schoolReportCard);
  310.             try {
  311.                 $entityManager->flush();
  312.                 $this->addFlash('success'"Enrégistrement effectué.");
  313.             } catch (\Throwable $th) {
  314.                 $this->addFlash('warning'"Une erreure est survenue lors de l'ajout de la classe.");
  315.                 $this->addFlash('info'$th->getMessage());
  316.             }
  317.             return $this->redirectToRoute('report_card_edit', ['id' => $reportCard->getId()]);
  318.         }
  319.         $schoolReportCards $schoolReportCardRepository->createQueryBuilder('entity')
  320.         ->innerJoin('entity.studentRegistration''studentRegistration')
  321.         ->addSelect('studentRegistration')
  322.         ->innerJoin('studentRegistration.student''student')
  323.         ->addSelect('student')
  324.         ->andWhere('entity.reportCard = :reportCard')
  325.         ->setParameter('reportCard'$reportCard)
  326.         
  327.         ->orderBy('student.first_name''ASC')
  328.         ->orderBy('student.last_name''ASC')
  329.         ->getQuery()
  330.         ->getResult();
  331.         $school_report_cards = new ArrayCollection();
  332.         foreach ($schoolReportCards as $key => $schoolReportCard) {
  333.             //dd($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard));
  334.             if (!$reportCard->getIsValidated()) {
  335.                 foreach ($schoolReportCard->getSchoolAverageReportCards() as $key => $schoolAverageReportCard) {
  336.                     // Vérifier si c'est une sous-matière ou une matière principale
  337.                     if ($schoolAverageReportCard->getSubMatter() !== null) {
  338.                         // C'est une sous-matière, calculer sa moyenne spécifique
  339.                         $schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubMatterAverage($schoolReportCard->getStudentRegistration(), $schoolAverageReportCard->getSubMatter(), $reportCard->getSchoolYearPeriode()));
  340.                     } else {
  341.                         // C'est une matière principale, calculer sa moyenne
  342.                         $schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubjectAverage($schoolReportCard->getStudentRegistration(), $schoolAverageReportCard->getMatter(), $reportCard->getSchoolYearPeriode()));
  343.                     }
  344.                     
  345.                 }
  346.                 $schoolReportCard->setReportCardAverage($studentAverageReportCardCalculator->calculateGeneralAverage($schoolReportCard));
  347.                 $schoolReportCard->setTotalAverage($studentAverageReportCardCalculator->calculateTotalAverage($schoolReportCard));
  348.                 $schoolReportCard->setTotalCoefficient($studentAverageReportCardCalculator->calculateTotalCoefficient($schoolReportCard));
  349.                 $schoolReportCard->setSmallestAverage($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard)['min_average']);
  350.                 $schoolReportCard->setSstrongestAverage($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard)['max_average']);
  351.                 $schoolReportCard->setClassAverage($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard)['class_average']);
  352.                 
  353.                 $schoolReportCardAbsence $studentAverageReportCardCalculator->calculateAbsences($schoolReportCard->getStudentRegistration(), $reportCard);
  354.                 $schoolReportCard->setUnjustifiedAbsence($schoolReportCardAbsence['unjustified_absence']);
  355.                 $schoolReportCard->setJustifiedAbsence($schoolReportCardAbsence['justified_absence']);
  356.                 // $schoolReportCardAbsence = $schoolReportCardAbsenceRepository->findOneBy(['schoolYearPeriode' => $reportCard->getSchoolYearPeriode(), 'studentRegistration' => $schoolReportCard->getStudentRegistration()], []);
  357.                 //if (null != $schoolReportCardAbsence) {
  358.                 //    $schoolReportCard->setUnjustifiedAbsence($schoolReportCardAbsence->getUnjustifiedAbsence());
  359.                 //    $schoolReportCard->setJustifiedAbsence($schoolReportCardAbsence->getJustifiedAbsence());
  360.                 //} 
  361.             }
  362.             $school_report_cards->add([
  363.                 'id' => $schoolReportCard->getId(),
  364.                 'code' => $schoolReportCard->getStudentRegistration()->getStudent()->getRegistrationNumber(),
  365.                 'name' => $schoolReportCard->getStudentRegistration()->getStudent()->getName(),
  366.                 'classroom' => $schoolReportCard->getStudentRegistration()->getClassroom()->getLabel(),
  367.                 'reportCardAverage' => $schoolReportCard->getReportCardAverage(),
  368.                 'isValidated' => $schoolReportCard->getIsValidated(),
  369.                 'isUnclassified' => $schoolReportCard->isUnclassified(),
  370.                 
  371.             ]);
  372.         }
  373.         try {
  374.             $entityManager $this->getDoctrine()->getManager();
  375.             $entityManager->flush();
  376.         } catch (\Throwable $th) {
  377.             //throw $th;
  378.         }
  379.         $school_report_cards_array $school_report_cards->toArray();
  380.         uasort($school_report_cards_array, function ($first$second) {
  381.             if ($first === $second) {
  382.                 return 0;
  383.             }
  384.             return $first['name'] < $second['name'] ? -1;
  385.         });
  386.         $school_report_cards = new ArrayCollection($school_report_cards_array);
  387.         return $this->renderForm('school/report_card/edit.html.twig', [
  388.             'school_report_cards' => $school_report_cards,
  389.             'report_card' => $reportCard,
  390.             'form' => $form,
  391.             'school_report_card' => $schoolReportCard,
  392.             'school_report_card_form' => $schoolReportCardForm,
  393.         ]);
  394.     }
  395.     /**
  396.      * @Route("/delete-selection", name="report_cards_selected_delete", methods={"GET"})
  397.     */
  398.     public function deleteSelected(Request $requestReportCardRepository $entityRepository): Response
  399.     {
  400.         $list $request->get('entities');
  401.         $entityManager $this->getDoctrine()->getManager();
  402.         $errors 0;
  403.         $success 0;
  404.         foreach ($list as $key => $id) {
  405.             $entity $entityRepository->findOneBy(['id' => intval($id)], []);
  406.             if ($entity != null) {
  407.                 if (!$entity->getIsValidated()) {
  408.                     foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  409.                         foreach ($schoolReportCard->getSchoolAverageReportCards() as $key => $schoolAverageReportCard) {
  410.                             $entityManager->remove($schoolAverageReportCard);
  411.                         }
  412.                         foreach ($schoolReportCard->getSchoolAssessmentByClassByMatters() as $key => $schoolAssessmentByClassByMatter) {
  413.                             $entityManager->remove($schoolAssessmentByClassByMatter);
  414.                         }
  415.                         foreach ($schoolReportCard->getSchoolAssessmentByClasses() as $key => $schoolAssessmentByClasse) {
  416.                             $entityManager->remove($schoolAssessmentByClasse);
  417.                         }
  418.                         foreach ($schoolReportCard->getSchoolAssessmentByLevelByMatters() as $key => $schoolAssessmentByLevelByMatter) {
  419.                             $entityManager->remove($schoolAssessmentByLevelByMatter);
  420.                         }
  421.                         foreach ($schoolReportCard->getSchoolAssessmentByLevels() as $key => $schoolAssessmentByLevel) {
  422.                             $entityManager->remove($schoolAssessmentByLevel);
  423.                         }
  424.                         $entityManager->remove($schoolReportCard);
  425.                     }
  426.                     foreach ($entity->getSchoolAssessments() as $key => $schoolAssessmentByLevel) {
  427.                         $entityManager->remove($schoolAssessmentByLevel);
  428.                     }
  429.                     
  430.                     $entityManager->remove($entity);
  431.                     $success++;
  432.                 }else {
  433.                     $errors++;
  434.                 }
  435.             }else {
  436.                 $errors++;
  437.             }
  438.         }
  439.         try {
  440.             $entityManager->flush();
  441.             $this->addFlash('success'$success." éléments on été supprimés");
  442.             return $this->json(['code' => 200'message' => $success." éléments on été supprimés"], 200);
  443.         } catch (\Throwable $th) {
  444.             //$th->getMessage()
  445.             $this->addFlash('warning'$th->getMessage());
  446.         }
  447.         
  448.         $this->addFlash('warning'"Traitement non effectué");
  449.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  450.     }
  451.     /**
  452.      * @Route("/{id}/validate", name="report_card_validate", methods={"GET"})
  453.     */
  454.     public function validate(ReportCard $entity): Response
  455.     {
  456.         foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  457.            $schoolReportCard->setIsValidated(true);
  458.         }
  459.         
  460.         $entityManager $this->getDoctrine()->getManager();
  461.         $entity->setIsValidated(true);
  462.         try {
  463.             $entityManager->flush();
  464.             $this->addFlash('success'"Traitement effectué");
  465.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  466.         } catch (\Throwable $th) {
  467.             $this->addFlash('warning'$th->getMessage());
  468.         }
  469.         
  470.         $this->addFlash('warning'"Traitement non effectué");
  471.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  472.     }
  473.     /**
  474.      * @Route("/{id}/cancel", name="report_card_cancel", methods={"GET"})
  475.     */
  476.     public function cancel(ReportCard $entity): Response
  477.     {
  478.         $entityManager $this->getDoctrine()->getManager();
  479.         foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  480.             $schoolReportCard->setIsValidated(false);
  481.          }
  482.         $entity->setIsValidated(false);
  483.             
  484.         try {
  485.             $entityManager->flush();
  486.             $this->addFlash('success'"Traitement effectué");
  487.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  488.         } catch (\Throwable $th) {
  489.             $this->addFlash('warning'$th->getMessage());
  490.         }
  491.         
  492.         $this->addFlash('warning'"Traitement non effectué");
  493.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  494.     }
  495.     /**
  496.      * @Route("/{id}/compute-conduct-average", name="report_card_compute_conduct_average", methods={"GET"})
  497.     */
  498.     public function computeConductAverage(ReportCard $entitySchoolAbsenceAndDelayRepository $schoolAbsenceAndDelayRepositorySchoolAbsenceAndDelaySettingRepository $schoolAbsenceAndDelaySettingRepository): Response
  499.     {
  500.         $entityManager $this->getDoctrine()->getManager();
  501.         $schoolAbsenceAndDelaySetting $schoolAbsenceAndDelaySettingRepository->findOneBy(['establishment' => $entity->getEstablishment()], []);
  502.         //calcule des moyenne de conduite
  503.         foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  504.             if (!$schoolReportCard->getIsValidated()) {
  505.                 if ($entity->getEstablishment()->getType() != $entity->getEstablishment()::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES){
  506.                     $justifiedAbsence $schoolAbsenceAndDelayRepository->createQueryBuilder('entity')
  507.                     ->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
  508.                     ->setParameter('schoolYearPeriode'$schoolReportCard->getSchoolYearPeriode())
  509.                     ->andWhere('entity.studentRegistration = :studentRegistration')
  510.                     ->setParameter('studentRegistration'$schoolReportCard->getStudentRegistration())
  511.                     ->andWhere('entity.situation = :situation')
  512.                     ->setParameter('situation''ABSENCE')
  513.                     ->andWhere('entity.duration_type = :duration_type')
  514.                     ->setParameter('duration_type''HEURE')
  515.                     ->andWhere('entity.is_justify = :is_justify')
  516.                     ->setParameter('is_justify'1)
  517.                     ->select('SUM(entity.duration)')
  518.                     ->getQuery()
  519.                     ->getSingleScalarResult();
  520.                     $unJustifiedAbsence $schoolAbsenceAndDelayRepository->createQueryBuilder('entity')
  521.                     ->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
  522.                     ->setParameter('schoolYearPeriode'$schoolReportCard->getSchoolYearPeriode())
  523.                     ->andWhere('entity.studentRegistration = :studentRegistration')
  524.                     ->setParameter('studentRegistration'$schoolReportCard->getStudentRegistration())
  525.                     ->andWhere('entity.situation = :situation')
  526.                     ->setParameter('situation''ABSENCE')
  527.                     ->andWhere('entity.duration_type = :duration_type')
  528.                     ->setParameter('duration_type''HEURE')
  529.                     ->andWhere('entity.is_justify = :is_justify')
  530.                     ->setParameter('is_justify'0)
  531.                     ->select('SUM(entity.duration)')
  532.                     ->getQuery()
  533.                     ->getSingleScalarResult();
  534.                     $schoolReportCard->setJustifiedAbsence($justifiedAbsence);
  535.                     $schoolReportCard->setUnJustifiedAbsence($unJustifiedAbsence);
  536.                 }
  537.             }
  538.         }
  539.         try {
  540.             $entityManager->flush();
  541.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  542.         } catch (\Throwable $th) {
  543.             $this->addFlash('warning'$th->getMessage());
  544.         }
  545.         
  546.         $this->addFlash('warning'"Traitement non effectué");
  547.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  548.     }
  549.     /**
  550.      * @Route("/{id}/compute-average", name="report_card_compute_average", methods={"GET"})
  551.     */
  552.     public function computeAverage(ReportCard $entitySchoolAverageReportCardRepository $schoolAverageReportCardRepository): Response
  553.     {
  554.         $entityManager $this->getDoctrine()->getManager();
  555.         //calcule des moyenne
  556.         foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  557.             if (!$schoolReportCard->getIsValidated()) {
  558.                 if ($entity->getEstablishment()->getType() == $entity->getEstablishment()::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES){
  559.                     $reportCardAverage $schoolAverageReportCardRepository->createQueryBuilder('entity')
  560.                     ->innerJoin('entity.reportCard''reportCard')
  561.                     ->addSelect('reportCard')
  562.                     ->andWhere('entity.reportCard = :reportCard')
  563.                     ->setParameter('reportCard'$schoolReportCard)
  564.                     ->andWhere('entity.average < :average')
  565.                     ->setParameter('average'999)
  566.                     //->select('SUM(entity.average * (entity.note_on / reportCard.note_on)) / (SUM(entity.note_on / reportCard.note_on))')
  567.                     ->select('SUM(entity.average) / (SUM(entity.note_on / reportCard.note_on))')
  568.                     ->getQuery()
  569.                     ->getSingleScalarResult();
  570.                     $schoolReportCard->setReportCardAverage($reportCardAverage);
  571.                 }else {
  572.                     $sumAverages $schoolAverageReportCardRepository->createQueryBuilder('entity')
  573.                     ->innerJoin('entity.matter''matter')
  574.                     ->addSelect('matter')
  575.                     ->andWhere('entity.reportCard = :reportCard')
  576.                     ->setParameter('reportCard'$schoolReportCard)
  577.                     ->andWhere('entity.average != :average')
  578.                     ->setParameter('average'999)
  579.                     ->andWhere('entity.as_submatter = :as_submatter')
  580.                     ->setParameter('as_submatter'0)
  581.                     ->select('SUM(entity.average * entity.coefficient)')
  582.                     ->getQuery()
  583.                     ->getSingleScalarResult();
  584.                     $sumCoefficients $schoolAverageReportCardRepository->createQueryBuilder('entity')
  585.                     ->innerJoin('entity.matter''matter')
  586.                     ->addSelect('matter')
  587.                     ->andWhere('entity.reportCard = :reportCard')
  588.                     ->setParameter('reportCard'$schoolReportCard)
  589.                     ->andWhere('entity.average != :average')
  590.                     ->setParameter('average'999)
  591.                     ->andWhere('entity.as_submatter = :as_submatter')
  592.                     ->setParameter('as_submatter'0)
  593.                     ->select('SUM(entity.coefficient)')
  594.                     ->getQuery()
  595.                     ->getSingleScalarResult();
  596.                     $schoolReportCard->setTotalAverage($sumAverages);
  597.                     $schoolReportCard->setTotalCoefficient($sumCoefficients);
  598.                     $schoolReportCard->setReportCardAverage(0);
  599.                     
  600.                     if ($sumCoefficients 0) {
  601.                         $schoolReportCard->setReportCardAverage($sumAverages $sumCoefficients);
  602.                     }
  603.                 }
  604.             }
  605.         }
  606.         try {
  607.             $entityManager->flush();
  608.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  609.         } catch (\Throwable $th) {
  610.             $this->addFlash('warning'$th->getMessage());
  611.         }
  612.         
  613.         $this->addFlash('warning'"Traitement non effectué");
  614.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  615.     }
  616.     /**
  617.      * @Route("/{id}/compute-min-max-average", name="report_card_compute_min_max_average", methods={"GET"})
  618.     */
  619.     public function computeMinMaxAverage(ReportCard $entitySchoolReportCardRepository $schoolReportCardRepository): Response
  620.     {
  621.         $entityManager $this->getDoctrine()->getManager();
  622.         //min max moyenne de la classe
  623.         foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  624.             $minAverage $schoolReportCardRepository->createQueryBuilder('entity')
  625.             ->andWhere('entity.reportCard = :reportCard')
  626.             ->setParameter('reportCard'$entity)
  627.             ->andWhere('entity.is_unclassified = :is_unclassified')
  628.             ->setParameter('is_unclassified'0)
  629.             ->andWhere('entity.classroom = :classroom')
  630.             ->setParameter('classroom'$schoolReportCard->getClassroom())
  631.             
  632.             ->select('MIN(entity.report_card_average)')
  633.             ->getQuery()
  634.             ->getSingleScalarResult();
  635.             $schoolReportCard->setSmallestAverage($minAverage);
  636.             $maxAverage $schoolReportCardRepository->createQueryBuilder('entity')
  637.             ->andWhere('entity.reportCard = :reportCard')
  638.             ->setParameter('reportCard'$entity)
  639.             ->andWhere('entity.is_unclassified = :is_unclassified')
  640.             ->setParameter('is_unclassified'0)
  641.             ->andWhere('entity.classroom = :classroom')
  642.             ->setParameter('classroom'$schoolReportCard->getClassroom())
  643.             
  644.             ->select('MAX(entity.report_card_average)')
  645.             ->getQuery()
  646.             ->getSingleScalarResult();
  647.             $schoolReportCard->setSstrongestAverage($maxAverage);
  648.             $classAverage $schoolReportCardRepository->createQueryBuilder('entity')
  649.             ->andWhere('entity.reportCard = :reportCard')
  650.             ->setParameter('reportCard'$entity)
  651.             ->andWhere('entity.is_unclassified = :is_unclassified')
  652.             ->setParameter('is_unclassified'0)
  653.             ->andWhere('entity.classroom = :classroom')
  654.             ->setParameter('classroom'$schoolReportCard->getClassroom())
  655.             
  656.             ->select('AVG(entity.report_card_average)')
  657.             ->getQuery()
  658.             ->getSingleScalarResult();
  659.             $schoolReportCard->setClassAverage($classAverage);
  660.             $classAnnualAverage $schoolReportCardRepository->createQueryBuilder('entity')
  661.             ->andWhere('entity.schoolYear = :schoolYear')
  662.             ->setParameter('schoolYear'$schoolReportCard->getSchoolYear())
  663.             ->andWhere('entity.is_unclassified = :is_unclassified')
  664.             ->setParameter('is_unclassified'0)
  665.             ->andWhere('entity.classroom = :classroom')
  666.             ->setParameter('classroom'$schoolReportCard->getClassroom())
  667.             
  668.             ->select('AVG(entity.annual_average)')
  669.             ->getQuery()
  670.             ->getSingleScalarResult();
  671.             $schoolReportCard->setClassAnnualAverage($classAnnualAverage);
  672.         }
  673.         try {
  674.             $entityManager->flush();
  675.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  676.         } catch (\Throwable $th) {
  677.             $this->addFlash('warning'$th->getMessage());
  678.         }
  679.         
  680.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  681.     }
  682.     /**
  683.      * @Route("/{id}/compute-rank", name="report_card_compute_rank", methods={"GET"})
  684.     */
  685.     public function computeRank(ReportCard $entitySchoolReportCardRepository $schoolReportCardRepositorySchoolAverageReportCardRepository $schoolAverageReportCardRepository): Response
  686.     {
  687.         $entityManager $this->getDoctrine()->getManager();
  688.         $index 1;
  689.         foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  690.             // rang de la periode
  691.             foreach ($schoolReportCard->getReportCard()->getLevel()->getSchoolMatters() as $key => $schoolMatter) {
  692.                 $schoolAverageReportCards $schoolAverageReportCardRepository->createQueryBuilder('entity')
  693.                 ->innerJoin('entity.reportCard''schoolReportCard')
  694.                 ->addSelect('schoolReportCard')
  695.                 ->andWhere('schoolReportCard.reportCard = :reportCard')
  696.                 ->setParameter('reportCard'$entity)
  697.                 ->andWhere('entity.classroom = :classroom')
  698.                 ->setParameter('classroom'$schoolReportCard->getClassroom())
  699.                 ->andWhere('entity.matter = :matter')
  700.                 ->setParameter('matter'$schoolMatter)
  701.                 ->andWhere('entity.average < :maxAverage')
  702.                 ->setParameter('maxAverage'999)
  703.                 ->orderBy('entity.average''DESC')
  704.                 ->getQuery()
  705.                 ->getResult();
  706.                 $countSchoolAverageReportCard 1;
  707.                 $countExSchoolAverageReportCard 1;
  708.                 $moyPrecedent = -1;
  709.                 
  710.                 foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
  711.                     if ($schoolAverageReportCard->getAverage() >= 999 || $schoolAverageReportCard->getCoefficient() <= || $schoolAverageReportCard->getNoteOn() <= 0) {
  712.                         $schoolAverageReportCard->setRank('NC');
  713.                     }else {
  714.                         if ($schoolAverageReportCard->getSubMatter() == null) {
  715.                             if ($schoolAverageReportCard->getAverage() == $moyPrecedent) {
  716.                                 if ($countSchoolAverageReportCard == 1) {
  717.                                     if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  718.                                         $schoolAverageReportCard->setRank($countExSchoolAverageReportCard.'ère EX');
  719.                                     }else {
  720.                                         $schoolAverageReportCard->setRank($countExSchoolAverageReportCard.'er EX');
  721.                                     }
  722.                                 }else {
  723.                                     $schoolAverageReportCard->setRank($countExSchoolAverageReportCard.'è EX');
  724.                                 }
  725.                             }else {
  726.                                 if ($countSchoolAverageReportCard == 1) {
  727.                                     if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  728.                                         $schoolAverageReportCard->setRank($countSchoolAverageReportCard.'ère');
  729.                                     }else {
  730.                                         $schoolAverageReportCard->setRank($countSchoolAverageReportCard.'er');
  731.                                     }
  732.                                 }else {
  733.                                     $schoolAverageReportCard->setRank($countSchoolAverageReportCard.'è');
  734.                                 }
  735.                                 $countExSchoolAverageReportCard $countSchoolAverageReportCard;
  736.                             }
  737.                             $countSchoolAverageReportCard++;
  738.                             $moyPrecedent $schoolAverageReportCard->getAverage();
  739.                         }
  740.                     }
  741.                 }
  742.             }
  743.             foreach ($schoolReportCard->getClassroom()->getLevel()->getSchoolSubMatters() as $key => $schoolSubMatter) {
  744.                 $schoolAverageReportCards $schoolAverageReportCardRepository->createQueryBuilder('entity')
  745.                 ->innerJoin('entity.reportCard''schoolReportCard')
  746.                 ->addSelect('schoolReportCard')
  747.                 ->andWhere('schoolReportCard.reportCard = :reportCard')
  748.                 ->setParameter('reportCard'$entity)
  749.                 ->andWhere('entity.classroom = :classroom')
  750.                 ->setParameter('classroom'$schoolReportCard->getClassroom())
  751.                 ->andWhere('entity.subMatter = :subMatter')
  752.                 ->setParameter('subMatter'$schoolSubMatter)
  753.                 ->andWhere('entity.average < :maxAverage')
  754.                 ->setParameter('maxAverage'999)
  755.                 ->orderBy('entity.average''DESC')
  756.                 ->getQuery()
  757.                 ->getResult();
  758.                 
  759.                 $countSubSchoolAverageReportCard 1;
  760.                 $countExSubSchoolAverageReportCard 1;
  761.                 $moySubPrecedent = -1;
  762.                 foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
  763.                     if ($schoolAverageReportCard->getAverage() >= 999 || $schoolAverageReportCard->getCoefficient() <= || $schoolAverageReportCard->getNoteOn() <= 0) {
  764.                         $schoolAverageReportCard->setRank('NC');
  765.                     }else {
  766.                         if ($schoolAverageReportCard->getAverage() == $moySubPrecedent) {
  767.                             if ($countSubSchoolAverageReportCard == 1) {
  768.                                 if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  769.                                     $schoolAverageReportCard->setRank($countExSubSchoolAverageReportCard.'ère EX');
  770.                                 }else {
  771.                                     $schoolAverageReportCard->setRank($countExSubSchoolAverageReportCard.'er EX');
  772.                                 }
  773.                             }else {
  774.                                 $schoolAverageReportCard->setRank($countExSubSchoolAverageReportCard.'è EX');
  775.                             }
  776.                         }else {
  777.                             if ($countSubSchoolAverageReportCard == 1) {
  778.                                 if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  779.                                     $schoolAverageReportCard->setRank($countSubSchoolAverageReportCard.'ère');
  780.                                 }else {
  781.                                     $schoolAverageReportCard->setRank($countSubSchoolAverageReportCard.'er');
  782.                                 }
  783.                             }else {
  784.                                 $schoolAverageReportCard->setRank($countSubSchoolAverageReportCard.'è');
  785.                             }
  786.                             $countExSubSchoolAverageReportCard $countSubSchoolAverageReportCard;
  787.                         }
  788.                         $countSubSchoolAverageReportCard++;
  789.                         $moySubPrecedent $schoolAverageReportCard->getAverage();
  790.                     }
  791.                 }
  792.             }
  793.             $schoolReportCards $schoolReportCardRepository->createQueryBuilder('entity')
  794.             ->andWhere('entity.reportCard = :reportCard')
  795.             ->setParameter('reportCard'$entity)
  796.             ->andWhere('entity.is_unclassified = :is_unclassified')
  797.             ->setParameter('is_unclassified'0)
  798.             ->andWhere('entity.classroom = :classroom')
  799.             ->setParameter('classroom'$schoolReportCard->getClassroom())
  800.             ->orderBy('entity.report_card_average''DESC')
  801.             ->getQuery()
  802.             ->getResult();
  803.             $count 1;
  804.             $countEx 1;
  805.             $moyPre = -1;
  806.             foreach ($schoolReportCards as $key => $schoolReportCard) {
  807.                 if ($schoolReportCard->isUnclassified()) {
  808.                     $schoolReportCard->setRank('NC');
  809.                     $schoolReportCard->setIsUnclassified(true);
  810.                 }else{
  811.                     if ($schoolReportCard->getReportCardAverage() == $moyPre) {
  812.                         if ($count == 1) {
  813.                             if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  814.                                 $schoolReportCard->setRank($countEx.'ère EX');
  815.                             }else {
  816.                                 $schoolReportCard->setRank($countEx.'er EX');
  817.                             }
  818.                         }else {
  819.                             $schoolReportCard->setRank($countEx.'è EX');
  820.                         }
  821.                     }else {
  822.                         if ($count == 1) {
  823.                             if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  824.                                 $schoolReportCard->setRank($count.'ère');
  825.                             }else {
  826.                                 $schoolReportCard->setRank($count.'er');
  827.                             }
  828.                         }else {
  829.                             $schoolReportCard->setRank($count.'è');
  830.                         }
  831.                         $countEx $count;
  832.                     }
  833.                     $count++;
  834.                     $moyPre $schoolReportCard->getReportCardAverage();
  835.                 }
  836.             }
  837.             $index++;
  838.         }
  839.         try {
  840.             $entityManager->flush();
  841.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  842.         } catch (\Throwable $th) {
  843.             $this->addFlash('warning'$th->getMessage());
  844.         }
  845.         
  846.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  847.     }
  848.     /**
  849.      * @Route("/{id}/print", name="report_card_print", methods={"GET"})
  850.     */
  851.     public function printReportCards(Request $requestPdf $knpSnappyPdfReportCard $reportCardSchoolMatterTypeRepository $schoolMatterTypeRepositorySchoolReportCardRepository $schoolReportCardRepositorySettingClassroomRepository $classroomRepository)
  852.     {
  853.         /**@var User $user */
  854.         $user $this->getUser();
  855.         $schoolYear $user->getSchoolYear();
  856.         $setting $reportCard->getEstablishment();
  857.         $template 'school/print/primaireRepordCards.html.twig';
  858.         if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  859.             $template 'school/print/secondaireRepordCards.html.twig';
  860.         }
  861.         $classroomId $request->query->get('classroom_id');
  862.         $classroom $classroomId $classroomRepository->find($classroomId) : null;
  863.         $schoolReportCards $schoolReportCardRepository->findByReportCardFiltered($reportCard$classroom);
  864.         $html $this->renderView($template, [
  865.             'report_card' => $reportCard,
  866.             'school_report_cards' => $schoolReportCards,
  867.             'school_year' => $schoolYear,
  868.             'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
  869.             'setting' => $setting,
  870.         ]);
  871.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  872.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  873.         $options = [
  874.             'orientation' => 'Portrait'
  875.             //'header-html' => $header
  876.             //'footer-html' => $footer
  877.         ];
  878.         $file_name 'BULLETINS_'.$reportCard->getCode().".pdf";
  879.         try {
  880.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  881.         } catch (\Throwable $th) {
  882.             $this->addFlash('info'"Effectué");
  883.         }
  884.         return $this->redirectToRoute('preview', [
  885.             'file' => $file_name,
  886.             'dir' => 'report-cards',
  887.         ]);
  888.     }
  889.     /**
  890.      * @Route("/{id}/compute-annual-matter-average", name="report_card_compute_annual_matter_average", methods={"GET"})
  891.     */
  892.     public function computeAnnualMatterAverage(ReportCard $reportCardSchoolAverageReportCardRepository $schoolAverageReportCardRepositorySchoolReportCardRepository $schoolReportCardRepositorySchoolMatterRepository $schoolMatterRepository): Response
  893.     {
  894.         $entityManager $this->getDoctrine()->getManager();
  895.         // Pour les matières
  896.         $donnees = new ArrayCollection();
  897.         foreach ($schoolMatterRepository->findBy(['establishment' => $reportCard->getEstablishment()], []) as $key => $schoolMatter) {
  898.             if (!$schoolMatter->getIsTestMatter()) {
  899.                 foreach ($schoolMatter->getSchoolSubMatters() as $key => $schoolSubMatter) {
  900.                     foreach ($reportCard->getSchoolReportCards() as $key => $schoolReportCard) {
  901.                         $subSchoolAverageReportCard $schoolAverageReportCardRepository->findOneBy(['studentRegistration' => $schoolReportCard->getStudentRegistration(), 'reportCard' => $schoolReportCard'subMatter' => $schoolSubMatter], []);
  902.                         $xAverage 0;
  903.                         $coefficient 0;
  904.                         $xschoolAverageReportCards $schoolAverageReportCardRepository->createQueryBuilder('entity')
  905.                         ->innerJoin('entity.reportCard''reportCard')
  906.                         ->addSelect('reportCard')
  907.                         ->andWhere('entity.studentRegistration = :studentRegistration')
  908.                         ->setParameter('studentRegistration'$schoolReportCard->getStudentRegistration())
  909.                         ->andWhere('entity.subMatter = :subMatter')
  910.                         ->setParameter('subMatter'$schoolSubMatter)
  911.                         ->andWhere('entity.average < :average')
  912.                         ->setParameter('average'999)
  913.                         ->getQuery()
  914.                         ->getResult();
  915.                         foreach ($xschoolAverageReportCards as $key => $xschoolAverageReportCard) {
  916.                             $xAverage += ($xschoolAverageReportCard->getAverage() * $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient());
  917.                             $coefficient += $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient();
  918.                         }
  919.                         if (null != $subSchoolAverageReportCard && $coefficient 0) {
  920.                             $subSchoolAverageReportCard->setAnnualAverage($xAverage $coefficient);
  921.                         }
  922.                     }
  923.                 }
  924.                 foreach ($reportCard->getSchoolReportCards() as $key => $schoolReportCard) {
  925.                     $schoolAverageReportCard $schoolAverageReportCardRepository->findOneBy(['studentRegistration' => $schoolReportCard->getStudentRegistration(), 'reportCard' => $schoolReportCard'matter' => $schoolMatter'subMatter' => null], []);
  926.                     $xAverage 0;
  927.                     $coefficient 0;
  928.                     $xschoolAverageReportCards $schoolAverageReportCardRepository->createQueryBuilder('entity')
  929.                     ->innerJoin('entity.reportCard''reportCard')
  930.                     ->addSelect('reportCard')
  931.                     ->andWhere('entity.studentRegistration = :studentRegistration')
  932.                     ->setParameter('studentRegistration'$schoolReportCard->getStudentRegistration())
  933.                     ->andWhere('entity.matter = :matter')
  934.                     ->setParameter('matter'$schoolMatter)
  935.                     ->andWhere('entity.average < :average')
  936.                     ->setParameter('average'999)
  937.                     ->getQuery()
  938.                     ->getResult();
  939.                     foreach ($xschoolAverageReportCards as $key => $xschoolAverageReportCard) {
  940.                         if ($xschoolAverageReportCard->getSubMatter() == null) {
  941.                             $xAverage += ($xschoolAverageReportCard->getAverage() * $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient());
  942.                             $coefficient += $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient();
  943.                         }
  944.                     }
  945.                     if (null != $schoolAverageReportCard && $coefficient 0) {
  946.                         $schoolAverageReportCard->setAnnualAverage($xAverage $coefficient);
  947.                     }
  948.                 }
  949.                 try {
  950.                     $entityManager->flush();
  951.                 } catch (\Throwable $th) {
  952.                     $this->addFlash('warning'$th->getMessage());
  953.                 }
  954.             }
  955.             
  956.         }
  957.         try {
  958.             $entityManager->flush();
  959.             return $this->json(['code' => 200'message' => "Moyenne annuelle Traitement effectué :)"], 200);
  960.         } catch (\Throwable $th) {
  961.             $this->addFlash('warning'$th->getMessage());
  962.         }
  963.         
  964.         $this->addFlash('warning'"Traitement non effectué");
  965.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  966.     }
  967.     /**
  968.      * @Route("/{id}/compute-annual-report-card-average", name="report_card_compute_annual_report_card_average", methods={"GET"})
  969.     */
  970.     public function computeAnnualReportCardAverage(ReportCard $reportCardSchoolReportCardRepository $schoolReportCardRepository): Response
  971.     {
  972.         $entityManager $this->getDoctrine()->getManager();
  973.         foreach ($reportCard->getSchoolReportCards() as $key => $schoolReportCard) {
  974.             $schoolReportCards $schoolReportCardRepository->createQueryBuilder('entity')
  975.             ->andWhere('entity.studentRegistration = :studentRegistration')
  976.             ->setParameter('studentRegistration'$schoolReportCard->getStudentRegistration())
  977.             ->getQuery()
  978.             ->getResult();
  979.             foreach ($schoolReportCards as $key => $schoolReportCard) {
  980.                 $xAverage $schoolReportCardRepository->createQueryBuilder('entity')
  981.                 ->andWhere('entity.studentRegistration = :studentRegistration')
  982.                 ->setParameter('studentRegistration'$schoolReportCard->getStudentRegistration())
  983.                 ->andWhere('entity.report_card_average > :report_card_average')
  984.                 ->setParameter('report_card_average'0)
  985.                 ->select('SUM(entity.report_card_average * entity.coefficient)')
  986.                 ->getQuery()
  987.                 ->getSingleScalarResult();
  988.                 $coefficient $schoolReportCardRepository->createQueryBuilder('entity')
  989.                 ->andWhere('entity.studentRegistration = :studentRegistration')
  990.                 ->setParameter('studentRegistration'$schoolReportCard->getStudentRegistration())
  991.                 ->andWhere('entity.report_card_average > :report_card_average')
  992.                 ->setParameter('report_card_average'0)
  993.                 ->select('SUM(entity.coefficient)')
  994.                 ->getQuery()
  995.                 ->getSingleScalarResult();
  996.                 if ($coefficient 0) {
  997.                     $schoolReportCard->setAnnualAverage($xAverage $coefficient );
  998.                 }
  999.                 
  1000.             }
  1001.         }
  1002.         try {
  1003.             $entityManager->flush();
  1004.             return $this->json(['code' => 200'message' => "Moyenne annuel Traitement effectué :)"], 200);
  1005.         } catch (\Throwable $th) {
  1006.             $this->addFlash('warning'$th->getMessage());
  1007.         }
  1008.         
  1009.         $this->addFlash('warning'"Traitement non effectué");
  1010.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  1011.     }
  1012.     /**
  1013.      * @Route("/{id}/compute-annual-rank", name="report_card_compute_annual_rank", methods={"GET"})
  1014.     */
  1015.     public function computeAnnualRank(ReportCard $entitySchoolReportCardRepository $schoolReportCardRepositorySchoolAverageReportCardRepository $schoolAverageReportCardRepository): Response
  1016.     {
  1017.         $entityManager $this->getDoctrine()->getManager();
  1018.         $index 1;
  1019.         $donnees = new ArrayCollection();
  1020.         $index 1;
  1021.         foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
  1022.             // rang de la periode
  1023.             foreach ($schoolReportCard->getReportCard()->getLevel()->getSchoolMatters() as $key => $schoolMatter) {
  1024.                 $schoolAverageReportCards $schoolAverageReportCardRepository->createQueryBuilder('entity')
  1025.                 ->innerJoin('entity.reportCard''schoolReportCard')
  1026.                 ->addSelect('schoolReportCard')
  1027.                 ->andWhere('schoolReportCard.reportCard = :reportCard')
  1028.                 ->setParameter('reportCard'$entity)
  1029.                 ->andWhere('entity.classroom = :classroom')
  1030.                 ->setParameter('classroom'$schoolReportCard->getClassroom())
  1031.                 ->andWhere('entity.matter = :matter')
  1032.                 ->setParameter('matter'$schoolMatter)
  1033.                 ->orderBy('entity.annual_average''DESC')
  1034.                 ->getQuery()
  1035.                 ->getResult();
  1036.                 $countSchoolAverageReportCard 1;
  1037.                 $countExSchoolAverageReportCard 1;
  1038.                 $moyPrecedent = -1;
  1039.                 
  1040.                 foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
  1041.                     if ($schoolAverageReportCard->getAnnualAverage() > 20) {
  1042.                         $schoolAverageReportCard->setAnnualRank('NC');
  1043.                     }else {
  1044.                         if ($schoolAverageReportCard->getSubMatter() == null) {
  1045.                             if ($schoolAverageReportCard->getAnnualAverage() == $moyPrecedent) {
  1046.                                 if ($countSchoolAverageReportCard == 1) {
  1047.                                     if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  1048.                                         $schoolAverageReportCard->setAnnualRank($countExSchoolAverageReportCard.'ère EX');
  1049.                                     }else {
  1050.                                         $schoolAverageReportCard->setAnnualRank($countExSchoolAverageReportCard.'er EX');
  1051.                                     }
  1052.                                 }else {
  1053.                                     $schoolAverageReportCard->setAnnualRank($countExSchoolAverageReportCard.'è EX');
  1054.                                 }
  1055.                             }else {
  1056.                                 if ($countSchoolAverageReportCard == 1) {
  1057.                                     if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  1058.                                         $schoolAverageReportCard->setAnnualRank($countSchoolAverageReportCard.'ère');
  1059.                                     }else {
  1060.                                         $schoolAverageReportCard->setAnnualRank($countSchoolAverageReportCard.'er');
  1061.                                     }
  1062.                                 }else {
  1063.                                     $schoolAverageReportCard->setAnnualRank($countSchoolAverageReportCard.'è');
  1064.                                 }
  1065.                                 $countExSchoolAverageReportCard $countSchoolAverageReportCard;
  1066.                             }
  1067.                             $countSchoolAverageReportCard++;
  1068.                             $moyPrecedent $schoolAverageReportCard->getAnnualAverage();
  1069.                         }
  1070.                     }
  1071.                 }
  1072.             }
  1073.             foreach ($schoolReportCard->getClassroom()->getLevel()->getSchoolSubMatters() as $key => $schoolSubMatter) {
  1074.                 $schoolAverageReportCards $schoolAverageReportCardRepository->createQueryBuilder('entity')
  1075.                 ->innerJoin('entity.reportCard''schoolReportCard')
  1076.                 ->addSelect('schoolReportCard')
  1077.                 ->andWhere('schoolReportCard.reportCard = :reportCard')
  1078.                 ->setParameter('reportCard'$entity)
  1079.                 ->andWhere('entity.classroom = :classroom')
  1080.                 ->setParameter('classroom'$schoolReportCard->getClassroom())
  1081.                 ->andWhere('entity.subMatter = :subMatter')
  1082.                 ->setParameter('subMatter'$schoolSubMatter)
  1083.                 ->orderBy('entity.annual_average''DESC')
  1084.                 ->getQuery()
  1085.                 ->getResult();
  1086.                 
  1087.                 $countSubSchoolAverageReportCard 1;
  1088.                 $countExSubSchoolAverageReportCard 1;
  1089.                 $moySubPrecedent = -1;
  1090.                 foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
  1091.                     if ($schoolAverageReportCard->getAverage() >= 999 || $schoolAverageReportCard->getCoefficient() <= || $schoolAverageReportCard->getNoteOn() <= 0) {
  1092.                         $schoolAverageReportCard->setAnnualRank('NC');
  1093.                     }else {
  1094.                         if ($schoolAverageReportCard->getAverage() == $moySubPrecedent) {
  1095.                             if ($countSubSchoolAverageReportCard == 1) {
  1096.                                 if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  1097.                                     $schoolAverageReportCard->setAnnualRank($countExSubSchoolAverageReportCard.'ère EX');
  1098.                                 }else {
  1099.                                     $schoolAverageReportCard->setAnnualRank($countExSubSchoolAverageReportCard.'er EX');
  1100.                                 }
  1101.                             }else {
  1102.                                 $schoolAverageReportCard->setAnnualRank($countExSubSchoolAverageReportCard.'è EX');
  1103.                             }
  1104.                         }else {
  1105.                             if ($countSubSchoolAverageReportCard == 1) {
  1106.                                 if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  1107.                                     $schoolAverageReportCard->setAnnualRank($countSubSchoolAverageReportCard.'ère');
  1108.                                 }else {
  1109.                                     $schoolAverageReportCard->setAnnualRank($countSubSchoolAverageReportCard.'er');
  1110.                                 }
  1111.                             }else {
  1112.                                 $schoolAverageReportCard->setAnnualRank($countSubSchoolAverageReportCard.'è');
  1113.                             }
  1114.                             $countExSubSchoolAverageReportCard $countSubSchoolAverageReportCard;
  1115.                         }
  1116.                         $countSubSchoolAverageReportCard++;
  1117.                         $moySubPrecedent $schoolAverageReportCard->getAverage();
  1118.                     }
  1119.                 }
  1120.             }
  1121.         }
  1122.         foreach ($entity->getLevel()->getSettingClassrooms() as $key => $classroom) {
  1123.             $schoolReportCards $schoolReportCardRepository->createQueryBuilder('entity')
  1124.             ->andWhere('entity.reportCard = :reportCard')
  1125.             ->setParameter('reportCard'$entity)
  1126.             ->andWhere('entity.classroom = :classroom')
  1127.             ->setParameter('classroom'$classroom)
  1128.             ->orderBy('entity.annual_average''DESC')
  1129.             ->getQuery()
  1130.             ->getResult();
  1131.             $count 1;
  1132.             $countEx 1;
  1133.             $moySubPre = -1;
  1134.             foreach ($schoolReportCards as $key => $schoolReportCard) {
  1135.                 if ($schoolReportCard->getAnnualAverage() == $moySubPre) {
  1136.                     if ($count == 1) {
  1137.                         if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  1138.                             $schoolReportCard->setAnnualRank($countEx.'ère EX');
  1139.                         }else {
  1140.                             $schoolReportCard->setAnnualRank($countEx.'er EX');
  1141.                         }
  1142.                     }else {
  1143.                         $schoolReportCard->setAnnualRank($countEx.'è EX');
  1144.                     }
  1145.                 }else {
  1146.                     if ($count == 1) {
  1147.                         if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
  1148.                             $schoolReportCard->setAnnualRank($count.'ère');
  1149.                         }else {
  1150.                             $schoolReportCard->setAnnualRank($count.'er');
  1151.                         }
  1152.                     }else {
  1153.                         $schoolReportCard->setAnnualRank($count.'è');
  1154.                     }
  1155.                     $countEx $count;
  1156.                 }
  1157.                 $count++;
  1158.                 $moySubPre $schoolReportCard->getAnnualAverage();
  1159.             }
  1160.             $index++;
  1161.         }
  1162.         try {
  1163.             $entityManager->flush();
  1164.             return $this->json(['code' => 200'message' => "Ran annuel Traitement effectué :)"], 200);
  1165.         } catch (\Throwable $th) {
  1166.             $this->addFlash('warning'$th->getMessage());
  1167.         }
  1168.         
  1169.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  1170.     }
  1171.     /**
  1172.      * @Route("/{id}/maternelle-print", name="report_card_maternelle_print", methods={"GET"})
  1173.     */
  1174.     public function printMaternelleReportCards(Request $requestPdf $knpSnappyPdfReportCard $reportCardSchoolMatterTypeRepository $schoolMatterTypeRepositorySchoolReportCardRepository $schoolReportCardRepositorySettingClassroomRepository $classroomRepository)
  1175.     {
  1176.         /**@var User $user */
  1177.         $user $this->getUser();
  1178.         $schoolYear $user->getSchoolYear();
  1179.         $setting $reportCard->getEstablishment();
  1180.         $template 'school/print/maternelleRepordCards.html.twig';
  1181.         $classroomId $request->query->get('classroom_id');
  1182.         $classroom $classroomId $classroomRepository->find($classroomId) : null;
  1183.         $schoolReportCards $schoolReportCardRepository->findByReportCardFiltered($reportCard$classroom);
  1184.         $html $this->renderView($template, [
  1185.             'report_card' => $reportCard,
  1186.             'school_report_cards' => $schoolReportCards,
  1187.             'school_year' => $schoolYear,
  1188.             'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
  1189.             'setting' => $setting,
  1190.         ]);
  1191.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  1192.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  1193.         $options = [
  1194.             'orientation' => 'Portrait'
  1195.             //'header-html' => $header
  1196.             //'footer-html' => $footer
  1197.         ];
  1198.         $file_name 'BULLETINS_MATERNELLE_'.$reportCard->getCode().".pdf";
  1199.         try {
  1200.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  1201.         } catch (\Throwable $th) {
  1202.             $this->addFlash('info'"Effectué");
  1203.         }
  1204.         return $this->redirectToRoute('preview', [
  1205.             'file' => $file_name,
  1206.             'dir' => 'report-cards',
  1207.         ]);
  1208.     }
  1209.     /**
  1210.      * @Route("/{id}/last-maternelle-print", name="report_card_last_maternelle_print", methods={"GET"})
  1211.     */
  1212.     public function printLastMaternelleReportCards(Request $requestPdf $knpSnappyPdfReportCard $reportCardSchoolMatterTypeRepository $schoolMatterTypeRepositorySchoolReportCardRepository $schoolReportCardRepositorySettingClassroomRepository $classroomRepository)
  1213.     {
  1214.         /**@var User $user */
  1215.         $user $this->getUser();
  1216.         $schoolYear $user->getSchoolYear();
  1217.         $setting $reportCard->getEstablishment();
  1218.         $template 'school/print/maternelleLastRepordCards.html.twig';
  1219.         $classroomId $request->query->get('classroom_id');
  1220.         $classroom $classroomId $classroomRepository->find($classroomId) : null;
  1221.         $schoolReportCards $schoolReportCardRepository->findByReportCardFiltered($reportCard$classroom);
  1222.         $html $this->renderView($template, [
  1223.             'report_card' => $reportCard,
  1224.             'school_report_cards' => $schoolReportCards,
  1225.             'school_year' => $schoolYear,
  1226.             'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
  1227.             'setting' => $setting,
  1228.         ]);
  1229.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  1230.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  1231.         $options = [
  1232.             'orientation' => 'Portrait'
  1233.             //'header-html' => $header
  1234.             //'footer-html' => $footer
  1235.         ];
  1236.         $file_name 'BULLETINS_ANNUELS_MATERNELLE_'.$reportCard->getCode().".pdf";
  1237.         try {
  1238.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  1239.         } catch (\Throwable $th) {
  1240.             $this->addFlash('info'"Effectué");
  1241.         }
  1242.         return $this->redirectToRoute('preview', [
  1243.             'file' => $file_name,
  1244.             'dir' => 'report-cards',
  1245.         ]);
  1246.     }
  1247.     /**
  1248.      * @Route("/{id}/last-print", name="report_card_last_print", methods={"GET"})
  1249.     */
  1250.     public function printLastReportCards(Request $requestPdf $knpSnappyPdfReportCard $reportCardSchoolMatterTypeRepository $schoolMatterTypeRepositorySchoolReportCardRepository $schoolReportCardRepositorySettingClassroomRepository $classroomRepository)
  1251.     {
  1252.         /**@var User $user */
  1253.         $user $this->getUser();
  1254.         $schoolYear $user->getSchoolYear();
  1255.         $setting $reportCard->getEstablishment();
  1256.         $template 'school/print/primaireLastRepordCards.html.twig';
  1257.         if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  1258.             $template 'school/print/secondaireLastRepordCards.html.twig';
  1259.         }
  1260.         $classroomId $request->query->get('classroom_id');
  1261.         $classroom $classroomId $classroomRepository->find($classroomId) : null;
  1262.         $schoolReportCards $schoolReportCardRepository->findByReportCardFiltered($reportCard$classroom);
  1263.         $html $this->renderView($template, [
  1264.             'report_card' => $reportCard,
  1265.             'school_report_cards' => $schoolReportCards,
  1266.             'schoolReportCardRepository' => $schoolReportCardRepository,
  1267.             'school_year' => $schoolYear,
  1268.             'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
  1269.             'setting' => $setting,
  1270.         ]);
  1271.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  1272.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  1273.         $options = [
  1274.             'orientation' => 'Portrait'
  1275.             //'header-html' => $header
  1276.             //'footer-html' => $footer
  1277.         ];
  1278.         $file_name 'BULLETINS_ANNUELS_'.$reportCard->getCode().".pdf";
  1279.         try {
  1280.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  1281.         } catch (\Throwable $th) {
  1282.             $this->addFlash('info'"Effectué");
  1283.         }
  1284.         return $this->redirectToRoute('preview', [
  1285.             'file' => $file_name,
  1286.             'dir' => 'report-cards',
  1287.         ]);
  1288.     }
  1289.     /**
  1290.      * @Route("/{id}/blank-note-card-print", name="report_card_blank_note_card_print", methods={"GET"})
  1291.     */
  1292.     public function printBlankNoteCard(Pdf $knpSnappyPdfReportCard $reportCard)
  1293.     {
  1294.         /**@var User $user */
  1295.         $user $this->getUser();
  1296.         $schoolYear $user->getSchoolYear();
  1297.         $setting $reportCard->getEstablishment();
  1298.         $template 'school/print/blankNoteCard.html.twig';
  1299.         if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  1300.             $template 'school/print/blankNoteCard.html.twig';
  1301.         }
  1302.         
  1303.         $html $this->renderView($template, [
  1304.             'report_card' => $reportCard,
  1305.             'school_year' => $schoolYear,
  1306.             'setting' => $setting,
  1307.         ]);
  1308.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  1309.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  1310.         $options = [
  1311.             'orientation' => 'Landscape',
  1312.             'header-html' => $header,
  1313.             'footer-html' => $footer
  1314.         ];
  1315.         $file_name 'FICHE_DE_NOTES_VIDE_'.$reportCard->getCode().".pdf";
  1316.         try {
  1317.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  1318.         } catch (\Throwable $th) {
  1319.             $this->addFlash('info'"Effectué");
  1320.         }
  1321.         return $this->redirectToRoute('preview', [
  1322.             'file' => $file_name,
  1323.             'dir' => 'report-cards',
  1324.         ]);
  1325.     }
  1326.     /**
  1327.      * @Route("/{id}/note-card-print", name="report_card_note_card_print", methods={"GET"})
  1328.     */
  1329.     public function printNoteCard(Pdf $knpSnappyPdfReportCard $reportCard)
  1330.     {
  1331.         /**@var User $user */
  1332.         $user $this->getUser();
  1333.         $schoolYear $user->getSchoolYear();
  1334.         $setting $reportCard->getEstablishment();
  1335.         $template 'school/print/noteCard.html.twig';
  1336.         if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  1337.             $template 'school/print/noteCard.html.twig';
  1338.         }
  1339.         
  1340.         $html $this->renderView($template, [
  1341.             'report_card' => $reportCard,
  1342.             'school_year' => $schoolYear,
  1343.             'setting' => $setting,
  1344.         ]);
  1345.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  1346.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  1347.         $options = [
  1348.             'orientation' => 'Landscape',
  1349.             'header-html' => $header,
  1350.             'footer-html' => $footer
  1351.         ];
  1352.         $file_name 'FICHE_DE_NOTES_'.$reportCard->getCode().".pdf";
  1353.         try {
  1354.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  1355.         } catch (\Throwable $th) {
  1356.             $this->addFlash('info'"Effectué");
  1357.         }
  1358.         return $this->redirectToRoute('preview', [
  1359.             'file' => $file_name,
  1360.             'dir' => 'report-cards',
  1361.         ]);
  1362.     }
  1363.     /**
  1364.      * @Route("/{id}/assessment-slip-print", name="report_card_assessment_slip_print", methods={"GET"})
  1365.     */
  1366.     public function printAssessmentSlip(Pdf $knpSnappyPdfReportCard $reportCard)
  1367.     {
  1368.         /**@var User $user */
  1369.         $user $this->getUser();
  1370.         $schoolYear $user->getSchoolYear();
  1371.         $setting $reportCard->getEstablishment();
  1372.         $template 'school/print/assessmentSlip.html.twig';
  1373.         if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  1374.             $template 'school/print/assessmentSlip.html.twig';
  1375.         }
  1376.         
  1377.         $html $this->renderView($template, [
  1378.             'report_card' => $reportCard,
  1379.             'school_year' => $schoolYear,
  1380.             'setting' => $setting,
  1381.         ]);
  1382.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  1383.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  1384.         $options = [
  1385.             'orientation' => 'Landscape',
  1386.             'header-html' => $header,
  1387.             'footer-html' => $footer
  1388.         ];
  1389.         $file_name 'BORDEREAU_EVALUATION_'.$reportCard->getCode().".pdf";
  1390.         try {
  1391.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  1392.         } catch (\Throwable $th) {
  1393.             $this->addFlash('info'"Effectué");
  1394.         }
  1395.         return $this->redirectToRoute('preview', [
  1396.             'file' => $file_name,
  1397.             'dir' => 'report-cards',
  1398.         ]);
  1399.     }
  1400.     /**
  1401.      * @Route("/{id}/compute-level-average", name="report_card_compute_level_average", methods={"GET"})
  1402.     */
  1403.     public function computeLevelAverage(ReportCard $entitySchoolReportCardRepository $schoolReportCardRepository): Response
  1404.     {
  1405.         $entityManager $this->getDoctrine()->getManager();
  1406.         $levelAverage $schoolReportCardRepository->createQueryBuilder('entity')
  1407.         ->andWhere('entity.reportCard = :reportCard')
  1408.         ->setParameter('reportCard'$entity)
  1409.         ->andWhere('entity.is_unclassified = :is_unclassified')
  1410.         ->setParameter('is_unclassified'0)
  1411.         
  1412.         ->select('AVG(entity.report_card_average)')
  1413.         ->getQuery()
  1414.         ->getSingleScalarResult();
  1415.         $minAverage $schoolReportCardRepository->createQueryBuilder('entity')
  1416.         ->andWhere('entity.reportCard = :reportCard')
  1417.         ->setParameter('reportCard'$entity)
  1418.         ->andWhere('entity.is_unclassified = :is_unclassified')
  1419.         ->setParameter('is_unclassified'0)
  1420.         
  1421.         ->select('MIN(entity.report_card_average)')
  1422.         ->getQuery()
  1423.         ->getSingleScalarResult();
  1424.         $maxAverage $schoolReportCardRepository->createQueryBuilder('entity')
  1425.         ->andWhere('entity.reportCard = :reportCard')
  1426.         ->setParameter('reportCard'$entity)
  1427.         ->andWhere('entity.is_unclassified = :is_unclassified')
  1428.         ->setParameter('is_unclassified'0)
  1429.         
  1430.         ->select('MAX(entity.report_card_average)')
  1431.         ->getQuery()
  1432.         ->getSingleScalarResult();
  1433.         $entity->setLevelAverage($levelAverage);
  1434.         $entity->setReportCardAverage($levelAverage);
  1435.         $entity->setSmallestAverage($minAverage);
  1436.         $entity->setStrongestAverage($maxAverage);
  1437.         try {
  1438.             $entityManager->flush();
  1439.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  1440.         } catch (\Throwable $th) {
  1441.             $this->addFlash('warning'$th->getMessage());
  1442.         }
  1443.         
  1444.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  1445.     }
  1446.     /**
  1447.      * @Route("/{id}/annul-assessment-slip-print", name="report_card_annual_assessment_slip_print", methods={"GET"})
  1448.     */
  1449.     public function printAnnualAssessmentSlip(Pdf $knpSnappyPdfReportCard $reportCard)
  1450.     {
  1451.         /**@var User $user */
  1452.         $user $this->getUser();
  1453.         $schoolYear $user->getSchoolYear();
  1454.         $setting $reportCard->getEstablishment();
  1455.         $template 'school/print/annual_assessment_slip.html.twig';
  1456.         if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  1457.             $template 'school/print/annual_assessment_slip.html.twig';
  1458.         }
  1459.         
  1460.         $html $this->renderView($template, [
  1461.             'report_card' => $reportCard,
  1462.             'school_year' => $schoolYear,
  1463.             'setting' => $setting,
  1464.         ]);
  1465.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  1466.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  1467.         $options = [
  1468.             'orientation' => 'Landscape',
  1469.             'header-html' => $header,
  1470.             'footer-html' => $footer
  1471.         ];
  1472.         $file_name "BORDEREAU_EVALUATION_ANNUELLE_.pdf";
  1473.         try {
  1474.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/report-cards/' $file_name$optionstrue);
  1475.         } catch (\Throwable $th) {
  1476.             $this->addFlash('info'"Effectué");
  1477.         }
  1478.         return $this->redirectToRoute('preview', [
  1479.             'file' => $file_name,
  1480.             'dir' => 'report-cards',
  1481.         ]);
  1482.     }
  1483.     /**
  1484.      * @Route("/absence", name="report_card_absence", methods={"GET"})
  1485.      */
  1486.     public function absence(Pdf $knpSnappyPdfRequest $requestReportCardRepository $reportCardRepositorySchoolYearPeriodeRepository $schoolYearPeriodeRepositorySettingClassroomRepository $settingClassroomRepositoryEntityManagerInterface $entityManagerSchoolReportCardAbsenceRepository $schoolReportCardAbsenceRepository): Response
  1487.     {
  1488.         /**@var User $user */
  1489.         $user $this->getUser();
  1490.         $schoolYear $user->getSchoolYear();
  1491.         $establishment $user->getEstablishment();
  1492.         $requestedOutput $request->query->get('output'$request->query->get('action''show'));
  1493.         $schoolYearPeriode $schoolYearPeriodeRepository->findOneBy(['establishment' => $establishment'id' => $request->get('schoolYearPeriode')], []);
  1494.         $schoolYearPeriodes $schoolYearPeriodeRepository->findBy(['establishment' => $establishment'schoolYear' => $schoolYear], []);
  1495.         $settingClassrooms $settingClassroomRepository->findBy(['establishment' => $establishment'schoolYear' => $schoolYear], []);
  1496.         $settingClassroomId $request->get('settingClassroom');
  1497.         $settingClassroom null;
  1498.         if (null !== $settingClassroomId && '' !== $settingClassroomId && '0' !== (string) $settingClassroomId) {
  1499.             $settingClassroom $settingClassroomRepository->findOneBy(['establishment' => $establishment'id' => $settingClassroomId], []);
  1500.         }
  1501.         $reportCards = [];
  1502.         if (null !== $schoolYearPeriode) {
  1503.             $reportCards $reportCardRepository->findBy(['establishment' => $establishment'schoolYearPeriode' => $schoolYearPeriode], []);
  1504.         }
  1505.         if (null != $schoolYearPeriode) {
  1506.             $selectedClassrooms null !== $settingClassroom ? [$settingClassroom] : $settingClassrooms;
  1507.             foreach ($selectedClassrooms as $selectedClassroom) {
  1508.                 foreach ($selectedClassroom->getRegistereds($schoolYear) as $key => $studentRegistration) {
  1509.                     if (null == $schoolReportCardAbsenceRepository->findOneBy(['schoolYearPeriode' => $schoolYearPeriode'studentRegistration' => $studentRegistration], [])) {
  1510.                         $schoolReportCardAbsence = new SchoolReportCardAbsence();
  1511.                         $schoolReportCardAbsence->setEstablishment($establishment);
  1512.                         $schoolReportCardAbsence->setSchoolYear($schoolYear);
  1513.                         $schoolReportCardAbsence->setSchoolYearPeriode($schoolYearPeriode);
  1514.                         $schoolReportCardAbsence->setStudentRegistration($studentRegistration);
  1515.                         $schoolReportCardAbsence->setClassroom($selectedClassroom);
  1516.                         $schoolReportCardAbsence->setTotalAbsence($schoolReportCardAbsence->getNbHAbsence($schoolYearPeriode->getBeginAt(), $schoolYearPeriode->getEndAt()));
  1517.                         $schoolReportCardAbsence->setUnjustifiedAbsence($schoolReportCardAbsence->getNbHAbsence($schoolYearPeriode->getBeginAt(), $schoolYearPeriode->getEndAt()));
  1518.                         $schoolReportCardAbsence->setJustifiedAbsence(0);
  1519.                         $entityManager->persist($schoolReportCardAbsence);
  1520.                     }
  1521.                 }
  1522.             }
  1523.         }
  1524.         try {
  1525.             $entityManager->flush();
  1526.         } catch (\Throwable $th) {
  1527.             //throw $th;
  1528.         }
  1529.         $schoolReportCardAbsences = [];
  1530.         if (null !== $schoolYearPeriode) {
  1531.             $queryBuilder $schoolReportCardAbsenceRepository->createQueryBuilder('entity')
  1532.             ->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
  1533.             ->setParameter('schoolYearPeriode'$schoolYearPeriode)
  1534.             ->innerJoin('entity.studentRegistration''studentRegistration')
  1535.             ->addSelect('studentRegistration')
  1536.             ->innerJoin('studentRegistration.student''student')
  1537.             ->addSelect('student')
  1538.             ->orderBy('student.last_name''asc')
  1539.             ->addOrderBy('student.first_name''asc');
  1540.             if (null !== $settingClassroom) {
  1541.                 $queryBuilder
  1542.                 ->andWhere('entity.classroom = :classroom')
  1543.                 ->setParameter('classroom'$settingClassroom);
  1544.             }
  1545.             $schoolReportCardAbsences $queryBuilder
  1546.             ->getQuery()
  1547.             ->getResult();
  1548.         }
  1549.         if ('excel' === $requestedOutput) {
  1550.             $sortedSchoolReportCardAbsences $schoolReportCardAbsences;
  1551.             usort($sortedSchoolReportCardAbsences, function (SchoolReportCardAbsence $leftSchoolReportCardAbsence $right) {
  1552.                 $absenceComparison = ($left->getUnjustifiedAbsence() ?? 0) <=> ($right->getUnjustifiedAbsence() ?? 0);
  1553.                 if (!== $absenceComparison) {
  1554.                     return $absenceComparison;
  1555.                 }
  1556.                 $classroomComparison strcmp((string) $left->getClassroom(), (string) $right->getClassroom());
  1557.                 if (!== $classroomComparison) {
  1558.                     return $classroomComparison;
  1559.                 }
  1560.                 return strcmp($left->getStudentRegistration()->getName(), $right->getStudentRegistration()->getName());
  1561.             });
  1562.             $spreadsheet = new Spreadsheet();
  1563.             $sheet $spreadsheet->getActiveSheet();
  1564.             $index 1;
  1565.             $sheet->setCellValue('A' $index'RANG');
  1566.             $sheet->setCellValue('B' $index'NOM ET PRENOMS');
  1567.             $sheet->setCellValue('C' $index'MATRICULE');
  1568.             $sheet->setCellValue('D' $index'CLASSE');
  1569.             $sheet->setCellValue('E' $index'PERIODE');
  1570.             $sheet->setCellValue('F' $index'TOTAL H. ABSENCE');
  1571.             $sheet->setCellValue('G' $index'TOTAL H. JUSTIFIE');
  1572.             $sheet->setCellValue('H' $index'TOTAL H. NON JUSTIFIE');
  1573.             $index++;
  1574.             foreach ($sortedSchoolReportCardAbsences as $loopIndex => $schoolReportCardAbsence) {
  1575.                 $sheet->setCellValue('A' $index$loopIndex 1);
  1576.                 $sheet->setCellValue('B' $index$schoolReportCardAbsence->getStudentRegistration()->getName());
  1577.                 $sheet->setCellValue('C' $index$schoolReportCardAbsence->getStudentRegistration()->getStudent()->getRegistrationNumber());
  1578.                 $sheet->setCellValue('D' $index, (string) $schoolReportCardAbsence->getClassroom());
  1579.                 $sheet->setCellValue('E' $index, (string) $schoolReportCardAbsence->getSchoolYearPeriode());
  1580.                 $sheet->setCellValue('F' $index$schoolReportCardAbsence->getTotalAbsence());
  1581.                 $sheet->setCellValue('G' $index$schoolReportCardAbsence->getJustifiedAbsence());
  1582.                 $sheet->setCellValue('H' $index$schoolReportCardAbsence->getUnjustifiedAbsence());
  1583.                 $index++;
  1584.             }
  1585.             foreach (range('A''H') as $column) {
  1586.                 $sheet->getColumnDimension($column)->setAutoSize(true);
  1587.             }
  1588.             $sheet->setTitle('ABSENCES');
  1589.             $writer = new Xlsx($spreadsheet);
  1590.             $classroomLabel null !== $settingClassroom preg_replace('/[^A-Za-z0-9_-]/''_', (string) $settingClassroom) : 'TOUTES_CLASSES';
  1591.             $periodeLabel null !== $schoolYearPeriode preg_replace('/[^A-Za-z0-9_-]/''_', (string) $schoolYearPeriode) : 'SANS_PERIODE';
  1592.             $fileName 'ABSENCE_BULLETIN_' $periodeLabel '_' $classroomLabel '.xlsx';
  1593.             $temp_file sys_get_temp_dir() . DIRECTORY_SEPARATOR uniqid('absence_bulletin_'true) . '.xlsx';
  1594.             $writer->save($temp_file);
  1595.             $response = new BinaryFileResponse($temp_file);
  1596.             $response->headers->set('Content-Type''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  1597.             $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$fileName);
  1598.             $response->deleteFileAfterSend(true);
  1599.             return $response;
  1600.         }
  1601.         if ('print' === $requestedOutput) {
  1602.             $html $this->renderView('school/report_card/print/absence.html.twig', [
  1603.                 'school_report_card_absences' => $schoolReportCardAbsences,
  1604.                 'report_cards' => $reportCards,
  1605.                 'school_year_periodes' => $schoolYearPeriodes,
  1606.                 'school_year_periode' => $schoolYearPeriode,
  1607.                 'setting_classrooms' => $settingClassrooms,
  1608.                 'setting_classroom' => $settingClassroom,
  1609.     
  1610.                 'school_year' => $schoolYear,
  1611.                 'setting' => $establishment,
  1612.             ]);
  1613.     
  1614.             $file_name "ABSENCE_BULLETIN_.pdf";
  1615.     
  1616.             $footer $this->renderView('print/footer.html.twig', ['setting' => $establishment]);
  1617.             $header $this->renderView('print/header.html.twig', ['setting' => $establishment]);
  1618.             
  1619.             $options = [
  1620.                 'orientation' => 'Portrait',
  1621.                 'header-html' => $header,
  1622.                 'footer-html' => $footer
  1623.             ];
  1624.             
  1625.             try {
  1626.                 $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/recovery/' $file_name$optionstrue);
  1627.             } catch (\Throwable $th) {
  1628.                 $this->addFlash('info'"Une erreur c'est produite");
  1629.             }
  1630.             
  1631.     
  1632.             return $this->redirectToRoute('preview', [
  1633.                 'file' => $file_name,
  1634.                 'dir' => 'recovery',
  1635.             ]);
  1636.         }
  1637.         return $this->render('school/report_card/absence.html.twig', [
  1638.             'school_report_card_absences' => $schoolReportCardAbsences,
  1639.             'report_cards' => $reportCards,
  1640.             'school_year_periodes' => $schoolYearPeriodes,
  1641.             'school_year_periode' => $schoolYearPeriode,
  1642.             'setting_classrooms' => $settingClassrooms,
  1643.             'setting_classroom' => $settingClassroom,
  1644.             'requested_output' => $requestedOutput,
  1645.         ]);
  1646.     }
  1647. }