src/Controller/HomeController.php line 149

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Alergia;
  4. use App\Entity\Faq;
  5. use App\Entity\TipSalud;
  6. use App\Entity\Usuario;
  7. use App\Entity\Perfilmedico;
  8. use App\Entity\Paciente;
  9. use App\Entity\Diploma;
  10. use App\Entity\Atencion;
  11. use App\Entity\MetricaAtencion;
  12. use App\Entity\Diagnostico;
  13. use App\Entity\Atencionadjunto;
  14. use App\Entity\Catalogo;
  15. use App\Entity\Orden;
  16. use App\Entity\Eps;
  17. use App\Entity\Tipodocumento;
  18. use App\Entity\Servicio;
  19. use App\Entity\Especialidad;
  20. use App\Entity\Prediagnostico;
  21. use App\Entity\Metrica;
  22. use App\Entity\Interrogatorio;
  23. use App\Entity\GrupoFormula;
  24. use App\Entity\GrupoImagen;
  25. use App\Entity\GrupoParaclinico;
  26. use App\Entity\Paraclinico;
  27. use App\Entity\Imagen;
  28. use App\Entity\Procedimiento;
  29. use App\Entity\Terapia;
  30. use App\Entity\Medicamento;
  31. use App\Entity\ServicioCatalogo;
  32. use Symfony\Component\HttpFoundation\JsonResponse;
  33. use App\Entity\AntecedentePersonal;
  34. use App\Form\ContactoType;
  35. use App\Form\DireccionType;
  36. use App\Form\PerfilType;
  37. use App\Form\PerfilmedicoType;
  38. use App\Form\AtencionType;
  39. use App\Service\QI;
  40. use FOS\UserBundle\Event\GetResponseNullableUserEvent;
  41. use FOS\UserBundle\Event\GetResponseUserEvent;
  42. use FOS\UserBundle\Model\UserInterface;
  43. use FOS\UserBundle\Model\UserManagerInterface;
  44. use FOS\UserBundle\Util\TokenGeneratorInterface;
  45. use Kreait\Firebase;
  46. use Kreait\Firebase\Factory;
  47. use Kreait\Firebase\ServiceAccount;
  48. use phpDocumentor\Reflection\Types\This;
  49. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  50. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  51. use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface;
  52. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  53. use Symfony\Component\HttpFoundation\RedirectResponse;
  54. use Symfony\Component\HttpFoundation\Request;
  55. use Symfony\Component\HttpFoundation\Response;
  56. use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
  57. use Symfony\Component\Routing\Annotation\Route;
  58. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  59. use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
  60. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  61. use Symfony\Component\Serializer\Encoder\JsonEncode;
  62. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  63. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  64. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  65. use Symfony\Component\Serializer\Serializer;
  66. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  67. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  68. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  69. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  70. class HomeController extends AbstractController
  71. {
  72.     private  $qi;
  73.     private $userManager;
  74.     private $retryTtl;
  75.     private $tokenGenerator;
  76.     private $eventDispatcher;
  77.     private $authorization;
  78.     public function __construct(QI $qiUserManagerInterface $userManager,TokenGeneratorInterface $tokenGeneratorEventDispatcherInterface $eventDispatcher,AuthorizationCheckerInterface $authorization)
  79.     {
  80.         $this->qi $qi;
  81.         $this->userManager $userManager;
  82.         $this->retryTtl 7200;
  83.         $this->tokenGenerator $tokenGenerator;
  84.         $this->eventDispatcher $eventDispatcher;
  85.         $this->authorization $authorization;
  86.     }
  87.     /**
  88.      * @Route("/direcciones", name="direcciones")
  89.      */
  90.     public function direcciones(Request $request)
  91.     {
  92.         $dirs $this->getDoctrine()->getRepository('App:Direccion')->findAll();
  93.         foreach ($dirs as $dir){
  94.             $this->qi->saveFire($dir);
  95.         }
  96.         $res =$this->qi->sendMail("envio de prueba"'ferney@iridian.co'"este mensaje es de prueba");
  97.         dd($res);
  98.     }
  99.     /**
  100.      * @Route("/test_mail", name="test_mail")
  101.      */
  102.     public function testMail(Request $request)
  103.     {
  104.         $res =$this->qi->sendMail("envio de prueba"'ferney@iridian.co'"este mensaje es de prueba");
  105.         dd($res);
  106.     }
  107.     /**
  108.      * @Route("/base", name="base")
  109.      */
  110.     public function base(Request $request)
  111.     {
  112.         return $this->render('home/base.html.twig', [
  113.             
  114.         ]);
  115.     }
  116.     /**
  117.      * @Route("/validar/csrf_token", name="validar_csrf_token")
  118.      */
  119.     public function validarCsrf(Request $request)
  120.     {
  121.         $submittedToken $request->request->get('token');
  122.         $submittedTokenName $request->request->get('name');
  123.         if ($this->isCsrfTokenValid($submittedTokenName$submittedToken)) {
  124.             return new JsonResponse(["ok"=>true]);
  125.         }
  126.         return new JsonResponse(["ok"=>false]);
  127.     }
  128.     /**
  129.      * @Route("/", name="homepage")
  130.      */
  131.     public function home(Request $request)
  132.     {
  133.         $imagenes $this->getDoctrine()->getRepository('App:Image')->findAll();
  134.         foreach ($imagenes as $image){
  135.             $this->qi->saveFire($image);
  136.         }
  137.         $session        $request->getSession();
  138.         $mostre_en_home $session->get('cierre_home','0') == '1';
  139.         $session->set('cierre_home','0');
  140.         $prediagnostico $request->query->get('prediagnostico');
  141.         $id_paciente    $request->query->get('paciente');
  142.         $paciente       '';
  143.         $user           0;
  144.         if($prediagnostico == '')
  145.             $prediagnostico 1;   
  146.              
  147.         if($id_paciente)
  148.             $paciente     $this->getDoctrine()->getRepository('App:Paciente')->find($id_paciente);
  149.             if($paciente)
  150.                 $user     $this->userManager->findUserBy(['email'=> $paciente->getEmail()]);
  151.                 if($user)
  152.                     $user 1;
  153.                 else
  154.                     $user 0;
  155.                  
  156.         $tipos_documentos $this->getDoctrine()->getRepository(Tipodocumento::class)->createQueryBuilder('td')
  157.             ->select('td.id''td.codigo''td.nombre')
  158.             ->where('td.visible = true')
  159.             ->orderBy('td.orden''ASC')
  160.             ->getQuery()
  161.             ->getArrayResult();
  162.         if ($this->isGranted('ROLE_PACIENTE')) {
  163.             return $this->redirectToRoute('home_pacientes');
  164.         }
  165.         if ($this->isGranted('ROLE_MEDICO')) {
  166.             return $this->redirectToRoute('home_medicos');
  167.         }
  168.         
  169.         return $this->render('home/home_new.html.twig', [
  170.             'tipos_documentos' => $tipos_documentos,
  171.             'prediagnostico'   => $prediagnostico,
  172.             'paciente'         => $paciente,
  173.             'user'             => $user,
  174.         ]);
  175.     }
  176.         /**
  177.      * @Route("/get_diagnostico", name="get_diagnostico")
  178.      * @Method({"GET|POST"})
  179.      */
  180.     public function getDiagnostico(Request $request)
  181.     {
  182.         $codigo_diagnostico $request->query->get('codigo_diagnostico');
  183.         $diagnosticos       $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
  184.                     ->select('d','gf','f','gi','i','gp','p')
  185.                     ->leftJoin('d.grupoformula''gf')
  186.                     ->leftJoin('gf.formulas''f')
  187.                     ->leftJoin('d.grupoimagen''gi')
  188.                     ->leftJoin('gi.imagen''i')
  189.                     ->leftJoin('d.grupoparaclinico''gp')
  190.                     ->leftJoin('gp.paraclinico''p')
  191.                     ->where('d.codigo = :codigo')
  192.                     ->setParameter('codigo'$codigo_diagnostico)
  193.                     ->getQuery()
  194.                     ->getArrayResult();
  195.         $formulas     = [];
  196.         $imagenes     = [];
  197.         $paraclinicos = [];
  198.         if($diagnosticos){
  199.             foreach($diagnosticos as $key => $value){
  200.                 if(isset($value['grupoformula']) && $value['grupoformula'] != ''){
  201.                     foreach($value['grupoformula']['formulas'] as $key_formula => $value_formula){
  202.                         array_push($formulas,$value_formula);
  203.                     }
  204.                 }
  205.                 if(isset($value['grupoimagen']) && $value['grupoimagen'] != ''){
  206.                     foreach($value['grupoimagen']['imagen'] as $key_imagen => $value_imagen){
  207.                         array_push($imagenes,$value_imagen);
  208.                     }
  209.                 }
  210.                 if(isset($value['grupoparaclinico']) && $value['grupoparaclinico'] != ''){
  211.                     foreach($value['grupoparaclinico']['paraclinico'] as $key_paraclinico => $value_paraclinico){
  212.                         array_push($paraclinicos,$value_paraclinico);
  213.                     }
  214.                 }
  215.             }
  216.             $mensaje=array('ok' => true'mensaje' => "Ha encontrado informacion"'formula' => $formulas'paraclinico' => $paraclinicos'imagen' => $imagenes);
  217.             $json json_encode($mensaje);
  218.             return new Response($json);
  219.         }
  220.         $mensaje=array('ok' => false'mensaje' => "Ha ocurrido un error");
  221.         $json json_encode($mensaje);
  222.         return new Response($json);
  223.     }
  224.      /**
  225.      * @Route("/pdf", name="pdf")
  226.      */
  227.     public function pdf(Request $request)
  228.     {
  229.         return $this->render('medicos/factura_paciente.html.twig', [
  230.         ]);
  231.     }
  232.     /**
  233.      * @Route("/recover", name="recover")
  234.      */
  235.     public function recover(Request $request)
  236.     {
  237.         return $this->render('basic/recuperar-pss.html.twig', [
  238.         ]);
  239.     }
  240.     /**
  241.      * @Route("/historias", name="historias")
  242.      */
  243.     public function historias(Request $request)
  244.     {
  245.         $user $this->getUser();
  246.         if ($user) {
  247.             if ($this->isGranted('ROLE_PACIENTE')) {
  248.                 $repository $this->getDoctrine()->getRepository(Paciente::class);
  249.                 $paciente $repository->findOneBy(['email' => $user->getEmail()]);
  250.                 if (!$paciente) {
  251.                     return $this->redirectToRoute('configuracion_paciente');
  252.                 }
  253.                 $atenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  254.                     ->select('a.id''a.motivo''a.fecha''e.nombre as especialidad''m.fotourl''m.id as medicoid','u.nombre''u.apellido')
  255.                     ->leftJoin('a.medico''m')
  256.                     ->leftJoin('m.usuario''u')
  257.                     ->leftJoin('m.especialidad''e')
  258.                     ->where('a.paciente = :pacienteid')
  259.                     ->setParameter('pacienteid'$paciente->getId())
  260.                     ->orderBy('a.fecha''desc')
  261.                     ->getQuery()
  262.                     ->getArrayResult();
  263.                 return $this->render('pacientes/historias.html.twig', [
  264.                     'paciente' => $paciente,
  265.                     'atenciones' => $atenciones 
  266.                 ]);
  267.             } else {
  268.                 return $this->redirectToRoute('homepage');
  269.             }
  270.         }
  271.         return $this->redirectToRoute('homepage');
  272.     }
  273.     /**
  274.      * @Route("/historia/{id}", name="historia")
  275.      */
  276.     public function historia(Request $request$id=null)
  277.     {
  278.         $user $this->getUser();
  279.         if ($user) {
  280.             if ($this->isGranted('ROLE_PACIENTE')) {
  281.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  282.                 $repository $this->getDoctrine()->getRepository(Paciente::class);
  283.                 $paciente $repository->findOneBy(['email' => $user->getEmail()]);
  284.                 $atencion $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  285.                     ->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')
  286.                     ->leftJoin('a.medico''m')
  287.                     ->leftJoin('m.usuario''u')
  288.                     ->leftJoin('m.especialidad''e')
  289.                     ->leftJoin('a.paciente''p')
  290.                     ->where('a.id = :atencionid')
  291.                     ->setParameter('atencionid'$id)
  292.                     ->getQuery()
  293.                     ->getSingleResult();
  294.                 $metricas $this->getDoctrine()->getRepository(MetricaAtencion::class)->createQueryBuilder('ma')
  295.                     ->select('ma')
  296.                     ->where('ma.atencion = :atencionid')
  297.                     ->setParameter('atencionid'$id)
  298.                     ->getQuery()
  299.                     ->getResult();
  300.                 $adjuntos $this->getDoctrine()->getRepository(Atencionadjunto::class)->createQueryBuilder('adj')
  301.                     ->select('adj.url')
  302.                     ->where('adj.atencion = :atencionid')
  303.                     ->setParameter('atencionid'$id)
  304.                     ->getQuery()
  305.                     ->getResult();
  306.                 return $this->render('pacientes/historia.html.twig', [
  307.                     'paciente' => $paciente,
  308.                     'atencion' => $atencion,
  309.                     'path_historias' => 'historias',
  310.                     'metricas' => $metricas,
  311.                     'adjuntos' => $adjuntos
  312.                 ]);
  313.             }
  314.         }
  315.         return $this->redirectToRoute('homepage');
  316.     }
  317.      /**
  318.      * @Route("/resultado", name="resultado")
  319.      */
  320.     public function resultados(Request $request)
  321.     {
  322.         return $this->render('pacientes/resultado.html.twig', [
  323.             
  324.         ]);
  325.     }
  326.     
  327.     /**
  328.      * @Route("/perfil_medico_listo", name="perfil_medico_listo")
  329.      */
  330.     public function perfilMedicoListo(Request $request)
  331.     {
  332.         return $this->render('medicos/perfil_medico_listo.html.twig', [
  333.         ]);
  334.         
  335.     }
  336.     /**
  337.      * @Route("/pacientesold", name="pacientesold")
  338.      */
  339.     public function pacientesold(Request $request)
  340.     {
  341.         $user $this->getUser();
  342.         if ($user) {
  343.             if ($this->isGranted('ROLE_MEDICO')) {
  344.                 $repository $this->getDoctrine()->getRepository(Perfilmedico::class);
  345.                 $perfilmedico $repository->findOneBy(['usuario' => $user->getId()]);
  346.                 if (!$perfilmedico) {
  347.                     return $this->redirectToRoute('configuracion_medico');
  348.                }
  349.                 $diagnosticos $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
  350.                     ->select('d' )
  351.                     ->orderBy('d.descripcion''ASC')
  352.                     ->getQuery()
  353.                     ->getArrayResult();
  354.                 if ($request->query->has('buscar')) {
  355.                     $buscar $request->query->get('buscar'1);
  356.                 } else {
  357.                     $buscar null;
  358.                 }
  359.                 if ($request->query->has('diagnostico')) {
  360.                     $diagnostico $request->query->get('diagnostico'1);
  361.                 } else {
  362.                     $diagnostico null;
  363.                 }
  364.                 $queried false;
  365.                 if ($buscar) {
  366.                     if ($buscar == 'ultimasatenciones') {
  367.                         $pacientes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  368.                             ->select('p.id''p.nombre''p.apellido','p.foto''p.fotourl''p.email','p.documento','max(a.fecha) as fecha' )
  369.                             ->leftJoin('a.paciente''p')
  370.                             ->groupBy('a.paciente')
  371.                             ->orderBy('p.nombre''asc')
  372.                             ->getQuery()
  373.                             ->getArrayResult();
  374.                         $queried true;
  375.                     } else {
  376.                         $query $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
  377.                             ->select('p');
  378.     
  379.                         $query
  380.                             ->where('p.nombre like :buscar')
  381.                             ->setParameter('buscar''%'.$buscar.'%');
  382.      
  383.                         $query->orderBy('p.nombre''asc');
  384.                         $pacientes $query->getQuery()->getResult();
  385.                         $queried true;
  386.                     }
  387.                 }
  388.                 if ($diagnostico) {
  389.                     $pacientes $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  390.                         ->select('p.id''p.nombre''p.apellido','p.foto''p.fotourl''p.email','p.documento''d.codigo')
  391.                         ->leftJoin('a.paciente''p')
  392.                         ->leftJoin('a.diagnosticos''d')
  393.                         ->where('d.codigo = :codigodiagnostico')
  394.                         ->setParameter('codigodiagnostico'$diagnostico)
  395.                         ->groupBy('a.paciente')
  396.                         ->orderBy('p.nombre''asc')
  397.                         ->getQuery()
  398.                         ->getArrayResult();
  399.                     $queried true;
  400.                 }
  401.                 if (!$queried) {
  402.                     $query $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
  403.                         ->select('p');
  404.                     $query->orderBy('p.nombre''asc');
  405.                     $pacientes $query->getQuery()->getResult();
  406.                 }
  407.                 $atenciones $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
  408.                     ->select('p.id','max(a.fecha) as fecha' )
  409.                     ->join('a.paciente''p')
  410.                     ->groupBy('a.paciente')
  411.                     ->getQuery()
  412.                     ->getArrayResult();
  413.                 $paciente_ids array_column($atenciones'id');
  414.                 $fechas array_column($atenciones'fecha');
  415.                 $ultimas_atenciones array_combine($paciente_ids$fechas);
  416.                 return $this->render('medicos/pacientes.html.twig', [
  417.                     'pacientes' => $pacientes,
  418.                     'perfilmedico' => $perfilmedico,
  419.                     'paciente_ids' => $paciente_ids,
  420.                     'ultimas_atenciones' => $ultimas_atenciones,
  421.                     'diagnosticos' => $diagnosticos,
  422.                     'codigodiagnostico' => $diagnostico
  423.                 ]);
  424.             }
  425.         }
  426.         
  427.         return $this->redirectToRoute('homepage');
  428.     }
  429.     /**
  430.      * @Route("/faq_medico", name="faq_medico")
  431.      */
  432.     public function Faq(Request $request)
  433.     {
  434.         $faqs $this->getDoctrine()->getRepository(Faq::class)->findBy(array("visible"=>true,"tipo"=>1),array("orden"=>"asc"));
  435.         $user $this->getUser();
  436.         $user_medico=$user->getPerfilmedico();
  437.         return $this->render('medicos/faq.html.twig', [
  438.             "faqs"=> $faqs,
  439.             "perfilmedico"=> $user_medico
  440.         ]);
  441.     }
  442.     /**
  443.      * @Route("/faq_paciente", name="faq_paciente")
  444.      */
  445.     public function Faqpac(Request $request)
  446.     {
  447.         $faqs $this->getDoctrine()->getRepository(Faq::class)->findBy(array("visible"=>true,"tipo"=>2),array("orden"=>"asc"));
  448.         
  449.         $user $this->getUser();
  450.         $repository $this->getDoctrine()->getRepository(Paciente::class);
  451.         $paciente $repository->findOneBy(['email' => $user->getEmail()]);
  452.         return $this->render('pacientes/faq.html.twig', [
  453.             "faqs"=> $faqs,
  454.             "paciente"=> $paciente
  455.         ]);
  456.     }
  457.     /**
  458.      * @Route("/buscador", name="buscador")
  459.      */
  460.     public function buscador(Request $request)
  461.     {
  462.         if (!$this->qi->getDireccion()) {
  463.             $tienda null;
  464.         } else {
  465.             if (!$this->qi->getTienda()) {
  466.                 $tienda $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
  467.                 if (!$tienda) {
  468.                     $this->addFlash(
  469.                         'warning',
  470.                         'La direccion seleccionada no tiene cobertura en este momento'
  471.                     );
  472.                     return $this->redirectToRoute('misdirecciones');
  473.                 }
  474.             } else {
  475.                 $tienda $this->qi->getTienda();
  476.             }
  477.         }
  478.         $query $request->query->get('query'"");
  479.         $productos $this->getDoctrine()->getRepository(Producto::class)->createQueryBuilder('p')
  480.             ->select('p')
  481.             ->leftJoin('p.categorias''c')
  482.             ->where('(p.nombre like :query or p.nombreComercial like :query or p.resumen like :query or p.contraindicaciones like :query or p.interacciones like :query or p.posologia like :query) and p.visible = 1')
  483.             ->andWhere('c.visible = 1')
  484.             ->setParameter('query''%' $query '%');
  485.         if ($tienda) {
  486.             $productos->leftJoin('p.inventarios''i')
  487.                 ->leftJoin('i.tienda''t')
  488.                 ->andWhere('i.cantidad >= 0 and t.id = :tienda')
  489.             ->setParameter('tienda'$tienda->getId());
  490.         }
  491.         $productos$productos->groupBy('p.plu')->orderBy('p.orden','asc')
  492.             ->getQuery()
  493.             ->getArrayResult();
  494.         return $this->render('basic/buscador.html.twig', [
  495.             'productos' => $productos,
  496.             'query'=>$query
  497.         ]);
  498.     }
  499.     /**
  500.      * @Route("/buscadorapi", name="buscadorapi")
  501.      */
  502.     public function buscadorapi(Request $request)
  503.     {
  504.         $msg '';
  505.         $status 0;
  506.         $resp = [];
  507.         if (!$this->qi->getDireccion()) {
  508.             $tienda null;
  509.         } else {
  510.             if (!$this->qi->getTienda()) {
  511.                 $tienda $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
  512.                 if (!$tienda) {
  513.                     $resp = [];
  514.                 }
  515.             } else {
  516.                 $tienda $this->qi->getTienda();
  517.             }
  518.         }
  519.         $query $request->request->get('search'"");
  520.         $productos $this->getDoctrine()->getRepository(Producto::class)->createQueryBuilder('p')
  521.             ->select('p.plu value''p.nombre label')
  522.             ->leftJoin('p.categorias''c')
  523.             ->where('(p.nombre like :query or p.nombreComercial like :query or p.resumen like :query or p.contraindicaciones like :query or p.interacciones like :query or p.posologia like :query) and p.visible = 1')
  524.             ->andWhere('c.visible = 1')
  525.             ->setParameter('query''%' $query '%');
  526.         if ($tienda) {
  527.             $productos->leftJoin('p.inventarios''i')
  528.                 ->leftJoin('i.tienda''t')
  529.                 ->andWhere('i.cantidad > 0 and t.id = :tienda')
  530.                 ->setParameter('tienda'$tienda->getId());
  531.         }
  532.         $productos$productos->groupBy('p.plu')->orderBy('p.orden','asc')
  533.             ->getQuery()
  534.             ->getArrayResult();
  535.         return new Response(json_encode($productos));
  536.     }
  537.     /**
  538.      * @Route("/buscadorpacientes", name="buscadorpacientes")
  539.      */
  540.     public function buscadorpacientes(Request $request)
  541.     {
  542.         $query $request->request->get('search'"");
  543.         $pacientes $this->getDoctrine()->getRepository(Paciente::class)->createQueryBuilder('p')
  544.             ->select('p.documento as value''CONCAT(p.documento, \' \', p.nombre, \' \', p.apellido)  as label''p.id as id')
  545.             ->where('( p.documento like :query or p.nombre like :query) ')
  546.             ->setParameter('query''%' $query '%')
  547.             ->setMaxResults(15)
  548.             ->getQuery()
  549.             ->getArrayResult();
  550.         return new Response(json_encode($pacientes));
  551.     }
  552.     
  553.     /**
  554.      * @Route("/buscadorserviciocatalogo", name="buscadorserviciocatalogo")
  555.      */
  556.     public function buscadorserviciocatalogo(Request $request)
  557.     {
  558.         $query $request->request->get('search'"");
  559.         $servicio $this->getDoctrine()->getRepository(ServicioCatalogo::class)->createQueryBuilder('p')
  560.             ->select('p.nombre as value''CONCAT(p.codigo_rips, \' \', p.nombre)  as label''p.id as id''p.codigo_rips as codigo_rips''c.id as id_concepto')
  561.             ->where('( p.codigo_rips like :query or p.nombre like :query) ')
  562.             ->leftJoin('p.concepto','c')
  563.             ->setParameter('query''%' $query '%')
  564.             ->setMaxResults(15)
  565.             ->getQuery()
  566.             ->getArrayResult();
  567.         return new Response(json_encode($servicio));
  568.     }
  569.     /**
  570.      * @Route("/buscadorantecedentes", name="buscadorantecedentes")
  571.      */
  572.     public function buscadorantecedentes(Request $request)
  573.     {
  574.         $query $request->request->get('search'"");
  575.         $antecedentes_pacientes $this->getDoctrine()->getRepository(AntecedentePersonal::class)->createQueryBuilder('p')
  576.             ->select('p.descripcion as value''CONCAT(p.codigo, \' \', p.descripcion)  as label''p.codigo as id')
  577.             ->where('( p.descripcion like :query or p.codigo like :query) ')
  578.             ->setParameter('query''%' $query '%')
  579.             ->setMaxResults(15)
  580.             ->getQuery()
  581.             ->getArrayResult();
  582.         
  583.         return new Response(json_encode($antecedentes_pacientes));
  584.     }
  585.     /**
  586.      * @Route("/buscadorenfermedadesfamiliares", name="buscadorenfermedadesfamiliares")
  587.      */
  588.     public function buscadorenfermedadesfamiliares(Request $request)
  589.     {
  590.         $query $request->request->get('search'"");
  591.         $enfermedadesfamiliares $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('p')
  592.             ->select('p.descripcion as value''CONCAT(p.codigo, \' \', p.descripcion)  as label''p.codigo as id')
  593.             ->where('( p.descripcion like :query or p.codigo like :query) ')
  594.             ->setParameter('query''%' $query '%')
  595.             ->setMaxResults(15)
  596.             ->getQuery()
  597.             ->getArrayResult();
  598.         
  599.         return new Response(json_encode($enfermedadesfamiliares));
  600.     }
  601.     /**
  602.      * @Route("/buscadoralergias", name="buscadoralergias")
  603.      */
  604.     public function buscadoralergias(Request $request)
  605.     {
  606.         $query $request->request->get('search'"");
  607.         $alergias $this->getDoctrine()->getRepository(Alergia::class)->createQueryBuilder('p')
  608.             ->select('p.nombre as value''CONCAT(p.codigo, \' \', p.nombre)  as label''p.codigo as id')
  609.             ->where('( p.nombre like :query or p.codigo like :query) ')
  610.             ->setParameter('query''%' $query '%')
  611.             ->setMaxResults(15)
  612.             ->getQuery()
  613.             ->getArrayResult();
  614.         
  615.         return new Response(json_encode($alergias));
  616.     }
  617.     /**
  618.      * @Route("/buscadordiagnosticos", name="buscadordiagnosticos")
  619.      */
  620.     public function buscadordiagnosticos(Request $request)
  621.     {
  622.         $query $request->request->get('search'"");
  623.         $diagnosticos $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('p')
  624.             ->select('p.descripcion as value''CONCAT(p.codigo, \' \', p.descripcion)  as label''p.codigo as id')
  625.             ->where('( p.descripcion like :query or p.codigo like :query) ')
  626.             ->setParameter('query''%' $query '%')
  627.             ->setMaxResults(15)
  628.             ->getQuery()
  629.             ->getArrayResult();
  630.         return new Response(json_encode($diagnosticos));
  631.     }
  632.     /**
  633.      * @Route("/buscadorparaclinicos", name="buscadorparaclinicos")
  634.      */
  635.     public function buscadorparaclinicos(Request $request)
  636.     {
  637.         $query $request->request->get('search'"");
  638.         $paraclinicos $this->getDoctrine()->getRepository(Paraclinico::class)->createQueryBuilder('p')
  639.             ->select('p.nombre as value''CONCAT(p.id, \' \', p.nombre)  as label''p.id as id')
  640.             ->where('( p.nombre like :query or p.id like :query) ')
  641.             ->setParameter('query''%' $query '%')
  642.             ->setMaxResults(15)
  643.             ->getQuery()
  644.             ->getArrayResult();
  645.         return new Response(json_encode($paraclinicos));
  646.     }
  647.         /**
  648.      * @Route("/buscadorespecialidades", name="buscadorespecialidades")
  649.      */
  650.     public function buscadorespecialidades(Request $request)
  651.     {
  652.         $query          $request->request->get('search'"");
  653.         $especialidades $this->getDoctrine()->getRepository(Especialidad::class)->createQueryBuilder('p')
  654.             ->select('p.nombre as value''p.nombre as label''p.id as id')
  655.             ->where('( p.nombre like :query or p.id like :query) ')
  656.             ->setParameter('query''%' $query '%')
  657.             ->setMaxResults(15)
  658.             ->getQuery()
  659.             ->getArrayResult();
  660.         return new Response(json_encode($especialidades));
  661.     }
  662.     /**
  663.      * @Route("/buscadorimagenes", name="buscadorimagenes")
  664.      */
  665.     public function buscadorimagenes(Request $request)
  666.     {
  667.         $query $request->request->get('search'"");
  668.         $imagenes $this->getDoctrine()->getRepository(Imagen::class)->createQueryBuilder('p')
  669.             ->select('p.nombre as value''CONCAT(p.id, \' \', p.nombre)  as label''p.id as id')
  670.             ->where('( p.nombre like :query or p.id like :query) ')
  671.             ->setParameter('query''%' $query '%')
  672.             ->setMaxResults(15)
  673.             ->getQuery()
  674.             ->getArrayResult();
  675.         return new Response(json_encode($imagenes));
  676.     }
  677.     /**
  678.      * @Route("/buscadormedicamentos", name="buscadormedicamentos")
  679.      */
  680.     public function buscadormedicamentos(Request $request)
  681.     {
  682.         $query $request->request->get('search'"");
  683.         $medicamentos $this->getDoctrine()->getRepository(Medicamento::class)->createQueryBuilder('p')
  684.             ->select('p.nombre as value''p.nombre  as label''p.id as id')
  685.             ->where('( p.nombre like :query or p.id like :query) ')
  686.             ->setParameter('query''%' $query '%')
  687.             ->setMaxResults(15)
  688.             ->getQuery()
  689.             ->getArrayResult();
  690.         return new Response(json_encode($medicamentos));
  691.     }
  692.     /**
  693.      * @Route("/buscadorprocedimientos", name="buscadorprocedimientos")
  694.      */
  695.     public function buscadorprocedimientos(Request $request)
  696.     {
  697.         $query $request->request->get('search'"");
  698.         $imagenes $this->getDoctrine()->getRepository(Procedimiento::class)->createQueryBuilder('p')
  699.             ->select('p.nombre as value''CONCAT(p.codigo, \' \', p.nombre)  as label''p.id as id')
  700.             ->where('( p.nombre like :query or p.codigo like :query) ')
  701.             ->setParameter('query''%' $query '%')
  702.             ->setMaxResults(15)
  703.             ->getQuery()
  704.             ->getArrayResult();
  705.         return new Response(json_encode($imagenes));
  706.     }
  707.     /**
  708.      * @Route("/buscadorterapias", name="buscadorterapias")
  709.      */
  710.     public function buscadorterapias(Request $request)
  711.     {
  712.         $query $request->request->get('search'"");
  713.         $imagenes $this->getDoctrine()->getRepository(Terapia::class)->createQueryBuilder('p')
  714.             ->select('p.descripcion as value''CONCAT(p.codigo, \' \', p.descripcion)  as label''p.id as id')
  715.             ->where('( p.descripcion like :query or p.codigo like :query) ')
  716.             ->setParameter('query''%' $query '%')
  717.             ->setMaxResults(15)
  718.             ->getQuery()
  719.             ->getArrayResult();
  720.         return new Response(json_encode($imagenes));
  721.     }
  722.     /**
  723.      * @Route("/misdirecciones", name="misdirecciones")
  724.      */
  725.     public function misdirecciones(Request $request)
  726.     {
  727.         $user $this->getUser();
  728.         if(!$user){
  729.             return $this->redirectToRoute('ingresar');
  730.         }
  731.         $tiendas $this->getDoctrine()->getRepository(Tienda::class)->findBy(array('visible'=>true),array('orden'=>'asc'));
  732.         $direcciones $this->getDoctrine()->getRepository(Direccion::class)->findBy(array('usuario'=>$user,'visible'=>true));
  733.         return $this->render('basic/addDir.html.twig', [
  734.             'tiendas' => $tiendas,
  735.             'direcciones' => $direcciones
  736.         ]);
  737.     }
  738.     /**
  739.      * @Route("/contacto", name="contacto")
  740.      */
  741.     public function contacto(Request $request)
  742.     {
  743.         $contacto= new Contacto();
  744.         $form $this->createForm(ContactoType::class, $contacto);
  745.         $form->handleRequest($request);
  746.         if ($form->isSubmitted() && $form->isValid()) {
  747.             $entityManager $this->getDoctrine()->getManager();
  748.             $entityManager->persist($contacto);
  749.             $entityManager->flush();
  750.             $asunto $this->qi->getSetting('asunto_mail_contacto');
  751.             $html $this->renderView('contact/contact_mail.html.twig', array(
  752.                 'nombre'=>$contacto->getNombre(),
  753.                 'email'=>$contacto->getEmail(),
  754.                 'telefono'=>$contacto->getTelefono(),
  755.                 'mensaje'=>$contacto->getMensaje(),
  756.             ));
  757.             $this->qi->sendMail($asunto,$contacto->getEmail(),$html);
  758.             $to $this->qi->getSetting('mail_recepcion_pedidos');
  759.             $this->qi->sendMail($asunto,$to,$html);
  760.             return $this->render('basic/contacto.html.twig', [
  761.                 'gracias'=>true
  762.             ]);
  763.         }
  764.         return $this->render('basic/contacto.html.twig', [
  765.             'gracias'=>false,
  766.             'form'=> $form->createView()
  767.         ]);
  768.     }
  769.     /**
  770.      * @Route("/perfil", name="perfil")
  771.      * @Route("/eliminar-direccion/{id}", name="perfil_eliminar_direccion")
  772.      */
  773.     public function perfil(Request $request$id null)
  774.     {
  775.         $user $this->getUser();
  776.         $borre_dir false;
  777.         if($id){
  778.             $direccion $this->getDoctrine()->getRepository(Direccion::class)->find($id);
  779.             $direccion->setVisible(false);
  780.             $entityManager $this->getDoctrine()->getManager();
  781.             $entityManager->persist($direccion);
  782.             $entityManager->flush();
  783.             $borre_dir true;
  784.         }
  785.         $direcciones $this->getDoctrine()->getRepository(Direccion::class)->createQueryBuilder('d')
  786.             ->select('d')
  787.             ->leftJoin('d.usuario','u')
  788.             ->where('u.id = '.$user->getId())
  789.             ->andWhere('d.visible is null or d.visible = 1')
  790.             ->getQuery()
  791.             ->getResult();
  792.         $form $this->createForm(PerfilType::class, $user);
  793.         $form->handleRequest($request);
  794.         if ($form->isSubmitted() && $form->isValid()) {
  795.             $entityManager $this->getDoctrine()->getManager();
  796.             $entityManager->persist($user);
  797.             $entityManager->flush();
  798.             return $this->render('user/perfil.html.twig', [
  799.                 'gracias'=>true,
  800.                 'borre_dir'=>$borre_dir,
  801.                 'direcciones' => $direcciones,
  802.                 'form'=> $form->createView()
  803.             ]);
  804.         }
  805.         return $this->render('user/perfil.html.twig', [
  806.             'gracias'=>false,
  807.             'borre_dir'=>$borre_dir,
  808.             'direcciones' => $direcciones,
  809.             'form'=> $form->createView()
  810.         ]);
  811.     }
  812.     /**
  813.      * @Route("/recomendaciones-para-pacientes", name="recomendaciones")
  814.      */
  815.     public function recomendaciones(Request $request)
  816.     {
  817.         return $this->render('recomendaciones/recomendaciones.html.twig', [
  818.             'gracias'=>false,
  819.             'form'=> null
  820.         ]);
  821.     }
  822.     /**
  823.      * @Route("/tips", name="tips")
  824.      */
  825.     public function tips(Request $request)
  826.     {
  827.         $tips $this->getDoctrine()->getRepository(TipSalud::class)->findBy(array("visible" => true), array('orden'=>'asc'));
  828.         return $this->render('tips/index.html.twig', [
  829.             "tips"=>$tips,
  830.             'gracias'=>false,
  831.             'form'=> null
  832.         ]);
  833.     }
  834.     /**
  835.      * @Route("/tip/{id}", name="tip")
  836.      */
  837.     public function tip(Request $request$id)
  838.     {
  839.         $tip $this->getDoctrine()->getRepository(TipSalud::class)->find($id);
  840.         return $this->render('tips/tip.html.twig', [
  841.             "tip"=>$tip,
  842.             'gracias'=>false,
  843.             'form'=> null
  844.         ]);
  845.     }
  846.     /**
  847.      * @Route("/covid-19", name="covid")
  848.      */
  849.     public function covid(Request $request)
  850.     {
  851.         $articulos $this->getDoctrine()->getRepository('App:Covid')->findBy(array('visible'=>true),array('orden'=>'asc'));
  852.         return $this->render('recomendaciones/recomendaciones.html.twig', [
  853.             'gracias'=>false,
  854.             'form'=> null,
  855.             'articulos'=>$articulos
  856.         ]);
  857.     }
  858.     /**
  859.      * @Route("/servicios-de-enfermeria", name="enfermeria")
  860.      */
  861.     public function enfermeria(Request $request)
  862.     {
  863.         $first 1;
  864.         $size 100;
  865.         $productos $this->getDoctrine()->getRepository('App:Inventario')->createQueryBuilder('i')
  866.         ->select('i.precio','p.nombre','p.imagen','p.plu')
  867.         ->addSelect(
  868.             'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico')
  869.         ->leftJoin('i.producto','p')
  870.         ->leftJoin('p.categorias','c')
  871.         ->where('i.cantidad > 0')
  872.         ->andWhere('p.visible = 1')
  873.         ->andWhere("p.imagen not like '%icon%'")
  874.         ->setFirstResult($first)
  875.         ->setMaxResults($size)
  876.         ->getQuery()
  877.         ->getArrayResult();
  878.         shuffle($productos);
  879.         $productos array_slice($productos,0,4);
  880.         return $this->render('enfermeria/enfermeria.html.twig', [
  881.             'gracias'=>false,
  882.             'form'=> null,
  883.             'productos'=>$productos
  884.         ]);
  885.     }
  886.     /**
  887.      * @Route("/pedir", name="pedir")
  888.      */
  889.     public function pedir(Request $request)
  890.     {
  891.         try {
  892.             $user $this->getUser();
  893.             $direccion $this->getDoctrine()->getRepository(Direccion::class)->find($this->qi->getDireccion()->getId());
  894.             $metodo_sel $request->request->get('metodo');
  895.             $metodo $this->getDoctrine()->getRepository(MetodoPago::class)->findOneBy(array('id' => $metodo_sel));
  896.             $tienda $this->getDoctrine()->getRepository(Tienda::class)->find($this->qi->getTienda()->getId());
  897.             $costo_domicilio $tienda->getCostoDomicilio();
  898.             $comentarios $request->request->get('comentarios');
  899.             $medico $request->request->get('medico');
  900.             $lifemiles $request->request->get('lifemiles');
  901.             $peticion$this->qi->getCarrito();
  902.             $paga_con 0;
  903.             $canal "web";
  904.             $carrito=[];
  905.             if($metodo_sel == "2"){
  906.                 return $this->redirectToRoute('pagos_payu',array(
  907.                     "comentarios"=>$comentarios,
  908.                     "medico" => $medico,
  909.                     "lifemiles" => $lifemiles
  910.                 ));
  911.             }
  912.             foreach ($this->qi->getCarrito() as $item){
  913.                 $elem = array("product_id"=>$item["producto"]->getPlu(),"count"=>$item["cantidad"]);
  914.                 array_push($carrito,$elem);
  915.             }
  916.             $res $this->qi->crearPedido($metodo,$canal,$comentarios,$this->getUser());
  917.             /* @var $compra Compra */
  918.             $compra =$res["compra"];
  919.             $resultado = array("ok" => true'obj' => array("compra"=>array("id"=>$compra->getId())));
  920.             if($this->qi->getSetting('enviar_correo') == "1"){
  921.                 $asunto $this->qi->getTexto('asunto_compra_cliente');
  922.                 $this->qi->sendMail($asunto$this->getUser()->getEmail(), $compra->getBody());
  923.                 $asunto $this->qi->getTexto('asunto_compra_tienda');
  924.                 if($compra->getTienda()) {
  925.                     $this->qi->sendMail($asunto$compra->getTienda()->getEmail(), $compra->getBody());
  926.                 }else{
  927.                     $this->qi->sendMail($asunto$this->qi->getSetting('mail_recepcion_pedidos'), $compra->getBody());
  928.                 }
  929.             }
  930.         }catch (\Exception $e){
  931.             $resultado = array("ok" => false'obj' => $e->getCode()." - ".$e->getMessage());
  932.         }
  933.         if($resultado["ok"]) {
  934.             return $this->redirectToRoute('confirmacion'$resultado);
  935.         }else{
  936.             return $this->redirectToRoute('carrito'$resultado);
  937.         }
  938.     }
  939.     /**
  940.      * @Route("/set-direccion/{id}", name="set-direccion")
  941.      */
  942.     public function setDireccion(Request $request,$id)
  943.     {
  944.         $user $this->getUser();
  945.         $dir $this->getDoctrine()->getRepository(Direccion::class)->find($id);
  946.         $this->qi->setDireccion($dir);
  947.         $tienda $this->qi->getTiendaFromCoordinates($dir);
  948.         if(!$tienda){
  949.             $this->addFlash(
  950.                 'warning',
  951.                 'La direccion seleccionada no tiene cobertura en este momento'
  952.             );
  953.             return $this->redirectToRoute('misdirecciones');
  954.         }
  955.         $this->qi->setTienda($tienda);
  956.         if($this->qi->carritoLength() > 0)
  957.             return $this->redirectToRoute('carrito');
  958.         return $this->redirectToRoute('homepage');
  959.     }
  960.     /**
  961.      * @Route("/add-direccion", name="add-direccion")
  962.      */
  963.     public function addDireccion(Request $request)
  964.     {
  965.         $user $this->getUser();
  966.         if($user) {
  967.             $dir = new Direccion();
  968.             $dirarr $request->request->get('direccion');
  969.             $tipo $request->request->get('direccion')['tipocalle'];
  970.             $base $request->request->get('direccion')['base'];
  971.             $numero $request->request->get('direccion')['numero'];
  972.             $detalle $request->request->get('direccion')['detalle'];
  973.             $adicional $request->request->get('direccion')['adicional'];
  974.             $ciudad $request->request->get('direccion')['ciudad'];
  975.             $dirarr['direccion'] = $tipo " " $base " # " $numero " - " $detalle " " $adicional;
  976.             $ciudad $this->getDoctrine()->getRepository(Ciudad::class)->find($ciudad);
  977.             $request->request->set('direccion'$dirarr);
  978.             $dir->setUsuario($user);
  979.             $dir->setDireccion($dirarr['direccion']);
  980.             $dir->setLng($dirarr['lng']);
  981.             $dir->setLat($dirarr['lat']);
  982.             $dir->setNombre($dirarr['nombre']);
  983.             $dir->setUid($user->getUid());
  984.             $dir->setCiudad($ciudad);
  985.             $entityManager $this->getDoctrine()->getManager();
  986.             $entityManager->persist($dir);
  987.             $entityManager->flush();
  988.             $this->qi->setDireccion($dir);
  989.             return $this->redirectToRoute('homepage');
  990.         }else{
  991.             return $this->redirectToRoute('login');
  992.         }
  993.     }
  994.     /**
  995.      * @Route("/tiendas", name="tiendas")
  996.      */
  997.     public function tiendas(Request $request)
  998.     {
  999.         /*if( $this->qi->getSetting('muestra_tiendas') == "0"){
  1000.             return $this->redirectToRoute('homepage');
  1001.         }
  1002.         */
  1003.         $user $this->getUser();
  1004.         $tiendas $this->getDoctrine()->getRepository('App:Tienda')->findBy(array('visible'=>true));
  1005.         if(count($tiendas)== 1){
  1006.             $this->qi->setTienda($tiendas[0]);
  1007.             return $this->redirectToRoute('categorias', array('id' => $tiendas[0]->getId()));
  1008.         }
  1009.         $enZona = [];
  1010.         $dir$this->qi->getDireccion();
  1011.         if($this->qi->getSetting('tienda_redirige') == 1){
  1012.             if(!$dir){
  1013.                 return $this->redirectToRoute('misdirecciones');
  1014.             }
  1015.         }
  1016.         foreach ($tiendas as $t){
  1017.             if($dir){
  1018.                 if($this->arePointsNear($t,$dir,$t->getRadioCobertura()  ) || $this->qi->getSetting('showAllTiendas') ){
  1019.                     array_push($enZona,$t);
  1020.                 }
  1021.             }else{
  1022.                 array_push($enZona,$t);
  1023.             }
  1024.         }
  1025.         return $this->render('basic/tiendas.html.twig', [
  1026.             'tiendas' => $enZona
  1027.         ]);
  1028.     }
  1029.     /**
  1030.      * @Route("/productos", name="productos")
  1031.      * @Route("/categoria/{categoria_id}", name="categorias_notienda")
  1032.      * @Route("/tienda/{id}", name="categorias")
  1033.      * @Route("/tienda/{id}/categoria/{categoria_id}", name="categorias_tienda")
  1034.      */
  1035.     public function categoriasTienda(Request $request,$id null$categoria_id null)
  1036.     {
  1037.         $paginator = [];
  1038.         $size 50;
  1039.         $page $request->query->get('page',1);
  1040.         $query $request->query->get('query',"");
  1041.         $first = ($page 1)*$size;
  1042.         $user $this->getUser();
  1043.         $dir$this->qi->getDireccion();
  1044.         if($id != null){
  1045.             if(!$this->qi->getDireccion()){
  1046.                 return $this->redirectToRoute('misdirecciones');
  1047.             }else{
  1048.                 $tienda $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
  1049.                 if(!$tienda){
  1050.                     $this->addFlash(
  1051.                         'warning',
  1052.                         'La direccion seleccionada no tiene cobertura en este momento'
  1053.                     );
  1054.                     return $this->redirectToRoute('misdirecciones');
  1055.                 }
  1056.             }
  1057.             $this->qi->setTienda($tienda);
  1058.         }else{
  1059.             $tienda $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
  1060.         }
  1061.         $productos $this->getDoctrine()->getRepository('App:Producto')->createQueryBuilder('p');
  1062.         $productos->select('p.precio','p.nombre','p.imagen','p.plu','p.esRx','p.PrecioSinDescuento','i.cantidad')
  1063.             ->addSelect(
  1064.                 'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico');
  1065.         $productos
  1066.             ->leftJoin('p.inventarios','i')
  1067.             ->leftJoin('p.categorias','c')
  1068.             ->leftJoin('i.tienda','t')
  1069.             ->orderBy('p.orden','asc')
  1070.             ->where('i.cantidad >= 0');
  1071.         if($tienda){
  1072.             $productos->andWhere('t.id = :tienda_id')
  1073.             ->setParameter('tienda_id',$tienda->getId());
  1074.         }
  1075.         $productos
  1076.             ->groupBy('p.plu')
  1077.             ->setFirstResult($first)
  1078.             ->setMaxResults($size);
  1079.         $cant $this->getDoctrine()->getRepository('App:Producto')->createQueryBuilder('p')
  1080.             ->select('distinct(p.plu) ')
  1081.             ->leftJoin('p.inventarios','i')
  1082.             ->leftJoin('p.categorias','c')
  1083.             ->where('i.cantidad >= 0');
  1084.         if($tienda){
  1085.             $productos->andWhere('i.tienda = :tienda')
  1086.                 ->setParameter('tienda',$tienda);
  1087.             $cant->andWhere('i.tienda = :tienda')
  1088.                 ->setParameter('tienda',$tienda);
  1089.         }
  1090.         if($categoria_id ){
  1091.             $productos->andWhere('c.id = '.$categoria_id);
  1092.             $cant->andWhere('c.id = '.$categoria_id);
  1093.         }
  1094.         if($query != ""){
  1095.             $parts explode(" ",$query);
  1096.             $cad = [];
  1097.             foreach ($parts as $parte){
  1098.                 $cad[] = " p.nombre like '%$parte%'";
  1099.             }
  1100.             $q_search implode($cad," or ");
  1101.             if(count($cad) > 0){
  1102.                 $productos->andWhere($q_search);
  1103.                 $cant->andWhere($q_search);
  1104.             }
  1105.         }
  1106.         $productos $productos->getQuery()->getArrayResult();
  1107.         $cant=$cant->getQuery()->getArrayResult();
  1108.         if($id)
  1109.             $categorias $this->qi->getCategoriasVeci();
  1110.         else
  1111.             $categorias $this->qi->getCategoriasConProductos();
  1112.         $cantcount($cant);
  1113.         $paginator['hasPreviousPage'] = $page 1;
  1114.         $paginator['hasNextPage'] = $page $cant/$size;
  1115.         $paginator['cant'] = $cant;
  1116.         $paginator['results'] = $cant;
  1117.         $paginator['nextPage'] = $page 1;
  1118.         $paginator['previousPage'] = $page 1;
  1119.         $paginator['pages'] = ceil($cant/$size) ;
  1120.         $paginator['page'] = $page;
  1121.         $destacadosCat $this->getDoctrine()->getRepository('App:Producto')->createQueryBuilder('p');
  1122.         $destacadosCat->select('p.precio','p.nombre','p.imagen','p.plu','p.esRx','p.PrecioSinDescuento','i.cantidad')
  1123.             ->addSelect(
  1124.                 'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico');
  1125.         $destacadosCat
  1126.             ->leftJoin('p.inventarios','i')
  1127.             ->leftJoin('p.categorias','c')
  1128.             ->leftJoin('i.tienda','t')
  1129.             ->orderBy('p.orden','asc')
  1130.             ->where('i.cantidad >= 0')
  1131.             ->andWhere('p.destacadoCategoria = 1');
  1132.         if($tienda){
  1133.             $destacadosCat->andWhere('t.id = :tienda_id')
  1134.                 ->setParameter('tienda_id',$tienda->getId());
  1135.         }
  1136.         if($categoria_id ){
  1137.             $destacadosCat->andWhere('c.id = '.$categoria_id);
  1138.         }
  1139.         $destacadosCat $destacadosCat->getQuery()->getArrayResult();
  1140.         $destCat = [];
  1141.         foreach ($destacadosCat as $producto){
  1142.             if(!isset($destCat[$producto["plu"]])){
  1143.                 $destCat[$producto["plu"]] = $producto;
  1144.             }
  1145.         }
  1146.         return $this->render('basic/categoriasTienda.html.twig', [
  1147.             'query'=>$query,
  1148.             'categorias'=> $categorias,
  1149.             'categoria'=> null,
  1150.             'categoria_id'=> null,
  1151.             'productos' => $productos,
  1152.             'cant' => $cant,
  1153.             'tienda' => $tienda,
  1154.             'paginator' => $paginator,
  1155.             'destacados' => $destCat
  1156.         ]);
  1157.     }
  1158.     /**
  1159.      * @Route("/tienda_heel", name="tienda")
  1160.      */
  1161.     public function tienda(Request $request)
  1162.     {
  1163.         if(!$this->qi->getDireccion()){
  1164.             $tienda null;
  1165.         }else{
  1166.             $tienda $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
  1167.             $this->qi->setTienda($tienda);
  1168.             if(!$tienda){
  1169.                 $this->addFlash(
  1170.                     'warning',
  1171.                     'La direccion seleccionada no tiene cobertura en este momento'
  1172.                 );
  1173.                 return $this->redirectToRoute('misdirecciones');
  1174.             }
  1175.         }
  1176.         return $this->render('basic/categoriasTienda.html.twig', [
  1177.             'query'=>'',
  1178.             'categorias'=> null,
  1179.             'categoria'=> null,
  1180.             'categoria_id'=> null,
  1181.             'productos' => null,
  1182.             'cant' => 0,
  1183.             'tienda' => $tienda,
  1184.             'paginator' => null
  1185.         ]);
  1186.     }
  1187.     function existeCatProds($productos,$c){
  1188.         $encontrado false;
  1189.         for ($i 0$i<count($productos);$i++){
  1190.             for($k 0$k count($productos[$i]["producto"]["categorias"]);$k++){
  1191.                 $encontrado $c->getId() == $productos[$i]["producto"]["categorias"][$k]['id'];
  1192.                 if($encontrado){
  1193.                     $k=count($productos[$i]["producto"]["categorias"])+1;
  1194.                     $i=count($productos)+1;
  1195.                     break;
  1196.                 }
  1197.             }
  1198.             if($encontrado){
  1199.                 break;
  1200.             }
  1201.         }
  1202.         return $encontrado;
  1203.     }
  1204.     function arePointsNear($checkPoint$centerPoint$km) {
  1205.         $ky 40000 360;
  1206.         $kx cos(pi() * $centerPoint->getLat() / 180.0) * $ky;
  1207.         $dx abs($centerPoint->getLng() - $checkPoint->getLng()) * $kx;
  1208.         $dy abs($centerPoint->getLat() - $checkPoint->getLat()) * $ky;
  1209.         return sqrt($dx $dx $dy $dy) <= $km;
  1210.     }
  1211.     /**
  1212.      * @Route("/categoria", name="categoria")
  1213.      * @Route("/categoria/{id}/{tiendaId}", name="categoria_id")
  1214.      */
  1215.     public function categoria(Request $request$id null,$tiendaId null)
  1216.     {
  1217.         if(!$id) {
  1218.             $tienda null;
  1219.             $categoria $this->getDoctrine()->getRepository('App:Categoria')->findOneBy(array('visible' => true));
  1220.         }
  1221.         else {
  1222.             $tienda $this->getDoctrine()->getRepository('App:Tienda')->find($tiendaId);
  1223.             $categoria $this->getDoctrine()->getRepository('App:Categoria')->find($id);
  1224.         }
  1225.         $categorias $this->qi->getCategoriasVeci();
  1226.         $productos $this->getDoctrine()->getRepository('App:Inventario')->createQueryBuilder('i')
  1227.             ->select('i.precio','p.nombre','p.imagen','p.plu')
  1228.             ->addSelect(
  1229.                 'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico')
  1230.             ->leftJoin('i.producto','p')
  1231.             ->leftJoin('p.categorias','c')
  1232.             ->where('i.tienda = :tienda')
  1233.             ->andWhere('i.cantidad > 0')
  1234.             ->andWhere('c.id = :cat')
  1235.             ->setParameter('tienda',$tienda)
  1236.             ->setParameter('cat',$categoria)
  1237.             ->getQuery()
  1238.             ->getArrayResult();
  1239.         return $this->render('basic/categoriasTienda.html.twig', [
  1240.             'categorias'=> $categorias,
  1241.             'categoria'=> $categoria,
  1242.             'categoria_id'=> $categoria->getId(),
  1243.             'productos' => $productos,
  1244.             'cant' => count($productos),
  1245.             'tienda' => $tienda
  1246.         ]);
  1247.     }
  1248.     /**
  1249.      * @Route("/producto/{id}/{tiendaId}", name="producto_old")
  1250.      */
  1251.     public function producto_old(Request $request$id,$tiendaId)
  1252.     {
  1253.         $tienda $this->getDoctrine()->getRepository('App:Tienda')->find($tiendaId);
  1254.         $productos $this->getDoctrine()->getManager()->createQueryBuilder()
  1255.             ->from('App:Inventario','i')
  1256.             ->select('i')
  1257.             ->leftJoin('i.producto','p')
  1258.             ->addSelect('p')
  1259.             ->leftJoin('p.categorias','c')
  1260.             ->addSelect('c')
  1261.             ->where('i.tienda = :tienda')
  1262.             ->addSelect(
  1263.                 'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico')
  1264.             ->andWhere('i.cantidad > 0')
  1265.             ->andWhere('p.plu = :id')
  1266.             ->setParameter('tienda',$tienda)
  1267.             ->setParameter('id',$id)
  1268.             ->getQuery()
  1269.             ->getArrayResult();
  1270.         return $this->render('basic/producto.html.twig', [
  1271.             'producto' => $productos[0]
  1272.         ]);
  1273.     }
  1274.     /**
  1275.      * @Route("/producto/{id}", name="producto")
  1276.      */
  1277.     public function producto(Request $request$id)
  1278.     {
  1279.         $tienda $this->qi->getTienda();
  1280.         if(!$tienda)
  1281.             return $this->redirectToRoute('misdirecciones');
  1282.         $producto $this->getDoctrine()->getRepository('App:Producto')->find($id);
  1283.         $inv $this->getDoctrine()->getRepository('App:Inventario')->findOneBy(array('producto'=>$producto,'tienda'=>$tienda));
  1284.         $cant 0;
  1285.         if($inv)
  1286.             $cant $inv->getCantidad();
  1287.         return $this->render('basic/producto.html.twig', [
  1288.             'producto' => $producto,
  1289.             'cantidad' => $cant
  1290.         ]);
  1291.     }
  1292.     /**
  1293.      * @Route("/add-to-carrito", name="add-to-carrito")
  1294.      */
  1295.     public function addtocarrito(Request $request)
  1296.     {
  1297.         $bodyjson_decode($request->getContent());
  1298.         $mensaje=array('ok' => false'mensaje' => "Ha ocurrido un error");
  1299.         if($this->qi->addCantToCar($body->producto,$body->cantidad,$body->wish)) {
  1300.             $mensaje = array('ok' => true'mensaje' => "Agregado al carrito ",'carrito'=>count($this->qi->getCarrito()));
  1301.             if ($body->wish) {
  1302.                 $mensaje = array('ok' => true'mensaje' => "Agregado al wish list");
  1303.             }
  1304.         }
  1305.         $response = new Response();
  1306.         $response->setContent(json_encode($mensaje));
  1307.         $response->headers->set('Content-Type''application/json');
  1308.         return $response;
  1309.     }
  1310.     /**
  1311.      * @Route("/eliminar-carro/{id}", name="eliminar-carro")
  1312.      */
  1313.     public function eliminarDeCarro(Request $request,$id)
  1314.     {
  1315.         $this->qi->deleteItemFromCar($id,"");
  1316.         return $this->redirectToRoute('carrito');
  1317.     }
  1318.     /**
  1319.      * @Route("/cambiar-cantidad/{id}/{cantidad}", name="cambiar-cantidad")
  1320.      */
  1321.     public function cambiarCantidad(Request $request,$id,$cantidad)
  1322.     {
  1323.         if($cantidad 0) {
  1324.             $this->qi->addItemToCar($id$cantidad"");
  1325.         }
  1326.         else{
  1327.             $this->qi->deleteItemFromCar($id,  "");
  1328.         }
  1329.         return $this->redirectToRoute('carrito');
  1330.     }
  1331.     /**
  1332.      * @Route("/carrito", name="carrito")
  1333.      */
  1334.     public function carrito(Request $request)
  1335.     {
  1336.         $session $request->getSession();
  1337.         $mostre_en_carrito $session->get('cierre_carrito','0') == '1';
  1338.         $session->set('cierre_carrito','1');
  1339.         $ok true;
  1340.         if($request->get('ok') != null ){
  1341.             $ok $request->get('ok');
  1342.         }
  1343.         if(!$this->qi->getDireccion()){
  1344.             $this->addFlash(
  1345.                 'warning',
  1346.                 'Debes seleccionar una dirección antes de continuar'
  1347.             );
  1348.             return $this->redirectToRoute('misdirecciones');
  1349.         }
  1350.         /* @var $user Usuario */
  1351.         $user $this->getUser();
  1352.         if(!$user->getNombre() || !$user->getApellido() || !$user->getCelular() || !$user->getDocumento())
  1353.         {
  1354.             $this->addFlash(
  1355.                 'warning',
  1356.                 'Debes actualizar tus datos para continuar con la compra.'
  1357.             );
  1358.             return $this->redirectToRoute('perfil');
  1359.         }
  1360.         if(!$this->qi->getTienda()){
  1361.             $tienda $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
  1362.             $this->qi->setTienda($tienda);
  1363.             if(!$tienda){
  1364.                 $this->addFlash(
  1365.                     'warning',
  1366.                     'La dirección seleccionada no tiene cobertura en este momento'
  1367.                 );
  1368.                 return $this->redirectToRoute('misdirecciones');
  1369.             }
  1370.         }
  1371.         $noDisp $this->qi->validarCarrito();
  1372.         if(count($noDisp) ){
  1373.             $this->addFlash(
  1374.                 'warning',
  1375.                 'Algunos productos de tu carrito han sido eliminados ya que en la tienda actual no hay disponibilidad'
  1376.             );
  1377.         }
  1378.         $productos $this->getDoctrine()->getRepository('App:Producto')->
  1379.         findBy(array('visible'=>true),array('orden'=>'desc'),7rand(1,1500));
  1380.         return $this->render('basic/carrito.html.twig', [
  1381.             'productos' => $productos,
  1382.             'ok'=>$ok,
  1383.             'mostre_en_carrito' => $mostre_en_carrito
  1384.         ]);
  1385.     }
  1386.     /**
  1387.      * @Route("/resumen_pedido/{id}", name="resumen_pedido")
  1388.      */
  1389.     public function resumenPedido(Request $request,$id)
  1390.     {
  1391.         /* @var Compra $compra*/
  1392.         $compra $this->getDoctrine()->getRepository(Compra::class)->find($id);
  1393.         $productos $compra->getProductosObj();
  1394.         return $this->render('basic/resumen.html.twig', [
  1395.             'productos' => $productos,
  1396.             'compra' => $compra
  1397.         ]);
  1398.     }
  1399.     /**
  1400.      * @Route("/pedido_respuesta", name="pedido_respuesta")
  1401.      */
  1402.     public function pedido_respuesta(Request $request)
  1403.     {
  1404.         $ok true;
  1405.         if($request->get('ok') != null ){
  1406.             $ok $request->get('ok');
  1407.         }
  1408.         if(!$this->qi->getDireccion()){
  1409.             return $this->redirectToRoute('misdirecciones');
  1410.         }
  1411.         if(!$this->qi->getTienda()){
  1412.             return $this->redirectToRoute('tienda');
  1413.         }
  1414.         return $this->render('basic/pedido_respuesta.html.twig', [
  1415.             'ok'=>$ok
  1416.         ]);
  1417.     }
  1418.     /**
  1419.      * @Route("/mapa_tiendas", name="mapaTiendas")
  1420.      */
  1421.     public function mapaTiendas(Request $request)
  1422.     {
  1423.         $tiendas $this->getDoctrine()->getRepository(Tienda::class)->findBy(array('visible'=>true));
  1424.         return $this->render('basic/mapaTiendas.html.twig', [
  1425.             'tiendas' => $tiendas
  1426.         ]);
  1427.     }
  1428.     /**
  1429.      * @Route("/direccion", name="direccion")
  1430.      */
  1431.     public function direccion(Request $request)
  1432.     {
  1433.         $productos $this->getDoctrine()->getRepository('App:Producto')->
  1434.         findBy(array('visible'=>true),array('orden'=>'desc'),7rand(1,1500));
  1435.         return $this->render('basic/direccion.html.twig', [
  1436.             'productos' => $productos
  1437.         ]);
  1438.     }
  1439.     /**
  1440.      * @Route("/confirmacion", name="confirmacion")
  1441.      */
  1442.     public function confirmation(Request $request)
  1443.     {
  1444.         $respuesta $request->get('obj');
  1445.         $compra $this->getDoctrine()->getRepository(Compra::class)->find($respuesta["compra"]["id"]);
  1446.         $productos $this->qi->getCarrito();
  1447.         $this->qi->clearCar("");
  1448.         return $this->render('basic/pedido_respuesta.html.twig', [
  1449.             'productos' => $productos,
  1450.             'compra' => $compra,
  1451.             'ok' => $request->get("ok")
  1452.         ]);
  1453.     }
  1454.     /**
  1455.      * @Route("/ingresar", name="ingresar")
  1456.      */
  1457.     public function ingresar(Request $request)
  1458.     {
  1459.         $errores = [];
  1460.         $last_username '';
  1461.         if($request->isMethod('POST')){
  1462.             $datos $request->request->all();
  1463.             $email strtolower($datos['_username'] );
  1464.             $last_username $email;
  1465.             $pass strtolower($datos['_password'] );
  1466.             try {
  1467.                 $serviceAccount ServiceAccount::fromJsonFile(__DIR__.'/../../miveci-firebase-adminsdk-pteyb-91be53dc7d.json');
  1468.                 $firebase = (new Factory())
  1469.                     ->withServiceAccount($serviceAccount)
  1470.                     ->create();
  1471.                 $auth $firebase->getAuth();
  1472.                 $fbuser $auth->getUserByEmail($email);
  1473.                 $user $this->userManager->findUserBy(array('email'=>$email));
  1474.                 $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  1475.                 $this->get('security.token_storage')->setToken($token);
  1476.                 $this->get('session')->set('_security_main'serialize($token));
  1477.                 $event = new InteractiveLoginEvent($request$token);
  1478.                 $this->eventDispatcher->dispatch("security.interactive_login"$event);
  1479.                 if ($this->get('security.context')->isGranted('ROLE_POS_ADMIN')) {
  1480.                     return $this->redirectToRoute('easyadmin');
  1481.                 }else{
  1482.                     return $this->redirectToRoute('homepage');
  1483.                 }
  1484.             } catch (Firebase\Exception\AuthException $e) {
  1485.                 array_push($errores$e->getMessage());
  1486.             } catch (Firebase\Exception\FirebaseException $e) {
  1487.                 array_push($errores$e->getMessage());
  1488.             }
  1489.         }
  1490.         return $this->render('user/login.html.twig', [
  1491.             'errores' => $errores,
  1492.             'last_username' => $last_username
  1493.         ]);
  1494.     }
  1495.     /**
  1496.      * @Route("/olvide", name="olvide")
  1497.      */
  1498.     public function olvide(Request $request)
  1499.     {
  1500.         return $this->render('user/olvide.html.twig', [
  1501.         ]);
  1502.     }
  1503.     /**
  1504.      * @Route("/crear-cuenta", name="crear_cuenta")
  1505.      */
  1506.     public function crearCuenta(Request $request)
  1507.     {
  1508.         $errores = [];
  1509.         if($request->isMethod('POST')){
  1510.             $datos $request->request->all();
  1511.             $properties = [
  1512.                 'displayName' => $datos['nombre'] . " " $datos['apellido'] ,
  1513.                 'email' => strtolower($datos['email'] ),
  1514.                 'emailverified' => true
  1515.             ];
  1516.             try {
  1517.                 $serviceAccount ServiceAccount::fromJsonFile(__DIR__.'/../../miveci-firebase-adminsdk-pteyb-91be53dc7d.json');
  1518.                 $firebase = (new Factory())
  1519.                     ->withServiceAccount($serviceAccount)
  1520.                     ->create();
  1521.                 $auth $firebase->getAuth();
  1522.                 $fbuser $auth->createUserWithEmailAndPassword($datos['email'], $datos['apellido']);
  1523.                 $auth->setCustomUserAttributes($fbuser->uid$properties);
  1524.                 $user = new Usuario();
  1525.                 $body $fbuser;
  1526.                 $user->setUid($body->uid);
  1527.                 $user->setEmail($body->email);
  1528.                 $user->setUsername($body->email);
  1529.                 $user->setUsernameCanonical($body->email);
  1530.                 $user->setProviderData(json_encode($body->providerData));
  1531.                 $user->setEnabled(true);
  1532.                 $user->setPassword($datos['password_first']);
  1533.                 $user->setCreatedAt(new \DateTime());
  1534.                 $user->setNombre($datos['nombre']);
  1535.                 $user->setDocumento($datos['documento']);
  1536.                 $user->setApellido($datos['apellido']);
  1537.                 $em $this->getDoctrine()->getManager();
  1538.                 $em->persist($user);
  1539.                 $em->flush();
  1540.                 $this->qi->saveFire($user);
  1541.                 $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  1542.                 $this->get('security.token_storage')->setToken($token);
  1543.                 $this->get('session')->set('_security_main'serialize($token));
  1544.                 $event = new InteractiveLoginEvent($request$token);
  1545.                 $this->eventDispatcher->dispatch("security.interactive_login"$event);
  1546.                 return $this->redirectToRoute('homepage');
  1547.             } catch (Firebase\Exception\AuthException $e) {
  1548.                 array_push($errores$e->getMessage());
  1549.             } catch (Firebase\Exception\FirebaseException $e) {
  1550.                 array_push($errores$e->getMessage());
  1551.             }
  1552.         }
  1553.         return $this->render('user/registro.html.twig', [
  1554.             'errores' => $errores
  1555.         ]);
  1556.     }
  1557.     /**
  1558.      * @Route("/load", name="load")
  1559.      */
  1560.     public function load(Request $request)
  1561.     {
  1562.         /*
  1563.         $prods = $this->getDoctrine()->getRepository(Inventario::class)->findAll();
  1564.         foreach ($prods as $inv){
  1565.             $this->qi->saveFire($inv);
  1566.         }
  1567.     */
  1568.         dd(12);
  1569.         //return $this->redirectToRoute('easyadmin');
  1570.         //$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  1571.     }
  1572.     /**
  1573.      * @Route("/privacidad", name="privacidad")
  1574.      */
  1575.     public function privacidad(Request $request)
  1576.     {
  1577.         return $this->render('basic/privacidad.html.twig', [
  1578.             'llave'=>'privacidad',
  1579.             'titulo'=> 'Políticas de privacidad'
  1580.         ]);
  1581.     }
  1582.     /**
  1583.      * @Route("/terminos", name="terminos")
  1584.      */
  1585.     public function terminos(Request $request)
  1586.     {
  1587.         return $this->render('basic/privacidad.html.twig', [
  1588.             'llave'=>'terminos',
  1589.             'titulo'=> 'Términos y condiciones'
  1590.         ]);
  1591.     }
  1592.     /**
  1593.      * @Route("/politica", name="politica")
  1594.      */
  1595.     public function politica(Request $request)
  1596.     {
  1597.         return $this->render('basic/privacidad.html.twig', [
  1598.             'llave'=>'politica',
  1599.             'titulo'=> 'Política de tratamientos de datos'
  1600.         ]);
  1601.     }
  1602.     /**
  1603.      * @Route("/ajax-cart", name="politica")
  1604.      */
  1605.     public function ajaxCart(Request $request)
  1606.     {
  1607.         return $this->render('cart/ajaxcart.html.twig', [
  1608.         ]);
  1609.     }
  1610.     /**
  1611.      * @Method({"POST"})
  1612.      * @Route("/mostrarprediagnostico", name="mostrarprediagnostico")
  1613.      */
  1614.     public function mostrarprediagnostico(Request $request)
  1615.     {
  1616.         return $this->render('mailings/prediagnostico.html.twig', [
  1617.         ]);
  1618.     }
  1619.     /**
  1620.      * @Method({"POST"})
  1621.      * @Route("/pruebamail", name="pruebamail")
  1622.      */
  1623.     public function pruebaMail(Request $request)
  1624.     {
  1625.         return $this->render('mailings/registro_med_codverif.html.twig', [
  1626.         ]);
  1627.     }
  1628.     /**
  1629.      * @Method({"POST"})
  1630.      * @Route("/api/auth/register", name="crear_actualizar_usuario")
  1631.      */
  1632.     public function crearActualizarUsuario(Request $request)
  1633.     { 
  1634.         $body json_decode($request->getContent());
  1635.         $mensaje = array("ok" => false"message" => "error"); 
  1636.         $um   $this->userManager;
  1637.         $em   $this->getDoctrine()->getManager();
  1638.         $url_avatar_default $this->qi->getSetting('avatar-default');
  1639.         /* @var $user Usuario */
  1640.         $user $um->findUserBy(array('uid'=>$body->uid));
  1641.         if(!$user){
  1642.             $user $um->findUserBy(array('email'=>$body->email));
  1643.         }
  1644.         if($body->seccion != 'iniciarsesion'){
  1645.             $clavesecret='6LccqWQiAAAAAHp9HUVWc4QZP4TpDscHlBEtDHqd';
  1646.             
  1647.             $token $body->captcha;
  1648.             $verificado $this->qi->verificarToken($token$clavesecret);
  1649.             if (!$verificado) {
  1650.                 $mensaje["ok"]= false;
  1651.                 $mensaje["message"] = "Error debes seleccionar el captcha";
  1652.                 return new JsonResponse($mensaje);
  1653.             }
  1654.             if($body->perfil == 'paciente') {
  1655.                 $existe_paciente_doc $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(array('documento' => $body->documento'creado_por_medico' => 0));
  1656.                 if($existe_paciente_doc){
  1657.                     $mensaje["ok"]= false;
  1658.                     $mensaje['message'] = 'ERROR: El documento que ha ingresado ya existe.';
  1659.                     $mensaje json_encode($mensaje);
  1660.                     return new Response($mensaje);
  1661.                 }
  1662.                 $existe_paciente_email $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(array('email' => $body->email'creado_por_medico' => 0));
  1663.                 if($existe_paciente_email){
  1664.                     $mensaje["ok"]= false;
  1665.                     $mensaje['message'] =  'ERROR: La cuenta de correo ya esta siendo usada.';
  1666.                     $mensaje json_encode($mensaje);
  1667.                     return new Response($mensaje);
  1668.                 }
  1669.                 $existe_paciente $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(array('documento' => $body->documento'creado_por_medico' => 1));
  1670.                 if($existe_paciente){
  1671.                     if($existe_paciente->getDocumento() != $body->documento || $existe_paciente->getEmail() != $body->email){
  1672.                         $mensaje["ok"]= false;
  1673.                         $mensaje['message'] = 'ERROR: Los datos no coinciden con el paciente ingresado.';
  1674.                         $mensaje json_encode($mensaje);
  1675.                         return new Response($mensaje);
  1676.                     }
  1677.                 }
  1678.             }
  1679.             
  1680.             $paciente_creado false;
  1681.             $medico_creado false;
  1682.             if(!$user){
  1683.                 $user $um->createUser();
  1684.                 $user->setUid($body->uid);
  1685.                 $user->setEmail($body->email);
  1686.                 $user->setUsername($body->email);
  1687.                 $user->setUsernameCanonical($body->email);
  1688.                 $user->setProviderData(json_encode($body->providerData));
  1689.                 $user->setEnabled(true);
  1690.                 $user->setPassword('redes123');
  1691.                 $user->setCreatedAt(new \DateTime());
  1692.                 $user->setNombre($body->nombre);
  1693.                 $user->setApellido($body->apellido);
  1694.                 $user->setDocumento($body->documento);
  1695.                 
  1696.                 if($body->perfil == 'medico') {
  1697.                     $user->addRole('ROLE_MEDICO');
  1698.                     $url 'mailings/registro.html.twig';
  1699.                     $html_email =  $this->renderView($url);  
  1700.                     $subject $this->qi->getSetting('registro_medico');        
  1701.                     $this->qi->sendMail($subject$user->getEmail(), $html_email);
  1702.                 }
  1703.                 if($body->perfil == 'paciente') {
  1704.                     $user->addRole('ROLE_PACIENTE');
  1705.                     $url 'mailings/registro-paciente.html.twig';
  1706.                     $html_email =  $this->renderView($url);    
  1707.                     $subject $this->qi->getSetting('registro_paciente');        
  1708.                     $this->qi->sendMail($subject$user->getEmail(), $html_email);
  1709.                 }
  1710.             }
  1711.             if($body->perfil == 'medico') {
  1712.                 $role 'medico';
  1713.                 $repository $this->getDoctrine()->getRepository(PerfilMedico::class);                
  1714.                 $perfilmedico $repository->findOneBy(['documento' => $body->documento'tipo_documento' => $body->tipo_documento]);
  1715.                 
  1716.                 if ($perfilmedico) {
  1717.                     $user->addRole('ROLE_MEDICO');
  1718.                     $medico_creado true;
  1719.                 }
  1720.             }
  1721.             if($body->perfil == 'paciente') {
  1722.                 $role 'paciente';
  1723.                 $repository $this->getDoctrine()->getRepository(Paciente::class);
  1724.                 $paciente $repository->findOneBy(['documento' => $body->documento]);
  1725.                 if ($paciente) {
  1726.                     $user->addRole('ROLE_PACIENTE');
  1727.                     $paciente_creado true;
  1728.                 }
  1729.             }
  1730.             if(property_exists($body,'uid')){
  1731.                 $user->setUid($body->uid);
  1732.             }
  1733.             if(property_exists($body,'nombre')){
  1734.                 if(isset($body->nombre) && $body->nombre !== '')
  1735.                     $user->setNombre($body->nombre);
  1736.             }                   
  1737.             
  1738.             $em->persist($user);
  1739.             if ($paciente_creado) {
  1740.                 $paciente->setCreadoPorMedico(0);
  1741.                 $em->persist($paciente);
  1742.             }else{
  1743.                 if($body->documento  && $body->perfil == 'paciente'){
  1744.                     $paciente = new Paciente();
  1745.                     $paciente->setNombre($body->nombre);
  1746.                     $paciente->setApellido($body->apellido);
  1747.                     $paciente->setFotourl($url_avatar_default);
  1748.                     $paciente->setFoto('avatar.png');
  1749.                     $paciente->setDocumento($body->documento);
  1750.                     $paciente->setEmail($body->email);
  1751.                     $paciente->setTipoDocumento($body->tipo_documento);
  1752.                     $paciente->setFuma(0);
  1753.                     $paciente->setCreadoPorMedico(0);
  1754.                     $em->persist($paciente);
  1755.                 }
  1756.             }
  1757.     
  1758.             if ($medico_creado) {
  1759.                 $em->persist($perfilmedico);
  1760.             }else{
  1761.                 if($body->documento && $body->perfil == 'medico'){
  1762.                     $perfilmedico = new PerfilMedico();
  1763.                     $perfilmedico->setFotourl($url_avatar_default);
  1764.                     $perfilmedico->setFoto('avatar.png');
  1765.                     $perfilmedico->setUsuario($user);
  1766.                     $perfilmedico->setDocumento($body->documento);
  1767.                     $perfilmedico->setTipoDocumento($body->tipo_documento);
  1768.                     $em->persist($perfilmedico);
  1769.                 }
  1770.     
  1771.             }
  1772.             $em->flush();
  1773.             $um->updateUser($user);
  1774.         }
  1775.         if(!$user){
  1776.             $mensaje["ok"]= false;
  1777.             $mensaje['message'] = 'El usuario no existe, por favor registrate ';
  1778.             return new JsonResponse($mensaje);
  1779.         }
  1780.                     
  1781.         $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  1782.         $this->get('security.token_storage')->setToken($token);
  1783.         $this->get('session')->set('_security_main'serialize($token));
  1784.         $event = new InteractiveLoginEvent($request$token);
  1785.         $this->eventDispatcher->dispatch("security.interactive_login"$event);
  1786.         if ($this->authorization->isGranted('ROLE_POS_ADMIN')) {
  1787.             $resultado= array("ok"=>true,'obj'=>$user,'url'=> $this->generateUrl('homepage'));
  1788.         }else{            
  1789.             if ($this->authorization->isGranted('ROLE_MEDICO') ) {
  1790.                 $ruta $this->generateUrl('home_medicos');
  1791.             }else {
  1792.                 $ruta $this->generateUrl('home_pacientes');
  1793.             }
  1794.             $resultado = array("ok"=>true'url'=> $ruta);
  1795.         }
  1796.                 
  1797.         $encoders = array(new XmlEncoder(), new JsonEncoder());
  1798.         $normalizer = new ObjectNormalizer();
  1799.         $normalizer->setCircularReferenceLimit(1);
  1800.         // Add Circular reference handler
  1801.         $normalizer->setCircularReferenceHandler(function ($object) {
  1802.             return $object->getId();
  1803.         });
  1804.         $normalizers = array($normalizer);
  1805.         $serializer = new Serializer($normalizers$encoders);
  1806.         $json $serializer->serialize($resultado,'json');
  1807.         return new Response($json);
  1808.     }
  1809.     /**
  1810.      * @Method({"POST"})
  1811.      * @Route("/api/direccion", name="crear_direccion")
  1812.      */
  1813.     public function crearDireccion(Request $request)
  1814.     {
  1815.         $body json_decode($request->getContent());
  1816.         $qi $this->qi;
  1817.         $user $this->getDoctrine()->getRepository(Usuario::class)->findOneBy(array('uid'=>$body->uid));
  1818.         $ciudad $this->getDoctrine()->getRepository(Ciudad::class)->find($body->ciudad->id);
  1819.         $news = new Direccion();
  1820.         $news->setUsuario($user);
  1821.         $news->setNombre($body->nombre);
  1822.         $news->setCiudad($ciudad);
  1823.         $news->setDireccion($body->direccion." ".$body->adicional);
  1824.         $news->setLat($body->lat);
  1825.         $news->setLng($body->lng);
  1826.         $news->setUid($body->uid);
  1827.         $news->setPredeterminada($body->predeterminada);
  1828.         $em $this->getDoctrine()->getManager();
  1829.         $em->persist($news);
  1830.         $em->flush();
  1831.         $qi->saveFire($news);
  1832.         $resultado= array("ok"=>true,'obj'=>$news);
  1833.         $encoders = array(new XmlEncoder(), new JsonEncoder());
  1834.         $normalizer = new ObjectNormalizer();
  1835.         $normalizer->setCircularReferenceLimit(1);
  1836.         // Add Circular reference handler
  1837.         $normalizer->setCircularReferenceHandler(function ($object) {
  1838.             return $object->getId();
  1839.         });
  1840.         $normalizers = array($normalizer);
  1841.         $serializer = new Serializer($normalizers$encoders);
  1842.         $json $serializer->serialize($resultado,'json');
  1843.         return new Response($json);
  1844.     }
  1845.     /**
  1846.      * @Method({"POST"})
  1847.      * @Route("/api/historial/{uid}", name="historial")
  1848.      */
  1849.     public function historial(Request $request,$uid)
  1850.     {
  1851.         $qi $this->qi;
  1852.         $user $this->getDoctrine()->getRepository(Usuario::class)->findOneBy(array('uid'=>$uid));
  1853.         $compras $this->getDoctrine()->getManager()->createQueryBuilder()
  1854.             ->from('App:Compra','c')
  1855.             ->addSelect('c')
  1856.             ->leftJoin('c.tienda','t')
  1857.             ->addSelect('t')
  1858.             ->leftJoin('c.direccion','d')
  1859.             ->addSelect('d')
  1860.             ->where('c.usuario = :usuario')
  1861.             ->setParameter('usuario',$user)
  1862.             ->getQuery()
  1863.             ->getArrayResult();
  1864.         $resultado= array("ok"=>true,'historial'=>$compras);
  1865.         $encoders = array(new XmlEncoder(), new JsonEncoder());
  1866.         $normalizer = new ObjectNormalizer();
  1867.         $normalizer->setCircularReferenceLimit(1);
  1868.         // Add Circular reference handler
  1869.         $normalizer->setCircularReferenceHandler(function ($object) {
  1870.             return $object->getId();
  1871.         });
  1872.         $normalizers = array($normalizer);
  1873.         $serializer = new Serializer($normalizers$encoders);
  1874.         $json $serializer->serialize($resultado,'json');
  1875.         return new Response($json);
  1876.     }
  1877.     function crearPedido($user,$direccion,$metodo,$tienda,$costo_domicilio,$comentarios,$peticion,$paga_con,$carrito,$canal){
  1878.         $qi $this->qi;
  1879.         $em $this->getDoctrine()->getManager();
  1880.         $estado $this->getDoctrine()->getRepository(EstadoPedido::class)->findOneBy(array('ref' => 'creado'));
  1881.         $subtotal 0;
  1882.         $total 0;
  1883.         $news = new Compra();
  1884.         $news->setCreatedAt(new \DateTime());
  1885.         $news->setDireccion($direccion);
  1886.         $news->setUsuario($user);
  1887.         $news->setFechaRealProcesamiento(new \DateTime());
  1888.         $news->setEstado($estado);
  1889.         $news->setEstadoProcesamiento("nuevo");
  1890.         $news->setCostoDomicilio($costo_domicilio);
  1891.         $news->setComentarios($comentarios);
  1892.         $news->setBody(json_encode($peticion));
  1893.         $news->setCanal($canal);
  1894.         $news->setMetodo($metodo);
  1895.         $news->setPagaCon($paga_con);
  1896.         $news->setSubtotal($subtotal);
  1897.         $news->setTienda($tienda);
  1898.         $total $subtotal $costo_domicilio;
  1899.         $news->setTotal($total);
  1900.         $em->persist($news);
  1901.         $em->flush();
  1902.         foreach ($carrito as $item) {
  1903.             if ($canal == 'app') {
  1904.                 $product_id $item->product_id;
  1905.                 $count $item->count;
  1906.             } else {
  1907.                 $product_id $item["product_id"];
  1908.                 $count $item["count"];
  1909.             }
  1910.             $prod $this->getDoctrine()->getRepository(Producto::class)->findOneBy(array('plu' => $product_id));
  1911.             if($this->qi->getSetting('pedido_multitienda') != '1')
  1912.                 $inv $this->getDoctrine()->getRepository(Inventario::class)->findOneBy(array('producto' => $prod'tienda' => $tienda));
  1913.             else
  1914.                 $inv $this->getDoctrine()->getRepository(Inventario::class)->findOneBy(array('producto' => $prod));
  1915.             if ($inv) {
  1916.                 $subtotal $subtotal $inv->getPrecio() * $count;
  1917.                 $newci = new CompraItem();
  1918.                 $newci->setProducto($prod);
  1919.                 $newci->setPrecio($inv->getPrecio() * $count);
  1920.                 $newci->setCantidad($count);
  1921.                 $newci->setCompra($news);
  1922.                 $newci->setCosto($inv->getPrecio());
  1923.                 $em->persist($newci);
  1924.                 $em->flush();
  1925.                 $qi->saveFire($newci);
  1926.             } else {
  1927.             }
  1928.         }
  1929.         $news->setSubtotal($subtotal);
  1930.         $total $subtotal $costo_domicilio;
  1931.         $news->setTotal($total);
  1932.         $em->persist($news);
  1933.         $em->flush();
  1934.         $qi->saveFire($news);
  1935.         $obj = array('tienda' => $tienda,
  1936.             'compra' => array('id' => $news->getId(),
  1937.                 'total' => $news->getTotal(),
  1938.                 'estado' => $news->getEstadoProcesamiento(),
  1939.                 'subtotal' => $news->getSubtotal(),
  1940.                 'costoDomicilio' => $news->getCostoDomicilio(),
  1941.             )
  1942.         );
  1943.         $resultado = array("ok" => true'obj' => $obj);
  1944.         $qi->updateListenerTienda($tienda);
  1945.         return $resultado;
  1946.     }
  1947.     /**
  1948.      * @Route("/import", name="import")
  1949.      */
  1950.     public function import(Request $request)
  1951.     {
  1952.         /*$categorias = $this->getDoctrine()->getRepository('App:Producto')->findAll();
  1953.         foreach ($categorias as $categoria){
  1954.             $this->qi->saveFire($categoria);
  1955.         }*/
  1956.         /*
  1957.         $em = $this->getDoctrine()->getManager();
  1958.         $data = json_decode($request->getContent(), true);
  1959.         foreach ($data as $producto){
  1960.             $producto_in = new Producto();
  1961.             $producto_in->setPlu($producto['sku']);
  1962.             $producto_in->setNombre($producto['nombreEs']);
  1963.             $producto_in->setImagen($producto['imagen']);
  1964.             $producto_in->setOrden(1);
  1965.             $producto_in->setPrecio(0);
  1966.             $producto_in->setVisible(true);
  1967.             if(is_numeric($producto['id'])){
  1968.                 $categoria = $this->getDoctrine()->getRepository('App:Categoria')->find($producto['id']);
  1969.                 $producto_in->addCategoria($categoria);
  1970.             }
  1971.             $em->persist($producto_in);
  1972.         }
  1973.         $em->flush();
  1974.         die();
  1975.         foreach ($data as $categoria){
  1976.             $categoria_in = new Categoria();
  1977.             $categoria_in->setNombre($categoria['nombre']);
  1978.             $categoria_in->setImagen($categoria['imagen']);
  1979.             $categoria_in->setVisible(true);
  1980.             $categoria_in->setOrden($categoria['orden']);
  1981.             $em->persist($categoria_in);
  1982.         }
  1983.         $em->flush();
  1984.         die();
  1985.         return $this->redirectToRoute('easyadmin');
  1986.         */
  1987.         //$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  1988.     }
  1989.     /**
  1990.      * @Route("/resetting/iridian", name="reset-iridian")
  1991.      */
  1992.     public function sendEmailAction(Request $request)
  1993.     {
  1994.         $username $request->request->get('username');
  1995.         $user $this->userManager->findUserByUsernameOrEmail($username);
  1996.         $event = new GetResponseNullableUserEvent($user$request);
  1997.         if (null !== $event->getResponse()) {
  1998.             return $event->getResponse();
  1999.         }
  2000.         if (null !== $user && !$user->isPasswordRequestNonExpired($this->retryTtl)) {
  2001.             $event = new GetResponseUserEvent($user$request);
  2002.             if (null !== $event->getResponse()) {
  2003.                 return $event->getResponse();
  2004.             }
  2005.             if (null === $user->getConfirmationToken()) {
  2006.                 $user->setConfirmationToken($this->tokenGenerator->generateToken());
  2007.             }
  2008.             $event = new GetResponseUserEvent($user$request);
  2009.             if (null !== $event->getResponse()) {
  2010.                 return $event->getResponse();
  2011.             }
  2012.             $this->sendResettingEmailMessage($user);
  2013.             $user->setPasswordRequestedAt(new \DateTime());
  2014.             $this->userManager->updateUser($user);
  2015.             $event = new GetResponseUserEvent($user$request);
  2016.             if (null !== $event->getResponse()) {
  2017.                 return $event->getResponse();
  2018.             }
  2019.         }
  2020.         return new RedirectResponse($this->generateUrl('fos_user_resetting_check_email', array('username' => $username)));
  2021.     }
  2022.     public function sendResettingEmailMessage(UserInterface $user)
  2023.     {
  2024.         $url $this->generateUrl('fos_user_resetting_reset', array('token' => $user->getConfirmationToken()), UrlGeneratorInterface::ABSOLUTE_URL);
  2025.         $mensajestr_replace('%link%','<a href="'.$url.'">link</a>',$this->qi->getTextoBig('mail_contrasena'));
  2026.     }
  2027.     /**
  2028.      * @Route("/fullreload", name="fullreload")
  2029.      */
  2030.     /*
  2031.     public function fullreload(Request $request)
  2032.     {
  2033.         $productos = $this->getDoctrine()->getRepository('App:Producto')
  2034.             ->createQueryBuilder('p')
  2035.             ->select('p','c as cats')
  2036.             ->leftJoin('p.categorias','c')
  2037.             ->where('c.id is not null')
  2038.             //->setMaxResults(2)
  2039.             ->getQuery()
  2040.             ->getArrayResult();
  2041.         $prods = array();
  2042.         foreach ($productos as $producto){
  2043.             $cat = $producto['categorias'][0]['id'];
  2044.             $producto['categorias'] = array($cat);
  2045.             $prods[$producto['plu']] = $producto;
  2046.         }
  2047.         $this->qi->saveMultiFire('Producto',$prods);
  2048.         dd($prods);
  2049.         return $this->render('basic/template.html.twig', [
  2050.         ]);
  2051.     }
  2052.     */
  2053.     /**
  2054.      * @Route("/load", name="load")
  2055.      */
  2056.     /*
  2057.     public function load(Request $request)
  2058.     {
  2059.         $em = $this->getDoctrine()->getManager();
  2060.         $precios = array(10000, 5000, 7900, 12000, 17000, 20500,9000, 500, 300, 1000, 14500);
  2061.         $productos = $this->getDoctrine()->getRepository('App:Producto')->findAll();
  2062.         $tiendas = $this->getDoctrine()->getRepository('App:Tienda')->findAll();
  2063.         foreach ($tiendas as $tienda){
  2064.             $cont = 0;
  2065.             foreach ($productos as $producto){
  2066.                 if($cont >= count($precios))
  2067.                     $cont = 0;
  2068.                 $inventario = new Inventario();
  2069.                 $inventario->setCantidad(1);
  2070.                 $inventario->setProducto($producto);
  2071.                 $inventario->setPrecio($precios[$cont]);
  2072.                 $inventario->setTienda($tienda);
  2073.                 $cont++;
  2074.                 $em->persist($inventario);
  2075.                 $em->flush();
  2076.                 $this->qi->saveFire($inventario);
  2077.             }
  2078.         }
  2079.         return $this->render('basic/template.html.twig', [
  2080.         ]);
  2081.     }
  2082.     */
  2083.     /**
  2084.      * @Route("/mispedidos", name="mispedidos")
  2085.      */
  2086.     public function mispedidos(Request $request)
  2087.     {
  2088.         $user $this->getUser();
  2089.         if(!$user){
  2090.             return $this->redirectToRoute('ingresar');
  2091.         }
  2092.         $aprobado $this->getDoctrine()->getRepository(EstadoPedido::class)->findBy(array('ref'=>'APPROVED'));
  2093.         $pedidos $this->getDoctrine()->getRepository(Compra::class)->findBy(array("usuario"=>$user,'estado'=>$aprobado), array("createdAt"=>"desc"));
  2094.         return $this->render('basic/pedidos.html.twig', [
  2095.             'pedidos' => $pedidos,
  2096.         ]);
  2097.     }
  2098.     /**
  2099.      * @Route("/mailingcompra", name="mailingcompra")
  2100.      */
  2101.     public function mailingcompra(Request $request)
  2102.     {
  2103.         $compra $this->getDoctrine()->getRepository('App:Compra')->findOneBy(array(), array('id'=>'desc'));
  2104.         $asunto $this->qi->getTexto('asunto_compra_cliente');
  2105.         return $this->render('mailing/compra.html.twig', array(
  2106.             'compra'=>$compra
  2107.         ));
  2108.     }
  2109.     /**
  2110.      * @Route("/mailingcontacto", name="mailingcontacto")
  2111.      */
  2112.     public function mailingcontacto(Request $request)
  2113.     {
  2114.         $asunto $this->qi->getTexto('asunto_compra_cliente');
  2115.         return $this->render('contact/contact_mail.html.twig', array(
  2116.             'nombre'=>'Luisa',
  2117.             'email'=>'samuel@iridian.co',
  2118.             'telefono'=>'3002111111',
  2119.             'mensaje'=>'Hola quiero saber si venden traumel en tabletas',
  2120.         ));
  2121.     }
  2122.     /**
  2123.      * @Route("/sintoma/{id}", name="verpreguntasrespuestas")
  2124.      */
  2125.     public function verpreguntasrespuestas(Request $request$id)
  2126.     {
  2127.         $sintoma $this->getDoctrine()->getRepository('App:Sintoma')->find($id);
  2128.         $preguntas $sintoma->getPreguntas();
  2129.         $format_pr_info "Pregunta id:%d - Respuesta id:%d - Opcion id:%d - Valor:%s\n";
  2130.         $preguntas_respuestas_info '';
  2131.         foreach($preguntas as $p) {
  2132.             $preguntas_info[] = $p;
  2133.             $respuestas $p->getRespuestas();
  2134.             foreach($respuestas as $r) {
  2135.                 $respuestas_info[] = $r;
  2136.                 $preguntas_respuestas_info $preguntas_respuestas_info sprintf($format_pr_info$p->getId(), $r->getId(), $r->getOpcion()->getId(), $r->getOpcion()->getValor());
  2137.             }
  2138.         }
  2139.         
  2140.         dd($preguntas_info$respuestas_info$preguntas_respuestas_info);
  2141.     }
  2142.     /**
  2143.      * @Route("/regla/{id}", name="verregla")
  2144.      */
  2145.     public function verregla(Request $request$id)
  2146.     {
  2147.         $msg "VER REGLA DE UN PREDIAGNOSTICO";
  2148.         $regla_current $this->getDoctrine()->getRepository('App:Regla')->findOneBy(['prediagnostico' => $id]);
  2149.         $nombre_prediagnostico $regla_current->getPrediagnostico()->getInterpretacion();
  2150.         $reglas= [];
  2151.         $reglas[] = $regla_current;
  2152.         
  2153.         $format_regla_info ='';
  2154.         $format_regla_info "regla:%s - operador:%s - opcion:%s \n";
  2155.         $regla_info sprintf($format_regla_info,$regla_current->getNombre(),$regla_current->getOperador(), $regla_current->getRespuesta()->getOpcion()->getValor());
  2156.         while($regla_current->getReglasig()) {
  2157.             $regla_current $regla_current->getReglasig();
  2158.             $reglas[] = $regla_current;
  2159.             
  2160.             $regla_info $regla_info sprintf($format_regla_info,$regla_current->getNombre(),$regla_current->getOperador(), $regla_current->getRespuesta()->getOpcion()->getValor());
  2161.         }
  2162.         
  2163.         dd($msg$nombre_prediagnostico,$regla_info);
  2164.     }
  2165.     /**
  2166.      * @Route("/interrogatorio/{id}", name="verinterrogatorio")
  2167.      */
  2168.     public function verinterrogatorio(Request $request$id)
  2169.     {
  2170.         $titulo="Respuestas interrogatorio interrogatorio/ID PREDIAGNOSTICO";
  2171.         $format_respuesta "Pregunta:%s Pregunta id:%d - Respuesta:%s - opcion id:%d\n";
  2172.         $format_respuesta_ids "Pregunta id:%d - opcion id:%d - valor:%s\n";
  2173.         $interrogatorio $this->getDoctrine()->getRepository(Interrogatorio::class)->createQueryBuilder('i')
  2174.             ->select('i')
  2175.             ->where('i.prediagnosactivo = :prediagnosactivo')
  2176.             ->setParameter('prediagnosactivo'$id)
  2177.             ->getQuery()
  2178.             ->getResult();
  2179.             $interrogatorio_info '';
  2180.             $interrogatorio_info_ids '';
  2181.         foreach($interrogatorio as $i) {
  2182.             
  2183.             $interrogatorio_info $interrogatorio_info.sprintf($format_respuesta,
  2184.                                                                                 $i->getPregunta()->getEnunciado(),
  2185.                                                                                 $i->getPregunta()->getId(),
  2186.                                                                                 $i->getOpcion()->getValor(), 
  2187.                                                                                 $i->getOpcion()->getId());
  2188.             
  2189.             $interrogatorio_info_ids $interrogatorio_info_ids.sprintf($format_respuesta_ids,
  2190.             $i->getPregunta()->getId(),
  2191.             $i->getOpcion()->getId(),
  2192.             $i->getOpcion()->getValor(),
  2193.             );
  2194.         }
  2195.         dd($titulo$interrogatorio_info$interrogatorio_info_ids);
  2196.     }
  2197.     /**
  2198.      * @Route("/test")
  2199.      */
  2200.     public function test(Request $request): Response
  2201.     {
  2202.         if (!$this->getUser()) dd('restricted');
  2203.         $sw=false;
  2204.             if ($sw) {
  2205.         $respuesta_paciente = [
  2206.             393 => 789
  2207.             395 => 792
  2208.             396 => 794
  2209.             397 => 796,
  2210.             398 => 798,
  2211.             399 => 800,
  2212.             400 => 802,
  2213.             401 => 804,
  2214.             402 => 806,
  2215.             403 => 808
  2216.         ];
  2217.         $resultado false;
  2218.         $especialidad_id 4;
  2219.         $sintoma_id 61;
  2220.         $prediagnosticos $this->getDoctrine()->getRepository(Prediagnostico::class)->findBy(['sintoma' => $sintoma_id ]);
  2221.         $reglas =[];
  2222.         foreach($prediagnosticos as $p) {
  2223.             if ($p->getRegla()) {
  2224.                 $reglas[] = $p->getRegla();
  2225.                 
  2226.             }
  2227.         }
  2228.         $resultado_total = [];
  2229.         $expresiones=[];
  2230.         foreach ($reglas as $regla) {
  2231.             $pregunta_respuesta=[];
  2232.             $prediagnostico_interpretacion $regla->getPrediagnostico()->getInterpretacion();
  2233.             $prediagnostico_id $regla->getPrediagnostico()->getId();
  2234.             
  2235.             while ($regla) {
  2236.                         
  2237.                 $pregunta $regla->getRespuesta()->getPregunta();
  2238.                 $enunciado =  $pregunta->getEnunciado();
  2239.     
  2240.                 $respuesta $regla->getRespuesta();
  2241.                 $opcion $respuesta->getOpcion();
  2242.     
  2243.                 $pregunta_respuesta[] = ['pregunta_id' => $pregunta->getId(), 
  2244.                                         'enunciado' => $enunciado
  2245.                                         'opcion_id' => $opcion->getId() ,
  2246.                                         'valor' => $opcion->getValor(),
  2247.                                         'operador' => $regla->getOperador(),
  2248.                                         'factor' => $regla->getFactor()
  2249.                                     ];
  2250.         
  2251.                 $regla $regla->getReglaSig();
  2252.             }
  2253.             $resultados = [];
  2254.             $resultado false;
  2255.             $prediagnostico '';
  2256.             $cadena='';
  2257.             $evaluacion_conjunto false;
  2258.             $criterio_acumulador=0;
  2259.             for($i=0$i count($pregunta_respuesta); $i++) {
  2260.                 $op1 "'".$pregunta_respuesta[$i]["opcion_id"]."'";
  2261.                 $operador $pregunta_respuesta[$i]["operador"];
  2262.                 $op2 "'".$respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]."'";
  2263.                 
  2264.                 $cadena $cadena $op1 ' == ' $op2 ' '.$operador ' ';
  2265.                 
  2266.                 if ($operador == '(') {
  2267.                     $evaluacion_conjunto true;
  2268.                     $factor $pregunta_respuesta[$i]["factor"];
  2269.                 }
  2270.                 if ($operador == ')') {
  2271.                     if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
  2272.                         $criterio_acumulador++;
  2273.                     }
  2274.                     if ($criterio_acumulador >= $factor) {
  2275.                         $resultado true;
  2276.                         $prediagnostico_encontrado $prediagnostico_interpretacion;
  2277.                     } else {
  2278.                         $resultados[] = false;
  2279.                         $resultado false;
  2280.                         $prediagnostico_encontrado 'ninguno';
  2281.                         
  2282.                         $expresiones[] = $cadena;
  2283.                         $evaluacion_conjunto false;
  2284.                         break;
  2285.                     }
  2286.                 }
  2287.                 if ($evaluacion_conjunto) {
  2288.                     if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
  2289.                         $criterio_acumulador++;
  2290.                     } 
  2291.                 } 
  2292.                 else {
  2293.                     if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
  2294.                         $resultados[] = true;
  2295.                         $resultado true;
  2296.                         $prediagnostico_encontrado $prediagnostico_interpretacion;
  2297.                     } else {
  2298.                         if ($operador == '&&') {
  2299.                             $resultados[] = false;
  2300.                             $resultado false;
  2301.                             $prediagnostico_encontrado 'ninguno';
  2302.                             
  2303.                             $expresiones[] = $cadena;
  2304.                             break;
  2305.                         } else {
  2306.                             $resultados[] = false;
  2307.                             $resultado false;
  2308.                             $prediagnostico_encontrado 'ninguno';
  2309.                         }
  2310.                     }
  2311.                 }
  2312.             }
  2313.             
  2314.             $expresiones[] = $cadena;
  2315.             $resultado_total[] = array("preguntarespuesta" => $pregunta_respuesta"resultadoespecifico" => $resultados,"resultadogeneral" => $resultado,  "prediagnostico_id" => $prediagnostico_id"prediagnostico" => $prediagnostico_encontrado);
  2316.         }
  2317.         dd($reglas$expresiones$resultado_total$respuesta_paciente);
  2318.     }
  2319.         $respuesta_paciente = [
  2320.             393 => 789
  2321.             395 => 791
  2322.             396 => 794
  2323.             397 => 796,
  2324.             398 => 798,
  2325.             399 => 800,
  2326.             400 => 802,
  2327.             401 => 804,
  2328.             402 => 806,
  2329.             403 => 808
  2330.         ];
  2331.         $resultado false;
  2332.         $especialidad_id 4;
  2333.         $sintoma_id 61;
  2334.         $prediagnosticos $this->getDoctrine()->getRepository(Prediagnostico::class)->findBy(['sintoma' => $sintoma_id ]);
  2335.         $reglas =[];
  2336.         foreach($prediagnosticos as $p) {
  2337.             if ($p->getRegla()) {
  2338.                 $reglas[] = $p->getRegla();
  2339.                 
  2340.             }
  2341.         }
  2342.         $resultado_total = [];
  2343.         $expresiones=[];
  2344.         foreach ($reglas as $regla) {
  2345.             $pregunta_respuesta=[];
  2346.             $prediagnostico_interpretacion $regla->getPrediagnostico()->getInterpretacion();
  2347.             $prediagnostico_id $regla->getPrediagnostico()->getId();
  2348.             
  2349.             while ($regla) {
  2350.                         
  2351.                 $pregunta $regla->getRespuesta()->getPregunta();
  2352.                 $enunciado =  $pregunta->getEnunciado();
  2353.     
  2354.                 $respuesta $regla->getRespuesta();
  2355.                 $opcion $respuesta->getOpcion();
  2356.     
  2357.                 $pregunta_respuesta[] = ['pregunta_id' => $pregunta->getId(), 
  2358.                                         'enunciado' => $enunciado
  2359.                                         'opcion_id' => $opcion->getId() ,
  2360.                                         'valor' => $opcion->getValor(),
  2361.                                         'operador' => $regla->getOperador(),
  2362.                                         'regla' => $regla->getNombre()
  2363.                                     ];
  2364.         
  2365.                 $regla $regla->getReglaSig();
  2366.             }
  2367.             $resultados = [];
  2368.             $resultado false;
  2369.             $prediagnostico '';
  2370.             $cadena='';
  2371.             for($i=0$i count($pregunta_respuesta); $i++) {
  2372.                 $op1 "'".$pregunta_respuesta[$i]["opcion_id"]."'";
  2373.                 $operador $pregunta_respuesta[$i]["operador"];
  2374.                 $op2 "'".$respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]."'";
  2375.                 
  2376.                 $cadena $cadena $op1 ' == ' $op2 ' '.$operador ' ';
  2377.                 
  2378.                 if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
  2379.                     $resultados[] = true;
  2380.                     $resultado true;
  2381.                     $prediagnostico_encontrado $prediagnostico_interpretacion;
  2382.                 } else {
  2383.                     if ($operador == '&&') {
  2384.                         $resultados[] = false;
  2385.                         $resultado false;
  2386.                         $prediagnostico_encontrado 'ninguno';
  2387.                         
  2388.                         break;
  2389.                     } else {
  2390.                         $resultados[] = false;
  2391.                         $resultado false;
  2392.                         $prediagnostico_encontrado 'ninguno';
  2393.                     }
  2394.                 }
  2395.                 
  2396.             }
  2397.             
  2398.             $expresiones[] = ["regla" => $pregunta_respuesta[$i]["regla"], "cadena"=> $cadena];
  2399.             $resultado_total[] = array("preguntarespuesta" => $pregunta_respuesta"resultadoespecifico" => $resultados,"resultadogeneral" => $resultado,  "prediagnostico_id" => $prediagnostico_id"prediagnostico" => $prediagnostico_encontrado);
  2400.         }
  2401.         dd($expresiones$resultado_total$respuesta_paciente);
  2402.         $prediagnostico_id 2;
  2403.         $especialidad $this->getDoctrine()->getRepository(Especialidad::class)->findOneBy([ 'id' => $especialidad_id ]);
  2404.         $prediagnostico $this->getDoctrine()->getRepository(Prediagnostico::class)->findOneBy([ 'id' => $prediagnostico_id ]);
  2405.         $regla $prediagnostico->getRegla();
  2406.         $respuesta_paciente = [
  2407.             => 21,
  2408.             => 24,
  2409.             => 26,
  2410.             => 28,
  2411.             => 30,
  2412.             => 32,
  2413.             => 34
  2414.         ];
  2415.         
  2416.         $pregunta_respuesta=[];
  2417.         while ($regla) {
  2418.                     
  2419.             $pregunta $regla->getRespuesta()->getPregunta();
  2420.             $enunciado =  $pregunta->getEnunciado();
  2421.             $respuesta $regla->getRespuesta();
  2422.             $opcion $respuesta->getOpcion();
  2423.             $pregunta_respuesta[] = ['pregunta_id' => $pregunta->getId(), 
  2424.                                     'enunciado' => $enunciado
  2425.                                     'opcion_id' => $opcion->getId() ,
  2426.                                     'valor' => $opcion->getValor(),
  2427.                                     'operador' => $regla->getOperador()
  2428.                                 ];
  2429.             $regla $regla->getReglaSig();
  2430.         }
  2431.         $cadena '';
  2432.         $resultados = [];
  2433.         for($i=0$i count($pregunta_respuesta); $i++) {
  2434.             $op1 "'".$pregunta_respuesta[$i]["opcion_id"]."'";
  2435.             $operador $pregunta_respuesta[$i]["operador"];
  2436.             $op2 "'".$respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]."'";
  2437.             
  2438.             if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
  2439.                 $resultados[] = true;
  2440.                 $resultado true;
  2441.             } else {
  2442.                 if ($operador == '&&') {
  2443.                     $resultados[] = false;
  2444.                     $resultado false;
  2445.                     break;
  2446.                 }
  2447.             }
  2448.         }
  2449.         dd($pregunta_respuesta$respuesta_paciente$resultado$resultados);
  2450.         $email 'joel@gmail.com';
  2451.         $documento_paciente '12502219';
  2452.         $repository $this->getDoctrine()->getRepository(Paciente::class);
  2453.         $paciente $repository->findOneBy(['documento' => $documento_paciente]);
  2454.         dd($paciente);
  2455.         $cat_id 7;
  2456.         $catalogo_concepto $this->getDoctrine()->getRepository(Catalogo::class)->createQueryBuilder('cat')
  2457.             ->select('cat')
  2458.             ->where('cat.concepto = :cat_id')
  2459.             ->setParameter('cat_id'$cat_id)
  2460.             ->getQuery()
  2461.             ->getResult();
  2462.         $rips '042205';
  2463.         $servicio $this->getDoctrine()->getRepository(Servicio::class)->findOneBy(['codigorips' => $rips'medico' => 2]);
  2464.         
  2465.         dd($catalogo_concepto$servicio);
  2466.         $tipos_documento $this->getDoctrine()->getRepository(Tipodocumento::class)->createQueryBuilder('td')
  2467.             ->select('td' )
  2468.             ->where('td.visible = true')
  2469.             ->orderBy('td.orden''ASC')
  2470.             ->getQuery()
  2471.             ->getArrayResult();
  2472.         dd($tipos_documento);
  2473.         $id 1;
  2474.         $ordenes $this->getDoctrine()->getRepository(Orden::class)->createQueryBuilder('o')
  2475.             ->select('o')
  2476.             ->leftJoin('o.paciente''p')
  2477.             ->where('p.id = :paciente_id')
  2478.             ->setParameter('paciente_id'$id)
  2479.             ->orderBy('o.fecha''DESC')
  2480.             ->getQuery()
  2481.             ->getArrayResult();
  2482.         $orden $ordenes[0];
  2483.         $fecha $orden["fecha"];
  2484.         dd($fecha->format('Y-m-d'));
  2485.         $fecha_comienzo $this->qi->getSetting('fecha-inicio-operacion');
  2486.         $numero_mes date("m"strtotime($fecha_comienzo));
  2487.         $interval = \DateInterval::createFromDateString('1 month');
  2488.         $hoy = new \DateTime();
  2489.         $rango = new \DatePeriod(new \DateTime($fecha_comienzo), $interval $hoy);
  2490.         foreach($rango as $date1){
  2491.             $numero_mes date("m"strtotime($date1->format('Y-m-d')));
  2492.             $cadena_mes $this->qi->getMes($numero_mes);
  2493.             $meses_periodo[] = array('mesyear' => $date1->format('m').'-'.$date1->format('Y'), 'mesnumero' => $date1->format('m'), 'mescadena' => $cadena_mes ,'year' => $date1->format('Y'));
  2494.          }
  2495.          dd($meses_periodo);
  2496.         $metricas_atencions_all = [];
  2497.         $perfil_medico $this->getDoctrine()->getRepository('App:Perfilmedico')->find(2);
  2498.         $especialidades $perfil_medico->getEspecialidades();
  2499.         
  2500.         foreach($especialidades as $e) {
  2501.             $esp[] = $e->getNombre();    
  2502.         }
  2503.         dd($esp);
  2504.         
  2505.     }
  2506. }