src/Controller/PaymentController.php line 128

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Payment;
  4. use App\Form\PaymentType;
  5. use App\Repository\PaymentRepository;
  6. use App\Repository\ClassRoomRepository;
  7. use App\Repository\QuaterRepository;
  8. use App\Repository\StudentRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use App\Service\SchoolYearService;
  15. use Knp\Component\Pager\PaginatorInterface;
  16. use App\Filter\PaymentSearch;
  17. use App\Form\Filter\PaymentSearchType;
  18. use App\Repository\SubscriptionRepository;
  19. /**
  20. * Course controller.
  21. *
  22. * @Route("/admin/payments")
  23. */
  24. class PaymentController extends AbstractController
  25. {
  26. private SchoolYearService $schoolYearService;
  27. private EntityManagerInterface $em;
  28. private PaymentRepository $repo;
  29. private ClassRoomRepository $clRepo;
  30. private QuaterRepository $qtRepo;
  31. private StudentRepository $stdRepo;
  32. private SubscriptionRepository $subRepo;
  33. public function __construct(SubscriptionRepository $subRepo,StudentRepository $stdRepo,QuaterRepository $qtRepo, PaymentRepository $repo, SchoolYearService $schoolYearService, EntityManagerInterface $em, ClassRoomRepository $clRepo)
  34. {
  35. $this->em = $em;
  36. $this->repo = $repo;
  37. $this->qtRepo = $qtRepo;
  38. $this->clRepo = $clRepo;
  39. $this->stdRepo = $stdRepo;
  40. $this->subRepo = $subRepo;
  41. $this->schoolYearService = $schoolYearService;
  42. }
  43. #[Route('/', name: 'app_payment_index', methods: ['GET'])]
  44. public function index(PaginatorInterface $paginator,Request $request): Response
  45. {
  46. $search = new PaymentSearch();
  47. $searchForm = $this->createForm(PaymentSearchType::class, $search);
  48. $searchForm->handleRequest($request);
  49. $year = $this->schoolYearService->sessionYearById();
  50. if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  51. $room = intval($_GET['room']);
  52. $quater = intval( $_GET['quater']);
  53. $student = intval($_GET['student']);
  54. $startDate = \DateTime::createFromFormat('Y-m-d', $_GET['startDate']);
  55. $endDate = \DateTime::createFromFormat('Y-m-d', $_GET['endDate']);
  56. if($startDate && $endDate){
  57. $entities = $this->repo->findPayments($year, $room, $quater, $student,$startDate,$endDate );
  58. } else {
  59. $entities = $this->repo->findPayments($year, $room, $quater, $student );
  60. }
  61. } else {
  62. $entities = $this->repo->findBy(array( "schoolYear"=> $year), array('updatedAt' => 'ASC'));
  63. }
  64. $payments = $paginator->paginate($entities, $request->query->get('page', 1), Payment::NUM_ITEMS_PER_PAGE);
  65. return $this->render('payment/index.html.twig', [
  66. 'payments' => $payments,
  67. 'searchForm' => $searchForm->createView()
  68. ]);
  69. }
  70. #[Route('/new', name: 'app_payment_new', methods: ['GET', 'POST'])]
  71. public function new(Request $request, EntityManagerInterface $entityManager): Response
  72. {
  73. $payment = new Payment();
  74. $form = $this->createForm(PaymentType::class, $payment);
  75. $form->handleRequest($request);
  76. $year = $this->schoolYearService->sessionYearById();
  77. if ($form->isSubmitted() && $form->isValid()) {
  78. $sub = $this->subRepo->findOneBy(array("student" => $payment->getStudent(), "schoolYear" => $year));
  79. if($sub != null){
  80. if($payment->isSubscription() ){
  81. if( $payment->getAmount() > $year->getRate()) {
  82. $subscriptionPayment = new Payment();
  83. $subscriptionPayment->setAmount($year->getRate());
  84. $subscriptionPayment->setStudent($payment->getStudent());
  85. $subscriptionPayment->setSchoolYear($this->schoolYearService->sessionYearById());
  86. $subscriptionPayment->setCode($this->schoolYearService->sessionYearById()->getCode().'_sub_'.$payment->getStudent()->getId());
  87. $entityManager->persist($subscriptionPayment);
  88. $payment->setAmount($payment->getAmount()-$year->getRate());
  89. } else {
  90. $this->addFlash('warning', 'The amount indicated is not enough to cover the registration');
  91. }
  92. }
  93. $payment->setSchoolYear($this->schoolYearService->sessionYearById());
  94. $payment->setCode($this->schoolYearService->sessionYearById()->getCode().'_'.$payment->getStudent()->getId().'_'.date("m_d_h_i_s"));
  95. $entityManager->persist($payment);
  96. $entityManager->flush();
  97. return $this->redirectToRoute('admin_student_receipt', ['id' => $payment->getStudent()->getId()]);
  98. } else {
  99. $this->addFlash('warning', 'This student is not yet registered. Please first assign him to a class ');
  100. }
  101. }
  102. return $this->renderForm('payment/new.html.twig', [
  103. 'payment' => $payment,
  104. 'form' => $form,
  105. ]);
  106. }
  107. #[Route('/{id}', name: 'app_payment_show', methods: ['GET'])]
  108. public function show(Payment $payment): Response
  109. {
  110. return $this->render('payment/show.html.twig', [
  111. 'payment' => $payment,
  112. ]);
  113. }
  114. #[Route('/{id}/edit', name: 'app_payment_edit', methods: ['GET', 'POST'])]
  115. public function edit(Request $request, Payment $payment, EntityManagerInterface $entityManager): Response
  116. {
  117. $form = $this->createForm(PaymentType::class, $payment);
  118. $form->handleRequest($request);
  119. if ($form->isSubmitted() && $form->isValid()) {
  120. $entityManager->flush();
  121. return $this->redirectToRoute('app_payment_index', [], Response::HTTP_SEE_OTHER);
  122. }
  123. return $this->renderForm('payment/edit.html.twig', [
  124. 'payment' => $payment,
  125. 'form' => $form,
  126. ]);
  127. }
  128. #[Route('/{id}', name: 'app_payment_delete', methods: ['POST'])]
  129. public function delete(Request $request, Payment $payment, EntityManagerInterface $entityManager): Response
  130. {
  131. if ($this->isCsrfTokenValid('delete'.$payment->getId(), $request->request->get('_token'))) {
  132. $entityManager->remove($payment);
  133. $entityManager->flush();
  134. }
  135. return $this->redirectToRoute('app_payment_index', [], Response::HTTP_SEE_OTHER);
  136. }
  137. }