src/Controller/OrdonnanceController.php line 194

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Analyse;
  4. use App\Entity\Ordonnance;
  5. use App\Form\AnalyseType;
  6. use App\Form\OrdonnanceType;
  7. use App\Repository\AnalyseRepository;
  8. use App\Repository\AppareilRepository;
  9. use App\Repository\EchantillonRepository;
  10. use App\Repository\ExamenRepository;
  11. use App\Repository\MethodeRepository;
  12. use App\Repository\OrdonnanceRepository;
  13. use App\Repository\PatientRepository;
  14. use App\Repository\PayementRepository;
  15. use App\Repository\ProformaRepository;
  16. use App\Repository\SousCategorieExamenRepository;
  17. use App\Service\Utils;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. #[Route('/admin/ordonnance')]
  23. class OrdonnanceController extends AbstractController
  24. {
  25.     private $ordonnanceRepository;
  26.     private $analyseRepository;
  27.     private $patientRepository;
  28.     private $examenRepository;
  29.     private $echantillonRepository;
  30.     private $methodeRepository;
  31.     private $sousCategorieExamenRepository;
  32.     private $appareilRepository;
  33.     private $utils;
  34.     private $ordonnancesAll;
  35.     private $analysesAll;
  36.     public function __construct(
  37.         OrdonnanceRepository $ordonnanceRepository,
  38.         AnalyseRepository $analyseRepository,
  39.         PatientRepository $patientRepository,
  40.         SousCategorieExamenRepository $sousCategorieExamenRepository,
  41.         ExamenRepository $examenRepository,
  42.         EchantillonRepository $echantillonRepository,
  43.         MethodeRepository $methodeRepository,
  44.         AppareilRepository $appareilRepository,
  45.         Utils $utils
  46.     ) {
  47.         $this->ordonnanceRepository $ordonnanceRepository;
  48.         $this->analyseRepository $analyseRepository;
  49.         $this->patientRepository $patientRepository;
  50.         $this->examenRepository $examenRepository;
  51.         $this->sousCategorieExamenRepository $sousCategorieExamenRepository;
  52.         $this->echantillonRepository $echantillonRepository;
  53.         $this->methodeRepository $methodeRepository;
  54.         $this->appareilRepository $appareilRepository;
  55.         $this->utils $utils;
  56.         $this->ordonnancesAll $this->ordonnanceRepository->findAll();
  57.         $this->analysesAll $this->analyseRepository->findAll();
  58.     }
  59.     #[Route('/'name'bioclin_ordonnance_index'methods: ['GET''POST'])]
  60.     public function index(Request $request): Response
  61.     {
  62.         // FormType du ordonnance
  63.         $ordonnance = new Ordonnance();
  64.         $form $this->createForm(OrdonnanceType::class, $ordonnance);
  65.         $form->handleRequest($request);
  66.         // FormType de ordonnance
  67.         $analyse = new Analyse();
  68.         $form2 $this->createForm(AnalyseType::class, $analyse);
  69.         $form2->handleRequest($request);
  70.         // Vérifie si l'id du ordonnance est définit sinon prend le dernier type
  71.         $patient_id $request->get('patient_id');
  72.         if ($request->get('ord_id')) {
  73.             $ordonnanceCurrent $this->ordonnanceRepository->findOneBy(['patient' => $patient_id'id' => $request->get('ord_id')]);
  74.         } else {
  75.             $ordonnanceCurrent $this->ordonnanceRepository->findOneBy(['patient' => $patient_id]);
  76.         }
  77.         $patient $this->patientRepository->findOneBy(['id' => $patient_id]);
  78.         // Soumettre analyse
  79.         if ($form2->isSubmitted() && $form2->isValid()) {
  80.             $analyse->setOrdonnance($ordonnanceCurrent);
  81.             $analyse->setCode($this->utils->code($this->ordonnancesAll"AN"));
  82.             $ordonnanceCurrent->setMontant($ordonnanceCurrent->getMontant() + $analyse->getExamen()->getPrix());
  83.             $analyse->setUtilisateur($this->getUser());
  84.             $this->analyseRepository->add($analysetrue);
  85.             $this->ordonnanceRepository->add($ordonnanceCurrenttrue);
  86.             return $this->redirectToRoute('bioclin_ordonnance_index', ['patient_id' => $analyse->getOrdonnance()->getPatient()->getId(), 'ord_id' => $analyse->getOrdonnance()->getId()], Response::HTTP_SEE_OTHER);
  87.         }
  88.         // Soumettre ordonnance
  89.         if ($form->isSubmitted() && $form->isValid()) {
  90.             $ordonnance->setPatient($patient);
  91.             $ordonnance->setUtilisateur($this->getUser());
  92.             $this->ordonnanceRepository->add($ordonnancetrue);
  93.             return $this->redirectToRoute('bioclin_ordonnance_index', ['patient_id' => $ordonnance->getPatient()->getId(), 'ord_id' => $ordonnance->getId()], Response::HTTP_SEE_OTHER);
  94.         }
  95.         return $this->renderForm('ordonnance/index.html.twig', [
  96.             'ordonnance' => $ordonnanceCurrent,
  97.             'ordonnancesAll' => $this->ordonnanceRepository->findBy(['patient' => $patient_id]),
  98.             'patient' => $patient,
  99.             'ordonnances' => !empty($ordonnanceCurrent) ? $this->ordonnanceRepository->findByNotCurrentAll($ordonnanceCurrent->getId(), $patient_id) : null,
  100.             'ordonnancesP' => !empty($ordonnanceCurrent) ? $this->ordonnanceRepository->findByPayementStatus("Payé"$patient_id)["total"] : 0,
  101.             'ordonnancesA' => !empty($ordonnanceCurrent) ? $this->ordonnanceRepository->findByPayementStatus("Avancé"$patient_id)["total"] : 0,
  102.             'ordonnancesI' => !empty($ordonnanceCurrent) ? $this->ordonnanceRepository->findBy(['statut' => null'patient' => $patient_id]) : null,
  103.             'form' => $form,
  104.             'form2' => $form2,
  105.         ]);
  106.     }
  107.     #[Route('/new'name'bioclin_ordonnance_new'methods: ['GET''POST'])]
  108.     public function new(Request $request): Response
  109.     {
  110.         $ordonnance = new Ordonnance();
  111.         $form $this->createForm(OrdonnanceType::class, $ordonnance);
  112.         $form->handleRequest($request);
  113.         if ($form->isSubmitted() && $form->isValid()) {
  114.             $arrayExamen = [];
  115.             $arrayOrdAll = [];
  116.             for ($m 0$m sizeof($request->get('examen')); $m++) {
  117.                 $examen $this->examenRepository->findOneBy(['id' => $request->get('examen')[$m]]);
  118.                 if ($examen) {
  119.                     array_push($arrayExamen$examen);
  120.                     array_push($arrayOrdAll$examen->getSousDomaine()->getDomaine()->getNom());
  121.                 }
  122.             }
  123.             usort($arrayExamen, function ($a$b) {
  124.                 return strcmp($a->getSousDomaine()->getDomaine()->getId(), $b->getSousDomaine()->getDomaine()->getId());
  125.             });
  126.             $arrayOrdAll array_unique($arrayOrdAll);
  127.             for ($cp 0$cp sizeof($arrayOrdAll); $cp++) {
  128.                 $ordo = new Ordonnance();
  129.                 // Soumettre le bulletin d'examen
  130.                 $ordo->setCode($this->utils->code($this->ordonnancesAll"BU"));
  131.                 $ordo->setDateEcheance($ordonnance->getDateEcheance());
  132.                 $ordo->setPourcent($ordonnance->getPourcent());
  133.                 $ordo->setPreleveur($ordonnance->getPreleveur());
  134.                 $ordo->setDatePrelevement($ordonnance->getDatePrelevement());
  135.                 $ordo->setPrescripteur($ordonnance->getPrescripteur());
  136.                 $ordo->setObservations($ordonnance->getObservations());
  137.                 $ordo->setType($arrayOrdAll[$cp]);
  138.                 $ordo->setPatient($this->patientRepository->findOneBy(['id' => $request->get('patient_id')]));
  139.                 $this->ordonnanceRepository->add($ordotrue);
  140.                 for ($i 0$i sizeof($arrayExamen); $i++) {
  141.                     $examen $arrayExamen[$i];
  142.                     $analyse = new Analyse();
  143.                     if ($examen && $examen->getSousDomaine()->getDomaine()->getNom() == $ordo->getType()) {
  144.                         $analyse->setExamen($examen);
  145.                         $analyse->setEchantillon($this->echantillonRepository->findOneBy(['id' => $request->get('echantillon')[$i]]));
  146.                         if ($request->get('methode')[$i]) $analyse->setMethode($this->methodeRepository->findOneBy(['id' => $request->get('methode')[$i]]));
  147.                         if ($request->get('appareil')[$i]) $analyse->setAppareil($this->appareilRepository->findOneBy(['id' => $request->get('appareil')[$i]]));
  148.                         $analyse->setRapport($request->get('rapport')[$i]);
  149.                         $analyse->setUtilisateur($this->getUser());
  150.                         $analyse->setOrdonnance($ordo);
  151.                         $this->analyseRepository->add($analysetrue);
  152.                         $analyse->setCode($this->utils->code2($analyse->getId(), "AN"));
  153.                         $this->analyseRepository->add($analysetrue);
  154.                         $ordo->setMontant($examen->getPrix() + $ordo->getMontant());
  155.                     }
  156.                 }
  157.             }
  158.             return $this->redirectToRoute('bioclin_ordonnance_index', ['ord_id' => $ordo->getId(), 'patient_id' => $ordo->getPatient()->getId()], Response::HTTP_SEE_OTHER);
  159.         }
  160.         return $this->renderForm('ordonnance/new.html.twig', [
  161.             'form' => $form,
  162.             'code' => $this->utils->code($this->ordonnancesAll"BU"),
  163.             'examens' => $this->examenRepository->findBy([], ["nom" => "ASC"]),
  164.             'methodes' => $this->methodeRepository->findBy([], ["intitule" => "ASC"]),
  165.             'echantillons' => $this->echantillonRepository->findBy([], ["intitule" => "ASC"]),
  166.             'appareils' => $this->appareilRepository->findBy([], ["intitule" => "ASC"]),
  167.         ]);
  168.     }
  169.     #[Route('/{id}/edit'name'bioclin_ordonnance_edit'methods: ['GET''POST'])]
  170.     public function edit(Request $requestOrdonnance $ordonnance): Response
  171.     {
  172.         $form $this->createForm(OrdonnanceType::class, $ordonnance);
  173.         $form->handleRequest($request);
  174.         if ($form->isSubmitted() && $form->isValid()) {
  175.             $this->ordonnanceRepository->add($ordonnancetrue);
  176.             return $this->redirectToRoute('bioclin_ordonnance_index', ['ord_id' => $ordonnance->getId(), 'patient_id' => $ordonnance->getPatient()->getId()], Response::HTTP_SEE_OTHER);
  177.         }
  178.         return $this->renderForm('modal/edit_form.html.twig', [
  179.             'entity' => $ordonnance,
  180.             'form' => $form,
  181.             'title' => 'l\'ordonnance',
  182.             'path_url' => 'bioclin_ordonnance_edit'
  183.         ]);
  184.     }
  185.     #[Route('/{id}'name'bioclin_ordonnance_delete'methods: ['POST'])]
  186.     public function delete(
  187.         Request $request,
  188.         Ordonnance $ordonnance,
  189.         AnalyseRepository $analyseRepository,
  190.         ProformaRepository $proformaRepository,
  191.         PayementRepository $payementRepository
  192.     ): Response {
  193.         if ($this->isCsrfTokenValid('delete' $ordonnance->getId(), $request->request->get('_token'))) {
  194.             foreach ($ordonnance->getAnalyses() as $value) {
  195.                 $analyseRepository->remove($valuetrue);
  196.             }
  197.             foreach ($ordonnance->getPayements() as $value) {
  198.                 $payementRepository->remove($valuetrue);
  199.             }
  200.             foreach ($ordonnance->getProformas() as $value) {
  201.                 $proformaRepository->remove($valuetrue);
  202.             }
  203.             $this->ordonnanceRepository->remove($ordonnancetrue);
  204.         }
  205.         return $this->redirectToRoute('bioclin_ordonnance_index', [], Response::HTTP_SEE_OTHER);
  206.     }
  207. }