src/Controller/WardBedController.php line 186

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\{CaseHistoryCasesWardMedicineSchedule};
  4. use App\Form\WardBedType;
  5. use App\Repository\{CaseRepositoryDeathCauseRepositoryWardBedRepositoryWardMedicineScheduleRepository};
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\{RequestResponse};
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Nzo\UrlEncryptorBundle\Annotations\ParamDecryptor;
  12. use Nzo\UrlEncryptorBundle\Encryptor\Encryptor;
  13. #[Route(path'/ward-beds'), Security("is_granted('ROLE_DOC') or is_granted('ROLE_DENT')")]
  14. class WardBedController extends AbstractController
  15. {
  16.     private $encryptor;
  17.     public function __construct(Encryptor $encryptor)
  18.     {
  19.         $this->encryptor $encryptor;
  20.     }
  21.     #[Route(path'/manage/{id}'name'ward_bed_manage'methods: ['GET''POST'])]
  22.     #[ParamDecryptor(["id"])]
  23.     public function manage(Request $requestCases $caseCaseRepository $caseRepoWardBedRepository $wardBedRepoEntityManagerInterface $entityManagerDeathCauseRepository $deathCauseRepo): Response
  24.     {
  25.         if ($case->getIsWard() !== true && $case->getHospital()->getId() != $this->getUser()->getprofile()->getHospital()->getId()) {
  26.             return $this->render('bundles/TwigBundle/Exception/errorAccess.html.twig');
  27.         }
  28.         $wardBed $wardBedRepo->findOneBy(['case' => $case'status' => 'Admitted']);
  29.         $form $this->createForm(WardBedType::class, $wardBed, ['allow_extra_fields' => true]);
  30.         $form->handleRequest($request);
  31.         if ($case->getIsWard() && $request->isMethod('POST')) {
  32.             $getTotalBed $caseRepo->getTotalBed($this->getUser()->getProfile()->getHospital()->getId(), $request->request->get('ward_bed')['ward']);
  33.             if (!empty($getTotalBed)) {
  34.                 $getOccupiedBedBedData $caseRepo->getOccupiedBed($this->getUser()->getProfile()->getHospital()->getId(), $request->request->get('ward_bed')['ward']);
  35.                 if (!empty($getOccupiedBedBedData)) {
  36.                     $totalMaleBed $getTotalBed[0]['total_male_bed'];
  37.                     $totalFemaleBed $getTotalBed[0]['total_female_bed']; //1
  38.                     $availableMaleBad $totalMaleBed - (int) $getOccupiedBedBedData[0]['male_occupied'];
  39.                     $availableFemaleBad $totalFemaleBed - (int) $getOccupiedBedBedData[0]['female_occupied']; //0
  40.                     if ($case->getPatient()->getGender() == "Male" && (empty($totalMaleBed) || empty($availableMaleBad))) {
  41.                         $this->addFlash(
  42.                             'danger',
  43.                             'Male bed is not available.'
  44.                         );
  45.                         return $this->renderForm('ward_bed/manage.html.twig', [
  46.                             'case' => $case,
  47.                             'form' => $form,
  48.                             'ward_bed' => $wardBed,
  49.                             'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
  50.                             'case_ward_medicines' => $caseRepo->getCaseWardMedicines($this->encryptor->encrypt($case->getId()))
  51.                         ]);
  52.                     }
  53.                     if ($case->getPatient()->getGender() == "Female" && (empty($totalFemaleBed) || empty($availableFemaleBad))) {
  54.                         $this->addFlash(
  55.                             'danger',
  56.                             'Female bed is not available.'
  57.                         );
  58.                         return $this->renderForm('ward_bed/manage.html.twig', [
  59.                             'case' => $case,
  60.                             'form' => $form,
  61.                             'ward_bed' => $wardBed,
  62.                             'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
  63.                             'case_ward_medicines' => $caseRepo->getCaseWardMedicines($this->encryptor->encrypt($case->getId()))
  64.                         ]);
  65.                     }
  66.                 }
  67.             } else {
  68.                 $this->addFlash(
  69.                     'danger',
  70.                     'Bed not available.'
  71.                 );
  72.                 return $this->renderForm('ward_bed/manage.html.twig', [
  73.                     'case' => $case,
  74.                     'form' => $form,
  75.                     'ward_bed' => $wardBed,
  76.                     'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
  77.                     'case_ward_medicines' => $caseRepo->getCaseWardMedicines($this->encryptor->encrypt($case->getId()))
  78.                 ]);
  79.             }
  80.         }
  81.         if ($form->isSubmitted() && $form->isValid() && $case->getHospital()->getId() == $this->getUser()->getprofile()->getHospital()->getId()) {
  82.             $formData $request->request->get('ward_bed');
  83.             if (isset($formData['ward_staff_notes'])) {
  84.                 $case->setWardStaffNotes($formData['ward_staff_notes']);
  85.                 $entityManager->persist($case);
  86.             }
  87.             if ($wardBed->getStatus() == 'Discharged' || $wardBed->getStatus() == 'Death of Patient') {
  88.                 $case->setIsWard(false);
  89.                 if ($wardBed->getStatus() == 'Death of Patient') {
  90.                     $case
  91.                         ->setClosureReason('Death of patient')
  92.                         ->setIsClosed(true);
  93.                     $deathCause $deathCauseRepo->find($formData['death_cause']);
  94.                     $patient $case->getPatient();
  95.                     $patient
  96.                         ->setIsAlive(false)
  97.                         ->setExpiredAt(new \DateTime())
  98.                         ->setDeathCause($deathCause);
  99.                     $entityManager->persist($patient);
  100.                 }
  101.                 $entityManager->persist($case);
  102.             }
  103.             $entityManager->flush();
  104.             $wardMedicines $formData['ward_medicines'] ?? [];
  105.             if (isset($wardMedicines) && count($wardMedicines) == 6) {
  106.                 $wardMedicineData = [];
  107.                 foreach ($wardMedicines['id'] as $medicineId) {
  108.                     $wardMedicineData[] = [
  109.                         'case_id' => $case->getId(),
  110.                         'medicine_id' => $medicineId,
  111.                         'medicine_type' => $wardMedicines['type'][$medicineId],
  112.                         'dose' => $wardMedicines['dose'][$medicineId],
  113.                         'frequency' => $wardMedicines['frequency'][$medicineId],
  114.                         'num_days' => $wardMedicines['num_days'][$medicineId],
  115.                         'notes' => $wardMedicines['staff_notes'][$medicineId],
  116.                         'is_emergency' => 0,
  117.                         'has_stock' => 1,
  118.                         'created_by' => $this->getUser()->getId()
  119.                     ];
  120.                 }
  121.                 $caseRepo->saveCaseWardMedicines($wardMedicineData);
  122.                 $wardMedsForHistory $caseRepo->getMedicineNames($wardMedicines['id']);
  123.                 $history = new CaseHistory();
  124.                 $history
  125.                     ->setCase($case)
  126.                     ->setDoctor($case->getDoctor())
  127.                     ->setWardMedicines(implode(', '$wardMedsForHistory));
  128.                 $entityManager->persist($history);
  129.                 $entityManager->flush();
  130.             }
  131.             $this->addFlash(
  132.                 'success',
  133.                 'Ward details updated successfully!'
  134.             );
  135.             return $this->redirectToRoute('case_index');
  136.         }
  137.         return $this->renderForm('ward_bed/manage.html.twig', [
  138.             'case' => $case,
  139.             'form' => $form,
  140.             'ward_bed' => $wardBed,
  141.             'essential_drugs' => $caseRepo->getEssentialDrugs($case->getHospital()->getType()),
  142.             'case_ward_medicines' => $caseRepo->getCaseWardMedicines($this->encryptor->encrypt($case->getId()))
  143.         ]);
  144.     }
  145.     #[Route(path'/missed-schedules'name'ward_bed_missed_schedules'methods: ['GET'])]
  146.     public function missedSchedules(WardMedicineScheduleRepository $wardMedicineScheduleRepo): Response
  147.     {
  148.         $schedules $wardMedicineScheduleRepo->getMissedSchedules($this->getUser()->getId());
  149.         return $this->render('ward_bed/missed_schedules.html.twig', [
  150.             'schedules' => $schedules
  151.         ]);
  152.     }
  153.     #[Route(path'/mark-schedule/{id}'name'ward_bed_mark_schedule'methods: ['GET'])]
  154.     #[ParamDecryptor(["id"])]
  155.     public function markSchedule(WardMedicineSchedule $scheduleWardMedicineScheduleRepository $wardMedicineScheduleRepo): Response
  156.     {
  157.         if ($wardMedicineScheduleRepo->markAsCompleted([$this->encryptor->encrypt($schedule->getId())])) {
  158.             $this->addFlash(
  159.                 'success',
  160.                 'Schedule successfully marked as "completed"!'
  161.             );
  162.         } else {
  163.             $this->addFlash(
  164.                 'danger',
  165.                 'Schedule cound not be marked as "completed"!'
  166.             );
  167.         }
  168.         return $this->redirectToRoute('ward_bed_missed_schedules');
  169.     }
  170. }