<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
use Symfony\Component\Routing\Generator\UrlGenerator;
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 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 App\Entity\Autorizacionhistorial;
use App\Entity\Perfilmedico;
use App\Entity\Paciente;
use App\Entity\Aseguradora;
use App\Entity\Tipodocumento;
use App\Entity\Regimenfiscal;
use App\Entity\Responsabilidadfiscal;
use App\Entity\Codigociuu;
use App\Entity\Ciudad;
use App\Entity\Naturaleza;
use App\Entity\Iva;
use App\Entity\Conceptoservicio;
use App\Entity\Servicio;
use App\Entity\Listaprecio;
use App\Entity\Paquete;
use App\Entity\Administradora;
use App\Entity\Paraclinico;
use App\Entity\Imagen;
use App\Entity\Formula;
use App\Entity\Procedimiento;
use App\Entity\Vacuna;
use App\Entity\EstadoCivil;
use App\Entity\Factura;
use App\Entity\FacturaItem;
use App\Entity\GrupoFormula;
use App\Entity\GrupoImagen;
use App\Entity\GrupoParaclinico;
use App\Entity\Escolaridad;
use App\Entity\Terapia;
use App\Entity\AntecedentePersonal;
use App\Entity\AtencionMedicamento;
use App\Entity\Unidad;
use App\Entity\Finalidad;
use App\Entity\CausaExterna;
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\Plantilla;
use App\Entity\Orden;
use App\Entity\Especialidad;
use App\Entity\Idioma;
use App\Entity\Eps;
use App\Entity\Clasificacionaseguradora;
use App\Entity\Convenio;
use App\Entity\Estadoconvenio;
use App\Entity\Modalidadpago;
use App\Entity\Planbeneficio;
use App\Entity\Prediagnostico;
use App\Entity\Prediagnosactivo;
use App\Entity\MetodoPago;
use App\Entity\Metrica;
use App\Entity\Alergia;
use App\Entity\Medicamento;
use App\Entity\Usuario;
use App\Entity\Otpregister;
use App\Form\PerfilmedicoType;
use App\Form\PacienteType;
use App\Form\AtencionType;
use App\Repository\ImagenRepository;
use App\Service\QI;
// use App\Service\MedintiaService;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
class MedicoController extends AbstractController
{
private $qi;
// private $medintia;
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;
// $this->medintia = $medintia;
}
/**
* @Route("/medico", name="medico")
*/
public function index(): Response
{
return $this->render('medico/index.html.twig', [
'controller_name' => 'MedicoController',
]);
}
//MEDICOS
/**
* @Route("/home_medicos", name="home_medicos")
*/
public function homeMedicos(Request $request)
{
$user = $this->getUser();
if ($user) {
// dd($user);
if ($this->isGranted('ROLE_MEDICO')) {
// dd($user->getId());
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
// $autorizacion = $this->getDoctrine()->getRepository(Autorizacionhistorial::class)->findAll();
// dd($autorizacion);
if (!$perfilmedico) {
return $this->redirectToRoute('configuracion_medico');
}
if ($request->query->get('perfil') === null && $perfilmedico->getRethus() === null) {
return $this->redirectToRoute('configuracion_medico');
}
return $this->render('medicos/home.html.twig', [
'perfilmedico' => $perfilmedico,
'usuario' => $user
]);
}
if ($this->isGranted('ROLE_PACIENTE')) {
return $this->redirectToRoute('home_pacientes');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/perfil_medico", name="perfil_medico")
*/
public function perfilMedico(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$um = $this->userManager;
$user = $um->findUserBy(array('uid' => $user->getUid() ));
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
if (!$perfilmedico) {
return $this->redirectToRoute('configuracion_medico');
}
$especialidades = $perfilmedico->getEspecialidades();
$listaespecialidades = '';
$esp = [];
foreach($especialidades as $key => $e) {
$esp[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
$listaespecialidades = $listaespecialidades . strval($e->getId()) . ';';
}
$listaespecialidades = substr($listaespecialidades, 0, -1);
$idiomas = $perfilmedico->getIdiomas();
$listaidiomas = '';
$idi = [];
foreach($idiomas as $key => $e) {
$idi[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
$listaidiomas = $listaidiomas . strval($e->getId()) . ';';
}
$listaidiomas = substr($listaidiomas, 0, -1);
$form = $this->createForm(PerfilmedicoType::class, $perfilmedico, ['nombre' => $user->getNombre(), 'apellido' => $user->getApellido(), 'celular' => $user->getCelular(), 'tipoformulario' => 'perfilmedico' ]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$em = $this->getDoctrine()->getManager();
$perfilmedico = $form->getData();
$user->setNombre($form->get('nombre')->getData());
$user->setApellido($form->get('apellido')->getData());
$user->setDocumento($perfilmedico->getDocumento());
$user->setCelular($form->get('celular')->getData());
$uespecialidades = $form->get('especialidadesids')->getData();
$update_especialidades = explode(";",$uespecialidades);
$current_especialidades = explode(";",$listaespecialidades);
$add_especialidades = array_diff($update_especialidades, $current_especialidades);
$remove_especialidades = array_diff($current_especialidades, $update_especialidades );
foreach ($add_especialidades as $e) {
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
if($especialidad)
$perfilmedico->addEspecialidade($especialidad);
}
foreach ($remove_especialidades as $e) {
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
if($especialidad)
$perfilmedico->removeEspecialidade($especialidad);
}
$uidiomas = $form->get('idiomasids')->getData();
$update_idiomas = explode(";",$uidiomas);
$current_idiomas = explode(";",$listaidiomas);
$add_idiomas = array_diff($update_idiomas, $current_idiomas);
$remove_idiomas = array_diff($current_idiomas, $update_idiomas );
foreach ($add_idiomas as $i) {
$idioma = $this->getDoctrine()->getRepository(Idioma::class)->find($i);
if($idioma)
$perfilmedico->addIdioma($idioma);
}
foreach ($remove_idiomas as $i) {
$idioma = $this->getDoctrine()->getRepository(Idioma::class)->find($i);
if($idioma)
$perfilmedico->removeIdioma($idioma);
}
$em->persist($perfilmedico);
$em->flush();
$um->updateUser($user);
return $this->redirectToRoute('home_medicos',['perfil' => true]);
}
return $this->render('medicos/perfil.html.twig', [
'form' => $form->createView(),
'perfilmedico' => $perfilmedico,
'submit' => 'nosubmit',
'usuario' => $user,
'especialidades' => $esp,
'listaespecialidades' => $listaespecialidades,
'idiomas' => $idi,
'listaidiomas' => $listaidiomas
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/pacientes", name="pacientes")
*/
public function pacientes(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 = '';
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;
}
if ($request->query->has('mesyear')) {
$mesyear = $request->query->get('mesyear', 1);
} else {
$mesyear = null;
}
$queried = false;
if ($buscar != null) {
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','e.nombre as eps' )
->leftJoin('a.paciente', 'p')
//->leftJoin('a.medico', 'm')
->leftJoin('p.eps','e')
//->where('m.id = :medicoid')
//->setParameter('medicoid', $perfilmedico->getId())
->groupBy('a.paciente')
->orderBy('fecha', 'desc')
->getQuery()
->getArrayResult();
$queried = true;
} else {
$query = $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
->select('p.id', 'p.nombre', 'p.apellido','p.foto', 'p.fotourl', 'p.email','p.documento','e.nombre as eps' );
$query
->leftJoin('p.eps', 'e')
->Where("CONCAT(p.nombre,' ', p.apellido) like :buscar OR p.documento like :buscar OR p.email like :buscar")
->setParameter('buscar', '%'.$buscar.'%');
$query->orderBy('p.nombre', 'asc');
$pacientes = $query->getQuery()->getResult();
$queried = true;
}
}
if ($diagnostico != null) {
$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','e.nombre as eps')
->leftJoin('a.paciente', 'p')
->leftJoin('a.diagnosticos', 'd')
// ->leftJoin('a.medico', 'm')
->leftJoin('p.eps', 'e')
// ->where('m.id = :medicoid')
->AndWhere('d.codigo = :codigodiagnostico')
// ->setParameter('medicoid', $perfilmedico->getId())
->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.id', 'p.nombre', 'p.apellido','p.foto', 'p.fotourl', 'p.email','p.documento','e.nombre as eps' )
->leftJoin('p.medico', 'm')
->leftJoin('p.eps', 'e')
->where(':medicoid MEMBER OF p.medico')
->setParameter('medicoid', $perfilmedico->getId());
$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);
$nuevos_pacientes = [];
if ($mesyear) {
//mm-yy
$mesyear_array = explode("-", $mesyear);
foreach($ultimas_atenciones as $key => $ua) {
$fecha_ultima_atencion_array = explode("-", $ua);
//yy-mm-dd
if ($mesyear_array[0] == $fecha_ultima_atencion_array[1] && $mesyear_array[1] == $fecha_ultima_atencion_array[0]) {
foreach($pacientes as $p) {
if ($p['id'] === $key) {
$nuevos_pacientes[] = $p;
}
}
}
}
$pacientes = $nuevos_pacientes;
}
$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'));
}
return $this->render('medicos/pacientes.html.twig', [
'usuario' => $user,
'pacientes' => $pacientes,
'perfilmedico' => $perfilmedico,
'paciente_ids' => $paciente_ids,
'ultimas_atenciones' => $ultimas_atenciones,
'diagnosticos' => $diagnosticos,
'codigodiagnostico' => $diagnostico,
'meses_periodo' => $meses_periodo,
'mesyear' => $mesyear,
'buscar' => $buscar,
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/eliminar_paciente/{id}", name="eliminar_paciente")
*/
public function eliminarpaciente(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$entityManager = $this->getDoctrine()->getManager();
// dd($id);
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id);
// dd($paciente);
$entityManager->remove($paciente);
$entityManager->flush();
return $this->redirectToRoute('pacientes');
}
}
return('no autorizado');
}
/**
* @Route("/analytics", name="analytics")
*/
public function Analytics(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
// dd($user->getId());
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
if (!$perfilmedico) {
return $this->redirectToRoute('configuracion_medico');
dd('no tiene perfil medico');
}
$pacientes = $this->getDoctrine()->getRepository('App:Paciente')->createQueryBuilder('p')
->select('p')
->where(':medicoid MEMBER OF p.medico')
->setParameter('medicoid', $perfilmedico->getId())
->orderBy('p.nombre', 'asc')
->getQuery()->getResult();
$metricas = $this->getDoctrine()->getRepository(Metrica::class)->createQueryBuilder('m')
->select('m')
->orderBy('m.nombre', 'ASC')
->getQuery()
->getArrayResult();
return $this->render('medicos/analytics.html.twig', [
'perfilmedico' => $perfilmedico,
'pacientes' => $pacientes,
'metricas' => $metricas,
'usuario' => $user
]);
}
if ($this->isGranted('ROLE_PACIENTE')) {
return $this->redirectToRoute('home_pacientes');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/configuraciones", name="configuraciones")
*/
public function Configuraciones(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');
dd('no tiene perfil medico');
}
return $this->render('medicos/configuraciones.html.twig', [
'perfilmedico' => $perfilmedico,
'usuario' => $user,
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/eliminar_diploma/{id}", name="eliminar_diploma")
*/
public function eliminarDiploma(Request $request,$id)
{
$resultado = ["ok"=>true];
try {
$em = $this->getDoctrine()->getManager();
$diploma = $this->getDoctrine()->getRepository(Diploma::class)->find($id);
$em->remove($diploma);
$em->flush();
}catch (\Exception $e){
$resultado = ["ok"=>false,"msg"=>$e->getMessage()];
}
return new Response(json_encode($resultado));
}
/**
* @Route("/configuracion_medico", name="configuracion_medico")
*/
public function configuracionMedico(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$um = $this->userManager;
$user = $um->findUserBy(array('uid' => $user->getUid() ));
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$url_avatar_default = $this->qi->getSetting('avatar-default');
$nuevo_perfil = false;
if (!$perfilmedico) {
$perfilmedico = new PerfilMedico();
$nuevo_perfil = true;
}
$especialidades = $perfilmedico->getEspecialidades();
$listaespecialidades = '';
$esp = [];
foreach($especialidades as $key => $e) {
$esp[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
$listaespecialidades = $listaespecialidades . strval($e->getId()) . ';';
}
$listaespecialidades = substr($listaespecialidades, 0, -1);
$idiomas = $perfilmedico->getIdiomas();
$listaidiomas = '';
$idi = [];
foreach($idiomas as $key => $e) {
$idi[] = array('id' => $e->getId(), 'nombre' => $e->getNombre());
$listaidiomas = $listaidiomas . strval($e->getId()) . ';';
}
$listaidiomas = substr($listaidiomas, 0, -1);
$form = $this->createForm(PerfilmedicoType::class, $perfilmedico, ['nombre' => $user->getNombre(), 'apellido' => $user->getApellido()]);
$form->handleRequest($request);
$errors = (string)$form->getErrors(true);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$perfilmedico = $form->getData();
$diplomas_url_str = $form->get('diplomas')->getData();
$rips = $request->request->get('checkbox-rips') == 'false' ? 0 : 1;
$diplomas_url = explode(',', $diplomas_url_str);
$perfilmedico->setUsuario($user);
$perfilmedico->setRips($rips);
foreach($diplomas_url as $d) {
$diploma_new = new Diploma();
$diploma_new->setUrl($d);
$diploma_new->setPerfilmedico($perfilmedico);
$em->persist($diploma_new);
}
if (!$perfilmedico->getFotourl()) {
$perfilmedico->setFotourl($url_avatar_default);
$perfilmedico->setFoto('avatar.png');
// dd('no hay foto');
}
$em->persist($user);
$em->persist($perfilmedico);
$em->flush();
$um->updateUser($user);
$uespecialidades = $request->get('especialidadids');
$update_especialidades = explode(";",$uespecialidades);
$current_especialidades = explode(";",$listaespecialidades);
$add_especialidades = array_diff($update_especialidades, $current_especialidades);
$remove_especialidades = array_diff($current_especialidades, $update_especialidades );
foreach ($add_especialidades as $e) {
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
if($especialidad)
$perfilmedico->addEspecialidade($especialidad);
}
foreach ($remove_especialidades as $e) {
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->find($e);
if($especialidad)
$perfilmedico->removeEspecialidade($especialidad);
}
$uidiomas = $form->get('idiomasids')->getData();
$update_idiomas = explode(";",$uidiomas);
$current_idiomas = explode(";",$listaidiomas);
$add_idiomas = array_diff($update_idiomas, $current_idiomas);
$remove_idiomas = array_diff($current_idiomas, $update_idiomas );
foreach ($add_idiomas as $i) {
$idioma = $this->getDoctrine()->getRepository(Idioma::class)->find($i);
if($idioma)
$perfilmedico->addIdioma($idioma);
}
foreach ($remove_idiomas as $i) {
$idioma = $this->getDoctrine()->getRepository(Idioma::class)->find($i);
if($idioma)
$perfilmedico->removeIdioma($idioma);
}
$em->persist($perfilmedico);
$em->flush();
return $this->render('medicos/configuracion_medico.html.twig', [
'form' => $form->createView(),
'perfilmedico' => $perfilmedico,
'submit' => 'success',
'usuario' => $user,
'nuevo_perfil' => $nuevo_perfil,
'avatar_default' => $url_avatar_default,
'listaidiomas' => $listaidiomas,
'listaespecialidades' => $listaespecialidades,
'especialidades' => $esp,
'idiomas' => $idi,
'error' => $errors,
]);
}
return $this->render('medicos/configuracion_medico.html.twig', [
'form' => $form->createView(),
'perfilmedico' => $perfilmedico,
'submit' => 'nosubmit',
'usuario' => $user,
'nuevo_perfil' => $nuevo_perfil,
'avatar_default' => $url_avatar_default,
'listaidiomas' => $listaidiomas,
'listaespecialidades' => $listaespecialidades,
'especialidades' => $esp,
'idiomas' => $idi,
'error' => $errors,
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/configuracion_paciente_medico", name="configuracion_paciente_medico")
*/
public function configuracionPacienteMedico(Request $request)
{
$existe_usuario = $this->userManager->findUserBy(array('documento' => '1098792371'));
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$url_avatar_default = $this->qi->getSetting('avatar-default');
$form = $this->createForm(PacienteType::class);
$form->handleRequest($request);
$errors = (string)$form->getErrors(true);
if ($form->isSubmitted() && $form->isValid()) {
$paciente = $form->getData();
$existe_usuario = $this->userManager->findUserBy(array('documento' => $form->get('documento')->getData()));
$existe_user_mail = $this->userManager->findUserBy(array('email' => $form->get('email')->getData()));
$existe_fos_user = $this->getDoctrine()->getRepository(Usuario::class)->findOneBy(array('email' => $form->get('email')->getData()));
$isPaciente = false;
if($existe_usuario){
foreach($existe_usuario->getRol() as $key => $value){
if($value == 'ROLE_PACIENTE')
$isPaciente = true;
}
}
if ($form->get('fumap')->getData() == 'true') {
$paciente->setFuma(true);
} else {
$paciente->setFuma(false);
}
if ($form->get('licorp')->getData() == 'true') {
$paciente->setLicor(true);
} else {
$paciente->setLicor(false);
}
if ($form->get('psicoactivop')->getData() == 'true') {
$paciente->setPsicoactivo(true);
} else {
$paciente->setPsicoactivo(false);
}
if ($form->get('menor')->getData() == 'true') {
$paciente->setMenor(true);
} else {
$paciente->setMenor(false);
}
if (!$paciente->getFoto()) {
$paciente->setFoto('avatar.png');
$paciente->setFotourl('/img/avatar.png');
}
// acudiente
if ($form->get('nombreacudiente')->getData()) {
$nombreacudiente=$form->get('nombreacudiente')->getData();
$paciente->setNombreacudiente($nombreacudiente);
}
if ($form->get('telefonoacudiente')->getData()) {
$telefonoacudiente=$form->get('telefonoacudiente')->getData();
$paciente->setTelefonoacudiente($telefonoacudiente);
}
if ($form->get('parentezcoacudiente')->getData()) {
$parentezcoacudiente=$form->get('parentezcoacudiente')->getData();
$paciente->setParentezcoacudiente($parentezcoacudiente);
}
if ($form->get('documentoacudiente')->getData()) {
$documentoacudiente=$form->get('documentoacudiente')->getData();
$paciente->setDocumentoacudiente($documentoacudiente);
}
if ($form->get('correoacudiente')->getData()) {
$correoacudiente=$form->get('correoacudiente')->getData();
$paciente->setCorreoacudiente($correoacudiente);
}
// fin acudiente
$alergias_ids_str = $form->get('alergiasids')->getData();
if (strlen($alergias_ids_str) > 0) {
$alergia_ids = explode(";",$alergias_ids_str);
foreach($alergia_ids as $alergia_id) {
$alergia = $this->getDoctrine()->getRepository(Alergia::class)->find($alergia_id);
if($alergia)
$paciente->addAlergia($alergia);
}
}
$cronica_ids_str = $form->get('cronicasids')->getData();
if (strlen($cronica_ids_str) > 0) {
$cronica_ids = explode(";",$cronica_ids_str);
foreach($cronica_ids as $cronica_id) {
$cronica = $this->getDoctrine()->getRepository(Diagnostico::class)->findOneBy(["codigo" => $cronica_id]);
if($cronica)
$paciente->addCronica($cronica);
}
}
$vacuna_ids_str = $form->get('vacunasids')->getData();
if (strlen($vacuna_ids_str) > 0) {
$vacuna_ids = explode(";",$vacuna_ids_str);
foreach($vacuna_ids as $vacuna_id) {
$vacuna = $this->getDoctrine()->getRepository(Vacuna::class)->findOneBy(["codigo" => $vacuna_id]);
if($vacuna)
$paciente->addVacuna($vacuna);
}
}
$enfermedadesfamilia_ids_str = $form->get('enfermedadesfamiliaids')->getData();
if (strlen($enfermedadesfamilia_ids_str) > 0) {
$enfermedadesfamilia_ids = explode(";",$enfermedadesfamilia_ids_str);
foreach($enfermedadesfamilia_ids as $enfermedadesfamilia_id) {
$enfermedad = $this->getDoctrine()->getRepository(Diagnostico::class)->findOneBy(["codigo" => $enfermedadesfamilia_id]);
if($enfermedad)
$paciente->addEnfermedadesfamiliares($enfermedad);
}
}
$antecendentes_personales_ids_str = $form->get('antecedentespersonalesids')->getData();
if (strlen($antecendentes_personales_ids_str) > 0) {
$antecendentes_personales_ids = explode(";",$antecendentes_personales_ids_str);
foreach($antecendentes_personales_ids as $antecendentes_personales_id) {
$antecedente = $this->getDoctrine()->getRepository(AntecedentePersonal::class)->findOneBy(["codigo" => $antecendentes_personales_id]);
if($antecedente)
$paciente->addAntecedentePersonal($antecedente);
}
}
if(!$existe_usuario && !$existe_user_mail){
$paciente->addMedico($perfilmedico);
$paciente->setCreadoPorMedico(1);
$em->persist($paciente);
$em->flush();
if(!$existe_fos_user){
$usuario_nuevo_fire=$this->qi->createFireUser($form->get('email')->getData(), $form->get('documento')->getData(), true);
// crear paciente por un medico como usuario
$usuario_nuevo = new Usuario();
$usuario_nuevo->setUid($usuario_nuevo_fire->uid);
$usuario_nuevo->setEmail($usuario_nuevo_fire->email);
$usuario_nuevo->setUsername($usuario_nuevo_fire->email);
$usuario_nuevo->setUsernameCanonical($usuario_nuevo_fire->email);
$usuario_nuevo->setProviderData(json_encode($usuario_nuevo_fire->providerData));
$usuario_nuevo->setEnabled(true);
$usuario_nuevo->setPassword($form->get('documento')->getData());
$usuario_nuevo->setCreatedAt(new \DateTime());
$usuario_nuevo->setDocumento($form->get('documento')->getData());
$usuario_nuevo->setRoles(array("ROLE_PACIENTE"));
$em->persist($usuario_nuevo);
$em->flush();
// envia correo de registro
$url = 'mailings/registro-paciente-desdemedico.html.twig';
$html_email = $this->renderView($url);
$respuesta_email =$this->qi->sendMail("Tu registro como paciente ha sido exitoso", $usuario_nuevo->getEmail(), $html_email);
}
return $this->redirectToRoute('paciente_interna',[ 'id' => $paciente->getId()]);
}
if($existe_user_mail){
if(!$errors){
$errors .= 'ERROR: El correo que ha ingresado ya existe.';
}
}
if($existe_usuario){
if($isPaciente){
if(!$errors){
$errors .= 'ERROR: El documento que ha ingresado ya existe.';
}
}
}
if(!$existe_user_mail && !$isPaciente){
$paciente->addMedico($perfilmedico);
$paciente->setCreadoPorMedico(1);
$em->persist($paciente);
$em->flush();
if(!$existe_fos_user){
$usuario_nuevo_fire=$this->qi->createFireUser($form->get('email')->getData(), $form->get('documento')->getData(), true);
// dd($usuario_nuevo_fire);
// crear paciente por un medico como usuario
$usuario_nuevo = new Usuario();
$usuario_nuevo->setUid($usuario_nuevo_fire->uid);
$usuario_nuevo->setEmail($usuario_nuevo_fire->email);
$usuario_nuevo->setUsername($usuario_nuevo_fire->email);
$usuario_nuevo->setUsernameCanonical($usuario_nuevo_fire->email);
$usuario_nuevo->setProviderData(json_encode($usuario_nuevo_fire->providerData));
$usuario_nuevo->setEnabled(true);
$usuario_nuevo->setPassword($form->get('documento')->getData());
$usuario_nuevo->setCreatedAt(new \DateTime());
// $user->setNombre($usuario_nuevo_fire->nombre);
$usuario_nuevo->setDocumento($form->get('documento')->getData());
// $user->setApellido($usuario_nuevo_fire->apellido);
$em->persist($usuario_nuevo);
$em->flush();
// envia correo de registro
$url = 'mailings/registro-paciente.html.twig';
$html_email = $this->renderView($url);
$respuesta_email =$this->qi->sendMail("Tu registro como paciente ha sido exitoso", $usuario_nuevo->getEmail(), $html_email);
}
return $this->redirectToRoute('paciente_interna',[ 'id' => $paciente->getId()]);
}
if (!$existe_user_mail && $form->get('email')->getData()) {
$usuario_nuevo_fire=$this->qi->createFireUser($form->get('email')->getData(), $form->get('documento')->getData(), true);
// crear paciente por un medico como usuario
$usuario_nuevo = new Usuario();
$usuario_nuevo->setUid($usuario_nuevo_fire->uid);
$usuario_nuevo->setEmail($usuario_nuevo_fire->email);
$usuario_nuevo->setUsername($usuario_nuevo_fire->email);
$usuario_nuevo->setUsernameCanonical($usuario_nuevo_fire->email);
$usuario_nuevo->setProviderData(json_encode($usuario_nuevo_fire->providerData));
$usuario_nuevo->setEnabled(true);
$usuario_nuevo->setPassword($form->get('documento')->getData());
$usuario_nuevo->setCreatedAt(new \DateTime());
$usuario_nuevo->setDocumento($form->get('documento')->getData());
$em->persist($usuario_nuevo);
$em->flush();
// envia correo de registro
$url = 'mailings/registro-paciente.html.twig';
$html_email = $this->renderView($url);
$respuesta_email =$this->qi->sendMail("Tu registro como paciente ha sido exitoso", $usuario_nuevo->getEmail(), $html_email);
}
}
$alergias = $this->getDoctrine()->getRepository(Alergia::class)->createQueryBuilder('a')
->select('a')
->orderBy('a.nombre', 'ASC')
->getQuery()
->getArrayResult();
$cronicas = $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
->select('d')
->orderBy('d.descripcion', 'ASC')
->getQuery()
->getArrayResult();
$antecendentes_personales = $this->getDoctrine()->getRepository(AntecedentePersonal::class)->createQueryBuilder('d')
->select('d')
->orderBy('d.descripcion', 'ASC')
->getQuery()
->getArrayResult();
$vacunas = $this->getDoctrine()->getRepository(Vacuna::class)->createQueryBuilder('d')
->select('d')
->orderBy('d.nombre', 'ASC')
->getQuery()
->getArrayResult();
return $this->render('medicos/configuracion_paciente.html.twig', [
'form' => $form->createView(),
'submit' => 'nosubmit',
'perfilmedico' => $perfilmedico,
'url_avatar_default' => $url_avatar_default,
'alergias' => $alergias,
'cronicas' => $cronicas,
'vacunas' => $vacunas,
'antecendentes_personales' => $antecendentes_personales,
'error' => $errors,
'usuario' => $user,
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/validar_crearpaciente_pormedic_register", name="validar_crearpaciente_pormedic_register")
*/
public function validar_crearpaciente_pormedic_register(Request $request){
$mensaje = array('ok' => true);
if ($this->isGranted('ROLE_MEDICO')){
$body=json_decode($request->getContent());
$tipo_documento=$body->tipo_documento;
$documento=$body->documento;
$email=$body->email;
$mensaje = array('ok' => true);
$pacienteexist= $this->getDoctrine()->getRepository(Paciente::class)->findBy(['tipo_documento' => $tipo_documento,'documento' => $documento]);
$usuarioexist= $this->getDoctrine()->getRepository(Usuario::class)->findBy(['email' => $email]);
if($pacienteexist || $usuarioexist){
if($pacienteexist){
$mensaje = array('ok'=>false,'mensaje'=>"El documento ya existe");
}else{
$mensaje = array('ok'=>false,'mensaje'=>"El email ya existe");
}
}
}
$json = json_encode($mensaje);
return new Response($json);
}
/**
* @Route("/validar_crearpaciente_register", name="validar_crearpaciente_register")
*/
public function validar_crearpaciente_register(Request $request){
$body=json_decode($request->getContent());
$tipo_documento=$body->tipo_documento;
$documento=$body->documento;
$email=$body->email;
$pacienteexist= $this->getDoctrine()->getRepository(Paciente::class)->findBy(['tipo_documento' => $tipo_documento,'documento' => $documento]);
$usuarioexist= $this->getDoctrine()->getRepository(Usuario::class)->findBy(['email' => $email]);
if($pacienteexist || $usuarioexist){
if($pacienteexist){
$mensaje = array('ok'=>false,'mensaje'=>"El documento ya existe");
}else{
$mensaje = array('ok'=>false,'mensaje'=>"El email ya existe");
}
}else{
if (!$this->isGranted('ROLE_MEDICO')){
$hoy = new \DateTime();
// $otp = rand();
$otp = random_int(100000, 999999);
$em = $this->getDoctrine()->getManager();
$otp_existe= $this->getDoctrine()->getRepository(Otpregister::class)->findOneBy(['email' => $email]);
if($otp_existe){
$otp_existe->setOtp($otp);
$otp_existe->setCreatedAt($hoy);
$em->persist($otp_existe);
$em->flush();
}else{
$nuevo_otp = new Otpregister();
$nuevo_otp->setEmail($email);
$nuevo_otp->setOtp($otp);
$nuevo_otp->setCreatedAt($hoy);
$em->persist($nuevo_otp);
$em->flush();
}
$html_email = $this->renderView('mailings/registro_pac_codverif.html.twig', [
'codigo' => $otp
]); //modificar el contenido de la vista del correo
$this->qi->sendMail("Registro Medintia: Código de verificación", $email, $html_email);
$mensaje = array('ok' => true);
}else{
$html_email = $this->renderView('mailings/registro-paciente-desdemedico.html.twig', [
]);
$this->qi->sendMail("Registro en Medintia", $email, $html_email);
$mensaje = array('ok' => true);
}
}
$json = json_encode($mensaje);
return new Response($json);
}
/**
* @Route("/validar_crearmedico_register", name="validar_crearmedico_register")
*/
public function validar_crearmedico_register(Request $request){
$body=json_decode($request->getContent());
$tipo_documento=$body->tipo_documento;
$documento=$body->documento;
$email=$body->email;
$medicoexist= $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['tipo_documento' => $tipo_documento, 'documento' => $documento]);
$usuarioexist= $this->getDoctrine()->getRepository(Usuario::class)->findBy(['email' => $email]);
if($medicoexist || $usuarioexist ){
if($medicoexist){
$mensaje = array('ok'=>false,'mensaje'=>"El documento ya está siendo usado");
}else{
$mensaje = array('ok'=>false,'mensaje'=>"El email ya existe");
}
}else{
$hoy = new \DateTime();
// $otp = rand();
$otp = random_int(100000, 999999);
$em = $this->getDoctrine()->getManager();
$otp_existe= $this->getDoctrine()->getRepository(Otpregister::class)->findOneBy(['email' => $email]);
if($otp_existe){
$otp_existe->setOtp($otp);
$otp_existe->setCreatedAt($hoy);
$em->persist($otp_existe);
$em->flush();
}else{
$nuevo_otp = new Otpregister();
$nuevo_otp->setEmail($email);
$nuevo_otp->setOtp($otp);
$nuevo_otp->setCreatedAt($hoy);
$em->persist($nuevo_otp);
$em->flush();
}
$html_email = $this->renderView('mailings/registro_med_codverif.html.twig', [
'codigo' => $otp
]); //modificar el contenido de la vista del correo
$this->qi->sendMail("Registro Medintia: Código de verificación", $email, $html_email);
$mensaje = array('ok' => true);
}
$json = json_encode($mensaje);
return new Response($json);
}
/**
* @Route("/validacion_otp", name="validacion_otp")
*/
public function validacion_otp(Request $request){
$body=json_decode($request->getContent());
$email=$body->email;
$otp=$body->otp;
$registro_otp= $this->getDoctrine()->getRepository(Otpregister::class)->findOneBy(['email' => $email]);
$otp_r=$registro_otp->getOtp();
// dd($otp_r, $otp);
if($otp_r == $otp ){
$mensaje = array('ok' => true);
}else{
$mensaje = array('ok'=>false,'mensaje'=>"El código no coincide.");
}
$json = json_encode($mensaje);
return new Response($json);
}
/**
* @Route("/nueva_atencion/{id}", name="nueva_atencion")
*/
public function nuevaAtencion(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
$paciente = $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);
$especialidades_medico = '';
if($perfilmedico)
$especialidades_medico_esp=[];
$especialidades_medico = $perfilmedico->getEspecialidades();
foreach( $especialidades_medico as $em) {
if(count($em->getSintomas()) >= 1){
$especialidades_medico_esp[] = $em;
}
}
$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', $id)
->orderBy('a.fecha', 'desc')
->getQuery()
->getResult();
$ultimasatenciones = $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', $id)
->setMaxResults(5)
->orderBy('a.fecha', 'desc')
->getQuery()
->getResult();
$ordenes = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('a')
->leftJoin('a.medico', 'm')
->leftJoin('m.usuario', 'u')
->leftJoin('m.especialidad', 'e')
->where('a.paciente = :pacienteid')
->setParameter('pacienteid', $id)
->orderBy('a.fecha', 'desc')
->getQuery()
->getResult();
$atenciones_formulas = $this->getDoctrine()->getRepository(AtencionMedicamento::class)->createQueryBuilder('d')
->select('a.id', 'a.recomendacion', 'a.fecha', 'e.nombre as especialidad', 'm.fotourl', 'm.id as medicoid', 'u.nombre', 'u.apellido', 'md.nombre as formula_descripcion', 'md.id as formula_codigo','a.id as atencionid',)
->leftJoin('d.atencion', 'a')
->leftJoin('a.medico', 'm')
->leftJoin('m.usuario', 'u')
->leftJoin('m.especialidad', 'e')
->leftJoin('d.medicamento', 'md')
->where('a.paciente = :pacienteid')
->setParameter('pacienteid', $id)
->orderBy('a.fecha', 'desc')
->getQuery()
->getArrayResult();
$especialidades = $this->getDoctrine()->getRepository(Especialidad::class)->findAll();
// $especialidades = $perfilmedico->getEspecialidades();
$especialidades_ids = [];
foreach( $especialidades as $e) {
$especialidades_ids[] = $e->getId();
}
$prediagnosticos_todos = $this->getDoctrine()->getRepository(Prediagnostico::class)->createQueryBuilder('p')
->select('e.id','e.nombre')
->leftJoin('p.especialidad', 'e')
->where('p.especialidad in (:esp)')
->setParameter('esp', $especialidades_ids)
->groupBy('e.id')
->getQuery()
->getArrayResult();
$url = $this->generateUrl('prediagnostico_directo',['userId'=>$paciente->getId(),"id"=>1], UrlGenerator::ABSOLUTE_URL);
return $this->render('medicos/nueva_atencion.html.twig', [
'paciente' => $paciente,
'perfilmedico' => $perfilmedico,
'atenciones' => $atenciones,
'ultimasatenciones' => $ultimasatenciones,
'ordenes' => $ordenes,
'especialidades_prediagnosticos' => $prediagnosticos_todos,
'atenciones_formulas' => $atenciones_formulas,
'url' => $url,
'especialidades_medico' => $especialidades_medico_esp
]);
}
}
return('no autorizado');
}
/**
* @Route("/listado_prediagnosticos/{id}", name="listado_prediagnosticos")
*/
public function listadoPrediagnosticos(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
$paciente = $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);
$especialidades_medico = '';
if($perfilmedico)
$especialidades_medico = $perfilmedico->getEspecialidades();
$especialidades = $this->getDoctrine()->getRepository(Especialidad::class)->findAll();
$especialidades_ids = [];
foreach( $especialidades as $e) {
$especialidades_ids[] = $e->getId();
}
$prediagnostico_activo = $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findBy(['vencido'=>false,'paciente' => $paciente,"medico"=>$perfilmedico],array("id"=>"desc"));
$prediagnosticos_todos = $this->getDoctrine()->getRepository(Prediagnostico::class)->createQueryBuilder('p')
->select('e.id','e.nombre')
->leftJoin('p.especialidad', 'e')
->where('p.especialidad in (:esp)')
->setParameter('esp', $especialidades_ids)
->groupBy('e.id')
->getQuery()
->getArrayResult();
$url = $this->generateUrl('prediagnostico_directo',['userId'=>$paciente->getId(),"id"=>1], UrlGenerator::ABSOLUTE_URL);
return $this->render('pacientes/mis_prediagnosticos.html.twig', [
'url' => $url,
'paciente' => $paciente,
'perfilmedico' => $perfilmedico,
'especialidades_prediagnosticos' => $prediagnosticos_todos,
'prediagnostico_activo' => $prediagnostico_activo,
'especialidades_medico' => $especialidades_medico
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/consulta_nueva/{id}", name="consulta_nueva")
* @Route("/consulta_actual/{id}", name="consulta_actual")
*/
public function consultaActual(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$entityManager = $this->getDoctrine()->getManager();
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id);
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$plantillas = $this->getDoctrine()->getRepository(Plantilla::class)->createQueryBuilder('p')
->select('p')
->Where("p.medico = :medico")
->setParameter('medico', $perfilmedico->getId())
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$prediagnostico_activo = $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findOneBy(['paciente' => $paciente, 'medico' => $perfilmedico, 'activo' => false],array("id"=>"desc"),1);
$route = $request->attributes->get('_route');
if($route === 'consulta_actual')
$atencion = $this->getDoctrine()->getRepository(Atencion::class)->findOneBy(['paciente' => $paciente],array("id"=>"desc"));
else
$atencion = new Atencion();
$form = $this->createForm(AtencionType::class,$atencion );
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$hoy = new \DateTime();
$fecha = DATE_FORMAT($hoy, 'Y-m-d');
$hora = DATE_FORMAT($hoy,'H:i:s');
$em = $this->getDoctrine()->getManager();
$atencion = $form->getData();
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$filenames = $request->request->get('filenames');
$fileurls = $request->request->get('fileurls');
$diagnosticos_ids_str = $request->request->get('diagnosticosids');
$paraclinicos_ids_str = $request->request->get('paraclinicosids');
$procedimiento_ids_str = $request->request->get('procedimientoids');
$remisiones_ids_str = $request->request->get('remisionesids');
$formulas_ids_str = $request->request->get('formulasids');
$terapias_ids_str = $request->request->get('terapiasids');
$imagenes_ids_str = $request->request->get('imagenesids');
$metricas_ids_str = $request->request->get('metricasids');
$incapacidad = $request->request->get('incapacidad');
$recomendaciones = $request->request->get('recomendaciones');
$atencion->setFecha(new \DateTime());
$atencion->setPaciente($paciente);
$atencion->setMedico($perfilmedico);
$atencion->setIncapacidad($incapacidad);
$atencion->setRecomendacion($recomendaciones);
if($filenames){
foreach($filenames as $key => $value) {
$nuevo_atencion_adjunto = new AtencionAdjunto();
$nuevo_atencion_adjunto->setNombre($value);
$nuevo_atencion_adjunto->setUrl($fileurls[$key]);
$atencion->addAdjunto($nuevo_atencion_adjunto);
}
}
$diagnosticosSugeridos=[];
if ($prediagnostico_activo) {
$diagnosticosSugeridos = $prediagnostico_activo->getPrediagnosticos()->getValues();
foreach ($diagnosticosSugeridos as $s){
$d = $s->getPrediagnostico()->getSugerencia();
$d->setVecesSugerido($d->getVecesSugerido()+1);
$em->persist($d);
$em->flush();
$diagnosticosSugeridos[]=$d;
}
$prediagnostico_activo->setActivo(false);
$em->persist($prediagnostico_activo);
}
$diagnosticos_ids = explode(";",$diagnosticos_ids_str);
if(strlen($diagnosticos_ids_str) > 0){
foreach($diagnosticos_ids as $diagnostico_id) {
$diagnostico = $this->getDoctrine()->getRepository(Diagnostico::class)->find($diagnostico_id);
$atencion->addDiagnostico($diagnostico);
if($this->objectinArray($diagnostico,$diagnosticosSugeridos)){
$diagnostico->setAciertos($diagnostico->getAciertos()+1);
$em->persist($diagnostico);
$em->flush();
}
}
}
if (strlen($procedimiento_ids_str) > 0) {
$procedimiento_ids = explode(";",$procedimiento_ids_str);
foreach($procedimiento_ids as $procedimiento_id) {
$procedimiento = $this->getDoctrine()->getRepository(Procedimiento::class)->find($procedimiento_id);
if($procedimiento) {
$atencion->addAutorizacione($procedimiento);
}
}
}
if (strlen($remisiones_ids_str ) > 0) {
$remisiones_ids = explode(";",$remisiones_ids_str );
foreach($remisiones_ids as $remision_id) {
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->find($remision_id);
if($especialidad) {
$atencion->addRemision($especialidad);
}
}
}
if (strlen($paraclinicos_ids_str) > 0) {
$paraclinico_ids = explode(";",$paraclinicos_ids_str);
foreach($paraclinico_ids as $paraclinico_id) {
$paraclinico = $this->getDoctrine()->getRepository(Paraclinico::class)->find($paraclinico_id);
if($paraclinico) {
$atencion->addParaclinico($paraclinico);
}
}
}
if (strlen($formulas_ids_str) > 0) {
$formulas_ids = explode(";",$formulas_ids_str);
foreach($formulas_ids as $formula_id) {
$formulas = $this->getDoctrine()->getRepository(Formula::class)->find($formula_id);
if($formulas) {
$atencion->addFormula($formulas);
}
}
}
if (strlen($terapias_ids_str) > 0) {
$terapias_ids = explode(";",$terapias_ids_str);
foreach($terapias_ids as $terapia_id) {
$terapias = $this->getDoctrine()->getRepository(Terapia::class)->find($terapia_id);
if($terapias) {
$atencion->addTerapium($terapias);
}
}
}
if (strlen($imagenes_ids_str) > 0) {
$imagenes_ids = explode(";",$imagenes_ids_str);
foreach($imagenes_ids as $imagenes_id) {
$imagenes = $this->getDoctrine()->getRepository(Imagen::class)->find($imagenes_id);
if($imagenes) {
$atencion->addImagene($imagenes);
}
}
}
$em->persist($atencion);
$em->flush();
if (strlen($formulas_ids_str) > 0) {
$formulas_ids = explode(";",$formulas_ids_str);
foreach($formulas_ids as $formula_id) {
$medicamento = $this->getDoctrine()->getRepository(Medicamento::class)->find($formula_id);
$recomendaciones = $request->request->get('formula-'.$formula_id);
if($medicamento) {
$atencion_medico = new AtencionMedicamento();
$atencion_medico->setAtencion($atencion);
$atencion_medico->setMedicamento($medicamento);
if(!$recomendaciones)
$recomendaciones = 'Sin recomendación';
$atencion_medico->setRecomendacion($recomendaciones);
$atencion_medico->setFecha($hoy);
$em->persist($atencion_medico);
$em->flush();
}
}
}
if (strlen($metricas_ids_str) > 0) {
$metricas_ids = explode(";",$metricas_ids_str);
foreach($metricas_ids as $metrica_id) {
$total = $request->request->get('metrica-total-'.$metrica_id);
$unidad_id = $request->request->get('metrica-unidad-'.$metrica_id);
$metrica = $this->getDoctrine()->getRepository(Metrica::class)->find($metrica_id);
$unidad = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(["id"=>$unidad_id]);
if($metrica && $total && $unidad_id) {
$metrica_atencion = new MetricaAtencion();
$metrica_atencion->setAtencion($atencion);
if(!$total)
$total = 0;
$metrica_atencion->setValor($total);
$metrica_atencion->setTipometrica($metrica);
$metrica_atencion->setUnidad($unidad);
$em->persist($metrica_atencion);
$em->flush();
}
}
}
if($atencion){
$atencion_medicamento = $this->getDoctrine()->getRepository(AtencionMedicamento::class)->findBy(['atencion' => $atencion]);
$edad = 0;
$edad_meses = 0;
$edad_dias = 0;
if ($paciente->getFechaNacimiento() != null) {
$diff = date_diff($paciente->getFechaNacimiento(), $hoy);
$edad = $diff->format("%y");
$edad_meses = $diff->format("%m");
$edad_dias = $diff->format("%d");
}
$html_email = $this->renderView('mailings/consulta_finalizada.html.twig', array(
'url' => $request->getSchemeAndHttpHost(),
'paciente' => $paciente,
'fecha' => $fecha,
'hora' => $hora,
'prediagnostico' => $prediagnostico_activo,
'atencion' => $atencion,
'atencion_medicamento' => $atencion_medicamento,
'edad' => $edad,
'edad_meses' => $edad_meses,
'edad_dias' => $edad_dias
));
$respuesta_email = $this->qi->sendMail("Consulta Finalizada", $paciente->getEmail(), $html_email);
}
return $this->redirectToRoute('pacientes');
}
$diagnosticos = $this->getDoctrine()->getRepository(Diagnostico::class)->createQueryBuilder('d')
->select('d' )
->orderBy('d.codigo', 'ASC')
->getQuery()
->getArrayResult();
$sugerencia_diagnosticas =[];
$interrogatorio_paciente = "";
$paraclinicos = null;
$imagenes = null;
$formulas = null;
$sintoma = null;
$ids_paraclinico='';
$ids_imagenes='';
$ids_formula='';
$cadena_interrogatorio = "";
if ($prediagnostico_activo) {
$sintoma = $prediagnostico_activo->getSintoma();
$prediagnosticos_resultados = $prediagnostico_activo->getPrediagnosticos();
foreach($prediagnosticos_resultados as $pr) {
$sugerencia_diagnosticas[] = $pr->getPrediagnostico()->getInterpretacion();
}
// dd($interpretaciones);
$interrogatorio = $prediagnostico_activo->getInterrogatorios();
$cadena_interrogatorio = "";
foreach($interrogatorio as $int) {
$pregunta = $int->getPregunta()->getEnunciado();
$respuesta = $int->getOpcion()->getValor();
$cadena_interrogatorio = $cadena_interrogatorio . $pregunta ." ". $respuesta ."\r";
}
$cadena_interrogatorio_formated = nl2br($cadena_interrogatorio);
$interrogatorio_paciente = "Line 1|nl2br Line 2";
$prediagnosticos_paciente = $prediagnostico_activo->getPrediagnosticos();
// dd($prediagnosticos_paciente);
foreach($prediagnosticos_paciente as $prediagnostico) {
$paraclinicos = $prediagnostico->getPrediagnostico()->getSintoma()->getParaclinicos();
$total_p = count($paraclinicos);
$t=1;
foreach ($paraclinicos as $paraclinico) {
if ($t == $total_p) {
$ids_paraclinico = $ids_paraclinico . $paraclinico->getId();
} else {
$ids_paraclinico = $ids_paraclinico . $paraclinico->getId() . ';';
}
$t++;
}
$formulas = $prediagnostico->getPrediagnostico()->getSintoma()->getFormulas();
$total_p = count($formulas);
$t=1;
foreach ($formulas as $formula) {
if ($t == $total_p) {
$ids_formula = $ids_formula . $formula->getId();
} else {
$ids_formula = $ids_formula . $formula->getId() . ';';
}
$t++;
}
$imagenes = $prediagnostico->getPrediagnostico()->getSintoma()->getImagenes();
$total_p = count($imagenes);
$t=1;
foreach ($imagenes as $imagen) {
if ($t == $total_p) {
$ids_imagenes = $ids_imagenes . $imagen->getId();
} else {
$ids_imagenes = $ids_imagenes . $imagen->getId() . ';';
}
$t++;
}
$formulas = $prediagnostico->getPrediagnostico()->getSintoma()->getFormulas();
$total_p = count($formulas);
$t=1;
foreach ($formulas as $formula) {
if ($t == $total_p) {
$ids_formula = $ids_formula . $formula->getId();
} else {
$ids_formula = $ids_formula . $formula->getId() . ';';
}
$t++;
}
$terapias = $prediagnostico->getPrediagnostico()->getSintoma()->getIdTerapia();
$total_p = count($terapias);
$t=1;
foreach ($terapias as $terapia) {
if ($t == $total_p) {
$ids_terapias = $ids_terapias . $terapia->getId();
} else {
$ids_terapias = $ids_terapias . $terapia->getId() . ';';
}
$t++;
}
}
}
$paraclinicos = $this->getDoctrine()->getRepository(Paraclinico::class)->createQueryBuilder('p')
->select('p' )
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$imagenes = $this->getDoctrine()->getRepository(Imagen::class)->createQueryBuilder('i')
->select('i' )
->orderBy('i.nombre', 'ASC')
->getQuery()
->getArrayResult();
$formulas = $this->getDoctrine()->getRepository(Formula::class)->createQueryBuilder('f')
->select('f')
->orderBy('f.descripcion', 'ASC')
->getQuery()
->getArrayResult();
$terapias = $this->getDoctrine()->getRepository(Terapia::class)->createQueryBuilder('t')
->select('t')
->orderBy('t.descripcion', 'ASC')
->getQuery()
->getArrayResult();
$metricas = $this->getDoctrine()->getRepository(Metrica::class)->createQueryBuilder('m')
->select('m')
->orderBy('m.nombre', 'ASC')
->getQuery()
->getArrayResult();
$procedimientos = $this->getDoctrine()->getRepository(Procedimiento::class)->createQueryBuilder('p')
->select('p')
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->createQueryBuilder('p')
->select('p')
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$medicamentos = $this->getDoctrine()->getRepository(Medicamento::class)->createQueryBuilder('p')
->select('p')
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$prediagnostico_activotf= '';
if($prediagnostico_activo)
$prediagnostico_activotf=$prediagnostico_activo->getActivo();
return $this->render('medicos/consulta_actual.html.twig', [
'pacienteid' => $id,
'paciente' => $paciente,
'form' => $form->createView(),
'perfilmedico' => $perfilmedico,
'plantillas' => $plantillas,
'prediagnostico_activo' => $prediagnostico_activo,
'prediagnostico_activotf' => $prediagnostico_activotf,
'sugerencia_diagnosticas' => $sugerencia_diagnosticas,
'interrogatorio_paciente' => $cadena_interrogatorio,
'sintoma' => $sintoma,
'diagnosticos' => $diagnosticos,
'paraclinicos' => $paraclinicos,
'imagenes' => $imagenes,
'formulas' => $formulas,
'idsparaclinico' => $ids_paraclinico,
'idsformula' => $ids_formula,
'idsimagenes' => $ids_imagenes,
'metricas' => $metricas,
'procedimientos' => $procedimientos,
'terapias' => $terapias,
'medicamentos' => $medicamentos,
'especialidad' => $especialidad
]);
}
}
return('no autorizado');
}
/**
* @Route("/consulta_diagnostico_activo/{id}", name="consulta_diagnostico_activo")
* @Route("/consulta_diagnostico/{id}/{id_prediagnostico}", name="consulta_diagnostico")
*/
public function consultaDiagnostico(Request $request, $id = null, $id_prediagnostico = null)
{
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$formuladmed=null;
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$entityManager = $this->getDoctrine()->getManager();
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id);
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
$route = $request->attributes->get('_route');
$sintoma = '';
$plantillas = $this->getDoctrine()->getRepository(Plantilla::class)->createQueryBuilder('p')
->select('p')
->Where("p.medico = :medico")
->setParameter('medico', $perfilmedico->getId())
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
if($route === 'consulta_diagnostico')
$prediagnostico_activo = $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findOneBy(['id' => $id_prediagnostico, 'paciente' => $paciente],array("id"=>"desc"),1);
else
$prediagnostico_activo = $this->getDoctrine()->getRepository(Prediagnosactivo::class)->findOneBy(['paciente' => $paciente, 'activo' => false],array("id"=>"desc"),1);
$prediagnostico_activo->setVisto('true');
$em->persist($prediagnostico_activo);
$em->flush();
$form = $this->createForm(AtencionType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$hoy = new \DateTime();
$fecha = DATE_FORMAT($hoy, 'Y-m-d');
$hora = DATE_FORMAT($hoy,'H:i:s');
$atencion = $form->getData();
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$filenames = $request->request->get('filenames');
$fileurls = $request->request->get('fileurls');
$diagnosticos_ids_str = $request->request->get('diagnosticosids');
$paraclinicos_ids_str = $request->request->get('paraclinicosids');
$procedimiento_ids_str = $request->request->get('procedimientoids');
$remisiones_ids_str = $request->request->get('remisionesids');
$formulas_ids_str = $request->request->get('formulasids');
$terapias_ids_str = $request->request->get('terapiasids');
$imagenes_ids_str = $request->request->get('imagenesids');
$metricas_ids_str = $request->request->get('metricasids');
$incapacidad = $request->request->get('incapacidad');
$recomendaciones = $request->request->get('recomendaciones');
$formulasagregadas_ids_str = $request->request->get('formulasagregadaids');
// dd($formulas_ids_str);
$atencion->setFecha(new \DateTime());
$atencion->setPaciente($paciente);
$atencion->setMedico($perfilmedico);
$atencion->setIncapacidad($incapacidad);
$atencion->setRecomendacion($recomendaciones);
if($filenames){
foreach($filenames as $key => $value) {
$nuevo_atencion_adjunto = new AtencionAdjunto();
$nuevo_atencion_adjunto->setNombre($value);
$nuevo_atencion_adjunto->setUrl($fileurls[$key]);
$atencion->addAdjunto($nuevo_atencion_adjunto);
}
}
$diagnosticosSugeridos=[];
if ($prediagnostico_activo) {
$diagnosticosSugeridos = $prediagnostico_activo->getPrediagnosticos()->getValues();
foreach ($diagnosticosSugeridos as $s){
$d = $s->getPrediagnostico()->getSugerencia();
$d->setVecesSugerido($d->getVecesSugerido()+1);
$em->persist($d);
$em->flush();
$diagnosticosSugeridos[]=$d;
}
$prediagnostico_activo->setActivo(false);
$prediagnostico_activo->setVencido(true);
$em->persist($prediagnostico_activo);
$em->flush();
}
$diagnosticos_ids = explode(";",$diagnosticos_ids_str);
if(strlen($diagnosticos_ids_str) > 0){
foreach($diagnosticos_ids as $diagnostico_id) {
$diagnostico = $this->getDoctrine()->getRepository(Diagnostico::class)->find($diagnostico_id);
$atencion->addDiagnostico($diagnostico);
if($this->objectinArray($diagnostico,$diagnosticosSugeridos)){
$diagnostico->setAciertos($diagnostico->getAciertos()+1);
$em->persist($diagnostico);
$em->flush();
}
}
}
if (strlen($procedimiento_ids_str) > 0) {
$procedimiento_ids = explode(";",$procedimiento_ids_str);
foreach($procedimiento_ids as $procedimiento_id) {
$procedimiento = $this->getDoctrine()->getRepository(Procedimiento::class)->find($procedimiento_id);
if($procedimiento) {
$atencion->addAutorizacione($procedimiento);
}
}
}
if (strlen($remisiones_ids_str ) > 0) {
$remisiones_ids = explode(";",$remisiones_ids_str );
foreach($remisiones_ids as $remision_id) {
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->find($remision_id);
if($especialidad) {
$atencion->addRemision($especialidad);
}
}
}
if (strlen($paraclinicos_ids_str) > 0) {
$paraclinico_ids = explode(";",$paraclinicos_ids_str);
foreach($paraclinico_ids as $paraclinico_id) {
$paraclinico = $this->getDoctrine()->getRepository(Paraclinico::class)->find($paraclinico_id);
if($paraclinico) {
$atencion->addParaclinico($paraclinico);
}
}
}
if (strlen($terapias_ids_str) > 0) {
$terapias_ids = explode(";",$terapias_ids_str);
foreach($terapias_ids as $terapia_id) {
$terapias = $this->getDoctrine()->getRepository(Terapia::class)->find($terapia_id);
if($terapias) {
$atencion->addTerapium($terapias);
}
}
}
if (strlen($imagenes_ids_str) > 0) {
$imagenes_ids = explode(";",$imagenes_ids_str);
foreach($imagenes_ids as $imagenes_id) {
$imagenes = $this->getDoctrine()->getRepository(Imagen::class)->find($imagenes_id);
if($imagenes) {
$atencion->addImagene($imagenes);
}
}
}
$em->persist($atencion);
$em->flush();
// dump($formulas_ids_str);
$formulas_ids_str = str_replace(';;',';',$formulas_ids_str);
$formulasagregadas_ids_str = str_replace(';;',';',$formulasagregadas_ids_str);
// dump($formulas_ids_str);
if (strlen($formulasagregadas_ids_str) > 0) {
$formulasagregadas_ids_str = explode(";",$formulasagregadas_ids_str);
foreach($formulasagregadas_ids_str as $formula_id) {
$formula = $this->getDoctrine()->getRepository(Formula::class)->find($formula_id);
if($formula) {
$atencion_medico = new AtencionMedicamento();
$atencion_medico->setAtencion($atencion);
$atencion_medico->setMedicamento($formula->getMedicamento());
$atencion_medico->setRecomendacion($formula->getDescripcion());
$atencion_medico->setFecha($hoy);
$em->persist($atencion_medico);
$em->flush();
}
}
}
if (strlen($formulas_ids_str) > 0) {
$formulas_ids = explode(";",$formulas_ids_str);
foreach($formulas_ids as $formula_id) {
// dump($formula_id);
$medicamento = $this->getDoctrine()->getRepository(Medicamento::class)->find($formula_id);
$recomendaciones = $request->request->get('formula-'.$formula_id);
if($medicamento) {
// dump('medicamento');
$atencion_medico = new AtencionMedicamento();
$atencion_medico->setAtencion($atencion);
$atencion_medico->setMedicamento($medicamento);
if(!$recomendaciones)
$recomendaciones = 'Sin recomendación';
$atencion_medico->setRecomendacion($recomendaciones);
$atencion_medico->setFecha($hoy);
$em->persist($atencion_medico);
$em->flush();
}else{
// dump('formula');
$formuladmed = $this->getDoctrine()->getRepository(Formula::class)->find($formula_id);
}
}
}
// dd($formuladmed);
if (strlen($metricas_ids_str) > 0) {
$metricas_ids = explode(";",$metricas_ids_str);
if(count($metricas_ids)>0){
foreach($metricas_ids as $metrica_id) {
$total = $request->request->get('metrica-total-'.$metrica_id);
$unidad_id = $request->request->get('metrica-unidad-'.$metrica_id);
$metrica = $this->getDoctrine()->getRepository(Metrica::class)->findOneBy(['id'=>$metrica_id]);
$unidad = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['id'=>$unidad_id]);
if($metrica && $total && $unidad_id) {
$metrica_atencion = new MetricaAtencion();
$metrica_atencion->setAtencion($atencion);
if(!$total)
$total = 0;
$metrica_atencion->setValor($total);
$metrica_atencion->setTipometrica($metrica);
$metrica_atencion->setUnidad($unidad);
$em->persist($metrica_atencion);
$em->flush();
}
}
}
}
if($atencion){
$atencion_medicamento = $this->getDoctrine()->getRepository(AtencionMedicamento::class)->findBy(['atencion' => $atencion]);
$edad = 0;
$edad_meses = 0;
$edad_dias = 0;
if ($paciente->getFechaNacimiento() != null) {
$diff = date_diff($paciente->getFechaNacimiento(), $hoy);
$edad = $diff->format("%y");
$edad_meses = $diff->format("%m");
$edad_dias = $diff->format("%d");
}
$html_email = $this->renderView('mailings/consulta_finalizada.html.twig', array(
'url' => $request->getSchemeAndHttpHost(),
'paciente' => $paciente,
'fecha' => $fecha,
'hora' => $hora,
'prediagnostico' => $prediagnostico_activo,
'atencion' => $atencion,
'atencion_medicamento' => $atencion_medicamento,
'edad' => $edad,
'edad_meses' => $edad_meses,
'edad_dias' => $edad_dias
));
$respuesta_email = $this->qi->sendMail("Consulta Finalizada", $paciente->getEmail(), $html_email);
}
return $this->redirectToRoute('pacientes');
}
$diagnosticos = '';
$sugerencia_diagnosticas =[];
$interrogatorio_paciente = "";
$ids_paraclinico='';
$ids_imagenes='';
$ids_formula='';
$ids_terapias='';
$cadena_interrogatorio = "";
$listado_paraclinicos = [];
$listado_imagenes = [];
$listado_formulas = [];
$listado_terapias = [];
if ($prediagnostico_activo) {
$sintoma = $prediagnostico_activo->getSintoma();
$prediagnosticos_resultados = $prediagnostico_activo->getPrediagnosticos();
foreach($prediagnosticos_resultados as $pr) {
$sugerencia_diagnosticas[] = $pr->getPrediagnostico()->getInterpretacion();
}
$interrogatorio = $prediagnostico_activo->getInterrogatorios();
$cadena_interrogatorio = "";
foreach($interrogatorio as $int) {
$pregunta = $int->getPregunta()->getEnunciado();
$respuesta = $int->getOpcion()->getValor();
$cadena_interrogatorio = $cadena_interrogatorio . $pregunta ." ". $respuesta ."\r";
}
$cadena_interrogatorio_formated = nl2br($cadena_interrogatorio);
$interrogatorio_paciente = "Line 1|nl2br Line 2";
$prediagnosticos_paciente = $prediagnostico_activo->getPrediagnosticos();
foreach($prediagnosticos_paciente as $prediagnostico) {
$paraclinicos = $prediagnostico->getPrediagnostico()->getSintoma()->getParaclinicos();
$total_p = count($paraclinicos);
$t=1;
foreach ($paraclinicos as $paraclinico) {
array_push($listado_paraclinicos, $paraclinico->getId());
if ($t == $total_p) {
$ids_paraclinico = $ids_paraclinico . $paraclinico->getId();
} else {
$ids_paraclinico = $ids_paraclinico . $paraclinico->getId() . ';';
}
$t++;
}
$formulas = $prediagnostico->getPrediagnostico()->getSintoma()->getFormulas();
$total_p = count($formulas);
$t=1;
foreach ($formulas as $formula) {
array_push($listado_formulas, $formula->getId());
if ($t == $total_p) {
$ids_formula = $ids_formula . $formula->getId();
} else {
$ids_formula = $ids_formula . $formula->getId() . ';';
}
$t++;
}
$imagenes = $prediagnostico->getPrediagnostico()->getSintoma()->getImagenes();
$total_p = count($imagenes);
$t=1;
foreach ($imagenes as $imagen) {
array_push($listado_imagenes, $imagen->getId());
if ($t == $total_p) {
$ids_imagenes = $ids_imagenes . $imagen->getId();
} else {
$ids_imagenes = $ids_imagenes . $imagen->getId() . ';';
}
$t++;
}
$terapias = $prediagnostico->getPrediagnostico()->getSintoma()->getIdTerapia();
$total_p = count($terapias);
$t=1;
foreach ($terapias as $terapia) {
array_push($listado_terapias, $terapia->getId());
if ($t == $total_p) {
$ids_terapias = $ids_terapias . $terapia->getId();
} else {
$ids_terapias = $ids_terapias . $terapia->getId() . ';';
}
$t++;
}
}
// dd($ids_paraclinico);
}
$paraclinicos = '';
$imagenes = $this->getDoctrine()->getRepository(Imagen::class)->createQueryBuilder('i')
->select('i')
->orderBy('i.nombre', 'ASC')
->getQuery()
->getArrayResult();
$formulas = $this->getDoctrine()->getRepository(Formula::class)->createQueryBuilder('f')
->select('f')
->orderBy('f.descripcion', 'ASC')
->getQuery()
->getArrayResult();
$terapias = $this->getDoctrine()->getRepository(Terapia::class)->createQueryBuilder('t')
->select('t')
->orderBy('t.descripcion', 'ASC')
->getQuery()
->getArrayResult();
$metricas = $this->getDoctrine()->getRepository(Metrica::class)->createQueryBuilder('m')
->select('m')
->orderBy('m.nombre', 'ASC')
->getQuery()
->getArrayResult();
$procedimientos = $this->getDoctrine()->getRepository(Procedimiento::class)->createQueryBuilder('p')
->select('p')
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$medicamentos = $this->getDoctrine()->getRepository(Medicamento::class)->createQueryBuilder('p')
->select('p')
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$especialidad = $this->getDoctrine()->getRepository(Especialidad::class)->createQueryBuilder('p')
->select('p')
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
// dd($prediagnostico_activo);
return $this->render('medicos/consulta_diagnostico.html.twig', [
'pacienteid' => $id,
'paciente' => $paciente,
'perfilmedico' => $perfilmedico,
'plantillas' => $plantillas,
'prediagnostico_activo' => $prediagnostico_activo,
'sugerencia_diagnosticas' => $sugerencia_diagnosticas,
'interrogatorio_paciente' => $cadena_interrogatorio,
'sintoma' => $sintoma,
'diagnosticos' => $diagnosticos,
'paraclinicos' => $paraclinicos,
'terapias' => $terapias,
'imagenes' => $imagenes,
'formulas' => $formulas,
'idsparaclinico' => $ids_paraclinico,
'idsformula' => $ids_formula,
'idsimagenes' => $ids_imagenes,
'metricas' => $metricas,
'procedimientos' => $procedimientos,
'listado_paraclinicos' => $listado_paraclinicos,
'listado_imagenes' => $listado_imagenes,
'listado_formulas' => $listado_formulas,
'medicamentos' => $medicamentos,
'especialidad' => $especialidad,
'form' => $form->createView(),
'formula' => $formuladmed
]);
}
}
return('no autorizado');
}
private function objectinArray($obj,$array){
foreach ($array as $a){
if($a->getId() == $obj->getId()){
return true;
}
}
return false;
}
/**
* @Route("/ordenes/{id}", name="ordenes")
* @Route("/ordenes/{id}/{buscar}", name="buscar_orden")
* @Route("/ordenes/{id}/{mesyear}", name="buscar_orden")
*/
public function ordenes(Request $request, $id=null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
if (!$id) {
if ($request->query->has('id')) {
$id = $request->query->get('id');
} else {
$id = null;
}
}
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar');
} else {
$buscar = null;
}
if ($request->query->has('mesyear')) {
$mesyear = $request->query->get('mesyear', 1);
} else {
$mesyear = null;
}
$um = $this->userManager;
$user = $um->findUserBy(array('uid' => $user->getUid() ));
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id);
$url_avatar_default = $this->qi->getSetting('avatar-default');
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$queried = false;
if ($buscar != null) {
if( $this->qi->filterInTypes($buscar) === false ) {
$ordenes = $this->getDoctrine()->getRepository(Orden::class)->createQueryBuilder('o')
->select('o')
->leftJoin('o.paciente', 'p')
->where('p.id = :paciente_id')
->AndWhere('o.nombre like :buscar')
->setParameter('paciente_id', $id)
->setParameter('buscar', '%' . $buscar . '%')
->getQuery()
->getArrayResult();
$queried = true;
}
}
if ($id) {
$ordenes = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('a')
->where('a.paciente = :pacienteid')
->leftJoin("a.medico","m")
->leftJoin("m.usuario","u")
->leftJoin("m.especialidades","e")
->setParameter('pacienteid', $id)
->orderBy('a.fecha', 'desc');
if ($mesyear != null) {
$ordenes->andWhere("a.fecha like :fecha")
->setParameter("fecha",$mesyear."%");
}
if ($buscar != null) {
if( $this->qi->filterInTypes($buscar) === false ) {
$ordenes->andWhere("u.nombre like :buscar or u.apellido like :buscar or e.nombre like :buscar")
->setParameter("buscar", "%" . $buscar . "%");
}
}
$ordenes=$ordenes->getQuery()
->getResult();
$queried = true;
}
$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($ordenes);
return $this->render('medicos/ordenes.html.twig', [
'perfilmedico' => $perfilmedico,
'paciente' => $paciente,
'ordenes' => $ordenes,
'total_ordenes' => count($ordenes),
'meses_periodo' => $meses_periodo,
'mesyear' => null
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/paciente_interna/{id}", name="paciente_interna")
*/
public function paciente(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id);
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$autorizacion = $this->getDoctrine()->getRepository('App:Autorizacionhistorial')->findOneBy(['paciente'=>$paciente,"medico"=>$perfilmedico], ['id' => 'DESC'], ['limit' => 1]);
$epss = $this->getDoctrine()->getRepository(Eps::class)->findBy([],['nombre' => 'ASC']);
$estado_civil = $this->getDoctrine()->getRepository(EstadoCivil::class)->findAll();
$escolaridad = $this->getDoctrine()->getRepository(Escolaridad::class)->findAll();
$especialidades_medico = '';
if($perfilmedico)
$especialidades_medico = $perfilmedico->getEspecialidades();
$hoy = new \DateTime();
$edad = '';
$edad_meses = '';
$edad_dias = '';
$atencion_editar_paciente = $this->getDoctrine()->getRepository(Atencion::class)->findBy(['medico' => $perfilmedico, 'paciente' => $paciente], ['id' => 'DESC'], ['limit' => 1]);
if ($paciente->getFechaNacimiento() != null) {
$diff = date_diff($paciente->getFechaNacimiento(), $hoy);
$edad = $diff->format("%y");
$edad_meses = $diff->format("%m");
$edad_dias = $diff->format("%d");
}
$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', $id)
->orderBy('a.id', 'desc')
->getQuery()
->getResult();
$atenciones_formulas = $this->getDoctrine()->getRepository(AtencionMedicamento::class)->createQueryBuilder('d')
->select('a.id', 'a.recomendacion', 'a.fecha', 'e.nombre as especialidad', 'm.fotourl', 'm.id as medicoid', 'u.nombre', 'u.apellido', 'md.nombre as formula_descripcion', 'md.id as formula_codigo','a.id as atencionid','d.recomendacion as recomendacion','md.nombre as medicamento_descripcion',)
->leftJoin('d.atencion', 'a')
->leftJoin('a.medico', 'm')
->leftJoin('m.usuario', 'u')
->leftJoin('m.especialidad', 'e')
->leftJoin('d.medicamento', 'md')
->where('a.paciente = :pacienteid')
->setParameter('pacienteid', $paciente->getId())
->orderBy('a.id', 'desc')
->getQuery()
->getArrayResult();
$ultimasatenciones = $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', $id)
->setMaxResults(5)
->orderBy('a.id', 'desc')
->getQuery()
->getResult();
$ordenes = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('a')
->leftJoin('a.medico', 'm')
->leftJoin('m.usuario', 'u')
->leftJoin('m.especialidad', 'e')
->where('a.paciente = :pacienteid')
->setParameter('pacienteid', $id)
->orderBy('a.fecha', 'desc')
->getQuery()
->getResult();
$especialidades = $this->getDoctrine()->getRepository(Especialidad::class)->findAll();
$hoy = new \DateTime();
if ($paciente->getFechaNacimiento() != null) {
$diff = date_diff($paciente->getFechaNacimiento(), $hoy);
$edad = $diff->format("%y");
}
$form = $this->createFormBuilder()
->add('tipo_documento', TextType::class)
->add('documento', TextType::class)
->add('nombres', TextType::class)
->add('apellidos', TextType::class)
->add('fecha_nacimiento', DateType::class, ['widget' => 'single_text', 'required' => false])
->add('eps', HiddenType::class)
->add('estatura', TextType::class, ['required' => false])
->add('sexo', HiddenType::class)
->add('estadocivilid', HiddenType::class)
->add('escolaridadid', HiddenType::class)
->add('adicional', TextType::class)
->add('ocupacion', TextType::class, ['required' => false])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
if ($data["eps"] != null && $data["eps"] > 0) {
$neweps = $this->getDoctrine()->getRepository('App:Eps')->find($data["eps"]);
$paciente->setEps($neweps);
}
if ($data["estadocivilid"] != null && $data["estadocivilid"] > 0) {
$new_estado_civil = $this->getDoctrine()->getRepository('App:EstadoCivil')->find($data["estadocivilid"]);
$paciente->setEstadoCivilId($new_estado_civil);
}
if ($data["escolaridadid"] != null && $data["escolaridadid"] > 0) {
$new_escolaridad = $this->getDoctrine()->getRepository('App:Escolaridad')->find($data["escolaridadid"]);
$paciente->setEscolaridadId($new_escolaridad);
}
$paciente->setNombre($data["nombres"]);
$paciente->setApellido($data["apellidos"]);
$paciente->setSexo($data["sexo"]);
$paciente->setEstatura($data["estatura"]);
$paciente->setFechaNacimiento($data["fecha_nacimiento"]);
$paciente->setOcupacion($data["ocupacion"]);
$paciente->setAdicional($data["adicional"]);
$em = $this->getDoctrine()->getManager();
$em->persist($paciente);
$em->flush();
return $this->redirectToRoute('paciente_interna', ['id' => $id]);
}
return $this->render('medicos/paciente_interna.html.twig', [
'paciente' => $paciente,
'atenciones' => $atenciones,
'perfilmedico' => $perfilmedico,
'edad' => $edad,
'form' => $form->createView(),
'epss' => $epss,
'estado_civil' => $estado_civil,
'autorizacion' => $autorizacion,
'ultimasatenciones' => $ultimasatenciones,
'especialidades_medico' => $especialidades_medico,
'escolaridad' => $escolaridad,
'atenciones_formulas' => $atenciones_formulas,
'ordenes' => $ordenes,
'atencion_editar_paciente' => $atencion_editar_paciente,
'edad_meses' => $edad_meses,
'edad_dias' => $edad_dias
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/plantillas", name="plantillas")
*/
public function plantillas(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$plantillas = $this->getDoctrine()->getRepository(Plantilla::class)->createQueryBuilder('p')
->select('p')
->Where("p.medico = :medico")
->setParameter('medico', $perfilmedico->getId())
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
// efectua el buscador
if ($buscar) {
$query = $this->getDoctrine()->getRepository('App:Plantilla')->createQueryBuilder('p')
->select('p' )
->Where("p.medico = :medico")
->setParameter('medico', $perfilmedico->getId());
$query
// ->leftJoin('p.eps', 'e')
->AndWhere("p.nombre like :buscar")
// ->AndWhere(':medicoid MEMBER OF p.medico')
// ->setParameter('medicoid', $perfilmedico->getId())
->setParameter('buscar', '%'.$buscar.'%');
$query->orderBy('p.nombre', 'asc');
$plantillas = $query->getQuery()->getResult();
}
return $this->render('medicos/plantillas.html.twig', [
'perfilmedico' => $perfilmedico,
'plantillas' => $plantillas,
'buscar' => $buscar,
'usuario' => $user,
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/eliminar_plantilla/{id}", name="eliminar_plantilla")
*/
public function eliminarPlantillas(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$entityManager = $this->getDoctrine()->getManager();
$plantilla = $this->getDoctrine()->getRepository(Plantilla::class)->find($id);
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
$entityManager->remove($plantilla);
$entityManager->flush();
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
return $this->redirectToRoute('plantillas');
}
}
return('no autorizado');
}
/**
* @Route("/eliminar_servicio/{id}", name="eliminar_servicio")
*/
public function eliminarServicios(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$entityManager = $this->getDoctrine()->getManager();
$servicio = $this->getDoctrine()->getRepository(Servicio::class)->find($id);
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
$servicio->setVisible(false);
$entityManager->persist($servicio);
$entityManager->flush();
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
return $this->redirectToRoute('catalogo');
}
}
return('no autorizado');
}
/**
* @Route("/eliminar_factura/{id}", name="eliminar_factura")
*/
public function eliminarFactura(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$entityManager = $this->getDoctrine()->getManager();
$factura = $this->getDoctrine()->getRepository(Factura::class)->find($id);
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
$factura->setVisible(false);
$entityManager->persist($factura);
$entityManager->flush();
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
return $this->redirectToRoute('listado_facturacion');
}
}
return('no autorizado');
}
/**
* @Route("/eliminar_convenio/{id}", name="eliminar_convenio")
*/
public function eliminarConvenios(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$entityManager = $this->getDoctrine()->getManager();
$convenio = $this->getDoctrine()->getRepository(Convenio::class)->find($id);
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
$convenio->setVisible(false);
$entityManager->persist($convenio);
$entityManager->flush();
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
return $this->redirectToRoute('convenios');
}
}
return('no autorizado');
}
/**
* @Route("/datos_paciente/{id}", name="datos_paciente")
*/
public function datosPacientes(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$entityManager = $this->getDoctrine()->getManager();
// dd($id);
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id);
// dd($paciente);
$form = $this->createFormBuilder()
->add('nombres', TextType::class)
->add('apellidos', TextType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// data is an array with "name", "email", and "message" keys
$data = $form->getData();
// dd($id);
// dd($data["nota"]);
$paciente = $this->getDoctrine()->getRepository(Paciente::class)->find($id);
// $atencion = $entityManager->getRepository(Atencion::class)->find($id);
$paciente->setApellido($data["apellidos"]);
$em = $this->getDoctrine()->getManager();
$em->persist($paciente);
$em->flush();
return $this->redirectToRoute('nueva_atencion', ['id' => $id]);
dd('ok');
}
return $this->render('medicos/datos_paciente.html.twig', [
'perfilmedico' => $perfilmedico,
'pacienteid' => $id,
'paciente' => $paciente,
'form' => $form->createView()
]);
}
}
return('no autorizado');
}
/**
* @Route("/antecedentes/{id}", name="antecedentes")
*/
public function antecedentes(Request $request, $id=null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$paciente = $this->getDoctrine()->getRepository('App:Paciente')->find($id);
return $this->render('medicos/antecedentes.html.twig', [
'perfilmedico' => $perfilmedico,
'paciente' => $paciente
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/medico_historias/{id}", name="medico_historias")
*/
public function historiasmedicos(Request $request, $id = null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$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', $id)
->orderBy('a.fecha', 'desc')
->getQuery()
->getArrayResult();
return $this->render('medicos/historias.html.twig', [
'perfilmedico' => $perfilmedico,
'atenciones' => $atenciones
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/medico_historia/{id}", name="medico_historia")
*/
public function medicohistoria(Request $request, $id=null)
{
$perfil=null;
$em = $this->getDoctrine()->getManager();
if($this->isGranted('ROLE_MEDICO')){
$perfil = 'ROLE_MEDICO';
}
if($this->isGranted('ROLE_PACIENTE')){
$perfil = 'ROLE_PACIENTE';
}
$user = $this->getUser();
if ($user) {
// colocar otra condicion para que un paciente pueda ver su historia clinic
if ($this->isGranted('ROLE_MEDICO') || $this->isGranted('ROLE_PACIENTE') ) {
$atencion = $this->getDoctrine()->getRepository(Atencion::class)->find($id);
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
//$perfilmedico = $atencion->getMedico();
$atencion->setVisto(1);
$em->persist($atencion);
$em->flush();
$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', 'a.imagenurl','a.nota')
->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();
$ordenes = $this->getDoctrine()->getRepository(Atencion::class)->createQueryBuilder('a')
->select('a')
->leftJoin('a.medico', 'm')
->leftJoin('m.usuario', 'u')
->leftJoin('m.especialidad', 'e')
->Where('a.id = :atencionid')
->setParameter('atencionid', $id)
->orderBy('a.fecha', 'desc')
->getQuery()
->getResult();
$atenciones_formulas = $this->getDoctrine()->getRepository(AtencionMedicamento::class)->createQueryBuilder('d')
->select( 'md.nombre as medicamento_descripcion', 'md.id as formula_codigo','d.recomendacion as recomendacion')
->leftJoin('d.atencion', 'a')
->leftJoin('d.medicamento', 'md')
->Where('a.id = :atencionid')
->setParameter('atencionid', $id)
->orderBy('d.id', 'desc')
->getQuery()
->getArrayResult();
$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();
$autorizacion = $this->getDoctrine()->getRepository('App:Autorizacionhistorial')->findOneBy(['atencion' => $id,'aprobado' => true],['id'=>'DESC']);
$defaultData = ['message' => 'Type your message here'];
$form = $this->createFormBuilder($defaultData)
->add('nota', TextareaType::class)
->add('save', SubmitType::class, [
'attr' => ['class' => 'btn bg-azul1 color-blanco rounded py-2 px-5']
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$atencion = $this->getDoctrine()->getRepository(Atencion::class)->find($id);
$atencion->setNota($data["nota"]);
// $em = $this->getDoctrine()->getManager();
$em->persist($atencion);
$em->flush();
if($autorizacion){
$autorizacion->setAprobado(false);
$em->persist($autorizacion);
$em->flush();
}
return $this->redirectToRoute('paciente_interna', ['id' => $atencion->getPaciente()->getId()]);
}
return $this->render('medicos/historia.html.twig', [
'perfil' => $perfil,
'atencion' => $atencion,
'perfilmedico' => $perfilmedico,
'path_historias' => 'medico_historia',
'metricas' => $metricas,
'adjuntos' => $adjuntos,
'ordenes' => $ordenes,
'atenciones_formulas' => $atenciones_formulas,
'autorizacion' => $autorizacion,
'form' => $form->createView()
]);
}
}else{
return $this->redirectToRoute('homepage');
}
}
/**
* @Route("/aseguradoras", name="aseguradoras")
*/
public function Aseguradora(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$query = $this->getDoctrine()->getRepository(Aseguradora::class)->createQueryBuilder('a')
->select('a' )
->where('a.visible = true')
->andWhere('a.medico = :medico')
->setParameter('medico', $perfilmedico->getId());
if ($buscar) {
$query->
andWhere('a.nombreapellido like :buscar')
->setParameter('buscar', '%'.$buscar.'%');
}
$query
->orderBy('a.nombreapellido', 'ASC')
->getQuery()
->getResult();
$aseguradoras = $query->getQuery()->getResult();
$tipos_documento = $this->getDoctrine()->getRepository(Tipodocumento::class)->createQueryBuilder('td')
->select('td' )
->where('td.visible = true')
->orderBy('td.orden', 'ASC')
->getQuery()
->getArrayResult();
$regimen_fiscal = $this->getDoctrine()->getRepository(Regimenfiscal::class)->createQueryBuilder('td')
->select('td' )
->where('td.visible = true')
->getQuery()
->getArrayResult();
$responsabilidad_fiscal = $this->getDoctrine()->getRepository(Responsabilidadfiscal::class)->createQueryBuilder('rf')
->select('rf' )
->where('rf.visible = true')
->getQuery()
->getArrayResult();
$codigo_ciuu = $this->getDoctrine()->getRepository(Codigociuu::class)->createQueryBuilder('c')
->select('c' )
->where('c.visible = true')
->getQuery()
->getArrayResult();
$ciudades = $this->getDoctrine()->getRepository(Ciudad::class)->createQueryBuilder('c')
->select('c.id', 'c.nombre' )
->where('c.visible = true')
->orderBy('c.nombre', 'ASC')
->getQuery()
->getArrayResult();
$naturalezas = $this->getDoctrine()->getRepository(Naturaleza::class)->createQueryBuilder('n')
->select('n.id', 'n.nombre' )
->where('n.visible = true')
->orderBy('n.nombre', 'ASC')
->getQuery()
->getArrayResult();
$naturalezas = $this->getDoctrine()->getRepository(Naturaleza::class)->createQueryBuilder('n')
->select('n.id', 'n.nombre' )
->where('n.visible = true')
->orderBy('n.nombre', 'ASC')
->getQuery()
->getArrayResult();
$clasificacion_aseguradora = $this->getDoctrine()->getRepository(Clasificacionaseguradora::class)->createQueryBuilder('n')
->select('n.id', 'n.nombre' )
->where('n.visible = true')
->orderBy('n.nombre', 'ASC')
->getQuery()
->getArrayResult();
return $this->render('medicos/aseguradora.html.twig', [
'perfilmedico' => $perfilmedico,
'aseguradoras' => $aseguradoras,
'tipos_documento' => $tipos_documento,
'regimen_fiscal' => $regimen_fiscal,
'responsabilidad_fiscal' => $responsabilidad_fiscal,
'codigo_ciuu' => $codigo_ciuu,
'ciudades' => $ciudades,
'naturalezas' => $naturalezas,
'clasificacion_aseguradora' => $clasificacion_aseguradora
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/convenios", name="convenios")
*/
public function Convenios(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 ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
$query = $this->getDoctrine()->getRepository(Convenio::class)->createQueryBuilder('c')
->select('c' )
->leftjoin('c.medico', 'm')
->leftjoin('c.administradora', 'a')
->where('m.id =:medicoid')
->setParameter('medicoid', $perfilmedico->getId())
->andWhere('c.visible = true');
if ($buscar) {
$query->
andWhere('c.fechafinal like :buscar or c.numerocontrato like :buscar or c.descripcion like :buscar or c.numpoliza like :buscar or c.codigocontrato like :buscar or a.nombre like :buscar or c.valor like :buscar ')
->setParameter('buscar', '%'.$buscar.'%');
}
$query
->getQuery()
->getResult();
$convenios = $query->getQuery()->getResult();
$estados_convenio = $this->getDoctrine()->getRepository(Estadoconvenio::class)->createQueryBuilder('ec')
->select('ec.id', 'ec.nombre' )
->orderBy('ec.nombre', 'ASC')
->getQuery()
->getArrayResult();
$modalidades_pago = $this->getDoctrine()->getRepository(Modalidadpago::class)->createQueryBuilder('mp')
->select('mp.id', 'mp.nombre' )
->orderBy('mp.nombre', 'ASC')
->getQuery()
->getArrayResult();
$administradoras = $this->getDoctrine()->getRepository(Administradora::class)->createQueryBuilder('a')
->select('a.id', 'a.nombre', 'a.regimen', 'a.codigo')
->where('a.visible = true')
->orderBy('a.nombre', 'ASC')
->getQuery()
->getArrayResult();
$planes_beneficio = $this->getDoctrine()->getRepository(Planbeneficio::class)->createQueryBuilder('p')
->select('p.id', 'p.nombre' )
->where('p.visible = true')
->orderBy('p.nombre', 'ASC')
->getQuery()
->getArrayResult();
$lista_precios = $this->getDoctrine()->getRepository(Listaprecio::class)->createQueryBuilder('l')
->select('l' )
->leftjoin('l.medico', 'm')
->where('m.id =:medicoid')
->setParameter('medicoid', $perfilmedico->getId())
->orderBy('l.nombre', 'ASC')
->getQuery()
->getResult();
return $this->render('medicos/convenios.html.twig', [
'perfilmedico' => $perfilmedico,
'convenios' => $convenios,
'estados_convenio' => $estados_convenio,
'administradoras' => $administradoras,
'modalidades_pago' => $modalidades_pago,
'planes_beneficio' => $planes_beneficio,
'lista_precios' => $lista_precios,
'buscar' => $buscar,
'usuario' => $user,
]);
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/catalogo", name="catalogo")
*/
public function Catalogo(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$um = $this->userManager;
$user = $um->findUserBy(array('uid' => $user->getUid() ));
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$url_avatar_default = $this->qi->getSetting('avatar-default');
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
$qb = $this->getDoctrine()->getRepository(Servicio::class)->createQueryBuilder('s');
$catalogo = $qb->select('s')
->leftjoin('s.medico', 'm')
->where('m.id =:medicoid')
->setParameter('medicoid', $perfilmedico->getId())
->andWhere('s.visible = true');
if ($buscar) {
$catalogo = $qb->andWhere('s.codigorips like :buscar or s.documento like :buscar or s.codigobarras like :buscar')
->setParameter('buscar', '%'.$buscar.'%');
}
$catalogo = $qb->orderBy('s.codigorips', 'ASC')
->getQuery()
->getResult();
$conceptos = $this->getDoctrine()->getRepository(Conceptoservicio::class)->createQueryBuilder('c')
->select('c' )
->orderBy('c.nombre', 'ASC')
->getQuery()
->getArrayResult();
$lista_iva = $this->getDoctrine()->getRepository(Iva::class)->createQueryBuilder('i')
->select('i' )
->orderBy('i.orden', 'ASC')
->getQuery()
->getArrayResult();
$lista_precios = $this->getDoctrine()->getRepository(Listaprecio::class)->createQueryBuilder('l')
->select('l' )
->leftjoin('l.medico', 'm')
->where('m.id =:medicoid')
->setParameter('medicoid', $perfilmedico->getId())
->orderBy('l.nombre', 'ASC')
->getQuery()
->getResult();
$paquetes = $this->getDoctrine()->getRepository(Paquete::class)->createQueryBuilder('p')
->select('p' )
->leftjoin('p.medico', 'm')
->where('m.id =:medicoid')
->setParameter('medicoid', $perfilmedico->getId())
->orderBy('p.nombre', 'ASC')
->getQuery()
->getResult();
// dd($catalogo);
return $this->render('medicos/catalogo.html.twig', [
'perfilmedico' => $perfilmedico,
'catalogo' => $catalogo,
'lista_iva' => $lista_iva,
'conceptos' => $conceptos,
'lista_precios' => $lista_precios,
'paquetes' => $paquetes,
'buscar' => $buscar,
'usuario' => $user,
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/facturacion/{id}", name="facturacion")
*/
public function Facturacion(Request $request, $id=null)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
if ($id === null) return $this->redirectToRoute('home_medicos');
$um = $this->userManager;
$user = $um->findUserBy(array('uid' => $user->getUid() ));
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$paciente = $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);
$facturas = $this->getDoctrine()->getRepository(Factura::class)->findBy(['paciente'=>$paciente,'medico'=>$perfilmedico]);
$facturas_items = "";
if($facturas)
$facturas_items = $this->getDoctrine()->getRepository(FacturaItem::class)->findBy(['factura'=> $facturas],['id'=>'DESC']);
return $this->render('medicos/facturacion.html.twig', [
'perfilmedico' => $perfilmedico,
'paciente' => $paciente,
'facturas' => $facturas,
'facturas_items' => $facturas_items,
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/listado_facturacion", name="listado_facturacion")
*/
public function ListadoFacturacion(Request $request)
{
$user = $this->getUser();
$queried = false;
if ($user) {
if ($request->query->has('buscar')) {
$buscar = $request->query->get('buscar', 1);
} else {
$buscar = null;
}
if ($buscar != null) {
if ($buscar == 'ultimasfacturas') {
$facturas = $this->getDoctrine()->getRepository(Factura::class)->createQueryBuilder('f')
->select('f','paciente')
->leftJoin('f.formapago', 'formapago')
->leftJoin('f.paciente', 'paciente')
->leftJoin('f.medico', 'medico')
->where('f.visible = true')
->getQuery()
->getArrayResult();
$queried = true;
} else {
$query = $this->getDoctrine()->getRepository('App:Factura')->createQueryBuilder('f')
->select('f','paciente');
$query
->leftJoin('f.paciente', 'paciente')
->leftJoin('f.formapago', 'metodopago')
->andWhere("f.numeracion like :buscar OR paciente.nombre like :buscar OR metodopago.nombre like :buscar OR f.fechavence like :buscar")
->setParameter('buscar', '%'.$buscar.'%');
$facturas = $query->getQuery()->getResult();
$queried = true;
}
}
if ($this->isGranted('ROLE_MEDICO')) {
$user = $this->userManager->findUserBy(array('uid' => $user->getUid() ));
$perfilmedico = $this->getDoctrine()->getRepository(Perfilmedico::class)->findOneBy(['usuario' => $user->getId()]);
if($queried == false){
$facturas = $this->getDoctrine()->getRepository(Factura::class)->findBy(['medico'=> $perfilmedico, 'visible' => true]);
}
$convenios = $this->getDoctrine()->getRepository(Convenio::class)->findAll();
$servicios = $this->getDoctrine()->getRepository(Servicio::class)->findAll();
$facturas_items = "";
if($facturas)
$facturas_items = $this->getDoctrine()->getRepository(FacturaItem::class)->findBy(['factura'=> $facturas],['id'=>'DESC']);
return $this->render('medicos/listado_facturacion.html.twig', [
'perfilmedico' => $perfilmedico,
'facturas' => $facturas,
'convenios' => $convenios,
'servicios' => $servicios,
'facturas_items' => $facturas_items,
'buscar' => $buscar,
'usuario' => $user,
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/crearFactura/{id}", name="crearFactura")
*/
public function crearFactura(Request $request, $id)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$um = $this->userManager;
$user = $um->findUserBy(array('uid' => $user->getUid() ));
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
$paciente = $this->getDoctrine()->getRepository(Paciente::class)->findOneBy(['id' => $id]);
// $convenios = $this->getDoctrine()->getRepository(Convenio::class)->find(['visible' => true]);
$convenios = $this->getDoctrine()->getRepository(Convenio::class)->createQueryBuilder('c')
->select('c')
->leftjoin('c.medico', 'm')
->where('m.id =:medicoid')
->andWhere('c.visible = true')
->setParameter('medicoid', $perfilmedico->getId())
// ->orderBy('s.codigorips', 'ASC')
->getQuery()
->getResult();
$servicios = $this->getDoctrine()->getRepository(Servicio::class)->createQueryBuilder('s')
->select('s')
->leftjoin('s.medico', 'm')
->where('m.id =:medicoid')
->andWhere('s.visible = true')
->setParameter('medicoid', $perfilmedico->getId())
->orderBy('s.codigorips', 'ASC')
->getQuery()
->getResult();
$lista_iva = $this->getDoctrine()->getRepository(Iva::class)->createQueryBuilder('i')
->select('i' )
->orderBy('i.orden', 'ASC')
->getQuery()
->getArrayResult();
$finalidad = $this->getDoctrine()->getRepository(Finalidad::class)->createQueryBuilder('f')
->select('f')
->orderBy('f.nombre', 'ASC')
->getQuery()
->getArrayResult();
$causa_externa = $this->getDoctrine()->getRepository(CausaExterna::class)->createQueryBuilder('f')
->select('f')
->orderBy('f.nombre', 'ASC')
->getQuery()
->getArrayResult();
$administradoras = $this->getDoctrine()->getRepository(Administradora::class)->createQueryBuilder('a')
->select('a.id', 'a.nombre' )
->where('a.visible = true')
->orderBy('a.nombre', 'ASC')
->getQuery()
->getArrayResult();
$metodos_pago = $this->getDoctrine()->getRepository(MetodoPago::class)->createQueryBuilder('mp')
->select('mp.id', 'mp.nombre' )
->where('mp.visible = true')
->orderBy('mp.nombre', 'ASC')
->getQuery()
->getArrayResult();
return $this->render('medicos/crearFactura.html.twig', [
'perfilmedico' => $perfilmedico,
'convenios' => $convenios,
'servicios' => $servicios,
'lista_iva' => $lista_iva,
'administradoras' => $administradoras,
'mp' => $metodos_pago,
'finalidad' => $finalidad,
'causa_externa' => $causa_externa,
'paciente_id' => $paciente->getId()
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/nuevaFactura", name="nuevaFactura")
*/
public function nuevaFactura(Request $request)
{
$user = $this->getUser();
if ($user) {
if ($this->isGranted('ROLE_MEDICO')) {
$um = $this->userManager;
$user = $um->findUserBy(array('uid' => $user->getUid() ));
$repository = $this->getDoctrine()->getRepository(Perfilmedico::class);
$perfilmedico = $repository->findOneBy(['usuario' => $user->getId()]);
return $this->render('medicos/nuevaFactura.html.twig', [
'perfilmedico' => $perfilmedico
]);
} else {
return $this->redirectToRoute('homepage');
}
}
return $this->redirectToRoute('homepage');
}
}