<?php
namespace App\Controller;
use App\Entity\Preparacion;
use App\Entity\Agenda;
use App\Entity\HistoriaClinica;
use App\Entity\LogAgenda;
use App\Entity\Unidad;
use App\Form\PreparacionType;
use App\Form\BuscaPreparacionTypeNew;
use App\Form\BuscaPreparacionTypeNewUnidad;
use App\Repository\PreparacionRepository;
use App\Repository\PacienteRepository;
use App\Repository\AgendaRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\Security\Core\Security;
use App\Form\BuscaPreparacionType;
use App\Repository\HistoriaClinicaRepository;
/**
* @Route("/preparacion")
*/
class PreparacionController extends AbstractController
{
/**
* @var Security
*/
private $security;
public function __construct(Security $security)
{
date_default_timezone_set("America/Guayaquil");
$this->security = $security;
}
/**
* @Route("/", name="preparacion_index", methods={"GET","POST"})
*/
public function index(
PreparacionRepository $preparacionRepository,
AgendaRepository $agendaRepository,
PaginatorInterface $paginator,
Request $request
): Response
{
date_default_timezone_set("America/Guayaquil");
$agenda = new Agenda();
//$form = $this->createForm(BuscaPreparacionTypeNew::class, $agenda);
$form = $this->createForm(BuscaPreparacionTypeNewUnidad::class, $agenda);
$form->handleRequest($request);
// Datos del formulario
$unidad = $form->get('unidad')->getData();
$fecha = $form->get('inicio')->getData();
$fecha_hasta = $form->get('hasta')->getData();
$paciente = $form->get('nombre')->getData();
$cedula = $form->get('cedula')->getData();
// ===============================
// Manejo de fechas por sesión
// ===============================
$session = $request->getSession();
// ===============================
// Guardar filtros al hacer submit
// ===============================
if ($form->isSubmitted() && $form->isValid()) {
$session->set('fecha', $fecha);
$session->set('fecha_hasta', $fecha_hasta);
}else{
if ($fecha === null) {
$fecha = $session->get('fecha') ?? new \DateTime('now');
$form->get('inicio')->setData($fecha);
}
if ($fecha_hasta === null) {
$fecha_hasta = $session->get('fecha_hasta') ?? new \DateTime('now');
$form->get('hasta')->setData($fecha_hasta);
}
if ($unidad === null && $request->query->get('unidad')) {
$unidad = $this->getDoctrine()
->getRepository(Unidad::class)
->find($request->query->get('unidad'));
if ($unidad) {
$form->get('unidad')->setData($unidad);
}
}
}
// ===============================
// QUERY (SIN redirect)
// ===============================
$query = $agendaRepository->findByAdmisionadas_paciente_new_desc_2Unidad(
date_format($fecha, 'Y-m-d'),
date_format($fecha_hasta, 'Y-m-d'),
$paciente,
$cedula,
$unidad
);
// ===============================
// PAGINACIÓN
// 👉 si el form se envía → vuelve a página 1
// ===============================
$currentPage = 1;
if (!$form->isSubmitted()) {
$currentPage = $request->query->getInt('page', 1);
}
$agendas = $paginator->paginate(
$query,
$currentPage,
100,
[
'wrap-queries' => true,
'params' => [
'unidad' => $unidad ? $unidad->getId() : null,
]
]
);
return $this->render('preparacion/index.html.twig', [
'agendas' => $agendas,
'form' => $form->createView(),
'fecha' => $fecha,
'fecha_hasta' => $fecha_hasta,
'page' => $currentPage -1,
'unidad' => $unidad
]);
}
/**
* @Route("/search", name="preparacion_index_search", methods={"GET","POST"})
*/
public function index_search(PreparacionRepository $preparacionRepository, AgendaRepository $agendaRepository, PaginatorInterface $paginator, Request $request): Response
{
date_default_timezone_set("America/Guayaquil");
$agenda = new Agenda();
$form = $this->createForm(BuscaPreparacionTypeNew::class,$agenda);
$form->handleRequest($request);
$fecha = $form->get('inicio')->getData();
$fecha_hasta = $form->get('hasta')->getData();
$paciente = $form->get('nombre')->getData();//dd($paciente);
$cedula = $form->get('cedula')->getData();
if($paciente == null){
$paciente = $request->query->get('nombre');
if($paciente != null){
$form->get('nombre')->setData($paciente);
}
}
if($cedula== null){
$cedula= $request->query->get('cedula');
if($cedula!= null){
$form->get('cedula')->setData($cedula);
}
}
$page = 0;
if($request->query->get('page') != null ){
$page = $request->query->get('page');
$page = ($page - 1)*100;
}
if($fecha==null){
$session = $request->getSession();
$fecha = $session->get('fecha');
//dd($fecha);
if($fecha==null){
$fecha = new \DateTime("now");
}
$form->get('inicio')->setData($fecha);
}
if($fecha_hasta==null){
$session = $request->getSession();
$fecha_hasta = $session->get('fecha_hasta');
//dd($fecha);
if($fecha_hasta==null){
$fecha = new \DateTime("now");
}
$form->get('hasta')->setData($fecha_hasta);
}
if ($form->isSubmitted() && $form->isValid()) {
$session = $request->getSession();
$session->set('fecha',$fecha);
$session->set('fecha_hasta',$fecha_hasta);
return $this->redirectToRoute('preparacion_index');
}
//$query = $agendaRepository->findByAdmisionadas_paciente_new(date_format($fecha,'Y-m-d'),date_format($fecha_hasta,'Y-m-d'),$paciente,$cedula);
$query = $agendaRepository->findByAdmisionadas_paciente_new_desc_2(date_format($fecha,'Y-m-d'),date_format($fecha_hasta,'Y-m-d'),$paciente,$cedula);
//dd($query->getResult());
$agendas = $paginator->paginate(
$query,
$request->query->getInt('page',1),
100
);
return $this->render('preparacion/index.html.twig', [ 'agendas' => $agendas, 'form' => $form->createView(), 'page' => $page, 'fecha' => $fecha, 'fecha_hasta' => $fecha_hasta]);
}
/**
* @Route("/new", name="preparacion_new_old", methods={"GET","POST"})
*/
public function new(Request $request): Response
{
$preparacion = new Preparacion();
$form = $this->createForm(PreparacionType::class, $preparacion);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($preparacion);
$entityManager->flush();
return $this->redirectToRoute('preparacion_index');
}
return $this->render('preparacion/new.html.twig', [
'preparacion' => $preparacion,
'form' => $form->createView(),
]);
}
/**
* @Route("/preparacion/new/{agenda_id}", name="preparacion_new", methods={"GET"})
*/
public function preparacion_new(AgendaRepository $agendaRepository, $agenda_id, Request $request ): Response
{
$ip = $request->getClientIp();
$user = $this->security->getUser();
$agenda = $agendaRepository->find($agenda_id);
$preparacion = $agenda->getPreparacion();
if($preparacion!=null){
return $this->json(['estado' => 'error', 'preparacion' => 'Ya existe Preparacion']);
}
$preparacion = new Preparacion();
$entityManager = $this->getDoctrine()->getManager();
$preparacion->setEstado('1');
$preparacion->setIpCrea($ip);
$preparacion->setIpModifica($ip);
$preparacion->setUserCrea($user->getId());
$preparacion->setUserModifica($user->getId());
$preparacion->setFrecuenciaRespiratoria(0);
$preparacion->setSaturacionDeOxigeno(0);
$preparacion->setAgenda($agenda);
$entityManager->persist($preparacion);
$entityManager->flush();
return $this->json(['estado' => 'ok', 'preparacion' => $preparacion->getId()]);
}
/**
* @Route("/preparacion/new/ecografia/{agenda_id}", name="preparacion_new_ecografia", methods={"GET"})
*/
public function preparacion_new_ecografia(AgendaRepository $agendaRepository, $agenda_id, Request $request ): Response
{
$ip = $request->getClientIp();
$user = $this->security->getUser();
$agenda = $agendaRepository->find($agenda_id);
$preparacion = $agenda->getPreparacion();
if($preparacion!=null){
return $this->json(['estado' => 'error', 'preparacion' => 'Ya existe Preparacion']);
}
$preparacion = new Preparacion();
$entityManager = $this->getDoctrine()->getManager();
$preparacion->setEstado('2');
$preparacion->setIpCrea($ip);
$preparacion->setIpModifica($ip);
$preparacion->setEstatura(1);
$preparacion->setPeso(1);
$preparacion->setUserCrea($user->getId());
$preparacion->setUserModifica($user->getId());
$preparacion->setFrecuenciaRespiratoria('0');
$preparacion->setSaturacionDeOxigeno('0');
$preparacion->setAgenda($agenda);
$entityManager->persist($preparacion);
$entityManager->flush();
return $this->json(['estado' => 'ok', 'preparacion' => $preparacion->getId()]);
}
/**
* @Route("/{id}", name="preparacion_show", methods={"GET"})
*/
public function show(Preparacion $preparacion): Response
{
return $this->render('preparacion/show.html.twig', [
'preparacion' => $preparacion,
]);
}
/**
* @Route("/{id}/edit", name="preparacion_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Preparacion $preparacion, PacienteRepository $pacienteRepository): Response
{
$ip = $request->getClientIp();
$user = $this->security->getUser();
$form = $this->createForm(PreparacionType::class, $preparacion);
$form->handleRequest($request);
$idpaciente = $preparacion->getAgenda()->getPaciente()->getId();
$paciente = $pacienteRepository->find($idpaciente);
//dd($paciente->getGrupoSanguineo());
if ($form->isSubmitted() && $form->isValid()) {
$preparacion->setIpCrea($ip);
$preparacion->setIpModifica($ip);
$preparacion->setUserCrea($user->getId());
$preparacion->setUserModifica($user->getId());
$preparacion->setEstado('2');
$paciente->setGrupoSanguineo($preparacion->getGrupoSanquineo());
$preparacion->getAgenda()->setValidacion($form->get('validacion')->getData());
$this->getDoctrine()->getManager()->persist($paciente);
$this->getDoctrine()->getManager()->flush();
//return $this->redirectToRoute('preparacion_index');
return $this->redirectToRoute('preparacion_index', [
'unidad' => $preparacion->getAgenda()->getSala()->getUnidad() ? $preparacion->getAgenda()->getSala()->getUnidad()->getId() : null,
]);
}else{
$form->get('validacion')->setData($preparacion->getAgenda()->getValidacion());
}
if($paciente->getGrupoSanguineo()!=null){
//$form->get('grupo_sanquineo')->setData($paciente->getGrupoSanguineo());
}
return $this->render('preparacion/edit.html.twig', [
'preparacion' => $preparacion,
'form' => $form->createView(),
]);
}
/**
* @Route("/{id}", name="preparacion_delete", methods={"DELETE"})
*/
public function delete(Request $request, Preparacion $preparacion): Response
{
if ($this->isCsrfTokenValid('delete'.$preparacion->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($preparacion);
$entityManager->flush();
}
return $this->redirectToRoute('preparacion_index');
}
/**
* @Route("/enfermeria/coordinacion", name="preparacion_enfermeria_coordinacion", methods={"GET","POST"})
*/
public function enfermeria_coordinacion(HistoriaClinicaRepository $historiaClinicaRepository, AgendaRepository $agendaRepository, PaginatorInterface $paginator, Request $request): Response
{
$user = $this->security->getUser();
date_default_timezone_set("America/Guayaquil");
$agenda = new Agenda();
$form = $this->createForm(BuscaPreparacionTypeNew::class,$agenda);
$form->handleRequest($request);
$fecha = $form->get('inicio')->getData();
$hasta = $form->get('hasta')->getData();
$paciente = $form->get('nombre')->getData();
$cedula = $form->get('cedula')->getData();
$session = $request->getSession();
$session->set('paciente',null);
if($fecha==null){
$fecha = new \DateTime("now");
$form->get('inicio')->setData($fecha);
}
if($hasta==null){
$hasta = new \DateTime("now");
$form->get('hasta')->setData($hasta);
}
$query = $agendaRepository->findByAdmisionadas_paciente_new_enfermeria(date_format($fecha,'Y-m-d'),date_format($hasta,'Y-m-d'),$paciente,$cedula);
$agendas = $paginator->paginate(
$query,
$request->query->getInt('page',1),
100
);
return $this->render('preparacion/enfermeria_coo.html.twig', [ 'agendas' => $agendas, 'form' => $form->createView(), 'paciente' => $paciente ]);
}
/**
* @Route("/terapia/index", name="preparacion_terapia_index", methods={"GET","POST"})
*/
public function terapia_index(
PreparacionRepository $preparacionRepository,
AgendaRepository $agendaRepository,
PaginatorInterface $paginator,
Request $request
): Response
{
date_default_timezone_set("America/Guayaquil");
$agenda = new Agenda();
//$form = $this->createForm(BuscaPreparacionTypeNew::class, $agenda);
$form = $this->createForm(BuscaPreparacionTypeNewUnidad::class, $agenda);
$form->handleRequest($request);
// Datos del formulario
$unidad = $form->get('unidad')->getData();
$fecha = $form->get('inicio')->getData();
$fecha_hasta = $form->get('hasta')->getData();
$paciente = $form->get('nombre')->getData();
$cedula = $form->get('cedula')->getData();
// ===============================
// Manejo de fechas por sesión
// ===============================
$session = $request->getSession();
if ($fecha === null) {
$fecha = $session->get('fecha') ?? new \DateTime('now');
$form->get('inicio')->setData($fecha);
}
if ($fecha_hasta === null) {
$fecha_hasta = $session->get('fecha_hasta') ?? new \DateTime('now');
$form->get('hasta')->setData($fecha_hasta);
}
// ===============================
// Guardar filtros al hacer submit
// ===============================
if ($form->isSubmitted() && $form->isValid()) {
$session->set('fecha', $fecha);
$session->set('fecha_hasta', $fecha_hasta);
}
// ===============================
// QUERY (SIN redirect)
// ===============================
$query = $agendaRepository->findByAdmisionadas_paciente_new_desc_Terapia(
date_format($fecha, 'Y-m-d'),
date_format($fecha_hasta, 'Y-m-d'),
$paciente,
$cedula,
$unidad
);
// ===============================
// PAGINACIÓN
// 👉 si el form se envía → vuelve a página 1
// ===============================
$currentPage = 1;
if (!$form->isSubmitted()) {
$currentPage = $request->query->getInt('page', 1);
}
$agendas = $paginator->paginate(
$query,
$currentPage,
100
);
return $this->render('preparacion/index_terapia.html.twig', [
'agendas' => $agendas,
'form' => $form->createView(),
'fecha' => $fecha,
'fecha_hasta' => $fecha_hasta,
'page' => $currentPage -1,
]);
}
/**
* @Route("/terapia/lista/{id}", name="preparacion_terapia_lista", methods={"GET"})
*/
public function preparacion_terapia_lista(Agenda $agenda, Request $request ): Response
{
$ip = $request->getClientIp();
$user = $this->security->getUser();
$entityManager = $this->getDoctrine()->getManager();
$preparacion = $agenda->getPreparacion();
if($preparacion!=null){
}else{
$preparacion = new Preparacion();
$preparacion->setEstado('2');
$preparacion->setIpCrea($ip);
$preparacion->setIpModifica($ip);
$preparacion->setEstatura(1);
$preparacion->setPeso(1);
$preparacion->setUserCrea($user->getId());
$preparacion->setUserModifica($user->getId());
$preparacion->setFrecuenciaRespiratoria('0');
$preparacion->setSaturacionDeOxigeno('0');
$preparacion->setAgenda($agenda);
$entityManager->persist($preparacion);
}
$historiaclinica = $agenda->getHistoriaCLinica();
if($historiaclinica!=null){
}else{
$historiaclinica = new HistoriaClinica();
$historiaclinica->setEstado('2');
$historiaclinica->setPaciente($agenda->getPaciente());
$historiaclinica->setIpCrea($ip);
$historiaclinica->setIpModifica($ip);
$historiaclinica->setUserCrea($user->getId());
$historiaclinica->setUserModifica($user->getId());
$historiaclinica->setAgenda($agenda);
$entityManager->persist($historiaclinica);
}
$agenda->setDoctor($user);
$sala = $agenda->getSala();
$logagenda = new LogAgenda();
$logagenda->setSala($sala);
$logagenda->setIpCrea($ip);
$logagenda->setIpModifica($ip);
$logagenda->setEstadoAgenda(3);
$logagenda->setUserCrea($user->getId());
$logagenda->setUserModifica($user->getId());
$inicio = $agenda->getInicio();
$fin = $agenda->getFin();
$seguro = $agenda->getSeguro();
$especialidad = $agenda->getEspecialidad();
$doctor = $user;
$observacion = 'Terapia Atendida por Enfermería';
$descripcion = 'Terapia Atendida por Enfermería';
$logagenda->setInicio($inicio);
$logagenda->setFin($fin);
$logagenda->setObservacion($observacion);
$logagenda->setAgenda($agenda);
$logagenda->setSeguro($seguro);
$logagenda->setEspecialidad($especialidad);
$logagenda->setDoctor($doctor);
$logagenda->setDescripcion($descripcion);
$entityManager->persist($logagenda);
$entityManager->flush();
return $this->json(['estado' => 'ok', 'preparacion' => $preparacion->getId()]);
}
}