src/Controller/ApiService/ApiWebsiteServicesController.php line 89
<?phpnamespace App\Controller\ApiService;use App\Entity\Payments;use App\Entity\Students;use App\Repository\AcademicYearRepository;use App\Repository\AdmissionTblRepository;use App\Repository\CategoriesRepository;use App\Repository\CertificatesRepository;use App\Repository\CountriesRepository;use App\Repository\CourseRepository;use App\Repository\DepartmentRepository;use App\Repository\EventsRepository;use App\Repository\FAQRepository;use App\Repository\FilesRepository;use App\Repository\GradutedStudentRepository;use App\Repository\PaymentsRepository;use App\Repository\SchoolRepository;use App\Repository\StaffsRepository;use App\Repository\StudentCourseRepository;use App\Repository\StudentsRepository;use App\Repository\UserRepository;use App\Services\GeneraleServices;use App\Utils\Constants\AppConstants;use Knp\Snappy\Pdf;use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;use NumberToWords\NumberToWords;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Contracts\HttpClient\HttpClientInterface;#[Route('/website_api')]class ApiWebsiteServicesController extends AbstractController{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){}#[Route('/get_countries_department', name: 'get_countries_department', methods: ['GET'])]public function get_countries_department(): Response{$this->countriesRepository->updateUUID();$countries = $this->countriesRepository->findBy(['deleted' => false]);$departments = $this->departmentRepository->findBy(['deleted' => false]);return $this->json(['countries' => $countries,'departments' => $departments,]);}#[Route('/get_faq', name: 'get_faq', methods: ['GET'])]public function get_faq(): Response{$general = $this->FAQRepository->findBy(['type' => 1,], ['id' => 'DESC'], 20);$studentPortal = $this->FAQRepository->findBy(['type' => 2,], ['id' => 'DESC'], 20);$admission = $this->FAQRepository->findBy(['type' => 3,], ['id' => 'DESC'], 20);return $this->json(['general' => $general,'studentPortal' => $studentPortal,'admission' => $admission,]);}#[Route('/single_events', name: 'single_event', methods: ['POST'])]public function single_event(Request $request): Response{$id = $request->get('id');return $this->json($this->eventsRepository->findOneBy(['id' => $id,'statut' => true,'deleted' => false]));}#[Route('/categorylist', name: 'categorylist', methods: ['GET'])]public function categorylist(Request $request): Response{return $this->json($this->categoriesRepository->findBy(['deleted' => false]));}#[Route('/event_by_category', name: 'event_by_category', methods: ['POST'])]public function event_by_category(Request $request): Response{$id = $request->get('id');$category = $this->categoriesRepository->find($id);$events = $this->eventsRepository->getOtherCat(1, 50, $category);return $this->json($events);}#[Route('/send_latest_events', name: 'send_latest_events', methods: ['GET'])]public function send_latest_events(): Response{$events = $this->eventsRepository->latestEvent(1, 5);$admissionCat = $this->categoriesRepository->findOneBy(['title' => 'Admission']);$admissionevents = $this->eventsRepository->findBy(['category' => $admissionCat,'statut' => true,], ['id' => 'DESC']);$result = ['admissions' => $admissionevents,'others' => $events,];return $this->json($result);}#[Route('/agentsList', name: 'agentsList', methods: ['GET'])]public function agentsList(): Response{return $this->json($this->staffsRepository->getlisteAgents());}#[Route('/getdeptdata', name: 'getdeptdata', methods: ['GET'])]public function getdeptdata(): Response{return $this->json($this->departmentRepository->findnotnuldept());}#[Route('/get_popular_dept', name: 'get_popular_dept', methods: ['GET'])]public function get_popular_dept(): Response{return $this->json($this->departmentRepository->findnotnuldeptispopular());}#[Route('/getschooldata', name: 'getschooldata', methods: ['GET'])]public function getschooldata(){$totalStudents = $this->studentsRepository->count(['deleted' => false]);$totalCourses = $this->courseRepository->count(['deleted' => false]);$totalDeparment = $this->departmentRepository->findBy(['deleted' => false]);return $this->json(['students' => $totalStudents, 'courses' => $totalCourses, 'deparment' => count($totalDeparment)]);}#[Route('/get_student_basic_info', name: 'get_student_basic_info', methods: ['POST'])]public function get_student_basic_info(Request $request){$student = $this->studentsRepository->findOneBy(['matricNo' => $request->get('matricNo')]);if ($student == null) {$student = $this->studentsRepository->findOneBy(['newMatricNo' => $request->get('matricNo')]);}$graduate = $this->gradutedStudentRepository->findOneBy(['student' => $student]);$studentMedia = $this->filesRepository->findOneBy(['type' => AppConstants::PASSPORT_PHOTO, 'referenceCode' => $student->getProfileImgCode(), 'deleted' => false, 'temp' => false]);$picture = '';if ($studentMedia) {$picture = $studentMedia->getLocation() . $studentMedia->getFilename();}$data = [];if ($graduate) {$data = ['matricNo' => $student->getMatricNo(),'matricNoNew' => $student->getNewMatricNo(),'firstName' => $student->getFirstname(),'lastName' => $student->getLastname(),'admissionType' => $student->getAdmission(),'sectionType' => $student->getSectionType(),'departmentTitle' => $student->getDepartment()->getTitle(),'departmentCode' => $student->getDepartment()->getDepartmentCode(),'picture' => $picture,'level' => $student->getLevel(),'grade' => $graduate->getGrade()->getEnTitle(),'gradeYear' => $graduate->getGraduationYear(),];}return $this->json($data);}#[Route('/getadmissionlist', name: 'getadmissionlist', methods: ['GET'])]public function getadmissionlist(): Response{return $this->json($this->admissionTblRepository->getadmissionlist());}#[Route('/get_certificate_detail', name: 'get_certificate_detail', methods: ['POST'])]public function get_certificate_detail(Request $request): Response{$certificate = $this->certificatesRepository->findOneBy(['refNumber' => $request->get('refNumber')]);$dataResult = ['student' => $certificate->getStudent()->getLastname() . ' ' . $certificate->getStudent()->getFirstname(),'admissiontype' => $certificate->getStudent()->getAdmission(),'academicsession' => $certificate->getAcademicSession(),'grade' => $certificate->getGrade(),'department' => $certificate->getDepartment(),'date' => $certificate->getDate(),];return $this->json($dataResult);}/*** [NEW] Download admission to student*/#[Route('/download-admission-form/{reference}', name: 'downloadAdmissionForm')]publicfunction downloadAdmissionFormAction(Request $request, Pdf $snappy, AdmissionTblRepository $admissionTblRepository){$reference = $request->get('reference');$admissionForm = $admissionTblRepository->findOneBy(['reference' => $reference]);if ($admissionForm !== null) {$selStudent = $admissionForm->getStudent();$admissionYear = $admissionForm->getYear();$selDept = $selStudent->getDepartment();$date = $admissionForm->getAdmissionDate();$levelCode = $selStudent->getLevel()->getLevelcode();$departmentDuration = $selStudent->getAdmission()->getCodereference() === 'MSC' ? $selDept->getMasterDuration() : $selDept->getDuration();$duration = $this->generaleServices->getDurationValue($departmentDuration, $levelCode);// dd($duration);$numberToWords = new NumberToWords();$numberTransformer = $numberToWords->getNumberTransformer($selStudent->getSectionType());$deptDuration = $numberTransformer->toWords($duration);$semester = $duration * 2;$semesterWords = $numberTransformer->toWords($semester);if ($selStudent->getSectionType() == 'en') {$template = 'admission_form/admission_form_template.html.twig';if ($selStudent->getAdmission()->getCodereference() === 'MAP') {$template = 'admission_form/admission_masters_form_template.html.twig';}} elseif ($selStudent->getSectionType() == 'fr') {$template = 'admission_form/frenchAdmissionForm.html.twig';if ($selStudent->getAdmission()->getCodereference() === 'MAP') {$template = 'admission_form/frenchAdmissionMastersForm.html.twig';}}$render = $this->renderView($template, array('selStudent' => $selStudent,'admissionYear' => $admissionYear,'selDept' => $selDept,'duration' => $duration,'deptDuration' => $deptDuration,'semesterWords' => $semesterWords,'semester' => $semester,'date' => $date,'resumedate' => $date,));$filename = $selStudent->getLastname() . '_' . $selStudent->getFirstname() . '_(' . $selStudent->getMatricNo() . ')' . '_Admission_letter.pdf';return new Response($snappy->getOutputFromHtml($render, ['encoding' => 'utf-8','images' => true,'dpi' => 300,]),200,array('Content-Type' => 'application/pdf','Content-Disposition' => 'attachment; filename=' . $filename . '.pdf'));}exit();}#[Route('/payments/download-payment-reciept/{reference}', name: 'api_printRecipte', methods: ['GET', 'POST'])]public function printRecipteAction(SchoolRepository $schoolRepository, Payments $payment, PaymentsRepository $paymentsRepository, \Knp\Snappy\Pdf $snappy){$numberToWords = new NumberToWords();$selStudent = $payment->getTheFee()->getStudent();$numberTransformer = $numberToWords->getNumberTransformer($selStudent->getSectionType());$wordNumber = $numberTransformer->toWords($payment->getAmount());$school = $schoolRepository->findBy(['deleted' => false], [], 1)[0];$allPayments = $paymentsRepository->getTotalPaid($payment->getTheFee());// dd($allPayments);if ($selStudent->getSectionType() === 'en') {$template = "fees/recipt.html.twig";} elseif ($selStudent->getSectionType() === 'fr') {$template = "fees/reciptFR.html.twig";}$render = $this->renderView($template, ['wordNumber' => $wordNumber,'paymentinfo' => $payment,'totalPaid' => $allPayments,'school' => $school,]);return new Response($snappy->getOutputFromHtml($render, ['orientation' => 'portrait','page-height' => 120.4,'page-width' => 214.6,'encoding' => 'utf-8','images' => true,'dpi' => 300,]),200,['Content-Type' => 'application/pdf','Content-Disposition' => 'attachment; filename=Payment_Reciept.pdf',]);}#[Route('/download_course_sheet/{uuid}', name: 'api_download_course_sheet', methods: ['GET'])]function downloadCourseSheetAction(Students $student, AcademicYearRepository $academicYearRepository, Pdf $snappy): Response{$academicYear = $academicYearRepository->findOneBy(['status' => true]);$result = $this->studentCourseRepository->getRegisteredCourseForStudent($student, $academicYear);// dd($result);if ($student->getSectionType() == 'en') {$template = 'course/printCourse.html.twig';} elseif ($student->getSectionType() == 'fr') {$template = 'course/printCourseFr.html.twig';}$render = $this->renderView($template, array('courses' => $result,'student' => $student,'academicYear' => $academicYear,));return new Response($snappy->getOutputFromHtml($render),200,array('Content-Type' => 'application/pdf','Content-Disposition' => 'attachment; filename=Course-sheet.pdf',));}public function getDurationValue(int $departmentDuration, string $studentLevel){$levels = ['100', '200', '300', '400'];$duration = 0;foreach ($levels as $key => $lv) {if ($lv === $studentLevel) {$duration = $departmentDuration - $key;}}return $duration == 0 ? 1 : $duration;}}