src/Controller/MedicoController.php line 138

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface;
  7. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
  11. use Symfony\Component\Routing\Generator\UrlGenerator;
  12. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  13. use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
  14. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  15. use Symfony\Component\Serializer\Encoder\JsonEncode;
  16. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  17. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  18. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  19. use Symfony\Component\Serializer\Serializer;
  20. use FOS\UserBundle\Event\GetResponseNullableUserEvent;
  21. use FOS\UserBundle\Event\GetResponseUserEvent;
  22. use FOS\UserBundle\Model\UserInterface;
  23. use FOS\UserBundle\Model\UserManagerInterface;
  24. use FOS\UserBundle\Util\TokenGeneratorInterface;
  25. use App\Entity\Autorizacionhistorial;
  26. use App\Entity\Perfilmedico;
  27. use App\Entity\Paciente;
  28. use App\Entity\Aseguradora;
  29. use App\Entity\Tipodocumento;
  30. use App\Entity\Regimenfiscal;
  31. use App\Entity\Responsabilidadfiscal;
  32. use App\Entity\Codigociuu;
  33. use App\Entity\Ciudad;
  34. use App\Entity\Naturaleza;
  35. use App\Entity\Iva;
  36. use App\Entity\Conceptoservicio;
  37. use App\Entity\Servicio;
  38. use App\Entity\Listaprecio;
  39. use App\Entity\Paquete;
  40. use App\Entity\Administradora;
  41. use App\Entity\Paraclinico;
  42. use App\Entity\Imagen;
  43. use App\Entity\Formula;
  44. use App\Entity\Procedimiento;
  45. use App\Entity\Vacuna;
  46. use App\Entity\EstadoCivil;
  47. use App\Entity\Factura;
  48. use App\Entity\FacturaItem;
  49. use App\Entity\GrupoFormula;
  50. use App\Entity\GrupoImagen;
  51. use App\Entity\GrupoParaclinico;
  52. use App\Entity\Escolaridad;
  53. use App\Entity\Terapia;
  54. use App\Entity\AntecedentePersonal;
  55. use App\Entity\AtencionMedicamento;
  56. use App\Entity\Unidad;
  57. use App\Entity\Finalidad;
  58. use App\Entity\CausaExterna;
  59. use App\Entity\Diploma;
  60. use App\Entity\Atencion;
  61. use App\Entity\MetricaAtencion;
  62. use App\Entity\Diagnostico;
  63. use App\Entity\Atencionadjunto;
  64. use App\Entity\Catalogo;
  65. use App\Entity\Plantilla;
  66. use App\Entity\Orden;
  67. use App\Entity\Especialidad;
  68. use App\Entity\Idioma;
  69. use App\Entity\Eps;
  70. use App\Entity\Clasificacionaseguradora;
  71. use App\Entity\Convenio;
  72. use App\Entity\Estadoconvenio;
  73. use App\Entity\Modalidadpago;
  74. use App\Entity\Planbeneficio;
  75. use App\Entity\Prediagnostico;
  76. use App\Entity\Prediagnosactivo;
  77. use App\Entity\MetodoPago;
  78. use App\Entity\Metrica;
  79. use App\Entity\Alergia;
  80. use App\Entity\Medicamento;
  81. use App\Entity\Usuario;
  82. use App\Entity\Otpregister;
  83. use App\Form\PerfilmedicoType;
  84. use App\Form\PacienteType;
  85. use App\Form\AtencionType;
  86. use App\Repository\ImagenRepository;
  87. use App\Service\QI;
  88. // use App\Service\MedintiaService;
  89. use Symfony\Component\Form\Extension\Core\Type\TextType;
  90. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  91. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  92. use Symfony\Component\Form\Extension\Core\Type\DateType;
  93. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  94. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  95. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  96. class MedicoController extends AbstractController
  97. {
  98.     private  $qi;
  99.     // private  $medintia;
  100.     private $userManager;
  101.     private $retryTtl;
  102.     private $tokenGenerator;
  103.     private $eventDispatcher;
  104.     private $authorization;
  105.     public function __construct(QI $qiUserManagerInterface $userManager,TokenGeneratorInterface $tokenGeneratorEventDispatcherInterface $eventDispatcher,AuthorizationCheckerInterface $authorization)
  106.     {
  107.         $this->qi $qi;
  108.         $this->userManager $userManager;
  109.         $this->retryTtl 7200;
  110.         $this->tokenGenerator $tokenGenerator;
  111.         $this->eventDispatcher $eventDispatcher;
  112.         $this->authorization $authorization;
  113.         // $this->medintia = $medintia;
  114.     }
  115.     /**
  116.      * @Route("/medico", name="medico")
  117.      */
  118.     public function index(): Response
  119.     {
  120.         return $this->render('medico/index.html.twig', [
  121.             'controller_name' => 'MedicoController',
  122.         ]);
  123.     }
  124.         //MEDICOS
  125.     /**
  126.      * @Route("/home_medicos", name="home_medicos")
  127.      */
  128.     public function homeMedicos(Request $request)  
  129.     {
  130.         $user $this->getUser();
  131.         if ($user) {
  132.             // dd($user);
  133.             if ($this->isGranted('ROLE_MEDICO')) {
  134.                 // dd($user->getId());
  135.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  136.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  137.                 // $autorizacion = $this->getDoctrine()->getRepository(Autorizacionhistorial::class)->findAll();
  138.                 // dd($autorizacion);
  139.                 if (!$perfilmedico) {
  140.                     return $this->redirectToRoute('configuracion_medico');
  141.                 }
  142.                 if ($request->query->get('perfil') === null && $perfilmedico->getRethus() === null) {
  143.                     return $this->redirectToRoute('configuracion_medico');
  144.                 }
  145.                 return $this->render('medicos/home.html.twig', [
  146.                     'perfilmedico' => $perfilmedico,
  147.                     'usuario' => $user
  148.                 ]);
  149.             }
  150.             if ($this->isGranted('ROLE_PACIENTE')) {
  151.                 return $this->redirectToRoute('home_pacientes');
  152.             }
  153.         }
  154.         
  155.         return $this->redirectToRoute('homepage');
  156.     }
  157.         /**
  158.      * @Route("/perfil_medico", name="perfil_medico") 
  159.      */
  160.     public function perfilMedico(Request $request
  161.     {
  162.         $user $this->getUser();
  163.         if ($user) {
  164.             if ($this->isGranted('ROLE_MEDICO')) {
  165.                 $um $this->userManager;
  166.                 $user $um->findUserBy(array('uid' => $user->getUid() ));
  167.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  168.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  169.                 
  170.                 if (!$perfilmedico) {
  171.                      return $this->redirectToRoute('configuracion_medico');
  172.                 }
  173.                 $especialidades $perfilmedico->getEspecialidades();
  174.                 $listaespecialidades '';
  175.                 $esp = [];
  176.                 foreach($especialidades as $key => $e) {
  177.                     $esp[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
  178.                     $listaespecialidades $listaespecialidades strval($e->getId()) . ';';
  179.                 }
  180.                 $listaespecialidades substr($listaespecialidades0, -1);
  181.                 $idiomas $perfilmedico->getIdiomas();
  182.                 $listaidiomas '';
  183.                 $idi = [];
  184.                 foreach($idiomas as $key => $e) {
  185.                     $idi[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
  186.                     $listaidiomas $listaidiomas strval($e->getId()) . ';';
  187.                 }
  188.                 $listaidiomas substr($listaidiomas0, -1);
  189.                 
  190.                 $form $this->createForm(PerfilmedicoType::class, $perfilmedico, ['nombre' => $user->getNombre(), 'apellido' => $user->getApellido(), 'celular' => $user->getCelular(), 'tipoformulario' => 'perfilmedico' ]);
  191.                 $form->handleRequest($request);
  192.                 if ($form->isSubmitted()) {
  193.                     $em $this->getDoctrine()->getManager();
  194.                     $perfilmedico $form->getData();
  195.                     $user->setNombre($form->get('nombre')->getData());
  196.                     $user->setApellido($form->get('apellido')->getData());
  197.                     $user->setDocumento($perfilmedico->getDocumento());
  198.                     $user->setCelular($form->get('celular')->getData());
  199.                     $uespecialidades $form->get('especialidadesids')->getData();
  200.                     $update_especialidades explode(";",$uespecialidades);
  201.                     $current_especialidades explode(";",$listaespecialidades);
  202.                     $add_especialidades array_diff($update_especialidades$current_especialidades);
  203.                     $remove_especialidades array_diff($current_especialidades$update_especialidades );
  204.                     foreach ($add_especialidades as $e) {
  205.                         $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
  206.                         if($especialidad)
  207.                             $perfilmedico->addEspecialidade($especialidad);
  208.                     }
  209.                     foreach ($remove_especialidades as $e) {
  210.                         $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
  211.                         if($especialidad)
  212.                             $perfilmedico->removeEspecialidade($especialidad);
  213.                     }
  214.                     $uidiomas $form->get('idiomasids')->getData();
  215.                     $update_idiomas explode(";",$uidiomas);
  216.                     $current_idiomas explode(";",$listaidiomas);
  217.                     $add_idiomas array_diff($update_idiomas$current_idiomas);
  218.                     $remove_idiomas array_diff($current_idiomas$update_idiomas );
  219.                     foreach ($add_idiomas as $i) { 
  220.                         $idioma $this->getDoctrine()->getRepository(Idioma::class)->find($i);
  221.                         if($idioma)
  222.                             $perfilmedico->addIdioma($idioma);
  223.                     }
  224.                     foreach ($remove_idiomas as $i) {
  225.                         $idioma $this->getDoctrine()->getRepository(Idioma::class)->find($i);
  226.                         if($idioma)
  227.                             $perfilmedico->removeIdioma($idioma);
  228.                     }                  
  229.                     $em->persist($perfilmedico);
  230.                     $em->flush();
  231.                     $um->updateUser($user);
  232.                     return $this->redirectToRoute('home_medicos',['perfil' => true]);
  233.                 }
  234.                 return $this->render('medicos/perfil.html.twig', [
  235.                     'form' => $form->createView(),
  236.                     'perfilmedico' => $perfilmedico,
  237.                     'submit' => 'nosubmit',
  238.                     'usuario' => $user,
  239.                     'especialidades' => $esp,
  240.                     'listaespecialidades' => $listaespecialidades,
  241.                     'idiomas' => $idi,
  242.                     'listaidiomas' => $listaidiomas
  243.                 ]);
  244.             } else {
  245.                 return $this->redirectToRoute('homepage');
  246.             }
  247.                 
  248.         }
  249.         return $this->redirectToRoute('homepage');
  250.     }
  251.     /**
  252.      * @Route("/pacientes", name="pacientes")
  253.      */
  254.     public function pacientes(Request $request)
  255.     { 
  256.         $user $this->getUser();
  257.         if ($user) {
  258.             if ($this->isGranted('ROLE_MEDICO')) {
  259.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  260.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  261.                 if (!$perfilmedico) {
  262.                     return $this->redirectToRoute('configuracion_medico');
  263.                }
  264.                 $diagnosticos '';
  265.                 if ($request->query->has('buscar')) {
  266.                     $buscar $request->query->get('buscar'1);
  267.                 } else {
  268.                     $buscar null;
  269.                 }
  270.                 if ($request->query->has('diagnostico')) {
  271.                     $diagnostico $request->query->get('diagnostico'1);
  272.                 } else {
  273.                     $diagnostico null;
  274.                 }
  275.                 if ($request->query->has('mesyear')) {
  276.                     $mesyear $request->query->get('mesyear'1);
  277.                 } else {
  278.                     $mesyear null;
  279.                 }
  280.                 $queried false;                            
  281.                 if ($buscar != null) {
  282.                     if ($buscar == 'ultimasatenciones') {
  283.                         $pacientes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  284.                             ->select('p.id''p.nombre''p.apellido','p.foto''p.fotourl''p.email','p.documento','max(a.fecha) as fecha','e.nombre as eps' )
  285.                             ->leftJoin('a.paciente''p')
  286.                             //->leftJoin('a.medico', 'm')
  287.                             ->leftJoin('p.eps','e')
  288.                             //->where('m.id = :medicoid')
  289.                             //->setParameter('medicoid', $perfilmedico->getId())
  290.                             ->groupBy('a.paciente')
  291.                             ->orderBy('fecha''desc')
  292.                             ->getQuery()
  293.                             ->getArrayResult();
  294.                         $queried true;
  295.                     } else {
  296.                         $query $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
  297.                             ->select('p.id''p.nombre''p.apellido','p.foto''p.fotourl''p.email','p.documento','e.nombre as eps' );
  298.     
  299.                         $query
  300.                             ->leftJoin('p.eps''e')
  301.                             ->Where("CONCAT(p.nombre,' ', p.apellido) like :buscar OR p.documento like :buscar OR p.email like :buscar")
  302.                             ->setParameter('buscar''%'.$buscar.'%');
  303.      
  304.                         $query->orderBy('p.nombre''asc');
  305.                         $pacientes $query->getQuery()->getResult();
  306.                         $queried true;
  307.                     }
  308.                 }
  309.                 if ($diagnostico != null) {
  310.                     $pacientes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  311.                         ->select('p.id''p.nombre''p.apellido','p.foto''p.fotourl''p.email','p.documento''d.codigo','e.nombre as eps')
  312.                         ->leftJoin('a.paciente''p')
  313.                         ->leftJoin('a.diagnosticos''d')
  314.                         // ->leftJoin('a.medico', 'm')
  315.                         ->leftJoin('p.eps''e')
  316.                         // ->where('m.id = :medicoid')
  317.                         ->AndWhere('d.codigo = :codigodiagnostico')
  318.                         // ->setParameter('medicoid', $perfilmedico->getId())
  319.                         ->setParameter('codigodiagnostico'$diagnostico)
  320.                         ->groupBy('a.paciente')
  321.                         ->orderBy('p.nombre''asc')
  322.                         ->getQuery()
  323.                         ->getArrayResult();
  324.                     $queried true;
  325.                 }
  326.                 if (!$queried) {
  327.                     $query $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
  328.                         ->select('p.id''p.nombre''p.apellido','p.foto''p.fotourl''p.email','p.documento','e.nombre as eps' )
  329.                         ->leftJoin('p.medico''m')
  330.                         ->leftJoin('p.eps''e')
  331.                         ->where(':medicoid MEMBER OF p.medico')
  332.                         ->setParameter('medicoid'$perfilmedico->getId());                        
  333.                     $query->orderBy('p.nombre''asc');
  334.                     $pacientes $query->getQuery()->getResult();
  335.                 }
  336.                 $atenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  337.                     ->select('p.id','max(a.fecha) as fecha' )
  338.                     ->join('a.paciente''p')
  339.                     ->groupBy('a.paciente')
  340.                     ->getQuery()
  341.                     ->getArrayResult();
  342.                 $paciente_ids array_column($atenciones'id');
  343.                 $fechas array_column($atenciones'fecha');
  344.                 $ultimas_atenciones array_combine($paciente_ids$fechas);
  345.                 $nuevos_pacientes = [];
  346.                 if ($mesyear) {
  347.                     //mm-yy
  348.                     $mesyear_array explode("-"$mesyear);
  349.                     foreach($ultimas_atenciones as $key => $ua) {
  350.                         $fecha_ultima_atencion_array explode("-"$ua);
  351.                         //yy-mm-dd
  352.                         if ($mesyear_array[0] == $fecha_ultima_atencion_array[1] && $mesyear_array[1] == $fecha_ultima_atencion_array[0]) {
  353.                             foreach($pacientes as $p) {
  354.                                 if ($p['id'] === $key) {
  355.                                     $nuevos_pacientes[] = $p;
  356.                                 }
  357.                             }
  358.                         }
  359.                     }
  360.                     $pacientes $nuevos_pacientes;
  361.                 }
  362.                 $fecha_comienzo $this->qi->getSetting('fecha-inicio-operacion');
  363.                 $numero_mes date("m"strtotime($fecha_comienzo));
  364.                 $interval = \DateInterval::createFromDateString('1 month');
  365.                 $hoy = new \DateTime();
  366.                 $rango = new \DatePeriod(new \DateTime($fecha_comienzo), $interval $hoy);
  367.                 foreach($rango as $date1){                    
  368.                     $numero_mes date("m"strtotime($date1->format('Y-m-d')));
  369.                     $cadena_mes $this->qi->getMes($numero_mes);
  370.                     $meses_periodo[] = array('mesyear' => $date1->format('m').'-'.$date1->format('Y'), 'mesnumero' => $date1->format('m'), 'mescadena' => $cadena_mes ,'year' => $date1->format('Y'));
  371.                 }
  372.                 return $this->render('medicos/pacientes.html.twig', [
  373.                     'usuario' => $user,
  374.                     'pacientes' => $pacientes,
  375.                     'perfilmedico' => $perfilmedico,
  376.                     'paciente_ids' => $paciente_ids,
  377.                     'ultimas_atenciones' => $ultimas_atenciones,
  378.                     'diagnosticos' => $diagnosticos,
  379.                     'codigodiagnostico' => $diagnostico,
  380.                     'meses_periodo' => $meses_periodo,
  381.                     'mesyear' => $mesyear,
  382.                     'buscar' => $buscar
  383.                 ]);
  384.             }
  385.         }
  386.         
  387.         return $this->redirectToRoute('homepage');
  388.     }
  389.     /**
  390.      * @Route("/eliminar_paciente/{id}", name="eliminar_paciente")
  391.      */
  392.     public function eliminarpaciente(Request $request$id null)
  393.     {
  394.         $user $this->getUser();
  395.         if ($user) {
  396.             if ($this->isGranted('ROLE_MEDICO')) {
  397.                 $entityManager $this->getDoctrine()->getManager();
  398.                 // dd($id);
  399.                 $paciente $this->getDoctrine()->getRepository('App:Paciente')->find($id);
  400.                 // dd($paciente);
  401.                 $entityManager->remove($paciente);
  402.                 $entityManager->flush();
  403.                 
  404.                 return $this->redirectToRoute('pacientes');
  405.             }
  406.         }
  407.         return('no autorizado');
  408.     }
  409.     /**
  410.      * @Route("/analytics", name="analytics")
  411.      */
  412.     public function Analytics(Request $request)
  413.     { 
  414.  
  415.         $user $this->getUser();
  416.         if ($user) {
  417.             if ($this->isGranted('ROLE_MEDICO')) {
  418.                 // dd($user->getId());
  419.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  420.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  421.                 if (!$perfilmedico) {
  422.                     return $this->redirectToRoute('configuracion_medico');
  423.                     dd('no tiene perfil medico');
  424.                 }
  425.                 $pacientes $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
  426.                     ->select('p')
  427.                     ->where(':medicoid MEMBER OF p.medico')
  428.                     ->setParameter('medicoid'$perfilmedico->getId())
  429.                     ->orderBy('p.nombre''asc')
  430.                     ->getQuery()->getResult();
  431.                 $metricas $this->getDoctrine()->getRepository(Metrica::class)->createQueryBuilder('m')
  432.                     ->select('m')
  433.                     ->orderBy('m.nombre''ASC')
  434.                     ->getQuery()
  435.                     ->getArrayResult();
  436.                 return $this->render('medicos/analytics.html.twig', [
  437.                     'perfilmedico' => $perfilmedico,
  438.                     'pacientes' => $pacientes,
  439.                     'metricas' => $metricas,
  440.                     'usuario' => $user
  441.                 ]);
  442.             }
  443.             if ($this->isGranted('ROLE_PACIENTE')) {
  444.                 return $this->redirectToRoute('home_pacientes');
  445.             }
  446.         }
  447.         return $this->redirectToRoute('homepage');
  448.     }
  449.         /**
  450.      * @Route("/configuraciones", name="configuraciones")
  451.      */
  452.     public function Configuraciones(Request $request)
  453.     {
  454.         $user $this->getUser();
  455.         if ($user) {
  456.             if ($this->isGranted('ROLE_MEDICO')) {
  457.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  458.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  459.                 if (!$perfilmedico) {
  460.                     return $this->redirectToRoute('configuracion_medico');
  461.                     dd('no tiene perfil medico');
  462.                 }
  463.                 return $this->render('medicos/configuraciones.html.twig', [
  464.                     'perfilmedico' => $perfilmedico,
  465.                     'usuario' => $user,
  466.                 ]);
  467.             }
  468.         }
  469.         return $this->redirectToRoute('homepage');
  470.             
  471.     }
  472.     /**
  473.      * @Route("/eliminar_diploma/{id}", name="eliminar_diploma")
  474.      */
  475.     public function eliminarDiploma(Request $request,$id)
  476.     {
  477.         $resultado = ["ok"=>true];
  478.         try {
  479.             $em $this->getDoctrine()->getManager();
  480.             $diploma $this->getDoctrine()->getRepository(Diploma::class)->find($id);
  481.             $em->remove($diploma);
  482.             $em->flush();
  483.         }catch (\Exception $e){
  484.             $resultado = ["ok"=>false,"msg"=>$e->getMessage()];
  485.         }
  486.         return new Response(json_encode($resultado));
  487.     }
  488.     /**
  489.      * @Route("/configuracion_medico", name="configuracion_medico") 
  490.      */
  491.     public function configuracionMedico(Request $request)
  492.     {
  493.         $user $this->getUser();
  494.         if ($user) {
  495.             if ($this->isGranted('ROLE_MEDICO')) {
  496.                 $um $this->userManager;
  497.                 $user $um->findUserBy(array('uid' => $user->getUid() ));
  498.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  499.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  500.                 
  501.                 $url_avatar_default $this->qi->getSetting('avatar-default');
  502.                 $nuevo_perfil false;
  503.                 if (!$perfilmedico) {
  504.                     $perfilmedico = new PerfilMedico();
  505.                     $nuevo_perfil true;
  506.                 }
  507.                 $especialidades $perfilmedico->getEspecialidades();
  508.                 $listaespecialidades '';
  509.                 $esp = [];
  510.                 foreach($especialidades as $key => $e) {
  511.                     $esp[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
  512.                     $listaespecialidades $listaespecialidades strval($e->getId()) . ';';
  513.                 }
  514.                 $listaespecialidades substr($listaespecialidades0, -1);
  515.                 $idiomas $perfilmedico->getIdiomas();
  516.                 $listaidiomas '';
  517.                 $idi = [];
  518.                 foreach($idiomas as $key => $e) {
  519.                     $idi[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
  520.                     $listaidiomas $listaidiomas strval($e->getId()) . ';';
  521.                 }
  522.                 $listaidiomas substr($listaidiomas0, -1);
  523.                 $form $this->createForm(PerfilmedicoType::class, $perfilmedico, ['nombre' => $user->getNombre(), 'apellido' => $user->getApellido()]);
  524.                 $form->handleRequest($request);
  525.                 $errors = (string)$form->getErrors(true);
  526.                 if ($form->isSubmitted() && $form->isValid()) {
  527.                     $em $this->getDoctrine()->getManager();
  528.                     
  529.                     $perfilmedico $form->getData();
  530.                     
  531.                     $diplomas_url_str $form->get('diplomas')->getData();
  532.                     $rips             $request->request->get('checkbox-rips') == 'false' 1;
  533.                     $diplomas_url explode(','$diplomas_url_str);                  
  534.                     
  535.                     $perfilmedico->setUsuario($user);
  536.                     $perfilmedico->setRips($rips);
  537.                     
  538.                     foreach($diplomas_url as $d) {
  539.                         $diploma_new = new Diploma();
  540.                         $diploma_new->setUrl($d);
  541.                         $diploma_new->setPerfilmedico($perfilmedico);
  542.                         $em->persist($diploma_new);
  543.                     }  
  544.                     
  545.                     if (!$perfilmedico->getFotourl()) {
  546.                         $perfilmedico->setFotourl($url_avatar_default);
  547.                         $perfilmedico->setFoto('avatar.png');
  548.                         // dd('no hay foto');
  549.                     }
  550.                     
  551.                     $em->persist($user);
  552.                     $em->persist($perfilmedico); 
  553.                     
  554.                     $em->flush();
  555.                     $um->updateUser($user);
  556.                     $uespecialidades $request->get('especialidadids');
  557.                     $update_especialidades explode(";",$uespecialidades);
  558.                     $current_especialidades explode(";",$listaespecialidades);
  559.                     $add_especialidades array_diff($update_especialidades$current_especialidades);
  560.                     $remove_especialidades array_diff($current_especialidades$update_especialidades );
  561.                     foreach ($add_especialidades as $e) {
  562.                         $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
  563.                         if($especialidad)
  564.                             $perfilmedico->addEspecialidade($especialidad);
  565.                     }
  566.                     foreach ($remove_especialidades as $e) {
  567.                         $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
  568.                         if($especialidad)
  569.                             $perfilmedico->removeEspecialidade($especialidad);
  570.                     }
  571.                     $uidiomas $form->get('idiomasids')->getData();
  572.                     $update_idiomas explode(";",$uidiomas);
  573.                     $current_idiomas explode(";",$listaidiomas);
  574.                     $add_idiomas array_diff($update_idiomas$current_idiomas);
  575.                     $remove_idiomas array_diff($current_idiomas$update_idiomas );
  576.                     foreach ($add_idiomas as $i) {
  577.                         $idioma $this->getDoctrine()->getRepository(Idioma::class)->find($i);
  578.                         if($idioma)
  579.                             $perfilmedico->addIdioma($idioma);
  580.                     }
  581.                     foreach ($remove_idiomas as $i) {
  582.                         $idioma $this->getDoctrine()->getRepository(Idioma::class)->find($i);
  583.                         if($idioma)
  584.                             $perfilmedico->removeIdioma($idioma);
  585.                     }
  586.                     $em->persist($perfilmedico);
  587.                     $em->flush(); 
  588.                     return $this->render('medicos/configuracion_medico.html.twig', [ 
  589.                         'form'                => $form->createView(),
  590.                         'perfilmedico'        => $perfilmedico,
  591.                         'submit'              => 'success',
  592.                         'usuario'             => $user,
  593.                         'nuevo_perfil'        => $nuevo_perfil,
  594.                         'avatar_default'      => $url_avatar_default,
  595.                         'listaidiomas'        => $listaidiomas,
  596.                         'listaespecialidades' => $listaespecialidades,
  597.                         'especialidades'      => $esp,
  598.                         'idiomas'             => $idi,
  599.                         'error'               => $errors,
  600.                     ]);
  601.                 }
  602.                 return $this->render('medicos/configuracion_medico.html.twig', [
  603.                     'form'                => $form->createView(),
  604.                     'perfilmedico'        => $perfilmedico,
  605.                     'submit'              => 'nosubmit',
  606.                     'usuario'             => $user,
  607.                     'nuevo_perfil'        => $nuevo_perfil,
  608.                     'avatar_default'      => $url_avatar_default,
  609.                     'listaidiomas'        => $listaidiomas,
  610.                     'listaespecialidades' => $listaespecialidades,
  611.                     'especialidades'      => $esp,
  612.                     'idiomas'             => $idi,
  613.                     'error'               => $errors,
  614.                 ]);
  615.             } else {
  616.                 return $this->redirectToRoute('homepage');
  617.             }
  618.                 
  619.         }
  620.         
  621.         return $this->redirectToRoute('homepage');
  622.     }
  623.     /**
  624.      * @Route("/configuracion_paciente_medico", name="configuracion_paciente_medico")
  625.      */
  626.     public function configuracionPacienteMedico(Request $request)
  627.     { 
  628.         $existe_usuario $this->userManager->findUserBy(array('documento' => '1098792371'));
  629.         $em               $this->getDoctrine()->getManager();
  630.         $user $this->getUser();
  631.         if ($user) {
  632.             if ($this->isGranted('ROLE_MEDICO')) {
  633.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  634.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  635.                 $url_avatar_default $this->qi->getSetting('avatar-default');
  636.                 $form $this->createForm(PacienteType::class);
  637.                 $form->handleRequest($request);
  638.                 $errors = (string)$form->getErrors(true);
  639.                 if ($form->isSubmitted() && $form->isValid()) {
  640.                     $paciente         $form->getData();
  641.                     $existe_usuario   $this->userManager->findUserBy(array('documento' => $form->get('documento')->getData()));
  642.                     $existe_user_mail $this->userManager->findUserBy(array('email' => $form->get('email')->getData()));
  643.                     $existe_fos_user $this->getDoctrine()->getRepository(Usuario::class)->findOneBy(array('email' => $form->get('email')->getData()));
  644.                     $isPaciente       false;
  645.                     if($existe_usuario){
  646.                         foreach($existe_usuario->getRol() as $key => $value){
  647.                             if($value == 'ROLE_PACIENTE')
  648.                                 $isPaciente true;
  649.                         }
  650.                     }
  651.                     
  652.                     if ($form->get('fumap')->getData() == 'true') {
  653.                         $paciente->setFuma(true);
  654.                     } else {
  655.                         $paciente->setFuma(false);
  656.                     }
  657.                     if ($form->get('licorp')->getData() == 'true') {
  658.                         $paciente->setLicor(true);
  659.                     } else {
  660.                         $paciente->setLicor(false);
  661.                     }
  662.                     if ($form->get('psicoactivop')->getData() == 'true') {
  663.                         $paciente->setPsicoactivo(true);
  664.                     } else {
  665.                         $paciente->setPsicoactivo(false);
  666.                     }
  667.                     if ($form->get('menor')->getData() == 'true') {
  668.                         $paciente->setMenor(true);
  669.                     } else {
  670.                         $paciente->setMenor(false);
  671.                     }
  672.                     if (!$paciente->getFoto()) {
  673.                         $paciente->setFoto('avatar.png');
  674.                         $paciente->setFotourl('/img/avatar.png');
  675.                     }
  676.                     // acudiente
  677.                     if ($form->get('nombreacudiente')->getData()) {
  678.                         $nombreacudiente=$form->get('nombreacudiente')->getData();
  679.                         $paciente->setNombreacudiente($nombreacudiente);
  680.                     }
  681.                     if ($form->get('telefonoacudiente')->getData()) {
  682.                         $telefonoacudiente=$form->get('telefonoacudiente')->getData();
  683.                         $paciente->setTelefonoacudiente($telefonoacudiente);
  684.                     }
  685.                     if ($form->get('parentezcoacudiente')->getData()) {
  686.                         $parentezcoacudiente=$form->get('parentezcoacudiente')->getData();
  687.                         $paciente->setParentezcoacudiente($parentezcoacudiente);
  688.                     }
  689.                     if ($form->get('documentoacudiente')->getData()) {
  690.                         $documentoacudiente=$form->get('documentoacudiente')->getData();
  691.                         $paciente->setDocumentoacudiente($documentoacudiente);
  692.                     }
  693.                     if ($form->get('correoacudiente')->getData()) {
  694.                         $correoacudiente=$form->get('correoacudiente')->getData();
  695.                         $paciente->setCorreoacudiente($correoacudiente);
  696.                     }
  697.                     // fin acudiente
  698.                     $alergias_ids_str $form->get('alergiasids')->getData();
  699.                     if (strlen($alergias_ids_str) > 0) {
  700.                         $alergia_ids explode(";",$alergias_ids_str);
  701.                         
  702.                         foreach($alergia_ids as $alergia_id) {
  703.                             $alergia $this->getDoctrine()->getRepository(Alergia::class)->find($alergia_id);
  704.                             if($alergia)
  705.                                 $paciente->addAlergia($alergia);
  706.                         }
  707.                     }
  708.                     $cronica_ids_str $form->get('cronicasids')->getData();
  709.                     if (strlen($cronica_ids_str) > 0) {
  710.                         $cronica_ids explode(";",$cronica_ids_str);
  711.                         foreach($cronica_ids as $cronica_id) {
  712.                             $cronica $this->getDoctrine()->getRepository(Diagnostico::class)->findOneBy(["codigo" => $cronica_id]);
  713.                             if($cronica)
  714.                                 $paciente->addCronica($cronica);
  715.                         }
  716.                     }
  717.                     $vacuna_ids_str $form->get('vacunasids')->getData();
  718.                     if (strlen($vacuna_ids_str) > 0) {
  719.                         $vacuna_ids explode(";",$vacuna_ids_str);
  720.                         foreach($vacuna_ids as $vacuna_id) {
  721.                             $vacuna $this->getDoctrine()->getRepository(Vacuna::class)->findOneBy(["codigo" => $vacuna_id]);
  722.                             if($vacuna)
  723.                                 $paciente->addVacuna($vacuna);
  724.                         }
  725.                     }
  726.                     $enfermedadesfamilia_ids_str $form->get('enfermedadesfamiliaids')->getData();
  727.                     if (strlen($enfermedadesfamilia_ids_str) > 0) {
  728.                         $enfermedadesfamilia_ids explode(";",$enfermedadesfamilia_ids_str);
  729.                         foreach($enfermedadesfamilia_ids as $enfermedadesfamilia_id) {
  730.                             $enfermedad $this->getDoctrine()->getRepository(Diagnostico::class)->findOneBy(["codigo" => $enfermedadesfamilia_id]);
  731.                             if($enfermedad)
  732.                                 $paciente->addEnfermedadesfamiliares($enfermedad);
  733.                         }
  734.                     }
  735.                     $antecendentes_personales_ids_str $form->get('antecedentespersonalesids')->getData();
  736.                     if (strlen($antecendentes_personales_ids_str) > 0) {
  737.                         $antecendentes_personales_ids explode(";",$antecendentes_personales_ids_str);
  738.                         foreach($antecendentes_personales_ids as $antecendentes_personales_id) {
  739.                             $antecedente $this->getDoctrine()->getRepository(AntecedentePersonal::class)->findOneBy(["codigo" => $antecendentes_personales_id]);
  740.                             if($antecedente)
  741.                                 $paciente->addAntecedentePersonal($antecedente);
  742.                         }
  743.                     }
  744.                     if(!$existe_usuario && !$existe_user_mail){
  745.                         $paciente->addMedico($perfilmedico);
  746.                         $paciente->setCreadoPorMedico(1);
  747.                         $em->persist($paciente);
  748.                         $em->flush();
  749.                         if(!$existe_fos_user){
  750.                             $usuario_nuevo_fire=$this->qi->createFireUser($form->get('email')->getData(), $form->get('documento')->getData(), true);
  751.                             // crear paciente por un medico como usuario
  752.                             $usuario_nuevo = new Usuario();
  753.                             $usuario_nuevo->setUid($usuario_nuevo_fire->uid);
  754.                             $usuario_nuevo->setEmail($usuario_nuevo_fire->email);
  755.                             $usuario_nuevo->setUsername($usuario_nuevo_fire->email);
  756.                             $usuario_nuevo->setUsernameCanonical($usuario_nuevo_fire->email);
  757.                             $usuario_nuevo->setProviderData(json_encode($usuario_nuevo_fire->providerData));
  758.                             $usuario_nuevo->setEnabled(true);
  759.                             $usuario_nuevo->setPassword($form->get('documento')->getData());
  760.                             $usuario_nuevo->setCreatedAt(new \DateTime());
  761.                             $usuario_nuevo->setDocumento($form->get('documento')->getData());
  762.                             $usuario_nuevo->setRoles(array("ROLE_PACIENTE"));
  763.                             $em->persist($usuario_nuevo);
  764.                             $em->flush();      
  765.                             
  766.                             // envia correo de registro
  767.                             $url 'mailings/registro-paciente-desdemedico.html.twig';              
  768.                             $html_email =  $this->renderView($url);            
  769.                             $respuesta_email =$this->qi->sendMail("Tu registro como paciente ha sido exitoso"$usuario_nuevo->getEmail(), $html_email);                            
  770.                             
  771.                         }
  772.                         return $this->redirectToRoute('paciente_interna',[ 'id' => $paciente->getId()]);
  773.                     }
  774.                     if($existe_user_mail){
  775.                         if(!$errors){
  776.                             $errors .= 'ERROR: El correo que ha ingresado ya existe.'
  777.                         }
  778.                     }   
  779.                     if($existe_usuario){
  780.                         if($isPaciente){
  781.                             if(!$errors){
  782.                                 $errors .= 'ERROR: El documento que ha ingresado ya existe.'
  783.                             }
  784.                         }
  785.                     }
  786.                     
  787.                     if(!$existe_user_mail && !$isPaciente){
  788.                         $paciente->addMedico($perfilmedico);
  789.                         $paciente->setCreadoPorMedico(1);
  790.                         $em->persist($paciente);
  791.                         $em->flush();
  792.                         if(!$existe_fos_user){
  793.                             $usuario_nuevo_fire=$this->qi->createFireUser($form->get('email')->getData(), $form->get('documento')->getData(), true);
  794.                             // dd($usuario_nuevo_fire);
  795.                             // crear paciente por un medico como usuario
  796.                             $usuario_nuevo = new Usuario();
  797.                             $usuario_nuevo->setUid($usuario_nuevo_fire->uid);
  798.                             $usuario_nuevo->setEmail($usuario_nuevo_fire->email);
  799.                             $usuario_nuevo->setUsername($usuario_nuevo_fire->email);
  800.                             $usuario_nuevo->setUsernameCanonical($usuario_nuevo_fire->email);
  801.                             $usuario_nuevo->setProviderData(json_encode($usuario_nuevo_fire->providerData));
  802.                             $usuario_nuevo->setEnabled(true);
  803.                             $usuario_nuevo->setPassword($form->get('documento')->getData());
  804.                             $usuario_nuevo->setCreatedAt(new \DateTime());
  805.                             // $user->setNombre($usuario_nuevo_fire->nombre);
  806.                             $usuario_nuevo->setDocumento($form->get('documento')->getData());
  807.                             // $user->setApellido($usuario_nuevo_fire->apellido);
  808.                             $em->persist($usuario_nuevo);
  809.                             $em->flush();     
  810.                             
  811.                             // envia correo de registro
  812.                             $url 'mailings/registro-paciente.html.twig';              
  813.                             $html_email =  $this->renderView($url);            
  814.                             $respuesta_email =$this->qi->sendMail("Tu registro como paciente ha sido exitoso"$usuario_nuevo->getEmail(), $html_email);   
  815.                         }
  816.                         return $this->redirectToRoute('paciente_interna',[ 'id' => $paciente->getId()]);
  817.                     }
  818.                     if (!$existe_user_mail && $form->get('email')->getData()) {
  819.                         $usuario_nuevo_fire=$this->qi->createFireUser($form->get('email')->getData(), $form->get('documento')->getData(), true);
  820.                         // crear paciente por un medico como usuario
  821.                         $usuario_nuevo = new Usuario();
  822.                         $usuario_nuevo->setUid($usuario_nuevo_fire->uid);
  823.                         $usuario_nuevo->setEmail($usuario_nuevo_fire->email);
  824.                         $usuario_nuevo->setUsername($usuario_nuevo_fire->email);
  825.                         $usuario_nuevo->setUsernameCanonical($usuario_nuevo_fire->email);
  826.                         $usuario_nuevo->setProviderData(json_encode($usuario_nuevo_fire->providerData));
  827.                         $usuario_nuevo->setEnabled(true);
  828.                         $usuario_nuevo->setPassword($form->get('documento')->getData());
  829.                         $usuario_nuevo->setCreatedAt(new \DateTime());
  830.                         $usuario_nuevo->setDocumento($form->get('documento')->getData());
  831.                         $em->persist($usuario_nuevo);
  832.                         $em->flush();
  833.                         // envia correo de registro
  834.                         $url 'mailings/registro-paciente.html.twig';              
  835.                         $html_email =  $this->renderView($url);            
  836.                         $respuesta_email =$this->qi->sendMail("Tu registro como paciente ha sido exitoso"$usuario_nuevo->getEmail(), $html_email);  
  837.                         
  838.                     }
  839.                 }
  840.                 $alergias $this->getDoctrine()->getRepository(Alergia::class)->createQueryBuilder('a')
  841.                     ->select('a')
  842.                     ->orderBy('a.nombre''ASC')
  843.                     ->getQuery()
  844.                     ->getArrayResult();
  845.                 $cronicas $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
  846.                     ->select('d')
  847.                     ->orderBy('d.descripcion''ASC')
  848.                     ->getQuery()
  849.                     ->getArrayResult();
  850.                 $antecendentes_personales $this->getDoctrine()->getRepository(AntecedentePersonal::class)->createQueryBuilder('d')
  851.                     ->select('d')
  852.                     ->orderBy('d.descripcion''ASC')
  853.                     ->getQuery()
  854.                     ->getArrayResult();
  855.                 $vacunas $this->getDoctrine()->getRepository(Vacuna::class)->createQueryBuilder('d')
  856.                     ->select('d')
  857.                     ->orderBy('d.nombre''ASC')
  858.                     ->getQuery()
  859.                     ->getArrayResult();
  860.                     
  861.                 
  862.                 return $this->render('medicos/configuracion_paciente.html.twig', [  
  863.                     'form'                     => $form->createView(),
  864.                     'submit'                   => 'nosubmit'
  865.                     'perfilmedico'             => $perfilmedico,
  866.                     'url_avatar_default'       => $url_avatar_default,
  867.                     'alergias'                 => $alergias,
  868.                     'cronicas'                 => $cronicas,
  869.                     'vacunas'                  => $vacunas,
  870.                     'antecendentes_personales' => $antecendentes_personales,
  871.                     'error'                    => $errors
  872.                     'usuario' => $user,
  873.                 ]);
  874.             } else {
  875.                 return $this->redirectToRoute('homepage');
  876.             }
  877.                 
  878.         }
  879.         
  880.         return $this->redirectToRoute('homepage');
  881.     }
  882.     /**
  883.      * @Route("/validar_crearpaciente_pormedic_register", name="validar_crearpaciente_pormedic_register")
  884.      */
  885.     public function validar_crearpaciente_pormedic_register(Request $request){
  886.         $mensaje = array('ok' => true);
  887.         if ($this->isGranted('ROLE_MEDICO')){
  888.             $body=json_decode($request->getContent()); 
  889.             $tipo_documento=$body->tipo_documento;
  890.             $documento=$body->documento
  891.             $email=$body->email;    
  892.             $mensaje = array('ok' => true);
  893.             $pacienteexist$this->getDoctrine()->getRepository(Paciente::class)->findBy(['tipo_documento' => $tipo_documento,'documento' => $documento]);
  894.             $usuarioexist$this->getDoctrine()->getRepository(Usuario::class)->findBy(['email' => $email]);
  895.             if($pacienteexist || $usuarioexist){
  896.                 if($pacienteexist){
  897.                     $mensaje = array('ok'=>false,'mensaje'=>"El documento ya existe");
  898.                 }else{
  899.                     $mensaje = array('ok'=>false,'mensaje'=>"El email ya existe");
  900.                 }
  901.             }
  902.         }
  903.         $json json_encode($mensaje);
  904.         return new Response($json);
  905.     }
  906.     /**
  907.      * @Route("/validar_crearpaciente_register", name="validar_crearpaciente_register")
  908.      */
  909.     public function validar_crearpaciente_register(Request $request){
  910.         $body=json_decode($request->getContent()); 
  911.         $tipo_documento=$body->tipo_documento;
  912.         $documento=$body->documento
  913.         $email=$body->email;        
  914.         $pacienteexist$this->getDoctrine()->getRepository(Paciente::class)->findBy(['tipo_documento' => $tipo_documento,'documento' => $documento]);
  915.         $usuarioexist$this->getDoctrine()->getRepository(Usuario::class)->findBy(['email' => $email]);
  916.         if($pacienteexist || $usuarioexist){
  917.             if($pacienteexist){
  918.                 $mensaje = array('ok'=>false,'mensaje'=>"El documento ya existe");
  919.             }else{
  920.                 $mensaje = array('ok'=>false,'mensaje'=>"El email ya existe");
  921.             }
  922.         }else{            
  923.             if (!$this->isGranted('ROLE_MEDICO')){
  924.                 $hoy = new \DateTime();
  925.                 // $otp = rand();
  926.                 $otp random_int(100000999999);
  927.                 $em $this->getDoctrine()->getManager();
  928.                 $otp_existe$this->getDoctrine()->getRepository(Otpregister::class)->findOneBy(['email' => $email]);
  929.                 if($otp_existe){
  930.                     $otp_existe->setOtp($otp);            
  931.                     $otp_existe->setCreatedAt($hoy);
  932.                     $em->persist($otp_existe);
  933.                     $em->flush();
  934.                 }else{
  935.                     $nuevo_otp = new Otpregister();
  936.                     $nuevo_otp->setEmail($email);
  937.                     $nuevo_otp->setOtp($otp);            
  938.                     $nuevo_otp->setCreatedAt($hoy);
  939.                     $em->persist($nuevo_otp);
  940.                     $em->flush();
  941.                 }            
  942.                 $html_email $this->renderView('mailings/registro_pac_codverif.html.twig', [
  943.                     'codigo' => $otp            
  944.                 ]); //modificar el contenido de la vista del correo  
  945.                 $this->qi->sendMail("Registro Medintia: Código de verificación"$email$html_email);
  946.                 $mensaje = array('ok' => true);
  947.             }else{
  948.                 $html_email $this->renderView('mailings/registro-paciente-desdemedico.html.twig', [
  949.                 ]);          
  950.                 $this->qi->sendMail("Registro en Medintia"$email$html_email);
  951.                 $mensaje = array('ok' => true);
  952.             }   
  953.             
  954.         }
  955.         $json json_encode($mensaje);
  956.         return new Response($json);
  957.     }
  958.     /**
  959.      * @Route("/validar_crearmedico_register", name="validar_crearmedico_register")
  960.      */
  961.     public function validar_crearmedico_register(Request $request){
  962.         $body=json_decode($request->getContent());
  963.         $tipo_documento=$body->tipo_documento;
  964.         $documento=$body->documento;
  965.         $email=$body->email;        
  966.         $medicoexist$this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['tipo_documento' => $tipo_documento'documento' => $documento]);
  967.         $usuarioexist$this->getDoctrine()->getRepository(Usuario::class)->findBy(['email' => $email]);
  968.         
  969.         if($medicoexist || $usuarioexist ){
  970.             if($medicoexist){
  971.                 $mensaje = array('ok'=>false,'mensaje'=>"El documento ya está siendo usado");
  972.             }else{
  973.                 $mensaje = array('ok'=>false,'mensaje'=>"El email ya existe");
  974.             }
  975.         }else{
  976.             $hoy = new \DateTime();
  977.             // $otp = rand();
  978.             $otp random_int(100000999999);
  979.             $em $this->getDoctrine()->getManager();
  980.             $otp_existe$this->getDoctrine()->getRepository(Otpregister::class)->findOneBy(['email' => $email]);
  981.             if($otp_existe){
  982.                 $otp_existe->setOtp($otp);            
  983.                 $otp_existe->setCreatedAt($hoy);
  984.                 $em->persist($otp_existe);
  985.                 $em->flush();
  986.             }else{
  987.                 $nuevo_otp = new Otpregister();
  988.                 $nuevo_otp->setEmail($email);
  989.                 $nuevo_otp->setOtp($otp);            
  990.                 $nuevo_otp->setCreatedAt($hoy);
  991.                 $em->persist($nuevo_otp);
  992.                 $em->flush();
  993.             }            
  994.             $html_email $this->renderView('mailings/registro_med_codverif.html.twig', [
  995.                 'codigo' => $otp            
  996.             ]); //modificar el contenido de la vista del correo  
  997.             $this->qi->sendMail("Registro Medintia: Código de verificación"$email$html_email);
  998.             $mensaje = array('ok' => true);
  999.         }
  1000.         $json json_encode($mensaje);
  1001.         return new Response($json);
  1002.     }
  1003.     /**
  1004.      * @Route("/validacion_otp", name="validacion_otp") 
  1005.      */
  1006.     public function validacion_otp(Request $request){
  1007.         $body=json_decode($request->getContent());
  1008.         $email=$body->email;   
  1009.         $otp=$body->otp;          
  1010.         
  1011.         $registro_otp$this->getDoctrine()->getRepository(Otpregister::class)->findOneBy(['email' => $email]);
  1012.         $otp_r=$registro_otp->getOtp();
  1013.         // dd($otp_r, $otp);
  1014.         if($otp_r == $otp ){
  1015.             $mensaje = array('ok' => true);
  1016.         }else{
  1017.             $mensaje = array('ok'=>false,'mensaje'=>"El código no coincide.");
  1018.         }
  1019.     
  1020.         $json json_encode($mensaje);
  1021.         return new Response($json);        
  1022.     }
  1023.     
  1024.     /**
  1025.      * @Route("/nueva_atencion/{id}", name="nueva_atencion")
  1026.      */
  1027.     public function nuevaAtencion(Request $request$id null)
  1028.     {
  1029.         $user $this->getUser();
  1030.         if ($user) {
  1031.             if ($this->isGranted('ROLE_MEDICO')) {
  1032.                 $perfilmedico          $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  1033.                 $paciente              $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);
  1034.                 $especialidades_medico '';
  1035.                 if($perfilmedico)
  1036.                     $especialidades_medico_esp=[];
  1037.                     $especialidades_medico $perfilmedico->getEspecialidades();
  1038.                     foreach( $especialidades_medico as $em) {
  1039.                         if(count($em->getSintomas()) >= 1){
  1040.                             $especialidades_medico_esp[] = $em;
  1041.                         }
  1042.                     }
  1043.                 $atenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  1044.                     ->select('a.id''a.motivo''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid''u.nombre''u.apellido')
  1045.                     ->leftJoin('a.medico''m')
  1046.                     ->leftJoin('m.usuario''u')
  1047.                     ->leftJoin('m.especialidad''e')
  1048.                     ->where('a.paciente = :pacienteid')
  1049.                     ->setParameter('pacienteid'$id)
  1050.                     ->orderBy('a.fecha''desc')
  1051.                     ->getQuery()
  1052.                     ->getResult();
  1053.                 $ultimasatenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  1054.                     ->select('a.id''a.motivo''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid''u.nombre''u.apellido')
  1055.                     ->leftJoin('a.medico''m')
  1056.                     ->leftJoin('m.usuario''u')
  1057.                     ->leftJoin('m.especialidad''e')
  1058.                     ->where('a.paciente = :pacienteid')
  1059.                     ->setParameter('pacienteid'$id)
  1060.                     ->setMaxResults(5)
  1061.                     ->orderBy('a.fecha''desc')
  1062.                     ->getQuery()
  1063.                     ->getResult();
  1064.                 $ordenes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  1065.                     ->select('a')
  1066.                     ->leftJoin('a.medico''m')
  1067.                     ->leftJoin('m.usuario''u')
  1068.                     ->leftJoin('m.especialidad''e')
  1069.                     ->where('a.paciente = :pacienteid')
  1070.                     ->setParameter('pacienteid'$id)
  1071.                     ->orderBy('a.fecha''desc')
  1072.                     ->getQuery()
  1073.                     ->getResult();
  1074.                 $atenciones_formulas $this->getDoctrine()->getRepository(AtencionMedicamento::class)->createQueryBuilder('d')
  1075.                     ->select('a.id''a.recomendacion''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid''u.nombre''u.apellido''md.nombre as formula_descripcion''md.id as formula_codigo','a.id as atencionid',)
  1076.                     ->leftJoin('d.atencion''a')
  1077.                     ->leftJoin('a.medico''m')
  1078.                     ->leftJoin('m.usuario''u')
  1079.                     ->leftJoin('m.especialidad''e')
  1080.                     ->leftJoin('d.medicamento''md')
  1081.                     ->where('a.paciente = :pacienteid')
  1082.                     ->setParameter('pacienteid'$id)
  1083.                     ->orderBy('a.fecha''desc')
  1084.                     ->getQuery()
  1085.                     ->getArrayResult();
  1086.                 $especialidades $this->getDoctrine()->getRepository(Especialidad::class)->findAll();
  1087.                 // $especialidades = $perfilmedico->getEspecialidades();
  1088.                 $especialidades_ids = [];
  1089.                 foreach( $especialidades as $e) {
  1090.                     $especialidades_ids[] = $e->getId();
  1091.                 }
  1092.                 $prediagnosticos_todos $this->getDoctrine()->getRepository(Prediagnostico::class)->createQueryBuilder('p')
  1093.                     ->select('e.id','e.nombre')
  1094.                     ->leftJoin('p.especialidad''e')
  1095.                     ->where('p.especialidad in (:esp)')
  1096.                     ->setParameter('esp'$especialidades_ids)
  1097.                     ->groupBy('e.id')
  1098.                     ->getQuery()
  1099.                     ->getArrayResult();
  1100.                 $url $this->generateUrl('prediagnostico_directo',['userId'=>$paciente->getId(),"id"=>1], UrlGenerator::ABSOLUTE_URL);
  1101.                 return $this->render('medicos/nueva_atencion.html.twig', [ 
  1102.                     'paciente'                       => $paciente,
  1103.                     'perfilmedico'                   => $perfilmedico,
  1104.                     'atenciones'                     => $atenciones,
  1105.                     'ultimasatenciones'              => $ultimasatenciones,
  1106.                     'ordenes'                        => $ordenes,
  1107.                     'especialidades_prediagnosticos' => $prediagnosticos_todos,
  1108.                     'atenciones_formulas'            => $atenciones_formulas,
  1109.                     'url'                            => $url,
  1110.                     'especialidades_medico'          => $especialidades_medico_esp
  1111.                 ]);
  1112.             }
  1113.         }
  1114.         return('no autorizado');
  1115.     }
  1116.     /**
  1117.      * @Route("/listado_prediagnosticos/{id}", name="listado_prediagnosticos")
  1118.      */
  1119.     public function listadoPrediagnosticos(Request $request$id null)
  1120.     {
  1121.         $user $this->getUser();
  1122.         if ($user) {
  1123.             if ($this->isGranted('ROLE_MEDICO')) {
  1124.                 $perfilmedico          $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  1125.                 $paciente              $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);
  1126.                 $especialidades_medico '';
  1127.                 if($perfilmedico)
  1128.                     $especialidades_medico $perfilmedico->getEspecialidades();
  1129.                 $especialidades $this->getDoctrine()->getRepository(Especialidad::class)->findAll();
  1130.                 $especialidades_ids = [];
  1131.                 foreach( $especialidades as $e) {
  1132.                     $especialidades_ids[] = $e->getId();
  1133.                 }
  1134.                 $prediagnostico_activo $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findBy(['vencido'=>false,'paciente' => $paciente,"medico"=>$perfilmedico],array("id"=>"desc"));
  1135.                 $prediagnosticos_todos $this->getDoctrine()->getRepository(Prediagnostico::class)->createQueryBuilder('p')
  1136.                     ->select('e.id','e.nombre')
  1137.                     ->leftJoin('p.especialidad''e')
  1138.                     ->where('p.especialidad in (:esp)')
  1139.                     ->setParameter('esp'$especialidades_ids)
  1140.                     ->groupBy('e.id')
  1141.                     ->getQuery()
  1142.                     ->getArrayResult();
  1143.                 $url $this->generateUrl('prediagnostico_directo',['userId'=>$paciente->getId(),"id"=>1], UrlGenerator::ABSOLUTE_URL);
  1144.                 return $this->render('pacientes/mis_prediagnosticos.html.twig', [
  1145.                     'url'                            => $url,
  1146.                     'paciente'                       => $paciente,
  1147.                     'perfilmedico'                   => $perfilmedico,
  1148.                     'especialidades_prediagnosticos' => $prediagnosticos_todos,
  1149.                     'prediagnostico_activo'          => $prediagnostico_activo,
  1150.                     'especialidades_medico'          => $especialidades_medico
  1151.                 ]);
  1152.             }
  1153.         }
  1154.         return $this->redirectToRoute('homepage');
  1155.     }
  1156.     /**
  1157.      * @Route("/consulta_nueva/{id}", name="consulta_nueva")
  1158.      * @Route("/consulta_actual/{id}", name="consulta_actual")
  1159.      */
  1160.     public function consultaActual(Request $request$id null)
  1161.     { 
  1162.         $user $this->getUser();
  1163.         if ($user) {
  1164.             if ($this->isGranted('ROLE_MEDICO')) {
  1165.                 $entityManager $this->getDoctrine()->getManager();
  1166.                 $paciente $this->getDoctrine()->getRepository('App:Paciente')->find($id);
  1167.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  1168.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  1169.                 $plantillas $this->getDoctrine()->getRepository(Plantilla::class)->createQueryBuilder('p')
  1170.                 ->select('p')
  1171.                 ->Where("p.medico = :medico")
  1172.                 ->setParameter('medico'$perfilmedico->getId())
  1173.                 ->orderBy('p.nombre''ASC')
  1174.                 ->getQuery()
  1175.                 ->getArrayResult();
  1176.                 $prediagnostico_activo $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findOneBy(['paciente' => $paciente'medico' => $perfilmedico'activo' => false],array("id"=>"desc"),1);
  1177.                 $route $request->attributes->get('_route');
  1178.                 if($route === 'consulta_actual')
  1179.                     $atencion $this->getDoctrine()->getRepository(Atencion::class)->findOneBy(['paciente' => $paciente],array("id"=>"desc"));
  1180.                 else
  1181.                     $atencion = new Atencion();
  1182.                 $form $this->createForm(AtencionType::class,$atencion );
  1183.                 $form->handleRequest($request);
  1184.                 if ($form->isSubmitted() && $form->isValid()) {
  1185.                     $hoy = new \DateTime();
  1186.                     $fecha DATE_FORMAT($hoy'Y-m-d');
  1187.                     $hora DATE_FORMAT($hoy,'H:i:s');
  1188.                     $em $this->getDoctrine()->getManager();
  1189.                     $atencion $form->getData();
  1190.                     $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  1191.                     $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  1192.                     $filenames             $request->request->get('filenames');
  1193.                     $fileurls              $request->request->get('fileurls');
  1194.                     $diagnosticos_ids_str  $request->request->get('diagnosticosids');
  1195.                     $paraclinicos_ids_str  $request->request->get('paraclinicosids');
  1196.                     $procedimiento_ids_str $request->request->get('procedimientoids');
  1197.                     $remisiones_ids_str    $request->request->get('remisionesids');
  1198.                     $formulas_ids_str      $request->request->get('formulasids');
  1199.                     $terapias_ids_str      $request->request->get('terapiasids');
  1200.                     $imagenes_ids_str      $request->request->get('imagenesids');
  1201.                     $metricas_ids_str      $request->request->get('metricasids');
  1202.                     $incapacidad           $request->request->get('incapacidad');
  1203.                     $recomendaciones       $request->request->get('recomendaciones');
  1204.                     $atencion->setFecha(new \DateTime());
  1205.                     $atencion->setPaciente($paciente);
  1206.                     $atencion->setMedico($perfilmedico);
  1207.                     $atencion->setIncapacidad($incapacidad);
  1208.                     $atencion->setRecomendacion($recomendaciones);
  1209.                     if($filenames){
  1210.                         foreach($filenames as $key => $value) {
  1211.                             $nuevo_atencion_adjunto = new AtencionAdjunto();
  1212.                             $nuevo_atencion_adjunto->setNombre($value);
  1213.                             $nuevo_atencion_adjunto->setUrl($fileurls[$key]);
  1214.                             $atencion->addAdjunto($nuevo_atencion_adjunto);
  1215.                         }
  1216.                     }
  1217.                     $diagnosticosSugeridos=[];
  1218.                     if ($prediagnostico_activo) {
  1219.                         $diagnosticosSugeridos $prediagnostico_activo->getPrediagnosticos()->getValues();
  1220.                         foreach ($diagnosticosSugeridos as $s){
  1221.                             $d $s->getPrediagnostico()->getSugerencia();
  1222.                             $d->setVecesSugerido($d->getVecesSugerido()+1);
  1223.                             $em->persist($d);
  1224.                             $em->flush();
  1225.                             $diagnosticosSugeridos[]=$d;
  1226.                         }
  1227.                         $prediagnostico_activo->setActivo(false);
  1228.                         $em->persist($prediagnostico_activo);
  1229.                     }
  1230.                     $diagnosticos_ids explode(";",$diagnosticos_ids_str);
  1231.                     if(strlen($diagnosticos_ids_str) > 0){
  1232.                         foreach($diagnosticos_ids as $diagnostico_id) {
  1233.                             $diagnostico $this->getDoctrine()->getRepository(Diagnostico::class)->find($diagnostico_id);
  1234.                             $atencion->addDiagnostico($diagnostico);
  1235.                             if($this->objectinArray($diagnostico,$diagnosticosSugeridos)){
  1236.                                 $diagnostico->setAciertos($diagnostico->getAciertos()+1);
  1237.                                 $em->persist($diagnostico);
  1238.                                 $em->flush();
  1239.                             }
  1240.                         }
  1241.                     }
  1242.                     if (strlen($procedimiento_ids_str) > 0) {
  1243.                         $procedimiento_ids explode(";",$procedimiento_ids_str);
  1244.                         foreach($procedimiento_ids as $procedimiento_id) {
  1245.                             $procedimiento $this->getDoctrine()->getRepository(Procedimiento::class)->find($procedimiento_id);
  1246.                             if($procedimiento) {
  1247.                                 $atencion->addAutorizacione($procedimiento);
  1248.                             }
  1249.                         }
  1250.                     }
  1251.                     if (strlen($remisiones_ids_str ) > 0) {
  1252.                         $remisiones_ids explode(";",$remisiones_ids_str );
  1253.                         foreach($remisiones_ids as $remision_id) {
  1254.                             $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->find($remision_id);
  1255.                             if($especialidad) {
  1256.                                 $atencion->addRemision($especialidad);
  1257.                             }
  1258.                         }
  1259.                     }
  1260.                     if (strlen($paraclinicos_ids_str) > 0) {
  1261.                         $paraclinico_ids explode(";",$paraclinicos_ids_str);
  1262.                         foreach($paraclinico_ids as $paraclinico_id) {
  1263.                             $paraclinico $this->getDoctrine()->getRepository(Paraclinico::class)->find($paraclinico_id);
  1264.                             if($paraclinico) {
  1265.                                 $atencion->addParaclinico($paraclinico);
  1266.                             }
  1267.                         }
  1268.                     }
  1269.                     if (strlen($formulas_ids_str) > 0) {
  1270.                         $formulas_ids explode(";",$formulas_ids_str);
  1271.                         foreach($formulas_ids as $formula_id) {
  1272.                             $formulas $this->getDoctrine()->getRepository(Formula::class)->find($formula_id);
  1273.                             if($formulas) {
  1274.                                 $atencion->addFormula($formulas);
  1275.                             }
  1276.                         }
  1277.                     }
  1278.                     if (strlen($terapias_ids_str) > 0) {
  1279.                         $terapias_ids explode(";",$terapias_ids_str);
  1280.                         foreach($terapias_ids as $terapia_id) {
  1281.                             $terapias $this->getDoctrine()->getRepository(Terapia::class)->find($terapia_id);
  1282.                             if($terapias) {
  1283.                                 $atencion->addTerapium($terapias);
  1284.                             }
  1285.                         }
  1286.                     }
  1287.                     if (strlen($imagenes_ids_str) > 0) {
  1288.                         $imagenes_ids explode(";",$imagenes_ids_str);
  1289.                         foreach($imagenes_ids as $imagenes_id) {
  1290.                             $imagenes $this->getDoctrine()->getRepository(Imagen::class)->find($imagenes_id);
  1291.                             if($imagenes) {
  1292.                                 $atencion->addImagene($imagenes);
  1293.                             }
  1294.                         }
  1295.                     }
  1296.                     $em->persist($atencion);
  1297.                     $em->flush();
  1298.                     if (strlen($formulas_ids_str) > 0) {
  1299.                         $formulas_ids explode(";",$formulas_ids_str);
  1300.                         foreach($formulas_ids as $formula_id) {
  1301.                             $medicamento $this->getDoctrine()->getRepository(Medicamento::class)->find($formula_id);
  1302.                             $recomendaciones     $request->request->get('formula-'.$formula_id);
  1303.                             if($medicamento) {
  1304.                                 $atencion_medico = new AtencionMedicamento();
  1305.                                 $atencion_medico->setAtencion($atencion);
  1306.                                 $atencion_medico->setMedicamento($medicamento);
  1307.                                 if(!$recomendaciones)
  1308.                                     $recomendaciones 'Sin recomendación';
  1309.                                 $atencion_medico->setRecomendacion($recomendaciones);
  1310.                                 $atencion_medico->setFecha($hoy);
  1311.                                 $em->persist($atencion_medico);
  1312.                                 $em->flush();
  1313.                             }
  1314.                         }
  1315.                     }
  1316.                     if (strlen($metricas_ids_str) > 0) {
  1317.                         $metricas_ids explode(";",$metricas_ids_str);
  1318.                         foreach($metricas_ids as $metrica_id) {
  1319.                             $total      $request->request->get('metrica-total-'.$metrica_id);
  1320.                             $unidad_id  $request->request->get('metrica-unidad-'.$metrica_id);
  1321.                             $metrica    $this->getDoctrine()->getRepository(Metrica::class)->find($metrica_id);
  1322.                             $unidad     $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(["id"=>$unidad_id]);
  1323.                             if($metrica && $total && $unidad_id) {
  1324.                                 $metrica_atencion = new MetricaAtencion();
  1325.                                 $metrica_atencion->setAtencion($atencion);
  1326.                                 
  1327.                                 if(!$total)
  1328.                                     $total 0;
  1329.                                 $metrica_atencion->setValor($total);
  1330.                                 $metrica_atencion->setTipometrica($metrica);
  1331.                                 $metrica_atencion->setUnidad($unidad);
  1332.                                 $em->persist($metrica_atencion);
  1333.                                 $em->flush();
  1334.                             }
  1335.                         }
  1336.                     }
  1337.                     if($atencion){
  1338.                         $atencion_medicamento $this->getDoctrine()->getRepository(AtencionMedicamento::class)->findBy(['atencion' => $atencion]);
  1339.                         $edad       0;
  1340.                         $edad_meses 0;
  1341.                         $edad_dias  0;
  1342.                         if ($paciente->getFechaNacimiento() != null) {
  1343.                             $diff       date_diff($paciente->getFechaNacimiento(), $hoy);
  1344.                             $edad       $diff->format("%y");
  1345.                             $edad_meses $diff->format("%m");
  1346.                             $edad_dias  $diff->format("%d");
  1347.                         }
  1348.                         
  1349.                         $html_email =  $this->renderView('mailings/consulta_finalizada.html.twig', array(
  1350.                             'url'                  => $request->getSchemeAndHttpHost(),
  1351.                             'paciente'             => $paciente,
  1352.                             'fecha'                => $fecha,
  1353.                             'hora'                 => $hora,
  1354.                             'prediagnostico'       => $prediagnostico_activo,
  1355.                             'atencion'             => $atencion,
  1356.                             'atencion_medicamento' => $atencion_medicamento,
  1357.                             'edad'                 => $edad,
  1358.                             'edad_meses'           => $edad_meses,
  1359.                             'edad_dias'            => $edad_dias
  1360.                         ));
  1361.                         $respuesta_email $this->qi->sendMail("Consulta Finalizada"$paciente->getEmail(), $html_email);
  1362.                     }
  1363.                     return $this->redirectToRoute('pacientes');
  1364.                     
  1365.                 }
  1366.                 $diagnosticos $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
  1367.                     ->select('d' )
  1368.                     ->orderBy('d.codigo''ASC')
  1369.                     ->getQuery()
  1370.                     ->getArrayResult();
  1371.                 $sugerencia_diagnosticas =[];
  1372.                 $interrogatorio_paciente "";
  1373.                 $paraclinicos null;
  1374.                 $imagenes null;
  1375.                 $formulas null;
  1376.                 $sintoma null;
  1377.                 $ids_paraclinico='';
  1378.                 $ids_imagenes='';
  1379.                 $ids_formula='';
  1380.                 $cadena_interrogatorio "";
  1381.                 if ($prediagnostico_activo) {
  1382.                     $sintoma $prediagnostico_activo->getSintoma();
  1383.                     $prediagnosticos_resultados $prediagnostico_activo->getPrediagnosticos();
  1384.                     foreach($prediagnosticos_resultados as $pr) {
  1385.                         $sugerencia_diagnosticas[] = $pr->getPrediagnostico()->getInterpretacion();
  1386.                     }
  1387.                     // dd($interpretaciones);
  1388.                     $interrogatorio $prediagnostico_activo->getInterrogatorios();
  1389.                     $cadena_interrogatorio "";
  1390.                     foreach($interrogatorio as $int) {
  1391.                         $pregunta $int->getPregunta()->getEnunciado();
  1392.                         $respuesta $int->getOpcion()->getValor();
  1393.                         $cadena_interrogatorio $cadena_interrogatorio $pregunta ." "$respuesta ."\r";
  1394.                     }
  1395.                   
  1396.                     $cadena_interrogatorio_formated nl2br($cadena_interrogatorio);
  1397.                     $interrogatorio_paciente "Line 1|nl2br Line 2";
  1398.                     $prediagnosticos_paciente $prediagnostico_activo->getPrediagnosticos();
  1399.                     // dd($prediagnosticos_paciente);
  1400.                     
  1401.                     foreach($prediagnosticos_paciente as $prediagnostico) {
  1402.                         $paraclinicos $prediagnostico->getPrediagnostico()->getSintoma()->getParaclinicos();
  1403.                         $total_p count($paraclinicos);
  1404.                         $t=1;
  1405.                         foreach ($paraclinicos as $paraclinico) {
  1406.                             if ($t == $total_p) {
  1407.                                 $ids_paraclinico $ids_paraclinico $paraclinico->getId();
  1408.                             } else {
  1409.                                 $ids_paraclinico $ids_paraclinico $paraclinico->getId() . ';';
  1410.                             }
  1411.                             $t++;
  1412.                         }
  1413.                         $formulas $prediagnostico->getPrediagnostico()->getSintoma()->getFormulas();
  1414.                         $total_p count($formulas);
  1415.                         $t=1;
  1416.                         foreach ($formulas as $formula) {
  1417.                             if ($t == $total_p) {
  1418.                                 $ids_formula $ids_formula $formula->getId();
  1419.                             } else {
  1420.                                 $ids_formula $ids_formula $formula->getId() . ';';
  1421.                             }
  1422.                             $t++;
  1423.                         }
  1424.                         
  1425.                         $imagenes $prediagnostico->getPrediagnostico()->getSintoma()->getImagenes();
  1426.                         $total_p count($imagenes);
  1427.                         $t=1;
  1428.                         foreach ($imagenes as $imagen) {
  1429.                             if ($t == $total_p) {
  1430.                                 $ids_imagenes $ids_imagenes $imagen->getId();
  1431.                             } else {
  1432.                                 $ids_imagenes $ids_imagenes $imagen->getId() . ';';
  1433.                             }
  1434.                             $t++;
  1435.                         }
  1436.                         $formulas $prediagnostico->getPrediagnostico()->getSintoma()->getFormulas();
  1437.                         $total_p count($formulas);
  1438.                         $t=1;
  1439.                         foreach ($formulas as $formula) {
  1440.                             
  1441.                             if ($t == $total_p) {
  1442.                                 $ids_formula $ids_formula $formula->getId();
  1443.                             } else {
  1444.                                 $ids_formula $ids_formula $formula->getId() . ';';
  1445.                             }
  1446.                             $t++;
  1447.                         }
  1448.                         $terapias $prediagnostico->getPrediagnostico()->getSintoma()->getIdTerapia();
  1449.                         $total_p count($terapias);
  1450.                         $t=1;
  1451.                         foreach ($terapias as $terapia) {
  1452.                            
  1453.                             if ($t == $total_p) {
  1454.                                 $ids_terapias $ids_terapias $terapia->getId();
  1455.                             } else {
  1456.                                 $ids_terapias $ids_terapias $terapia->getId() . ';';
  1457.                             }
  1458.                             $t++;
  1459.                         }
  1460.                     }
  1461.                 }
  1462.                 $paraclinicos $this->getDoctrine()->getRepository(Paraclinico::class)->createQueryBuilder('p')
  1463.                     ->select('p' )
  1464.                     ->orderBy('p.nombre''ASC')
  1465.                     ->getQuery()
  1466.                     ->getArrayResult();
  1467.                 $imagenes $this->getDoctrine()->getRepository(Imagen::class)->createQueryBuilder('i')
  1468.                     ->select('i' )
  1469.                     ->orderBy('i.nombre''ASC')
  1470.                     ->getQuery()
  1471.                     ->getArrayResult();
  1472.                 $formulas $this->getDoctrine()->getRepository(Formula::class)->createQueryBuilder('f')
  1473.                     ->select('f')
  1474.                     ->orderBy('f.descripcion''ASC')
  1475.                     ->getQuery()
  1476.                     ->getArrayResult();
  1477.                 $terapias $this->getDoctrine()->getRepository(Terapia::class)->createQueryBuilder('t')
  1478.                     ->select('t')
  1479.                     ->orderBy('t.descripcion''ASC')
  1480.                     ->getQuery()
  1481.                     ->getArrayResult();
  1482.                 $metricas $this->getDoctrine()->getRepository(Metrica::class)->createQueryBuilder('m')
  1483.                     ->select('m')
  1484.                     ->orderBy('m.nombre''ASC')
  1485.                     ->getQuery()
  1486.                     ->getArrayResult();
  1487.                 $procedimientos $this->getDoctrine()->getRepository(Procedimiento::class)->createQueryBuilder('p')
  1488.                     ->select('p')
  1489.                     ->orderBy('p.nombre''ASC')
  1490.                     ->getQuery()
  1491.                     ->getArrayResult();
  1492.                 $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->createQueryBuilder('p')
  1493.                     ->select('p')
  1494.                     ->orderBy('p.nombre''ASC')
  1495.                     ->getQuery()
  1496.                     ->getArrayResult();
  1497.                 
  1498.                 $medicamentos $this->getDoctrine()->getRepository(Medicamento::class)->createQueryBuilder('p')
  1499.                     ->select('p')
  1500.                     ->orderBy('p.nombre''ASC')
  1501.                     ->getQuery()
  1502.                     ->getArrayResult();
  1503.                 $prediagnostico_activotf'';
  1504.                 if($prediagnostico_activo)
  1505.                    $prediagnostico_activotf=$prediagnostico_activo->getActivo();
  1506.                 return $this->render('medicos/consulta_actual.html.twig', [
  1507.                     'pacienteid'              => $id,
  1508.                     'paciente'                => $paciente,
  1509.                     'form'                    => $form->createView(),
  1510.                     'perfilmedico'            => $perfilmedico,
  1511.                     'plantillas'              => $plantillas,
  1512.                     'prediagnostico_activo'   => $prediagnostico_activo,
  1513.                     'prediagnostico_activotf' => $prediagnostico_activotf,
  1514.                     'sugerencia_diagnosticas' => $sugerencia_diagnosticas,
  1515.                     'interrogatorio_paciente' => $cadena_interrogatorio,
  1516.                     'sintoma'                 => $sintoma,
  1517.                     'diagnosticos'            => $diagnosticos,
  1518.                     'paraclinicos'            => $paraclinicos,
  1519.                     'imagenes'                => $imagenes,
  1520.                     'formulas'                => $formulas,
  1521.                     'idsparaclinico'          => $ids_paraclinico,
  1522.                     'idsformula'              => $ids_formula,
  1523.                     'idsimagenes'             => $ids_imagenes,
  1524.                     'metricas'                => $metricas,
  1525.                     'procedimientos'          => $procedimientos,
  1526.                     'terapias'                => $terapias,
  1527.                     'medicamentos'            => $medicamentos,
  1528.                     'especialidad'            => $especialidad
  1529.                 ]);
  1530.             } 
  1531.         }
  1532.         return('no autorizado');
  1533.     }
  1534.     
  1535.     /**
  1536.      * @Route("/consulta_diagnostico_activo/{id}", name="consulta_diagnostico_activo")
  1537.      * @Route("/consulta_diagnostico/{id}/{id_prediagnostico}", name="consulta_diagnostico") 
  1538.      */
  1539.     public function consultaDiagnostico(Request $request$id null$id_prediagnostico null)
  1540.     {
  1541.         $user $this->getUser();
  1542.         $em $this->getDoctrine()->getManager();
  1543.         $formuladmed=null;
  1544.         if ($user) {
  1545.             if ($this->isGranted('ROLE_MEDICO')) {
  1546.                 $entityManager $this->getDoctrine()->getManager();
  1547.                 $paciente      $this->getDoctrine()->getRepository('App:Paciente')->find($id);
  1548.                 $perfilmedico  $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  1549.                 $route         $request->attributes->get('_route');
  1550.                 $sintoma       '';
  1551.                 $plantillas    $this->getDoctrine()->getRepository(Plantilla::class)->createQueryBuilder('p')
  1552.                     ->select('p')
  1553.                     ->Where("p.medico = :medico")
  1554.                     ->setParameter('medico'$perfilmedico->getId())
  1555.                     ->orderBy('p.nombre''ASC')
  1556.                     ->getQuery()
  1557.                     ->getArrayResult();
  1558.                 if($route === 'consulta_diagnostico')
  1559.                     $prediagnostico_activo $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findOneBy(['id' => $id_prediagnostico'paciente' => $paciente],array("id"=>"desc"),1);
  1560.                 else
  1561.                     $prediagnostico_activo $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findOneBy(['paciente' => $paciente'activo' => false],array("id"=>"desc"),1);
  1562.                 
  1563.                 $prediagnostico_activo->setVisto('true');
  1564.                 $em->persist($prediagnostico_activo);
  1565.                 $em->flush();
  1566.                 $form $this->createForm(AtencionType::class);
  1567.                 $form->handleRequest($request);
  1568.                 if ($form->isSubmitted() && $form->isValid()) {
  1569.                     $hoy = new \DateTime();
  1570.                     $fecha DATE_FORMAT($hoy'Y-m-d');
  1571.                     $hora DATE_FORMAT($hoy,'H:i:s');
  1572.                     $atencion $form->getData();
  1573.                     $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  1574.                     $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  1575.                     $filenames             $request->request->get('filenames');
  1576.                     $fileurls              $request->request->get('fileurls');
  1577.                     $diagnosticos_ids_str  $request->request->get('diagnosticosids');
  1578.                     $paraclinicos_ids_str  $request->request->get('paraclinicosids');
  1579.                     $procedimiento_ids_str $request->request->get('procedimientoids');
  1580.                     $remisiones_ids_str    $request->request->get('remisionesids');
  1581.                     $formulas_ids_str      $request->request->get('formulasids');
  1582.                     $terapias_ids_str      $request->request->get('terapiasids');
  1583.                     $imagenes_ids_str      $request->request->get('imagenesids');
  1584.                     $metricas_ids_str      $request->request->get('metricasids');
  1585.                     $incapacidad           $request->request->get('incapacidad');
  1586.                     $recomendaciones       $request->request->get('recomendaciones');
  1587.                     $formulasagregadas_ids_str      $request->request->get('formulasagregadaids');
  1588.                     // dd($formulas_ids_str);
  1589.                     $atencion->setFecha(new \DateTime());
  1590.                     $atencion->setPaciente($paciente);
  1591.                     $atencion->setMedico($perfilmedico);
  1592.                     $atencion->setIncapacidad($incapacidad);
  1593.                     $atencion->setRecomendacion($recomendaciones);
  1594.                     if($filenames){
  1595.                         foreach($filenames as $key => $value) {
  1596.                             $nuevo_atencion_adjunto = new AtencionAdjunto();
  1597.                             $nuevo_atencion_adjunto->setNombre($value);
  1598.                             $nuevo_atencion_adjunto->setUrl($fileurls[$key]);
  1599.                             $atencion->addAdjunto($nuevo_atencion_adjunto);
  1600.                         }
  1601.                     }
  1602.                     $diagnosticosSugeridos=[];
  1603.                     if ($prediagnostico_activo) {
  1604.                         $diagnosticosSugeridos $prediagnostico_activo->getPrediagnosticos()->getValues();
  1605.                         foreach ($diagnosticosSugeridos as $s){
  1606.                             $d $s->getPrediagnostico()->getSugerencia();
  1607.                             $d->setVecesSugerido($d->getVecesSugerido()+1);
  1608.                             $em->persist($d);
  1609.                             $em->flush();
  1610.                             $diagnosticosSugeridos[]=$d;
  1611.                         }
  1612.                         $prediagnostico_activo->setActivo(false);
  1613.                         $prediagnostico_activo->setVencido(true);
  1614.                         $em->persist($prediagnostico_activo);
  1615.                         $em->flush();
  1616.                     }
  1617.                     $diagnosticos_ids explode(";",$diagnosticos_ids_str);
  1618.                     if(strlen($diagnosticos_ids_str) > 0){
  1619.                         foreach($diagnosticos_ids as $diagnostico_id) {
  1620.                             $diagnostico $this->getDoctrine()->getRepository(Diagnostico::class)->find($diagnostico_id);
  1621.                             $atencion->addDiagnostico($diagnostico);
  1622.                             if($this->objectinArray($diagnostico,$diagnosticosSugeridos)){
  1623.                                 $diagnostico->setAciertos($diagnostico->getAciertos()+1);
  1624.                                 $em->persist($diagnostico);
  1625.                                 $em->flush();
  1626.                             }
  1627.                         }
  1628.                     }
  1629.                     if (strlen($procedimiento_ids_str) > 0) {
  1630.                         $procedimiento_ids explode(";",$procedimiento_ids_str);
  1631.                         foreach($procedimiento_ids as $procedimiento_id) {
  1632.                             $procedimiento $this->getDoctrine()->getRepository(Procedimiento::class)->find($procedimiento_id);
  1633.                             if($procedimiento) {
  1634.                                 $atencion->addAutorizacione($procedimiento);
  1635.                             }
  1636.                         }
  1637.                     }
  1638.                     if (strlen($remisiones_ids_str ) > 0) {
  1639.                         $remisiones_ids explode(";",$remisiones_ids_str );
  1640.                         foreach($remisiones_ids as $remision_id) {
  1641.                             $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->find($remision_id);
  1642.                             if($especialidad) {
  1643.                                 $atencion->addRemision($especialidad);
  1644.                             }
  1645.                         }
  1646.                     }
  1647.                     if (strlen($paraclinicos_ids_str) > 0) {
  1648.                         $paraclinico_ids explode(";",$paraclinicos_ids_str);
  1649.                         foreach($paraclinico_ids as $paraclinico_id) {
  1650.                             $paraclinico $this->getDoctrine()->getRepository(Paraclinico::class)->find($paraclinico_id);
  1651.                             if($paraclinico) {
  1652.                                 $atencion->addParaclinico($paraclinico);
  1653.                             }
  1654.                         }
  1655.                     }
  1656.                     if (strlen($terapias_ids_str) > 0) {
  1657.                         $terapias_ids explode(";",$terapias_ids_str);
  1658.                         foreach($terapias_ids as $terapia_id) {
  1659.                             $terapias $this->getDoctrine()->getRepository(Terapia::class)->find($terapia_id);
  1660.                             if($terapias) {
  1661.                                 $atencion->addTerapium($terapias);
  1662.                             }
  1663.                         }
  1664.                     }
  1665.                     if (strlen($imagenes_ids_str) > 0) {
  1666.                         $imagenes_ids explode(";",$imagenes_ids_str);
  1667.                         foreach($imagenes_ids as $imagenes_id) {
  1668.                             $imagenes $this->getDoctrine()->getRepository(Imagen::class)->find($imagenes_id);
  1669.                             if($imagenes) {
  1670.                                 $atencion->addImagene($imagenes);
  1671.                             }
  1672.                         }
  1673.                     }
  1674.                     $em->persist($atencion);
  1675.                     $em->flush();
  1676.                     
  1677.                     // dump($formulas_ids_str);
  1678.                     $formulas_ids_str str_replace(';;',';',$formulas_ids_str);
  1679.                     $formulasagregadas_ids_str str_replace(';;',';',$formulasagregadas_ids_str);
  1680.                     // dump($formulas_ids_str);
  1681.                     if (strlen($formulasagregadas_ids_str) > 0) {
  1682.                         $formulasagregadas_ids_str explode(";",$formulasagregadas_ids_str);
  1683.                         foreach($formulasagregadas_ids_str as $formula_id) {
  1684.                             $formula $this->getDoctrine()->getRepository(Formula::class)->find($formula_id);
  1685.                             if($formula) {
  1686.                                 $atencion_medico = new AtencionMedicamento();
  1687.                                 $atencion_medico->setAtencion($atencion);
  1688.                                 $atencion_medico->setMedicamento($formula->getMedicamento());
  1689.                                 $atencion_medico->setRecomendacion($formula->getDescripcion());
  1690.                                 $atencion_medico->setFecha($hoy);
  1691.                                 $em->persist($atencion_medico);
  1692.                                 $em->flush();
  1693.                             }
  1694.                         }
  1695.                     }
  1696.                     if (strlen($formulas_ids_str) > 0) {
  1697.                         $formulas_ids explode(";",$formulas_ids_str);
  1698.                         foreach($formulas_ids as $formula_id) {
  1699.                             // dump($formula_id);
  1700.                             $medicamento $this->getDoctrine()->getRepository(Medicamento::class)->find($formula_id);
  1701.                             $recomendaciones     $request->request->get('formula-'.$formula_id);
  1702.                             if($medicamento) {
  1703.                                 // dump('medicamento');
  1704.                                 $atencion_medico = new AtencionMedicamento();
  1705.                                 $atencion_medico->setAtencion($atencion);
  1706.                                 $atencion_medico->setMedicamento($medicamento);
  1707.                                 if(!$recomendaciones)
  1708.                                     $recomendaciones 'Sin recomendación';
  1709.                                 $atencion_medico->setRecomendacion($recomendaciones);
  1710.                                 $atencion_medico->setFecha($hoy);
  1711.                                 $em->persist($atencion_medico);
  1712.                                 $em->flush();
  1713.                             }else{
  1714.                                 // dump('formula');
  1715.                                 $formuladmed $this->getDoctrine()->getRepository(Formula::class)->find($formula_id);
  1716.                             }
  1717.                         }
  1718.                     }
  1719.                     // dd($formuladmed);
  1720.                     
  1721.                     if (strlen($metricas_ids_str) > 0) {
  1722.                         $metricas_ids explode(";",$metricas_ids_str);
  1723.                         if(count($metricas_ids)>0){
  1724.                             foreach($metricas_ids as $metrica_id) {
  1725.                                 $total      $request->request->get('metrica-total-'.$metrica_id);
  1726.                                 $unidad_id  $request->request->get('metrica-unidad-'.$metrica_id);
  1727.                                 $metrica    $this->getDoctrine()->getRepository(Metrica::class)->findOneBy(['id'=>$metrica_id]);
  1728.                                 $unidad    $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['id'=>$unidad_id]);
  1729.     
  1730.                                 if($metrica && $total && $unidad_id) {
  1731.                                     $metrica_atencion = new MetricaAtencion();
  1732.                                     $metrica_atencion->setAtencion($atencion);
  1733.                                     
  1734.                                     if(!$total)
  1735.                                         $total 0;
  1736.     
  1737.                                     $metrica_atencion->setValor($total);
  1738.                                     $metrica_atencion->setTipometrica($metrica);
  1739.                                     $metrica_atencion->setUnidad($unidad);
  1740.     
  1741.                                     $em->persist($metrica_atencion);
  1742.                                     $em->flush();
  1743.                                 }
  1744.                             }
  1745.                         }                        
  1746.                     }
  1747.                     if($atencion){
  1748.                         $atencion_medicamento $this->getDoctrine()->getRepository(AtencionMedicamento::class)->findBy(['atencion' => $atencion]);
  1749.                         
  1750.                         $edad       0;
  1751.                         $edad_meses 0;
  1752.                         $edad_dias  0;
  1753.                         if ($paciente->getFechaNacimiento() != null) {
  1754.                             $diff       date_diff($paciente->getFechaNacimiento(), $hoy);
  1755.                             $edad       $diff->format("%y");
  1756.                             $edad_meses $diff->format("%m");
  1757.                             $edad_dias  $diff->format("%d");
  1758.                         }
  1759.                         
  1760.                         $html_email =  $this->renderView('mailings/consulta_finalizada.html.twig', array(
  1761.                             'url'                  => $request->getSchemeAndHttpHost(),
  1762.                             'paciente'             => $paciente,
  1763.                             'fecha'                => $fecha,
  1764.                             'hora'                 => $hora,
  1765.                             'prediagnostico'       => $prediagnostico_activo,
  1766.                             'atencion'             => $atencion,
  1767.                             'atencion_medicamento' => $atencion_medicamento,
  1768.                             'edad'                 => $edad,
  1769.                             'edad_meses'           => $edad_meses,
  1770.                             'edad_dias'            => $edad_dias
  1771.                         ));
  1772.                         $respuesta_email $this->qi->sendMail("Consulta Finalizada"$paciente->getEmail(), $html_email);
  1773.                     }
  1774.                     return $this->redirectToRoute('pacientes');
  1775.                 }
  1776.                 $diagnosticos '';
  1777.                 
  1778.                 $sugerencia_diagnosticas =[];
  1779.                 $interrogatorio_paciente "";
  1780.                 $ids_paraclinico='';
  1781.                 $ids_imagenes='';
  1782.                 $ids_formula='';
  1783.                 $ids_terapias='';
  1784.                 $cadena_interrogatorio "";
  1785.                 $listado_paraclinicos  = [];
  1786.                 $listado_imagenes      = [];
  1787.                 $listado_formulas      = [];
  1788.                 $listado_terapias      = [];
  1789.                 if ($prediagnostico_activo) {
  1790.                     $sintoma $prediagnostico_activo->getSintoma();
  1791.                     $prediagnosticos_resultados $prediagnostico_activo->getPrediagnosticos();
  1792.                     foreach($prediagnosticos_resultados as $pr) {
  1793.                         $sugerencia_diagnosticas[] = $pr->getPrediagnostico()->getInterpretacion();
  1794.                     }
  1795.                     $interrogatorio $prediagnostico_activo->getInterrogatorios();
  1796.                     $cadena_interrogatorio "";
  1797.                     foreach($interrogatorio as $int) {
  1798.                         $pregunta $int->getPregunta()->getEnunciado();
  1799.                         $respuesta $int->getOpcion()->getValor();
  1800.                         $cadena_interrogatorio $cadena_interrogatorio $pregunta ." "$respuesta ."\r";
  1801.                     }
  1802.                     $cadena_interrogatorio_formated nl2br($cadena_interrogatorio);
  1803.                     $interrogatorio_paciente "Line 1|nl2br Line 2";
  1804.                     $prediagnosticos_paciente $prediagnostico_activo->getPrediagnosticos();
  1805.                     foreach($prediagnosticos_paciente as $prediagnostico) {
  1806.                         $paraclinicos $prediagnostico->getPrediagnostico()->getSintoma()->getParaclinicos();
  1807.                         $total_p count($paraclinicos);
  1808.                         $t=1;
  1809.                         
  1810.                         foreach ($paraclinicos as $paraclinico) {
  1811.                             array_push($listado_paraclinicos$paraclinico->getId());
  1812.                             if ($t == $total_p) {
  1813.                                 $ids_paraclinico $ids_paraclinico $paraclinico->getId();
  1814.                                 
  1815.                             } else {
  1816.                                 $ids_paraclinico $ids_paraclinico $paraclinico->getId() . ';';
  1817.                             }
  1818.                             $t++;
  1819.                         }
  1820.                         $formulas $prediagnostico->getPrediagnostico()->getSintoma()->getFormulas();
  1821.                         $total_p count($formulas);
  1822.                         $t=1;
  1823.                         foreach ($formulas as $formula) {
  1824.                             array_push($listado_formulas$formula->getId());
  1825.                             if ($t == $total_p) {
  1826.                                 $ids_formula $ids_formula $formula->getId();
  1827.                             } else {
  1828.                                 $ids_formula $ids_formula $formula->getId() . ';';
  1829.                             }
  1830.                             $t++;
  1831.                         }
  1832.                         $imagenes $prediagnostico->getPrediagnostico()->getSintoma()->getImagenes();
  1833.                         
  1834.                         $total_p count($imagenes);
  1835.                         $t=1;
  1836.                         foreach ($imagenes as $imagen) {
  1837.                             array_push($listado_imagenes$imagen->getId());
  1838.                             if ($t == $total_p) {
  1839.                                 $ids_imagenes $ids_imagenes $imagen->getId();
  1840.                             } else {
  1841.                                 $ids_imagenes $ids_imagenes $imagen->getId() . ';';
  1842.                             }
  1843.                             $t++;
  1844.                         }
  1845.                         $terapias $prediagnostico->getPrediagnostico()->getSintoma()->getIdTerapia();
  1846.                         $total_p count($terapias);
  1847.                         $t=1;
  1848.                         foreach ($terapias as $terapia) {
  1849.                             array_push($listado_terapias$terapia->getId());
  1850.                             if ($t == $total_p) {
  1851.                                 $ids_terapias $ids_terapias $terapia->getId();
  1852.                             } else {
  1853.                                 $ids_terapias $ids_terapias $terapia->getId() . ';';
  1854.                             }
  1855.                             $t++;
  1856.                         }
  1857.                     }
  1858.                     // dd($ids_paraclinico);
  1859.                 }
  1860.                 
  1861.                 $paraclinicos '';
  1862.                 
  1863.                 $imagenes $this->getDoctrine()->getRepository(Imagen::class)->createQueryBuilder('i')
  1864.                     ->select('i')
  1865.                     ->orderBy('i.nombre''ASC')
  1866.                     ->getQuery()
  1867.                     ->getArrayResult();
  1868.                 $formulas $this->getDoctrine()->getRepository(Formula::class)->createQueryBuilder('f')
  1869.                     ->select('f')
  1870.                     ->orderBy('f.descripcion''ASC')
  1871.                     ->getQuery()
  1872.                     ->getArrayResult();
  1873.                 $terapias $this->getDoctrine()->getRepository(Terapia::class)->createQueryBuilder('t')
  1874.                     ->select('t')
  1875.                     ->orderBy('t.descripcion''ASC')
  1876.                     ->getQuery()
  1877.                     ->getArrayResult();
  1878.                 $metricas $this->getDoctrine()->getRepository(Metrica::class)->createQueryBuilder('m')
  1879.                     ->select('m')
  1880.                     ->orderBy('m.nombre''ASC')
  1881.                     ->getQuery()
  1882.                     ->getArrayResult();
  1883.                 $procedimientos $this->getDoctrine()->getRepository(Procedimiento::class)->createQueryBuilder('p')
  1884.                     ->select('p')
  1885.                     ->orderBy('p.nombre''ASC')
  1886.                     ->getQuery()
  1887.                     ->getArrayResult();
  1888.                 $medicamentos $this->getDoctrine()->getRepository(Medicamento::class)->createQueryBuilder('p')
  1889.                     ->select('p')
  1890.                     ->orderBy('p.nombre''ASC')
  1891.                     ->getQuery()
  1892.                     ->getArrayResult();
  1893.                 $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->createQueryBuilder('p')
  1894.                     ->select('p')
  1895.                     ->orderBy('p.nombre''ASC')
  1896.                     ->getQuery()
  1897.                     ->getArrayResult();
  1898.                 // dd($prediagnostico_activo);
  1899.                 
  1900.                 return $this->render('medicos/consulta_diagnostico.html.twig', [ 
  1901.                     'pacienteid'              => $id,
  1902.                     'paciente'                => $paciente,
  1903.                     'perfilmedico'            => $perfilmedico,
  1904.                     'plantillas'              => $plantillas,
  1905.                     'prediagnostico_activo'   => $prediagnostico_activo,
  1906.                     'sugerencia_diagnosticas' => $sugerencia_diagnosticas,
  1907.                     'interrogatorio_paciente' => $cadena_interrogatorio,
  1908.                     'sintoma'                 => $sintoma,
  1909.                     'diagnosticos'            => $diagnosticos,
  1910.                     'paraclinicos'            => $paraclinicos,
  1911.                     'terapias'                => $terapias,
  1912.                     'imagenes'                => $imagenes,
  1913.                     'formulas'                => $formulas,
  1914.                     'idsparaclinico'          => $ids_paraclinico,
  1915.                     'idsformula'              => $ids_formula,
  1916.                     'idsimagenes'             => $ids_imagenes,
  1917.                     'metricas'                => $metricas,
  1918.                     'procedimientos'          => $procedimientos,
  1919.                     'listado_paraclinicos'    => $listado_paraclinicos,
  1920.                     'listado_imagenes'        => $listado_imagenes,
  1921.                     'listado_formulas'        => $listado_formulas,
  1922.                     'medicamentos'            => $medicamentos,
  1923.                     'especialidad'            => $especialidad,
  1924.                     'form'                    => $form->createView(),
  1925.                     'formula'                 => $formuladmed
  1926.                 ]);
  1927.             }
  1928.         }
  1929.         return('no autorizado');
  1930.     }
  1931.     private function objectinArray($obj,$array){
  1932.         foreach ($array as $a){
  1933.             if($a->getId() == $obj->getId()){
  1934.                 return true;
  1935.             }
  1936.         }
  1937.         return false;
  1938.     }
  1939.     /**
  1940.      * @Route("/ordenes/{id}", name="ordenes")
  1941.      * @Route("/ordenes/{id}/{buscar}", name="buscar_orden")
  1942.      * @Route("/ordenes/{id}/{mesyear}", name="buscar_orden")
  1943.      */
  1944.     public function ordenes(Request $request$id=null)
  1945.     {
  1946.         $user $this->getUser();
  1947.         if ($user) {
  1948.             if ($this->isGranted('ROLE_MEDICO')) {
  1949.                 if (!$id) {
  1950.                     if ($request->query->has('id')) {
  1951.                         $id $request->query->get('id');
  1952.                     } else {
  1953.                         $id null;
  1954.                     }
  1955.                 }
  1956.                 if ($request->query->has('buscar')) {
  1957.                     $buscar $request->query->get('buscar');
  1958.                 } else {
  1959.                     $buscar null;
  1960.                 }
  1961.                 if ($request->query->has('mesyear')) {
  1962.                     $mesyear $request->query->get('mesyear'1);
  1963.                 } else {
  1964.                     $mesyear null;
  1965.                 }
  1966.                 $um $this->userManager;
  1967.                 $user $um->findUserBy(array('uid' => $user->getUid() ));
  1968.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  1969.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  1970.                 
  1971.                 $paciente $this->getDoctrine()->getRepository('App:Paciente')->find($id);
  1972.                 
  1973.                 $url_avatar_default $this->qi->getSetting('avatar-default');
  1974.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  1975.         
  1976.                 $queried false;
  1977.                
  1978.                 
  1979.                 if ($buscar != null) {
  1980.                     if( $this->qi->filterInTypes($buscar) === false ) {
  1981.                         $ordenes $this->getDoctrine()->getRepository(Orden::class)->createQueryBuilder('o')
  1982.                             ->select('o')
  1983.                             ->leftJoin('o.paciente''p')
  1984.                             ->where('p.id = :paciente_id')
  1985.                             ->AndWhere('o.nombre like :buscar')
  1986.                             ->setParameter('paciente_id'$id)
  1987.                             ->setParameter('buscar''%' $buscar '%')
  1988.                             ->getQuery()
  1989.                             ->getArrayResult();
  1990.                         $queried true;
  1991.                     }
  1992.                 }
  1993.                 
  1994.                 if ($id) {
  1995.                     $ordenes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  1996.                     ->select('a')
  1997.                     ->where('a.paciente = :pacienteid')
  1998.                     ->leftJoin("a.medico","m")
  1999.                     ->leftJoin("m.usuario","u")
  2000.                     ->leftJoin("m.especialidades","e")
  2001.                     ->setParameter('pacienteid'$id)
  2002.                     ->orderBy('a.fecha''desc');
  2003.                     if ($mesyear != null) {
  2004.                        $ordenes->andWhere("a.fecha like :fecha")
  2005.                            ->setParameter("fecha",$mesyear."%");
  2006.                     }
  2007.                     if ($buscar != null) {
  2008.                         if( $this->qi->filterInTypes($buscar) === false ) {
  2009.                             $ordenes->andWhere("u.nombre like :buscar or u.apellido like :buscar or e.nombre like :buscar")
  2010.                                 ->setParameter("buscar""%" $buscar "%");
  2011.                         }
  2012.                     }
  2013.                     $ordenes=$ordenes->getQuery()
  2014.                     ->getResult();
  2015.                     $queried true;
  2016.                 }
  2017.                 $fecha_comienzo $this->qi->getSetting('fecha-inicio-operacion');
  2018.                 $numero_mes date("m"strtotime($fecha_comienzo));
  2019.                 $interval = \DateInterval::createFromDateString('1 month');
  2020.                 $hoy = new \DateTime();
  2021.                 $rango = new \DatePeriod(new \DateTime($fecha_comienzo), $interval $hoy);
  2022.                 foreach($rango as $date1){
  2023.                     $numero_mes date("m"strtotime($date1->format('Y-m-d')));
  2024.                     $cadena_mes $this->qi->getMes($numero_mes);
  2025.                     $meses_periodo[] = array('mesyear' => $date1->format('m').'-'.$date1->format('Y'), 'mesnumero' => $date1->format('m'), 'mescadena' => $cadena_mes ,'year' => $date1->format('Y'));
  2026.                  }
  2027.                 //  dd($ordenes);
  2028.                 return $this->render('medicos/ordenes.html.twig', [
  2029.                     'perfilmedico' => $perfilmedico,
  2030.                     'paciente' => $paciente,
  2031.                     'ordenes' => $ordenes,
  2032.                     'total_ordenes' => count($ordenes),
  2033.                     'meses_periodo' => $meses_periodo,
  2034.                     'mesyear' => null
  2035.                 ]);
  2036.             } else {
  2037.                 return $this->redirectToRoute('homepage');
  2038.             }
  2039.                 
  2040.         }
  2041.         
  2042.         return $this->redirectToRoute('homepage');
  2043.     }
  2044.     /**
  2045.      * @Route("/paciente_interna/{id}", name="paciente_interna")
  2046.      */ 
  2047.     public function paciente(Request $request$id null)
  2048.     {
  2049.         $user $this->getUser();
  2050.         if ($user) {
  2051.             if ($this->isGranted('ROLE_MEDICO')) {
  2052.                 $paciente              $this->getDoctrine()->getRepository('App:Paciente')->find($id);
  2053.                 $repository            $this->getDoctrine()->getRepository(Perfilmedico::class);
  2054.                 $perfilmedico          $repository->findOneBy(['usuario' => $user->getId()]);
  2055.                 $autorizacion          $this->getDoctrine()->getRepository('App:Autorizacionhistorial')->findOneBy(['paciente'=>$paciente,"medico"=>$perfilmedico], ['id' => 'DESC'], ['limit' => 1]);
  2056.                 $epss                  $this->getDoctrine()->getRepository(Eps::class)->findBy([],['nombre' => 'ASC']);
  2057.                 $estado_civil          $this->getDoctrine()->getRepository(EstadoCivil::class)->findAll();
  2058.                 $escolaridad           $this->getDoctrine()->getRepository(Escolaridad::class)->findAll();
  2059.                 $especialidades_medico '';
  2060.                 if($perfilmedico)
  2061.                     $especialidades_medico $perfilmedico->getEspecialidades();
  2062.                 $hoy        = new \DateTime();
  2063.                 $edad       '';
  2064.                 $edad_meses '';
  2065.                 $edad_dias  '';
  2066.                 $atencion_editar_paciente $this->getDoctrine()->getRepository(Atencion::class)->findBy(['medico' => $perfilmedico'paciente' => $paciente], ['id' => 'DESC'], ['limit' => 1]);
  2067.                 if ($paciente->getFechaNacimiento() != null) {
  2068.                     $diff       date_diff($paciente->getFechaNacimiento(), $hoy);
  2069.                     $edad       $diff->format("%y");
  2070.                     $edad_meses $diff->format("%m");
  2071.                     $edad_dias  $diff->format("%d");
  2072.                 }
  2073.                 $atenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  2074.                     ->select('a.id''a.motivo''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid''u.nombre''u.apellido')
  2075.                     ->leftJoin('a.medico''m')
  2076.                     ->leftJoin('m.usuario''u')
  2077.                     ->leftJoin('m.especialidad''e')
  2078.                     ->where('a.paciente = :pacienteid')
  2079.                     ->setParameter('pacienteid'$id)
  2080.                     ->orderBy('a.id''desc')
  2081.                     ->getQuery()
  2082.                     ->getResult();
  2083.                 $atenciones_formulas $this->getDoctrine()->getRepository(AtencionMedicamento::class)->createQueryBuilder('d')
  2084.                     ->select('a.id''a.recomendacion''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid''u.nombre''u.apellido''md.nombre as formula_descripcion''md.id as formula_codigo','a.id as atencionid','d.recomendacion as recomendacion','md.nombre as medicamento_descripcion',)
  2085.                     ->leftJoin('d.atencion''a')
  2086.                     ->leftJoin('a.medico''m')
  2087.                     ->leftJoin('m.usuario''u')
  2088.                     ->leftJoin('m.especialidad''e')
  2089.                     ->leftJoin('d.medicamento''md')
  2090.                     ->where('a.paciente = :pacienteid')
  2091.                     ->setParameter('pacienteid'$paciente->getId())
  2092.                     ->orderBy('a.id''desc')
  2093.                     ->getQuery()
  2094.                     ->getArrayResult();
  2095.                 $ultimasatenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  2096.                     ->select('a.id''a.motivo''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid''u.nombre''u.apellido')
  2097.                     ->leftJoin('a.medico''m')
  2098.                     ->leftJoin('m.usuario''u')
  2099.                     ->leftJoin('m.especialidad''e')
  2100.                     ->where('a.paciente = :pacienteid')
  2101.                     ->setParameter('pacienteid'$id)
  2102.                     ->setMaxResults(5)
  2103.                     ->orderBy('a.id''desc')
  2104.                     ->getQuery()
  2105.                     ->getResult();
  2106.                 $ordenes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  2107.                     ->select('a')
  2108.                     ->leftJoin('a.medico''m')
  2109.                     ->leftJoin('m.usuario''u')
  2110.                     ->leftJoin('m.especialidad''e')
  2111.                     ->where('a.paciente = :pacienteid')
  2112.                     ->setParameter('pacienteid'$id)
  2113.                     ->orderBy('a.fecha''desc')
  2114.                     ->getQuery()
  2115.                     ->getResult();
  2116.                 $especialidades $this->getDoctrine()->getRepository(Especialidad::class)->findAll();
  2117.                 $hoy = new \DateTime();
  2118.                 if ($paciente->getFechaNacimiento() != null) {
  2119.                     $diff date_diff($paciente->getFechaNacimiento(), $hoy);
  2120.                     $edad $diff->format("%y");
  2121.                 }
  2122.                 $form $this->createFormBuilder()
  2123.                     ->add('tipo_documento'TextType::class)
  2124.                     ->add('documento'TextType::class)
  2125.                     ->add('nombres'TextType::class)
  2126.                     ->add('apellidos'TextType::class)
  2127.                     ->add('fecha_nacimiento'DateType::class, ['widget' => 'single_text''required' => false])
  2128.                     ->add('eps'HiddenType::class)
  2129.                     ->add('estatura'TextType::class, ['required' => false])
  2130.                     ->add('sexo'HiddenType::class)
  2131.                     ->add('estadocivilid'HiddenType::class)
  2132.                     ->add('escolaridadid'HiddenType::class)
  2133.                     ->add('adicional'TextType::class)
  2134.                     ->add('ocupacion'TextType::class, ['required' => false])
  2135.                     ->getForm();
  2136.                 $form->handleRequest($request);
  2137.                 if ($form->isSubmitted() && $form->isValid()) {
  2138.                     $data $form->getData();
  2139.                     if ($data["eps"] != null && $data["eps"] > 0) {
  2140.                         $neweps $this->getDoctrine()->getRepository('App:Eps')->find($data["eps"]);
  2141.                         $paciente->setEps($neweps);
  2142.                     }
  2143.                     if ($data["estadocivilid"] != null && $data["estadocivilid"] > 0) {
  2144.                         $new_estado_civil $this->getDoctrine()->getRepository('App:EstadoCivil')->find($data["estadocivilid"]);
  2145.                         $paciente->setEstadoCivilId($new_estado_civil);
  2146.                     }
  2147.                     if ($data["escolaridadid"] != null && $data["escolaridadid"] > 0) {
  2148.                         $new_escolaridad $this->getDoctrine()->getRepository('App:Escolaridad')->find($data["escolaridadid"]);
  2149.                         $paciente->setEscolaridadId($new_escolaridad);
  2150.                     }
  2151.                     $paciente->setNombre($data["nombres"]);
  2152.                     $paciente->setApellido($data["apellidos"]);
  2153.                     $paciente->setSexo($data["sexo"]);
  2154.                     $paciente->setEstatura($data["estatura"]);
  2155.                     $paciente->setFechaNacimiento($data["fecha_nacimiento"]);
  2156.                     $paciente->setOcupacion($data["ocupacion"]);
  2157.                     $paciente->setAdicional($data["adicional"]);
  2158.                     $em $this->getDoctrine()->getManager();
  2159.                     $em->persist($paciente);
  2160.                     $em->flush();
  2161.                     return $this->redirectToRoute('paciente_interna', ['id' => $id]);
  2162.                 } 
  2163.                 return $this->render('medicos/paciente_interna.html.twig', [    
  2164.                     'paciente'                 => $paciente,
  2165.                     'atenciones'               => $atenciones,
  2166.                     'perfilmedico'             => $perfilmedico,
  2167.                     'edad'                     => $edad,
  2168.                     'form'                     => $form->createView(),
  2169.                     'epss'                     => $epss,
  2170.                     'estado_civil'             => $estado_civil,
  2171.                     'autorizacion'             => $autorizacion,
  2172.                     'ultimasatenciones'        => $ultimasatenciones,
  2173.                     'especialidades_medico'    => $especialidades_medico,
  2174.                     'escolaridad'              => $escolaridad,
  2175.                     'atenciones_formulas'      => $atenciones_formulas,
  2176.                     'ordenes'                  => $ordenes,
  2177.                     'atencion_editar_paciente' => $atencion_editar_paciente,
  2178.                     'edad_meses'               => $edad_meses,
  2179.                     'edad_dias'                => $edad_dias
  2180.                 ]);
  2181.             }
  2182.         }
  2183.         return $this->redirectToRoute('homepage');
  2184.     }
  2185.     /**
  2186.      * @Route("/plantillas", name="plantillas")
  2187.      */
  2188.     public function plantillas(Request $request)
  2189.     {
  2190.         $user $this->getUser();
  2191.         if ($user) {
  2192.             if ($this->isGranted('ROLE_MEDICO')) {
  2193.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2194.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2195.                 
  2196.                 $plantillas $this->getDoctrine()->getRepository(Plantilla::class)->createQueryBuilder('p')
  2197.                     ->select('p')
  2198.                     ->Where("p.medico = :medico")
  2199.                     ->setParameter('medico'$perfilmedico->getId())
  2200.                     ->orderBy('p.nombre''ASC')
  2201.                     ->getQuery()
  2202.                     ->getArrayResult();
  2203.                 
  2204.                 if ($request->query->has('buscar')) {
  2205.                     $buscar $request->query->get('buscar'1);
  2206.                 } else {
  2207.                     $buscar null;
  2208.                 }
  2209.                 // efectua el buscador
  2210.                 if ($buscar) {                    
  2211.                     $query $this->getDoctrine()->getRepository('App:Plantilla')->createQueryBuilder('p')
  2212.                         ->select('p' )
  2213.                         ->Where("p.medico = :medico")
  2214.                         ->setParameter('medico'$perfilmedico->getId());
  2215.                     $query
  2216.                         // ->leftJoin('p.eps', 'e')
  2217.                         ->AndWhere("p.nombre like :buscar")
  2218.                         // ->AndWhere(':medicoid MEMBER OF p.medico')
  2219.                         // ->setParameter('medicoid', $perfilmedico->getId())
  2220.                         ->setParameter('buscar''%'.$buscar.'%');
  2221.     
  2222.                     $query->orderBy('p.nombre''asc');
  2223.                     $plantillas $query->getQuery()->getResult();
  2224.                 }
  2225.                 
  2226.                 return $this->render('medicos/plantillas.html.twig', [  
  2227.                     'perfilmedico' => $perfilmedico,
  2228.                     'plantillas'   => $plantillas,
  2229.                     'buscar'       => $buscar,
  2230.                     'usuario' => $user,
  2231.                 ]);
  2232.             }
  2233.         }
  2234.         return $this->redirectToRoute('homepage');
  2235.     }
  2236.     /**
  2237.      * @Route("/eliminar_plantilla/{id}", name="eliminar_plantilla")
  2238.      */
  2239.     public function eliminarPlantillas(Request $request$id null)
  2240.     {
  2241.         $user $this->getUser();
  2242.         if ($user) {
  2243.             if ($this->isGranted('ROLE_MEDICO')) {
  2244.                 $entityManager $this->getDoctrine()->getManager();
  2245.                 $plantilla     $this->getDoctrine()->getRepository(Plantilla::class)->find($id);
  2246.                 $perfilmedico  $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  2247.                 $entityManager->remove($plantilla);
  2248.                 $entityManager->flush();
  2249.                 if ($request->query->has('buscar')) {
  2250.                     $buscar $request->query->get('buscar'1);
  2251.                 } else {
  2252.                     $buscar null;
  2253.                 }
  2254.                 return $this->redirectToRoute('plantillas');
  2255.             }
  2256.         }
  2257.         return('no autorizado');
  2258.     }
  2259.      /**
  2260.      * @Route("/eliminar_servicio/{id}", name="eliminar_servicio")
  2261.      */
  2262.     public function eliminarServicios(Request $request$id null)
  2263.     {
  2264.         $user $this->getUser();
  2265.         if ($user) {
  2266.             if ($this->isGranted('ROLE_MEDICO')) {
  2267.                 $entityManager $this->getDoctrine()->getManager();
  2268.                 $servicio     $this->getDoctrine()->getRepository(Servicio::class)->find($id);
  2269.                 $perfilmedico  $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  2270.                 $servicio->setVisible(false);
  2271.                 $entityManager->persist($servicio);
  2272.                 $entityManager->flush();
  2273.                 if ($request->query->has('buscar')) {
  2274.                     $buscar $request->query->get('buscar'1);
  2275.                 } else {
  2276.                     $buscar null;
  2277.                 }
  2278.                 return $this->redirectToRoute('catalogo');
  2279.             }
  2280.         }
  2281.         return('no autorizado');
  2282.     }
  2283.     /**
  2284.      * @Route("/eliminar_factura/{id}", name="eliminar_factura")
  2285.      */
  2286.     public function eliminarFactura(Request $request$id null)
  2287.     {
  2288.         $user $this->getUser();
  2289.         if ($user) {
  2290.             if ($this->isGranted('ROLE_MEDICO')) {
  2291.                 $entityManager $this->getDoctrine()->getManager();
  2292.                 $factura     $this->getDoctrine()->getRepository(Factura::class)->find($id);
  2293.                 $perfilmedico  $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  2294.                 $factura->setVisible(false);
  2295.                 $entityManager->persist($factura);
  2296.                 $entityManager->flush();
  2297.                 if ($request->query->has('buscar')) {
  2298.                     $buscar $request->query->get('buscar'1);
  2299.                 } else {
  2300.                     $buscar null;
  2301.                 }
  2302.                 return $this->redirectToRoute('listado_facturacion');
  2303.             }
  2304.         }
  2305.         return('no autorizado');
  2306.     }
  2307.      /**
  2308.      * @Route("/eliminar_convenio/{id}", name="eliminar_convenio")
  2309.      */
  2310.     public function eliminarConvenios(Request $request$id null)
  2311.     {
  2312.         $user $this->getUser();
  2313.         if ($user) {
  2314.             if ($this->isGranted('ROLE_MEDICO')) {
  2315.                 $entityManager $this->getDoctrine()->getManager();
  2316.                 $convenio     $this->getDoctrine()->getRepository(Convenio::class)->find($id);
  2317.                 $perfilmedico  $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  2318.                 $convenio->setVisible(false);
  2319.                 $entityManager->persist($convenio);
  2320.                 $entityManager->flush();
  2321.                 if ($request->query->has('buscar')) {
  2322.                     $buscar $request->query->get('buscar'1);
  2323.                 } else {
  2324.                     $buscar null;
  2325.                 }
  2326.                 return $this->redirectToRoute('convenios');
  2327.             }
  2328.         }
  2329.         return('no autorizado');
  2330.     }
  2331.     /**
  2332.      * @Route("/datos_paciente/{id}", name="datos_paciente")
  2333.      */
  2334.     public function datosPacientes(Request $request$id null)
  2335.     {
  2336.         $user $this->getUser();
  2337.         if ($user) {
  2338.             if ($this->isGranted('ROLE_MEDICO')) {
  2339.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2340.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2341.                 $entityManager $this->getDoctrine()->getManager();
  2342.                 // dd($id);
  2343.                 $paciente $this->getDoctrine()->getRepository('App:Paciente')->find($id);
  2344.                 
  2345.                 // dd($paciente);
  2346.                 $form $this->createFormBuilder()
  2347.                     ->add('nombres'TextType::class)
  2348.                     ->add('apellidos'TextType::class)
  2349.                     ->getForm();
  2350.                 $form->handleRequest($request);
  2351.                 if ($form->isSubmitted() && $form->isValid()) {
  2352.                     // data is an array with "name", "email", and "message" keys
  2353.                     $data $form->getData();
  2354.                     // dd($id);
  2355.                     // dd($data["nota"]);
  2356.                     $paciente $this->getDoctrine()->getRepository(Paciente::class)->find($id);
  2357.                     // $atencion = $entityManager->getRepository(Atencion::class)->find($id);
  2358.                     $paciente->setApellido($data["apellidos"]);
  2359.                     $em $this->getDoctrine()->getManager();
  2360.                     $em->persist($paciente);
  2361.                     $em->flush();
  2362.                     return $this->redirectToRoute('nueva_atencion', ['id' => $id]);
  2363.                     
  2364.                     dd('ok');
  2365.                 }
  2366.  
  2367.                 return $this->render('medicos/datos_paciente.html.twig', [
  2368.                     'perfilmedico' => $perfilmedico,
  2369.                     'pacienteid' => $id,
  2370.                     'paciente' => $paciente,
  2371.                     'form' => $form->createView()
  2372.                 ]);
  2373.             }
  2374.         }
  2375.         return('no autorizado');
  2376.     }
  2377.     /**
  2378.      * @Route("/antecedentes/{id}", name="antecedentes")
  2379.      */
  2380.     public function antecedentes(Request $request$id=null)
  2381.     {
  2382.         $user $this->getUser();
  2383.         if ($user) {
  2384.             if ($this->isGranted('ROLE_MEDICO')) {
  2385.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2386.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2387.                 $paciente $this->getDoctrine()->getRepository('App:Paciente')->find($id);  
  2388.                                 
  2389.                 return $this->render('medicos/antecedentes.html.twig', [
  2390.                     'perfilmedico' => $perfilmedico,
  2391.                     'paciente' => $paciente
  2392.                 ]);
  2393.             }
  2394.         } 
  2395.         return $this->redirectToRoute('homepage');
  2396.     }
  2397.     /**
  2398.      * @Route("/medico_historias/{id}", name="medico_historias")
  2399.      */
  2400.     public function historiasmedicos(Request $request$id null)
  2401.     {
  2402.         $user $this->getUser();
  2403.         if ($user) {
  2404.             if ($this->isGranted('ROLE_MEDICO')) {
  2405.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2406.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2407.                 
  2408.                 $atenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  2409.                     ->select('a.id''a.motivo''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid','u.nombre''u.apellido')
  2410.                     ->leftJoin('a.medico''m')
  2411.                     ->leftJoin('m.usuario''u')
  2412.                     ->leftJoin('m.especialidad''e')
  2413.                     ->where('a.paciente = :pacienteid')
  2414.                     ->setParameter('pacienteid'$id)
  2415.                     ->orderBy('a.fecha''desc')
  2416.                     ->getQuery()
  2417.                     ->getArrayResult();
  2418.                 
  2419.                 return $this->render('medicos/historias.html.twig', [
  2420.                     'perfilmedico' => $perfilmedico,
  2421.                     'atenciones' => $atenciones
  2422.                 ]);
  2423.             }
  2424.         }
  2425.         return $this->redirectToRoute('homepage');
  2426.     }
  2427.     /**
  2428.      * @Route("/medico_historia/{id}", name="medico_historia")  
  2429.      */
  2430.     public function medicohistoria(Request $request$id=null)
  2431.     {        
  2432.         $perfil=null;
  2433.         $em $this->getDoctrine()->getManager();
  2434.         if($this->isGranted('ROLE_MEDICO')){
  2435.             $perfil 'ROLE_MEDICO';
  2436.         }
  2437.         if($this->isGranted('ROLE_PACIENTE')){
  2438.             $perfil 'ROLE_PACIENTE';
  2439.         }
  2440.         $user $this->getUser();
  2441.         if ($user) {
  2442.             // colocar otra condicion para que un paciente pueda ver su historia clinic
  2443.             if ($this->isGranted('ROLE_MEDICO') || $this->isGranted('ROLE_PACIENTE') ) {
  2444.                 $atencion $this->getDoctrine()->getRepository(Atencion::class)->find($id);
  2445.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2446.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2447.                 //$perfilmedico = $atencion->getMedico();
  2448.                 $atencion->setVisto(1);
  2449.                 $em->persist($atencion);
  2450.                 $em->flush();
  2451.                 $atencion $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  2452.                     ->select('a.id''a.motivo''a.examenfisico''a.subjetivo''a.analisis''a.plan''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid','u.nombre''u.apellido''p.id as pacienteid''a.imagenurl','a.nota')
  2453.                     ->leftJoin('a.medico''m')
  2454.                     ->leftJoin('m.usuario''u')
  2455.                     ->leftJoin('m.especialidad''e')
  2456.                     ->leftJoin('a.paciente''p')
  2457.                     ->where('a.id = :atencionid')
  2458.                     ->setParameter('atencionid'$id)
  2459.                     ->getQuery()
  2460.                     ->getSingleResult();                
  2461.                 
  2462.                 $ordenes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  2463.                     ->select('a')
  2464.                     ->leftJoin('a.medico''m')
  2465.                     ->leftJoin('m.usuario''u')
  2466.                     ->leftJoin('m.especialidad''e')
  2467.                     ->Where('a.id = :atencionid')
  2468.                     ->setParameter('atencionid'$id)
  2469.                     ->orderBy('a.fecha''desc')
  2470.                     ->getQuery()
  2471.                     ->getResult();
  2472.                 $atenciones_formulas $this->getDoctrine()->getRepository(AtencionMedicamento::class)->createQueryBuilder('d')
  2473.                     ->select'md.nombre as medicamento_descripcion''md.id as formula_codigo','d.recomendacion as recomendacion')
  2474.                     ->leftJoin('d.atencion''a')
  2475.                     ->leftJoin('d.medicamento''md')
  2476.                     ->Where('a.id = :atencionid')
  2477.                     ->setParameter('atencionid'$id)
  2478.                     ->orderBy('d.id''desc')
  2479.                     ->getQuery()
  2480.                     ->getArrayResult();
  2481.                 $metricas $this->getDoctrine()->getRepository(MetricaAtencion::class)->createQueryBuilder('ma')
  2482.                     ->select('ma')
  2483.                     ->where('ma.atencion = :atencionid')
  2484.                     ->setParameter('atencionid'$id)
  2485.                     ->getQuery()
  2486.                     ->getResult();
  2487.                 $adjuntos $this->getDoctrine()->getRepository(Atencionadjunto::class)->createQueryBuilder('adj')
  2488.                     ->select('adj.url')
  2489.                     ->where('adj.atencion = :atencionid')
  2490.                     ->setParameter('atencionid'$id)
  2491.                     ->getQuery()
  2492.                     ->getResult();
  2493.                 $autorizacion $this->getDoctrine()->getRepository('App:Autorizacionhistorial')->findOneBy(['atencion' => $id,'aprobado' => true],['id'=>'DESC']);
  2494.                 $defaultData = ['message' => 'Type your message here'];
  2495.                 $form $this->createFormBuilder($defaultData)
  2496.                     ->add('nota'TextareaType::class)
  2497.                     ->add('save'SubmitType::class, [
  2498.                         'attr' => ['class' => 'btn bg-azul1 color-blanco rounded py-2 px-5']
  2499.                     ])
  2500.                     ->getForm();
  2501.                 $form->handleRequest($request);
  2502.                 if ($form->isSubmitted() && $form->isValid()) {
  2503.                     $data $form->getData();
  2504.                     $atencion $this->getDoctrine()->getRepository(Atencion::class)->find($id);
  2505.                     $atencion->setNota($data["nota"]);
  2506.                     // $em = $this->getDoctrine()->getManager();
  2507.                     $em->persist($atencion);
  2508.                     $em->flush();
  2509.                     if($autorizacion){
  2510.                         $autorizacion->setAprobado(false);
  2511.                         $em->persist($autorizacion);
  2512.                         $em->flush();
  2513.                     }
  2514.                     return $this->redirectToRoute('paciente_interna', ['id' => $atencion->getPaciente()->getId()]);                    
  2515.                 }
  2516.                 return $this->render('medicos/historia.html.twig', [
  2517.                     'perfil'              => $perfil,
  2518.                     'atencion'            => $atencion,
  2519.                     'perfilmedico'        => $perfilmedico,
  2520.                     'path_historias'      => 'medico_historia'
  2521.                     'metricas'            => $metricas,
  2522.                     'adjuntos'            => $adjuntos,
  2523.                     'ordenes'             => $ordenes,
  2524.                     'atenciones_formulas' => $atenciones_formulas,
  2525.                     'autorizacion'        => $autorizacion,
  2526.                     'form'                => $form->createView()
  2527.                 ]);
  2528.             }
  2529.         }else{
  2530.             return $this->redirectToRoute('homepage'); 
  2531.         }
  2532.     }
  2533.     /**
  2534.      * @Route("/aseguradoras", name="aseguradoras")
  2535.      */
  2536.     public function Aseguradora(Request $request)
  2537.     {
  2538.         $user $this->getUser();
  2539.         if ($user) {
  2540.             if ($this->isGranted('ROLE_MEDICO')) {
  2541.                 if ($request->query->has('buscar')) {
  2542.                     $buscar $request->query->get('buscar'1);
  2543.                 } else {
  2544.                     $buscar null;
  2545.                 }
  2546.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2547.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2548.                 $query $this->getDoctrine()->getRepository(Aseguradora::class)->createQueryBuilder('a')
  2549.                     ->select('a' )
  2550.                     ->where('a.visible = true')
  2551.                     ->andWhere('a.medico = :medico')
  2552.                     ->setParameter('medico'$perfilmedico->getId());
  2553.                 if ($buscar) {
  2554.                     $query->
  2555.                         andWhere('a.nombreapellido like :buscar')
  2556.                         ->setParameter('buscar''%'.$buscar.'%');
  2557.                 }
  2558.                     $query
  2559.                     ->orderBy('a.nombreapellido''ASC')
  2560.                     ->getQuery()
  2561.                     ->getResult();
  2562.                 $aseguradoras $query->getQuery()->getResult();
  2563.                 
  2564.                 $tipos_documento $this->getDoctrine()->getRepository(Tipodocumento::class)->createQueryBuilder('td')
  2565.                     ->select('td' )
  2566.                     ->where('td.visible = true')
  2567.                     ->orderBy('td.orden''ASC')
  2568.                     ->getQuery()
  2569.                     ->getArrayResult();
  2570.                 $regimen_fiscal $this->getDoctrine()->getRepository(Regimenfiscal::class)->createQueryBuilder('td')
  2571.                     ->select('td' )
  2572.                     ->where('td.visible = true')
  2573.                     ->getQuery()
  2574.                     ->getArrayResult();
  2575.                     
  2576.                 $responsabilidad_fiscal $this->getDoctrine()->getRepository(Responsabilidadfiscal::class)->createQueryBuilder('rf')
  2577.                     ->select('rf' )
  2578.                     ->where('rf.visible = true')
  2579.                     ->getQuery()
  2580.                     ->getArrayResult();
  2581.                 $codigo_ciuu $this->getDoctrine()->getRepository(Codigociuu::class)->createQueryBuilder('c')
  2582.                     ->select('c' )
  2583.                     ->where('c.visible = true')
  2584.                     ->getQuery()
  2585.                     ->getArrayResult();
  2586.                 $ciudades $this->getDoctrine()->getRepository(Ciudad::class)->createQueryBuilder('c')
  2587.                     ->select('c.id''c.nombre' )
  2588.                     ->where('c.visible = true')
  2589.                     ->orderBy('c.nombre''ASC')
  2590.                     ->getQuery()
  2591.                     ->getArrayResult();
  2592.                 $naturalezas $this->getDoctrine()->getRepository(Naturaleza::class)->createQueryBuilder('n')
  2593.                     ->select('n.id''n.nombre' )
  2594.                     ->where('n.visible = true')
  2595.                     ->orderBy('n.nombre''ASC')
  2596.                     ->getQuery()
  2597.                     ->getArrayResult();
  2598.                 $naturalezas $this->getDoctrine()->getRepository(Naturaleza::class)->createQueryBuilder('n')
  2599.                     ->select('n.id''n.nombre' )
  2600.                     ->where('n.visible = true')
  2601.                     ->orderBy('n.nombre''ASC')
  2602.                     ->getQuery()
  2603.                     ->getArrayResult();
  2604.                 $clasificacion_aseguradora $this->getDoctrine()->getRepository(Clasificacionaseguradora::class)->createQueryBuilder('n')
  2605.                     ->select('n.id''n.nombre' )
  2606.                     ->where('n.visible = true')
  2607.                     ->orderBy('n.nombre''ASC')
  2608.                     ->getQuery()
  2609.                     ->getArrayResult();
  2610.                 return $this->render('medicos/aseguradora.html.twig', [
  2611.                     'perfilmedico' => $perfilmedico,
  2612.                     'aseguradoras' => $aseguradoras,
  2613.                     'tipos_documento' => $tipos_documento,
  2614.                     'regimen_fiscal' => $regimen_fiscal,
  2615.                     'responsabilidad_fiscal' => $responsabilidad_fiscal,
  2616.                     'codigo_ciuu' => $codigo_ciuu,
  2617.                     'ciudades' => $ciudades,
  2618.                     'naturalezas' => $naturalezas,
  2619.                     'clasificacion_aseguradora' => $clasificacion_aseguradora
  2620.                 ]);
  2621.             }
  2622.         }
  2623.         return $this->redirectToRoute('homepage');
  2624.     }
  2625.     /**
  2626.      * @Route("/convenios", name="convenios")
  2627.      */
  2628.     public function Convenios(Request $request)
  2629.     {
  2630.         $user $this->getUser();
  2631.         if ($user) {
  2632.             if ($this->isGranted('ROLE_MEDICO')) {
  2633.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2634.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2635.                 if ($request->query->has('buscar')) {
  2636.                     $buscar $request->query->get('buscar'1);
  2637.                 } else {
  2638.                     $buscar null;
  2639.                 }
  2640.                 $query $this->getDoctrine()->getRepository(Convenio::class)->createQueryBuilder('c')
  2641.                     ->select('c' )
  2642.                     ->leftjoin('c.medico''m')
  2643.                     ->leftjoin('c.administradora''a')
  2644.                     ->where('m.id =:medicoid')
  2645.                     ->setParameter('medicoid'$perfilmedico->getId())
  2646.                     ->andWhere('c.visible = true');
  2647.                     
  2648.                 if ($buscar) {
  2649.                     $query->
  2650.                         andWhere('c.fechafinal like :buscar or c.numerocontrato like :buscar or c.descripcion like :buscar or c.numpoliza like :buscar or c.codigocontrato like :buscar or a.nombre like :buscar or c.valor like :buscar ')
  2651.                         ->setParameter('buscar''%'.$buscar.'%');
  2652.                 }
  2653.                     $query
  2654.                     ->getQuery()
  2655.                     ->getResult();
  2656.                 $convenios $query->getQuery()->getResult();
  2657.                 $estados_convenio $this->getDoctrine()->getRepository(Estadoconvenio::class)->createQueryBuilder('ec')
  2658.                     ->select('ec.id''ec.nombre' )
  2659.                     ->orderBy('ec.nombre''ASC')
  2660.                     ->getQuery()
  2661.                     ->getArrayResult();
  2662.                 $modalidades_pago $this->getDoctrine()->getRepository(Modalidadpago::class)->createQueryBuilder('mp')
  2663.                     ->select('mp.id''mp.nombre' )
  2664.                     ->orderBy('mp.nombre''ASC')
  2665.                     ->getQuery()
  2666.                     ->getArrayResult();
  2667.                 $administradoras $this->getDoctrine()->getRepository(Administradora::class)->createQueryBuilder('a')
  2668.                     ->select('a.id''a.nombre''a.regimen''a.codigo')
  2669.                     ->where('a.visible = true')
  2670.                     ->orderBy('a.nombre''ASC')
  2671.                     ->getQuery()
  2672.                     ->getArrayResult();
  2673.                 $planes_beneficio $this->getDoctrine()->getRepository(Planbeneficio::class)->createQueryBuilder('p')
  2674.                     ->select('p.id''p.nombre' )
  2675.                     ->where('p.visible = true')
  2676.                     ->orderBy('p.nombre''ASC')
  2677.                     ->getQuery()
  2678.                     ->getArrayResult();
  2679.                 $lista_precios $this->getDoctrine()->getRepository(Listaprecio::class)->createQueryBuilder('l')
  2680.                     ->select('l' )
  2681.                     ->leftjoin('l.medico''m')
  2682.                     ->where('m.id =:medicoid')
  2683.                     ->setParameter('medicoid'$perfilmedico->getId())
  2684.                     ->orderBy('l.nombre''ASC')
  2685.                     ->getQuery()
  2686.                     ->getResult();
  2687.                 
  2688.                 return $this->render('medicos/convenios.html.twig', [ 
  2689.                     'perfilmedico'       => $perfilmedico,
  2690.                     'convenios'          => $convenios,
  2691.                     'estados_convenio'   => $estados_convenio,
  2692.                     'administradoras'    => $administradoras,
  2693.                     'modalidades_pago'   => $modalidades_pago,
  2694.                     'planes_beneficio'   => $planes_beneficio,
  2695.                     'lista_precios'      => $lista_precios,
  2696.                     'buscar'             => $buscar,
  2697.                     'usuario' => $user,
  2698.                 ]);
  2699.             }
  2700.         }
  2701.         return $this->redirectToRoute('homepage');
  2702.     }
  2703.     /**
  2704.      * @Route("/catalogo", name="catalogo")
  2705.      */
  2706.     public function Catalogo(Request $request)  
  2707.     {
  2708.         $user $this->getUser();
  2709.         if ($user) {
  2710.             if ($this->isGranted('ROLE_MEDICO')) {
  2711.                 $um $this->userManager;
  2712.                 $user $um->findUserBy(array('uid' => $user->getUid() ));
  2713.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2714.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2715.                 
  2716.                 $url_avatar_default $this->qi->getSetting('avatar-default');
  2717.                 if ($request->query->has('buscar')) {
  2718.                     $buscar $request->query->get('buscar'1);
  2719.                 } else {
  2720.                     $buscar null;
  2721.                 }
  2722.                 $qb       $this->getDoctrine()->getRepository(Servicio::class)->createQueryBuilder('s');
  2723.                 $catalogo $qb->select('s')
  2724.                     ->leftjoin('s.medico''m')
  2725.                     ->where('m.id =:medicoid')
  2726.                     ->setParameter('medicoid'$perfilmedico->getId())
  2727.                     ->andWhere('s.visible = true');
  2728.                     if ($buscar) {
  2729.                         $catalogo $qb->andWhere('s.codigorips like :buscar or s.documento like :buscar or s.codigobarras like :buscar')
  2730.                         ->setParameter('buscar''%'.$buscar.'%');
  2731.                     }
  2732.                     $catalogo $qb->orderBy('s.codigorips''ASC')
  2733.                     ->getQuery()
  2734.                     ->getResult();
  2735.                 $conceptos $this->getDoctrine()->getRepository(Conceptoservicio::class)->createQueryBuilder('c')
  2736.                     ->select('c' )
  2737.                     ->orderBy('c.nombre''ASC')
  2738.                     ->getQuery()
  2739.                     ->getArrayResult();
  2740.                 $lista_iva $this->getDoctrine()->getRepository(Iva::class)->createQueryBuilder('i')
  2741.                     ->select('i' )
  2742.                     ->orderBy('i.orden''ASC')
  2743.                     ->getQuery()
  2744.                     ->getArrayResult();
  2745.                 $lista_precios $this->getDoctrine()->getRepository(Listaprecio::class)->createQueryBuilder('l')
  2746.                     ->select('l' )
  2747.                     ->leftjoin('l.medico''m')
  2748.                     ->where('m.id =:medicoid')
  2749.                     ->setParameter('medicoid'$perfilmedico->getId())
  2750.                     ->orderBy('l.nombre''ASC')
  2751.                     ->getQuery()
  2752.                     ->getResult();
  2753.                 $paquetes $this->getDoctrine()->getRepository(Paquete::class)->createQueryBuilder('p')
  2754.                     ->select('p' )
  2755.                     ->leftjoin('p.medico''m')
  2756.                     ->where('m.id =:medicoid')
  2757.                     ->setParameter('medicoid'$perfilmedico->getId())
  2758.                     ->orderBy('p.nombre''ASC')
  2759.                     ->getQuery()
  2760.                     ->getResult();
  2761.                     // dd($catalogo);
  2762.                 return $this->render('medicos/catalogo.html.twig', [
  2763.                     'perfilmedico'  => $perfilmedico,
  2764.                     'catalogo'      => $catalogo,
  2765.                     'lista_iva'     => $lista_iva,
  2766.                     'conceptos'     => $conceptos,
  2767.                     'lista_precios' => $lista_precios,
  2768.                     'paquetes'      => $paquetes,
  2769.                     'buscar'        => $buscar,
  2770.                     'usuario' => $user,
  2771.                 ]);  
  2772.             } else {
  2773.                 return $this->redirectToRoute('homepage');
  2774.             }
  2775.         }
  2776.         
  2777.         return $this->redirectToRoute('homepage');
  2778.     }
  2779.     /**
  2780.      * @Route("/facturacion/{id}", name="facturacion")
  2781.      */
  2782.     public function Facturacion(Request $request$id=null)
  2783.     {
  2784.         $user $this->getUser();
  2785.         if ($user) {
  2786.             if ($this->isGranted('ROLE_MEDICO')) {
  2787.                 if ($id === null) return $this->redirectToRoute('home_medicos');
  2788.                 $um             $this->userManager;
  2789.                 $user           $um->findUserBy(array('uid' => $user->getUid() ));
  2790.                 $repository     $this->getDoctrine()->getRepository(Perfilmedico::class);
  2791.                 $perfilmedico   $repository->findOneBy(['usuario' => $user->getId()]);
  2792.                 $paciente       $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);
  2793.                 $facturas       $this->getDoctrine()->getRepository(Factura::class)->findBy(['paciente'=>$paciente,'medico'=>$perfilmedico]);
  2794.                 $facturas_items "";
  2795.                 if($facturas)
  2796.                     $facturas_items $this->getDoctrine()->getRepository(FacturaItem::class)->findBy(['factura'=> $facturas],['id'=>'DESC']);
  2797.                 return $this->render('medicos/facturacion.html.twig', [
  2798.                     'perfilmedico'   => $perfilmedico,
  2799.                     'paciente'       => $paciente,
  2800.                     'facturas'       => $facturas,
  2801.                     'facturas_items' => $facturas_items,
  2802.                 ]);
  2803.             } else {
  2804.                 return $this->redirectToRoute('homepage');
  2805.             }
  2806.         }
  2807.         return $this->redirectToRoute('homepage');
  2808.     }
  2809.     /**
  2810.      * @Route("/listado_facturacion", name="listado_facturacion")
  2811.      */
  2812.     public function ListadoFacturacion(Request $request)
  2813.     {
  2814.         $user $this->getUser();
  2815.         $queried false;                          
  2816.         if ($user) {
  2817.             if ($request->query->has('buscar')) {
  2818.                 $buscar $request->query->get('buscar'1);
  2819.             } else {
  2820.                 $buscar null;
  2821.             }
  2822.     
  2823.             if ($buscar != null) {
  2824.                 if ($buscar == 'ultimasfacturas') {
  2825.                     $facturas $this->getDoctrine()->getRepository(Factura::class)->createQueryBuilder('f')
  2826.                         ->select('f','paciente')
  2827.                         ->leftJoin('f.formapago''formapago')
  2828.                         ->leftJoin('f.paciente''paciente')
  2829.                         ->leftJoin('f.medico''medico')
  2830.                         ->where('f.visible = true')
  2831.                         ->getQuery()
  2832.                         ->getArrayResult();
  2833.                     $queried true;
  2834.     
  2835.                 } else {
  2836.                     $query $this->getDoctrine()->getRepository('App:Factura')->createQueryBuilder('f')
  2837.                         ->select('f','paciente');
  2838.     
  2839.                     $query
  2840.                     ->leftJoin('f.paciente''paciente')
  2841.                     ->leftJoin('f.formapago''metodopago')
  2842.                     ->andWhere("f.numeracion like :buscar OR paciente.nombre like :buscar OR metodopago.nombre like :buscar OR f.fechavence like :buscar")
  2843.                         ->setParameter('buscar''%'.$buscar.'%');
  2844.                         $facturas $query->getQuery()->getResult();
  2845.                     $queried true;
  2846.                 }
  2847.             }
  2848.             if ($this->isGranted('ROLE_MEDICO')) {
  2849.                 $user           $this->userManager->findUserBy(array('uid' => $user->getUid() ));
  2850.                 $perfilmedico   $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
  2851.                 if($queried == false){
  2852.                     $facturas       $this->getDoctrine()->getRepository(Factura::class)->findBy(['medico'=> $perfilmedico'visible' => true]);
  2853.                 }
  2854.                 $convenios   $this->getDoctrine()->getRepository(Convenio::class)->findAll();
  2855.                 $servicios   $this->getDoctrine()->getRepository(Servicio::class)->findAll();
  2856.                 $facturas_items "";
  2857.                 if($facturas)
  2858.                     $facturas_items $this->getDoctrine()->getRepository(FacturaItem::class)->findBy(['factura'=> $facturas],['id'=>'DESC']);
  2859.                 return $this->render('medicos/listado_facturacion.html.twig', [ 
  2860.                     'perfilmedico'   => $perfilmedico,
  2861.                     'facturas'       => $facturas,
  2862.                     'convenios'       => $convenios,
  2863.                     'servicios'       => $servicios,
  2864.                     'facturas_items' => $facturas_items,
  2865.                     'buscar' => $buscar
  2866.                     'usuario' => $user,
  2867.                 ]);
  2868.             } else {
  2869.                 return $this->redirectToRoute('homepage');
  2870.             }
  2871.         }
  2872.         return $this->redirectToRoute('homepage');
  2873.     }
  2874.     /**
  2875.      * @Route("/crearFactura/{id}", name="crearFactura")
  2876.      */
  2877.     public function crearFactura(Request $request$id)
  2878.     {
  2879.        
  2880.         $user $this->getUser();
  2881.         if ($user) {
  2882.             if ($this->isGranted('ROLE_MEDICO')) {
  2883.                 $um $this->userManager;
  2884.                 $user $um->findUserBy(array('uid' => $user->getUid() ));
  2885.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2886.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2887.                 $paciente $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);                
  2888.                 // $convenios = $this->getDoctrine()->getRepository(Convenio::class)->find(['visible' => true]);
  2889.                 $convenios $this->getDoctrine()->getRepository(Convenio::class)->createQueryBuilder('c')
  2890.                     ->select('c')
  2891.                     ->leftjoin('c.medico''m')
  2892.                     ->where('m.id =:medicoid')
  2893.                     ->andWhere('c.visible = true')
  2894.                     ->setParameter('medicoid'$perfilmedico->getId())
  2895.                     // ->orderBy('s.codigorips', 'ASC')
  2896.                     ->getQuery()
  2897.                     ->getResult(); 
  2898.                 
  2899.                 $servicios $this->getDoctrine()->getRepository(Servicio::class)->createQueryBuilder('s')
  2900.                     ->select('s')
  2901.                     ->leftjoin('s.medico''m')
  2902.                     ->where('m.id =:medicoid')
  2903.                     ->andWhere('s.visible = true')
  2904.                     ->setParameter('medicoid'$perfilmedico->getId())
  2905.                     ->orderBy('s.codigorips''ASC')
  2906.                     ->getQuery()
  2907.                     ->getResult();  
  2908.  
  2909.                 $lista_iva $this->getDoctrine()->getRepository(Iva::class)->createQueryBuilder('i')
  2910.                     ->select('i' )
  2911.                     ->orderBy('i.orden''ASC')
  2912.                     ->getQuery()
  2913.                     ->getArrayResult();
  2914.                 $finalidad $this->getDoctrine()->getRepository(Finalidad::class)->createQueryBuilder('f')
  2915.                     ->select('f')
  2916.                     ->orderBy('f.nombre''ASC')
  2917.                     ->getQuery()
  2918.                     ->getArrayResult();
  2919.                 $causa_externa $this->getDoctrine()->getRepository(CausaExterna::class)->createQueryBuilder('f')
  2920.                     ->select('f')
  2921.                     ->orderBy('f.nombre''ASC')
  2922.                     ->getQuery()
  2923.                     ->getArrayResult();
  2924.                 $administradoras $this->getDoctrine()->getRepository(Administradora::class)->createQueryBuilder('a')
  2925.                     ->select('a.id''a.nombre' )
  2926.                     ->where('a.visible = true')
  2927.                     ->orderBy('a.nombre''ASC')
  2928.                     ->getQuery()
  2929.                     ->getArrayResult();
  2930.                 $metodos_pago $this->getDoctrine()->getRepository(MetodoPago::class)->createQueryBuilder('mp')
  2931.                     ->select('mp.id''mp.nombre' )
  2932.                     ->where('mp.visible = true')
  2933.                     ->orderBy('mp.nombre''ASC')
  2934.                     ->getQuery()
  2935.                     ->getArrayResult();
  2936.                 return $this->render('medicos/crearFactura.html.twig', [
  2937.                     'perfilmedico'    => $perfilmedico,
  2938.                     'convenios'       => $convenios,
  2939.                     'servicios'       => $servicios,
  2940.                     'lista_iva'       => $lista_iva,
  2941.                     'administradoras' => $administradoras,
  2942.                     'mp'              => $metodos_pago,
  2943.                     'finalidad'       => $finalidad,
  2944.                     'causa_externa'   => $causa_externa,
  2945.                     'paciente_id'     => $paciente->getId() 
  2946.                 ]);
  2947.             } else {
  2948.                 return $this->redirectToRoute('homepage');
  2949.             }
  2950.                 
  2951.         }
  2952.         return $this->redirectToRoute('homepage');
  2953.     }
  2954.     /**
  2955.      * @Route("/nuevaFactura", name="nuevaFactura")
  2956.      */
  2957.     public function nuevaFactura(Request $request)
  2958.     {
  2959.         $user $this->getUser();
  2960.         if ($user) {
  2961.             if ($this->isGranted('ROLE_MEDICO')) {
  2962.                 $um $this->userManager;
  2963.                 $user $um->findUserBy(array('uid' => $user->getUid() ));
  2964.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  2965.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  2966.                 
  2967.  
  2968.                 return $this->render('medicos/nuevaFactura.html.twig', [
  2969.                     'perfilmedico' => $perfilmedico
  2970.                 ]);
  2971.             } else {
  2972.                 return $this->redirectToRoute('homepage');
  2973.             }
  2974.                 
  2975.         }
  2976.         return $this->redirectToRoute('homepage');
  2977.     }
  2978. }