- <?php
- namespace App\Controller;
- use App\Entity\{CaseHistory, CaseMedicine, CaseReferral, Cases, HivRegister, TBRegister, WardBed};
- use App\Form\{CaseReferralType, CaseType};
- use App\Repository\{CaseRepository, HivRegisterRepository, PatientRepository, TBRegisterRepository};
- use App\Service\{Pagination, Abha};
- use Doctrine\ORM\EntityManagerInterface;
- use Dompdf\Dompdf;
- use Dompdf\Options;
- use Sensio\Bundle\FrameworkExtraBundle\Configuration\{IsGranted, Security};
- use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- use Symfony\Component\HttpFoundation\{JsonResponse, Request, Response};
- use Symfony\Component\Routing\Annotation\Route;
- use Nzo\UrlEncryptorBundle\Annotations\ParamDecryptor;
- use Nzo\UrlEncryptorBundle\Encryptor\Encryptor;
- use Symfony\Component\HttpFoundation\Session\SessionInterface;
- use Symfony\Component\HttpClient\HttpClient;
- use Doctrine\Persistence\ManagerRegistry;
- #[Route(path: '/cases'), IsGranted(data: 'IS_AUTHENTICATED_REMEMBERED')]
- class CaseController extends AbstractController
- {
-     private $encryptor;
-     public function __construct(Encryptor $encryptor, private ManagerRegistry $doctrine)
-     {
-         $this->encryptor = $encryptor;
-     }
-     #[Route(path: '/', name: 'case_index', methods: ['GET'])]
-     public function index(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         if ($this->isGranted('ROLE_DOC')) {
-             $qb = $caseRepo->getForDoctors($this->getUser());
-         } else {
-             $qb = $caseRepo->getForOthers($this->getUser()->getHospital());
-         }
-         if ($request->get('range')) {
-             [$from, $to] = explode(' / ', $request->get('range'));
-             if ($from && $to) {
-                 $qb
-                     ->andWhere('c.createdAt BETWEEN :from AND :to')
-                     ->setParameter('from', $from)
-                     ->setParameter('to', $to);
-             }
-         }
-         $cases = $pagination->paginate($qb->getQuery(), $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Cases'
-         ]);
-     }
-     #[Route(path: '/laboratory', name: 'case_lab', methods: ['GET'])]
-     public function labCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getWithLabTests($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Laboratory Summary'
-         ]);
-     }
-     #[Route(path: '/pharma', name: 'case_pharma', methods: ['GET'])]
-     public function pharmaCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getPharmaCases($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Pharmacy Cases'
-         ]);
-     }
-     #[Route(path: '/labor', name: 'case_labor', methods: ['GET'])]
-     public function laborCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getLaborCases($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Labor room Summary'
-         ]);
-     }
-     #[Route(path: '/ward', name: 'case_ward', methods: ['GET'])]
-     public function wardCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getWardCases($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Ward Cases'
-         ]);
-     }
-     #[Route(path: '/discharged', name: 'case_discharged', methods: ['GET'])]
-     public function dischargedCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getDischargedCases($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Discharge Summary'
-         ]);
-     }
-     #[Route(path: '/emergency', name: 'case_emergency', methods: ['GET'])]
-     public function emergencyCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getEmergencyCases($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Emergency Cases'
-         ]);
-     }
-     #[Route(path: '/medicolegal', name: 'case_medicolegal', methods: ['GET'])]
-     public function medicolegalCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getMedicolegalCases($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Medicolegal Cases'
-         ]);
-     }
-     #[Route(path: '/mortality', name: 'case_mortality', methods: ['GET'])]
-     public function mortalityCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getMortalityCases($this->getUser()->getHospital());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Mortality Cases'
-         ]);
-     }
-     #[Route(path: '/expert-opinions', name: 'case_exprt_opinion', methods: ['GET']), IsGranted(data: 'ROLE_DOC')]
-     public function expertOpinionCases(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $query = $caseRepo->getExpertOpinionCases($this->getUser());
-         $cases = $pagination->paginate($query, $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/expert_opinions.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases)
-         ]);
-     }
-     #[Route(path: '/add-expert-opinion/{id}', name: 'case_add_exprt_opinion', methods: ['GET', 'POST']), IsGranted(data: 'ROLE_DOC')]
-     #[ParamDecryptor(["id"])]
-     public function addOpinion(Request $request, CaseReferral $caseRef, CaseRepository $caseRepo, EntityManagerInterface $entityManager): Response
-     {
-         $form = $this->createForm(CaseReferralType::class, $caseRef);
-         $form->handleRequest($request);
-         if ($form->isSubmitted() && $form->isValid()) {
-             $entityManager->flush();
-             $this->addFlash(
-                 'success',
-                 'Expert Opinion added successfully!'
-             );
-             return $this->redirectToRoute('case_exprt_opinion');
-         }
-         $case = $caseRef->getCase();
-         $symptoms = $caseRepo->getCaseSymptoms($case->getId());
-         $provisionalExaminations = $caseRepo->getCaseProvisionalExaminations($case->getId());
-         $provisionalDiagnosis = $caseRepo->getCaseProvisionalDiagnosis($case->getId());
-         $clinicalPatterns = $caseRepo->getCaseClinicalPatterns($case->getId());
-         return $this->renderForm('cases/add_opinion.html.twig', [
-             'form' => $form,
-             'case' => $case,
-             'case_tests' => $caseRepo->getCaseTests($case->getId()),
-             'case_medicines' => $caseRepo->getCaseMedicines($case->getId()),
-             'symptoms' => $symptoms ? implode(', ', $symptoms) : '—',
-             'provisional_diagnosis' => $provisionalDiagnosis ? implode(', ', $provisionalDiagnosis) : '—',
-             'provisional_examinations' => $provisionalExaminations ? implode(', ', $provisionalExaminations) : '—',
-             'clinical_patterns' => $clinicalPatterns ? implode(', ', $clinicalPatterns) : '—'
-         ]);
-     }
-     #[Route(path: '/print-ref-letter/{id}', name: 'case_print_ref_letter', methods: ['GET']), IsGranted(data: 'ROLE_DOC')]
-     #[ParamDecryptor(["id"])]
-     public function printRefLetter(CaseReferral $caseRef, CaseRepository $caseRepo)
-     {
-         $caseId = $caseRef->getCase()->getId();
-         return $this->render('cases/print_ref_letter.html.twig', [
-             'case_ref' => $caseRef,
-             'action_type' => 'print',
-             'prov_diags' => implode(', ', $caseRepo->getCaseProvisionalDiagnosis($caseId)),
-             'prov_exam' => implode(', ', $caseRepo->getCaseProvisionalExaminations($caseId)),
-             'treatment_given' => implode('<br>', array_merge(
-                 array_column($caseRepo->getCaseMedicines($caseId), 'name'),
-                 array_column($caseRepo->getCaseWardMedicines($caseId), 'name')
-             ))
-         ]);
-     }
-     #[Route(path: '/download-ref-letter/{id}', name: 'case_pdf_ref_letter', methods: ['GET']), IsGranted(data: 'ROLE_DOC')]
-     #[ParamDecryptor(["id"])]
-     public function downloadRefLetter(CaseReferral $caseRef, CaseRepository $caseRepo)
-     {
-         $caseId = $caseRef->getCase()->getId();
-         $html = $this->renderView('cases/print_ref_letter.html.twig', [
-             'case_ref' => $caseRef,
-             'action_type' => 'pdf',
-             'prov_diags' => implode(', ', $caseRepo->getCaseProvisionalDiagnosis($caseId)),
-             'prov_exam' => implode(', ', $caseRepo->getCaseProvisionalExaminations($caseId)),
-             'treatment_given' => implode('<br>', array_merge(
-                 array_column($caseRepo->getCaseMedicines($caseId), 'name'),
-                 array_column($caseRepo->getCaseWardMedicines($caseId), 'name')
-             ))
-         ]);
-         $dompdf = new Dompdf();
-         $dompdf->loadHtml($html);
-         $dompdf->setPaper('A4', 'portrait');
-         $dompdf->render();
-         $dompdf->stream('referral-letter.pdf', [
-             'Attachment' => true
-         ]);
-     }
-     #[Route(path: '/patient-summary', name: 'case_summary', methods: ['GET'])]
-     public function casesSummary(Request $request, Pagination $pagination, CaseRepository $caseRepo): Response
-     {
-         $qb = $caseRepo->getAllCases($this->getUser()->getHospital());
-         if ($request->get('range')) {
-             [$from, $to] = explode(' / ', $request->get('range'));
-             if ($from && $to) {
-                 $qb
-                     ->andWhere('c.createdAt BETWEEN :from AND :to')
-                     ->setParameter('from', $from)
-                     ->setParameter('to', $to);
-             }
-         }
-         $cases = $pagination->paginate($qb->getQuery(), $request, $this->getParameter('items_per_page'));
-         return $this->render('cases/index.html.twig', [
-             'cases' => $cases,
-             'last_page' => $pagination->lastPage($cases),
-             'title' => 'Patients Summary'
-         ]);
-     }
-     #[Route(path: '/new', name: 'case_new', methods: ['GET', 'POST'])]
-     #[Security("is_granted('ROLE_RECEP') or is_granted('ROLE_DOC') or is_granted('ROLE_CHO') or is_granted('ROLE_AYUSH') or is_granted('ROLE_DENT')")]
-     public function new(Request $request, CaseRepository $caseRepo, Abha $abha, PatientRepository $patientRepo, EntityManagerInterface $entityManager): Response
-     {
-         $case = new Cases();
-         $role = 'recep';
-         $template = 'cases/recep_new.html.twig';
-         if ($request->getMethod() == 'GET' && $request->query->has('patient_id')) {
-             $patientId = $this->encryptor->decrypt($request->query->get('patient_id'));
-             $patient = $patientRepo->find(intval($patientId));
-             
-             if ($patient) {
-                 $case->setPatient($patient);
-             }
-         }
-         $hospital = $this->getUser()->getHospital();
-         if ($this->isGranted('ROLE_DOC') || $this->isGranted('ROLE_AYUSH') || $this->isGranted('ROLE_CHO') || $this->isGranted('ROLE_DENT')) {
-             $case->setDoctor($this->getUser());
-             $role = 'doc';
-             $template = 'cases/new.html.twig';
-         }
-         $case->setFollowUpDate(new \DateTime());
-         $form = $this->createForm(CaseType::class, $case, ['allow_extra_fields' => true, 'role' => $role, 'hospital' => $hospital]);
-         $form->handleRequest($request);
-         if ($case->getIsWard() && $request->isMethod('POST')) {
-             $getTotalBed = $caseRepo->getTotalBed($this->getUser()->getProfile()->getHospital()->getId(), $request->request->get('case')['ward']);
-             if (!empty($getTotalBed)) {
-                 $getOccupiedBedBedData = $caseRepo->getOccupiedBed($this->getUser()->getProfile()->getHospital()->getId(), $request->request->get('case')['ward']);
-                 if (!empty($getOccupiedBedBedData)) {
-                     $totalMaleBed = $getTotalBed[0]['total_male_bed'];
-                     $totalFemaleBed = $getTotalBed[0]['total_female_bed']; //1
-                     $availableMaleBad = $totalMaleBed - (int) $getOccupiedBedBedData[0]['male_occupied'];
-                     $availableFemaleBad = $totalFemaleBed - (int) $getOccupiedBedBedData[0]['female_occupied']; //0
-                     if ($case->getPatient()->getGender() == "Male" && (empty($totalMaleBed) || empty($availableMaleBad))) {
-                         $this->addFlash(
-                             'danger',
-                             'Male bed is not available.'
-                         );
-                         return $this->renderForm($template, [
-                             'case' => $case,
-                             'form' => $form,
-                             'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                             'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                         ]);
-                     }
-                     if ($case->getPatient()->getGender() == "Female" && (empty($totalFemaleBed) || empty($availableFemaleBad))) {
-                         $this->addFlash(
-                             'danger',
-                             'Female bed is not available.'
-                         );
-                         return $this->renderForm($template, [
-                             'case' => $case,
-                             'form' => $form,
-                             'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                             'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                         ]);
-                     }
-                 }
-             } else {
-                 $this->addFlash(
-                     'danger',
-                     'Bed not available.'
-                 );
-                 return $this->renderForm($template, [
-                     'case' => $case,
-                     'form' => $form,
-                     'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                     'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                 ]);
-             }
-         }
-         if ($form->isSubmitted() && $form->isValid()) {
-             $formData = $request->get('case');
-             $case->setHospital($hospital);
-             $entityManager->getConnection()->setAutoCommit(false);
-             $entityManager->beginTransaction();
-             try {
-                 $entityManager->persist($case);
-                 $entityManager->flush();
-                 $hospitalId = $hospital->getId();
-                 if (isset($formData['symptoms']) && !empty($formData['symptoms'])) {
-                     $caseRepo->saveSymptoms($formData['symptoms'], $case);
-                 }
-                 if (isset($formData['ncds']) && !empty($formData['ncds'])) {
-                     $caseRepo->saveNcds($formData['ncds'], $case);
-                 }
-                 $mrdNo = 'MRD-' . $hospital->getType() . '-' . date('Y') . '-' . sprintf('%04d', $hospital->getId()) . '-' . sprintf('%010d', $case->getId());
-                 if ($role == 'doc') {
-                     if (isset($formData['clinical_patterns']) && !empty($formData['clinical_patterns'])) {
-                         $caseRepo->saveClinicalPatterns($formData['clinical_patterns'], $case);
-                     }
-                     $caseRepo->saveProvisionalExaminations($formData['provisional_examinations'], $case);
-                     $caseRepo->saveProvisionalDiagnosis($formData['provisional_diagnosis'], $case);
-                     if ($case->getIsLab()) {
-                         $labTests = [];
-                         if (isset($formData['suggestedReports']) && (is_countable($formData['suggestedReports']) ? count($formData['suggestedReports']) : 0) > 0) {
-                             $labTests = array_merge($labTests, $formData['suggestedReports']);
-                         }
-                         if (isset($formData['lab_tests']) && (is_countable($formData['lab_tests']) ? count($formData['lab_tests']) : 0) > 0) {
-                             $labTests = array_merge($labTests, $formData['lab_tests']);
-                         }
-                         $labTestIds = array_unique($labTests);
-                         $radTests = $formData['generalReports'] ?? [];
-                         if (count($labTestIds) == 0 && (is_countable($radTests) ? count($radTests) : 0) == 0) {
-                             $entityManager->rollback();
-                             $entityManager->clear();
-                             $this->addFlash(
-                                 'danger',
-                                 'Please select at least one Test report and try again.'
-                             );
-                             return $this->renderForm($template, [
-                                 'case' => $case,
-                                 'form' => $form,
-                                 'rad_tests' => '',
-                                 'case_medicines' => '',
-                                 'case_ward_medicines' => '',
-                                 'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                                 'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                             ]);
-                         }
-                         if (count($labTestIds) > 0) {
-                             $caseRepo->saveLabTests($case->getId(), $hospitalId, $this->getUser()->getId(), $labTestIds);
-                         }
-                         if ((is_countable($radTests) ? count($radTests) : 0) > 0) {
-                             $radTestData = [];
-                             foreach ($radTests['id'] as $radTestId) {
-                                 $radTestData[] = [
-                                     'case_id' => $case->getId(),
-                                     'lab_test_id' => $radTestId,
-                                     'instruct' => $radTests['instruct'][$radTestId],
-                                     'hospital_id' => $hospitalId,
-                                     'created_by' => $this->getUser()->getId()
-                                 ];
-                             }
-                             $caseRepo->saveCaseRadTests($radTestData);
-                         }
-                         $case->setLabTestStatus('Pending');
-                     }
-                     if ($case->getIsMedicine()) {
-                         if (!isset($formData['medicines']) || (is_countable($formData['medicines']) ? count($formData['medicines']) : 0) != 6) {
-                             $entityManager->rollback();
-                             $entityManager->clear();
-                             $this->addFlash(
-                                 'danger',
-                                 'Please select at least one medicine and try again.'
-                             );
-                             return $this->renderForm($template, [
-                                 'case' => $case,
-                                 'form' => $form,
-                                 'rad_tests' => '',
-                                 'case_medicines' => '',
-                                 'case_ward_medicines' => '',
-                                 'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                                 'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                             ]);
-                         }
-                         $medicines = $formData['medicines'];
-                         $medicineData = [];
-                         foreach ($medicines['id'] as $medicineId) {
-                             $medicineData[] = [
-                                 'case_id' => $case->getId(),
-                                 'medicine_id' => $medicineId,
-                                 'medicine_type' => $medicines['type'][$medicineId],
-                                 'dose' => $medicines['dose'][$medicineId],
-                                 'frequency' => $medicines['frequency'][$medicineId],
-                                 'num_days' => $medicines['num_days'][$medicineId],
-                                 'notes' => $medicines['patient_notes'][$medicineId],
-                                 'is_referral' => 0,
-                                 'is_opinion' => 0,
-                                 'is_rejected' => 0,
-                                 'created_by' => $this->getUser()->getId()
-                             ];
-                         }
-                         $caseRepo->saveCaseMedicines($medicineData);
-                         $case->setCaseMedicineStatus('Pending');
-                     }
-                     if ($case->getIsReferral()) {
-                         $isOther = $form->get('ref_type')->getData() ?: 0;
-                         $isOpinion = $form->get('ref_is_opinion')->getData();
-                         $refDoc = $form->get('ref_doctor')->getData();
-                         $refEmail = $form->get('ref_email')->getData();
-                         $refNote = $form->get('ref_note')->getData();
-                         $caseRef = new CaseReferral();
-                         $caseRef
-                             ->setCase($case)
-                             ->setIsOther($isOther)
-                             ->setIsOpinion($isOpinion)
-                             ->setDoctor($refDoc)
-                             ->setEmail($refEmail)
-                             ->setNotes($refNote);
-                         if ($isOther == 1) {
-                             $caseRef->setHospital($form->get('ref_center')->getData());
-                         } else {
-                             $caseRef->setHospital($hospital);
-                         }
-                         $entityManager->persist($caseRef);
-                     }
-                     if ($case->getIsWard()) {
-                         $ward = $form->get('ward')->getData();
-                         if (!isset($formData['ward_medicines']) || (is_countable($formData['ward_medicines']) ? count($formData['ward_medicines']) : 0) != 6 || !$ward) {
-                             $entityManager->rollback();
-                             $entityManager->clear();
-                             $this->addFlash(
-                                 'danger',
-                                 'Please select at least one medicine and try again.'
-                             );
-                             return $this->renderForm($template, [
-                                 'case' => $case,
-                                 'form' => $form,
-                                 'rad_tests' => '',
-                                 'case_medicines' => '',
-                                 'case_ward_medicines' => '',
-                                 'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                                 'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                             ]);
-                         }
-                         if (!$ward) {
-                             $entityManager->rollback();
-                             $entityManager->clear();
-                             $this->addFlash(
-                                 'danger',
-                                 'Selected Ward is not available. Please select other Ward and try again.'
-                             );
-                             return $this->renderForm($template, [
-                                 'case' => $case,
-                                 'form' => $form,
-                                 'rad_tests' => '',
-                                 'case_medicines' => '',
-                                 'case_ward_medicines' => '',
-                                 'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                                 'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                             ]);
-                         }
-                         $wardBed = new WardBed();
-                         $wardBed
-                             ->setCase($case)
-                             ->setWard($ward)
-                             ->setStatus('Admitted');
-                         $entityManager->persist($wardBed);
-                         $wardMedicines = $formData['ward_medicines'];
-                         $wardMedicineData = [];
-                         foreach ($wardMedicines['id'] as $medicineId) {
-                             $wardMedicineData[] = [
-                                 'case_id' => $case->getId(),
-                                 'medicine_id' => $medicineId,
-                                 'medicine_type' => $wardMedicines['type'][$medicineId],
-                                 'dose' => $wardMedicines['dose'][$medicineId],
-                                 'frequency' => $wardMedicines['frequency'][$medicineId],
-                                 'num_days' => $wardMedicines['num_days'][$medicineId],
-                                 'notes' => $wardMedicines['staff_notes'][$medicineId],
-                                 'is_emergency' => 0,
-                                 'has_stock' => 0,
-                                 'created_by' => $this->getUser()->getId()
-                             ];
-                         }
-                         //TODO when isWard is true then ward medicine status is pending so pharmacy can give medicine to patient
-                         $case->setWardMedicineStatus('Pending');
-                         $caseRepo->saveCaseWardMedicines($wardMedicineData);
-                     }
-                     if ($case->getPatient()->getMobile()) {
-                         try {
-                             $client = HttpClient::create();
-                             $client->request('POST', 'https://dev2-abdm.7mantra.in/m2/sms-notify2', [
-                                 'headers' => [
-                                     'Content-Type' => 'application/json'
-                                 ],
-                                 'json' => [
-                                     'mobile_number' => $case->getPatient()->getMobile(),
-                                     'hip_id' => $this->getUser()->getProfile()->getHospital()->getHIPCode(),
-                                     'hip_name' => $this->getUser()->getProfile()->getHospital()->getHIPName()
-                                 ]
-                             ]);
-                         } catch (\Exception) {
-                             $this->addFlash(
-                                 'danger',
-                                 'Sms not sent.'
-                             );
-                         }
-                     }
-                     if ($case->getPatient()->getHealthAddress()) {
-                         $data['abhaAddress'] = $case->getPatient()->getHealthAddress();
-                         $data['patientRefNo'] = $case->getPatient()->getUhId();
-                         $data['hipId'] = $case->getPatient()->getHospital()->getHIPCode();
-                         $data['contextRef'] = $mrdNo;
-                         $data['contextDisplay'] = 'Case Care Context';
-                         // $data['hiTypes'] = 'OPConsultation';
-                         $data['hiTypes'] = 'Prescription';
-                         $data['reqId'] = $abha->GUID();
-                         $caseRepo->saveContextDetails($data);
-                     }
-                 }
-                 $case->setMrdId($mrdNo);
-                 $entityManager->persist($case);
-                 $entityManager->flush();
-                 $entityManager->commit();
-                 $this->addFlash(
-                     'success',
-                     'New case added successfully!'
-                 );
-                 return $this->redirectToRoute('case_index');
-             } catch (\Exception) {
-                 $entityManager->rollback();
-                 $entityManager->clear();
-                 $this->addFlash(
-                     'danger',
-                     'Something went wrong! Case data could not be saved. Please try again.'
-                 );
-                 return $this->renderForm($template, [
-                     'case' => $case,
-                     'form' => $form,
-                     'rad_tests' => '',
-                     'case_medicines' => '',
-                     'case_ward_medicines' => '',
-                     'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-                     'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-                 ]);
-             }
-         }
-         return $this->renderForm($template, [
-             'case' => $case,
-             'form' => $form,
-             'general_reports' => $role == 'doc' ? $caseRepo->getGeneralReports() : [],
-             'essential_drugs' => $role == 'doc' ? $caseRepo->getEssentialDrugs($hospital->getType()) : []
-         ]);
-     }
-     #[Route(path: '/re-open/{id}', name: 'case_reopen', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function reOpen(Cases $case, EntityManagerInterface $entityManager): Response
-     {
-         if ($this->getUser()->getHospital()->getId() != $case->getHospital()->getId()) {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-         if (!$case->getIsClosed()) {
-             $this->addFlash(
-                 'danger',
-                 'Case is not closed yet!'
-             );
-             return $this->redirectToRoute('case_index');
-         }
-         $reOpened = new Cases();
-         $reOpened
-             ->setHospital($case->getHospital())
-             ->setDoctor($case->getDoctor())
-             ->setPatient($case->getPatient())
-             ->setPatientCategory($case->getPatientCategory())
-             ->setFamilyHistory($case->getFamilyHistory() ?: '')
-             ->setMedicalHistory($case->getMedicalHistory() ?: '')
-             ->setMedicineHistory($case->getMedicalHistory() ?: '')
-             ->setCurrentDiseaseHistory($case->getCurrentDiseaseHistory() ?: '')
-             ->setDiseaseCategory($case->getDiseaseCategory())
-             ->setPrevCase($case);
-         $entityManager->persist($reOpened);
-         $entityManager->flush();
-         $reOpened->setMrdId('MRD-' . $case->getHospital()->getType() . '-' . date('Y') . '-' . sprintf('%010d', $reOpened->getId()));
-         $entityManager->persist($reOpened);
-         $entityManager->flush();
-         $case->setIsReopened(true);
-         $entityManager->persist($case);
-         $entityManager->flush();
-         $this->addFlash(
-             'success',
-             'Case re-opened successfully!'
-         );
-         return $this->redirectToRoute('case_index');
-     }
-     #[Route(path: '/view/{id}', name: 'case_show', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function show(Request $request, Cases $case, CaseRepository $caseRepo): Response
-     {
-         if ($this->getUser()->getHospital()->getId() == $case->getHospital()->getId() && $case->getIsopinion() !== true) {
-             $symptoms = $caseRepo->getCaseSymptoms($case->getId());
-             $ncds = $caseRepo->getCaseNcds($case->getId());
-             $provisionalExaminations = $caseRepo->getCaseProvisionalExaminations($case->getId());
-             $provisionalDiagnosis = $caseRepo->getCaseProvisionalDiagnosis($case->getId());
-             $clinicalPatterns = $caseRepo->getCaseClinicalPatterns($case->getId());
-             return $this->render('cases/show.html.twig', [
-                 'case' => $case,
-                 'case_tests' => $caseRepo->getCaseTests($case->getId()),
-                 'case_medicines' => $caseRepo->getCaseMedicines($case->getId()),
-                 'opinions' => $caseRepo->getCaseExpertOpinions($case->getId()),
-                 'referrals' => $caseRepo->getCaseReferrals($case->getId()),
-                 'symptoms' => $symptoms ? implode(', ', $symptoms) : '—',
-                 'ncds' => $ncds ? implode(', ', $ncds) : '—',
-                 'provisional_diagnosis' => $provisionalDiagnosis ? implode(', ', $provisionalDiagnosis) : '—',
-                 'provisional_examinations' => $provisionalExaminations ? implode(', ', $provisionalExaminations) : '—',
-                 'clinical_patterns' => $clinicalPatterns ? implode(', ', $clinicalPatterns) : '—',
-                 'case_ward_medicines' => $caseRepo->getCaseWardMedicines($case->getId()),
-                 'ward_type' => $caseRepo->getWardType($case->getId()),
-                 'ward_bed_num' => $caseRepo->getWardBedNum($case->getId()),
-                 'discharge_note' => $caseRepo->getDischargeNote($case->getId()),
-                 'history' => $caseRepo->getCaseHistory($case->getId())
-             ]);
-         } else {
-             return $this->redirectToRoute('case_index');
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-     }
-     #[Route(path: '/diagnose/{id}', name: 'case_edit', methods: ['GET', 'POST'])]
-     #[ParamDecryptor(["id"])]
-     #[Security("is_granted('ROLE_DOC') or is_granted('ROLE_CHO') or is_granted('ROLE_AYUSH') or is_granted('ROLE_DENT')")]
-     public function diagnose(Request $request, Cases $case, CaseRepository $caseRepo, EntityManagerInterface $entityManager, TBRegisterRepository $tbRegRepo, HivRegisterRepository $hivRegRepo): Response
-     {
-         if ($request->isMethod('GET') || $request->isMethod('POST') && $this->getUser()->getHospital()->getId() == $case->getHospital()->getId()) {
-             $caseTests = $caseRepo->getCaseTests($case->getId());
-             $radTests = $caseRepo->getCaseRadTests($case->getId());
-             $caseMedicines = $caseRepo->getCaseMedicines($case->getId());
-             $caseWardMedicines = $caseRepo->getCaseWardMedicines($case->getId());
-             $form = $this->createForm(CaseType::class, $case, ['allow_extra_fields' => true, 'role' => 'doc', 'hospital' => $case->getHospital()]);
-             $form->handleRequest($request);
-             if ($case->getIsWard() && $request->isMethod('POST')) {
-                 $getTotalBed = $caseRepo->getTotalBed($this->getUser()->getProfile()->getHospital()->getId(), $request->request->get('case')['ward']);
-                 if (!empty($getTotalBed)) {
-                     $getOccupiedBedBedData = $caseRepo->getOccupiedBed($this->getUser()->getProfile()->getHospital()->getId(), $request->request->get('case')['ward']);
-                     if (!empty($getOccupiedBedBedData)) {
-                         $totalMaleBed = $getTotalBed[0]['total_male_bed'];
-                         $totalFemaleBed = $getTotalBed[0]['total_female_bed']; //1
-                         $availableMaleBad = $totalMaleBed - (int) $getOccupiedBedBedData[0]['male_occupied'];
-                         $availableFemaleBad = $totalFemaleBed - (int) $getOccupiedBedBedData[0]['female_occupied']; //0
-                         if ($case->getPatient()->getGender() == "Male" && (empty($totalMaleBed) || empty($availableMaleBad))) {
-                             $this->addFlash(
-                                 'danger',
-                                 'Male bed is not available.'
-                             );
-                             return $this->renderForm('cases/edit.html.twig', [
-                                 'case' => $case,
-                                 'form' => $form,
-                                 'opinions' => $caseRepo->getCaseExpertOpinions($case->getId()),
-                                 'general_reports' => $caseRepo->getGeneralReports(),
-                                 'rad_tests' => $radTests,
-                                 'case_tests' => $caseTests,
-                                 'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
-                                 'case_medicines' => $caseMedicines,
-                                 'case_ward_medicines' => $caseWardMedicines,
-                                 'history' => $caseRepo->getCaseHistory($case->getId())
-                             ]);
-                         }
-                         if ($case->getPatient()->getGender() == "Female" && (empty($totalFemaleBed) || empty($availableFemaleBad))) {
-                             $this->addFlash(
-                                 'danger',
-                                 'Female bed is not available.'
-                             );
-                             return $this->renderForm('cases/edit.html.twig', [
-                                 'case' => $case,
-                                 'form' => $form,
-                                 'opinions' => $caseRepo->getCaseExpertOpinions($case->getId()),
-                                 'general_reports' => $caseRepo->getGeneralReports(),
-                                 'rad_tests' => $radTests,
-                                 'case_tests' => $caseTests,
-                                 'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
-                                 'case_medicines' => $caseMedicines,
-                                 'case_ward_medicines' => $caseWardMedicines,
-                                 'history' => $caseRepo->getCaseHistory($case->getId())
-                             ]);
-                         }
-                     }
-                 } else {
-                     $this->addFlash(
-                         'danger',
-                         'Bed not available.'
-                     );
-                     return $this->renderForm('cases/edit.html.twig', [
-                         'case' => $case,
-                         'form' => $form,
-                         'opinions' => $caseRepo->getCaseExpertOpinions($case->getId()),
-                         'general_reports' => $caseRepo->getGeneralReports(),
-                         'rad_tests' => $radTests,
-                         'case_tests' => $caseTests,
-                         'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
-                         'case_medicines' => $caseMedicines,
-                         'case_ward_medicines' => $caseWardMedicines,
-                         'history' => $caseRepo->getCaseHistory($case->getId())
-                     ]);
-                 }
-             }
-             if ($form->isSubmitted() && $form->isValid()) {
-                 $formData = $request->request->get('case');
-                 if ($caseTests || $radTests) {
-                     $case->setIsLab(true);
-                 }
-                 if ($caseMedicines) {
-                     $case->setIsMedicine(true);
-                 }
-                 if ($caseWardMedicines) {
-                     $case->setIsWard(true);
-                 }
-                 $entityManager->getConnection()->setAutoCommit(false);
-                 $entityManager->beginTransaction();
-                 try {
-                     $entityManager->flush();
-                     $history = new CaseHistory();
-                     $history
-                         ->setCase($case)
-                         ->setDoctor($case->getDoctor())
-                         ->setDiseaseCategory($case->getDiseaseCategory())
-                         ->setLocalExamination($case->getLocalExamination());
-                     if ($case->getIcd10CauseGroup()) {
-                         $history->setIcd10Group($case->getIcd10CauseGroup()->getName());
-                     }
-                     if ($case->getIcd10CauseSubGroup()) {
-                         $history->setIcd10Subgroup($case->getIcd10CauseSubGroup()->getName());
-                     }
-                     if ($case->getIcd10Disease()) {
-                         $history->setIcd10Diagnosis($case->getIcd10Disease()->getName());
-                     }
-                     $caseRepo->deleteExistingSymptoms($case);
-                     $caseRepo->deleteExistingProvisionalExaminations($case);
-                     $caseRepo->deleteExistingProvisionalDiagnosis($case);
-                     if (isset($formData['clinical_patterns']) && !empty($formData['clinical_patterns'])) {
-                         $caseRepo->deleteExistingClinicalPatterns($case);
-                         $caseRepo->saveClinicalPatterns((array)$formData['clinical_patterns'], $case, $history);
-                     }
-                     if (isset($formData['ncds']) && !empty($formData['ncds'])) {
-                         $caseRepo->deleteExistingNcds($case);
-                         $caseRepo->saveNcds((array)$formData['ncds'], $case, $history);
-                     }
-                     $caseRepo->saveSymptoms((array)$formData['symptoms'], $case, $history);
-                     $caseRepo->saveProvisionalExaminations((array)$formData['provisional_examinations'], $case, $history);
-                     $caseRepo->saveProvisionalDiagnosis((array)$formData['provisional_diagnosis'], $case, $history);
-                     if ($case->getIsLab()) {
-                         $hospitalId = $case->getHospital()->getId();
-                         $labTests = [];
-                         if (isset($formData['suggestedReports']) && count((array)$formData['suggestedReports']) > 0) {
-                             $labTests = array_merge($labTests, $formData['suggestedReports']);
-                         }
-                         if (isset($formData['lab_tests']) && count((array)$formData['lab_tests']) > 0) {
-                             $labTests = array_merge($labTests, $formData['lab_tests']);
-                         }
-                         $testIdsForHistory = $labTestIds = array_unique($labTests);
-                         if (count($labTestIds) > 0) {
-                             $caseRepo->saveLabTests($case->getId(), $hospitalId, $this->getUser()->getId(), $labTestIds);
-                             $case->setLabTestStatus('Pending');
-                         }
-                         $radTests = $formData['generalReports'] ?? [];
-                         if (count($radTests) > 0) {
-                             $radTestData = [];
-                             foreach ($radTests['id'] as $radTestId) {
-                                 $radTestData[] = [
-                                     'case_id' => $case->getId(),
-                                     'lab_test_id' => $radTestId,
-                                     'instruct' => $radTests['instruct'][$radTestId],
-                                     'hospital_id' => $hospitalId,
-                                     'created_by' => $this->getUser()->getId()
-                                 ];
-                             }
-                             $caseRepo->saveCaseRadTests($radTestData);
-                             $case->setLabTestStatus('Pending');
-                             $testIdsForHistory = array_merge($testIdsForHistory, $radTests['id']);
-                         }
-                         $testsForHistory = $caseRepo->getLabTestNames($testIdsForHistory);
-                         $history->setLabTests(implode(', ', $testsForHistory));
-                     }
-                     if ($case->getIsMedicine()) {
-                         if (isset($formData['medicines']) && count((array)$formData['medicines']) == 6) {
-                             $medicines = $formData['medicines'];
-                             $medicineData = [];
-                             foreach ((array)$medicines['id'] as $medicineId) {
-                                 $medicineData[] = [
-                                     'case_id' => $case->getId(),
-                                     'medicine_id' => $medicineId,
-                                     'medicine_type' => $medicines['type'][$medicineId],
-                                     'dose' => $medicines['dose'][$medicineId],
-                                     'frequency' => $medicines['frequency'][$medicineId],
-                                     'num_days' => $medicines['num_days'][$medicineId],
-                                     'notes' => $medicines['patient_notes'][$medicineId],
-                                     'is_referral' => 0,
-                                     'is_opinion' => 0,
-                                     'is_rejected' => 0,
-                                     'created_by' => $this->getUser()->getId()
-                                 ];
-                             }
-                             $caseRepo->saveCaseMedicines($medicineData);
-                             $case->setCaseMedicineStatus('Pending');
-                             $medsForHistory = $caseRepo->getMedicineNames($medicines['id']);
-                             $history->setMedicines(implode(', ', $medsForHistory));
-                         }
-                     }
-                     if (($case->getIsReferral() || $case->getIsOpinion()) && $form->get('ref_doctor')->getData()) {
-                         $isOther = $form->get('ref_type')->getData() ?: 0;
-                         $isOpinion = $case->getIsOpinion();
-                         $refDoc = $form->get('ref_doctor')->getData();
-                         $refEmail = $form->get('ref_email')->getData();
-                         $refNote = $form->get('ref_note')->getData();
-                         $caseRef = new CaseReferral();
-                         $caseRef
-                             ->setCase($case)
-                             ->setIsOther($isOther)
-                             ->setIsOpinion($isOpinion)
-                             ->setDoctor($refDoc)
-                             ->setEmail($refEmail)
-                             ->setNotes($refNote);
-                         if ($isOther == 1) {
-                             $caseRef->setHospital($form->get('ref_center')->getData());
-                         } else {
-                             $caseRef->setHospital($case->getHospital());
-                         }
-                         $entityManager->persist($caseRef);
-                     }
-                     if ($case->getIsWard()) {
-                         $ward = $form->get('ward')->getData();
-                         $wardBed = $case->getWardBed();
-                         if (!$wardBed) {
-                             if ($ward) {
-                                 $wardBed = new WardBed();
-                                 $wardBed
-                                     ->setCase($case)
-                                     ->setWard($ward)
-                                     ->setStatus('Admitted');
-                                 $entityManager->persist($wardBed);
-                             }
-                         } else {
-                             if ($wardBed && $ward) {
-                                 $wardBed->setWard($ward);
-                                 $entityManager->persist($wardBed);
-                             }
-                         }
-                         if (isset($formData['ward_medicines']) && count((array)$formData['ward_medicines']) == 6) {
-                             $wardMedicines = $formData['ward_medicines'];
-                             $wardMedicineData = [];
-                             foreach ((array)$wardMedicines['id'] as $medicineId) {
-                                 $wardMedicineData[] = [
-                                     'case_id' => $case->getId(),
-                                     'medicine_id' => $medicineId,
-                                     'medicine_type' => $wardMedicines['type'][$medicineId],
-                                     'dose' => $wardMedicines['dose'][$medicineId],
-                                     'frequency' => $wardMedicines['frequency'][$medicineId],
-                                     'num_days' => $wardMedicines['num_days'][$medicineId],
-                                     'notes' => $wardMedicines['staff_notes'][$medicineId],
-                                     'is_emergency' => 0,
-                                     'has_stock' => 0,
-                                     'created_by' => $this->getUser()->getId()
-                                 ];
-                             }
-                             $case->setWardMedicineStatus("Pending");
-                             $caseRepo->saveCaseWardMedicines($wardMedicineData);
-                             $wardMedsForHistory = $caseRepo->getMedicineNames($wardMedicines['id']);
-                             $history->setWardMedicines(implode(', ', $wardMedsForHistory));
-                         }
-                     } else {
-                         $ward = $form->get('ward')->getData();
-                         $wardBed = $case->getWardBed();
-                         if ($wardBed) {
-                             if ($ward) {
-                                 $caseRepo->UpdateStatus($case->getId(), $ward->getId());
-                             }
-                         }
-                     }
-                     if ($case->getIsClosed() && $case->getClosureReason() == 'Death of patient') {
-                         $patient = $case->getPatient();
-                         $patient
-                             ->setIsAlive(false)
-                             ->setExpiredAt(new \DateTime());
-                         $entityManager->persist($patient);
-                     }
-                     $entityManager->persist($history);
-                     $entityManager->flush();
-                     if ($caseRepo->hasTB($case->getId())) {
-                         $tbReg = $tbRegRepo->findOneBy(['hospital' => $case->getHospital(), 'patient' => $case->getPatient()]);
-                         if (!$tbReg) {
-                             $tbReg = new TBRegister();
-                             $tbTest = $caseRepo->getTBTestDetails($case->getId());
-                             $pds = $case->getProvisionalDiagnosis()->filter(fn ($pd) => in_array($pd->getName(), ['PTB', 'RE', 'NTM']));
-                             $tbReg
-                                 ->setPatient($case->getPatient())
-                                 ->setLabSerialNum($tbTest['number'] ?? '-')
-                                 ->setDateCollected(isset($tbTest['date_collected']) ? new \DateTime($tbTest['date_collected']) : new \DateTime())
-                                 ->setRefFacility($case->getHospital()->getName())
-                                 ->setPresumptive(isset($pds[0]) ? $pds[0]->getName() : '-')
-                                 ->setPredominant($case->getCurrentDiseaseHistory())
-                                 ->setSpecimenType($tbTest['type'] ?? '-')
-                                 ->setTestMethod($tbTest['method'] ?? '-')
-                                 ->setResultA($tbTest['result'] ?? '-')
-                                 ->setResultB('-')
-                                 ->setResultADate(isset($tbTest['result_date']) ? new \DateTime($tbTest['result_date']) : new \DateTime())
-                                 ->setHospital($case->getHospital())
-                                 ->setIsDiabeties($caseRepo->hasDM($case->getId()));
-                             $entityManager->persist($tbReg);
-                             $entityManager->flush();
-                         }
-                     }
-                     if ($caseRepo->hasHIV($case->getId())) {
-                         $hivReg = $hivRegRepo->findOneBy(['case' => $case]);
-                         if (!$hivReg) {
-                             $hivReg = new HivRegister();
-                             $hivReg->setCase($case);
-                             $entityManager->persist($hivReg);
-                             $entityManager->flush();
-                         }
-                     }
-                     $entityManager->commit();
-                     $this->addFlash(
-                         'success',
-                         'Case updated successfully!'
-                     );
-                     return $this->redirectToRoute('case_index');
-                 } catch (\Exception) {
-                     $entityManager->rollback();
-                     $entityManager->clear();
-                     $this->addFlash(
-                         'danger',
-                         'Something went wrong! Case data could not be saved. Please try again.'
-                     );
-                     return $this->redirectToRoute('case_edit', ['id' => $this->encryptor->encrypt($case->getId())]);
-                 }
-             }
-             return $this->renderForm('cases/edit.html.twig', [
-                 'case' => $case,
-                 'form' => $form,
-                 'opinions' => $caseRepo->getCaseExpertOpinions($case->getId()),
-                 'general_reports' => $caseRepo->getGeneralReports(),
-                 'rad_tests' => $radTests,
-                 'case_tests' => $caseTests,
-                 'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
-                 'case_medicines' => $caseMedicines,
-                 'case_ward_medicines' => $caseWardMedicines,
-                 'history' => $caseRepo->getCaseHistory($case->getId())
-             ]);
-         } else {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-     }
-     #[Route(path: '/delete/{id}', name: 'case_delete', methods: ['GET']), IsGranted(data: 'ROLE_HOSP_ADMIN')]
-     #[ParamDecryptor(["id"])]
-     public function delete(Cases $case, EntityManagerInterface $entityManager): Response
-     {
-         if ($this->getUser()->getHospital()->getId() != $case->getHospital()->getId()) {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-         try {
-             $entityManager->remove($case);
-             $entityManager->flush();
-             $this->addFlash(
-                 'success',
-                 'Case deleted successfully!'
-             );
-         } catch (\Exception) {
-             $this->addFlash(
-                 'danger',
-                 'Something went wrong! The case could not be deleted!'
-             );
-         }
-         return $this->redirectToRoute('case_index');
-     }
-     #[Route(path: '/symptoms', name: 'case_symptom_json', methods: ['GET'])]
-     public function symptoms(Request $request, CaseRepository $caseRepo): JsonResponse
-     {
-         $categoryId = $request->query->get('category_id');
-         $symptoms = $caseRepo->getSymptoms($categoryId);
-         return $this->json($symptoms);
-     }
-     #[Route(path: '/diagnosis-data', name: 'case_diagnosis_data_json', methods: ['GET'])]
-     public function clinicalPatterns(Request $request, CaseRepository $caseRepo): JsonResponse
-     {
-         $symptomIds = $request->query->get('symptom_ids');
-         $data = [
-             'clinicalPatterns' => null,
-             'provisionalExaminations' => null,
-             'provisionalDiagnosis' => null
-         ];
-         if (is_array($symptomIds)) {
-             $data['clinicalPatterns'] = $caseRepo->getClinicalPatternsBySymptomId($symptomIds);
-             $data['provisionalExaminations'] = $caseRepo->getProvisionalExaminationsBySymptomId($symptomIds);
-             $data['provisionalDiagnosis'] = $caseRepo->getProvisionalDiagnosisBySymptomId($symptomIds);
-         }
-         return $this->json($data);
-     }
-     #[Route(path: '/suggested-tests', name: 'case_suggested_tests_json', methods: ['GET'])]
-     public function suggestedTests(Request $request, CaseRepository $caseRepo): JsonResponse
-     {
-         $icd10SubGroupId = $request->query->get('icd10_sub_group_id');
-         $tests = $caseRepo->getSuggestedTests($icd10SubGroupId);
-         return $this->json($tests);
-     }
-     #[Route(path: '/suggested-advice-treatment', name: 'case_suggested_advice_treatment_json', methods: ['GET'])]
-     public function suggestedAdviceTreatment(Request $request, CaseRepository $caseRepo): JsonResponse
-     {
-         $icd10DiseaseId = $request->query->get('icd10_disease_id');
-         $adviceTreatment = $caseRepo->getSuggestedAdviceTreatment($icd10DiseaseId);
-         return $this->json($adviceTreatment);
-     }
-     #[Route(path: '/delete-case-medicine', name: 'case_delete_case_medicine_json', methods: ['GET'])]
-     public function removeCaseMedicine(Request $request, CaseRepository $caseRepo): JsonResponse
-     {
-         $caseMedicineId = $request->query->get('case_medicine_id');
-         $caseRepo->deleteCaseMedicine($caseMedicineId);
-         return $this->json(true);
-     }
-     #[Route(path: '/reject-case-medicine/{id}', name: 'case_reject_case_medicine', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function rejectCaseMedicine(CaseMedicine $caseMedicine, EntityManagerInterface $entityManager): Response
-     {
-         if ($this->getUser()->getHospital()->getId() != $caseMedicine->getHospital()->getId()) {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-         $caseMedicine->setIsRejected(true);
-         $entityManager->persist($caseMedicine);
-         $entityManager->flush();
-         $this->addFlash(
-             'success',
-             'Medicine rejected successfully!'
-         );
-         return $this->redirectToRoute('case_index');
-     }
-     #[Route(path: '/delete-case-ward-medicine/{id}', name: 'case_delete_case_ward_medicine_json', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function removeCaseWardMedicine(int $id, CaseRepository $caseRepo): JsonResponse
-     {
-         $caseRepo->deleteCaseWardMedicine($id);
-         return $this->json(true);
-     }
-     #[Route(path: '/print-history/{id}', name: 'case_history_print', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function printHistory(Cases $case, CaseRepository $caseRepo)
-     {
-         return $this->render('cases/history_print.html.twig', [
-             'case' => $case,
-             'history' => $caseRepo->getCaseHistory($case->getId())
-         ]);
-     }
-     #[Route(path: '/mlc-info-letter/{id}', name: 'case_mlc_info_letter', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function mlcInfoLetter(Cases $case)
-     {
-         return $this->render('cases/mlc_info_letter.html.twig', [
-             'case' => $case
-         ]);
-     }
-     /*Start :: abha verify and add context */
-     /**
-      * LINK AND ADD CONTEXT (M1)
-      */
-     #[Route('/abha-link-case/{id}', name: 'abha_link_case', methods: ['GET', 'POST'])]
-     #[ParamDecryptor(["id"])]
-     public function abhaLink(Cases $case, Request $request): Response
-     {
-         if ($this->getUser()->getHospital()->getId() == $case->getHospital()->getId())
-         {
-             $session = $request->getSession();
-             $patientId = $case->getPatient()->getId();
-             $caseId = $case->getMrdId();
-             $uhId = $case->getPatient()->getUhId();
-             $type = $request->request->get('type');
-             $session->set('patient_id', $patientId);
-             $session->set('uh_id', $uhId);
-             $session->set('case_number', $caseId);
-             $abhaDetail = $request->request->get('abha_details') ? $request->request->get('abha_details') : '';
-             /* $abhaDetail = $request->request->get('abha_detail');
-             if (!$abhaDetail || !ctype_digit($abhaDetail) || strlen($abhaDetail) != 6) {
-                 $this->addFlash(
-                     'danger',
-                     'Please enter valid abha number/abha address.'
-                 );
-             } */
-             $readOnly = '';
-             if ($abhaDetail != '') {
-                 $readOnly = "readonly";
-             }
-             return $this->render('cases/link_step1.html.twig', [
-                 'type' => $type,
-                 'case' => $case,
-                 'readOnly' => $readOnly,
-                 'abhaDetail' => $abhaDetail,
-             ]);
-         } else {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-     }
-     /**
-      * LINK AND ADD CONTEXT (M1)
-      */
-     #[Route('/post-abha-link', name: 'post_abha_link_case', methods: ['GET', 'POST'])]
-     public function postAbhaLink(Request $request, PatientRepository $patientRepo): Response
-     {
-         $session = $request->getSession();
-         if ($request->isMethod('POST')) {
-             $healthAddress = $request->request->get('abha_details');
-             if (!$healthAddress) {
-                 return $this->redirectToRoute('case_index');
-             }
-             //TODO :: health address store in session
-             $session->set('health_address', $healthAddress);
-             //define hip code and get code from hospital table
-             $hipCode = $this->getUser()->getProfile()->getHospital()->getHIPCode();
-             //try {
-             $payload = [
-                 'id' => $healthAddress,
-                 'hip_id' => $hipCode
-             ];
-             $url = 'https://dev2-abdm.7mantra.in/data-link/fetch-modes';
-             $patientRepo->insertPayload($payload, $url);
-             $client = HttpClient::create();
-             $response = $client->request('POST', $url, [
-                 'headers' => [
-                     'Content-Type' => 'application/json',
-                 ],
-                 'json' => $payload
-             ]);
-             $statusCode = $response->getStatusCode();
-             $content = json_decode($response->getContent(), true);
-             if ($statusCode == '400' || $statusCode == '500' || $statusCode == '401' || $statusCode == '422') {
-                 $message = $content['message'];
-                 if ($statusCode == '422') {
-                     $message = isset($content['message']) ? $content['message'] : 'Unable to process the current request due to incorrect data entered';
-                 }
-                 $this->addFlash(
-                     'danger',
-                     $message
-                 );
-                 return $this->redirectToRoute('fetch_mode');
-             } elseif ($statusCode == '202') {
-                 if (isset($content['message'])) {
-                     $this->addFlash(
-                         'danger',
-                         $content['message']
-                     );
-                     return $this->redirectToRoute('fetch_mode');
-                 }
-                 return $this->render('cases/fetch-modes.html.twig', [
-                     'type' => 'case_diagnose',
-                     'modesArr' => $content,
-                     'health_address' => $healthAddress
-                 ]);
-             } else {
-                 return $this->redirectToRoute('case_index'); // redirect to search abha
-             }
-         }
-     }
-     /**
-      * LINK HEALTH RECORD FETCH MODE (M2)
-      */
-     #[Route(path: '/post-fetch-modes', name: 'post_fetch_modes_case', methods: ['GET', 'POST'])]
-     public function postFetchModes(Request $request, PatientRepository $patientRepo): Response
-     {
-         $fetchMode = $request->request->get('fetch_mode');
-         $healthAddress = $request->request->get('health_address');
-         $type = $request->request->get('type');
-         if (!$fetchMode || !$healthAddress || !$type) {
-             $this->addFlash(
-                 'danger',
-                 'please enter valid details'
-             );
-             return $this->render('cases/fetch-modes.html.twig', [
-                 'modes' => $fetchMode,
-                 'modesArr' => $type,
-                 'health_address' => $healthAddress,
-             ]);
-         }
-         $session = $request->getSession();
-         $patientId = $session->get('patient_id');
-         $patientDetail = $patientRepo->getPatientById($patientId);
-         $patientArr['name'] = isset($patientDetail[0]) && $patientDetail[0]['first_name'] . ' ' . $patientDetail[0]['middle_name'] . ' ' . $patientDetail[0]['last_name'] ? $patientDetail[0]['first_name'] . ' ' . $patientDetail[0]['middle_name'] . ' ' . $patientDetail[0]['last_name'] : '';
-         $patientArr['gender'] = isset($patientDetail[0]) && $patientDetail[0]['gender'] ? $patientDetail[0]['gender'] : '';
-         $patientArr['dob'] = isset($patientDetail[0]) && $patientDetail[0]['dob'] ? $patientDetail[0]['dob'] : '';
-         $patientArr['mobile'] = isset($patientDetail[0]) && $patientDetail[0]['mobile'] ? $patientDetail[0]['mobile'] : '';
-         //try {
-         //define hip code and get code from hospital table
-         $hipCode = $this->getUser()->getProfile()->getHospital()->getHIPCode();
-         $payload = [
-             'id' => $healthAddress,
-             'hip_id' => $hipCode,
-             'auth_mode' => $fetchMode,
-         ];
-         $url = 'https://dev2-abdm.7mantra.in/data-link/init';
-         $patientRepo->insertPayload($payload, $url);
-         $client = HttpClient::create();
-         $header = [
-             'Content-Type' => 'application/json',
-         ];
-         $response = $client->request('POST', $url, [
-             'headers' => $header,
-             'json' => $payload
-         ]);
-         $statusCode = $response->getStatusCode();
-         $content = json_decode($response->getContent(), true);
-         if ($statusCode == '202') { //if api success, get tnx id
-             if (isset($content['message'])) {
-                 $this->addFlash(
-                     'danger',
-                     $content['message']
-                 );
-                 return $this->render('cases/fetch-modes.html.twig', [
-                     'modes' => $fetchMode,
-                     'modesArr' => $type,
-                     'health_address' => $healthAddress,
-                 ]);
-             }
-             $txnId = isset($content['txn_id']) ? $content['txn_id'] : '';
-             return $this->render('cases/verify_data_link.html.twig', [
-                 'modes' => $fetchMode,
-                 'type' => $type,
-                 'txn_id' => $txnId,
-                 'health_address' => $healthAddress,
-                 'patientArr' => $patientArr
-             ]);
-         } elseif ($statusCode == '400' || $statusCode == '401' || $statusCode == '422' || $statusCode == '500') {
-             //if api get error
-             $message = $content['message'];
-             if ($statusCode == '422') {
-                 $message = isset($content['message']) ? $content['message'] : 'Unable to process the current request due to incorrect data entered';
-             }
-             $this->addFlash(
-                 'danger',
-                 $message
-             );
-             return $this->render('cases/fetch-modes.html.twig', [
-                 'modes' => $fetchMode,
-                 'modesArr' => $type,
-                 'health_address' => $healthAddress,
-             ]);
-             //return $this->redirectToRoute('patient_search_with_abha'
-         } else {
-             return $this->redirectToRoute('case_index');
-         }
-         /* } catch (\Throwable $th) {
-             $this->addFlash(
-                 'danger',
-                 'Something went wrong please try again.'
-             );
-             return $this->redirectToRoute('case_index');
-         } */
-     }
-     /**
-      * LINK HEALTH RECORD VERIFY DETAILS (M2)
-      */
-     #[Route(path: '/link-verify-details', name: 'link_verify_details', methods: ['GET', 'POST'])]
-     public function linkVerifyDetails(Request $request, PatientRepository $patientRepo): Response
-     {
-         $session = $request->getSession();
-         $modes = $request->request->get('modes');
-         $healthAddress = $request->request->get('health_address');
-         $name = $request->request->get('name');
-         $gender = $request->request->get('gender');
-         $dob = $request->request->get('dob');
-         $mobile = $request->request->get('mobile');
-         $type = $request->request->get('type');
-         $txnId = $request->request->get('txn_id');
-         $auth_code = $request->request->get('otp');
-         if (!$healthAddress || !$type || !$txnId || !$modes) {
-             $this->addFlash(
-                 'danger',
-                 'please enter valid details'
-             );
-             return $this->redirectToRoute('case_index');
-         } else if (($modes == 'MOBILE_OTP' || $modes == 'AADHAAR_OTP') && !$auth_code && strlen($auth_code) != 6) {
-             $this->addFlash(
-                 'danger',
-                 'please enter valid details'
-             );
-             return $this->redirectToRoute('case_index');
-         } else if ($modes == 'DEMOGRAPHICS' && (!$name || !$gender || !$dob)) {
-             $this->addFlash(
-                 'danger',
-                 'please enter valid details'
-             );
-             return $this->redirectToRoute('case_index');
-         }
-         if ($modes == 'MOBILE_OTP' || $modes == 'AADHAAR_OTP') {
-             $payload = [
-                 'transaction_id' => $txnId,
-                 'modes' => $modes,
-                 'auth_code' => $auth_code
-             ];
-         } else {
-             $payload = [
-                 'transaction_id' => $txnId,
-                 'modes' => $modes,
-                 'name' => $name,
-                 'gender' => $gender,
-                 'dob' => $dob,
-                 'mobile' => $mobile,
-             ];
-         }
-         //dump(json_encode($payload));
-         //try {
-         $header = [
-             'Content-Type' => 'application/json',
-         ];
-         $url = 'https://dev2-abdm.7mantra.in/data-link/confirm';
-         $patientRepo->insertPayload($payload, $url);
-         $client = HttpClient::create();
-         $response = $client->request('POST', $url, [
-             'headers' => $header,
-             'json' => $payload
-         ]);
-         $statusCode = $response->getStatusCode();
-         $content = json_decode($response->getContent(), true);
-         if ($statusCode == '400' || $statusCode == '401' || $statusCode == '422' || $statusCode == '500') {
-             $message = $content['message'];
-             if ($statusCode == '422') {
-                 $message = isset($content['message']) ? $content['message'] : 'Unable to process the current request due to incorrect data entered';
-             }
-             $this->addFlash(
-                 'danger',
-                 $message
-             );
-             return $this->redirectToRoute('case_index');
-         } else if ($statusCode == '202') {
-             if (isset($content['message']) && empty($content)) { // changes ||
-                 $this->addFlash(
-                     'danger',
-                     $content['message']
-                 );
-                 return $this->redirectToRoute('case_index');
-             }
-             $contentArr['token'] = $content['token'];
-             $contentArr['firstName'] = $content['first_name'];
-             $contentArr['middleName'] = $content['middle_name'];
-             $contentArr['lastName'] = $content['last_name'];
-             //$contentArr['yearOfBirth'] = date('Y-m-d', strtotime($content['dob']));
-             $contentArr['dob'] = date('Y-m-d', strtotime($content['dob']));
-             $contentArr['gender'] = $content['gender'];
-             $contentArr['mobile'] = isset($content['identifiers']['mobile']) ? $content['identifiers']['mobile'] : '';
-             $contentArr['healthIdNumber'] = isset($content['identifiers']['health_number']) ? $content['identifiers']['health_number'] : '';
-             $contentArr['healthIdAddress'] = $content['id'];
-             if ($type == 'case_diagnose') {
-                 $patientId = $session->get('patient_id'); // get patient id in session
-                 //force fully update details and redirect to relative patient
-                 $contextStatus = '';
-                 if (isset($content['token']) && !empty($content['token'])) {
-                     if (empty($contentArr['healthIdNumber']) || empty($contentArr['healthIdAddress'])) {
-                         $getTokenData = (array) json_decode(base64_decode(str_replace('_', '/', str_replace('-', '+', explode('.', $content['token'])[1]))));
-                         $contentArr['healthIdNumber'] = isset($getTokenData['healthIdNumber']) ? $content['healthIdNumber'] : '';
-                         $contentArr['healthIdAddress'] = isset($getTokenData['healthId']) ? $content['healthId'] : '';
-                     }
-                     $patientRepo->updateAbhaDetails($contentArr, $patientId);
-                     //TODO :: All value set dynamic, case and patient table
-                     $patientReference = $session->get('uh_id');
-                     $caseNumber = $session->get('case_number');
-                     // TODO : set payload dynamic {type= case,id=caseId,token=token}
-                     $careContext[] = ['referenceNumber' => $caseNumber, 'display' => 'Case Care Context'];
-                     // $type = 'OPConsultation';
-                     $type = 'Prescription';
-                     $patientDisplay = 'patient display';
-                     //define hip code and get code from hospital table
-                     $hipId = $this->getUser()->getProfile()->getHospital()->getHIPCode();
-                     $addContextPayload = [
-                         'accessToken' => $content['token'],
-                         'patientReference' => $patientReference,
-                         'display' => $patientDisplay,
-                         'careContexts' => $careContext,
-                         'healthAddress' => $healthAddress,
-                         'type' => $type,
-                         'hip_id' => $hipId
-                     ];
-                       
-                     $url = 'https://dev2-abdm.7mantra.in/m2/add-context';
-                     $patientRepo->insertPayload($addContextPayload, $url);
-                     $client = HttpClient::create();
-                     $contextResponse = $client->request('POST', $url, [
-                         'headers' => $header,
-                         'json' => $addContextPayload
-                     ]);
-                     //dump($contextResponse);
-                     $contextStatus = $contextResponse->getStatusCode();
-                 }
-                 if ($contextStatus ==  '202') {
-                     $this->addFlash(
-                         'success',
-                         'Health data link successfully.'
-                     );
-                 } else if ($contextStatus ==  '400') {
-                     $this->addFlash(
-                         'danger',
-                         'Bad request.'
-                     );
-                 } else if ($contextStatus ==  '422') {
-                     $this->addFlash(
-                         'danger',
-                         'Some of the Care Contexts are already linked, please remove the linked Care Contexts.'
-                     );
-                 } else {
-                     $this->addFlash(
-                         'danger',
-                         'Something went wrong! Please try again 1!'
-                     );
-                 }
-                 $session->remove('patient_id');
-                 $session->remove('health_address');
-                 $session->remove('uh_id');
-                 $session->remove('case_number');
-                 return $this->redirectToRoute('case_index');
-             }
-         } else {
-             $this->addFlash(
-                 'danger',
-                 'Something went wrong. Please try again. 2'
-             );
-             return $this->redirectToRoute('case_index');
-         }
-         /* } catch (\Throwable $th) {
-             $this->addFlash(
-                 'danger',
-                 'Something went wrong please try again.'
-             );
-             return $this->redirectToRoute('case_index');
-         } */
-     }
-     /*END :: abha verify and add context */
-     /**
-      * LINK HEALTH RECORD (M2)
-      */
-     #[Route(path: '/data-link-fetch/{id}', name: 'data_link_fetch', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function dataLinkFetch(Cases $case, Request $request, PatientRepository $patientRepo): Response
-     {
-         if ($this->getUser()->getHospital()->getId() == $case->getHospital()->getId()) {
-             //TODO :: {{base url}}/v0.5/users/auth/init call this api
-             //TODO :: get health address from patient table
-             //$case->getPatient()->getMobile();
-             $healthAddress = $case->getPatient()->getHealthAddress();
-             if (!$healthAddress) {
-                 $this->addFlash(
-                     'danger',
-                     'Invalid request.'
-                 );
-                 return $this->redirectToRoute('case_index');
-             }
-             $patientId = $case->getPatient()->getId();
-             $caseId = $case->getMrdId();
-             $session = $request->getSession();
-             $uhId = $case->getPatient()->getUhId();
-             $session->set('patient_id', $patientId);
-             $session->set('uh_id', $uhId);
-             // get Case id in store session
-             $session->set('case_number', $caseId);
-             //TODO :: health address store in session
-             $session->set('health_address', $healthAddress);
-             //define hip code and get code from hospital table
-             $hipCode = $this->getUser()->getProfile()->getHospital()->getHIPCode();
-             //try {
-             $payload = [
-                 'id' => $healthAddress,
-                 'hip_id' => $hipCode
-             ];
-             //dump(json_encode($payload));
-             //  dump($payload);
-             $url = 'https://dev2-abdm.7mantra.in/data-link/fetch-modes';
-             $patientRepo->insertPayload($payload, $url);
-             $client = HttpClient::create();
-             $response = $client->request('POST', $url, [
-                 'headers' => [
-                     'Content-Type' => 'application/json',
-                 ],
-                 'json' => $payload
-             ]);
-             
-             $statusCode = $response->getStatusCode();
-             // dump($statusCode);
-             $content = json_decode($response->getContent(), true);
-             if ($statusCode == '400' || $statusCode == '500' || $statusCode == '401' || $statusCode == '422') {
-                 $message = $content['message'];
-                 if ($statusCode == '422') {
-                     $message = isset($content['message']) ? $content['message'] : 'Unable to process the current request due to incorrect data entered';
-                 }
-                 $this->addFlash(
-                     'danger',
-                     $message
-                 );
-                 return $this->redirectToRoute('fetch_mode');
-             } elseif ($statusCode == '202') {
-                 if (isset($content['message'])) {
-                     $this->addFlash(
-                         'danger',
-                         $content['message']
-                     );
-                     return $this->redirectToRoute('fetch_mode');
-                 }
-                 if (empty($content)) {
-                     return $this->redirectToRoute('case_index');
-                 }
-                 return $this->render('cases/fetch-modes.html.twig', [
-                     'type' => 'case_diagnose',
-                     'modesArr' => $content,
-                     'health_address' => $healthAddress
-                 ]);
-             } else {
-                 return $this->redirectToRoute('case_index'); // redirect to search abha
-             }
-         } else {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-     }
-     /**
-      * M2 SMS NOTIFY
-      */
-     #[Route(path: '/patient-notify/{id}', name: 'patient_notify', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function patientNotify(Cases $case, PatientRepository $patientRepo): Response
-     {
-         if ($this->getUser()->getHospital()->getId() == $case->getHospital()->getId()) {
-             //TODO :: get mobile number related patient
-             //TODO :: {{base url}}/v0.5/users/auth/init call this api
-             //TODO :: add try catch
-             $patientMobileNumber = $case->getPatient()->getMobile();
-             if (!$patientMobileNumber) {
-                 $this->addFlash(
-                     'danger',
-                     'Invalid request.'
-                 );
-                 return $this->redirectToRoute('case_index');
-             }
-             $payload = [
-                 'mobile_number' => $patientMobileNumber,
-                 'hip_id' => $this->getUser()->getProfile()->getHospital()->getHIPCode(),
-                 'hip_name' => $this->getUser()->getProfile()->getHospital()->getHIPName()
-             ];
-           //  dump($payload);
-             $url = 'https://dev2-abdm.7mantra.in/m2/sms-notify2';
-             $patientRepo->insertPayload($payload, $url);
-              
-             $client = HttpClient::create();
-             $response = $client->request('POST', $url, [
-                 'headers' => [
-                     'Content-Type' => 'application/json'
-                 ],
-                 'json' => $payload
-             ]);
-             $status = $response->getStatusCode();
-             if ($status ==  '202') {
-                 $this->addFlash(
-                     'success',
-                     'Message sent successfully.'
-                 );
-             } else if ($status ==  '400') {
-                 $this->addFlash(
-                     'danger',
-                     'Mobile number required.'
-                 );
-             } else {
-                 $this->addFlash(
-                     'danger',
-                     'Something went wrong! Please try again!'
-                 );
-             }
-             return $this->redirectToRoute('case_index');
-         } else {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         }
-     }
-     /**
-      * CONSENT LIST (M3)
-      */
-     #[Route(path: '/consent/{id}', name: 'consent', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function consent(Request $request, Abha $abha): Response
-     {
-         // cross site script
-         $id = $this->encryptor->encrypt($request->attributes->get('id'));
-         $arrData = $abha->getConsentList();
-         //dd($arrData);
-         $uri = $this->generateUrl('consent_req_form', ['id' => $id]);
-         return $this->render('abha/consent.html.twig', [
-             'consents' => $arrData,
-             'form_url' => $uri,
-             'data_request' => 'data_request',
-             'view_data' => 'view_data'
-         ]);
-     }
-     /**
-      * CONSENT REQUEST FORM (M3)
-      */
-     #[Route(path: '/consent-request/{id}', name: 'consent_req_form', methods: ['GET'])]
-     #[ParamDecryptor(["id"])]
-     public function consentForm(Request $request, Abha $abha): Response
-     {
-         //cross site script
-         return $this->render('abha/consent_form.html.twig', [
-             'post_form_url' => 'request_init',
-             'patient_find_url' => 'patient_find',
-             'id' => $this->encryptor->encrypt($request->attributes->get('id'))
-         ]);
-     }
-     /**
-      * M3 SUBMIT CONSENT FORM
-      */
-     #[Route(path: '/consent-request-init', name: 'request_init', methods: ['GET', 'POST'])]
-     public function requestInit(Request $request, Abha $abha): Response
-     {
-         /* if ($this->getUser()->getHospital()->getId() == $case->getHospital()->getId()) {
-         } else {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         } */
-         // $id = $this->encryptor->encrypt($request->attributes->get('id'));
-         // $uri = $this->generateUrl('consent', ['id' => $id]);
-         $reqData = $request->request->all();
-         $reqData['hiuParName'] = $this->getUser()->getProfile()->getFirstName() . ' ' . $this->getUser()->getProfile()->getLastName(); // practitioner name
-         $reqData['hiuId'] = $this->getUser()->getProfile()->getHospital()->getHIUCode();
-         $request = $abha->requestInt($reqData);
-         if ($request) {
-             // return $this->redirectToRoute('consent', ['id' => $reqData['health_id'].'abdm']);
-             return $this->redirectToRoute('consent', ['id' => ($reqData['id'])]);
-         } else {
-             return $this->render('abha/consent_form.html.twig', [
-                 'post_form_url' => 'request_init',
-                 'patient_find_url' => 'patient_find'
-             ]);
-         }
-     }
-     /**
-      * M3 REQUEST FOR DATA FROM HIP
-      */
-     #[Route(path: '/data-request/{id}', name: 'data_request', methods: ['GET', 'POST'])]
-     #[ParamDecryptor(["id"])]
-     public function dataRequest(Request $request, Abha $abha): Response
-     {
-         /* if ($this->getUser()->getHospital()->getId() == $case->getHospital()->getId()) {
-         } else {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         } */
-         $id = $request->attributes->get('id');
-         $response = $abha->getDataRequest($id);
-         // dump($id);
-         // dd($response);
-         $id = $this->encryptor->encrypt($request->attributes->get('id'));
-         return $this->redirectToRoute('consent', ['id' => $id]);
-     }
-     /**
-      * M3 VIEW CONSENT DATA
-      */
-     #[Route(path: '/view-data/{id}', name: 'view_data', methods: ['GET', 'POST'])]
-     #[ParamDecryptor(["id"])]
-     public function viewRequest(Request $request, Abha $abha): Response
-     {
-         /* if ($this->getUser()->getHospital()->getId() == $case->getHospital()->getId()) {
-         } else {
-             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
-         } */
-         
-         $id = $request->attributes->get('id');
-         // dd($id);
-         $response = $abha->getViewData($id);
-             // dd($response[1]);
-             //  dd($response[1]['htmlFinalArr']);
-             //  dd(base64_encode($response[1]['pdf']));
-         $id = $this->encryptor->encrypt($request->attributes->get('id'));
-         if ($response[1]) {
-             $uri = $this->generateUrl('consent', ['id' => $id]);
-             // dd($uri);
-             return $this->render('abha/view_consent.html.twig', [
-                 'data' => $response[1],
-                 'back_url' => $uri,
-          'htmlFinalArr' => $response[1]['htmlFinalArr'] ?? [],
-         'pdfBase64' => base64_encode($response[1]['pdf'] ?? ''),
-             ]);
-         } else {
-             return $this->redirectToRoute('consent', ['id' => $id]);
-         }
-     }
-     /**
-      * M3 PATIENT FIND IN CONSENT REQUEST
-      */
-     #[Route('/patient-find', name: 'patient_find', methods: ['GET', 'POST'])]
-     public function patientFind(Request $request, Abha $abha): Response
-     {
-         $healthId = $request->request->get('health_id');
-         if (!$healthId && strlen($healthId) <= 6) {
-             return $this->json('invalid');
-         }
-         $name = $abha->patientFind($healthId);
-         return $this->json($name);
-     }
-     public function getAccessToken()
-     {
-         $client = HttpClient::create();
-         $response = $client->request('POST', 'https://apis.abdm.gov.in/hiecm/gateway/v0.5/sessions', [
-             'headers' => [
-                 'Content-Type' => 'application/json'
-             ],
-             'json' => [
-                 'clientId' => $_ENV['CLIENT_ID'],
-                 'clientSecret' => $_ENV['CLIENT_SECRET']
-             ]
-         ]);
-         $decodedPayload = $response->toArray();
-         return 'Bearer ' . $decodedPayload['accessToken'];
-     }
-     function GUID()
-     {
-         if (function_exists('com_create_guid') === true) {
-             return trim(com_create_guid(), '{}');
-         }
-         return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
-     }
- }
-