src/Controller/ParentNoteController.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ParentNote;
  4. use App\Form\ParentNoteType;
  5. use App\Entity\Subject;
  6. use App\Entity\TheClass;
  7. use App\Entity\Exams;
  8. use App\Repository\NoteRepository;
  9. use App\Repository\SchoolYearRepository;
  10. use App\Repository\ParentNoteRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. use Symfony\Component\Security\Core\Security;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use App\Service\PushNotificationService;
  20. use Symfony\Component\Translation\TranslatorInterface as TranslationTranslatorInterface;
  21. #[Route('/prof/parent/note')]
  22. class ParentNoteController extends AbstractController
  23. {
  24.     
  25.     public function __construct(private Security $security, private RequestStack $requestStack)
  26.     {}
  27.     #[Route('/{subject}/{class}/{exam}/'name'app_parent_note_index'methods: ['GET'])]
  28.     public function index(
  29.         ParentNoteRepository $parentNoteRepository,
  30.         Request $request,
  31.         EntityManagerInterface $entityManager,
  32.         Subject $subject,
  33.         TheClass $class,
  34.         SchoolYearRepository $yearRepo,
  35.         TranslatorInterface $translator,
  36.         NoteRepository $noteRepo,
  37.         Exams $exam
  38.     ): Response
  39.     {
  40.         if (!($this->security->isGranted('ROLE_ADMIN') || $this->security->isGranted('ROLE_EDITOR') || ($subject->getProf() == $this->getUser()))) {
  41.             $this->addFlash(
  42.                 "danger",
  43.                 $translator->trans('Accès non autorisé!'
  44.             ));
  45.             return $this->redirect($this->requestStack->getCurrentRequest()->headers->get('referer'));
  46.         }
  47.         $year $yearRepo->findOneBy(['active' => true]);
  48.         $parentNotes $parentNoteRepository->findBy([
  49.             'school' => $this->getUser()->getSchool(),
  50.             'classe' => $class,
  51.             'exam' => $exam,
  52.             'subject' => $subject,
  53.             'year' => $year,
  54.         ]);
  55.         $totalDividend 0;
  56.         foreach ($parentNotes as $note) {
  57.             $totalDividend += $note->getDividend();
  58.         }
  59.         
  60.         if ($this->security->isGranted('ROLE_ADMIN') || $this->security->isGranted('ROLE_EDITOR') || $subject->getProf() == $this->getUser()) {
  61.             return $this->render('parent_note/index.html.twig', [
  62.                 'parentNotes' => $parentNotes,
  63.                 'exam' => $exam,
  64.                 'class' => $class,
  65.                 'subject' => $subject,
  66.                 'totalDividend' => $totalDividend,
  67.             ]);
  68.         } else {
  69.             $this->addFlash(
  70.                 "danger",
  71.                 $translator->trans('Accès non autorisé!'
  72.             ));
  73.             return $this->redirect($this->requestStack->getCurrentRequest()->headers->get('referer'));
  74.         }
  75.     }
  76.     #[Route('/new/{subject}/{class}/{exam}'name'app_parent_note_new'methods: ['GET''POST'])]
  77.     public function new(
  78.         Request $request,
  79.         EntityManagerInterface $entityManager,
  80.         Subject $subject,
  81.         TheClass $class,
  82.         SchoolYearRepository $yearRepo,
  83.         Exams $exam,
  84.         ParentNoteRepository $parentNoteRepository,
  85.         TranslatorInterface $translator,
  86.     ): Response
  87.     {
  88.         if (!($this->security->isGranted('ROLE_ADMIN') || $this->security->isGranted('ROLE_EDITOR') || ($subject->getProf() == $this->getUser()))) {
  89.             $this->addFlash(
  90.                 "danger",
  91.                 $translator->trans('Accès non autorisé!'
  92.             ));
  93.             return $this->redirect($this->requestStack->getCurrentRequest()->headers->get('referer'));
  94.         }
  95.         $year $yearRepo->findOneBy(['active' => true]);
  96.         $parentNotes $parentNoteRepository->findBy(['subject' => $subject'classe' => $class'exam' => $exam'year' => $year]);
  97.         if (!empty($parentNotes)) {
  98.             $this->addFlash("danger",$translator->trans('La totalité des dividendes doit être inférieure ou égale à 20'));
  99.             return $this->redirectToRoute('app_parent_note_new', [
  100.                     'subject' => $subject->getId(),
  101.                     'class' => $class->getId(),
  102.                     'exam' => $exam->getId(),
  103.                 ],
  104.                 Response::HTTP_SEE_OTHER
  105.             );
  106.         }
  107.         $parentNote = new ParentNote();
  108.         
  109.         $parentNote->setSubject($subject);
  110.         $parentNote->setExam($exam);
  111.         $parentNote->setSchool($this->getUser()->getSchool());
  112.         $parentNote->setYear($yearRepo->findOneBy(['active' => true]));
  113.         $parentNote->setClasse($class);
  114.         $parentNote->setDividend(20);
  115.         $name =  $request->getLocale() == 'fr' 'Notes Séquentielles' 'Sequential Grades';
  116.         $parentNote->setName($name);
  117.         $entityManager->persist($parentNote);
  118.         $entityManager->flush();
  119.         return $this->redirectToRoute('app_note_add_class',  [
  120.             'subject' => $subject->getId(),
  121.             'class' => $class->getId(),
  122.             'exams' => $exam->getId(),
  123.             'parentNote' => $parentNote->getId()
  124.         ]);
  125.         $form $this->createForm(ParentNoteType::class, $parentNote, ['parentNotes' => $parentNotes]);
  126.         $form->handleRequest($request);
  127.         /*if ($form->isSubmitted() && $form->isValid()) {
  128.             if (!empty($parentNotes)) {
  129.                 $dividend = $parentNote->getDividend();
  130.                 //on recupere l'ensemble des pourcentage
  131.                 foreach ($parentNotes as $parent) {
  132.                     $dividend += $form->get('dividend-'. $parent->getId())->getData();
  133.                 }
  134.                 if ($dividend > 20) {
  135.                     $this->addFlash("danger",$translator->trans('La totalité des dividendes doit être inférieure ou égale à 20'));
  136.         
  137.                     return $this->redirectToRoute('app_parent_note_new', [
  138.                             'subject' => $subject->getId(),
  139.                             'class' => $class->getId(),
  140.                             'exam' => $exam->getId(),
  141.                         ],
  142.                         Response::HTTP_SEE_OTHER
  143.                     );
  144.                 }
  145.                 foreach ($parentNotes as $parent) {
  146.                     $parent->setDividend(($form->get('dividend-'. $parent->getId())->getData()));
  147.                     $entityManager->persist($parent);
  148.                     $entityManager->flush();
  149.                 }
  150.             }
  151.             $parentNote->setSubject($subject);
  152.             $parentNote->setExam($exam);
  153.             $parentNote->setSchool($this->getUser()->getSchool());
  154.             $parentNote->setYear($yearRepo->findOneBy(['active' => true]));
  155.             $parentNote->setClasse($class);
  156.             $entityManager->persist($parentNote);
  157.             $entityManager->flush();
  158.             $this->addFlash("success",$translator->trans('Note créée avec success'));
  159.             return $this->redirectToRoute('app_parent_note_index', [
  160.                 'subject' => $subject->getId(),
  161.                 'class' => $class->getId(),
  162.                 'exam' => $exam->getId()
  163.             ], Response::HTTP_SEE_OTHER);
  164.         }*/
  165.         return $this->renderForm('parent_note/new.html.twig', [
  166.             'parentNotes' => $parentNotes,
  167.             'form' => $form,
  168.             'exam' => $exam,
  169.             'class' => $class,
  170.             'subject' => $subject
  171.         ]);
  172.     }
  173.     #[Route('/{id}'name'app_parent_note_show'methods: ['GET'])]
  174.     public function show(ParentNote $parentNote): Response
  175.     {
  176.         return $this->render('parent_note/show.html.twig', [
  177.             'parent_note' => $parentNote,
  178.         ]);
  179.     }
  180.     #[Route('/{parentNote}/edit/{subject}/{class}/{exam}'name'app_parent_note_edit'methods: ['GET''POST'])]
  181.     public function edit(
  182.         Request $request,
  183.         ParentNote $parentNote,
  184.         EntityManagerInterface $entityManager,
  185.         Subject $subject,
  186.         TheClass $class,
  187.         SchoolYearRepository $yearRepo,
  188.         Exams $exam,
  189.         ParentNoteRepository $parentNoteRepository,
  190.         TranslatorInterface $translator,
  191.     ): Response
  192.     {
  193.         if (!($this->security->isGranted('ROLE_ADMIN') || $this->security->isGranted('ROLE_EDITOR') || ($subject->getProf() == $this->getUser()))) {
  194.             $this->addFlash(
  195.                 "danger",
  196.                 $translator->trans('Accès non autorisé!'
  197.             ));
  198.             return $this->redirect($this->requestStack->getCurrentRequest()->headers->get('referer'));
  199.         }
  200.         $year $yearRepo->findOneBy(['active' => true]);
  201.         $parentNotes $parentNoteRepository->findBy(['subject' => $subject'classe' => $class'exam' => $exam'year' => $year]);
  202.         foreach ($parentNotes as $key => $parentt) {
  203.             if ($parentt->getId()  == $parentNote->getId()) {
  204.                 unset($parentNotes[$key]);
  205.             }
  206.         }
  207.         $form $this->createForm(ParentNoteType::class, $parentNote, ['parentNotes' => $parentNotes]);
  208.         $form->handleRequest($request);
  209.         if ($form->isSubmitted() && $form->isValid()) {
  210.             if (!empty($parentNotes)) {
  211.                 $dividend $parentNote->getDividend();
  212.                 //on recupere l'ensemble des pourcentage
  213.                 foreach ($parentNotes as $parent) {
  214.                     $dividend += $form->get('dividend-'$parent->getId())->getData();
  215.                 }
  216.                 if ($dividend 20) {
  217.                     $this->addFlash("danger",$translator->trans('la totalité des dividendes doit être inférieure ou égale à 20'));
  218.         
  219.                     return $this->redirectToRoute('app_parent_note_edit', [
  220.                             'parentNotes' => $parentNotes,
  221.                             'parent' => $parentNote,
  222.                             'form' => $form,
  223.                             'subject' => $subject->getId(),
  224.                             'class' => $class->getId(),
  225.                             'exam' => $exam->getId(),
  226.                             'parentNote' => $parentNote->getId()
  227.                         ],
  228.                         Response::HTTP_SEE_OTHER
  229.                     );
  230.                 }
  231.                 foreach ($parentNotes as $parent) {
  232.                     $parent->setDividend($form->get('dividend-'$parent->getId())->getData());
  233.                     $entityManager->persist($parent);
  234.                     $entityManager->flush();
  235.                 }
  236.             }
  237.             $entityManager->flush();                    
  238.             $this->addFlash("success",$translator->trans('la note modifée avec success'));
  239.             return $this->redirectToRoute('app_parent_note_index', [
  240.                 'subject' => $subject->getId(),
  241.                 'class' => $class->getId(),
  242.                 'exam' => $exam->getId(),
  243.             ], Response::HTTP_SEE_OTHER);
  244.         }
  245.         return $this->renderForm('parent_note/edit.html.twig', [
  246.             'parentNotes' => $parentNotes,
  247.             'parent' => $parentNote,
  248.             'form' => $form,
  249.             'subject' => $subject,
  250.             'class' => $class,
  251.             'exam' => $exam,
  252.         ]);
  253.     }
  254.     #[Route('/delete/{parentNote}/{subject}/{class}/{exam}'name'app_parent_note_delete'methods: ['POST'])]
  255.     public function delete(
  256.         Request $request,
  257.         ParentNote $parentNote,
  258.         EntityManagerInterface $entityManager,
  259.         Subject $subject,
  260.         Exams $exam,
  261.         TranslatorInterface $translator,
  262.         TheClass $class,
  263.         PushNotificationService $notification
  264.     ): Response
  265.     {
  266.         if (!($this->security->isGranted('ROLE_ADMIN') || $this->security->isGranted('ROLE_EDITOR') || ($subject->getProf() == $this->getUser()))) {
  267.             $this->addFlash(
  268.                 "danger",
  269.                 $translator->trans('Accès non autorisé!'
  270.             ));
  271.             return $this->redirect($this->requestStack->getCurrentRequest()->headers->get('referer'));
  272.         }
  273.         if ($this->isCsrfTokenValid('delete'.$parentNote->getId(), $request->request->get('_token'))) {
  274.             foreach ($parentNote->getNotes() as $value) {
  275.                 /********* Notification  *****************/
  276.                 $parent $value->getStudent()->getParent();
  277.                 $lang $parent->getLocalPhoneLang();
  278.                 $token $parent->getUserToken();
  279.                 $userId $parent->getId();
  280.                 $route 'drawer/Note';
  281.                 $title $lang == null 'Alerte ! Note supprimée' 'Note Deleted Alert';
  282.                 if ($lang == null) {
  283.                     $message =  ' La note de ' $value->getNote(). '/' $value->getDividend() . ' de l\'élève ' $value->getStudent()->getFullName() .' en '$value->getSubject()->getName() . ' pour le compte de '$value->getExams()->getName() . ' a été supprimée';
  284.                 } else {
  285.                     $message =  ' La note de controle de ' $value->getNote(). '/' $value->getDividend() . ' de l\'élève ' $value->getStudent()->getFullName() .' en '$value->getSubject()->getName() . ' pour le compte de '$value->getExams()->getName() . ' a été supprimée';
  286.                 }
  287.                 //android
  288.                 if ($token) {
  289.                     $data = [
  290.                         'userId' => $userId,
  291.                         'type' => 'note'
  292.                     ];
  293.                     $notification->sendNotification($token$title$message$data);
  294.                 }
  295.             }
  296.             $entityManager->remove($parentNote);
  297.             $entityManager->flush();
  298.         }
  299.         return $this->redirectToRoute('app_parent_note_index', [
  300.             'class' => $class->getId(), 'subject' => $subject->getId(), 'exam' => $exam->getId()
  301.         ], Response::HTTP_SEE_OTHER);
  302.     }
  303. }