<?php
namespace App\Controller;
use App\Entity\Alergia;
use App\Entity\Faq;
use App\Entity\TipSalud;
use App\Entity\Usuario;
use App\Entity\Perfilmedico;
use App\Entity\Paciente;
use App\Entity\Diploma;
use App\Entity\Atencion;
use App\Entity\MetricaAtencion;
use App\Entity\Diagnostico;
use App\Entity\Atencionadjunto;
use App\Entity\Catalogo;
use App\Entity\Orden;
use App\Entity\Eps;
use App\Entity\Tipodocumento;
use App\Entity\Servicio;
use App\Entity\Especialidad;
use App\Entity\Prediagnostico;
use App\Entity\Metrica;
use App\Entity\Interrogatorio;
use App\Entity\GrupoFormula;
use App\Entity\GrupoImagen;
use App\Entity\GrupoParaclinico;
use App\Entity\Paraclinico;
use App\Entity\Imagen;
use App\Entity\Procedimiento;
use App\Entity\Terapia;
use App\Entity\Medicamento;
use App\Entity\ServicioCatalogo;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Entity\AntecedentePersonal;
use App\Form\ContactoType;
use App\Form\DireccionType;
use App\Form\PerfilType;
use App\Form\PerfilmedicoType;
use App\Form\AtencionType;
use App\Service\QI;
use FOS\UserBundle\Event\GetResponseNullableUserEvent;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Model\UserManagerInterface;
use FOS\UserBundle\Util\TokenGeneratorInterface;
use Kreait\Firebase;
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
use phpDocumentor\Reflection\Types\This;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Serializer\Encoder\JsonEncode;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class HomeController extends AbstractController
{
private $qi;
private $userManager;
private $retryTtl;
private $tokenGenerator;
private $eventDispatcher;
private $authorization;
public function __construct(QI $qi, UserManagerInterface $userManager,TokenGeneratorInterface $tokenGenerator, EventDispatcherInterface $eventDispatcher,AuthorizationCheckerInterface $authorization)
{
$this->qi = $qi;
$this->userManager = $userManager;
$this->retryTtl = 7200;
$this->tokenGenerator = $tokenGenerator;
$this->eventDispatcher = $eventDispatcher;
$this->authorization = $authorization;
}
/**
* @Route("/direcciones", name="direcciones")
*/
public function direcciones(Request $request)
{
$dirs = $this->getDoctrine()->getRepository('App:Direccion')->findAll();
foreach ($dirs as $dir){
$this->qi->saveFire($dir);
}
$res =$this->qi->sendMail("envio de prueba", 'ferney@iridian.co', "este mensaje es de prueba");
dd($res);
}
/**
* @Route("/test_mail", name="test_mail")
*/
public function testMail(Request $request)
{
$res =$this->qi->sendMail("envio de prueba", 'ferney@iridian.co', "este mensaje es de prueba");
dd($res);
}
/**
* @Route("/base", name="base")
*/
public function base(Request $request)
{
return $this->render('home/base.html.twig', [
]);
}
/**
* @Route("/validar/csrf_token", name="validar_csrf_token")
*/
public function validarCsrf(Request $request)
{
$submittedToken = $request->request->get('token');
$submittedTokenName = $request->request->get('name');
if ($this->isCsrfTokenValid($submittedTokenName, $submittedToken)) {
return new JsonResponse(["ok"=>true]);
}
return new JsonResponse(["ok"=>false]);
}
/**
* @Route("/", name="homepage")
*/
public function home(Request $request)
{
$imagenes = $this->getDoctrine()->getRepository('App:Image')->findAll();
foreach ($imagenes as $image){
$this->qi->saveFire($image);
}
$session = $request->getSession();
$mostre_en_home = $session->get('cierre_home','0') == '1';
$session->set('cierre_home','0');
$prediagnostico = $request->query->get('prediagnostico');
$id_paciente = $request->query->get('paciente');
$paciente = '';
$user = 0;
if($prediagnostico == '')
$prediagnostico = 1;
if($id_paciente)
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id_paciente);
if($paciente)
$user = $this->userManager->findUserBy(['email'=> $paciente->getEmail()]);
if($user)
$user = 1;
else
$user = 0;
$tipos_documentos = $this->getDoctrine()->getRepository(Tipodocumento::class)->createQueryBuilder('td')
->select('td.id', 'td.codigo', 'td.nombre')
->where('td.visible = true')
->orderBy('td.orden', 'ASC')
->getQuery()
->getArrayResult();
if ($this->isGranted('ROLE_PACIENTE')) {
return $this->redirectToRoute('home_pacientes');
}
if ($this->isGranted('ROLE_MEDICO')) {
return $this->redirectToRoute('home_medicos');
}
return $this->render('home/home_new.html.twig', [
'tipos_documentos' => $tipos_documentos,
'prediagnostico' => $prediagnostico,
'paciente' => $paciente,
'user' => $user,
]);
}
/**
* @Route("/get_diagnostico", name="get_diagnostico")
* @Method({"GET|POST"})
*/
public function getDiagnostico(Request $request)
{
$codigo_diagnostico = $request->query->get('codigo_diagnostico');
$diagnosticos = $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
->select('d','gf','f','gi','i','gp','p')
->leftJoin('d.grupoformula', 'gf')
->leftJoin('gf.formulas', 'f')
->leftJoin('d.grupoimagen', 'gi')
->leftJoin('gi.imagen', 'i')
->leftJoin('d.grupoparaclinico', 'gp')
->leftJoin('gp.paraclinico', 'p')
->where('d.codigo = :codigo')
->setParameter('codigo', $codigo_diagnostico)
->getQuery()
->getArrayResult();
$formulas = [];
$imagenes = [];
$paraclinicos = [];
if($diagnosticos){
foreach($diagnosticos as $key => $value){
if(isset($value['grupoformula']) && $value['grupoformula'] != ''){
foreach($value['grupoformula']['formulas'] as $key_formula => $value_formula){
array_push($formulas,$value_formula);
}
}
if(isset($value['grupoimagen']) && $value['grupoimagen'] != ''){
foreach($value['grupoimagen']['imagen'] as $key_imagen => $value_imagen){
array_push($imagenes,$value_imagen);
}
}
if(isset($value['grupoparaclinico']) && $value['grupoparaclinico'] != ''){
foreach($value['grupoparaclinico']['paraclinico'] as $key_paraclinico => $value_paraclinico){
array_push($paraclinicos,$value_paraclinico);
}
}
}
$mensaje=array('ok' => true, 'mensaje' => "Ha encontrado informacion", 'formula' => $formulas, 'paraclinico' => $paraclinicos, 'imagen' => $imagenes);
$json = json_encode($mensaje);
return new Response($json);
}
$mensaje=array('ok' => false, 'mensaje' => "Ha ocurrido un error");
$json = json_encode($mensaje);
return new Response($json);
}
/**
* @Route("/pdf", name="pdf")
*/
public function pdf(Request $request)
{
return $this->render('medicos/factura_paciente.html.twig', [
]);
}
/**
* @Route("/recover", name="recover")
*/
public function recover(Request $request)
{
return $this->render('basic/recuperar-pss.html.twig', [
]);
}
/**
* @Route("/historias", name="historias")
*/
public function historias(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_PACIENTE')) {
$repository = $this->getDoctrine()->getRepository(Paciente::class);
$paciente = $repository->findOneBy(['email' => $user->getEmail()]);
if (!$paciente) {
return $this->redirectToRoute('configuracion_paciente');
}
$atenciones = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('a.id', 'a.motivo', 'a.fecha', 'e.nombre as especialidad', 'm.fotourl', 'm.id as medicoid','u.nombre', 'u.apellido')
->leftJoin('a.medico', 'm')
->leftJoin('m.usuario', 'u')
->leftJoin('m.especialidad', 'e')
->where('a.paciente = :pacienteid')
->setParameter('pacienteid', $paciente->getId())
->orderBy('a.fecha', 'desc')
->getQuery()
->getArrayResult();
return $this->render('pacientes/historias.html.twig', [
'paciente' => $paciente,
'atenciones' => $atenciones
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/historia/{id}", name="historia")
*/
public function historia(Request $request, $id=null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_PACIENTE')) {
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$repository = $this->getDoctrine()->getRepository(Paciente::class);
$paciente = $repository->findOneBy(['email' => $user->getEmail()]);
$atencion = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->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')
->leftJoin('a.medico', 'm')
->leftJoin('m.usuario', 'u')
->leftJoin('m.especialidad', 'e')
->leftJoin('a.paciente', 'p')
->where('a.id = :atencionid')
->setParameter('atencionid', $id)
->getQuery()
->getSingleResult();
$metricas = $this->getDoctrine()->getRepository(MetricaAtencion::class)->createQueryBuilder('ma')
->select('ma')
->where('ma.atencion = :atencionid')
->setParameter('atencionid', $id)
->getQuery()
->getResult();
$adjuntos = $this->getDoctrine()->getRepository(Atencionadjunto::class)->createQueryBuilder('adj')
->select('adj.url')
->where('adj.atencion = :atencionid')
->setParameter('atencionid', $id)
->getQuery()
->getResult();
return $this->render('pacientes/historia.html.twig', [
'paciente' => $paciente,
'atencion' => $atencion,
'path_historias' => 'historias',
'metricas' => $metricas,
'adjuntos' => $adjuntos
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/resultado", name="resultado")
*/
public function resultados(Request $request)
{
return $this->render('pacientes/resultado.html.twig', [
]);
}
/**
* @Route("/perfil_medico_listo", name="perfil_medico_listo")
*/
public function perfilMedicoListo(Request $request)
{
return $this->render('medicos/perfil_medico_listo.html.twig', [
]);
}
/**
* @Route("/pacientesold", name="pacientesold")
*/
public function pacientesold(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
if (!$perfilmedico) {
return $this->redirectToRoute('configuracion_medico');
}
$diagnosticos = $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
->select('d' )
->orderBy('d.descripcion', 'ASC')
->getQuery()
->getArrayResult();
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
if ($request->query->has('diagnostico')) {
$diagnostico = $request->query->get('diagnostico', 1);
} else {
$diagnostico = null;
}
$queried = false;
if ($buscar) {
if ($buscar == 'ultimasatenciones') {
$pacientes = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('p.id', 'p.nombre', 'p.apellido','p.foto', 'p.fotourl', 'p.email','p.documento','max(a.fecha) as fecha' )
->leftJoin('a.paciente', 'p')
->groupBy('a.paciente')
->orderBy('p.nombre', 'asc')
->getQuery()
->getArrayResult();
$queried = true;
} else {
$query = $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
->select('p');
$query
->where('p.nombre like :buscar')
->setParameter('buscar', '%'.$buscar.'%');
$query->orderBy('p.nombre', 'asc');
$pacientes = $query->getQuery()->getResult();
$queried = true;
}
}
if ($diagnostico) {
$pacientes = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('p.id', 'p.nombre', 'p.apellido','p.foto', 'p.fotourl', 'p.email','p.documento', 'd.codigo')
->leftJoin('a.paciente', 'p')
->leftJoin('a.diagnosticos', 'd')
->where('d.codigo = :codigodiagnostico')
->setParameter('codigodiagnostico', $diagnostico)
->groupBy('a.paciente')
->orderBy('p.nombre', 'asc')
->getQuery()
->getArrayResult();
$queried = true;
}
if (!$queried) {
$query = $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
->select('p');
$query->orderBy('p.nombre', 'asc');
$pacientes = $query->getQuery()->getResult();
}
$atenciones = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('p.id','max(a.fecha) as fecha' )
->join('a.paciente', 'p')
->groupBy('a.paciente')
->getQuery()
->getArrayResult();
$paciente_ids = array_column($atenciones, 'id');
$fechas = array_column($atenciones, 'fecha');
$ultimas_atenciones = array_combine($paciente_ids, $fechas);
return $this->render('medicos/pacientes.html.twig', [
'pacientes' => $pacientes,
'perfilmedico' => $perfilmedico,
'paciente_ids' => $paciente_ids,
'ultimas_atenciones' => $ultimas_atenciones,
'diagnosticos' => $diagnosticos,
'codigodiagnostico' => $diagnostico
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/faq_medico", name="faq_medico")
*/
public function Faq(Request $request)
{
$faqs = $this->getDoctrine()->getRepository(Faq::class)->findBy(array("visible"=>true,"tipo"=>1),array("orden"=>"asc"));
$user = $this->getUser();
$user_medico=$user->getPerfilmedico();
return $this->render('medicos/faq.html.twig', [
"faqs"=> $faqs,
"perfilmedico"=> $user_medico
]);
}
/**
* @Route("/faq_paciente", name="faq_paciente")
*/
public function Faqpac(Request $request)
{
$faqs = $this->getDoctrine()->getRepository(Faq::class)->findBy(array("visible"=>true,"tipo"=>2),array("orden"=>"asc"));
$user = $this->getUser();
$repository = $this->getDoctrine()->getRepository(Paciente::class);
$paciente = $repository->findOneBy(['email' => $user->getEmail()]);
return $this->render('pacientes/faq.html.twig', [
"faqs"=> $faqs,
"paciente"=> $paciente
]);
}
/**
* @Route("/buscador", name="buscador")
*/
public function buscador(Request $request)
{
if (!$this->qi->getDireccion()) {
$tienda = null;
} else {
if (!$this->qi->getTienda()) {
$tienda = $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
if (!$tienda) {
$this->addFlash(
'warning',
'La direccion seleccionada no tiene cobertura en este momento'
);
return $this->redirectToRoute('misdirecciones');
}
} else {
$tienda = $this->qi->getTienda();
}
}
$query = $request->query->get('query', "");
$productos = $this->getDoctrine()->getRepository(Producto::class)->createQueryBuilder('p')
->select('p')
->leftJoin('p.categorias', 'c')
->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')
->andWhere('c.visible = 1')
->setParameter('query', '%' . $query . '%');
if ($tienda) {
$productos->leftJoin('p.inventarios', 'i')
->leftJoin('i.tienda', 't')
->andWhere('i.cantidad >= 0 and t.id = :tienda')
->setParameter('tienda', $tienda->getId());
}
$productos= $productos->groupBy('p.plu')->orderBy('p.orden','asc')
->getQuery()
->getArrayResult();
return $this->render('basic/buscador.html.twig', [
'productos' => $productos,
'query'=>$query
]);
}
/**
* @Route("/buscadorapi", name="buscadorapi")
*/
public function buscadorapi(Request $request)
{
$msg = '';
$status = 0;
$resp = [];
if (!$this->qi->getDireccion()) {
$tienda = null;
} else {
if (!$this->qi->getTienda()) {
$tienda = $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
if (!$tienda) {
$resp = [];
}
} else {
$tienda = $this->qi->getTienda();
}
}
$query = $request->request->get('search', "");
$productos = $this->getDoctrine()->getRepository(Producto::class)->createQueryBuilder('p')
->select('p.plu value', 'p.nombre label')
->leftJoin('p.categorias', 'c')
->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')
->andWhere('c.visible = 1')
->setParameter('query', '%' . $query . '%');
if ($tienda) {
$productos->leftJoin('p.inventarios', 'i')
->leftJoin('i.tienda', 't')
->andWhere('i.cantidad > 0 and t.id = :tienda')
->setParameter('tienda', $tienda->getId());
}
$productos= $productos->groupBy('p.plu')->orderBy('p.orden','asc')
->getQuery()
->getArrayResult();
return new Response(json_encode($productos));
}
/**
* @Route("/buscadorpacientes", name="buscadorpacientes")
*/
public function buscadorpacientes(Request $request)
{
$query = $request->request->get('search', "");
$pacientes = $this->getDoctrine()->getRepository(Paciente::class)->createQueryBuilder('p')
->select('p.documento as value', 'CONCAT(p.documento, \' \', p.nombre, \' \', p.apellido) as label', 'p.id as id')
->where('( p.documento like :query or p.nombre like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($pacientes));
}
/**
* @Route("/buscadorserviciocatalogo", name="buscadorserviciocatalogo")
*/
public function buscadorserviciocatalogo(Request $request)
{
$query = $request->request->get('search', "");
$servicio = $this->getDoctrine()->getRepository(ServicioCatalogo::class)->createQueryBuilder('p')
->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')
->where('( p.codigo_rips like :query or p.nombre like :query) ')
->leftJoin('p.concepto','c')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($servicio));
}
/**
* @Route("/buscadorantecedentes", name="buscadorantecedentes")
*/
public function buscadorantecedentes(Request $request)
{
$query = $request->request->get('search', "");
$antecedentes_pacientes = $this->getDoctrine()->getRepository(AntecedentePersonal::class)->createQueryBuilder('p')
->select('p.descripcion as value', 'CONCAT(p.codigo, \' \', p.descripcion) as label', 'p.codigo as id')
->where('( p.descripcion like :query or p.codigo like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($antecedentes_pacientes));
}
/**
* @Route("/buscadorenfermedadesfamiliares", name="buscadorenfermedadesfamiliares")
*/
public function buscadorenfermedadesfamiliares(Request $request)
{
$query = $request->request->get('search', "");
$enfermedadesfamiliares = $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('p')
->select('p.descripcion as value', 'CONCAT(p.codigo, \' \', p.descripcion) as label', 'p.codigo as id')
->where('( p.descripcion like :query or p.codigo like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($enfermedadesfamiliares));
}
/**
* @Route("/buscadoralergias", name="buscadoralergias")
*/
public function buscadoralergias(Request $request)
{
$query = $request->request->get('search', "");
$alergias = $this->getDoctrine()->getRepository(Alergia::class)->createQueryBuilder('p')
->select('p.nombre as value', 'CONCAT(p.codigo, \' \', p.nombre) as label', 'p.codigo as id')
->where('( p.nombre like :query or p.codigo like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($alergias));
}
/**
* @Route("/buscadordiagnosticos", name="buscadordiagnosticos")
*/
public function buscadordiagnosticos(Request $request)
{
$query = $request->request->get('search', "");
$diagnosticos = $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('p')
->select('p.descripcion as value', 'CONCAT(p.codigo, \' \', p.descripcion) as label', 'p.codigo as id')
->where('( p.descripcion like :query or p.codigo like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($diagnosticos));
}
/**
* @Route("/buscadorparaclinicos", name="buscadorparaclinicos")
*/
public function buscadorparaclinicos(Request $request)
{
$query = $request->request->get('search', "");
$paraclinicos = $this->getDoctrine()->getRepository(Paraclinico::class)->createQueryBuilder('p')
->select('p.nombre as value', 'CONCAT(p.id, \' \', p.nombre) as label', 'p.id as id')
->where('( p.nombre like :query or p.id like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($paraclinicos));
}
/**
* @Route("/buscadorespecialidades", name="buscadorespecialidades")
*/
public function buscadorespecialidades(Request $request)
{
$query = $request->request->get('search', "");
$especialidades = $this->getDoctrine()->getRepository(Especialidad::class)->createQueryBuilder('p')
->select('p.nombre as value', 'p.nombre as label', 'p.id as id')
->where('( p.nombre like :query or p.id like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($especialidades));
}
/**
* @Route("/buscadorimagenes", name="buscadorimagenes")
*/
public function buscadorimagenes(Request $request)
{
$query = $request->request->get('search', "");
$imagenes = $this->getDoctrine()->getRepository(Imagen::class)->createQueryBuilder('p')
->select('p.nombre as value', 'CONCAT(p.id, \' \', p.nombre) as label', 'p.id as id')
->where('( p.nombre like :query or p.id like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($imagenes));
}
/**
* @Route("/buscadormedicamentos", name="buscadormedicamentos")
*/
public function buscadormedicamentos(Request $request)
{
$query = $request->request->get('search', "");
$medicamentos = $this->getDoctrine()->getRepository(Medicamento::class)->createQueryBuilder('p')
->select('p.nombre as value', 'p.nombre as label', 'p.id as id')
->where('( p.nombre like :query or p.id like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($medicamentos));
}
/**
* @Route("/buscadorprocedimientos", name="buscadorprocedimientos")
*/
public function buscadorprocedimientos(Request $request)
{
$query = $request->request->get('search', "");
$imagenes = $this->getDoctrine()->getRepository(Procedimiento::class)->createQueryBuilder('p')
->select('p.nombre as value', 'CONCAT(p.codigo, \' \', p.nombre) as label', 'p.id as id')
->where('( p.nombre like :query or p.codigo like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($imagenes));
}
/**
* @Route("/buscadorterapias", name="buscadorterapias")
*/
public function buscadorterapias(Request $request)
{
$query = $request->request->get('search', "");
$imagenes = $this->getDoctrine()->getRepository(Terapia::class)->createQueryBuilder('p')
->select('p.descripcion as value', 'CONCAT(p.codigo, \' \', p.descripcion) as label', 'p.id as id')
->where('( p.descripcion like :query or p.codigo like :query) ')
->setParameter('query', '%' . $query . '%')
->setMaxResults(15)
->getQuery()
->getArrayResult();
return new Response(json_encode($imagenes));
}
/**
* @Route("/misdirecciones", name="misdirecciones")
*/
public function misdirecciones(Request $request)
{
$user = $this->getUser();
if(!$user){
return $this->redirectToRoute('ingresar');
}
$tiendas = $this->getDoctrine()->getRepository(Tienda::class)->findBy(array('visible'=>true),array('orden'=>'asc'));
$direcciones = $this->getDoctrine()->getRepository(Direccion::class)->findBy(array('usuario'=>$user,'visible'=>true));
return $this->render('basic/addDir.html.twig', [
'tiendas' => $tiendas,
'direcciones' => $direcciones
]);
}
/**
* @Route("/contacto", name="contacto")
*/
public function contacto(Request $request)
{
$contacto= new Contacto();
$form = $this->createForm(ContactoType::class, $contacto);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($contacto);
$entityManager->flush();
$asunto = $this->qi->getSetting('asunto_mail_contacto');
$html = $this->renderView('contact/contact_mail.html.twig', array(
'nombre'=>$contacto->getNombre(),
'email'=>$contacto->getEmail(),
'telefono'=>$contacto->getTelefono(),
'mensaje'=>$contacto->getMensaje(),
));
$this->qi->sendMail($asunto,$contacto->getEmail(),$html);
$to = $this->qi->getSetting('mail_recepcion_pedidos');
$this->qi->sendMail($asunto,$to,$html);
return $this->render('basic/contacto.html.twig', [
'gracias'=>true
]);
}
return $this->render('basic/contacto.html.twig', [
'gracias'=>false,
'form'=> $form->createView()
]);
}
/**
* @Route("/perfil", name="perfil")
* @Route("/eliminar-direccion/{id}", name="perfil_eliminar_direccion")
*/
public function perfil(Request $request, $id = null)
{
$user = $this->getUser();
$borre_dir = false;
if($id){
$direccion = $this->getDoctrine()->getRepository(Direccion::class)->find($id);
$direccion->setVisible(false);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($direccion);
$entityManager->flush();
$borre_dir = true;
}
$direcciones = $this->getDoctrine()->getRepository(Direccion::class)->createQueryBuilder('d')
->select('d')
->leftJoin('d.usuario','u')
->where('u.id = '.$user->getId())
->andWhere('d.visible is null or d.visible = 1')
->getQuery()
->getResult();
$form = $this->createForm(PerfilType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->render('user/perfil.html.twig', [
'gracias'=>true,
'borre_dir'=>$borre_dir,
'direcciones' => $direcciones,
'form'=> $form->createView()
]);
}
return $this->render('user/perfil.html.twig', [
'gracias'=>false,
'borre_dir'=>$borre_dir,
'direcciones' => $direcciones,
'form'=> $form->createView()
]);
}
/**
* @Route("/recomendaciones-para-pacientes", name="recomendaciones")
*/
public function recomendaciones(Request $request)
{
return $this->render('recomendaciones/recomendaciones.html.twig', [
'gracias'=>false,
'form'=> null
]);
}
/**
* @Route("/tips", name="tips")
*/
public function tips(Request $request)
{
$tips = $this->getDoctrine()->getRepository(TipSalud::class)->findBy(array("visible" => true), array('orden'=>'asc'));
return $this->render('tips/index.html.twig', [
"tips"=>$tips,
'gracias'=>false,
'form'=> null
]);
}
/**
* @Route("/tip/{id}", name="tip")
*/
public function tip(Request $request, $id)
{
$tip = $this->getDoctrine()->getRepository(TipSalud::class)->find($id);
return $this->render('tips/tip.html.twig', [
"tip"=>$tip,
'gracias'=>false,
'form'=> null
]);
}
/**
* @Route("/covid-19", name="covid")
*/
public function covid(Request $request)
{
$articulos = $this->getDoctrine()->getRepository('App:Covid')->findBy(array('visible'=>true),array('orden'=>'asc'));
return $this->render('recomendaciones/recomendaciones.html.twig', [
'gracias'=>false,
'form'=> null,
'articulos'=>$articulos
]);
}
/**
* @Route("/servicios-de-enfermeria", name="enfermeria")
*/
public function enfermeria(Request $request)
{
$first = 1;
$size = 100;
$productos = $this->getDoctrine()->getRepository('App:Inventario')->createQueryBuilder('i')
->select('i.precio','p.nombre','p.imagen','p.plu')
->addSelect(
'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico')
->leftJoin('i.producto','p')
->leftJoin('p.categorias','c')
->where('i.cantidad > 0')
->andWhere('p.visible = 1')
->andWhere("p.imagen not like '%icon%'")
->setFirstResult($first)
->setMaxResults($size)
->getQuery()
->getArrayResult();
shuffle($productos);
$productos = array_slice($productos,0,4);
return $this->render('enfermeria/enfermeria.html.twig', [
'gracias'=>false,
'form'=> null,
'productos'=>$productos
]);
}
/**
* @Route("/pedir", name="pedir")
*/
public function pedir(Request $request)
{
try {
$user = $this->getUser();
$direccion = $this->getDoctrine()->getRepository(Direccion::class)->find($this->qi->getDireccion()->getId());
$metodo_sel = $request->request->get('metodo');
$metodo = $this->getDoctrine()->getRepository(MetodoPago::class)->findOneBy(array('id' => $metodo_sel));
$tienda = $this->getDoctrine()->getRepository(Tienda::class)->find($this->qi->getTienda()->getId());
$costo_domicilio = $tienda->getCostoDomicilio();
$comentarios = $request->request->get('comentarios');
$medico = $request->request->get('medico');
$lifemiles = $request->request->get('lifemiles');
$peticion= $this->qi->getCarrito();
$paga_con = 0;
$canal = "web";
$carrito=[];
if($metodo_sel == "2"){
return $this->redirectToRoute('pagos_payu',array(
"comentarios"=>$comentarios,
"medico" => $medico,
"lifemiles" => $lifemiles
));
}
foreach ($this->qi->getCarrito() as $item){
$elem = array("product_id"=>$item["producto"]->getPlu(),"count"=>$item["cantidad"]);
array_push($carrito,$elem);
}
$res = $this->qi->crearPedido($metodo,$canal,$comentarios,$this->getUser());
/* @var $compra Compra */
$compra =$res["compra"];
$resultado = array("ok" => true, 'obj' => array("compra"=>array("id"=>$compra->getId())));
if($this->qi->getSetting('enviar_correo') == "1"){
$asunto = $this->qi->getTexto('asunto_compra_cliente');
$this->qi->sendMail($asunto, $this->getUser()->getEmail(), $compra->getBody());
$asunto = $this->qi->getTexto('asunto_compra_tienda');
if($compra->getTienda()) {
$this->qi->sendMail($asunto, $compra->getTienda()->getEmail(), $compra->getBody());
}else{
$this->qi->sendMail($asunto, $this->qi->getSetting('mail_recepcion_pedidos'), $compra->getBody());
}
}
}catch (\Exception $e){
$resultado = array("ok" => false, 'obj' => $e->getCode()." - ".$e->getMessage());
}
if($resultado["ok"]) {
return $this->redirectToRoute('confirmacion', $resultado);
}else{
return $this->redirectToRoute('carrito', $resultado);
}
}
/**
* @Route("/set-direccion/{id}", name="set-direccion")
*/
public function setDireccion(Request $request,$id)
{
$user = $this->getUser();
$dir = $this->getDoctrine()->getRepository(Direccion::class)->find($id);
$this->qi->setDireccion($dir);
$tienda = $this->qi->getTiendaFromCoordinates($dir);
if(!$tienda){
$this->addFlash(
'warning',
'La direccion seleccionada no tiene cobertura en este momento'
);
return $this->redirectToRoute('misdirecciones');
}
$this->qi->setTienda($tienda);
if($this->qi->carritoLength() > 0)
return $this->redirectToRoute('carrito');
return $this->redirectToRoute('homepage');
}
/**
* @Route("/add-direccion", name="add-direccion")
*/
public function addDireccion(Request $request)
{
$user = $this->getUser();
if($user) {
$dir = new Direccion();
$dirarr = $request->request->get('direccion');
$tipo = $request->request->get('direccion')['tipocalle'];
$base = $request->request->get('direccion')['base'];
$numero = $request->request->get('direccion')['numero'];
$detalle = $request->request->get('direccion')['detalle'];
$adicional = $request->request->get('direccion')['adicional'];
$ciudad = $request->request->get('direccion')['ciudad'];
$dirarr['direccion'] = $tipo . " " . $base . " # " . $numero . " - " . $detalle . " " . $adicional;
$ciudad = $this->getDoctrine()->getRepository(Ciudad::class)->find($ciudad);
$request->request->set('direccion', $dirarr);
$dir->setUsuario($user);
$dir->setDireccion($dirarr['direccion']);
$dir->setLng($dirarr['lng']);
$dir->setLat($dirarr['lat']);
$dir->setNombre($dirarr['nombre']);
$dir->setUid($user->getUid());
$dir->setCiudad($ciudad);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($dir);
$entityManager->flush();
$this->qi->setDireccion($dir);
return $this->redirectToRoute('homepage');
}else{
return $this->redirectToRoute('login');
}
}
/**
* @Route("/tiendas", name="tiendas")
*/
public function tiendas(Request $request)
{
/*if( $this->qi->getSetting('muestra_tiendas') == "0"){
return $this->redirectToRoute('homepage');
}
*/
$user = $this->getUser();
$tiendas = $this->getDoctrine()->getRepository('App:Tienda')->findBy(array('visible'=>true));
if(count($tiendas)== 1){
$this->qi->setTienda($tiendas[0]);
return $this->redirectToRoute('categorias', array('id' => $tiendas[0]->getId()));
}
$enZona = [];
$dir= $this->qi->getDireccion();
if($this->qi->getSetting('tienda_redirige') == 1){
if(!$dir){
return $this->redirectToRoute('misdirecciones');
}
}
foreach ($tiendas as $t){
if($dir){
if($this->arePointsNear($t,$dir,$t->getRadioCobertura() ) || $this->qi->getSetting('showAllTiendas') ){
array_push($enZona,$t);
}
}else{
array_push($enZona,$t);
}
}
return $this->render('basic/tiendas.html.twig', [
'tiendas' => $enZona
]);
}
/**
* @Route("/productos", name="productos")
* @Route("/categoria/{categoria_id}", name="categorias_notienda")
* @Route("/tienda/{id}", name="categorias")
* @Route("/tienda/{id}/categoria/{categoria_id}", name="categorias_tienda")
*/
public function categoriasTienda(Request $request,$id = null, $categoria_id = null)
{
$paginator = [];
$size = 50;
$page = $request->query->get('page',1);
$query = $request->query->get('query',"");
$first = ($page - 1)*$size;
$user = $this->getUser();
$dir= $this->qi->getDireccion();
if($id != null){
if(!$this->qi->getDireccion()){
return $this->redirectToRoute('misdirecciones');
}else{
$tienda = $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
if(!$tienda){
$this->addFlash(
'warning',
'La direccion seleccionada no tiene cobertura en este momento'
);
return $this->redirectToRoute('misdirecciones');
}
}
$this->qi->setTienda($tienda);
}else{
$tienda = $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
}
$productos = $this->getDoctrine()->getRepository('App:Producto')->createQueryBuilder('p');
$productos->select('p.precio','p.nombre','p.imagen','p.plu','p.esRx','p.PrecioSinDescuento','i.cantidad')
->addSelect(
'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico');
$productos
->leftJoin('p.inventarios','i')
->leftJoin('p.categorias','c')
->leftJoin('i.tienda','t')
->orderBy('p.orden','asc')
->where('i.cantidad >= 0');
if($tienda){
$productos->andWhere('t.id = :tienda_id')
->setParameter('tienda_id',$tienda->getId());
}
$productos
->groupBy('p.plu')
->setFirstResult($first)
->setMaxResults($size);
$cant = $this->getDoctrine()->getRepository('App:Producto')->createQueryBuilder('p')
->select('distinct(p.plu) ')
->leftJoin('p.inventarios','i')
->leftJoin('p.categorias','c')
->where('i.cantidad >= 0');
if($tienda){
$productos->andWhere('i.tienda = :tienda')
->setParameter('tienda',$tienda);
$cant->andWhere('i.tienda = :tienda')
->setParameter('tienda',$tienda);
}
if($categoria_id ){
$productos->andWhere('c.id = '.$categoria_id);
$cant->andWhere('c.id = '.$categoria_id);
}
if($query != ""){
$parts = explode(" ",$query);
$cad = [];
foreach ($parts as $parte){
$cad[] = " p.nombre like '%$parte%'";
}
$q_search = implode($cad," or ");
if(count($cad) > 0){
$productos->andWhere($q_search);
$cant->andWhere($q_search);
}
}
$productos = $productos->getQuery()->getArrayResult();
$cant=$cant->getQuery()->getArrayResult();
if($id)
$categorias = $this->qi->getCategoriasVeci();
else
$categorias = $this->qi->getCategoriasConProductos();
$cant= count($cant);
$paginator['hasPreviousPage'] = $page > 1;
$paginator['hasNextPage'] = $page < $cant/$size;
$paginator['cant'] = $cant;
$paginator['results'] = $cant;
$paginator['nextPage'] = $page + 1;
$paginator['previousPage'] = $page - 1;
$paginator['pages'] = ceil($cant/$size) ;
$paginator['page'] = $page;
$destacadosCat = $this->getDoctrine()->getRepository('App:Producto')->createQueryBuilder('p');
$destacadosCat->select('p.precio','p.nombre','p.imagen','p.plu','p.esRx','p.PrecioSinDescuento','i.cantidad')
->addSelect(
'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico');
$destacadosCat
->leftJoin('p.inventarios','i')
->leftJoin('p.categorias','c')
->leftJoin('i.tienda','t')
->orderBy('p.orden','asc')
->where('i.cantidad >= 0')
->andWhere('p.destacadoCategoria = 1');
if($tienda){
$destacadosCat->andWhere('t.id = :tienda_id')
->setParameter('tienda_id',$tienda->getId());
}
if($categoria_id ){
$destacadosCat->andWhere('c.id = '.$categoria_id);
}
$destacadosCat = $destacadosCat->getQuery()->getArrayResult();
$destCat = [];
foreach ($destacadosCat as $producto){
if(!isset($destCat[$producto["plu"]])){
$destCat[$producto["plu"]] = $producto;
}
}
return $this->render('basic/categoriasTienda.html.twig', [
'query'=>$query,
'categorias'=> $categorias,
'categoria'=> null,
'categoria_id'=> null,
'productos' => $productos,
'cant' => $cant,
'tienda' => $tienda,
'paginator' => $paginator,
'destacados' => $destCat
]);
}
/**
* @Route("/tienda_heel", name="tienda")
*/
public function tienda(Request $request)
{
if(!$this->qi->getDireccion()){
$tienda = null;
}else{
$tienda = $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
$this->qi->setTienda($tienda);
if(!$tienda){
$this->addFlash(
'warning',
'La direccion seleccionada no tiene cobertura en este momento'
);
return $this->redirectToRoute('misdirecciones');
}
}
return $this->render('basic/categoriasTienda.html.twig', [
'query'=>'',
'categorias'=> null,
'categoria'=> null,
'categoria_id'=> null,
'productos' => null,
'cant' => 0,
'tienda' => $tienda,
'paginator' => null
]);
}
function existeCatProds($productos,$c){
$encontrado = false;
for ($i = 0; $i<count($productos);$i++){
for($k = 0; $k < count($productos[$i]["producto"]["categorias"]);$k++){
$encontrado = $c->getId() == $productos[$i]["producto"]["categorias"][$k]['id'];
if($encontrado){
$k=count($productos[$i]["producto"]["categorias"])+1;
$i=count($productos)+1;
break;
}
}
if($encontrado){
break;
}
}
return $encontrado;
}
function arePointsNear($checkPoint, $centerPoint, $km) {
$ky = 40000 / 360;
$kx = cos(pi() * $centerPoint->getLat() / 180.0) * $ky;
$dx = abs($centerPoint->getLng() - $checkPoint->getLng()) * $kx;
$dy = abs($centerPoint->getLat() - $checkPoint->getLat()) * $ky;
return sqrt($dx * $dx + $dy * $dy) <= $km;
}
/**
* @Route("/categoria", name="categoria")
* @Route("/categoria/{id}/{tiendaId}", name="categoria_id")
*/
public function categoria(Request $request, $id = null,$tiendaId = null)
{
if(!$id) {
$tienda = null;
$categoria = $this->getDoctrine()->getRepository('App:Categoria')->findOneBy(array('visible' => true));
}
else {
$tienda = $this->getDoctrine()->getRepository('App:Tienda')->find($tiendaId);
$categoria = $this->getDoctrine()->getRepository('App:Categoria')->find($id);
}
$categorias = $this->qi->getCategoriasVeci();
$productos = $this->getDoctrine()->getRepository('App:Inventario')->createQueryBuilder('i')
->select('i.precio','p.nombre','p.imagen','p.plu')
->addSelect(
'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico')
->leftJoin('i.producto','p')
->leftJoin('p.categorias','c')
->where('i.tienda = :tienda')
->andWhere('i.cantidad > 0')
->andWhere('c.id = :cat')
->setParameter('tienda',$tienda)
->setParameter('cat',$categoria)
->getQuery()
->getArrayResult();
return $this->render('basic/categoriasTienda.html.twig', [
'categorias'=> $categorias,
'categoria'=> $categoria,
'categoria_id'=> $categoria->getId(),
'productos' => $productos,
'cant' => count($productos),
'tienda' => $tienda
]);
}
/**
* @Route("/producto/{id}/{tiendaId}", name="producto_old")
*/
public function producto_old(Request $request, $id,$tiendaId)
{
$tienda = $this->getDoctrine()->getRepository('App:Tienda')->find($tiendaId);
$productos = $this->getDoctrine()->getManager()->createQueryBuilder()
->from('App:Inventario','i')
->select('i')
->leftJoin('i.producto','p')
->addSelect('p')
->leftJoin('p.categorias','c')
->addSelect('c')
->where('i.tienda = :tienda')
->addSelect(
'CASE WHEN p.nombreComercial is not null and p.nombreComercial <> \'\' THEN p.nombreComercial ELSE p.nombre END AS nombrePublico')
->andWhere('i.cantidad > 0')
->andWhere('p.plu = :id')
->setParameter('tienda',$tienda)
->setParameter('id',$id)
->getQuery()
->getArrayResult();
return $this->render('basic/producto.html.twig', [
'producto' => $productos[0]
]);
}
/**
* @Route("/producto/{id}", name="producto")
*/
public function producto(Request $request, $id)
{
$tienda = $this->qi->getTienda();
if(!$tienda)
return $this->redirectToRoute('misdirecciones');
$producto = $this->getDoctrine()->getRepository('App:Producto')->find($id);
$inv = $this->getDoctrine()->getRepository('App:Inventario')->findOneBy(array('producto'=>$producto,'tienda'=>$tienda));
$cant = 0;
if($inv)
$cant = $inv->getCantidad();
return $this->render('basic/producto.html.twig', [
'producto' => $producto,
'cantidad' => $cant
]);
}
/**
* @Route("/add-to-carrito", name="add-to-carrito")
*/
public function addtocarrito(Request $request)
{
$body= json_decode($request->getContent());
$mensaje=array('ok' => false, 'mensaje' => "Ha ocurrido un error");
if($this->qi->addCantToCar($body->producto,$body->cantidad,$body->wish)) {
$mensaje = array('ok' => true, 'mensaje' => "Agregado al carrito ",'carrito'=>count($this->qi->getCarrito()));
if ($body->wish) {
$mensaje = array('ok' => true, 'mensaje' => "Agregado al wish list");
}
}
$response = new Response();
$response->setContent(json_encode($mensaje));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/eliminar-carro/{id}", name="eliminar-carro")
*/
public function eliminarDeCarro(Request $request,$id)
{
$this->qi->deleteItemFromCar($id,"");
return $this->redirectToRoute('carrito');
}
/**
* @Route("/cambiar-cantidad/{id}/{cantidad}", name="cambiar-cantidad")
*/
public function cambiarCantidad(Request $request,$id,$cantidad)
{
if($cantidad > 0) {
$this->qi->addItemToCar($id, $cantidad, "");
}
else{
$this->qi->deleteItemFromCar($id, "");
}
return $this->redirectToRoute('carrito');
}
/**
* @Route("/carrito", name="carrito")
*/
public function carrito(Request $request)
{
$session = $request->getSession();
$mostre_en_carrito = $session->get('cierre_carrito','0') == '1';
$session->set('cierre_carrito','1');
$ok = true;
if($request->get('ok') != null ){
$ok = $request->get('ok');
}
if(!$this->qi->getDireccion()){
$this->addFlash(
'warning',
'Debes seleccionar una dirección antes de continuar'
);
return $this->redirectToRoute('misdirecciones');
}
/* @var $user Usuario */
$user = $this->getUser();
if(!$user->getNombre() || !$user->getApellido() || !$user->getCelular() || !$user->getDocumento())
{
$this->addFlash(
'warning',
'Debes actualizar tus datos para continuar con la compra.'
);
return $this->redirectToRoute('perfil');
}
if(!$this->qi->getTienda()){
$tienda = $this->qi->getTiendaFromCoordinates($this->qi->getDireccion());
$this->qi->setTienda($tienda);
if(!$tienda){
$this->addFlash(
'warning',
'La dirección seleccionada no tiene cobertura en este momento'
);
return $this->redirectToRoute('misdirecciones');
}
}
$noDisp = $this->qi->validarCarrito();
if(count($noDisp) ){
$this->addFlash(
'warning',
'Algunos productos de tu carrito han sido eliminados ya que en la tienda actual no hay disponibilidad'
);
}
$productos = $this->getDoctrine()->getRepository('App:Producto')->
findBy(array('visible'=>true),array('orden'=>'desc'),7, rand(1,1500));
return $this->render('basic/carrito.html.twig', [
'productos' => $productos,
'ok'=>$ok,
'mostre_en_carrito' => $mostre_en_carrito
]);
}
/**
* @Route("/resumen_pedido/{id}", name="resumen_pedido")
*/
public function resumenPedido(Request $request,$id)
{
/* @var Compra $compra*/
$compra = $this->getDoctrine()->getRepository(Compra::class)->find($id);
$productos = $compra->getProductosObj();
return $this->render('basic/resumen.html.twig', [
'productos' => $productos,
'compra' => $compra
]);
}
/**
* @Route("/pedido_respuesta", name="pedido_respuesta")
*/
public function pedido_respuesta(Request $request)
{
$ok = true;
if($request->get('ok') != null ){
$ok = $request->get('ok');
}
if(!$this->qi->getDireccion()){
return $this->redirectToRoute('misdirecciones');
}
if(!$this->qi->getTienda()){
return $this->redirectToRoute('tienda');
}
return $this->render('basic/pedido_respuesta.html.twig', [
'ok'=>$ok
]);
}
/**
* @Route("/mapa_tiendas", name="mapaTiendas")
*/
public function mapaTiendas(Request $request)
{
$tiendas = $this->getDoctrine()->getRepository(Tienda::class)->findBy(array('visible'=>true));
return $this->render('basic/mapaTiendas.html.twig', [
'tiendas' => $tiendas
]);
}
/**
* @Route("/direccion", name="direccion")
*/
public function direccion(Request $request)
{
$productos = $this->getDoctrine()->getRepository('App:Producto')->
findBy(array('visible'=>true),array('orden'=>'desc'),7, rand(1,1500));
return $this->render('basic/direccion.html.twig', [
'productos' => $productos
]);
}
/**
* @Route("/confirmacion", name="confirmacion")
*/
public function confirmation(Request $request)
{
$respuesta = $request->get('obj');
$compra = $this->getDoctrine()->getRepository(Compra::class)->find($respuesta["compra"]["id"]);
$productos = $this->qi->getCarrito();
$this->qi->clearCar("");
return $this->render('basic/pedido_respuesta.html.twig', [
'productos' => $productos,
'compra' => $compra,
'ok' => $request->get("ok")
]);
}
/**
* @Route("/ingresar", name="ingresar")
*/
public function ingresar(Request $request)
{
$errores = [];
$last_username = '';
if($request->isMethod('POST')){
$datos = $request->request->all();
$email = strtolower($datos['_username'] );
$last_username = $email;
$pass = strtolower($datos['_password'] );
try {
$serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/../../miveci-firebase-adminsdk-pteyb-91be53dc7d.json');
$firebase = (new Factory())
->withServiceAccount($serviceAccount)
->create();
$auth = $firebase->getAuth();
$fbuser = $auth->getUserByEmail($email);
$user = $this->userManager->findUserBy(array('email'=>$email));
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
$event = new InteractiveLoginEvent($request, $token);
$this->eventDispatcher->dispatch("security.interactive_login", $event);
if ($this->get('security.context')->isGranted('ROLE_POS_ADMIN')) {
return $this->redirectToRoute('easyadmin');
}else{
return $this->redirectToRoute('homepage');
}
} catch (Firebase\Exception\AuthException $e) {
array_push($errores, $e->getMessage());
} catch (Firebase\Exception\FirebaseException $e) {
array_push($errores, $e->getMessage());
}
}
return $this->render('user/login.html.twig', [
'errores' => $errores,
'last_username' => $last_username
]);
}
/**
* @Route("/olvide", name="olvide")
*/
public function olvide(Request $request)
{
return $this->render('user/olvide.html.twig', [
]);
}
/**
* @Route("/crear-cuenta", name="crear_cuenta")
*/
public function crearCuenta(Request $request)
{
$errores = [];
if($request->isMethod('POST')){
$datos = $request->request->all();
$properties = [
'displayName' => $datos['nombre'] . " " . $datos['apellido'] ,
'email' => strtolower($datos['email'] ),
'emailverified' => true
];
try {
$serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/../../miveci-firebase-adminsdk-pteyb-91be53dc7d.json');
$firebase = (new Factory())
->withServiceAccount($serviceAccount)
->create();
$auth = $firebase->getAuth();
$fbuser = $auth->createUserWithEmailAndPassword($datos['email'], $datos['apellido']);
$auth->setCustomUserAttributes($fbuser->uid, $properties);
$user = new Usuario();
$body = $fbuser;
$user->setUid($body->uid);
$user->setEmail($body->email);
$user->setUsername($body->email);
$user->setUsernameCanonical($body->email);
$user->setProviderData(json_encode($body->providerData));
$user->setEnabled(true);
$user->setPassword($datos['password_first']);
$user->setCreatedAt(new \DateTime());
$user->setNombre($datos['nombre']);
$user->setDocumento($datos['documento']);
$user->setApellido($datos['apellido']);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$this->qi->saveFire($user);
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
$event = new InteractiveLoginEvent($request, $token);
$this->eventDispatcher->dispatch("security.interactive_login", $event);
return $this->redirectToRoute('homepage');
} catch (Firebase\Exception\AuthException $e) {
array_push($errores, $e->getMessage());
} catch (Firebase\Exception\FirebaseException $e) {
array_push($errores, $e->getMessage());
}
}
return $this->render('user/registro.html.twig', [
'errores' => $errores
]);
}
/**
* @Route("/load", name="load")
*/
public function load(Request $request)
{
/*
$prods = $this->getDoctrine()->getRepository(Inventario::class)->findAll();
foreach ($prods as $inv){
$this->qi->saveFire($inv);
}
*/
dd(12);
//return $this->redirectToRoute('easyadmin');
//$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
}
/**
* @Route("/privacidad", name="privacidad")
*/
public function privacidad(Request $request)
{
return $this->render('basic/privacidad.html.twig', [
'llave'=>'privacidad',
'titulo'=> 'PolÃticas de privacidad'
]);
}
/**
* @Route("/terminos", name="terminos")
*/
public function terminos(Request $request)
{
return $this->render('basic/privacidad.html.twig', [
'llave'=>'terminos',
'titulo'=> 'Términos y condiciones'
]);
}
/**
* @Route("/politica", name="politica")
*/
public function politica(Request $request)
{
return $this->render('basic/privacidad.html.twig', [
'llave'=>'politica',
'titulo'=> 'PolÃtica de tratamientos de datos'
]);
}
/**
* @Route("/ajax-cart", name="politica")
*/
public function ajaxCart(Request $request)
{
return $this->render('cart/ajaxcart.html.twig', [
]);
}
/**
* @Method({"POST"})
* @Route("/mostrarprediagnostico", name="mostrarprediagnostico")
*/
public function mostrarprediagnostico(Request $request)
{
return $this->render('mailings/prediagnostico.html.twig', [
]);
}
/**
* @Method({"POST"})
* @Route("/pruebamail", name="pruebamail")
*/
public function pruebaMail(Request $request)
{
return $this->render('mailings/registro_med_codverif.html.twig', [
]);
}
/**
* @Method({"POST"})
* @Route("/api/auth/register", name="crear_actualizar_usuario")
*/
public function crearActualizarUsuario(Request $request)
{
$body = json_decode($request->getContent());
$mensaje = array("ok" => false, "message" => "error");
$um = $this->userManager;
$em = $this->getDoctrine()->getManager();
$url_avatar_default = $this->qi->getSetting('avatar-default');
/* @var $user Usuario */
$user = $um->findUserBy(array('uid'=>$body->uid));
if(!$user){
$user = $um->findUserBy(array('email'=>$body->email));
}
if($body->seccion != 'iniciarsesion'){
$clavesecret='6LccqWQiAAAAAHp9HUVWc4QZP4TpDscHlBEtDHqd';
$token = $body->captcha;
$verificado = $this->qi->verificarToken($token, $clavesecret);
if (!$verificado) {
$mensaje["ok"]= false;
$mensaje["message"] = "Error debes seleccionar el captcha";
return new JsonResponse($mensaje);
}
if($body->perfil == 'paciente') {
$existe_paciente_doc = $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(array('documento' => $body->documento, 'creado_por_medico' => 0));
if($existe_paciente_doc){
$mensaje["ok"]= false;
$mensaje['message'] = 'ERROR: El documento que ha ingresado ya existe.';
$mensaje = json_encode($mensaje);
return new Response($mensaje);
}
$existe_paciente_email = $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(array('email' => $body->email, 'creado_por_medico' => 0));
if($existe_paciente_email){
$mensaje["ok"]= false;
$mensaje['message'] = 'ERROR: La cuenta de correo ya esta siendo usada.';
$mensaje = json_encode($mensaje);
return new Response($mensaje);
}
$existe_paciente = $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(array('documento' => $body->documento, 'creado_por_medico' => 1));
if($existe_paciente){
if($existe_paciente->getDocumento() != $body->documento || $existe_paciente->getEmail() != $body->email){
$mensaje["ok"]= false;
$mensaje['message'] = 'ERROR: Los datos no coinciden con el paciente ingresado.';
$mensaje = json_encode($mensaje);
return new Response($mensaje);
}
}
}
$paciente_creado = false;
$medico_creado = false;
if(!$user){
$user = $um->createUser();
$user->setUid($body->uid);
$user->setEmail($body->email);
$user->setUsername($body->email);
$user->setUsernameCanonical($body->email);
$user->setProviderData(json_encode($body->providerData));
$user->setEnabled(true);
$user->setPassword('redes123');
$user->setCreatedAt(new \DateTime());
$user->setNombre($body->nombre);
$user->setApellido($body->apellido);
$user->setDocumento($body->documento);
if($body->perfil == 'medico') {
$user->addRole('ROLE_MEDICO');
$url = 'mailings/registro.html.twig';
$html_email = $this->renderView($url);
$subject = $this->qi->getSetting('registro_medico');
$this->qi->sendMail($subject, $user->getEmail(), $html_email);
}
if($body->perfil == 'paciente') {
$user->addRole('ROLE_PACIENTE');
$url = 'mailings/registro-paciente.html.twig';
$html_email = $this->renderView($url);
$subject = $this->qi->getSetting('registro_paciente');
$this->qi->sendMail($subject, $user->getEmail(), $html_email);
}
}
if($body->perfil == 'medico') {
$role = 'medico';
$repository = $this->getDoctrine()->getRepository(PerfilMedico::class);
$perfilmedico = $repository->findOneBy(['documento' => $body->documento, 'tipo_documento' => $body->tipo_documento]);
if ($perfilmedico) {
$user->addRole('ROLE_MEDICO');
$medico_creado = true;
}
}
if($body->perfil == 'paciente') {
$role = 'paciente';
$repository = $this->getDoctrine()->getRepository(Paciente::class);
$paciente = $repository->findOneBy(['documento' => $body->documento]);
if ($paciente) {
$user->addRole('ROLE_PACIENTE');
$paciente_creado = true;
}
}
if(property_exists($body,'uid')){
$user->setUid($body->uid);
}
if(property_exists($body,'nombre')){
if(isset($body->nombre) && $body->nombre !== '')
$user->setNombre($body->nombre);
}
$em->persist($user);
if ($paciente_creado) {
$paciente->setCreadoPorMedico(0);
$em->persist($paciente);
}else{
if($body->documento && $body->perfil == 'paciente'){
$paciente = new Paciente();
$paciente->setNombre($body->nombre);
$paciente->setApellido($body->apellido);
$paciente->setFotourl($url_avatar_default);
$paciente->setFoto('avatar.png');
$paciente->setDocumento($body->documento);
$paciente->setEmail($body->email);
$paciente->setTipoDocumento($body->tipo_documento);
$paciente->setFuma(0);
$paciente->setCreadoPorMedico(0);
$em->persist($paciente);
}
}
if ($medico_creado) {
$em->persist($perfilmedico);
}else{
if($body->documento && $body->perfil == 'medico'){
$perfilmedico = new PerfilMedico();
$perfilmedico->setFotourl($url_avatar_default);
$perfilmedico->setFoto('avatar.png');
$perfilmedico->setUsuario($user);
$perfilmedico->setDocumento($body->documento);
$perfilmedico->setTipoDocumento($body->tipo_documento);
$em->persist($perfilmedico);
}
}
$em->flush();
$um->updateUser($user);
}
if(!$user){
$mensaje["ok"]= false;
$mensaje['message'] = 'El usuario no existe, por favor registrate ';
return new JsonResponse($mensaje);
}
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
$event = new InteractiveLoginEvent($request, $token);
$this->eventDispatcher->dispatch("security.interactive_login", $event);
if ($this->authorization->isGranted('ROLE_POS_ADMIN')) {
$resultado= array("ok"=>true,'obj'=>$user,'url'=> $this->generateUrl('homepage'));
}else{
if ($this->authorization->isGranted('ROLE_MEDICO') ) {
$ruta = $this->generateUrl('home_medicos');
}else {
$ruta = $this->generateUrl('home_pacientes');
}
$resultado = array("ok"=>true, 'url'=> $ruta);
}
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceLimit(1);
// Add Circular reference handler
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$normalizers = array($normalizer);
$serializer = new Serializer($normalizers, $encoders);
$json = $serializer->serialize($resultado,'json');
return new Response($json);
}
/**
* @Method({"POST"})
* @Route("/api/direccion", name="crear_direccion")
*/
public function crearDireccion(Request $request)
{
$body = json_decode($request->getContent());
$qi = $this->qi;
$user = $this->getDoctrine()->getRepository(Usuario::class)->findOneBy(array('uid'=>$body->uid));
$ciudad = $this->getDoctrine()->getRepository(Ciudad::class)->find($body->ciudad->id);
$news = new Direccion();
$news->setUsuario($user);
$news->setNombre($body->nombre);
$news->setCiudad($ciudad);
$news->setDireccion($body->direccion." ".$body->adicional);
$news->setLat($body->lat);
$news->setLng($body->lng);
$news->setUid($body->uid);
$news->setPredeterminada($body->predeterminada);
$em = $this->getDoctrine()->getManager();
$em->persist($news);
$em->flush();
$qi->saveFire($news);
$resultado= array("ok"=>true,'obj'=>$news);
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceLimit(1);
// Add Circular reference handler
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$normalizers = array($normalizer);
$serializer = new Serializer($normalizers, $encoders);
$json = $serializer->serialize($resultado,'json');
return new Response($json);
}
/**
* @Method({"POST"})
* @Route("/api/historial/{uid}", name="historial")
*/
public function historial(Request $request,$uid)
{
$qi = $this->qi;
$user = $this->getDoctrine()->getRepository(Usuario::class)->findOneBy(array('uid'=>$uid));
$compras = $this->getDoctrine()->getManager()->createQueryBuilder()
->from('App:Compra','c')
->addSelect('c')
->leftJoin('c.tienda','t')
->addSelect('t')
->leftJoin('c.direccion','d')
->addSelect('d')
->where('c.usuario = :usuario')
->setParameter('usuario',$user)
->getQuery()
->getArrayResult();
$resultado= array("ok"=>true,'historial'=>$compras);
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceLimit(1);
// Add Circular reference handler
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$normalizers = array($normalizer);
$serializer = new Serializer($normalizers, $encoders);
$json = $serializer->serialize($resultado,'json');
return new Response($json);
}
function crearPedido($user,$direccion,$metodo,$tienda,$costo_domicilio,$comentarios,$peticion,$paga_con,$carrito,$canal){
$qi = $this->qi;
$em = $this->getDoctrine()->getManager();
$estado = $this->getDoctrine()->getRepository(EstadoPedido::class)->findOneBy(array('ref' => 'creado'));
$subtotal = 0;
$total = 0;
$news = new Compra();
$news->setCreatedAt(new \DateTime());
$news->setDireccion($direccion);
$news->setUsuario($user);
$news->setFechaRealProcesamiento(new \DateTime());
$news->setEstado($estado);
$news->setEstadoProcesamiento("nuevo");
$news->setCostoDomicilio($costo_domicilio);
$news->setComentarios($comentarios);
$news->setBody(json_encode($peticion));
$news->setCanal($canal);
$news->setMetodo($metodo);
$news->setPagaCon($paga_con);
$news->setSubtotal($subtotal);
$news->setTienda($tienda);
$total = $subtotal + $costo_domicilio;
$news->setTotal($total);
$em->persist($news);
$em->flush();
foreach ($carrito as $item) {
if ($canal == 'app') {
$product_id = $item->product_id;
$count = $item->count;
} else {
$product_id = $item["product_id"];
$count = $item["count"];
}
$prod = $this->getDoctrine()->getRepository(Producto::class)->findOneBy(array('plu' => $product_id));
if($this->qi->getSetting('pedido_multitienda') != '1')
$inv = $this->getDoctrine()->getRepository(Inventario::class)->findOneBy(array('producto' => $prod, 'tienda' => $tienda));
else
$inv = $this->getDoctrine()->getRepository(Inventario::class)->findOneBy(array('producto' => $prod));
if ($inv) {
$subtotal = $subtotal + $inv->getPrecio() * $count;
$newci = new CompraItem();
$newci->setProducto($prod);
$newci->setPrecio($inv->getPrecio() * $count);
$newci->setCantidad($count);
$newci->setCompra($news);
$newci->setCosto($inv->getPrecio());
$em->persist($newci);
$em->flush();
$qi->saveFire($newci);
} else {
}
}
$news->setSubtotal($subtotal);
$total = $subtotal + $costo_domicilio;
$news->setTotal($total);
$em->persist($news);
$em->flush();
$qi->saveFire($news);
$obj = array('tienda' => $tienda,
'compra' => array('id' => $news->getId(),
'total' => $news->getTotal(),
'estado' => $news->getEstadoProcesamiento(),
'subtotal' => $news->getSubtotal(),
'costoDomicilio' => $news->getCostoDomicilio(),
)
);
$resultado = array("ok" => true, 'obj' => $obj);
$qi->updateListenerTienda($tienda);
return $resultado;
}
/**
* @Route("/import", name="import")
*/
public function import(Request $request)
{
/*$categorias = $this->getDoctrine()->getRepository('App:Producto')->findAll();
foreach ($categorias as $categoria){
$this->qi->saveFire($categoria);
}*/
/*
$em = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
foreach ($data as $producto){
$producto_in = new Producto();
$producto_in->setPlu($producto['sku']);
$producto_in->setNombre($producto['nombreEs']);
$producto_in->setImagen($producto['imagen']);
$producto_in->setOrden(1);
$producto_in->setPrecio(0);
$producto_in->setVisible(true);
if(is_numeric($producto['id'])){
$categoria = $this->getDoctrine()->getRepository('App:Categoria')->find($producto['id']);
$producto_in->addCategoria($categoria);
}
$em->persist($producto_in);
}
$em->flush();
die();
foreach ($data as $categoria){
$categoria_in = new Categoria();
$categoria_in->setNombre($categoria['nombre']);
$categoria_in->setImagen($categoria['imagen']);
$categoria_in->setVisible(true);
$categoria_in->setOrden($categoria['orden']);
$em->persist($categoria_in);
}
$em->flush();
die();
return $this->redirectToRoute('easyadmin');
*/
//$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
}
/**
* @Route("/resetting/iridian", name="reset-iridian")
*/
public function sendEmailAction(Request $request)
{
$username = $request->request->get('username');
$user = $this->userManager->findUserByUsernameOrEmail($username);
$event = new GetResponseNullableUserEvent($user, $request);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
if (null !== $user && !$user->isPasswordRequestNonExpired($this->retryTtl)) {
$event = new GetResponseUserEvent($user, $request);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
if (null === $user->getConfirmationToken()) {
$user->setConfirmationToken($this->tokenGenerator->generateToken());
}
$event = new GetResponseUserEvent($user, $request);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
$this->sendResettingEmailMessage($user);
$user->setPasswordRequestedAt(new \DateTime());
$this->userManager->updateUser($user);
$event = new GetResponseUserEvent($user, $request);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
}
return new RedirectResponse($this->generateUrl('fos_user_resetting_check_email', array('username' => $username)));
}
public function sendResettingEmailMessage(UserInterface $user)
{
$url = $this->generateUrl('fos_user_resetting_reset', array('token' => $user->getConfirmationToken()), UrlGeneratorInterface::ABSOLUTE_URL);
$mensaje= str_replace('%link%','<a href="'.$url.'">link</a>',$this->qi->getTextoBig('mail_contrasena'));
}
/**
* @Route("/fullreload", name="fullreload")
*/
/*
public function fullreload(Request $request)
{
$productos = $this->getDoctrine()->getRepository('App:Producto')
->createQueryBuilder('p')
->select('p','c as cats')
->leftJoin('p.categorias','c')
->where('c.id is not null')
//->setMaxResults(2)
->getQuery()
->getArrayResult();
$prods = array();
foreach ($productos as $producto){
$cat = $producto['categorias'][0]['id'];
$producto['categorias'] = array($cat);
$prods[$producto['plu']] = $producto;
}
$this->qi->saveMultiFire('Producto',$prods);
dd($prods);
return $this->render('basic/template.html.twig', [
]);
}
*/
/**
* @Route("/load", name="load")
*/
/*
public function load(Request $request)
{
$em = $this->getDoctrine()->getManager();
$precios = array(10000, 5000, 7900, 12000, 17000, 20500,9000, 500, 300, 1000, 14500);
$productos = $this->getDoctrine()->getRepository('App:Producto')->findAll();
$tiendas = $this->getDoctrine()->getRepository('App:Tienda')->findAll();
foreach ($tiendas as $tienda){
$cont = 0;
foreach ($productos as $producto){
if($cont >= count($precios))
$cont = 0;
$inventario = new Inventario();
$inventario->setCantidad(1);
$inventario->setProducto($producto);
$inventario->setPrecio($precios[$cont]);
$inventario->setTienda($tienda);
$cont++;
$em->persist($inventario);
$em->flush();
$this->qi->saveFire($inventario);
}
}
return $this->render('basic/template.html.twig', [
]);
}
*/
/**
* @Route("/mispedidos", name="mispedidos")
*/
public function mispedidos(Request $request)
{
$user = $this->getUser();
if(!$user){
return $this->redirectToRoute('ingresar');
}
$aprobado = $this->getDoctrine()->getRepository(EstadoPedido::class)->findBy(array('ref'=>'APPROVED'));
$pedidos = $this->getDoctrine()->getRepository(Compra::class)->findBy(array("usuario"=>$user,'estado'=>$aprobado), array("createdAt"=>"desc"));
return $this->render('basic/pedidos.html.twig', [
'pedidos' => $pedidos,
]);
}
/**
* @Route("/mailingcompra", name="mailingcompra")
*/
public function mailingcompra(Request $request)
{
$compra = $this->getDoctrine()->getRepository('App:Compra')->findOneBy(array(), array('id'=>'desc'));
$asunto = $this->qi->getTexto('asunto_compra_cliente');
return $this->render('mailing/compra.html.twig', array(
'compra'=>$compra
));
}
/**
* @Route("/mailingcontacto", name="mailingcontacto")
*/
public function mailingcontacto(Request $request)
{
$asunto = $this->qi->getTexto('asunto_compra_cliente');
return $this->render('contact/contact_mail.html.twig', array(
'nombre'=>'Luisa',
'email'=>'samuel@iridian.co',
'telefono'=>'3002111111',
'mensaje'=>'Hola quiero saber si venden traumel en tabletas',
));
}
/**
* @Route("/sintoma/{id}", name="verpreguntasrespuestas")
*/
public function verpreguntasrespuestas(Request $request, $id)
{
$sintoma = $this->getDoctrine()->getRepository('App:Sintoma')->find($id);
$preguntas = $sintoma->getPreguntas();
$format_pr_info = "Pregunta id:%d - Respuesta id:%d - Opcion id:%d - Valor:%s\n";
$preguntas_respuestas_info = '';
foreach($preguntas as $p) {
$preguntas_info[] = $p;
$respuestas = $p->getRespuestas();
foreach($respuestas as $r) {
$respuestas_info[] = $r;
$preguntas_respuestas_info = $preguntas_respuestas_info . sprintf($format_pr_info, $p->getId(), $r->getId(), $r->getOpcion()->getId(), $r->getOpcion()->getValor());
}
}
dd($preguntas_info, $respuestas_info, $preguntas_respuestas_info);
}
/**
* @Route("/regla/{id}", name="verregla")
*/
public function verregla(Request $request, $id)
{
$msg = "VER REGLA DE UN PREDIAGNOSTICO";
$regla_current = $this->getDoctrine()->getRepository('App:Regla')->findOneBy(['prediagnostico' => $id]);
$nombre_prediagnostico = $regla_current->getPrediagnostico()->getInterpretacion();
$reglas= [];
$reglas[] = $regla_current;
$format_regla_info ='';
$format_regla_info = "regla:%s - operador:%s - opcion:%s \n";
$regla_info = sprintf($format_regla_info,$regla_current->getNombre(),$regla_current->getOperador(), $regla_current->getRespuesta()->getOpcion()->getValor());
while($regla_current->getReglasig()) {
$regla_current = $regla_current->getReglasig();
$reglas[] = $regla_current;
$regla_info = $regla_info . sprintf($format_regla_info,$regla_current->getNombre(),$regla_current->getOperador(), $regla_current->getRespuesta()->getOpcion()->getValor());
}
dd($msg, $nombre_prediagnostico,$regla_info);
}
/**
* @Route("/interrogatorio/{id}", name="verinterrogatorio")
*/
public function verinterrogatorio(Request $request, $id)
{
$titulo="Respuestas interrogatorio interrogatorio/ID PREDIAGNOSTICO";
$format_respuesta = "Pregunta:%s Pregunta id:%d - Respuesta:%s - opcion id:%d\n";
$format_respuesta_ids = "Pregunta id:%d - opcion id:%d - valor:%s\n";
$interrogatorio = $this->getDoctrine()->getRepository(Interrogatorio::class)->createQueryBuilder('i')
->select('i')
->where('i.prediagnosactivo = :prediagnosactivo')
->setParameter('prediagnosactivo', $id)
->getQuery()
->getResult();
$interrogatorio_info = '';
$interrogatorio_info_ids = '';
foreach($interrogatorio as $i) {
$interrogatorio_info = $interrogatorio_info.sprintf($format_respuesta,
$i->getPregunta()->getEnunciado(),
$i->getPregunta()->getId(),
$i->getOpcion()->getValor(),
$i->getOpcion()->getId());
$interrogatorio_info_ids = $interrogatorio_info_ids.sprintf($format_respuesta_ids,
$i->getPregunta()->getId(),
$i->getOpcion()->getId(),
$i->getOpcion()->getValor(),
);
}
dd($titulo, $interrogatorio_info, $interrogatorio_info_ids);
}
/**
* @Route("/test")
*/
public function test(Request $request): Response
{
if (!$this->getUser()) dd('restricted');
$sw=false;
if ($sw) {
$respuesta_paciente = [
393 => 789,
395 => 792,
396 => 794,
397 => 796,
398 => 798,
399 => 800,
400 => 802,
401 => 804,
402 => 806,
403 => 808
];
$resultado = false;
$especialidad_id = 4;
$sintoma_id = 61;
$prediagnosticos = $this->getDoctrine()->getRepository(Prediagnostico::class)->findBy(['sintoma' => $sintoma_id ]);
$reglas =[];
foreach($prediagnosticos as $p) {
if ($p->getRegla()) {
$reglas[] = $p->getRegla();
}
}
$resultado_total = [];
$expresiones=[];
foreach ($reglas as $regla) {
$pregunta_respuesta=[];
$prediagnostico_interpretacion = $regla->getPrediagnostico()->getInterpretacion();
$prediagnostico_id = $regla->getPrediagnostico()->getId();
while ($regla) {
$pregunta = $regla->getRespuesta()->getPregunta();
$enunciado = $pregunta->getEnunciado();
$respuesta = $regla->getRespuesta();
$opcion = $respuesta->getOpcion();
$pregunta_respuesta[] = ['pregunta_id' => $pregunta->getId(),
'enunciado' => $enunciado,
'opcion_id' => $opcion->getId() ,
'valor' => $opcion->getValor(),
'operador' => $regla->getOperador(),
'factor' => $regla->getFactor()
];
$regla = $regla->getReglaSig();
}
$resultados = [];
$resultado = false;
$prediagnostico = '';
$cadena='';
$evaluacion_conjunto = false;
$criterio_acumulador=0;
for($i=0; $i < count($pregunta_respuesta); $i++) {
$op1 = "'".$pregunta_respuesta[$i]["opcion_id"]."'";
$operador = $pregunta_respuesta[$i]["operador"];
$op2 = "'".$respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]."'";
$cadena = $cadena . $op1 . ' == ' . $op2 . ' '.$operador . ' ';
if ($operador == '(') {
$evaluacion_conjunto = true;
$factor = $pregunta_respuesta[$i]["factor"];
}
if ($operador == ')') {
if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
$criterio_acumulador++;
}
if ($criterio_acumulador >= $factor) {
$resultado = true;
$prediagnostico_encontrado = $prediagnostico_interpretacion;
} else {
$resultados[] = false;
$resultado = false;
$prediagnostico_encontrado = 'ninguno';
$expresiones[] = $cadena;
$evaluacion_conjunto = false;
break;
}
}
if ($evaluacion_conjunto) {
if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
$criterio_acumulador++;
}
}
else {
if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
$resultados[] = true;
$resultado = true;
$prediagnostico_encontrado = $prediagnostico_interpretacion;
} else {
if ($operador == '&&') {
$resultados[] = false;
$resultado = false;
$prediagnostico_encontrado = 'ninguno';
$expresiones[] = $cadena;
break;
} else {
$resultados[] = false;
$resultado = false;
$prediagnostico_encontrado = 'ninguno';
}
}
}
}
$expresiones[] = $cadena;
$resultado_total[] = array("preguntarespuesta" => $pregunta_respuesta, "resultadoespecifico" => $resultados,"resultadogeneral" => $resultado, "prediagnostico_id" => $prediagnostico_id, "prediagnostico" => $prediagnostico_encontrado);
}
dd($reglas, $expresiones, $resultado_total, $respuesta_paciente);
}
$respuesta_paciente = [
393 => 789,
395 => 791,
396 => 794,
397 => 796,
398 => 798,
399 => 800,
400 => 802,
401 => 804,
402 => 806,
403 => 808
];
$resultado = false;
$especialidad_id = 4;
$sintoma_id = 61;
$prediagnosticos = $this->getDoctrine()->getRepository(Prediagnostico::class)->findBy(['sintoma' => $sintoma_id ]);
$reglas =[];
foreach($prediagnosticos as $p) {
if ($p->getRegla()) {
$reglas[] = $p->getRegla();
}
}
$resultado_total = [];
$expresiones=[];
foreach ($reglas as $regla) {
$pregunta_respuesta=[];
$prediagnostico_interpretacion = $regla->getPrediagnostico()->getInterpretacion();
$prediagnostico_id = $regla->getPrediagnostico()->getId();
while ($regla) {
$pregunta = $regla->getRespuesta()->getPregunta();
$enunciado = $pregunta->getEnunciado();
$respuesta = $regla->getRespuesta();
$opcion = $respuesta->getOpcion();
$pregunta_respuesta[] = ['pregunta_id' => $pregunta->getId(),
'enunciado' => $enunciado,
'opcion_id' => $opcion->getId() ,
'valor' => $opcion->getValor(),
'operador' => $regla->getOperador(),
'regla' => $regla->getNombre()
];
$regla = $regla->getReglaSig();
}
$resultados = [];
$resultado = false;
$prediagnostico = '';
$cadena='';
for($i=0; $i < count($pregunta_respuesta); $i++) {
$op1 = "'".$pregunta_respuesta[$i]["opcion_id"]."'";
$operador = $pregunta_respuesta[$i]["operador"];
$op2 = "'".$respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]."'";
$cadena = $cadena . $op1 . ' == ' . $op2 . ' '.$operador . ' ';
if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
$resultados[] = true;
$resultado = true;
$prediagnostico_encontrado = $prediagnostico_interpretacion;
} else {
if ($operador == '&&') {
$resultados[] = false;
$resultado = false;
$prediagnostico_encontrado = 'ninguno';
break;
} else {
$resultados[] = false;
$resultado = false;
$prediagnostico_encontrado = 'ninguno';
}
}
}
$expresiones[] = ["regla" => $pregunta_respuesta[$i]["regla"], "cadena"=> $cadena];
$resultado_total[] = array("preguntarespuesta" => $pregunta_respuesta, "resultadoespecifico" => $resultados,"resultadogeneral" => $resultado, "prediagnostico_id" => $prediagnostico_id, "prediagnostico" => $prediagnostico_encontrado);
}
dd($expresiones, $resultado_total, $respuesta_paciente);
$prediagnostico_id = 2;
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->findOneBy([ 'id' => $especialidad_id ]);
$prediagnostico = $this->getDoctrine()->getRepository(Prediagnostico::class)->findOneBy([ 'id' => $prediagnostico_id ]);
$regla = $prediagnostico->getRegla();
$respuesta_paciente = [
1 => 21,
2 => 24,
3 => 26,
4 => 28,
6 => 30,
7 => 32,
8 => 34
];
$pregunta_respuesta=[];
while ($regla) {
$pregunta = $regla->getRespuesta()->getPregunta();
$enunciado = $pregunta->getEnunciado();
$respuesta = $regla->getRespuesta();
$opcion = $respuesta->getOpcion();
$pregunta_respuesta[] = ['pregunta_id' => $pregunta->getId(),
'enunciado' => $enunciado,
'opcion_id' => $opcion->getId() ,
'valor' => $opcion->getValor(),
'operador' => $regla->getOperador()
];
$regla = $regla->getReglaSig();
}
$cadena = '';
$resultados = [];
for($i=0; $i < count($pregunta_respuesta); $i++) {
$op1 = "'".$pregunta_respuesta[$i]["opcion_id"]."'";
$operador = $pregunta_respuesta[$i]["operador"];
$op2 = "'".$respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]."'";
if ($pregunta_respuesta[$i]["opcion_id"] == $respuesta_paciente[$pregunta_respuesta[$i]["pregunta_id"]]) {
$resultados[] = true;
$resultado = true;
} else {
if ($operador == '&&') {
$resultados[] = false;
$resultado = false;
break;
}
}
}
dd($pregunta_respuesta, $respuesta_paciente, $resultado, $resultados);
$email = 'joel@gmail.com';
$documento_paciente = '12502219';
$repository = $this->getDoctrine()->getRepository(Paciente::class);
$paciente = $repository->findOneBy(['documento' => $documento_paciente]);
dd($paciente);
$cat_id = 7;
$catalogo_concepto = $this->getDoctrine()->getRepository(Catalogo::class)->createQueryBuilder('cat')
->select('cat')
->where('cat.concepto = :cat_id')
->setParameter('cat_id', $cat_id)
->getQuery()
->getResult();
$rips = '042205';
$servicio = $this->getDoctrine()->getRepository(Servicio::class)->findOneBy(['codigorips' => $rips, 'medico' => 2]);
dd($catalogo_concepto, $servicio);
$tipos_documento = $this->getDoctrine()->getRepository(Tipodocumento::class)->createQueryBuilder('td')
->select('td' )
->where('td.visible = true')
->orderBy('td.orden', 'ASC')
->getQuery()
->getArrayResult();
dd($tipos_documento);
$id = 1;
$ordenes = $this->getDoctrine()->getRepository(Orden::class)->createQueryBuilder('o')
->select('o')
->leftJoin('o.paciente', 'p')
->where('p.id = :paciente_id')
->setParameter('paciente_id', $id)
->orderBy('o.fecha', 'DESC')
->getQuery()
->getArrayResult();
$orden = $ordenes[0];
$fecha = $orden["fecha"];
dd($fecha->format('Y-m-d'));
$fecha_comienzo = $this->qi->getSetting('fecha-inicio-operacion');
$numero_mes = date("m", strtotime($fecha_comienzo));
$interval = \DateInterval::createFromDateString('1 month');
$hoy = new \DateTime();
$rango = new \DatePeriod(new \DateTime($fecha_comienzo), $interval , $hoy);
foreach($rango as $date1){
$numero_mes = date("m", strtotime($date1->format('Y-m-d')));
$cadena_mes = $this->qi->getMes($numero_mes);
$meses_periodo[] = array('mesyear' => $date1->format('m').'-'.$date1->format('Y'), 'mesnumero' => $date1->format('m'), 'mescadena' => $cadena_mes ,'year' => $date1->format('Y'));
}
dd($meses_periodo);
$metricas_atencions_all = [];
$perfil_medico = $this->getDoctrine()->getRepository('App:Perfilmedico')->find(2);
$especialidades = $perfil_medico->getEspecialidades();
foreach($especialidades as $e) {
$esp[] = $e->getNombre();
}
dd($esp);
}
}