src/Controller/ApiService/ApiWebsiteServicesController.php line 89

  1. <?php
  2. namespace App\Controller\ApiService;
  3. use App\Entity\Payments;
  4. use App\Entity\Students;
  5. use App\Repository\AcademicYearRepository;
  6. use App\Repository\AdmissionTblRepository;
  7. use App\Repository\CategoriesRepository;
  8. use App\Repository\CertificatesRepository;
  9. use App\Repository\CountriesRepository;
  10. use App\Repository\CourseRepository;
  11. use App\Repository\DepartmentRepository;
  12. use App\Repository\EventsRepository;
  13. use App\Repository\FAQRepository;
  14. use App\Repository\FilesRepository;
  15. use App\Repository\GradutedStudentRepository;
  16. use App\Repository\PaymentsRepository;
  17. use App\Repository\SchoolRepository;
  18. use App\Repository\StaffsRepository;
  19. use App\Repository\StudentCourseRepository;
  20. use App\Repository\StudentsRepository;
  21. use App\Repository\UserRepository;
  22. use App\Services\GeneraleServices;
  23. use App\Utils\Constants\AppConstants;
  24. use Knp\Snappy\Pdf;
  25. use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;
  26. use NumberToWords\NumberToWords;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\HttpFoundation\JsonResponse;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use Symfony\Contracts\HttpClient\HttpClientInterface;
  33. #[Route('/website_api')]
  34. class ApiWebsiteServicesController extends AbstractController
  35. {
  36.     public function __construct(private StudentCourseRepository $studentCourseRepository, private EventsRepository $eventsRepository, private CountriesRepository $countriesRepository, private DepartmentRepository $departmentRepository, private CategoriesRepository $categoriesRepository, private FAQRepository $FAQRepository, private StaffsRepository $staffsRepository, private AdmissionTblRepository $admissionTblRepository, private CertificatesRepository $certificatesRepository, private StudentsRepository $studentsRepository, private GradutedStudentRepository $gradutedStudentRepository, private FilesRepository $filesRepository, private CourseRepository $courseRepository, private GeneraleServices $generaleServices)
  37.     {
  38.     }
  39.     #[Route('/get_countries_department'name'get_countries_department'methods: ['GET'])]
  40.     public function get_countries_department(): Response
  41.     {
  42.         $this->countriesRepository->updateUUID();
  43.         $countries $this->countriesRepository->findBy(['deleted' => false]);
  44.         $departments $this->departmentRepository->findBy(['deleted' => false]);
  45.         return $this->json([
  46.             'countries' => $countries,
  47.             'departments' => $departments,
  48.         ]);
  49.     }
  50.     #[Route('/get_faq'name'get_faq'methods: ['GET'])]
  51.     public function get_faq(): Response
  52.     {
  53.         $general $this->FAQRepository->findBy([
  54.             'type' => 1,
  55.         ], ['id' => 'DESC'], 20);
  56.         $studentPortal $this->FAQRepository->findBy([
  57.             'type' => 2,
  58.         ], ['id' => 'DESC'], 20);
  59.         $admission $this->FAQRepository->findBy([
  60.             'type' => 3,
  61.         ], ['id' => 'DESC'], 20);
  62.         return $this->json([
  63.             'general' => $general,
  64.             'studentPortal' => $studentPortal,
  65.             'admission' => $admission,
  66.         ]);
  67.     }
  68.     #[Route('/single_events'name'single_event'methods: ['POST'])]
  69.     public function single_event(Request $request): Response
  70.     {
  71.         $id $request->get('id');
  72.         return $this->json($this->eventsRepository->findOneBy([
  73.             'id' => $id,
  74.             'statut' => true,
  75.             'deleted' => false
  76.         ]));
  77.     }
  78.     #[Route('/categorylist'name'categorylist'methods: ['GET'])]
  79.     public function categorylist(Request $request): Response
  80.     {
  81.         return $this->json($this->categoriesRepository->findBy(['deleted' => false]));
  82.     }
  83.     #[Route('/event_by_category'name'event_by_category'methods: ['POST'])]
  84.     public function event_by_category(Request $request): Response
  85.     {
  86.         $id $request->get('id');
  87.         $category $this->categoriesRepository->find($id);
  88.         $events $this->eventsRepository->getOtherCat(150$category);
  89.         return $this->json($events);
  90.     }
  91.     #[Route('/send_latest_events'name'send_latest_events'methods: ['GET'])]
  92.     public function send_latest_events(): Response
  93.     {
  94.         $events $this->eventsRepository->latestEvent(15);
  95.         $admissionCat $this->categoriesRepository->findOneBy([
  96.             'title' => 'Admission'
  97.         ]);
  98.         $admissionevents $this->eventsRepository->findBy([
  99.             'category' => $admissionCat,
  100.             'statut' => true,
  101.         ], ['id' => 'DESC']);
  102.         $result = [
  103.             'admissions' => $admissionevents,
  104.             'others' => $events,
  105.         ];
  106.         return $this->json($result);
  107.     }
  108.     #[Route('/agentsList'name'agentsList'methods: ['GET'])]
  109.     public function agentsList(): Response
  110.     {
  111.         return $this->json($this->staffsRepository->getlisteAgents());
  112.     }
  113.     #[Route('/getdeptdata'name'getdeptdata'methods: ['GET'])]
  114.     public function getdeptdata(): Response
  115.     {
  116.         return $this->json($this->departmentRepository->findnotnuldept());
  117.     }
  118.     #[Route('/get_popular_dept'name'get_popular_dept'methods: ['GET'])]
  119.     public function get_popular_dept(): Response
  120.     {
  121.         return $this->json($this->departmentRepository->findnotnuldeptispopular());
  122.     }
  123.     #[Route('/getschooldata'name'getschooldata'methods: ['GET'])]
  124.     public function getschooldata()
  125.     {
  126.         $totalStudents $this->studentsRepository->count(['deleted' => false]);
  127.         $totalCourses $this->courseRepository->count(['deleted' => false]);
  128.         $totalDeparment $this->departmentRepository->findBy(['deleted' => false]);
  129.         return $this->json(['students' => $totalStudents'courses' => $totalCourses'deparment' => count($totalDeparment)]);
  130.     }
  131.     #[Route('/get_student_basic_info'name'get_student_basic_info'methods: ['POST'])]
  132.     public function get_student_basic_info(Request $request)
  133.     {
  134.         $student $this->studentsRepository->findOneBy([
  135.             'matricNo' => $request->get('matricNo')
  136.         ]);
  137.         if ($student == null) {
  138.             $student $this->studentsRepository->findOneBy([
  139.                 'newMatricNo' => $request->get('matricNo')
  140.             ]);
  141.         }
  142.         $graduate $this->gradutedStudentRepository->findOneBy([
  143.             'student' => $student
  144.         ]);
  145.         $studentMedia $this->filesRepository->findOneBy(['type' => AppConstants::PASSPORT_PHOTO'referenceCode' => $student->getProfileImgCode(), 'deleted' => false'temp' => false]);
  146.         $picture '';
  147.         if ($studentMedia) {
  148.             $picture $studentMedia->getLocation() . $studentMedia->getFilename();
  149.         }
  150.         $data = [];
  151.         if ($graduate) {
  152.             $data = [
  153.                 'matricNo' => $student->getMatricNo(),
  154.                 'matricNoNew' => $student->getNewMatricNo(),
  155.                 'firstName' => $student->getFirstname(),
  156.                 'lastName' => $student->getLastname(),
  157.                 'admissionType' => $student->getAdmission(),
  158.                 'sectionType' => $student->getSectionType(),
  159.                 'departmentTitle' => $student->getDepartment()->getTitle(),
  160.                 'departmentCode' => $student->getDepartment()->getDepartmentCode(),
  161.                 'picture' => $picture,
  162.                 'level' => $student->getLevel(),
  163.                 'grade' => $graduate->getGrade()->getEnTitle(),
  164.                 'gradeYear' => $graduate->getGraduationYear(),
  165.             ];
  166.         }
  167.         return $this->json($data);
  168.     }
  169.     #[Route('/getadmissionlist'name'getadmissionlist'methods: ['GET'])]
  170.     public function getadmissionlist(): Response
  171.     {
  172.         return $this->json($this->admissionTblRepository->getadmissionlist());
  173.     }
  174.     #[Route('/get_certificate_detail'name'get_certificate_detail'methods: ['POST'])]
  175.     public function get_certificate_detail(Request $request): Response
  176.     {
  177.         $certificate $this->certificatesRepository->findOneBy(['refNumber' => $request->get('refNumber')]);
  178.         $dataResult = [
  179.             'student' => $certificate->getStudent()->getLastname() . ' ' $certificate->getStudent()->getFirstname(),
  180.             'admissiontype' => $certificate->getStudent()->getAdmission(),
  181.             'academicsession' => $certificate->getAcademicSession(),
  182.             'grade' => $certificate->getGrade(),
  183.             'department' => $certificate->getDepartment(),
  184.             'date' => $certificate->getDate(),
  185.         ];
  186.         return $this->json($dataResult);
  187.     }
  188.     /**
  189.      * [NEW] Download admission to student
  190.      */
  191.     #[Route('/download-admission-form/{reference}'name'downloadAdmissionForm')]
  192.     public
  193.     function downloadAdmissionFormAction(Request $requestPdf $snappyAdmissionTblRepository $admissionTblRepository)
  194.     {
  195.         $reference $request->get('reference');
  196.         $admissionForm $admissionTblRepository->findOneBy(['reference' => $reference]);
  197.         if ($admissionForm !== null) {
  198.             $selStudent $admissionForm->getStudent();
  199.             $admissionYear $admissionForm->getYear();
  200.             $selDept $selStudent->getDepartment();
  201.             $date $admissionForm->getAdmissionDate();
  202.             $levelCode $selStudent->getLevel()->getLevelcode();
  203.             $departmentDuration $selStudent->getAdmission()->getCodereference() === 'MSC' $selDept->getMasterDuration() : $selDept->getDuration();
  204.             $duration $this->generaleServices->getDurationValue($departmentDuration$levelCode);
  205. //            dd($duration);
  206.             $numberToWords = new NumberToWords();
  207.             $numberTransformer $numberToWords->getNumberTransformer($selStudent->getSectionType());
  208.             $deptDuration $numberTransformer->toWords($duration);
  209.             $semester $duration 2;
  210.             $semesterWords $numberTransformer->toWords($semester);
  211.             if ($selStudent->getSectionType() == 'en') {
  212.                 $template 'admission_form/admission_form_template.html.twig';
  213.                 if ($selStudent->getAdmission()->getCodereference() === 'MAP') {
  214.                     $template 'admission_form/admission_masters_form_template.html.twig';
  215.                 }
  216.             } elseif ($selStudent->getSectionType() == 'fr') {
  217.                 $template 'admission_form/frenchAdmissionForm.html.twig';
  218.                 if ($selStudent->getAdmission()->getCodereference() === 'MAP') {
  219.                     $template 'admission_form/frenchAdmissionMastersForm.html.twig';
  220.                 }
  221.             }
  222.             $render $this->renderView($template, array(
  223.                 'selStudent' => $selStudent,
  224.                 'admissionYear' => $admissionYear,
  225.                 'selDept' => $selDept,
  226.                 'duration' => $duration,
  227.                 'deptDuration' => $deptDuration,
  228.                 'semesterWords' => $semesterWords,
  229.                 'semester' => $semester,
  230.                 'date' => $date,
  231.                 'resumedate' => $date,
  232.             ));
  233.             $filename $selStudent->getLastname() . '_' $selStudent->getFirstname() . '_(' $selStudent->getMatricNo() . ')' '_Admission_letter.pdf';
  234.             return new Response(
  235.                 $snappy->getOutputFromHtml($render, [
  236.                     'encoding' => 'utf-8',
  237.                     'images' => true,
  238.                     'dpi' => 300,
  239.                 ]),
  240.                 200,
  241.                 array(
  242.                     'Content-Type' => 'application/pdf',
  243.                     'Content-Disposition' => 'attachment; filename=' $filename '.pdf'
  244.                 )
  245.             );
  246.         }
  247.         exit();
  248.     }
  249.     #[Route('/payments/download-payment-reciept/{reference}'name'api_printRecipte'methods: ['GET''POST'])]
  250.     public function printRecipteAction(SchoolRepository $schoolRepositoryPayments $paymentPaymentsRepository $paymentsRepository\Knp\Snappy\Pdf $snappy)
  251.     {
  252.         $numberToWords = new NumberToWords();
  253.         $selStudent $payment->getTheFee()->getStudent();
  254.         $numberTransformer $numberToWords->getNumberTransformer($selStudent->getSectionType());
  255.         $wordNumber $numberTransformer->toWords($payment->getAmount());
  256.         $school $schoolRepository->findBy(['deleted' => false], [], 1)[0];
  257.         $allPayments $paymentsRepository->getTotalPaid($payment->getTheFee());
  258. //        dd($allPayments);
  259.         if ($selStudent->getSectionType() === 'en') {
  260.             $template "fees/recipt.html.twig";
  261.         } elseif ($selStudent->getSectionType() === 'fr') {
  262.             $template "fees/reciptFR.html.twig";
  263.         }
  264.         $render $this->renderView($template, [
  265.             'wordNumber' => $wordNumber,
  266.             'paymentinfo' => $payment,
  267.             'totalPaid' => $allPayments,
  268.             'school' => $school,
  269.         ]);
  270.         return new Response(
  271.             $snappy->getOutputFromHtml($render, [
  272.                 'orientation' => 'portrait',
  273.                 'page-height' => 120.4,
  274.                 'page-width' => 214.6,
  275.                 'encoding' => 'utf-8',
  276.                 'images' => true,
  277.                 'dpi' => 300,
  278.             ]),
  279.             200,
  280.             [
  281.                 'Content-Type' => 'application/pdf',
  282.                 'Content-Disposition' => 'attachment; filename=Payment_Reciept.pdf',
  283.             ]
  284.         );
  285.     }
  286.     #[Route('/download_course_sheet/{uuid}'name'api_download_course_sheet'methods: ['GET'])]
  287.     function downloadCourseSheetAction(Students $studentAcademicYearRepository $academicYearRepositoryPdf $snappy): Response
  288.     {
  289.         $academicYear $academicYearRepository->findOneBy(['status' => true]);
  290.         $result $this->studentCourseRepository->getRegisteredCourseForStudent($student$academicYear);
  291. //        dd($result);
  292.         if ($student->getSectionType() == 'en') {
  293.             $template 'course/printCourse.html.twig';
  294.         } elseif ($student->getSectionType() == 'fr') {
  295.             $template 'course/printCourseFr.html.twig';
  296.         }
  297.         $render $this->renderView($template, array(
  298.             'courses' => $result,
  299.             'student' => $student,
  300.             'academicYear' => $academicYear,
  301.         ));
  302.         return new Response(
  303.             $snappy->getOutputFromHtml($render),
  304.             200,
  305.             array(
  306.                 'Content-Type' => 'application/pdf',
  307.                 'Content-Disposition' => 'attachment; filename=Course-sheet.pdf',
  308.             )
  309.         );
  310.     }
  311.     public function getDurationValue(int $departmentDurationstring $studentLevel)
  312.     {
  313.         $levels = ['100''200''300''400'];
  314.         $duration 0;
  315.         foreach ($levels as $key => $lv) {
  316.             if ($lv === $studentLevel) {
  317.                 $duration $departmentDuration $key;
  318.             }
  319.         }
  320.         return $duration == $duration;
  321.     }
  322. }