src/Controller/WebController.php line 104

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