src/Controller/WebController.php line 147

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Category;
  4. use App\Entity\Doctor;
  5. use App\Entity\Exam;
  6. use App\Entity\ExamParam;
  7. use App\Entity\ExamParamVariant;
  8. use App\Entity\ExamRequest;
  9. use App\Entity\ExamRequestItem;
  10. use App\Entity\ExamRequestItemParam;
  11. use App\Entity\ExamType;
  12. use App\Entity\InsuranceCompany;
  13. use App\Entity\Order;
  14. use App\Entity\Patient;
  15. use App\Entity\PaymentAdvance;
  16. use App\Entity\Product;
  17. use App\Entity\ProductCalendarExpiration;
  18. use App\Entity\ProductOutRequest;
  19. use App\Entity\ProductStore;
  20. use App\Entity\Provider;
  21. use App\Entity\Role;
  22. use App\Entity\Save;
  23. use App\Entity\Statut;
  24. use App\Entity\Store;
  25. use App\Entity\System;
  26. use App\Entity\User;
  27. use App\Entity\UserType;
  28. use App\Repository\ProductOutRepository;
  29. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Symfony\Component\DependencyInjection\ContainerInterface;
  33. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  34. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  35. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  36. use App\Twig\AppExtension;
  37. use Doctrine\ORM\EntityManagerInterface;
  38. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  39. use function Symfony\Component\String\b;
  40. class WebController extends AbstractController implements LogginInterfaceController
  41. {
  42.     private $mycontainer;
  43.     private $token;
  44.     private function parseDate(string $date): ?\DateTime
  45.     {
  46.         $date str_replace('.''/'$date);
  47.         return \DateTime::createFromFormat('d/m/Y'$date) ?: null;
  48.     }
  49.     private $locale;
  50.     private $tokenUser;
  51.     private $session;
  52.     private $extension;
  53.     private $currentUser;
  54.     private $currentUserRoles;
  55.     private $em;
  56.     /**
  57.      * WebController constructor.
  58.      * @param ContainerInterface $c
  59.      * @param SessionInterface $s
  60.      * @param EntityManagerInterface $em
  61.      */
  62.     public function __construct(ContainerInterface $c,SessionInterface $s,EntityManagerInterface $em)
  63.     {
  64.         $this->currentUser null;
  65.         $this->currentUserRoles = [];
  66.         $this->extension = new AppExtension($c);
  67.         $this->session $s;
  68.         $this->mycontainer $c;
  69.         $this->locale="fr";
  70.         $this->em=$em;
  71.         $this->mycontainer->get('translator')->setLocale($this->locale);
  72.         $lang $this->mycontainer->get("request_stack")->getCurrentRequest()->cookies->get("lang");
  73.         if(in_array($lang,["fr","en"])) {
  74.             $this->mycontainer->get('translator')->setLocale($lang);
  75.             $this->locale $lang;
  76.         }
  77.         $token $this->mycontainer->get("request_stack")->getCurrentRequest()->cookies->get("token");
  78.         if($token === null || $token === "null") {
  79.             $this->tokenUser null;
  80.         }
  81.         else{
  82.             $this->connected true;
  83.             $this->token =$token;
  84.             $tokenPayload=null;
  85.             if($this->token !== null)
  86.             {
  87.                 $tokenParts explode("."$this->token);
  88.                 //$tokenHeader = base64_decode($tokenParts[0]);
  89.                 $tokenPayload base64_decode($tokenParts[1]);
  90.                 $this->tokenUser=  json_decode($tokenPayload);
  91.             }
  92.         }
  93.         $tokenUser $this->mycontainer->get('security.token_storage')->getToken();
  94.         if($tokenUser === null){
  95.             $this->currentUser "anon.";
  96.         }
  97.         else{
  98.             $this->currentUser $tokenUser->getUser();
  99.         }
  100.         $tab=[];
  101.         if($this->currentUser !== "anon.")
  102.         {
  103.             if(in_array($this->currentUser->getRoles()[0],['SADMIN','ADMIN']))
  104.             {
  105.                 $roles $this->em->getRepository(Role::class)->findBy(array("isActive"=>true));
  106.                 foreach ($roles as $r)
  107.                 {
  108.                     $tab[]=$r->getCode();
  109.                 }
  110.             }
  111.             else
  112.             {
  113.                 $roles1=$this->currentUser->getUserRoles();
  114.                 foreach ($roles1 as $r)
  115.                 {
  116.                     if(!in_array($r->getCode(),$tab)) $tab[]=$r->getCode();
  117.                 }
  118.             }
  119.         }
  120.         $this->currentUserRoles $tab;
  121.         $res $this->mycontainer->get("user_manager")->getSystemInfo();
  122.         $this->mycontainer->get('session')->set('AppData',$res["data"]);
  123.         $this->mycontainer->get('session')->set('roles',$tab);
  124.     }
  125.     private function testRole($role): bool
  126.     {
  127.         $test false;
  128.         $roles1=$this->currentUserRoles;
  129.         foreach ($roles1 as $r)
  130.         {
  131.             if($r == $role$test=true;
  132.         }
  133.         if(gettype($this->currentUser)==="object"){
  134.             if(in_array($this->currentUser->getRoles()[0],["SADMIN","ADMIN"]))$test=true;
  135.         }
  136.         return $test;
  137.     }
  138.     private  function ageCalculator(\DateTime $born){
  139.         //set current date
  140.         $now = new \DateTime;
  141.         //get differ between born date and current date
  142.         $diff $now->diff($born);
  143.         $total_days $diff->days;
  144.         $total_week = ($diff->days 7);
  145.         /*if($diff->days % 7 > 0){
  146.             $total_week = $total_week +1;
  147.         }*/
  148.         $total_months = ($diff->12) + $diff->m;
  149.         $total_years $diff->y;
  150.         return ['year'=>$total_years,'month'=>$total_months,'week'=>$total_week,'day'=>$total_days];
  151.     }
  152.     public function home(Request $request)
  153.     {
  154.         if($this->currentUser !== 'anon.') return $this->redirectToRoute('web_app_dashboard');
  155.         $res $this->mycontainer->get("user_manager")->getSystemInfo();
  156.         return $this->render('login.html.twig',["system"=>$res["data"]]);
  157.     }
  158.     public function dashboard(Request $request)
  159.     {
  160.         if($this->currentUser === 'anon.'){
  161.             return $this->redirectToRoute('web_logout');
  162.         }
  163.         $save $this->em->getRepository(Save::class)->findBy(array("isActive"=>true),array("id"=>"DESC"),1,0);
  164.         $date=$this->mycontainer->get('translator')->trans("no_save");
  165.         if(count($save)>0)
  166.         {
  167.             $date $save[0]->getDate()->format("d/m/Y h:i:s");
  168.         }
  169.         $simple=0;
  170.         $examRequestTotal $this->em->getRepository(ExamRequest::class)->totalRequestNb();
  171.         $examRequestInProgress $this->em->getRepository(ExamRequest::class)->totalRequestInProgressNb();
  172.         $ProductOutRequest $this->em->getRepository(ProductOutRequest::class)->totalNb();
  173.         $ProductStockExceed $this->em->getRepository(Product::class)->totalProductStockExceed();
  174.         $response $this->render('dashboard.html.twig',
  175.             ["dossiers"=>$simple,
  176.                 "exam_total"=>$examRequestTotal[0]['nb'],
  177.                 "exam_in_progress"=>$examRequestInProgress[0]['nb'],
  178.                 "product_out_request"=>$ProductOutRequest[0]['nb'],
  179.                 "product_stock_exceed"=>$ProductStockExceed[0]['nb']]);
  180.         return $response;
  181.     }
  182.     public function organigramme(Request $request)
  183.     {
  184.         if($this->testRole('M_ORG')==false) return $this->redirectToRoute('web_app_dashboard');
  185.         $services $this->em->getRepository(Service::class)->findBy(array("isActive"=>true,"service"=>null),array("id"=>"ASC"));
  186.         return $this->render('organigramme.html.twig',["services"=>$services]);
  187.     }
  188.     public function systeme(Request $request)
  189.     {
  190.         if($this->testRole('M_SYS')==false) return $this->redirectToRoute('web_app_dashboard');
  191.         $res $this->mycontainer->get("user_manager")->getSystemInfo();
  192.         return $this->render('systeme.html.twig',["system"=>$res["data"]]);
  193.     }
  194.     public function utilisateur(Request $request)
  195.     {
  196.         if($this->testRole('M_USER')==false) return $this->redirectToRoute('web_app_dashboard');
  197.         $userTypes $this->em->getRepository(UserType::class)->findExceptSuperAdmin();
  198.         $users $this->em->getRepository(User::class)->loadAllUsers(10000,0);
  199.         $roles $this->em->getRepository(Role::class)->findBy(array("isActive"=>true),array("id"=>"ASC"));
  200.         foreach ($roles as $r){
  201.             $r->setTranslatableLocale($this->locale);
  202.             $this->em->refresh($r);
  203.         }
  204.         foreach ($userTypes as $r){
  205.             $r->setTranslatableLocale($this->locale);
  206.             $this->em->refresh($r);
  207.         }
  208.         return $this->render('utilisateur.html.twig',["user_types"=>$userTypes,"users"=>$users,'roles'=>$roles]);
  209.     }
  210.     public function sauvegarde(Request $request)
  211.     {
  212.         if($this->testRole('AD_S1')==false) return $this->redirectToRoute('web_app_dashboard');
  213.         $all $this->em->getRepository(Save::class)->findBy(array("isActive"=>true),array("id"=>"DESC"));
  214.         $todaydb $this->em->getRepository(Save::class)->findForTodayDb();
  215.         $todayar $this->em->getRepository(Save::class)->findForTodayArchive();
  216.         $today=[];
  217.         foreach ($todaydb as $t)
  218.         {
  219.             $today[]=$t;
  220.         }
  221.         foreach ($todayar as $t)
  222.         {
  223.             $today[]=$t;
  224.         }
  225.         return $this->render('sauvegarde.html.twig',["all"=>$all,"today"=>$today]);
  226.     }
  227.     public function profile(Request $request)
  228.     {
  229.         // $this->addFlash('notice',$this->mycontainer->get('translator')->trans("eeeeee"));
  230.         return $this->render('profile.html.twig');
  231.     }
  232.     public function support(Request $request)
  233.     {
  234.         $news $this->em->getRepository(News::class)->findBy(array("isActive"=>true,"status"=>true));
  235.         return $this->render('support.html.twig',["faq"=>$news]);
  236.     }
  237.     public function upload(Request $request)
  238.     {
  239.         $file $request->files;
  240.         return new Response();
  241.     }
  242.     public function readFile(Request $request,$name)
  243.     {
  244.         if($this->currentUser === 'anon.') return $this->redirectToRoute('api_home');
  245.         $fu $this->mycontainer->get('upload_service');
  246.         $res $fu->getFileBinary($name);
  247.         if($res['error']==true) return new Response('file not found '.$name,401);
  248.         if(!in_array($name,['man.png''woman.png'])){
  249.             $original $this->mycontainer->get('upload_service')->getFile($name);
  250.             if($original !== null){
  251.                 $resp = new BinaryFileResponse($res["data"]);
  252.                 $resp->setContentDisposition(
  253.                     ResponseHeaderBag::DISPOSITION_ATTACHMENT,''
  254.                 );
  255.                 return $resp;
  256.             }
  257.         }
  258.         return new BinaryFileResponse($res["data"]);
  259.     }
  260.     public function readFileOld(Request $request,$name)
  261.     {
  262.         if($this->currentUser === 'anon.') return $this->redirectToRoute('api_home');
  263.         $fu $this->mycontainer->get('upload_service');
  264.         $res $fu->getFileBinary($name);
  265.         if($res['error']==true) return new Response('file not found '.$res['data'],401);
  266.         if(!in_array($name,['man.png''woman.png'])){
  267.             $original $this->mycontainer->get('user_manager')->getFile(['name'=>$name]);
  268.             if($original !== null && !in_array(explode('/',$original['type'])[0],['image','pdf'])){
  269.                 $resp = new BinaryFileResponse($res["data"]);
  270.                 $resp->setContentDisposition(
  271.                     ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  272.                     $original['nom']
  273.                 );
  274.                 return $resp;
  275.             }
  276.         }
  277.         // return new BinaryFileResponse($res["data"]);
  278.     }
  279.     public function showNotif(Request $request,$id)
  280.     {
  281.         $status $this->em->getRepository(Statut::class)->findOneBy(array('id' =>$id'user' =>$this->currentUser,'isActive'=>true));
  282.         if($status === null) return $this->redirectToRoute("web_app_dashboard");
  283.         if($status->getStatut()==0)
  284.         {
  285.             $status->setStatut(1);
  286.             $this->em->persist($status);
  287.             $this->em->flush();
  288.         }
  289.         /*if(in_array($status->getNotification()->getCode(),[30,31,33,35,36,37,38,39])){
  290.             return $this->redirectToRoute("web_my_mail");
  291.         }*/
  292.         switch ($status->getNotification()->getCode())
  293.         {
  294.             case 30:
  295.                 return $this->redirectToRoute("web_app_order");
  296.             case 40:
  297.                 return $this->redirectToRoute("web_app_product_store_request",['slug'=>$status->getNotification()->getProductOutRequest()->getStore()->getSlug()]);
  298.             case 50:
  299.                 return $this->redirectToRoute("web_app_exam_request_result");
  300.             case 60:
  301.                 return $this->redirectToRoute("web_app_product");
  302.             case 70:
  303.                 return $this->redirectToRoute("web_app_exam_item");
  304.             default:
  305.                 return $this->redirectToRoute("web_app_dashboard");
  306.         }
  307.     }
  308.     public function allUserExecptAdmin(Request $request)
  309.     {
  310.         //$data = $this->postData;
  311.         $res $this->container->get("user_manager")->allUserExecptAdmin([]);
  312.         if($res["statut"]==false)
  313.         {
  314.             $this->response->setStatut(401);
  315.             $this->response->setContent($res);
  316.             return $this->response->getResponse();
  317.         }
  318.         $this->response->setStatut(201);
  319.         $this->response->setContent($res);
  320.         return $this->response->getResponse();
  321.     }
  322.     public function readFileUserSignature(Request $request,$name)
  323.     {
  324.         if($this->currentUser === 'anon.') return $this->redirectToRoute('api_home');
  325.         $fu $this->mycontainer->get('upload_service');
  326.         $res $fu->getFileBinaryUserSignature($name);
  327.         if($res['error']==true) return new Response('file not found',404);
  328.         return new BinaryFileResponse($res["data"]);
  329.     }
  330.     /** NEW* **/
  331.     public function examType(Request $request)
  332.     {
  333.         if($this->testRole('M_EXAM_TYPE')==false) return $this->redirectToRoute('web_app_dashboard');
  334.         $data $this->em->getRepository(ExamType::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  335.         foreach ($data as $r){
  336.             $r->setTranslatableLocale($this->locale);
  337.             $this->em->refresh($r);
  338.         }
  339.         return $this->render('exam_type.html.twig',["data_list"=>$data]);
  340.     }
  341.     public function productCategory(Request $request)
  342.     {
  343.         if($this->testRole('M_PRODUCT_CAT')==false) return $this->redirectToRoute('web_app_dashboard');
  344.         $data $this->em->getRepository(Category::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  345.         foreach ($data as $r){
  346.             $r->setTranslatableLocale($this->locale);
  347.             $this->em->refresh($r);
  348.         }
  349.         return $this->render('product_category.html.twig',["data_list"=>$data]);
  350.     }
  351.     public function wareHouse(Request $request)
  352.     {
  353.         if($this->testRole('M_WAREHOUSE')==false) return $this->redirectToRoute('web_app_dashboard');
  354.         $data $this->em->getRepository(Store::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  355.         return $this->render('warehouse.html.twig',["data_list"=>$data]);
  356.     }
  357.     public function product(Request $request)
  358.     {
  359.         if($this->testRole('M_PRODUCT')==false) return $this->redirectToRoute('web_app_dashboard');
  360.         $data $this->em->getRepository(Product::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  361.         $categories $this->em->getRepository(Category::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  362.         $stores $this->em->getRepository(Store::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  363.         $dateFrom = new \DateTime();
  364.         $dateTo = new \DateTime();
  365.         $sys $this->em->getRepository(System::class)->findOneBy([]);
  366.         if($sys !== null){
  367.             $dateTo->add(new \DateInterval('P'.$sys->getNbDayAlertProductExpiration().'D'));
  368.         }
  369.         $pE $this->em->getRepository(ProductCalendarExpiration::class)->findExpiredBeforeNbDay($dateFrom->format("Y-m-d")." 00:00:00",$dateTo->format("Y-m-d")." 23:59:59");
  370.         foreach ($categories as $r){
  371.             $r->setTranslatableLocale($this->locale);
  372.             $this->em->refresh($r);
  373.         }
  374.         foreach ($data as $r){
  375.             $r->setTranslatableLocale($this->locale);
  376.             $this->em->refresh($r);
  377.         }
  378.         return $this->render('product.html.twig',["data_list"=>$data,"data_list2"=>$pE,'categories'=>$categories,'stores'=>$stores,'code'=>$this->mycontainer->get('user_manager')->generateReference('PR')]);
  379.     }
  380.     public function provider(Request $request)
  381.     {
  382.         if($this->testRole('M_SUPPLIER')==false) return $this->redirectToRoute('web_app_dashboard');
  383.         $data $this->em->getRepository(Provider::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  384.         return $this->render('provider.html.twig',["data_list"=>$data]);
  385.     }
  386.     public function patient(Request $request)
  387.     {
  388.         if($this->testRole('M_PAT')==false) return $this->redirectToRoute('web_app_dashboard');
  389.         $data $this->em->getRepository(Patient::class)->findBy(['isActive'=>true],['name'=>'ASC','surname'=>'ASC']);
  390.         return $this->render('patient.html.twig',["data_list"=>$data]);
  391.     }
  392.     public function patientProfile(Request $request$slug)
  393.     {
  394.         $referer $request->headers->get('referer');
  395.         $test1 $this->testRole('M_EXAM_REQUEST');
  396.         $test2 $this->testRole('M_EXAM_RESULT');
  397.         $test3 $this->testRole('M_PAT');
  398.         if($test1==false && $test2==false && $test3==false) return $this->redirectToRoute('web_app_dashboard');
  399.         $patient $this->em->getRepository(Patient::class)->findOneBy(['slug'=>$slug]);
  400.         if($patient === null){
  401.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Patient '.$this->mycontainer->get('translator')->trans("not_found"));
  402.             return $this->redirect($referer ?? '/');
  403.         }
  404.         $oldExams $this->em->getRepository(ExamRequest::class)->findBy(['patient'=>$patient,'isActive'=>true]);
  405.         return $this->render('patient_profile.html.twig',["patient"=>$patient,"exam_requests"=>$oldExams]);
  406.     }
  407.     public function exam(Request $request)
  408.     {
  409.         if($this->testRole('M_EXAM')==false) return $this->redirectToRoute('web_app_dashboard');
  410.         $data $this->em->getRepository(Exam::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  411.         $types $this->em->getRepository(ExamType::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  412.         foreach ($data as $r){
  413.             $r->setTranslatableLocale($this->locale);
  414.             $this->em->refresh($r);
  415.         }
  416.         foreach ($types as $r){
  417.             $r->setTranslatableLocale($this->locale);
  418.             $this->em->refresh($r);
  419.         }
  420.         $this->em->flush();
  421.         return $this->render('exam.html.twig',["data_list"=>$data,'types'=>$types,'code'=>$this->mycontainer->get('user_manager')->generateReference('EX')]);
  422.     }
  423.     public function productOrder(Request $request)
  424.     {
  425.         if($this->testRole('M_ORDER')==false) return $this->redirectToRoute('web_app_dashboard');
  426.         $data $this->em->getRepository(Order::class)->findBy(['isActive'=>true],['dateOrder'=>'DESC']);
  427.         $products $this->em->getRepository(Product::class)->findBy(['isActive'=>true],['title'=>'DESC']);
  428.         $providers $this->em->getRepository(Provider::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  429.         foreach ($products as $r){
  430.             $r->setTranslatableLocale($this->locale);
  431.             $this->em->refresh($r);
  432.         }
  433.         return $this->render('order.html.twig',["data_list"=>$data,'products'=>$products,'providers'=>$providers,'code'=>$this->mycontainer->get('user_manager')->generateReference('OR')]);
  434.     }
  435.     public function displayOrder(Request $request$slug){
  436.         $test2 $this->testRole('M_ORDER');
  437.         $test3 $this->testRole('M_BILL');
  438.         if($test2==false && $test3 ==false) return $this->redirectToRoute('web_app_dashboard');
  439.         $order $this->em->getRepository(Order::class)->findOneBy(['reference'=>$slug]);
  440.         if($order === null){
  441.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Order '.$this->mycontainer->get('translator')->trans("not_found"));
  442.             return $this->redirectToRoute('web_app_order');
  443.         }
  444.         foreach ($order->getOrderItems() as $item){
  445.             $item->getProduct()->setTranslatableLocale($this->locale);
  446.             $this->em->refresh$item->getProduct());
  447.         }
  448.         $system $this->em->getRepository(System::class)->findOneBy([]);
  449.         return $this->render('display_order.html.twig',["order"=>$order,'system'=>$system]);
  450.     }
  451.     public function productRequest(Request $request$slug)
  452.     {
  453.         if($this->testRole('M_BORROW')==false) return $this->redirectToRoute('web_app_dashboard');
  454.         $store $this->em->getRepository(Store::class)->findOneBy(['slug'=>$slug]);
  455.         if($store === null){
  456.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Store '.$this->mycontainer->get('translator')->trans("not_found"));
  457.             return $this->redirectToRoute('web_app_product_request_main');
  458.         }
  459.         $data $this->em->getRepository(ProductOutRequest::class)->findBy(['isActive'=>true,'store'=>$store],['dateRequest'=>'DESC']);
  460.         $products $this->em->getRepository(ProductStore::class)->findByStore($store->getId());
  461.         foreach ($products as $r){
  462.             $r->getProduct()->setTranslatableLocale($this->locale);
  463.             $this->em->refresh($r->getProduct());
  464.         }
  465.         return $this->render('product_request.html.twig',["data_list"=>$data,'products'=>$products,'store'=>$store,'code'=>$this->mycontainer->get('user_manager')->generateReference('PR_R')]);
  466.     }
  467.     public function productStoreList(Request $request,$slug)
  468.     {
  469.         if($this->testRole('M_WAREHOUSE')==false) return $this->redirectToRoute('web_app_dashboard');
  470.         $store $this->em->getRepository(Store::class)->findOneBy(['slug'=>$slug]);
  471.         if($store === null){
  472.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Store '.$this->mycontainer->get('translator')->trans("not_found"));
  473.             return $this->redirectToRoute('web_app_warehouse');
  474.         }
  475.         $stores $this->em->getRepository(Store::class)->findExcept($store->getId());
  476.         $products $this->em->getRepository(ProductStore::class)->findBy(['isActive'=>true,'store'=>$store],['id'=>'ASC']);
  477.         foreach ($products as $p){
  478.             $p->getProduct()->setTranslatableLocale($this->locale);
  479.             $this->em->refresh($p->getProduct());
  480.         }
  481.         return $this->render('warehouse_product.html.twig',["data_list"=>$products,'store'=>$store,'stores'=>$stores]);
  482.     }
  483.     public function productRequestMain(Request $request){
  484.         if($this->testRole('M_BORROW')==false) return $this->redirectToRoute('web_app_dashboard');
  485.         $data $this->em->getRepository(Store::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  486.         return $this->render('product_request_main.html.twig',["data_list"=>$data]);
  487.     }
  488.     public function displayRequest(Request $request$slug){
  489.         if($this->testRole('M_BORROW')==false) return $this->redirectToRoute('web_app_dashboard');
  490.         $order $this->em->getRepository(ProductOutRequest::class)->findOneBy(['slug'=>$slug]);
  491.         if($order === null){
  492.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request '.$this->mycontainer->get('translator')->trans("not_found"));
  493.             return $this->redirectToRoute('web_app_product_request_main');
  494.         }
  495.         foreach ($order->getProductOuts() as $item){
  496.             $item->getProductStore()->getProduct()->setTranslatableLocale($this->locale);
  497.             $this->em->refresh$item->getProductStore()->getProduct());
  498.         }
  499.         $system $this->em->getRepository(System::class)->findOneBy([]);
  500.         return $this->render('display_request.html.twig',["order"=>$order,'system'=>$system]);
  501.     }
  502.     public function examRequests(Request $request)
  503.     {
  504.         if($this->testRole('M_EXAM_REQUEST')==false) return $this->redirectToRoute('web_app_dashboard');
  505.         $referer $request->headers->get('referer');
  506.         $params $request->query->all();
  507.         $tabKeys = ['filter_by'=>'','start_date'=>'','end_date'=>'','patient'=>'','status'=>'','doctor'=>''];
  508.         $test false;
  509.         foreach ($tabKeys as $k=>$val){
  510.             if(array_key_exists($k,$params)){
  511.                 $test=true;
  512.                 $tabKeys[$k]=$params[$k];
  513.             }
  514.         }
  515.         if($test === false){
  516.             $data $this->em->getRepository(ExamRequest::class)->findBy(['isActive'=>true],['dateExam'=>'DESC']);
  517.         }
  518.         else{
  519.             if(strlen($tabKeys['start_date'])>0){
  520.                 try {
  521.                     $start $this->parseDate($tabKeys["start_date"])->format("Y-m-d")." 00:00:00";
  522.                     $tabKeys['start_date']=$start;
  523.                 }
  524.                 catch (\Exception $e)
  525.                 {
  526.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  527.                     return $this->redirect($referer ?? '/');
  528.                 }
  529.             }
  530.             if(strlen($tabKeys['end_date'])>0){
  531.                 try {
  532.                     $start $this->parseDate($tabKeys["end_date"])->format("Y-m-d")." 23:59:59";
  533.                     $tabKeys['end_date']=$start;
  534.                 }
  535.                 catch (\Exception $e)
  536.                 {
  537.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  538.                     return $this->redirect($referer ?? '/');
  539.                 }
  540.             }
  541.             if($tabKeys['status']=="x"){
  542.                 $tabKeys['status']="";
  543.             }
  544.             if($tabKeys['doctor']!==''){
  545.                 $doc $this->em->getRepository(Doctor::class)->findOneBy(['id'=>$tabKeys['doctor']]);
  546.                 if($doc !== null){
  547.                     $tabKeys['doctor'] = $doc->getName();
  548.                 }
  549.             }
  550.             $data $this->em->getRepository(ExamRequest::class)->findFilter($tabKeys);
  551.         }
  552.         $examens $this->em->getRepository(Exam::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  553.         $patients $this->em->getRepository(Patient::class)->findBy(['isActive'=>true],['name'=>'DESC','surname'=>'ASC']);
  554.         $dateInt 2;
  555.         $sys $this->em->getRepository(System::class)->findOneBy([]);
  556.         if($sys !== null){
  557.             $dateInt $sys->getNbDayAlertBill();
  558.         }
  559.         foreach ($examens as $r){
  560.             $r->setTranslatableLocale($this->locale);
  561.             $this->em->refresh($r);
  562.         }
  563.         $this->em->flush();
  564.         $toDayAmount $this->em->getRepository(PaymentAdvance::class)->findToDayUserPayment($this->currentUser->getId());
  565.         return $this->render('exam_request.html.twig',["data_list"=>$data,'examens'=>$examens,
  566.             'date_int'=>$dateInt'patients'=>$patients,
  567.             'code'=>$this->mycontainer->get('user_manager')->generateReference('EX_R'),
  568.             'today_payment'=>$toDayAmount[0]['amount']
  569.         ]);
  570.     }
  571.     public function listExamParam(Request $request$slug){
  572.         if($this->testRole('M_EXAM')==false) return $this->redirectToRoute('web_app_dashboard');
  573.         $order $this->em->getRepository(Exam::class)->findOneBy(['slug'=>$slug]);
  574.         if($order === null){
  575.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Exam '.$this->mycontainer->get('translator')->trans("not_found"));
  576.             return $this->redirectToRoute('web_app_exam');
  577.         }
  578.         $params $this->em->getRepository(ExamParam::class)->findBy(['exam'=>$order,'isActive'=>true]);
  579.         foreach ($params as $item){
  580.             $item->setTranslatableLocale($this->locale);
  581.             $this->em->refresh$item);
  582.         }
  583.         return $this->render('exam_param.html.twig',["exam"=>$order,'data_list'=>$params]);
  584.     }
  585.     public function displayRequestExam(Request $request$slug){
  586.         $test1 $this->testRole('M_EXAM_REQUEST');
  587.         $test2 $this->testRole('M_EXAM_RESULT');
  588.         if($test1 == false && $test2 == false) return $this->redirectToRoute('web_app_dashboard');
  589.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  590.         if($reqExam === null){
  591.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  592.             return $this->redirectToRoute('web_app_exam_request');
  593.         }
  594.         $system $this->em->getRepository(System::class)->findOneBy([]);
  595.         return $this->render('display_request_exam.html.twig',["request"=>$reqExam,'system'=>$system]);
  596.     }
  597.     public function displayRequestExamResult(Request $request$slug){
  598.         $test1 $this->testRole('M_EXAM_REQUEST');
  599.         $test2 $this->testRole('M_EXAM_RESULT');
  600.         if($test1 == false && $test2 == false) return $this->redirectToRoute('web_app_dashboard');
  601.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  602.         if($reqExam === null){
  603.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  604.             return $this->redirectToRoute('web_app_exam_request');
  605.         }
  606.         $tab=[];
  607.         $tabItemId=[];
  608.         foreach ($reqExam->getExamRequestItems() as $item)
  609.         {
  610.             $item->getExam()->setTranslatableLocale($this->locale);
  611.             $this->em->refresh($item->getExam());
  612.             $params $this->em->getRepository(ExamRequestItemParam::class)->findBy(['isActive'=>true,'examRequestItem'=>$item]);
  613.             if(count($params)>0){
  614.                 foreach ($params as $p){
  615.                     $tabItemId[]=$p->getId();
  616.                     $p->getExamParam()->setTranslatableLocale($this->locale);
  617.                     $this->em->refresh$p->getExamParam());
  618.                     $param $p;
  619.                     $allVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param->getExamParam(),'isActive'=>true]);
  620.                     $selectedVariant null;
  621.                     if(count($allVariants)==1){
  622.                         $selectedVariant $allVariants[0];
  623.                         $examParent $param->getExamParam();
  624.                         $examParent->setActiveVariant($selectedVariant);
  625.                         $param->setExamParam($examParent);
  626.                     }
  627.                     else{
  628.                         $i=-1;
  629.                         $patient$reqExam->getPatient();
  630.                         $patient->setAge($this->ageCalculator($patient->getBirthDate()));
  631.                         foreach ($allVariants as $variant){
  632.                             $i++;
  633.                             switch ($variant->getParamFor()){
  634.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN:
  635.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_ALL_BY_AGE:
  636.                                     $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  637.                                     if($selectedVariant!=null){
  638.                                         $selectedVariant $allVariants[$i];
  639.                                         $examParent $param->getExamParam();
  640.                                         $examParent->setActiveVariant($selectedVariant);
  641.                                         $param->setExamParam($examParent);
  642.                                     }
  643.                                     break;
  644.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN:
  645.                                     if($patient->getSex()==Patient::SEX_MALE){
  646.                                         $selectedVariant $variant;
  647.                                         $examParent $param->getExamParam();
  648.                                         $examParent->setActiveVariant($selectedVariant);
  649.                                         $param->setExamParam($examParent);
  650.                                     }
  651.                                     break;
  652.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN:
  653.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  654.                                         $selectedVariant $variant;
  655.                                         $examParent $param->getExamParam();
  656.                                         $examParent->setActiveVariant($selectedVariant);
  657.                                         $param->setExamParam($examParent);
  658.                                     }
  659.                                     break;
  660.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_BOY:
  661.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN_BY_AGE:
  662.                                     if($patient->getSex()==Patient::SEX_MALE){
  663.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  664.                                         if($selectedVariant!=null){
  665.                                             $selectedVariant $allVariants[$i];
  666.                                             $examParent $param->getExamParam();
  667.                                             $examParent->setActiveVariant($selectedVariant);
  668.                                             $param->setExamParam($examParent);
  669.                                         }
  670.                                     }
  671.                                     break;
  672.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_GIRL:
  673.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN_BY_AGE:
  674.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  675.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  676.                                         if($selectedVariant!=null){
  677.                                             $selectedVariant $allVariants[$i];
  678.                                             $examParent $param->getExamParam();
  679.                                             $examParent->setActiveVariant($selectedVariant);
  680.                                             $param->setExamParam($examParent);
  681.                                         }
  682.                                     }
  683.                                     break;
  684.                                 default:
  685.                                     break;
  686.                             }
  687.                         }
  688.                     }
  689.                 }
  690.                 $tab[] = ['examR'=>$item,'params'=>$params];
  691.             }
  692.             else{
  693.                 $params $this->em->getRepository(ExamParam::class)->findBy(['isActive'=>true,'exam'=>$item->getExam()]);
  694.                 $tabP = [];
  695.                 foreach ($params as $p){
  696.                     $p->setTranslatableLocale($this->locale);
  697.                     $this->em->refresh$p);
  698.                     $np = new ExamRequestItemParam();
  699.                     $np->setExam($p->getExam());
  700.                     $np->setExamParam($p);
  701.                     $np->setExamRequestItem($item);
  702.                     $np->setExamRequest($reqExam);
  703.                     $oldERP $this->em->getRepository(ExamRequestItemParam::class)->findLastByPatient($reqExam->getPatient()->getId(),$p->getId());
  704.                     if(count($oldERP)>0){
  705.                         $np->setOldParamResult($oldERP[0]);
  706.                     }
  707.                     $this->em->persist($np);
  708.                     $tabP[]=$np;
  709.                 }
  710.                 $this->em->flush();
  711.                 foreach ($tabP as $p){
  712.                     $param $p;
  713.                     $allVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param->getExamParam(),'isActive'=>true]);
  714.                     $selectedVariant null;
  715.                     if(count($allVariants)==1){
  716.                         $selectedVariant $allVariants[0];
  717.                         $examParent $param->getExamParam();
  718.                         $examParent->setActiveVariant($selectedVariant);
  719.                         $param->setExamParam($examParent);
  720.                     }
  721.                     else{
  722.                         $i=-1;
  723.                         $patient$reqExam->getPatient();
  724.                         $patient->setAge($this->ageCalculator($patient->getBirthDate()));
  725.                         foreach ($allVariants as $variant){
  726.                             $i++;
  727.                             switch ($variant->getParamFor()){
  728.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN:
  729.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_ALL_BY_AGE:
  730.                                     $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  731.                                     if($selectedVariant!=null){
  732.                                         $selectedVariant $allVariants[$i];
  733.                                         $examParent $param->getExamParam();
  734.                                         $examParent->setActiveVariant($selectedVariant);
  735.                                         $param->setExamParam($examParent);
  736.                                     }
  737.                                     break;
  738.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN:
  739.                                     if($patient->getSex()==Patient::SEX_MALE){
  740.                                         $selectedVariant $variant;
  741.                                         $examParent $param->getExamParam();
  742.                                         $examParent->setActiveVariant($selectedVariant);
  743.                                         $param->setExamParam($examParent);
  744.                                     }
  745.                                     break;
  746.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN:
  747.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  748.                                         $selectedVariant $variant;
  749.                                         $examParent $param->getExamParam();
  750.                                         $examParent->setActiveVariant($selectedVariant);
  751.                                         $param->setExamParam($examParent);
  752.                                     }
  753.                                     break;
  754.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_BOY:
  755.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN_BY_AGE:
  756.                                     if($patient->getSex()==Patient::SEX_MALE){
  757.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  758.                                         if($selectedVariant!=null){
  759.                                             $selectedVariant $allVariants[$i];
  760.                                             $examParent $param->getExamParam();
  761.                                             $examParent->setActiveVariant($selectedVariant);
  762.                                             $param->setExamParam($examParent);
  763.                                         }
  764.                                     }
  765.                                     break;
  766.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_GIRL:
  767.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN_BY_AGE:
  768.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  769.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  770.                                         if($selectedVariant!=null){
  771.                                             $selectedVariant $allVariants[$i];
  772.                                             $examParent $param->getExamParam();
  773.                                             $examParent->setActiveVariant($selectedVariant);
  774.                                             $param->setExamParam($examParent);
  775.                                         }
  776.                                     }
  777.                                     break;
  778.                                 default:
  779.                                     break;
  780.                             }
  781.                         }
  782.                     }
  783.                 }
  784.                 $tab[] = ['examR'=>$item,'params'=>$tabP];
  785.                 foreach ($tabP as $p){
  786.                     $tabItemId[]=$p->getId();
  787.                 }
  788.             }
  789.         }
  790.         $hasGroup=false;
  791.         $tabFinal=[];
  792.         foreach ($tab as $ta){
  793.             $tabSimple=[];
  794.             $tabHasGroup=false;
  795.             $tabOk=[];
  796.             $tabOk['--x--']=[];
  797.             foreach ($ta['params'] as $t){
  798.                 $group $t->getExamparam()->getExamParamGroup();
  799.                 if(strlen($group)>0){
  800.                     if(!array_key_exists($group,$tabOk)){
  801.                         $tabHasGroup=true;
  802.                         $hasGroup=true;
  803.                         $tabOk[$group]=[$t];
  804.                     }else{
  805.                         $tabOk[$group][]=$t;
  806.                     }
  807.                 }else{
  808.                     $tabSimple[]=$t;
  809.                 }
  810.             }
  811.             $tabOk['--x--']=$tabSimple;
  812.             $tabFinal[]=['tab_has_group'=>$tabHasGroup'examR'=>$ta['examR'],'params'=>$tabOk];
  813.         }
  814.         $system $this->em->getRepository(System::class)->findOneBy([]);
  815.         return $this->render('display_request_exam_result.html.twig',["has_group"=>$hasGroup,  "data_list_group"=>$tabFinal"request"=>$reqExam,'data_list'=>$tab,'system'=>$system,'paramsId'=>$tabItemId]);
  816.     }
  817.     public function displayExamRequestBill(Request $request$slug){
  818.         $test1 $this->testRole('M_EXAM_REQUEST');
  819.         $test2 $this->testRole('M_EXAM_RESULT');
  820.         $test3 $this->testRole('M_BILL');
  821.         if($test1 == false && $test2 == false && $test3 == false) return $this->redirectToRoute('web_app_dashboard');
  822.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  823.         if($reqExam === null){
  824.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  825.             return $this->redirectToRoute('web_app_exam_request');
  826.         }
  827.         $tab=[];
  828.         foreach ($reqExam->getExamRequestItems() as $item)
  829.         {
  830.             $item->getExam()->setTranslatableLocale($this->locale);
  831.             $this->em->refresh($item->getExam());
  832.             $tab[] = $item;
  833.         }
  834.         $system $this->em->getRepository(System::class)->findOneBy([]);
  835.         return $this->render('display_exam_request_bill.html.twig',["request"=>$reqExam,'exam_request_item'=>$tab,'system'=>$system]);
  836.     }
  837.     public function displayExamRequestOnly(Request $request$slug){
  838.         $test1 $this->testRole('M_EXAM_REQUEST');
  839.         $test2 $this->testRole('M_EXAM_RESULT');
  840.         if($test1 == false && $test2 == false) return $this->redirectToRoute('web_app_dashboard');
  841.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  842.         if($reqExam === null){
  843.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  844.             return $this->redirectToRoute('web_app_exam_request');
  845.         }
  846.         $tab=[];
  847.         $tabItemId=[];
  848.         foreach ($reqExam->getExamRequestItems() as $item)
  849.         {
  850.             $item->getExam()->setTranslatableLocale($this->locale);
  851.             $this->em->refresh($item->getExam());
  852.             $params $this->em->getRepository(ExamRequestItemParam::class)->findBy(['isActive'=>true,'examRequestItem'=>$item]);
  853.             if(count($params)>0){
  854.                 foreach ($params as $p){
  855.                     $param $p;
  856.                     $tabItemId[]=$p->getId();
  857.                     $p->getExamParam()->setTranslatableLocale($this->locale);
  858.                     $this->em->refresh$p->getExamParam());
  859.                     $allVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param->getExamParam(),'isActive'=>true]);
  860.                     $selectedVariant null;
  861.                     if(count($allVariants)==1){
  862.                         $selectedVariant $allVariants[0];
  863.                         $examParent $param->getExamParam();
  864.                         $examParent->setActiveVariant($selectedVariant);
  865.                         $param->setExamParam($examParent);
  866.                     }
  867.                     else{
  868.                         $i=-1;
  869.                         $patient$reqExam->getPatient();
  870.                         $patient->setAge($this->ageCalculator($patient->getBirthDate()));
  871.                         foreach ($allVariants as $variant){
  872.                             $i++;
  873.                             switch ($variant->getParamFor()){
  874.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN:
  875.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_ALL_BY_AGE:
  876.                                     $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  877.                                     if($selectedVariant!=null){
  878.                                         $selectedVariant $allVariants[$i];
  879.                                         $examParent $param->getExamParam();
  880.                                         $examParent->setActiveVariant($selectedVariant);
  881.                                         $param->setExamParam($examParent);
  882.                                     }
  883.                                     break;
  884.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN:
  885.                                     if($patient->getSex()==Patient::SEX_MALE){
  886.                                         $selectedVariant $variant;
  887.                                         $examParent $param->getExamParam();
  888.                                         $examParent->setActiveVariant($selectedVariant);
  889.                                         $param->setExamParam($examParent);
  890.                                     }
  891.                                     break;
  892.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN:
  893.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  894.                                         $selectedVariant $variant;
  895.                                         $examParent $param->getExamParam();
  896.                                         $examParent->setActiveVariant($selectedVariant);
  897.                                         $param->setExamParam($examParent);
  898.                                     }
  899.                                     break;
  900.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_BOY:
  901.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN_BY_AGE:
  902.                                     if($patient->getSex()==Patient::SEX_MALE){
  903.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  904.                                         if($selectedVariant!=null){
  905.                                             $selectedVariant $allVariants[$i];
  906.                                             $examParent $param->getExamParam();
  907.                                             $examParent->setActiveVariant($selectedVariant);
  908.                                             $param->setExamParam($examParent);
  909.                                         }
  910.                                     }
  911.                                     break;
  912.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_GIRL:
  913.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN_BY_AGE:
  914.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  915.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  916.                                         if($selectedVariant!=null){
  917.                                             $selectedVariant $allVariants[$i];
  918.                                             $examParent $param->getExamParam();
  919.                                             $examParent->setActiveVariant($selectedVariant);
  920.                                             $param->setExamParam($examParent);
  921.                                         }
  922.                                     }
  923.                                     break;
  924.                                 default:
  925.                                     break;
  926.                             }
  927.                         }
  928.                     }
  929.                 }
  930.                 $tab[] = ['examR'=>$item,'params'=>$params];
  931.             }
  932.             else{
  933.                 $params $this->em->getRepository(ExamParam::class)->findBy(['isActive'=>true,'exam'=>$item->getExam()]);
  934.                 $tabP = [];
  935.                 foreach ($params as $p){
  936.                     $p->setTranslatableLocale($this->locale);
  937.                     $this->em->refresh$p);
  938.                     $np = new ExamRequestItemParam();
  939.                     $np->setExam($p->getExam());
  940.                     $np->setExamParam($p);
  941.                     $np->setExamRequestItem($item);
  942.                     $np->setExamRequest($reqExam);
  943.                     $oldERP $this->em->getRepository(ExamRequestItemParam::class)->findLastByPatient($reqExam->getPatient()->getId(),$p->getId());
  944.                     if(count($oldERP)>0){
  945.                         $np->setOldParamResult($oldERP[0]);
  946.                     }
  947.                     $this->em->persist($np);
  948.                     $tabP[]=$np;
  949.                 }
  950.                 $this->em->flush();
  951.                 foreach ($tabP as $p){
  952.                     $param $p;
  953.                     $allVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param->getExamParam(),'isActive'=>true]);
  954.                     $selectedVariant null;
  955.                     if(count($allVariants)==1){
  956.                         $selectedVariant $allVariants[0];
  957.                         $examParent $param->getExamParam();
  958.                         $examParent->setActiveVariant($selectedVariant);
  959.                         $param->setExamParam($examParent);
  960.                     }
  961.                     else{
  962.                         $i=-1;
  963.                         $patient$reqExam->getPatient();
  964.                         $patient->setAge($this->ageCalculator($patient->getBirthDate()));
  965.                         foreach ($allVariants as $variant){
  966.                             $i++;
  967.                             switch ($variant->getParamFor()){
  968.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN:
  969.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_ALL_BY_AGE:
  970.                                     $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  971.                                     if($selectedVariant!=null){
  972.                                         $selectedVariant $allVariants[$i];
  973.                                         $examParent $param->getExamParam();
  974.                                         $examParent->setActiveVariant($selectedVariant);
  975.                                         $param->setExamParam($examParent);
  976.                                     }
  977.                                     break;
  978.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN:
  979.                                     if($patient->getSex()==Patient::SEX_MALE){
  980.                                         $selectedVariant $variant;
  981.                                         $examParent $param->getExamParam();
  982.                                         $examParent->setActiveVariant($selectedVariant);
  983.                                         $param->setExamParam($examParent);
  984.                                     }
  985.                                     break;
  986.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN:
  987.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  988.                                         $selectedVariant $variant;
  989.                                         $examParent $param->getExamParam();
  990.                                         $examParent->setActiveVariant($selectedVariant);
  991.                                         $param->setExamParam($examParent);
  992.                                     }
  993.                                     break;
  994.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_BOY:
  995.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN_BY_AGE:
  996.                                     if($patient->getSex()==Patient::SEX_MALE){
  997.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  998.                                         if($selectedVariant!=null){
  999.                                             $selectedVariant $allVariants[$i];
  1000.                                             $examParent $param->getExamParam();
  1001.                                             $examParent->setActiveVariant($selectedVariant);
  1002.                                             $param->setExamParam($examParent);
  1003.                                         }
  1004.                                     }
  1005.                                     break;
  1006.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_GIRL:
  1007.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN_BY_AGE:
  1008.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  1009.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1010.                                         if($selectedVariant!=null){
  1011.                                             $selectedVariant $allVariants[$i];
  1012.                                             $examParent $param->getExamParam();
  1013.                                             $examParent->setActiveVariant($selectedVariant);
  1014.                                             $param->setExamParam($examParent);
  1015.                                         }
  1016.                                     }
  1017.                                     break;
  1018.                                 default:
  1019.                                     break;
  1020.                             }
  1021.                         }
  1022.                     }
  1023.                 }
  1024.                 $tab[] = ['examR'=>$item,'params'=>$tabP];
  1025.                 foreach ($tabP as $p){
  1026.                     $tabItemId[]=$p->getId();
  1027.                 }
  1028.             }
  1029.         }
  1030.         $system $this->em->getRepository(System::class)->findOneBy([]);
  1031.         $hasGroup=false;
  1032.         $tabFinal=[];
  1033.         foreach ($tab as $ta){
  1034.             $tabSimple=[];
  1035.             $tabHasGroup=false;
  1036.             $tabOk=[];
  1037.             $tabOk['--x--']=[];
  1038.             foreach ($ta['params'] as $t){
  1039.                 $group $t->getExamparam()->getExamParamGroup();
  1040.                 if(strlen($group)>0){
  1041.                     if(!array_key_exists($group,$tabOk)){
  1042.                         $tabHasGroup=true;
  1043.                         $hasGroup=true;
  1044.                         $tabOk[$group]=[$t];
  1045.                     }else{
  1046.                         $tabOk[$group][]=$t;
  1047.                     }
  1048.                 }else{
  1049.                     $tabSimple[]=$t;
  1050.                 }
  1051.             }
  1052.             $tabOk['--x--']=$tabSimple;
  1053.             $tabFinal[]=['tab_has_group'=>$tabHasGroup'examR'=>$ta['examR'],'params'=>$tabOk];
  1054.         }
  1055.         return $this->render('display_request_exam_only.html.twig',["has_group"=>$hasGroup,  "data_list_group"=>$tabFinal"request"=>$reqExam,'data_list'=>$tab,'system'=>$system,'paramsId'=>$tabItemId]);
  1056.     }
  1057.     public function displayExamRequestForValidation(Request $request$slug){
  1058.         $test1 $this->testRole('M_EXAM_REQUEST');
  1059.         $test2 $this->testRole('M_EXAM_RESULT');
  1060.         if($test1 == false && $test2 == false) return $this->redirectToRoute('web_app_dashboard');
  1061.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  1062.         if($reqExam === null){
  1063.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  1064.             return $this->redirectToRoute('web_app_exam_request');
  1065.         }
  1066.         if($reqExam->getStatus() !== ExamRequest::STATUS_AWAIT_VALIDATION){
  1067.             $this->mycontainer->get('session')->getFlashBag()->add('notice',$this->mycontainer->get('translator')->trans("operation_denied"));
  1068.             return $this->redirectToRoute('web_app_exam_request');
  1069.         }
  1070.         $tab=[];
  1071.         $tabItemId=[];
  1072.         foreach ($reqExam->getExamRequestItems() as $item)
  1073.         {
  1074.             $item->getExam()->setTranslatableLocale($this->locale);
  1075.             $this->em->refresh($item->getExam());
  1076.             $params $item->getExamRequestItemParams();
  1077.             if(count($params)>0){
  1078.                 foreach ($params as $p){
  1079.                     $tabItemId[]=$p->getId();
  1080.                     $p->getExamParam()->setTranslatableLocale($this->locale);
  1081.                     $this->em->refresh$p->getExamParam());
  1082.                     $param $p;
  1083.                     $allVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param->getExamParam(),'isActive'=>true]);
  1084.                     $selectedVariant null;
  1085.                     if(count($allVariants)==1){
  1086.                         $selectedVariant $allVariants[0];
  1087.                         $examParent $param->getExamParam();
  1088.                         $examParent->setActiveVariant($selectedVariant);
  1089.                         $param->setExamParam($examParent);
  1090.                     }
  1091.                     else{
  1092.                         $i=-1;
  1093.                         $patient$reqExam->getPatient();
  1094.                         $patient->setAge($this->ageCalculator($patient->getBirthDate()));
  1095.                         foreach ($allVariants as $variant){
  1096.                             $i++;
  1097.                             switch ($variant->getParamFor()){
  1098.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN:
  1099.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_ALL_BY_AGE:
  1100.                                     $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1101.                                     if($selectedVariant!=null){
  1102.                                         $selectedVariant $allVariants[$i];
  1103.                                         $examParent $param->getExamParam();
  1104.                                         $examParent->setActiveVariant($selectedVariant);
  1105.                                         $param->setExamParam($examParent);
  1106.                                     }
  1107.                                     break;
  1108.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN:
  1109.                                     if($patient->getSex()==Patient::SEX_MALE){
  1110.                                         $selectedVariant $variant;
  1111.                                         $examParent $param->getExamParam();
  1112.                                         $examParent->setActiveVariant($selectedVariant);
  1113.                                         $param->setExamParam($examParent);
  1114.                                     }
  1115.                                     break;
  1116.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN:
  1117.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  1118.                                         $selectedVariant $variant;
  1119.                                         $examParent $param->getExamParam();
  1120.                                         $examParent->setActiveVariant($selectedVariant);
  1121.                                         $param->setExamParam($examParent);
  1122.                                     }
  1123.                                     break;
  1124.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_BOY:
  1125.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN_BY_AGE:
  1126.                                     if($patient->getSex()==Patient::SEX_MALE){
  1127.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1128.                                         if($selectedVariant!=null){
  1129.                                             $selectedVariant $allVariants[$i];
  1130.                                             $examParent $param->getExamParam();
  1131.                                             $examParent->setActiveVariant($selectedVariant);
  1132.                                             $param->setExamParam($examParent);
  1133.                                         }
  1134.                                     }
  1135.                                     break;
  1136.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_GIRL:
  1137.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN_BY_AGE:
  1138.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  1139.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1140.                                         if($selectedVariant!=null){
  1141.                                             $selectedVariant $allVariants[$i];
  1142.                                             $examParent $param->getExamParam();
  1143.                                             $examParent->setActiveVariant($selectedVariant);
  1144.                                             $param->setExamParam($examParent);
  1145.                                         }
  1146.                                     }
  1147.                                     break;
  1148.                                 default:
  1149.                                     break;
  1150.                             }
  1151.                         }
  1152.                     }
  1153.                 }
  1154.                 $tab[] = ['examR'=>$item,'params'=>$params];
  1155.             }
  1156.             else{
  1157.                 $params $this->em->getRepository(ExamParam::class)->findBy(['isActive'=>true,'exam'=>$item->getExam()]);
  1158.                 $tabP = [];
  1159.                 foreach ($params as $p){
  1160.                     $p->setTranslatableLocale($this->locale);
  1161.                     $np = new ExamRequestItemParam();
  1162.                     $np->setExam($p->getExam());
  1163.                     $np->setExamParam($p);
  1164.                     $np->setExamRequestItem($item);
  1165.                     $np->setExamRequest($reqExam);
  1166.                     $oldERP $this->em->getRepository(ExamRequestItemParam::class)->findLastByPatient($reqExam->getPatient()->getId(),$p->getId());
  1167.                     if(count($oldERP)>0){
  1168.                         $np->setOldParamResult($oldERP[0]);
  1169.                     }
  1170.                     $this->em->persist($np);
  1171.                     $this->em->refresh($np);
  1172.                     $tabP[]=$np;
  1173.                 }
  1174.                 $this->em->flush();
  1175.                 foreach ($tabP as $p){
  1176.                     $param $p;
  1177.                     $allVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param->getExamParam(),'isActive'=>true]);
  1178.                     
  1179.                     $selectedVariant null;
  1180.                     if(count($allVariants)==1){
  1181.                         $selectedVariant $allVariants[0];
  1182.                         $examParent $param->getExamParam();
  1183.                         $examParent->setActiveVariant($selectedVariant);
  1184.                         $param->setExamParam($examParent);
  1185.                     }
  1186.                     else{
  1187.                         $i=-1;
  1188.                         $patient$reqExam->getPatient();
  1189.                         $patient->setAge($this->ageCalculator($patient->getBirthDate()));
  1190.                         foreach ($allVariants as $variant){
  1191.                             $i++;
  1192.                             switch ($variant->getParamFor()){
  1193.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN:
  1194.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_ALL_BY_AGE:
  1195.                                     $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1196.                                     if($selectedVariant!=null){
  1197.                                         $selectedVariant $allVariants[$i];
  1198.                                         $examParent $param->getExamParam();
  1199.                                         $examParent->setActiveVariant($selectedVariant);
  1200.                                         $param->setExamParam($examParent);
  1201.                                     }
  1202.                                     break;
  1203.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN:
  1204.                                     if($patient->getSex()==Patient::SEX_MALE){
  1205.                                         $selectedVariant $variant;
  1206.                                         $examParent $param->getExamParam();
  1207.                                         $examParent->setActiveVariant($selectedVariant);
  1208.                                         $param->setExamParam($examParent);
  1209.                                     }
  1210.                                     break;
  1211.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN:
  1212.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  1213.                                         $selectedVariant $variant;
  1214.                                         $examParent $param->getExamParam();
  1215.                                         $examParent->setActiveVariant($selectedVariant);
  1216.                                         $param->setExamParam($examParent);
  1217.                                     }
  1218.                                     break;
  1219.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_BOY:
  1220.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN_BY_AGE:
  1221.                                     if($patient->getSex()==Patient::SEX_MALE){
  1222.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1223.                                         if($selectedVariant!=null){
  1224.                                             $selectedVariant $allVariants[$i];
  1225.                                             $examParent $param->getExamParam();
  1226.                                             $examParent->setActiveVariant($selectedVariant);
  1227.                                             $param->setExamParam($examParent);
  1228.                                         }
  1229.                                     }
  1230.                                     break;
  1231.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_GIRL:
  1232.                                 case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN_BY_AGE:
  1233.                                     if($patient->getSex()==Patient::SEX_FEMALE){
  1234.                                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1235.                                         if($selectedVariant!=null){
  1236.                                             $selectedVariant $allVariants[$i];
  1237.                                             $examParent $param->getExamParam();
  1238.                                             $examParent->setActiveVariant($selectedVariant);
  1239.                                             $param->setExamParam($examParent);
  1240.                                         }
  1241.                                     }
  1242.                                     break;
  1243.                                 default:
  1244.                                     break;
  1245.                             }
  1246.                         }
  1247.                     }
  1248.                 }
  1249.                 $tab[] = ['examR'=>$item,'params'=>$tabP];
  1250.                 foreach ($tabP as $p){
  1251.                     $tabItemId[]=$p->getId();
  1252.                 }
  1253.             }
  1254.         }
  1255.         $system $this->em->getRepository(System::class)->findOneBy([]);
  1256.         $hasGroup=false;
  1257.         $tabFinal=[];
  1258.         foreach ($tab as $ta){
  1259.             $tabSimple=[];
  1260.             $tabHasGroup=false;
  1261.             $tabOk=[];
  1262.             $tabOk['--x--']=[];
  1263.             foreach ($ta['params'] as $t){
  1264.                 $group $t->getExamparam()->getExamParamGroup();
  1265.                 if(strlen($group)>0){
  1266.                     if(!array_key_exists($group,$tabOk)){
  1267.                         $tabHasGroup=true;
  1268.                         $hasGroup=true;
  1269.                         $tabOk[$group]=[$t];
  1270.                     }else{
  1271.                         $tabOk[$group][]=$t;
  1272.                     }
  1273.                 }else{
  1274.                     $tabSimple[]=$t;
  1275.                 }
  1276.             }
  1277.             $tabOk['--x--']=$tabSimple;
  1278.             $tabFinal[]=['tab_has_group'=>$tabHasGroup'examR'=>$ta['examR'],'params'=>$tabOk];
  1279.         }
  1280.         return $this->render('display_request_exam_result_validation.html.twig',["has_group"=>$hasGroup,  "data_list_group"=>$tabFinal,"request"=>$reqExam,'data_list'=>$tab,'system'=>$system,'paramsId'=>$tabItemId]);
  1281.     }
  1282.     public function printExamRequest(Request $request$slug){
  1283.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  1284.         if($reqExam === null){
  1285.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  1286.             return $this->redirectToRoute('web_app_exam_request');
  1287.         }
  1288.         $tab=[];
  1289.         $tabItemId=[];
  1290.         foreach ($reqExam->getExamRequestItems() as $item)
  1291.         {
  1292.             $item->getExam()->setTranslatableLocale($this->locale);
  1293.             $this->em->refresh($item->getExam());
  1294.             $params $item->getExamRequestItemParams();
  1295.             if(count($params)>0){
  1296.                 foreach ($params as $p){
  1297.                     $tabItemId[]=$p->getId();
  1298.                     $p->getExamParam()->setTranslatableLocale($this->locale);
  1299.                     $this->em->refresh$p->getExamParam());
  1300.                 }
  1301.                 $tab[] = ['examR'=>$item,'params'=>$params];
  1302.             }
  1303.             else{
  1304.                 $params $this->em->getRepository(ExamParam::class)->findBy(['isActive'=>true,'exam'=>$item->getExam()]);
  1305.                 $tabP = [];
  1306.                 foreach ($params as $p){
  1307.                     $p->setTranslatableLocale($this->locale);
  1308.                     $np = new ExamRequestItemParam();
  1309.                     $np->setExam($p->getExam());
  1310.                     $np->setExamParam($p);
  1311.                     $np->setExamRequestItem($item);
  1312.                     $np->setExamRequest($reqExam);
  1313.                     $oldERP $this->em->getRepository(ExamRequestItemParam::class)->findLastByPatient($reqExam->getPatient()->getId(),$p->getId());
  1314.                     if(count($oldERP)>0){
  1315.                         $np->setOldParamResult($oldERP[0]);
  1316.                     }
  1317.                     $this->em->persist($np);
  1318.                     $tabP[]=$np;
  1319.                 }
  1320.                 $this->em->flush();
  1321.                 $tab[] = ['examR'=>$item,'params'=>$tabP];
  1322.                 foreach ($tabP as $p){
  1323.                     $tabItemId[]=$p->getId();
  1324.                 }
  1325.             }
  1326.         }
  1327.         $system $this->em->getRepository(System::class)->findOneBy([]);
  1328.         return $this->render('display_request_exam_only_print.html.twig',["request"=>$reqExam,'data_list'=>$tab,'system'=>$system,'paramsId'=>$tabItemId]);
  1329.     }
  1330.     public function examRequestResults(Request $request)
  1331.     {
  1332.         if($this->testRole('M_EXAM_RESULT')==false) return $this->redirectToRoute('web_app_dashboard');
  1333.         $referer $request->headers->get('referer');
  1334.         $params $request->query->all();
  1335.         $tabKeys = ['filter_by'=>'','start_date'=>'','end_date'=>'','patient'=>'','status'=>''];
  1336.         $test false;
  1337.         foreach ($tabKeys as $k=>$val){
  1338.             if(array_key_exists($k,$params)){
  1339.                 $test=true;
  1340.                 $tabKeys[$k]=$params[$k];
  1341.             }
  1342.         }
  1343.         if($test === false){
  1344.             $data $this->em->getRepository(ExamRequest::class)->findBy(['isActive'=>true],['dateExam'=>'DESC']);
  1345.         }
  1346.         else{
  1347.             if(strlen($tabKeys['start_date'])>0){
  1348.                 try {
  1349.                     $start $this->parseDate($tabKeys["start_date"])->format("Y-m-d")." 00:00:00";
  1350.                     $tabKeys['start_date']=$start;
  1351.                 }
  1352.                 catch (\Exception $e)
  1353.                 {
  1354.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  1355.                     return $this->redirect($referer ?? '/');
  1356.                 }
  1357.             }
  1358.             if(strlen($tabKeys['end_date'])>0){
  1359.                 try {
  1360.                     $start $this->parseDate($tabKeys["end_date"])->format("Y-m-d")." 23:59:59";
  1361.                     $tabKeys['end_date']=$start;
  1362.                 }
  1363.                 catch (\Exception $e)
  1364.                 {
  1365.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  1366.                     return $this->redirect($referer ?? '/');
  1367.                 }
  1368.             }
  1369.             if($tabKeys['status']=="x"){
  1370.                 $tabKeys['status']="";
  1371.             }
  1372.             $data $this->em->getRepository(ExamRequest::class)->findFilter($tabKeys);
  1373.         }
  1374.         $examens $this->em->getRepository(Exam::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  1375.         $patients $this->em->getRepository(Patient::class)->findBy(['isActive'=>true],['name'=>'DESC','surname'=>'ASC']);
  1376.         $dateInt 2;
  1377.         $sys $this->em->getRepository(System::class)->findOneBy([]);
  1378.         if($sys !== null){
  1379.             $dateInt $sys->getNbDayAlertBill();
  1380.         }
  1381.         foreach ($examens as $r){
  1382.             $r->setTranslatableLocale($this->locale);
  1383.             $this->em->refresh($r);
  1384.         }
  1385.         return $this->render('exam_request_result.html.twig',["data_list"=>$data,'date_int'=>$dateInt'examens'=>$examens'patients'=>$patients]);
  1386.     }
  1387.     public function runningAnalysis(Request $request)
  1388.     {
  1389.         if($this->testRole('M_EXAM_RESULT')==false) return $this->redirectToRoute('web_app_dashboard');
  1390.         $examens $this->em->getRepository(Exam::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  1391.         $referer $request->headers->get('referer');
  1392.         $params $request->query->all();
  1393.         $tabKeys = ['filter_by'=>'','start_date'=>'','end_date'=>'','patient'=>'','status'=>'','exam'=>''];
  1394.         $test false;
  1395.         foreach ($tabKeys as $k=>$val){
  1396.             if(array_key_exists($k,$params)){
  1397.                 $test=true;
  1398.                 $tabKeys[$k]=$params[$k];
  1399.             }
  1400.         }
  1401.         if($test === false){
  1402.             $data $this->em->getRepository(ExamRequestItem::class)->findBy(['isActive'=>true],['date'=>'DESC','status'=>'ASC']);
  1403.         }
  1404.         else{
  1405.             if(strlen($tabKeys['start_date'])>0){
  1406.                 try {
  1407.                     $start $this->parseDate($tabKeys["start_date"])->format("Y-m-d")." 00:00:00";
  1408.                     $tabKeys['start_date']=$start;
  1409.                 }
  1410.                 catch (\Exception $e)
  1411.                 {
  1412.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  1413.                     return $this->redirect($referer ?? '/');
  1414.                 }
  1415.             }
  1416.             if(strlen($tabKeys['end_date'])>0){
  1417.                 try {
  1418.                     $start $this->parseDate($tabKeys["end_date"])->format("Y-m-d")." 23:59:59";
  1419.                     $tabKeys['end_date']=$start;
  1420.                 }
  1421.                 catch (\Exception $e)
  1422.                 {
  1423.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  1424.                     return $this->redirect($referer ?? '/');
  1425.                 }
  1426.             }
  1427.             if($tabKeys['status']=="x"){
  1428.                 $tabKeys['status']="";
  1429.             }
  1430.             $data $this->em->getRepository(ExamRequestItem::class)->findFilter($tabKeys);
  1431.         }
  1432.         foreach ($data as $item){
  1433.             $r $item->getExam();
  1434.             $r->setTranslatableLocale($this->locale);
  1435.             $this->em->refresh($r);
  1436.             $item->setexam($r);
  1437.         }
  1438.         $dateInt 2;
  1439.         $sys $this->em->getRepository(System::class)->findOneBy([]);
  1440.         if($sys !== null){
  1441.             $dateInt $sys->getNbDayAlertBill();
  1442.         }
  1443.         return $this->render('exam_request_item.html.twig',["data_list"=>$data,'examens'=>$examens'date_int'=>$dateInt]);
  1444.     }
  1445.     public function bill(Request $request)
  1446.     {
  1447.         if($this->testRole('M_BILL')==false) return $this->redirectToRoute('web_app_dashboard');
  1448.         $referer $request->headers->get('referer');
  1449.         $params $request->query->all();
  1450.         $tabKeys = ['start_date'=>'','end_date'=>'','patient'=>'','doctor'=>'','provider'=>'','type'=>''];
  1451.         $test false;
  1452.         foreach ($tabKeys as $k=>$val){
  1453.             if(array_key_exists($k,$params)){
  1454.                 $test=true;
  1455.                 $tabKeys[$k]=$params[$k];
  1456.             }
  1457.         }
  1458.         if($test === false){
  1459.             $data $this->em->getRepository(ExamRequest::class)->findBy(['isActive'=>true],['dateExam'=>'DESC']);
  1460.             $data2 $this->em->getRepository(Order::class)->findBy(['isActive'=>true],['dateOrder'=>'DESC']);
  1461.         }
  1462.         else{
  1463.             if(strlen($tabKeys['start_date'])>0){
  1464.                 try {
  1465.                     $start $this->parseDate($tabKeys["start_date"])->format("Y-m-d")." 00:00:00";
  1466.                     $tabKeys['start_date']=$start;
  1467.                 }
  1468.                 catch (\Exception $e)
  1469.                 {
  1470.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  1471.                     return $this->redirect($referer ?? '/');
  1472.                 }
  1473.             }
  1474.             if(strlen($tabKeys['end_date'])>0){
  1475.                 try {
  1476.                     $start $this->parseDate($tabKeys["end_date"])->format("Y-m-d")." 23:59:59";
  1477.                     $tabKeys['end_date']=$start;
  1478.                 }
  1479.                 catch (\Exception $e)
  1480.                 {
  1481.                     $this->mycontainer->get('session')->getFlashBag()->add('notice','incorrect date');
  1482.                     return $this->redirect($referer ?? '/');
  1483.                 }
  1484.             }
  1485.             if($tabKeys['doctor']!==''){
  1486.                 $doc $this->em->getRepository(Doctor::class)->findOneBy(['id'=>$tabKeys['doctor']]);
  1487.                 if($doc !== null){
  1488.                     $tabKeys['doctor'] = $doc->getName();
  1489.                 }
  1490.             }
  1491.             if($tabKeys['type']==0){
  1492.                 $data $this->em->getRepository(ExamRequest::class)->findFilterBill($tabKeys);
  1493.                 $data2=[];
  1494.             }else{
  1495.                 $data2 $this->em->getRepository(Order::class)->findFilterBill($tabKeys);
  1496.                 $data=[];
  1497.             }
  1498.         }
  1499.         $dateInt 2;
  1500.         $sys $this->em->getRepository(System::class)->findOneBy([]);
  1501.         if($sys !== null){
  1502.             $dateInt $sys->getNbDayAlertBill();
  1503.         }
  1504.         return $this->render('bill.html.twig',["data_list"=>$data,'data_list2'=>$data2,'date_int'=>$dateInt]);
  1505.     }
  1506.     public function statistiques(Request $request)
  1507.     {
  1508.         if($this->testRole('M_STA')==false) return $this->redirectToRoute('web_app_dashboard');
  1509.         $data $this->em->getRepository(ExamRequest::class)->findBy(['isActive'=>true],['dateExam'=>'DESC']);
  1510.         $data2 $this->em->getRepository(Order::class)->findBy(['isActive'=>true],['dateOrder'=>'DESC']);
  1511.         $data3 $this->em->getRepository(Exam::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  1512.         foreach ($data3 as $r){
  1513.             $r->setTranslatableLocale($this->locale);
  1514.             $this->em->refresh($r);
  1515.         }
  1516.         $data4 $this->em->getRepository(Product::class)->findBy(['isActive'=>true],['title'=>'ASC']);
  1517.         foreach ($data4 as $r){
  1518.             $r->setTranslatableLocale($this->locale);
  1519.             $this->em->refresh($r);
  1520.         }
  1521.         $insurances $this->em->getRepository(ExamRequest::class)->findInsurance();
  1522.         $insurancePatient = [];
  1523.         foreach ($insurances as $in){
  1524.             if($in->getInsuranceCompany()!== null){
  1525.                 $p $in->getPatient();
  1526.                 $p->setInsuranceCompany($in->getInsuranceCompany()->getName());
  1527.                 $p->setInsuranceRate($in->getInsuranceRate());
  1528.                 $insurancePatient[]=$p;
  1529.             }
  1530.         }
  1531.         return $this->render('statistiques.html.twig',["data_list"=>$data,'data_list2'=>$data2,'exams'=>$data3'products'=>$data4,'insurances'=>$insurancePatient,'date'=>(new \DateTime())->format('d/m/Y')]);
  1532.     }
  1533.     public function journal(Request $request)
  1534.     {
  1535.         if($this->testRole('M_LOG')==false) return $this->redirectToRoute('web_app_dashboard');
  1536.         //$this->mycontainer->get('session')->getFlashBag()->add('notice','hello');
  1537.         return $this->render('journal.html.twig');
  1538.     }
  1539.     public function insurance(Request $request)
  1540.     {
  1541.         if($this->testRole('M_PAT')==false) return $this->redirectToRoute('web_app_dashboard');
  1542.         $data $this->em->getRepository(InsuranceCompany::class)->findBy(['isActive'=>true],['name'=>'ASC']);
  1543.         return $this->render('insurance.html.twig',["data_list"=>$data]);
  1544.     }
  1545.     public function displayRequestExamItemApplyResult(Request $request$slug$id){
  1546.         $test1 $this->testRole('M_EXAM_REQUEST');
  1547.         $test2 $this->testRole('M_EXAM_RESULT');
  1548.         if($test1 == false && $test2 == false) return $this->redirectToRoute('web_app_dashboard');
  1549.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  1550.         if($reqExam === null){
  1551.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  1552.             return $this->redirectToRoute('web_app_exam_request');
  1553.         }
  1554.         $tab=[];
  1555.         $tabItemId=[];
  1556.         foreach ($reqExam->getExamRequestItems() as $item)
  1557.         {
  1558.             $item->getExam()->setTranslatableLocale($this->locale);
  1559.             $this->em->refresh($item->getExam());
  1560.             $params $item->getExamRequestItemParams();
  1561.             if(count($params)>0){
  1562.                 foreach ($params as $p){
  1563.                     $tabItemId[]=$p->getId();
  1564.                     $p->getExamParam()->setTranslatableLocale($this->locale);
  1565.                     $this->em->refresh$p->getExamParam());
  1566.                 }
  1567.                 $tab[] = ['examR'=>$item,'params'=>$params];
  1568.             }
  1569.             else{
  1570.                 $params $this->em->getRepository(ExamParam::class)->findBy(['isActive'=>true,'exam'=>$item->getExam()]);
  1571.                 $tabP = [];
  1572.                 foreach ($params as $p){
  1573.                     $p->setTranslatableLocale($this->locale);
  1574.                     $this->em->refresh$p);
  1575.                     $np = new ExamRequestItemParam();
  1576.                     $np->setExam($p->getExam());
  1577.                     $np->setExamParam($p);
  1578.                     $np->setExamRequestItem($item);
  1579.                     $np->setExamRequest($reqExam);
  1580.                     $oldERP $this->em->getRepository(ExamRequestItemParam::class)->findLastByPatient($reqExam->getPatient()->getId(),$p->getId());
  1581.                     if(count($oldERP)>0){
  1582.                         $np->setOldParamResult($oldERP[0]);
  1583.                     }
  1584.                     $this->em->persist($np);
  1585.                     $tabP[]=$np;
  1586.                 }
  1587.                 $this->em->flush();
  1588.                 $tab[] = ['examR'=>$item,'params'=>$tabP];
  1589.                 foreach ($tabP as $p){
  1590.                     $tabItemId[]=$p->getId();
  1591.                 }
  1592.             }
  1593.         }
  1594.         $system $this->em->getRepository(System::class)->findOneBy([]);
  1595.         return $this->render('display_request_exam_result.html.twig',["request"=>$reqExam,'data_list'=>$tab,'system'=>$system,'paramsId'=>$tabItemId]);
  1596.     }
  1597.     public function displayRequestExamItemApplyValidation(Request $request$slug$id){
  1598.         $test1 $this->testRole('M_EXAM_REQUEST');
  1599.         $test2 $this->testRole('M_EXAM_RESULT');
  1600.         if($test1 == false && $test2 == false) return $this->redirectToRoute('web_app_dashboard');
  1601.         $reqExam $this->em->getRepository(ExamRequest::class)->findOneBy(['slug'=>$slug]);
  1602.         if($reqExam === null){
  1603.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  1604.             return $this->redirectToRoute('web_app_exam_request');
  1605.         }
  1606.         $tab=[];
  1607.         $tabItemId=[];
  1608.         foreach ($reqExam->getExamRequestItems() as $item)
  1609.         {
  1610.             $item->getExam()->setTranslatableLocale($this->locale);
  1611.             $this->em->refresh($item->getExam());
  1612.             $params $item->getExamRequestItemParams();
  1613.             if(count($params)>0){
  1614.                 foreach ($params as $p){
  1615.                     $tabItemId[]=$p->getId();
  1616.                     $p->getExamParam()->setTranslatableLocale($this->locale);
  1617.                     $this->em->refresh$p->getExamParam());
  1618.                 }
  1619.                 $tab[] = ['examR'=>$item,'params'=>$params];
  1620.             }
  1621.             else{
  1622.                 $params $this->em->getRepository(ExamParam::class)->findBy(['isActive'=>true,'exam'=>$item->getExam()]);
  1623.                 $tabP = [];
  1624.                 foreach ($params as $p){
  1625.                     $p->setTranslatableLocale($this->locale);
  1626.                     $this->em->refresh$p);
  1627.                     $np = new ExamRequestItemParam();
  1628.                     $np->setExam($p->getExam());
  1629.                     $np->setExamParam($p);
  1630.                     $np->setExamRequestItem($item);
  1631.                     $np->setExamRequest($reqExam);
  1632.                     $oldERP $this->em->getRepository(ExamRequestItemParam::class)->findLastByPatient($reqExam->getPatient()->getId(),$p->getId());
  1633.                     if(count($oldERP)>0){
  1634.                         $np->setOldParamResult($oldERP[0]);
  1635.                     }
  1636.                     $this->em->persist($np);
  1637.                     $tabP[]=$np;
  1638.                 }
  1639.                 $this->em->flush();
  1640.                 $tab[] = ['examR'=>$item,'params'=>$tabP];
  1641.                 foreach ($tabP as $p){
  1642.                     $tabItemId[]=$p->getId();
  1643.                 }
  1644.             }
  1645.         }
  1646.         $system $this->em->getRepository(System::class)->findOneBy([]);
  1647.         return $this->render('display_request_exam_result.html.twig',["request"=>$reqExam,'data_list'=>$tab,'system'=>$system,'paramsId'=>$tabItemId]);
  1648.     }
  1649.     public function listExamParamVariantForView(Request $request$slug$id){
  1650.         if($this->testRole('M_EXAM')==false) return $this->redirectToRoute('web_app_dashboard');
  1651.         $param $this->em->getRepository(ExamParam::class)->findOneBy(['id'=>$id]);
  1652.         if($param === null){
  1653.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Exam param '.$this->mycontainer->get('translator')->trans("not_found"));
  1654.             return $this->redirectToRoute('web_app_exam_param');
  1655.         }
  1656.         $param->setTranslatableLocale($this->locale);
  1657.         $this->em->refresh$param);
  1658.         $paramVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param,'isActive'=>true]);
  1659.         foreach ($paramVariants as $item){
  1660.             $item->setTranslatableLocale($this->locale);
  1661.             $this->em->refresh($item);
  1662.         }
  1663.         return $this->render('exam_param_variant_view.html.twig',["param"=>$param,'data_list'=>$paramVariants]);
  1664.     }
  1665.     private function getGoodVariantForReferenceValue(ExamParamVariant  $variant):array{
  1666.         $tab=[];
  1667.         if($variant->getParamForResult()==ExamParamVariant::EVALUATION_NONE){
  1668.             $tab = ["min"=>"","max"=>"",
  1669.                 "inf"=>"",
  1670.                 "between"=>"",
  1671.                 "sup"=>"",
  1672.                 "type"=>$variant->getParamForResult(),
  1673.             ];
  1674.         }
  1675.         elseif ($variant->getParamForResult()==ExamParamVariant::EVALUATION_INTERVALLE){
  1676.             $tab = [
  1677.                 "min"=>$variant->getReferenceMin(),
  1678.                 "max"=>$variant->getReferenceMax(),
  1679.                 "inf"=>$variant->getInterpretationLower(),
  1680.                 "between"=>$variant->getInterpretationBetween(),
  1681.                 "sup"=>$variant->getInterpretationGreater(),
  1682.                 "type"=>$variant->getParamForResult(),
  1683.             ];
  1684.         }
  1685.         elseif (in_array($variant->getParamForResult(),[
  1686.             ExamParamVariant::EVALUATION_COMPARE_SUPERIOR,
  1687.             ExamParamVariant::EVALUATION_COMPARE_SUPERIOR_STRICT,
  1688.         ])){
  1689.             $tab = [
  1690.                 "min"=>$variant->getReferenceMin(),
  1691.                 "max"=>"",
  1692.                 "inf"=>"",
  1693.                 "between"=>"",
  1694.                 "sup"=>$variant->getInterpretationGreater(),
  1695.                 "type"=>$variant->getParamForResult(),
  1696.             ];
  1697.         }
  1698.         else{
  1699.             //evaluation compare inferior (strict)
  1700.             $tab = [
  1701.                 "min"=>"",
  1702.                 "max"=>$variant->getReferenceMax(),
  1703.                 "inf"=>$variant->getInterpretationLower(),
  1704.                 "between"=>"",
  1705.                 "sup"=>"",
  1706.                 "type"=>$variant->getParamForResult(),
  1707.             ];
  1708.         }
  1709.         return $tab;
  1710.     }
  1711.     private function getActiveVariantByAge(Patient $patientExamParamVariant $variant):?ExamParamVariant{
  1712.         $v null;
  1713.         switch ($variant->getValueType()){
  1714.             case ExamParamVariant::VALUE_TYPE_WEEK:
  1715.                 if($patient->getAge()['week']>=intval($variant->getValueMin()) && $patient->getAge()['week']<=intval($variant->getValueMax()) ){
  1716.                     $v $variant;
  1717.                 }
  1718.                 break;
  1719.             case ExamParamVariant::VALUE_TYPE_MONTH:
  1720.                 if($patient->getAge()['month']>=intval($variant->getValueMin()) && $patient->getAge()['month']<=intval($variant->getValueMax()) ){
  1721.                     $v $variant;
  1722.                 }
  1723.                 break;
  1724.             case ExamParamVariant::VALUE_TYPE_YEAR:
  1725.                 if($patient->getAge()['year']>=intval($variant->getValueMin()) && $patient->getAge()['year']<=intval($variant->getValueMax()) ){
  1726.                     $v $variant;
  1727.                 }
  1728.                 break;
  1729.             case ExamParamVariant::VALUE_TYPE_DAY:
  1730.                 if($patient->getAge()['day']>=intval($variant->getValueMin()) && $patient->getAge()['day']<=intval($variant->getValueMax()) ){
  1731.                     $v $variant;
  1732.                 }
  1733.                 break;
  1734.             default:
  1735.                 break;
  1736.         }
  1737.         return $v;
  1738.     }
  1739.     public function displayRequestExamItemResult(Request $request$slug$id){
  1740.         $test1 $this->testRole('M_EXAM_REQUEST');
  1741.         $test2 $this->testRole('M_EXAM_RESULT');
  1742.         if($test1 == false && $test2 == false) return $this->redirectToRoute('web_app_dashboard');
  1743.         $reqExamItem $this->em->getRepository(ExamRequestItem::class)->findOneBy(['id'=>$id]);
  1744.         if($reqExamItem === null){
  1745.             $this->mycontainer->get('session')->getFlashBag()->add('notice','Request exam '.$this->mycontainer->get('translator')->trans("not_found"));
  1746.             return $this->redirectToRoute('web_app_exam_item');
  1747.         }
  1748.         if($reqExamItem->getCreatedBy() !== null){
  1749.             if($reqExamItem->getStatus() <= ExamRequestItem::STATUS_SAVED){
  1750.                 if($reqExamItem->getCreatedBy() !== $this->currentUser){
  1751.                     $this->mycontainer->get('session')->getFlashBag()->add('notice',$this->mycontainer->get('translator')->trans("operation_denied"));
  1752.                     return $this->redirectToRoute('web_app_exam_item');
  1753.                 }
  1754.             }else{
  1755.                 $test 0;
  1756.                 if($this->currentUser === $reqExamItem->getManager() || $this->currentUser === $reqExamItem->getCreatedBy()){
  1757.                     $test 1;
  1758.                 }
  1759.                 if($test === 0){
  1760.                     $this->mycontainer->get('session')->getFlashBag()->add('notice',$this->mycontainer->get('translator')->trans("operation_denied"));
  1761.                     return $this->redirectToRoute('web_app_exam_item');
  1762.                 }
  1763.             }
  1764.         }
  1765.         $tab=[];
  1766.         $tabItemId=[];
  1767.         $request $reqExamItem->getExamRequest();
  1768.         $patient $request->getPatient();
  1769.         $patient->setAge($this->ageCalculator($patient->getBirthDate()));
  1770.         $params $reqExamItem->getExamRequestItemParams();
  1771.         $exam $reqExamItem->getExam();
  1772.         $exam->setTranslatableLocale($this->locale);
  1773.         $this->em->refresh($exam);
  1774.         if(count($params)>0){
  1775.             foreach ($params as $p){
  1776.                 $tabItemId[]=$p->getId();
  1777.                 $p->getExamParam()->setTranslatableLocale($this->locale);
  1778.                 $this->em->refresh$p->getExamParam());
  1779.             }
  1780.             $tab[] = ['examR'=>$exam,'params'=>$params];
  1781.         }
  1782.         else{
  1783.             $paramsE $this->em->getRepository(ExamParam::class)->findBy(['isActive'=>true,'exam'=>$exam]);
  1784.             $tabP = [];
  1785.             foreach ($paramsE as $p){
  1786.                 $p->setTranslatableLocale($this->locale);
  1787.                 $this->em->refresh$p);
  1788.                 $np = new ExamRequestItemParam();
  1789.                 $np->setExam($p->getExam());
  1790.                 $np->setExamParam($p);
  1791.                 $np->setExamRequestItem($reqExamItem);
  1792.                 $np->setExamRequest($reqExamItem->getExamRequest());
  1793.                 $oldERP $this->em->getRepository(ExamRequestItemParam::class)->findLastByPatient($request->getPatient()->getId(),$p->getId());
  1794.                 if(count($oldERP)>0){
  1795.                     $np->setOldParamResult($oldERP[0]);
  1796.                 }
  1797.                 $this->em->persist($np);
  1798.                 $tabP[]=$np;
  1799.                 $params[]=$np;
  1800.             }
  1801.             $this->em->flush();
  1802.             $tab[] = ['examR'=>$exam,'params'=>$tabP];
  1803.             foreach ($tabP as $p){
  1804.                 $tabItemId[]=$p->getId();
  1805.             }
  1806.         }
  1807.         $tabParamId = [];
  1808.         $tabPramRef = [];
  1809.         $tabVariant = [];
  1810.         foreach ($params as $param){
  1811.             $tabParamId[] = $param->getId();
  1812.             $allVariants $this->em->getRepository(ExamParamVariant::class)->findBy(['examParam'=>$param->getExamParam(),'isActive'=>true]);
  1813.             $selectedVariant null;
  1814.             if(count($allVariants)==1){
  1815.                 $selectedVariant $allVariants[0];
  1816.                 $tabPramRef[] = $this->getGoodVariantForReferenceValue($selectedVariant);
  1817.                 $tabVariant[]=$selectedVariant;
  1818.                 $examParent $param->getExamParam();
  1819.                 $examParent->setActiveVariant($selectedVariant);
  1820.                 $param->setExamParam($examParent);
  1821.             }
  1822.             elseif (count($allVariants)==0){
  1823.                 $examPa $this->mycontainer->get("user_manager")->createDefaultExamParamVariant($param->getExamParam());
  1824.                 $param->setExamParam($examPa);
  1825.                 $selectedVariant $examPa->getExamParamVariants()[0];
  1826.                 $tabPramRef[] = $this->getGoodVariantForReferenceValue($selectedVariant);
  1827.                 $tabVariant[]=$selectedVariant;
  1828.                 $examParent $param->getExamParam();
  1829.                 $examParent->setActiveVariant($selectedVariant);
  1830.                 $param->setExamParam($examParent);
  1831.             }
  1832.             else{
  1833.                 $i=-1;
  1834.                 foreach ($allVariants as $variant){
  1835.                     $i++;
  1836.                     switch ($variant->getParamFor()){
  1837.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN:
  1838.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_ALL_BY_AGE:
  1839.                         $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1840.                         if($selectedVariant!=null){
  1841.                             $selectedVariant $allVariants[$i];
  1842.                             $examParent $param->getExamParam();
  1843.                             $examParent->setActiveVariant($selectedVariant);
  1844.                             $param->setExamParam($examParent);
  1845.                         }
  1846.                         break;
  1847.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN:
  1848.                             if($patient->getSex()==Patient::SEX_MALE){
  1849.                                 $selectedVariant $variant;
  1850.                                 $examParent $param->getExamParam();
  1851.                                 $examParent->setActiveVariant($selectedVariant);
  1852.                                 $param->setExamParam($examParent);
  1853.                             }
  1854.                             break;
  1855.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN:
  1856.                             if($patient->getSex()==Patient::SEX_FEMALE){
  1857.                                 $selectedVariant $variant;
  1858.                                 $examParent $param->getExamParam();
  1859.                                 $examParent->setActiveVariant($selectedVariant);
  1860.                                 $param->setExamParam($examParent);
  1861.                             }
  1862.                             break;
  1863.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_BOY:
  1864.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_MAN_BY_AGE:
  1865.                             if($patient->getSex()==Patient::SEX_MALE){
  1866.                                 $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1867.                                 if($selectedVariant!=null){
  1868.                                     $selectedVariant $allVariants[$i];
  1869.                                     $examParent $param->getExamParam();
  1870.                                     $examParent->setActiveVariant($selectedVariant);
  1871.                                     $param->setExamParam($examParent);
  1872.                                 }
  1873.                             }
  1874.                             break;
  1875.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_NEW_BORN_GIRL:
  1876.                         case ExamParamVariant::USUAL_VALUE_TYPE_FOR_GENDER_WOMAN_BY_AGE:
  1877.                             if($patient->getSex()==Patient::SEX_FEMALE){
  1878.                                 $selectedVariant $this->getActiveVariantByAge($patient,$variant);
  1879.                                 if($selectedVariant!=null){
  1880.                                     $selectedVariant $allVariants[$i];
  1881.                                     $examParent $param->getExamParam();
  1882.                                     $examParent->setActiveVariant($selectedVariant);
  1883.                                     $param->setExamParam($examParent);
  1884.                                 }
  1885.                             }
  1886.                             break;
  1887.                         default:
  1888.                             break;
  1889.                     }
  1890.                     if($selectedVariant!== null){
  1891.                         $tabPramRef[] = $this->getGoodVariantForReferenceValue($selectedVariant);
  1892.                         $tabVariant[]=$selectedVariant;
  1893.                     }
  1894.                 }
  1895.             }
  1896.         }
  1897.         $tabOk=[];
  1898.         $tabOk['--x--']=[];
  1899.         $tabSimple=[];
  1900.         $tabHasGroup=false;
  1901.         foreach ($params as $t){
  1902.             $group $t->getExamparam()->getExamParamGroup();
  1903.             if(strlen($group)>0){
  1904.                 if(!array_key_exists($group,$tabOk)){
  1905.                     $tabHasGroup=true;
  1906.                     $tabOk[$group]=[$t];
  1907.                 }else{
  1908.                     $tabOk[$group][]=$t;
  1909.                 }
  1910.             }else{
  1911.                 $tabSimple[]=$t;
  1912.             }
  1913.         }
  1914.         $tabOk['--x--']=$tabSimple;
  1915.         $system $this->em->getRepository(System::class)->findOneBy([]);
  1916.         return $this->render('display_request_exam_item_result.html.twig',["data_list"=>$params"tab_has_group"=>$tabHasGroup"request"=>$request,"patient"=>$patient"examR"=>$exam,
  1917.             "request_exam_item"=>$reqExamItem,'data_list_group'=>$tabOk,'system'=>$system,'paramsId'=>$tabItemId,
  1918.             'tab_param_id'=>$tabParamId,'tab_param_ref'=>$tabPramRef,'tab_variant'=>$tabVariant]);
  1919.     }
  1920.     public function updateExamResultUnit(Request $request){
  1921.         $res $this->em->getRepository(ExamRequestItemParam::class)->findAll();
  1922.         foreach ($res as $e){
  1923.             $e->setUnit($e->getExamParam()->getUnit());
  1924.             $this->em->persist($e);
  1925.         }
  1926.         $this->em->flush();
  1927.         return $this->redirectToRoute("web_app_dashboard");
  1928.     }
  1929. }