src/Controller/MobileApp/CallSheetController.php line 253

Open in your IDE?
  1. <?php
  2. namespace App\Controller\MobileApp;
  3. use App\Entity\User;
  4. use DateTimeImmutable;
  5. use App\Service\SMSSender;
  6. use Informagenie\OrangeSDK;
  7. use App\Repository\UserRepository;
  8. use App\Service\DateIntervalManage;
  9. use App\Entity\CommunicationMessage;
  10. use App\Entity\SchoolTeacherCallSheet;
  11. use App\Repository\SchoolYearRepository;
  12. use App\Entity\SchoolTeacherCallSheetLine;
  13. use App\Entity\SchoolWorkingTimeHourLesson;
  14. use App\Repository\SchoolTeacherRepository;
  15. use Symfony\Component\Serializer\Serializer;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Doctrine\Common\Collections\ArrayCollection;
  20. use App\Repository\SchoolTeacherCallSheetRepository;
  21. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  22. use App\Repository\SchoolTeacherCallSheetLineRepository;
  23. use App\Repository\SchoolWorkingTimeHourLessonRepository;
  24. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  27. /**
  28.  * @Route("/online/api/v1/callsheet")
  29. */
  30. class CallSheetController extends AbstractController
  31. {
  32.     private $headers = [
  33.         'Content-Type' => 'application/json',
  34.         'Access-Control-Allow-Origin' => '*',
  35.         'Access-Control-Allow-Methods' => 'POST'
  36.     ];
  37.     /**
  38.      * @Route("/auth", name="online_api_v1_callsheet_auth")
  39.     */
  40.     public function auth(Request $requestUserPasswordHasherInterface $userPasswordHasherUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolYearRepository $schoolYearRepository): Response
  41.     {
  42.         $entityManager $this->getDoctrine()->getManager();
  43.         $encoders = [new JsonEncoder()];
  44.         $normalizer = [new ObjectNormalizer()];
  45.         $serializer = new Serializer($normalizer$encoders);
  46.         $content $request->getContent();
  47.         $contentJson json_decode($contenttrue);
  48.         $username $contentJson['username'];
  49.         $password $contentJson['password'];
  50.         $user $userRepository->findOneBy(['username' => $username], []);
  51.         if (null == $user) {
  52.             $data = ['code' => 400'msg' => "User not found"'request' => $contentJson];
  53.             $jsonContent $serializer->serialize($data'json');
  54.             $response = new Response($jsonContent200$this->headers);
  55.             return $response;
  56.         }
  57.         if (!$userPasswordHasher->isPasswordValid($user$password)) {
  58.             $data = ['code' => 403'msg' => "invalid credential"'request' => $request->request];
  59.             $jsonContent $serializer->serialize($data'json');
  60.             $response = new Response($jsonContent200$this->headers);
  61.             return $response;
  62.         }
  63.         $user->setLastAuthTime(time());
  64.         $user->setToken(md5(time()).$user->getId());
  65.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  66.         if (null == $schoolYear) {
  67.             $data = ['code' => 400'msg' => "Aucune année scolaire activé !)"'request' => $request->request];
  68.             $jsonContent $serializer->serialize($data'json');
  69.             $response = new Response($jsonContent200$this->headers);
  70.             return $response;
  71.         }
  72.         $establishment $user->getEstablishment();
  73.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  74.         if (null == $schoolTeacher) {
  75.             $data = ['code' => 400'msg' => "Enseignant introuvable"'request' => $request->request];
  76.             $jsonContent $serializer->serialize($data'json');
  77.             $response = new Response($jsonContent200$this->headers);
  78.             return $response;
  79.         }
  80.         $userData = [
  81.             'token' => $user->getToken(),
  82.             '_token_expire_at' => (time() + 604800),
  83.             '_time' => time(),
  84.             'last_name' => $user->getRhSalary()->getLastName(),
  85.             'first_name' => $user->getRhSalary()->getFirstName().' / '.$schoolYear->getCode(),
  86.             'image' => 'rh/salaries/'.$user->getRhSalary()->getImage()
  87.         ];
  88.         try {
  89.             $entityManager->flush();
  90.         } catch (\Throwable $th) {
  91.             $data = ['code' => 500'msg' => $th->getMessage()];
  92.             $jsonContent $serializer->serialize($data'json');
  93.             $response = new Response($jsonContent200$this->headers);
  94.             
  95.             return $response;
  96.         }
  97.         $data = ['code' => 200'msg' => "Access Granted"'user' => $userData];
  98.         $jsonContent $serializer->serialize($data'json');
  99.         $response = new Response($jsonContent200$this->headers);
  100.         
  101.         return $response;
  102.     }
  103.     /**
  104.      * @Route("/logout", name="online_api_v1_callsheet_logout")
  105.     */
  106.     public function logout(Request $requestUserRepository $userRepository): Response
  107.     {
  108.         $token $request->headers->get('token');
  109.         $entityManager $this->getDoctrine()->getManager();
  110.         $encoders = [new JsonEncoder()];
  111.         $normalizer = [new ObjectNormalizer()];
  112.         $serializer = new Serializer($normalizer$encoders);
  113.         $user $userRepository->findOneBy(['token' => $token], []);
  114.         if (null == $user) {
  115.             $data = ['code' => 403'msg' => "Access denied"];
  116.             $jsonContent $serializer->serialize($data'json');
  117.             $response = new Response($jsonContent200$this->headers);
  118.             return $response;
  119.         }
  120.         $user->setToken(md5('-1'));
  121.         try {
  122.             $entityManager->flush();
  123.         } catch (\Throwable $th) {}
  124.         $data = ['code' => 200'msg' => "logout"'token' => '-1'];
  125.         $jsonContent $serializer->serialize($data'json');
  126.         $response = new Response($jsonContent200$this->headers);
  127.         
  128.         return $response;
  129.     }
  130.     /**
  131.      * @Route("/index", name="online_api_v1_callsheet_index")
  132.     */
  133.     public function index(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolYearRepository $schoolYearRepositorySchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository): Response
  134.     {
  135.         $token $request->headers->get('token');
  136.         $encoders = [new JsonEncoder()];
  137.         $normalizer = [new ObjectNormalizer()];
  138.         $serializer = new Serializer($normalizer$encoders);
  139.         $user $userRepository->findOneBy(['token' => $token], []);
  140.         if (null == $user) {
  141.             $data = ['code' => 403'msg' => "Access denied"];
  142.             $jsonContent $serializer->serialize($data'json');
  143.             $response = new Response($jsonContent200$this->headers);
  144.             return $response;
  145.         }
  146.         if (!$user->isTokenValid()) {
  147.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  148.             $jsonContent $serializer->serialize($data'json');
  149.             $response = new Response($jsonContent200$this->headers);
  150.             return $response;
  151.         }
  152.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  153.         $establishment $user->getEstablishment();
  154.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  155.         if (null == $schoolTeacher) {
  156.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  157.             $jsonContent $serializer->serialize($data'json');
  158.             $response = new Response($jsonContent200$this->headers);
  159.             return $response;
  160.         }
  161.         $school_teacher_call_sheets $schoolTeacherCallSheetRepository->createQueryBuilder('entity')
  162.             ->innerJoin('entity.establishment''establishment')
  163.             ->addSelect('establishment')
  164.             ->andWhere('establishment.establishmentGroup = :establishmentGroup')
  165.             ->setParameter('establishmentGroup'$establishment->getEstablishmentGroup())
  166.             ->andWhere('entity.schoolYear = :schoolYear')
  167.             ->setParameter('schoolYear'$schoolYear)
  168.             ->andWhere('entity.schoolTeacher = :schoolTeacher')
  169.             ->setParameter('schoolTeacher'$schoolTeacher)
  170.             ->orderBy('entity.id''DESC')
  171.             ->getQuery()
  172.             ->getResult();
  173.         $call_sheets = new ArrayCollection();
  174.         foreach ($school_teacher_call_sheets as $key => $school_teacher_call_sheet) {
  175.             if ($school_teacher_call_sheet->getCreateDate()->format('Y-m-d') == date('Y-m-d')) {
  176.                 $call_sheets->add([
  177.                     'id' => $school_teacher_call_sheet->getId(),
  178.                     'createDate' => $school_teacher_call_sheet->getCreateDate()->format('d/m/Y'),
  179.                     'classroom' => $school_teacher_call_sheet->getSettingClassroom() ? $school_teacher_call_sheet->getSettingClassroom()->getLabel() : '',
  180.                     'matter' => $school_teacher_call_sheet->getSchoolMatter() ? $school_teacher_call_sheet->getSchoolMatter()->getLabel() : '',
  181.                     'timeTable' => $school_teacher_call_sheet->getSettingTimeTable() ? $school_teacher_call_sheet->getSettingTimeTable()->getLabel() : '',
  182.                     'day' => $school_teacher_call_sheet->getDay(),
  183.                     'isValidate' => $school_teacher_call_sheet->getIsValidated(),
  184.                     '_call_link' => $this->generateUrl('online_api_v1_callsheet_call', ['id' => $school_teacher_call_sheet->getId()])
  185.                 ]);
  186.             }
  187.         }
  188.         $data = [
  189.             'code' => 200
  190.             'help' => "Liste des fiches:  _call_link permet d'afficher une fiche d'appel (liste des élèves à appeler),  _cours_link permet d'afficher les plages horaire sur lesquelles ont peut créer une fiche d'appel."
  191.             '_cours_link' => $this->generateUrl('online_api_v1_callsheet_cours'), 
  192.             'callSheets' => $call_sheets
  193.             
  194.         ];
  195.         
  196.         $jsonContent $serializer->serialize($data'json');
  197.         $response = new Response($jsonContent200$this->headers);
  198.         
  199.         return $response;
  200.     }
  201.     /**
  202.      * @Route("/cours", name="online_api_v1_callsheet_cours")
  203.     */
  204.     public function cours(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolYearRepository $schoolYearRepositorySchoolWorkingTimeHourLessonRepository $schoolWorkingTimeHourLessonRepository): Response
  205.     {
  206.         $token $request->headers->get('token');
  207.         $encoders = [new JsonEncoder()];
  208.         $normalizer = [new ObjectNormalizer()];
  209.         $serializer = new Serializer($normalizer$encoders);
  210.         $user $userRepository->findOneBy(['token' => $token], []);
  211.         if (null == $user) {
  212.             $data = ['code' => 403'msg' => "Access denied"];
  213.             $jsonContent $serializer->serialize($data'json');
  214.             $response = new Response($jsonContent200$this->headers);
  215.             return $response;
  216.         }
  217.         if (!$user->isTokenValid()) {
  218.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  219.             $jsonContent $serializer->serialize($data'json');
  220.             $response = new Response($jsonContent200$this->headers);
  221.             return $response;
  222.         }
  223.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  224.         $establishment $user->getEstablishment();
  225.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  226.         if (null == $schoolTeacher) {
  227.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  228.             $jsonContent $serializer->serialize($data'json');
  229.             $response = new Response($jsonContent200$this->headers);
  230.             return $response;
  231.         }
  232.         
  233.         $schoolWorkingTimeHourLessons $schoolWorkingTimeHourLessonRepository->createQueryBuilder('entity')
  234.         ->innerJoin('entity.establishment''establishment')
  235.         ->addSelect('establishment')
  236.         ->andWhere('establishment.establishmentGroup = :establishmentGroup')
  237.         ->setParameter('establishmentGroup'$establishment->getEstablishmentGroup())
  238.         /*->andWhere('entity.establishment = :establishment')
  239.         ->setParameter('establishment', $establishment)*/
  240.         ->andWhere('entity.schoolYear = :schoolYear')
  241.         ->setParameter('schoolYear'$schoolYear)
  242.         ->andWhere('entity.schoolTeacher = :schoolTeacher')
  243.         ->setParameter('schoolTeacher'$schoolTeacher)
  244.         ->andWhere('entity.day = :day')
  245.         ->setParameter('day'DateIntervalManage::FRENCH_DAY[date('D')])
  246.         ->innerJoin('entity.settingTimeTable''settingTimeTable')
  247.         ->addSelect('settingTimeTable')
  248.         ->andWhere('settingTimeTable.start <= :start')
  249.         ->setParameter('start'date('H:i'))
  250.         ->orderBy('settingTimeTable.endh''DESC')
  251.         ->getQuery()
  252.         ->getResult();
  253.         if (count($schoolWorkingTimeHourLessons) <= 0) {
  254.             $data = ['code' => 400'msg' => "Aucune page horaire correspondante trouvé dans votre emploie du temps"'request' => $request->request];
  255.             $jsonContent $serializer->serialize($data'json');
  256.             $response = new Response($jsonContent200$this->headers);
  257.             return $response;
  258.         }
  259.         $working_time_hour_lessons = new ArrayCollection();
  260.         foreach ($schoolWorkingTimeHourLessons as $key => $schoolWorkingTimeHourLesson) {
  261.             $working_time_hour_lessons->add([
  262.                 'id' => $schoolWorkingTimeHourLesson->getId(),
  263.                 'classroom' => $schoolWorkingTimeHourLesson->getSettingClassroom() ? $schoolWorkingTimeHourLesson->getSettingClassroom()->getLabel() : '',
  264.                 'matter' => $schoolWorkingTimeHourLesson->getSchoolMatter() ? $schoolWorkingTimeHourLesson->getSchoolMatter()->getLabel() : '',
  265.                 'timeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable() ? $schoolWorkingTimeHourLesson->getSettingTimeTable()->getLabel() : '',
  266.                 'room' => $schoolWorkingTimeHourLesson->getSettingRoom() ? $schoolWorkingTimeHourLesson->getSettingRoom()->getLabel() : '',
  267.                 'day' => $schoolWorkingTimeHourLesson->getDay(),
  268.                 '_day' => DateIntervalManage::FRENCH_DAY[date('D')],
  269.                 '_create_link' => $this->generateUrl('online_api_v1_callsheet_create', ['id' => $schoolWorkingTimeHourLesson->getId()]),
  270.             ]);
  271.         }
  272.         $data = [
  273.             'code' => 200
  274.             'msg' => "success"
  275.             'workingTimeHourLessons' => $working_time_hour_lessons,
  276.             'help' => "l'url _create_link, permet de crée une nouvelle fiche d'appel et rediriger vers cette fiche"
  277.         ];
  278.         $jsonContent $serializer->serialize($data'json');
  279.         $response = new Response($jsonContent200$this->headers);
  280.         
  281.         return $response;
  282.     }
  283.     /**
  284.      * @Route("/create/cours/{id}", name="online_api_v1_callsheet_create")
  285.     */
  286.     public function create(Request $requestSchoolWorkingTimeHourLesson $schoolWorkingTimeHourLesson,  UserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolYearRepository $schoolYearRepositorySchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepositorySchoolWorkingTimeHourLessonRepository $schoolWorkingTimeHourLessonRepository): Response
  287.     {
  288.         $token $request->headers->get('token');
  289.         $encoders = [new JsonEncoder()];
  290.         $normalizer = [new ObjectNormalizer()];
  291.         $serializer = new Serializer($normalizer$encoders);
  292.         $user $userRepository->findOneBy(['token' => $token], []);
  293.         if (null == $user) {
  294.             $data = ['code' => 403'msg' => "Access denied"];
  295.             $jsonContent $serializer->serialize($data'json');
  296.             $response = new Response($jsonContent200$this->headers);
  297.             return $response;
  298.         }
  299.         if (!$user->isTokenValid()) {
  300.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  301.             $jsonContent $serializer->serialize($data'json');
  302.             $response = new Response($jsonContent200$this->headers);
  303.             return $response;
  304.         }
  305.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  306.         $establishment $user->getEstablishment();
  307.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  308.         if (null == $schoolTeacher) {
  309.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  310.             $jsonContent $serializer->serialize($data'json');
  311.             $response = new Response($jsonContent200$this->headers);
  312.             return $response;
  313.         }
  314.         if ($schoolWorkingTimeHourLesson->getSchoolTeacher() != $schoolTeacher) {
  315.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec au compte enseignant"'request' => $request->request];
  316.             $jsonContent $serializer->serialize($data'json');
  317.             $response = new Response($jsonContent200$this->headers);
  318.             return $response;
  319.         }
  320.         $createDate = new DateTimeImmutable();
  321.         $schoolTeacherCallSheet $schoolTeacherCallSheetRepository->findOneBy([
  322.             'establishment' => $schoolWorkingTimeHourLesson->getEstablishment(), 
  323.             'schoolYear' => $schoolWorkingTimeHourLesson->getSchoolYear(),
  324.             'schoolTeacher' => $schoolWorkingTimeHourLesson->getSchoolTeacher(),
  325.             'schoolWorkingTime' => $schoolWorkingTimeHourLesson->getSchoolWorkingTime(),
  326.             'settingClassroom' => $schoolWorkingTimeHourLesson->getSettingClassroom(),
  327.             'settingTimeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable(),
  328.             'create_date' => $createDate,
  329.             'day' => $schoolWorkingTimeHourLesson->getDay(),
  330.         ], []);
  331.         if (null != $schoolTeacherCallSheet) {
  332.             $data = ['code' => 400'msg' => "Cette fiche existe déjà."'request' => $request->request];
  333.             $jsonContent $serializer->serialize($data'json');
  334.             $response = new Response($jsonContent200$this->headers);
  335.             return $response;
  336.         }
  337.         if ($schoolWorkingTimeHourLesson->getSettingTimeTable() != null) {
  338.             if ($schoolWorkingTimeHourLesson->getSettingTimeTable()->getEndh() < date('H:i')) {
  339.                 $data = ['code' => 400'msg' => "Impossible, le cours est terminé."'request' => $request->request];
  340.                 $jsonContent $serializer->serialize($data'json');
  341.                 $response = new Response($jsonContent200$this->headers);
  342.                 return $response;
  343.             }
  344.         }
  345.         $entityManager $this->getDoctrine()->getManager();
  346.         $schoolTeacherCallSheet = new SchoolTeacherCallSheet();
  347.         $schoolTeacherCallSheet->setCreatedBy($user->getId());
  348.         $schoolTeacherCallSheet->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
  349.         $schoolTeacherCallSheet->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
  350.         $schoolTeacherCallSheet->setSchoolMatter($schoolWorkingTimeHourLesson->getSchoolMatter());
  351.         $schoolTeacherCallSheet->setSchoolTeacher($schoolWorkingTimeHourLesson->getSchoolTeacher());
  352.         $schoolTeacherCallSheet->setSchoolWorkingTime($schoolWorkingTimeHourLesson->getSchoolWorkingTime());
  353.         $schoolTeacherCallSheet->setSettingClassroom($schoolWorkingTimeHourLesson->getSettingClassroom());
  354.         $schoolTeacherCallSheet->setSettingTimeTable($schoolWorkingTimeHourLesson->getSettingTimeTable());
  355.         $schoolTeacherCallSheet->setDay($schoolWorkingTimeHourLesson->getDay());
  356.         $schoolTeacherCallSheet->setCreateDate(new DateTimeImmutable());
  357.         $schoolTeacherCallSheet->setCreateTime(date('H:i'));
  358.         $entityManager->persist($schoolTeacherCallSheet);
  359.         if($schoolWorkingTimeHourLesson->getSchoolMatter()->getLv2() == 'AUCUN') {
  360.             if($schoolWorkingTimeHourLesson->getSchoolMatter()->getArtOrMusique() == null || $schoolWorkingTimeHourLesson->getSchoolMatter()->getArtOrMusique() == '') {
  361.             /* --- pas une langue vivante 2 --- */
  362.                 foreach ($schoolWorkingTimeHourLesson->getSettingClassroom()->getRegistereds($schoolWorkingTimeHourLesson->getSchoolYear()) as $key => $registrationStudentRegistration) {
  363.                     $schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
  364.                     $schoolTeacherCallSheetLine->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
  365.                     $schoolTeacherCallSheetLine->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
  366.                     $schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
  367.                     $schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
  368.                     $schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
  369.                     $schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
  370.                     $schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
  371.                     $entityManager->persist($schoolTeacherCallSheetLine);
  372.                 }
  373.             }else {
  374.                 foreach ($schoolWorkingTimeHourLesson->getSettingClassroom()->getRegistereds($schoolWorkingTimeHourLesson->getSchoolYear()) as $key => $registrationStudentRegistration) {
  375.                     if ($registrationStudentRegistration->getStudent()->getArtOrMusique() == $schoolWorkingTimeHourLesson->getSchoolMatter()->getArtOrMusique()) {
  376.                         $schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
  377.                         $schoolTeacherCallSheetLine->setCreatedBy($user->getId());
  378.                         $schoolTeacherCallSheetLine->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
  379.                         $schoolTeacherCallSheetLine->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
  380.                         $schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
  381.                         $schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
  382.                         $schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
  383.                         $schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
  384.                         $schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
  385.                         $entityManager->persist($schoolTeacherCallSheetLine);
  386.                     }
  387.                 }
  388.             }
  389.         }else {
  390.             /* --- est une langue vivante 2 --- */
  391.             foreach ($schoolWorkingTimeHourLesson->getSettingClassroom()->getRegistereds($schoolWorkingTimeHourLesson->getSchoolYear()) as $key => $registrationStudentRegistration) {
  392.                 if ($registrationStudentRegistration->getStudent()->getLv2() == $schoolWorkingTimeHourLesson->getSchoolMatter()->getLv2()) {
  393.                     $schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
  394.                     $schoolTeacherCallSheetLine->setCreatedBy($user->getId());
  395.                     $schoolTeacherCallSheetLine->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
  396.                     $schoolTeacherCallSheetLine->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
  397.                     $schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
  398.                     $schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
  399.                     $schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
  400.                     $schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
  401.                     $schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
  402.                     $entityManager->persist($schoolTeacherCallSheetLine);
  403.                 }
  404.             }
  405.         }
  406.         try {
  407.             $entityManager->flush();
  408.             $data = [
  409.                 'code' => 200
  410.                 '_call_link' => $this->generateUrl('online_api_v1_callsheet_call', ['id' => $schoolTeacherCallSheet->getId()]), 
  411.                 'id' => $schoolTeacherCallSheet->getId(), 
  412.                 'createDate' => $schoolTeacherCallSheet->getCreateDate()->format('d/m/Y'),
  413.                 'classroom' => $schoolWorkingTimeHourLesson->getSettingClassroom() ? $schoolWorkingTimeHourLesson->getSettingClassroom()->getLabel() : '',
  414.                 'matter' => $schoolWorkingTimeHourLesson->getSchoolMatter() ? $schoolWorkingTimeHourLesson->getSchoolMatter()->getLabel() : '',
  415.                 'timeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable() ? $schoolWorkingTimeHourLesson->getSettingTimeTable()->getLabel() : '',
  416.                 'day' => $schoolWorkingTimeHourLesson->getDay(),
  417.                 'help' => "L'utilisateur doit être redirigé vers _call_url qui affiche la liste des elève à appeler"
  418.                 'request' => $request->request
  419.             ];
  420.             $jsonContent $serializer->serialize($data'json');
  421.             $response = new Response($jsonContent200$this->headers);
  422.             return $response;
  423.         } catch (\Throwable $th) {
  424.             $data = ['code' => 500'msg' => $th->getMessage(), 'request' => $request->request];
  425.             $jsonContent $serializer->serialize($data'json');
  426.             $response = new Response($jsonContent500$this->headers);
  427.             return $response;
  428.         }
  429.     }
  430.     /**
  431.      * @Route("/call/{id}", name="online_api_v1_callsheet_call")
  432.     */
  433.     public function call(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolTeacherCallSheet $schoolTeacherCallSheetSchoolTeacherCallSheetLineRepository $schoolTeacherCallSheetLineRepositorySchoolYearRepository $schoolYearRepository): Response
  434.     {
  435.         $token $request->headers->get('token');
  436.         $encoders = [new JsonEncoder()];
  437.         $normalizer = [new ObjectNormalizer()];
  438.         $serializer = new Serializer($normalizer$encoders);
  439.         $user $userRepository->findOneBy(['token' => $token], []);
  440.         if (null == $user) {
  441.             $data = ['code' => 403'msg' => "Access denied"];
  442.             $jsonContent $serializer->serialize($data'json');
  443.             $response = new Response($jsonContent200$this->headers);
  444.             return $response;
  445.         }
  446.         if (!$user->isTokenValid()) {
  447.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  448.             $jsonContent $serializer->serialize($data'json');
  449.             $response = new Response($jsonContent200$this->headers);
  450.             return $response;
  451.         }
  452.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  453.         $establishment $user->getEstablishment();
  454.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  455.         if (null == $schoolTeacher) {
  456.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  457.             $jsonContent $serializer->serialize($data'json');
  458.             $response = new Response($jsonContent403$this->headers);
  459.             return $response;
  460.         }
  461.         $schoolTeacherCallSheetLines = new ArrayCollection();
  462.         $callSheetLines $schoolTeacherCallSheetLineRepository->createQueryBuilder('entity')
  463.         ->innerJoin('entity.registrationStudentRegistration''registrationStudentRegistration')
  464.         ->addSelect('registrationStudentRegistration')
  465.         
  466.         ->innerJoin('registrationStudentRegistration.student''student')
  467.         ->addSelect('student')
  468.         ->andWhere('entity.schoolTeacherCallSheet = :callSheet')
  469.         ->setParameter('callSheet'$schoolTeacherCallSheet)
  470.         ->orderBy('student.last_name''ASC')
  471.         ->getQuery()
  472.         ->getResult();
  473.         foreach ($callSheetLines as $key => $schoolTeacherCallSheetLine) {
  474.             $msg 'Accepté(e)';
  475.             if ($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt($schoolTeacherCallSheet->getCreateDate()) > $schoolTeacherCallSheet->getEstablishment()->getRecoveryPutOutAmount()) {
  476.                 $msg 'Non Accepté(e)';
  477.             }
  478.             $schoolTeacherCallSheetLines->add([
  479.                 'id' => $schoolTeacherCallSheetLine->getId(),
  480.                 'code' => $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getCode(),
  481.                 'registrationNumber' => $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getRegistrationNumber().' ('.$msg.')',
  482.                 'name' => $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getName(),
  483.                 'amountDue' => $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) >= $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getEstablishment()->getRecoveryPutOutAmount() ? $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) : 0,
  484.                 'isPresent' => $schoolTeacherCallSheetLine->getIsPresente(),
  485.                 'isAbsent' => $schoolTeacherCallSheetLine->getIsAbsent(),
  486.                 '_set_to_present_link' => $this->generateUrl('online_api_v1_callsheet_set_to_present', ['id' => $schoolTeacherCallSheetLine->getId()]), 
  487.                 '_set_to_absent_link' => $this->generateUrl('online_api_v1_callsheet_set_to_absent', ['id' => $schoolTeacherCallSheetLine->getId()]), 
  488.             ]);
  489.         }
  490.         $data = [
  491.             'code' => 200
  492.             '_validate_link' => $this->generateUrl('online_api_v1_callsheet_validate', ['id' => $schoolTeacherCallSheet->getId()]), 
  493.             '_cancel_link' => $this->generateUrl('online_api_v1_callsheet_cancel', ['id' => $schoolTeacherCallSheet->getId()]), 
  494.             'id' => $schoolTeacherCallSheet->getId(), 
  495.             'help' => "_set_to_present_link permet de marquer un élève présent, _set_to_absent_link permet de marquer un élève absent"
  496.             'schoolTeacherCallSheetLines' => $schoolTeacherCallSheetLines,
  497.             'request' => $request->request
  498.         ];
  499.         $jsonContent $serializer->serialize($data'json');
  500.         $response = new Response($jsonContent200$this->headers);
  501.         return $response;
  502.     }
  503.     /**
  504.      * @Route("/validate/{id}", name="online_api_v1_callsheet_validate")
  505.     */
  506.     public function validate(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolTeacherCallSheet $schoolTeacherCallSheetSchoolYearRepository $schoolYearRepositorySMSSender $smsSender): Response
  507.     {
  508.         $token $request->headers->get('token');
  509.         $encoders = [new JsonEncoder()];
  510.         $normalizer = [new ObjectNormalizer()];
  511.         $serializer = new Serializer($normalizer$encoders);
  512.         $user $userRepository->findOneBy(['token' => $token], []);
  513.         if (null == $user) {
  514.             $data = ['code' => 403'msg' => "Access denied"];
  515.             $jsonContent $serializer->serialize($data'json');
  516.             $response = new Response($jsonContent200$this->headers);
  517.             return $response;
  518.         }
  519.         if (!$user->isTokenValid()) {
  520.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  521.             $jsonContent $serializer->serialize($data'json');
  522.             $response = new Response($jsonContent200$this->headers);
  523.             return $response;
  524.         }
  525.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  526.         $establishment $user->getEstablishment();
  527.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  528.         if (null == $schoolTeacher) {
  529.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  530.             $jsonContent $serializer->serialize($data'json');
  531.             $response = new Response($jsonContent403$this->headers);
  532.             return $response;
  533.         }
  534.         if ($schoolTeacherCallSheet->getStatus() == SchoolTeacherCallSheet::STATUS_REJETE) {
  535.             $data = ['code' => 400'msg' => "Impossible: La fiche a été rejetée, veuillez contacter votre responsable"'request' => $request->request];
  536.             $jsonContent $serializer->serialize($data'json');
  537.             $response = new Response($jsonContent400$this->headers);
  538.             return $response;
  539.         }
  540.         foreach ($schoolTeacherCallSheet->getSchoolTeacherCallSheetLines() as $key => $schoolTeacherCallSheetLine) {
  541.             if (!$schoolTeacherCallSheetLine->getIsAbsent() && !$schoolTeacherCallSheetLine->getIsPresente()) {
  542.                 $data = ['code' => 400'msg' => "Impossible: Tous les élèves n'ont pas été appelés"'request' => $request->request];
  543.                 $jsonContent $serializer->serialize($data'json');
  544.                 $response = new Response($jsonContent400$this->headers);
  545.         
  546.                 return $response;
  547.             }
  548.         }
  549.         $entityManager $this->getDoctrine()->getManager();
  550.         if ($establishment->getIsSendAbsenceSms()){
  551.             $sms = new OrangeSDK(CommunicationMessage::SENDER_ID);
  552.             foreach ($schoolTeacherCallSheet->getSchoolTeacherCallSheetLines() as $key => $schoolTeacherCallSheetLine) {
  553.                 if ($schoolTeacherCallSheetLine->getIsAbsent()) {
  554.                     $message "";
  555.                     $contacts = [];
  556.                     $contacts[] = '225'.str_replace(' ''',trim($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getNotificationPhoneNumber()));
  557.                     $contact '225'.str_replace(' ''',trim($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getNotificationPhoneNumber()));
  558.                     
  559.                     $message $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getName()." A ETE ABSENT ";
  560.                     $message $message " de ".$schoolTeacherCallSheet->getSettingTimeTable()->getLabel() ;
  561.                     $message $message " AU COURS DE " $schoolTeacherCallSheet->getSchoolMatter()->getLabel();
  562.                     $message $message " CE " $schoolTeacherCallSheet->getCreateDate()->format('d-m-Y');
  563.                     
  564.                     if ($establishment->getSmsGateway() == 'OCI') {
  565.                         $oci_response $sms->message($message)
  566.                         ->as($establishment->getOciSmsSender())
  567.                         ->from($establishment->getOciSmsPhone())
  568.                         ->to(intval($contact));
  569.                         try {
  570.                             $oci_response->send();
  571.                         } catch (\Throwable $th) {
  572.                             $this->addFlash('warning'$th->getMessage());
  573.                         }
  574.                         $communicationMessage = new CommunicationMessage();
  575.                         $communicationMessage->setCode($contact.$schoolTeacherCallSheetLine->getId());
  576.                         $communicationMessage->setContacts($contacts);
  577.                         $communicationMessage->setContent($message);
  578.                         $communicationMessage->setEstablishment($establishment);
  579.                         $communicationMessage->setType($smsSender::UNICODE_CHARSET);
  580.                         $entityManager->persist($communicationMessage);
  581.                     }else {
  582.                         
  583.                         $response $smsSender->sendSmsByEstablishment($establishment$message$contacts$smsSender::UNICODE_CHARSET);
  584.                         $responses explode(':'$response);
  585.                         $code trim($responses[1]);
  586.                         $communicationMessage = new CommunicationMessage();
  587.                         $communicationMessage->setCode($code);
  588.                         $communicationMessage->setContacts($contacts);
  589.                         $communicationMessage->setContent($message);
  590.                         $communicationMessage->setEstablishment($establishment);
  591.                         $communicationMessage->setType($smsSender::UNICODE_CHARSET);
  592.                         $entityManager->persist($communicationMessage);
  593.                     }
  594.                 }
  595.             }
  596.             
  597.         }
  598.         $schoolTeacherCallSheet->setStatus(SchoolTeacherCallSheet::STATUS_VALIDE);
  599.         $schoolTeacherCallSheet->setIsValidated(true);
  600.         try {
  601.             $entityManager->flush();
  602.             $data = ['code' => 200'msg' => "Validation effectué"'request' => $request->request];
  603.             $jsonContent $serializer->serialize($data'json');
  604.             $response = new Response($jsonContent200$this->headers);
  605.     
  606.             return $response;
  607.         } catch (\Throwable $th) {
  608.             $data = ['code' => 500'msg' => $th->getMessage(), 'request' => $request->request];
  609.             $jsonContent $serializer->serialize($data'json');
  610.             $response = new Response($jsonContent500$this->headers);
  611.             return $response;
  612.         }
  613.     }
  614.     /**
  615.      * @Route("/cancel/{id}", name="online_api_v1_callsheet_cancel")
  616.     */
  617.     public function cancel(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolTeacherCallSheet $schoolTeacherCallSheetSchoolYearRepository $schoolYearRepository): Response
  618.     {
  619.         $token $request->headers->get('token');
  620.         $encoders = [new JsonEncoder()];
  621.         $normalizer = [new ObjectNormalizer()];
  622.         $serializer = new Serializer($normalizer$encoders);
  623.         if ($schoolTeacherCallSheet->getIsValidated()) {
  624.             $data = ['code' => 400'msg' => "Impossible, la fiche est déjà validée"];
  625.             $jsonContent $serializer->serialize($data'json');
  626.             $response = new Response($jsonContent400$this->headers);
  627.             return $response;
  628.         }
  629.         $user $userRepository->findOneBy(['token' => $token], []);
  630.         if (null == $user) {
  631.             $data = ['code' => 403'msg' => "Access denied"];
  632.             $jsonContent $serializer->serialize($data'json');
  633.             $response = new Response($jsonContent200$this->headers);
  634.             return $response;
  635.         }
  636.         if (!$user->isTokenValid()) {
  637.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  638.             $jsonContent $serializer->serialize($data'json');
  639.             $response = new Response($jsonContent200$this->headers);
  640.             return $response;
  641.         }
  642.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  643.         $establishment $user->getEstablishment();
  644.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  645.         if (null == $schoolTeacher) {
  646.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  647.             $jsonContent $serializer->serialize($data'json');
  648.             $response = new Response($jsonContent403$this->headers);
  649.             return $response;
  650.         }
  651.         $entityManager $this->getDoctrine()->getManager();
  652.         $schoolTeacherCallSheet->setIsValidated(false);
  653.         try {
  654.             $entityManager->flush();
  655.             $data = ['code' => 200'msg' => "Annulation effectué"'request' => $request->request];
  656.             $jsonContent $serializer->serialize($data'json');
  657.             $response = new Response($jsonContent200$this->headers);
  658.     
  659.             return $response;
  660.         } catch (\Throwable $th) {
  661.             
  662.             $data = ['code' => 500'msg' => $th->getMessage(), 'request' => $request->request];
  663.             $jsonContent $serializer->serialize($data'json');
  664.             $response = new Response($jsonContent500$this->headers);
  665.             return $response;
  666.         }
  667.     }
  668.     /**
  669.      * @Route("/set-to-present/sheetline/{id}", name="online_api_v1_callsheet_set_to_present")
  670.     */
  671.     public function setToPresent(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolTeacherCallSheetLine $schoolTeacherCallSheetLineSchoolYearRepository $schoolYearRepository): Response
  672.     {
  673.         $token $request->headers->get('token');
  674.         $encoders = [new JsonEncoder()];
  675.         $normalizer = [new ObjectNormalizer()];
  676.         $serializer = new Serializer($normalizer$encoders);
  677.         if ($schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->getIsValidated()) {
  678.             $data = ['code' => 400'msg' => "Impossible, la fiche est déjà validée"];
  679.             $jsonContent $serializer->serialize($data'json');
  680.             $response = new Response($jsonContent400$this->headers);
  681.             return $response;
  682.         }
  683.         $user $userRepository->findOneBy(['token' => $token], []);
  684.         if (null == $user) {
  685.             $data = ['code' => 403'msg' => "Access denied"];
  686.             $jsonContent $serializer->serialize($data'json');
  687.             $response = new Response($jsonContent200$this->headers);
  688.             return $response;
  689.         }
  690.         if (!$user->isTokenValid()) {
  691.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  692.             $jsonContent $serializer->serialize($data'json');
  693.             $response = new Response($jsonContent200$this->headers);
  694.             return $response;
  695.         }
  696.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  697.         $establishment $user->getEstablishment();
  698.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear'is_disabled' => 0], []);
  699.         if (null == $schoolTeacher) {
  700.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  701.             $jsonContent $serializer->serialize($data'json');
  702.             $response = new Response($jsonContent403$this->headers);
  703.             return $response;
  704.         }
  705.         $entityManager $this->getDoctrine()->getManager();
  706.         $schoolTeacherCallSheetLine->setIsPresente(true);
  707.         $schoolTeacherCallSheetLine->setIsAbsent(false);
  708.         try {
  709.             $entityManager->flush();
  710.             $data = [
  711.                 'code' => 200,
  712.                 'msg' => "Présent(e)",
  713.                 'id' => $schoolTeacherCallSheetLine->getId(),
  714.                 'tr' => "#tr-".$schoolTeacherCallSheetLine->getId(),
  715.                 'td' => "#td-".$schoolTeacherCallSheetLine->getId(),
  716.                 'btnPresent' => "#btn-present-".$schoolTeacherCallSheetLine->getId(),
  717.                 'isCanBeSaved' => $schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->isCanBeSaved()
  718.             ];
  719.             $jsonContent $serializer->serialize($data'json');
  720.             $response = new Response($jsonContent200$this->headers);
  721.     
  722.             return $response;
  723.         } catch (\Throwable $th) {
  724.             
  725.             $data = ['code' => 500'msg' => $th->getMessage(), 'request' => $request->request];
  726.             $jsonContent $serializer->serialize($data'json');
  727.             $response = new Response($jsonContent500$this->headers);
  728.             return $response;
  729.         }
  730.     }
  731.     /**
  732.      * @Route("/set-to-absent/sheetline/{id}", name="online_api_v1_callsheet_set_to_absent")
  733.     */
  734.     public function setToAbsent(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolTeacherCallSheetLine $schoolTeacherCallSheetLineSchoolYearRepository $schoolYearRepository): Response
  735.     {
  736.         $token $request->headers->get('token');
  737.         $encoders = [new JsonEncoder()];
  738.         $normalizer = [new ObjectNormalizer()];
  739.         $serializer = new Serializer($normalizer$encoders);
  740.         if ($schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->getIsValidated()) {
  741.             $data = ['code' => 400'msg' => "Impossible, la fiche est déjà validée"];
  742.             $jsonContent $serializer->serialize($data'json');
  743.             $response = new Response($jsonContent400$this->headers);
  744.             return $response;
  745.         }
  746.         $user $userRepository->findOneBy(['token' => $token], []);
  747.         if (null == $user) {
  748.             $data = ['code' => 403'msg' => "Access denied"];
  749.             $jsonContent $serializer->serialize($data'json');
  750.             $response = new Response($jsonContent200$this->headers);
  751.             return $response;
  752.         }
  753.         if (!$user->isTokenValid()) {
  754.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  755.             $jsonContent $serializer->serialize($data'json');
  756.             $response = new Response($jsonContent200$this->headers);
  757.             return $response;
  758.         }
  759.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  760.         $establishment $user->getEstablishment();
  761.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear], []);
  762.         if (null == $schoolTeacher) {
  763.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  764.             $jsonContent $serializer->serialize($data'json');
  765.             $response = new Response($jsonContent403$this->headers);
  766.             return $response;
  767.         }
  768.         $entityManager $this->getDoctrine()->getManager();
  769.         $schoolTeacherCallSheetLine->setIsPresente(false);
  770.         $schoolTeacherCallSheetLine->setIsAbsent(true);
  771.         try {
  772.             $entityManager->flush();
  773.             $data = [
  774.                 'code' => 200,
  775.                 'msg' => "Absent(e)",
  776.                 'id' => $schoolTeacherCallSheetLine->getId(),
  777.                 'tr' => "#tr-".$schoolTeacherCallSheetLine->getId(),
  778.                 'td' => "#td-".$schoolTeacherCallSheetLine->getId(),
  779.                 'btnAbsent' => "#btn-absent-".$schoolTeacherCallSheetLine->getId(),
  780.                 'isCanBeSaved' => $schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->isCanBeSaved()
  781.             ];
  782.             $jsonContent $serializer->serialize($data'json');
  783.             $response = new Response($jsonContent200$this->headers);
  784.     
  785.             return $response;
  786.         } catch (\Throwable $th) {
  787.             
  788.             $data = ['code' => 500'msg' => $th->getMessage(), 'request' => $request->request];
  789.             $jsonContent $serializer->serialize($data'json');
  790.             $response = new Response($jsonContent500$this->headers);
  791.             return $response;
  792.         }
  793.     }
  794.     /**
  795.      * @Route("/set-all-topresent/{id}", name="online_api_v1_callsheet_set_all_topresent")
  796.     */
  797.     public function set_all_topresent(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolTeacherCallSheet $schoolTeacherCallSheetSchoolYearRepository $schoolYearRepository): Response
  798.     {
  799.         $token $request->headers->get('token');
  800.         $encoders = [new JsonEncoder()];
  801.         $normalizer = [new ObjectNormalizer()];
  802.         $serializer = new Serializer($normalizer$encoders);
  803.         $user $userRepository->findOneBy(['token' => $token], []);
  804.         if (null == $user) {
  805.             $data = ['code' => 403'msg' => "Access denied"];
  806.             $jsonContent $serializer->serialize($data'json');
  807.             $response = new Response($jsonContent200$this->headers);
  808.             return $response;
  809.         }
  810.         if (!$user->isTokenValid()) {
  811.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  812.             $jsonContent $serializer->serialize($data'json');
  813.             $response = new Response($jsonContent200$this->headers);
  814.             return $response;
  815.         }
  816.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  817.         $establishment $user->getEstablishment();
  818.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear], []);
  819.         if (null == $schoolTeacher) {
  820.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  821.             $jsonContent $serializer->serialize($data'json');
  822.             $response = new Response($jsonContent403$this->headers);
  823.             return $response;
  824.         }
  825.         foreach ($schoolTeacherCallSheet->getSchoolTeacherCallSheetLines() as $key => $schoolTeacherCallSheetLine) {
  826.             $schoolTeacherCallSheetLine->setIsPresente(true);
  827.             $schoolTeacherCallSheetLine->setIsAbsent(false);
  828.         }
  829.         $entityManager $this->getDoctrine()->getManager();
  830.         try {
  831.             $entityManager->flush();
  832.             $data = ['code' => 200'msg' => "Traitement effectué avec succès"'request' => $request->request];
  833.             $jsonContent $serializer->serialize($data'json');
  834.             $response = new Response($jsonContent200$this->headers);
  835.     
  836.             return $response;
  837.         } catch (\Throwable $th) {
  838.             $data = ['code' => 500'msg' => $th->getMessage(), 'request' => $request->request];
  839.             $jsonContent $serializer->serialize($data'json');
  840.             $response = new Response($jsonContent500$this->headers);
  841.             return $response;
  842.         }
  843.     }
  844.     /**
  845.      * @Route("/call/callsheet/{id}", name="online_api_v1_call_callsheet")
  846.     */
  847.     public function call_callsheet(Request $requestUserRepository $userRepositorySchoolTeacherRepository $schoolTeacherRepositorySchoolTeacherCallSheet $schoolTeacherCallSheetSchoolTeacherCallSheetLineRepository $schoolTeacherCallSheetLineRepositorySchoolYearRepository $schoolYearRepository): Response
  848.     {
  849.         $token $request->headers->get('token');
  850.         $encoders = [new JsonEncoder()];
  851.         $normalizer = [new ObjectNormalizer()];
  852.         $serializer = new Serializer($normalizer$encoders);
  853.         if ($schoolTeacherCallSheet->getIsValidated()) {
  854.             $data = ['code' => 400'msg' => "Impossible, la fiche est déjà validée"];
  855.             $jsonContent $serializer->serialize($data'json');
  856.             $response = new Response($jsonContent400$this->headers);
  857.             return $response;
  858.         }
  859.         $user $userRepository->findOneBy(['token' => $token], []);
  860.         if (null == $user) {
  861.             $data = ['code' => 403'msg' => "Access denied"];
  862.             $jsonContent $serializer->serialize($data'json');
  863.             $response = new Response($jsonContent200$this->headers);
  864.             return $response;
  865.         }
  866.         if (!$user->isTokenValid()) {
  867.             $data = ['code' => 403'msg' => "Token Invalid"'time' => time(), 'exp' => ($user->getLastAuthTime())];
  868.             $jsonContent $serializer->serialize($data'json');
  869.             $response = new Response($jsonContent200$this->headers);
  870.             return $response;
  871.         }
  872.         $schoolYear $schoolYearRepository->findOneBy(['is_ongoing' => 1], []);
  873.         $establishment $user->getEstablishment();
  874.         $schoolTeacher $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear], []);
  875.         if (null == $schoolTeacher) {
  876.             $data = ['code' => 403'msg' => "Veuillez vous connecter avec un compte enseignant"'request' => $request->request];
  877.             $jsonContent $serializer->serialize($data'json');
  878.             $response = new Response($jsonContent403$this->headers);
  879.             return $response;
  880.         }
  881.         $content $request->getContent();
  882.         $contentJson json_decode($contenttrue);
  883.         $call_sheet_lines json_decode($contentJson['callSheetLines']);
  884.         for ($i=0$i count($call_sheet_lines); $i++) { 
  885.             $schoolTeacherCallSheetLine $schoolTeacherCallSheetLineRepository->findOneBy(['id' => $call_sheet_lines[$i]->id], []);
  886.             if(null != $schoolTeacherCallSheetLine){
  887.                 $schoolTeacherCallSheetLine->setIsPresente($call_sheet_lines[$i]->isPresent);
  888.                 $schoolTeacherCallSheetLine->setIsAbsent($call_sheet_lines[$i]->isAbsent);
  889.                 if (!$schoolTeacherCallSheetLine->getIsAbsent() && !$schoolTeacherCallSheetLine->getIsPresente()) {
  890.                     $data = ['code' => 400'msg' => "Impossible: Tous les élèves n'ont pas été appelés"];
  891.                     $jsonContent $serializer->serialize($data'json');
  892.                     $response = new Response($jsonContent400$this->headers);
  893.             
  894.                     return $response;
  895.                 }
  896.             }
  897.         }
  898.         $entityManager $this->getDoctrine()->getManager();
  899.         try {
  900.             $entityManager->flush();
  901.             $data = [
  902.                 'code' => 200,
  903.                 'msg' => "Effectué",
  904.                 '_redirect' => $this->generateUrl('online_api_v1_callsheet_call', ['id' => $schoolTeacherCallSheet->getId()])
  905.             ];
  906.             $jsonContent $serializer->serialize($data'json');
  907.             $response = new Response($jsonContent200$this->headers);
  908.     
  909.             return $response;
  910.         } catch (\Throwable $th) {
  911.             
  912.             $data = ['code' => 500'msg' => $th->getMessage(), 'request' => $request->request];
  913.             $jsonContent $serializer->serialize($data'json');
  914.             $response = new Response($jsonContent500$this->headers);
  915.             return $response;
  916.         }
  917.     }
  918. }