src/Controller/Setting/SettingFeeController.php line 363

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Setting;
  3. use DateInterval;
  4. use Knp\Snappy\Pdf;
  5. use App\Entity\User;
  6. use DateTimeImmutable;
  7. use App\Entity\SettingFee;
  8. use App\Entity\SettingLevel;
  9. use App\Entity\SettingFeeShedul;
  10. use App\Repository\UserRepository;
  11. use App\Form\Setting\SettingFeeType;
  12. use App\Repository\SchoolYearRepository;
  13. use App\Repository\SettingFeeRepository;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use App\Form\Setting\SettingFeeShedulType;
  16. use App\Repository\SettingLevelRepository;
  17. use App\Repository\EstablishmentRepository;
  18. use Knp\Component\Pager\PaginatorInterface;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use App\Repository\SettingClassroomRepository;
  21. use App\Repository\SettingFeeShedulRepository;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  25. use App\Repository\RegistrationStudentRegistrationRepository;
  26. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  27. /**
  28.  * @Route("/setting/fee")
  29.  */
  30. class SettingFeeController extends AbstractController
  31. {
  32.     /**
  33.      * @Route("/index", name="setting_fee_index", methods={"GET"})
  34.      */
  35.     public function index(Request $requestPaginatorInterface $paginatorSettingFeeRepository $settingFeeRepositorySchoolYearRepository $schoolYearRepositoryEstablishmentRepository $establishmentRepositoryUserRepository $userRepository): Response
  36.     {
  37.         /**@var User $user */
  38.         $user $this->getUser();
  39.         $schoolYear $user->getSchoolYear();
  40.         
  41.         $establishment $user->getEstablishment();
  42.         $setting_fees $paginator->paginate(
  43.             $settingFeeRepository->createQueryBuilder('entity')
  44.             ->andWhere('entity.establishment = :establishment')
  45.             ->setParameter('establishment'$establishment)
  46.             ->andWhere('entity.schoolYear = :schoolYear')
  47.             ->setParameter('schoolYear'$schoolYear)
  48.             ->orderBy('entity.id''DESC')
  49.             ->getQuery(),
  50.             $request->query->getInt('page'1),
  51.             1000
  52.         );
  53.         $establishments $establishmentRepository->createQueryBuilder('entity')
  54.             ->andWhere('entity.establishmentGroup = :establishmentGroup')
  55.             ->setParameter('establishmentGroup'$establishment->getEstablishmentGroup())
  56.             ->orderBy('entity.name''ASC')
  57.             ->getQuery()
  58.             ->getResult();
  59.         return $this->render('setting/setting_fee/index.html.twig', [
  60.             'userRepository' => $userRepository,
  61.             'setting_fees' => $setting_fees,
  62.             'school_year' => $schoolYear,
  63.             'school_years' => $schoolYearRepository->findBy([], ['id' => 'DESC']),
  64.             'establishments' => $establishments
  65.         ]);
  66.     }
  67.     /**
  68.      * @Route("/new", name="setting_fee_new", methods={"GET","POST"})
  69.      */
  70.     public function new(Request $requestSettingLevelRepository $settingLevelRepository): Response
  71.     {
  72.         /**@var User $user */
  73.         $user $this->getUser();
  74.         $schoolYear $user->getSchoolYear();
  75.         $establishment $this->getUser()->getEstablishment();
  76.         $settingFee = new SettingFee();
  77.         $levels $settingLevelRepository->findBy(['establishment' => $establishment]);
  78.         $form $this->createForm(SettingFeeType::class, $settingFee);
  79.         if ($establishment->getType() != $establishment::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  80.             $form
  81.             ->add('is_for_non_affected')
  82.             ->add('is_for_affected');
  83.         }
  84.         $form
  85.         ->add('levels'EntityType::class, [
  86.             'class' => SettingLevel::class,
  87.             'choices' => $levels,
  88.             'multiple' => true,
  89.             'required' => false
  90.         ]);
  91.         $form->handleRequest($request);
  92.         if ($form->isSubmitted() && $form->isValid()) {
  93.             $entityManager $this->getDoctrine()->getManager();
  94.             $settingFee->setEstablishment($this->getUser()->getEstablishment());
  95.             $settingFee->setSchoolYear($schoolYear);
  96.             $entityManager->persist($settingFee);
  97.             try {
  98.                 $entityManager->flush();
  99.                 $this->addFlash('success'"Un frais à été ajouté.");
  100.             } catch (\Throwable $th) {
  101.                 $this->addFlash('warning'"Une erreure est survenue lors de l'ajout du frais.");
  102.                 $this->addFlash('info'$th->getMessage());
  103.             }
  104.             return $this->redirectToRoute('setting_fee_edit', ['id' => $settingFee->getId()]);
  105.         }
  106.         return $this->renderForm('setting/setting_fee/new.html.twig', [
  107.             'setting_fee' => $settingFee,
  108.             'form' => $form,
  109.         ]);
  110.     }
  111.     /**
  112.      * @Route("/import", name="setting_fee_import", methods={"GET"})
  113.      */
  114.     public function import(Request $requestSettingFeeRepository $settingFeeRepositorySchoolYearRepository $schoolYearRepository): Response
  115.     {
  116.         /**@var User $user */
  117.         $user $this->getUser();
  118.         $schoolYear $schoolYearRepository->findOneBy(['id' => $request->get('school_year')], []);
  119.         $establishment $user->getEstablishment();
  120.         if (null != $schoolYear) {
  121.             $settingFees $settingFeeRepository->findBy(['schoolYear' => $schoolYear'establishment' => $establishment], []);
  122.             $entityManager $this->getDoctrine()->getManager();
  123.             foreach ($settingFees as $key => $fee) {
  124.                 $settingFee = new SettingFee;
  125.                 $settingFee->setEstablishment($fee->getEstablishment());
  126.                 $settingFee->setSchoolYear($user->getSchoolYear());
  127.                 $settingFee->setAccountingAccount($fee->getAccountingAccount());
  128.                 $settingFee->setAmount($fee->getAmount());
  129.                 $settingFee->setLabel($fee->getLabel());
  130.                 $settingFee->setCategory($fee->getCategory());
  131.                 $settingFee->setDuration($fee->getDuration());
  132.                 $settingFee->setFeeProvider($fee->getFeeProvider());
  133.                 $settingFee->setIsForAffected($fee->getIsForAffected());
  134.                 $settingFee->setIsForAll($fee->getIsForAll());
  135.                 $settingFee->setIsForNonAffected($fee->getIsForNonAffected());
  136.                 $settingFee->setQuantityAvailable($fee->getQuantityAvailable());
  137.                 foreach ($fee->getLevels() as $key => $level) {
  138.                     $settingFee->addLevel($level);
  139.                 }
  140.                 foreach ($fee->getTransportZones() as $key => $transportZone) {
  141.                     $settingFee->addTransportZone($transportZone);
  142.                 }
  143.                 foreach ($fee->getSettingFeeSheduls() as $key => $feeShedul) {
  144.                     $settingFeeShedul = new SettingFeeShedul();
  145.                     $settingFeeShedul->setFee($settingFee);
  146.                     $settingFeeShedul->setAmount($feeShedul->getAmount());
  147.                     $settingFeeShedul->setDateDue($feeShedul->getDateDue()->add(new DateInterval("P1Y")));
  148.                     $settingFeeShedul->setOrderNum($feeShedul->getOrderNum());
  149.                     $settingFeeShedul->setEstablishment($feeShedul->getEstablishment());
  150.                     $entityManager->persist($settingFeeShedul);
  151.                 }
  152.                 $entityManager->persist($settingFee);
  153.             }
  154.         }
  155.         
  156.         try {
  157.             $entityManager->flush();
  158.             $this->addFlash('success'"Importation effectuée.");
  159.         } catch (\Throwable $th) {
  160.             $this->addFlash('warning'"Une erreure est survenue lors de l'importation.");
  161.             $this->addFlash('info'$th->getMessage());
  162.         }
  163.         
  164.         return $this->redirectToRoute('setting_fee_index', [], Response::HTTP_SEE_OTHER);
  165.     }
  166.     /**
  167.      * @Route("/{id}/edit", name="setting_fee_edit", methods={"GET","POST"})
  168.      */
  169.     public function edit(Request $requestSettingFee $settingFeeSettingFeeShedulRepository $settingFeeShedulRepositorySettingLevelRepository $settingLevelRepository): Response
  170.     {
  171.         $establishment $this->getUser()->getEstablishment();
  172.         $levels $settingLevelRepository->findBy(['establishment' => $establishment]);
  173.         $form $this->createForm(SettingFeeType::class, $settingFee);
  174.         if ($establishment->getType() != $establishment::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
  175.             $form
  176.             ->add('is_for_non_affected')
  177.             ->add('is_for_affected')
  178.             ->add('is_for_all');
  179.         }
  180.         $form
  181.         ->add('levels'EntityType::class, [
  182.             'class' => SettingLevel::class,
  183.             'choices' => $levels,
  184.             'multiple' => true,
  185.             'required' => false
  186.         ]);
  187.         $form->handleRequest($request);
  188.         if ($form->isSubmitted() && $form->isValid()) {
  189.             try {
  190.                 $this->getDoctrine()->getManager()->flush();
  191.                 $this->addFlash('success'"le frais à été édité.");
  192.             } catch (\Throwable $th) {
  193.                 $this->addFlash('warning'"Une erreure est survenue lors de l'édition du frais.");
  194.                 $this->addFlash('info'$th->getMessage());
  195.             }
  196.             return $this->redirectToRoute('setting_fee_edit', ['id' => $settingFee->getId()]);
  197.         }
  198.         /* Ajout des echeancies */
  199.         $settingFeeShedul = new SettingFeeShedul();
  200.         $settingFeeShedul->setOrderNum(count($settingFee->getSettingFeeSheduls()) + 1);
  201.         $ShedulForm $this->createForm(SettingFeeShedulType::class, $settingFeeShedul);
  202.         $ShedulForm->handleRequest($request);
  203.         if ($ShedulForm->isSubmitted() && $ShedulForm->isValid()) {
  204.             if ($settingFeeShedulRepository->findOneBy([],['id' => 'DESC']) != null) {
  205.                 if ($settingFeeShedulRepository->findOneBy(['fee' => $settingFee],['id' => 'DESC']) != null) {
  206.                     if ($settingFeeShedul->getDateDue() <= $settingFeeShedulRepository->findOneBy(['fee' => $settingFee],['id' => 'DESC'])->getDateDue()) {
  207.                         $this->addFlash('warning'"date invalide.");
  208.                         return $this->redirectToRoute('setting_fee_edit', ['id' => $settingFee->getId()]);
  209.                     }
  210.                 }
  211.             }
  212.             if (($settingFee->getSheduledAmount() + $settingFeeShedul->getAmount()) > $settingFee->getAmount()) {
  213.                 $this->addFlash('warning'"le montant est trop élévé.");
  214.                 return $this->redirectToRoute('setting_fee_edit', ['id' => $settingFee->getId()]);
  215.             }
  216.             $entityManager $this->getDoctrine()->getManager();
  217.             $settingFeeShedul->setEstablishment($settingFee->getEstablishment());
  218.             $settingFeeShedul->setFee($settingFee);
  219.             $entityManager->persist($settingFeeShedul);
  220.             try {
  221.                 $entityManager->flush();
  222.                 $this->addFlash('success'"un écheancier à été ajouté.");
  223.             } catch (\Throwable $th) {
  224.                 $this->addFlash('warning'"Une erreur est survenue lors de l'ajout de l'échéancier.");
  225.                 $this->addFlash('info'$th->getMessage());
  226.             }
  227.             return $this->redirectToRoute('setting_fee_edit', ['id' => $settingFee->getId()]);
  228.         }
  229.         return $this->renderForm('setting/setting_fee/edit.html.twig', [
  230.             'setting_fee' => $settingFee,
  231.             'setting_fee_shedul' => $settingFeeShedul,
  232.             'form' => $form,
  233.             'ShedulForm' => $ShedulForm,
  234.         ]);
  235.     }
  236.     /**
  237.      * @Route("/delete-selection", name="setting_fees_selected_delete", methods={"GET"})
  238.     */
  239.     public function deleteSelected(Request $requestSettingFeeRepository $entityRepository): Response
  240.     {
  241.         $list $request->get('entities');
  242.         $entityManager $this->getDoctrine()->getManager();
  243.         $errors 0;
  244.         foreach ($list as $key => $id) {
  245.             $entity $entityRepository->findOneBy(['id' => intval($id)], []);
  246.             if ($entity != null) {
  247.                 if (count($entity->getAccountingStudentRegistrationFees()) <= 0) {
  248.                     foreach ($entity->getSettingFeeSheduls() as $key => $settingFeeShedul) {
  249.                         $entityManager->remove($settingFeeShedul);
  250.                     }
  251.                     $entityManager->remove($entity);
  252.                 }
  253.             }
  254.         }
  255.         try {
  256.             $entityManager->flush();
  257.             $this->addFlash('success'"Traitement effectué");
  258.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  259.         } catch (\Throwable $th) {
  260.             //$th->getMessage()
  261.             $this->addFlash('warning'$th->getMessage());
  262.         }
  263.         
  264.         $this->addFlash('warning'"Traitement non effectué");
  265.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  266.     }
  267.     /**
  268.      * @Route("/{id}/printStudent", name="setting_fee_print_student", methods={"GET"})
  269.     */
  270.     public function printStudent(Pdf $knpSnappyPdfSettingFee $settingFeeRegistrationStudentRegistrationRepository $registrationStudentRegistrationRepository)
  271.     {
  272.         /**@var User $user */
  273.         $user $this->getUser();
  274.         $schoolYear $user->getSchoolYear();
  275.         $setting $settingFee->getEstablishment();
  276.         $registrationStudentRegistrations $registrationStudentRegistrationRepository->createQueryBuilder('entity')
  277.         ->innerJoin('entity.student''student')
  278.         ->addSelect('student')
  279.         
  280.         ->innerJoin('entity.accountingStudentRegistrationFees''accountingStudentRegistrationFee')
  281.         ->addSelect('accountingStudentRegistrationFee')
  282.         ->innerJoin('accountingStudentRegistrationFee.fee''fee')
  283.         ->addSelect('fee')
  284.         ->andWhere('fee.schoolYear = :schoolYear')
  285.         ->setParameter('schoolYear'$schoolYear)
  286.         /*->andWhere('accountingStudentRegistrationFee.is_cancel = :isCancel')
  287.         ->setParameter('isCancel', false)*/
  288.         ->andWhere('fee.id = :feeId')
  289.         ->setParameter('feeId'$settingFee->getId())
  290.         ->orderBy('student.last_name''ASC')
  291.         ->getQuery()
  292.         ->getResult();
  293.         $html $this->renderView('setting/print/studentRegistrationFee.html.twig', [
  294.             'setting_fee' => $settingFee,
  295.             'registration_student_registrations' => $registrationStudentRegistrations,
  296.             'school_year' => $schoolYear,
  297.             'setting' => $setting,
  298.         ]);
  299.         $file_name 'ABONNES_FRAIS_'.$settingFee->getId().".pdf";
  300.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  301.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  302.         $options = [
  303.             'orientation' => 'Landscape',
  304.             'header-html' => $header,
  305.             'footer-html' => $footer
  306.         ];
  307.         
  308.         $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/setting/' $file_name$optionstrue);
  309.         return $this->redirectToRoute('preview', [
  310.             'file' => $file_name,
  311.             'dir' => 'setting',
  312.         ]);
  313.     }
  314.     /**
  315.      * @Route("/api/has-duration", name="api_setting_fee_has_duration", methods={"GET"})
  316.     */
  317.     public function api_has_duration(Request $requestSettingFeeRepository $entityRepository): Response
  318.     {
  319.         $id $request->get('id');
  320.         $entity $entityRepository->findOneBy(['id' => intval($id)], []);
  321.         if ($entity != null) {
  322.             if (strlen($entity->getDuration()) > 3) {
  323.                 return $this->json(['code' => 200'message' => $entity->getDuration()], 200);
  324.             }
  325.         }
  326.         
  327.         return $this->json(['code' => 500'message' => "Cette abonnement n' est pas periodique."], 200);
  328.     }
  329.     /**
  330.      * @Route("/print-student-by-classroom", name="setting_fee_print_student_by_classroom", methods={"GET"})
  331.     */
  332.     public function print_student_by_classroom(Pdf $knpSnappyPdfSettingFeeRepository $settingFeeRepositorySettingClassroomRepository $settingClassroomRepository)
  333.     {
  334.         /**@var User $user */
  335.         $user $this->getUser();
  336.         $schoolYear $user->getSchoolYear();
  337.         $setting $this->getUser()->getEstablishment();
  338.         $settingFees $settingFeeRepository->createQueryBuilder('entity')
  339.         ->andWhere('entity.schoolYear = :schoolYear')
  340.         ->setParameter('schoolYear'$schoolYear)
  341.         ->andWhere('entity.establishment = :establishment')
  342.         ->setParameter('establishment'$setting)
  343.         ->orderBy('entity.label''ASC')
  344.         ->getQuery()
  345.         ->getResult();
  346.         $settingClassrooms $settingClassroomRepository->createQueryBuilder('entity')
  347.         ->andWhere('entity.schoolYear = :schoolYear')
  348.         ->setParameter('schoolYear'$schoolYear)
  349.         ->andWhere('entity.establishment = :establishment')
  350.         ->setParameter('establishment'$setting)
  351.         ->orderBy('entity.label''ASC')
  352.         ->getQuery()
  353.         ->getResult();
  354.         $html $this->renderView('setting/print/student_fee_by_classrooms.html.twig', [
  355.             'setting_fees' => $settingFees,
  356.             'setting_classrooms' => $settingClassrooms,
  357.             'school_year' => $schoolYear,
  358.             'create_date' => new DateTimeImmutable(),
  359.             'setting' => $setting,
  360.         ]);
  361.         $file_name 'ABONNES_FRAIS_PAR_CLASSE_'.time().".pdf";
  362.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  363.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  364.         $options = [
  365.             'orientation' => 'Portrait',
  366.             'header-html' => $header,
  367.             'footer-html' => $footer
  368.         ];
  369.         
  370.         $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/setting/' $file_name$optionstrue);
  371.         return $this->redirectToRoute('preview', [
  372.             'file' => $file_name,
  373.             'dir' => 'setting',
  374.         ]);
  375.     }
  376.     /**
  377.      * @Route("/print/{id}/student-by-classroom", name="setting_fee_print_by_classroom", methods={"GET"})
  378.     */
  379.     public function print_by_classroom(Pdf $knpSnappyPdfSettingFee $settingFeeSettingClassroomRepository $settingClassroomRepository)
  380.     {
  381.         /**@var User $user */
  382.         $user $this->getUser();
  383.         $schoolYear $user->getSchoolYear();
  384.         $setting $this->getUser()->getEstablishment();
  385.         $settingClassrooms $settingClassroomRepository->createQueryBuilder('entity')
  386.         ->andWhere('entity.schoolYear = :schoolYear')
  387.         ->setParameter('schoolYear'$schoolYear)
  388.         ->andWhere('entity.establishment = :establishment')
  389.         ->setParameter('establishment'$setting)
  390.         ->orderBy('entity.label''ASC')
  391.         ->getQuery()
  392.         ->getResult();
  393.         $html $this->renderView('setting/print/fee_by_classroom.html.twig', [
  394.             'setting_fee' => $settingFee,
  395.             'setting_classrooms' => $settingClassrooms,
  396.             'school_year' => $schoolYear,
  397.             'create_date' => new DateTimeImmutable(),
  398.             'setting' => $setting,
  399.         ]);
  400.         $file_name 'ABONNES_FRAIS_PAR_CLASSE_'.time().".pdf";
  401.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  402.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  403.         $options = [
  404.             'orientation' => 'Portrait',
  405.             'header-html' => $header,
  406.             'footer-html' => $footer
  407.         ];
  408.         
  409.         $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/setting/' $file_name$optionstrue);
  410.         return $this->redirectToRoute('preview', [
  411.             'file' => $file_name,
  412.             'dir' => 'setting',
  413.         ]);
  414.     }
  415.     /**
  416.      * @Route("/add-year", name="setting_fee_add_year", methods={"GET"})
  417.     */
  418.     public function add_year(SettingFeeShedulRepository $entityRepository): Response
  419.     {
  420.         $entityManager $this->getDoctrine()->getManager();
  421.         foreach ($entityRepository->findBy([], []) as $key => $entity) {
  422.             $entity->setDateDue($entity->getDateDue()->add(new DateInterval("P1Y")));
  423.         }
  424.         try {
  425.             $entityManager->flush();
  426.             $this->addFlash('success'"Traitement effectué");
  427.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  428.         } catch (\Throwable $th) {
  429.             //$th->getMessage()
  430.             $this->addFlash('warning'$th->getMessage());
  431.         }
  432.         
  433.         $this->addFlash('warning'"Traitement non effectué");
  434.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  435.     }
  436.     /**
  437.      * @Route("/sub-year", name="setting_fee_sub_year", methods={"GET"})
  438.     */
  439.     public function sub_year(SettingFeeShedulRepository $entityRepository): Response
  440.     {
  441.         $entityManager $this->getDoctrine()->getManager();
  442.         foreach ($entityRepository->findBy([], []) as $key => $entity) {
  443.             $entity->setDateDue($entity->getDateDue()->sub(new DateInterval("P1Y")));
  444.         }
  445.         try {
  446.             $entityManager->flush();
  447.             $this->addFlash('success'"Traitement effectué");
  448.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  449.         } catch (\Throwable $th) {
  450.             //$th->getMessage()
  451.             $this->addFlash('warning'$th->getMessage());
  452.         }
  453.         
  454.         $this->addFlash('warning'"Traitement non effectué");
  455.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  456.     }
  457.     /**
  458.      * @Route("/api/set-establishment/{id}", name="api_setting_fee_set_establishment", methods={"GET"})
  459.     */
  460.     public function api_set_establishment(Request $requestEstablishmentRepository $establishmentRepositoryRepositorySettingFee $settingFeeEntityManagerInterface $entityManager): Response
  461.     {
  462.         $id $request->get('establishment');
  463.         $establishment $establishmentRepositoryRepository->findOneBy(['id' => $id], []);
  464.         if ($establishment != null) {
  465.             $settingFee->setEstablishment($establishment);
  466.         }
  467.         
  468.         try {
  469.             $entityManager->flush();
  470.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  471.         } catch (\Throwable $th) {
  472.             $this->addFlash('warning'$th->getMessage());
  473.         }
  474.         
  475.         $this->addFlash('warning'"Traitement non effectué");
  476.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  477.     }
  478. }