src/Controller/Setting/SettingFeeController.php line 360

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_index', [], Response::HTTP_SEE_OTHER);
  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('entity.schoolYear = :schoolYear')
  285.         ->setParameter('schoolYear'$schoolYear)
  286.         ->andWhere('fee.id = :feeId')
  287.         ->setParameter('feeId'$settingFee->getId())
  288.         ->orderBy('student.last_name''ASC')
  289.         ->getQuery()
  290.         ->getResult();
  291.         $html $this->renderView('setting/print/studentRegistrationFee.html.twig', [
  292.             'setting_fee' => $settingFee,
  293.             'registration_student_registrations' => $registrationStudentRegistrations,
  294.             'school_year' => $schoolYear,
  295.             'setting' => $setting,
  296.         ]);
  297.         $file_name 'ABONNES_FRAIS_'.$settingFee->getId().".pdf";
  298.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  299.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  300.         $options = [
  301.             'orientation' => 'Landscape',
  302.             'header-html' => $header,
  303.             'footer-html' => $footer
  304.         ];
  305.         
  306.         $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/setting/' $file_name$optionstrue);
  307.         return $this->redirectToRoute('preview', [
  308.             'file' => $file_name,
  309.             'dir' => 'setting',
  310.         ]);
  311.     }
  312.     /**
  313.      * @Route("/api/has-duration", name="api_setting_fee_has_duration", methods={"GET"})
  314.     */
  315.     public function api_has_duration(Request $requestSettingFeeRepository $entityRepository): Response
  316.     {
  317.         $id $request->get('id');
  318.         $entity $entityRepository->findOneBy(['id' => intval($id)], []);
  319.         if ($entity != null) {
  320.             if (strlen($entity->getDuration()) > 3) {
  321.                 return $this->json(['code' => 200'message' => $entity->getDuration()], 200);
  322.             }
  323.         }
  324.         
  325.         return $this->json(['code' => 500'message' => "Cette abonnement n' est pas periodique."], 200);
  326.     }
  327.     /**
  328.      * @Route("/print-student-by-classroom", name="setting_fee_print_student_by_classroom", methods={"GET"})
  329.     */
  330.     public function print_student_by_classroom(Pdf $knpSnappyPdfSettingFeeRepository $settingFeeRepositorySettingClassroomRepository $settingClassroomRepository)
  331.     {
  332.         /**@var User $user */
  333.         $user $this->getUser();
  334.         $schoolYear $user->getSchoolYear();
  335.         $setting $this->getUser()->getEstablishment();
  336.         $settingFees $settingFeeRepository->createQueryBuilder('entity')
  337.         ->andWhere('entity.schoolYear = :schoolYear')
  338.         ->setParameter('schoolYear'$schoolYear)
  339.         ->andWhere('entity.establishment = :establishment')
  340.         ->setParameter('establishment'$setting)
  341.         ->orderBy('entity.label''ASC')
  342.         ->getQuery()
  343.         ->getResult();
  344.         $settingClassrooms $settingClassroomRepository->createQueryBuilder('entity')
  345.         ->andWhere('entity.schoolYear = :schoolYear')
  346.         ->setParameter('schoolYear'$schoolYear)
  347.         ->andWhere('entity.establishment = :establishment')
  348.         ->setParameter('establishment'$setting)
  349.         ->orderBy('entity.label''ASC')
  350.         ->getQuery()
  351.         ->getResult();
  352.         $html $this->renderView('setting/print/student_fee_by_classrooms.html.twig', [
  353.             'setting_fees' => $settingFees,
  354.             'setting_classrooms' => $settingClassrooms,
  355.             'school_year' => $schoolYear,
  356.             'create_date' => new DateTimeImmutable(),
  357.             'setting' => $setting,
  358.         ]);
  359.         $file_name 'ABONNES_FRAIS_PAR_CLASSE_'.".pdf";
  360.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  361.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  362.         $options = [
  363.             'orientation' => 'Portrait',
  364.             'header-html' => $header
  365.             //'footer-html' => $footer
  366.         ];
  367.         
  368.         $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/setting/' $file_name$optionstrue);
  369.         return $this->redirectToRoute('preview', [
  370.             'file' => $file_name,
  371.             'dir' => 'setting',
  372.         ]);
  373.     }
  374.     /**
  375.      * @Route("/print/{id}/student-by-classroom", name="setting_fee_print_by_classroom", methods={"GET"})
  376.     */
  377.     public function print_by_classroom(Pdf $knpSnappyPdfSettingFee $settingFeeSettingClassroomRepository $settingClassroomRepository)
  378.     {
  379.         /**@var User $user */
  380.         $user $this->getUser();
  381.         $schoolYear $user->getSchoolYear();
  382.         $setting $this->getUser()->getEstablishment();
  383.         $settingClassrooms $settingClassroomRepository->createQueryBuilder('entity')
  384.         ->andWhere('entity.schoolYear = :schoolYear')
  385.         ->setParameter('schoolYear'$schoolYear)
  386.         ->andWhere('entity.establishment = :establishment')
  387.         ->setParameter('establishment'$setting)
  388.         ->orderBy('entity.label''ASC')
  389.         ->getQuery()
  390.         ->getResult();
  391.         $html $this->renderView('setting/print/fee_by_classroom.html.twig', [
  392.             'setting_fee' => $settingFee,
  393.             'setting_classrooms' => $settingClassrooms,
  394.             'school_year' => $schoolYear,
  395.             'create_date' => new DateTimeImmutable(),
  396.             'setting' => $setting,
  397.         ]);
  398.         $file_name 'ABONNES_FRAIS_PAR_CLASSE_'.".pdf";
  399.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  400.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  401.         $options = [
  402.             'orientation' => 'Portrait',
  403.             'header-html' => $header
  404.             //'footer-html' => $footer
  405.         ];
  406.         
  407.         $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/setting/' $file_name$optionstrue);
  408.         return $this->redirectToRoute('preview', [
  409.             'file' => $file_name,
  410.             'dir' => 'setting',
  411.         ]);
  412.     }
  413.     /**
  414.      * @Route("/add-year", name="setting_fee_add_year", methods={"GET"})
  415.     */
  416.     public function add_year(SettingFeeShedulRepository $entityRepository): Response
  417.     {
  418.         $entityManager $this->getDoctrine()->getManager();
  419.         foreach ($entityRepository->findBy([], []) as $key => $entity) {
  420.             $entity->setDateDue($entity->getDateDue()->add(new DateInterval("P1Y")));
  421.         }
  422.         try {
  423.             $entityManager->flush();
  424.             $this->addFlash('success'"Traitement effectué");
  425.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  426.         } catch (\Throwable $th) {
  427.             //$th->getMessage()
  428.             $this->addFlash('warning'$th->getMessage());
  429.         }
  430.         
  431.         $this->addFlash('warning'"Traitement non effectué");
  432.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  433.     }
  434.     /**
  435.      * @Route("/sub-year", name="setting_fee_sub_year", methods={"GET"})
  436.     */
  437.     public function sub_year(SettingFeeShedulRepository $entityRepository): Response
  438.     {
  439.         $entityManager $this->getDoctrine()->getManager();
  440.         foreach ($entityRepository->findBy([], []) as $key => $entity) {
  441.             $entity->setDateDue($entity->getDateDue()->sub(new DateInterval("P1Y")));
  442.         }
  443.         try {
  444.             $entityManager->flush();
  445.             $this->addFlash('success'"Traitement effectué");
  446.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  447.         } catch (\Throwable $th) {
  448.             //$th->getMessage()
  449.             $this->addFlash('warning'$th->getMessage());
  450.         }
  451.         
  452.         $this->addFlash('warning'"Traitement non effectué");
  453.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  454.     }
  455.     /**
  456.      * @Route("/api/set-establishment/{id}", name="api_setting_fee_set_establishment", methods={"GET"})
  457.     */
  458.     public function api_set_establishment(Request $requestEstablishmentRepository $establishmentRepositoryRepositorySettingFee $settingFeeEntityManagerInterface $entityManager): Response
  459.     {
  460.         $id $request->get('establishment');
  461.         $establishment $establishmentRepositoryRepository->findOneBy(['id' => $id], []);
  462.         if ($establishment != null) {
  463.             $settingFee->setEstablishment($establishment);
  464.         }
  465.         
  466.         try {
  467.             $entityManager->flush();
  468.             return $this->json(['code' => 200'message' => "Traitement effectué :)"], 200);
  469.         } catch (\Throwable $th) {
  470.             $this->addFlash('warning'$th->getMessage());
  471.         }
  472.         
  473.         $this->addFlash('warning'"Traitement non effectué");
  474.         return $this->json(['code' => 500'message' => "Traitement non effectué"], 200);
  475.     }
  476. }