<?php
namespace App\Controller;
use App\Entity\FallecidoTumba;
use App\Form\FallecidoTumbaType;
use App\Repository\FallecidoTumbaRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Tumba;
use App\Entity\ParametroFallecido;
use App\Repository\ZonaRepository;
use App\Repository\TumbaRepository;
use App\Entity\Zona;
use App\Entity\Fallecido;
use App\Repository\ParametroRepository;
#[Route('/fallecidotumba')]
class FallecidoTumbaController extends AbstractController {
#[Route('/', name: 'app_fallecido_tumba_index', methods: ['GET'])]
public function index(FallecidoTumbaRepository $fallecidoTumbaRepository): Response {
$tiposTumba = $this->getDoctrine()->getManager()->getRepository("App\Entity\TipoTumba")->findAll();
return $this->render('fallecido_tumba/index.html.twig', [
'fallecido_tumbas' => $fallecidoTumbaRepository->findAll(),
]);
}
#[Route('/new/{tumba}/{fallecido}', name: 'app_fallecido_tumba_new', methods: ['GET', 'POST'])]
public function new(Request $request, Tumba $tumba, Fallecido $fallecido = null, FallecidoTumbaRepository $fallecidoTumbaRepository, ParametroRepository $parametroRepository): Response {
$em = $this->getDoctrine()->getManager();
$parametros = $parametroRepository->findBy(['tipoTumba' => $tumba->getTipoTumba()->getId(), 'relacion' => 1]);
$datos = [];
foreach ($parametros as $parametro) {
$datos[$parametro->getNombre()] = "";
}
$fallecidoTumba = new FallecidoTumba();
$fallecidoTumba->setFallecido($fallecido);
$fallecidoTumba->setFecha(date_create('now'));
$form = $this->createForm(FallecidoTumbaType::class, $fallecidoTumba);
foreach ($datos as $key => $valor) {
$keynueva = \App\Util\Funciones::transformarNombre($key);
$form->add($keynueva, \Symfony\Component\Form\Extension\Core\Type\TextType::class, ['mapped' => false, 'label' => ucfirst($key) . ': ',
'attr' => [
'class' => 'form-control',
'placeholder' => 'Inserte ' . $key,
]]);
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fallecidoTumba->setTumba($tumba);
$actuales = $fallecidoTumbaRepository->findBy(['fallecido' => $fallecidoTumba->getFallecido(), 'actual' => true]);
foreach ($actuales as $actual) {
$actual->setActual(false);
$em->persist($actual);
}
$fallecidoTumba->setActual(true);
$em->persist($fallecidoTumba);
$em->flush();
foreach ($parametros as $parametro) {
$parametroFallecido = new ParametroFallecido();
$parametroFallecido->setValor($form->get(\App\Util\Funciones::transformarNombre($parametro->getNombre()))->getData());
$parametroFallecido->setFallecidoTumba($fallecidoTumba);
$parametroFallecido->setParametro($parametro);
$em->persist($parametroFallecido);
}
$em->flush();
return $this->redirect($this->generateUrl('app_fallecido_show', ['id' => $fallecidoTumba->getFallecido()->getId()]));
}
return $this->renderForm('fallecido_tumba/new.html.twig', [
'fallecido_tumba' => $fallecidoTumba,
'fallecido' => $fallecido,
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_fallecido_tumba_show', methods: ['GET'])]
public function show(FallecidoTumba $fallecidoTumba): Response {
return $this->render('fallecido_tumba/show.html.twig', [
'fallecido_tumba' => $fallecidoTumba,
]);
}
#[Route('/{id}/edit', name: 'app_fallecido_tumba_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, FallecidoTumba $fallecidoTumba, FallecidoTumbaRepository $fallecidoTumbaRepository): Response {
$em = $this->getDoctrine()->getManager();
$datos = [];
foreach ($fallecidoTumba->getParametroFallecidos() as $parametroFallecido) {
$datos[$parametroFallecido->getParametro()->getNombre()] = $parametroFallecido->getValor();
}
$form = $this->createForm(FallecidoTumbaType::class, $fallecidoTumba);
foreach ($datos as $key => $valor) {
$keynueva = \App\Util\Funciones::transformarNombre($key);
$form->add($keynueva, \Symfony\Component\Form\Extension\Core\Type\TextType::class, ['mapped' => false, 'label' => ucfirst($key) . ': ',
'attr' => [
'class' => 'form-control',
'placeholder' => 'Inserte ' . $key,
]]);
}
foreach ($datos as $key => $valor) {
$keynueva = \App\Util\Funciones::transformarNombre($key);
$form->get($keynueva)->setData($valor);
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fallecidoTumbaRepository->add($fallecidoTumba, true);
foreach ($fallecidoTumba->getParametroFallecidos() as $parametroFallecido) {
$parametroFallecido->setValor($form->get(\App\Util\Funciones::transformarNombre($parametroFallecido->getParametro()->getNombre()))->getData());
$em->persist($parametroFallecido);
}
$em->flush();
return $this->redirect($this->generateUrl('app_fallecido_show', ['id' => $fallecidoTumba->getFallecido()->getId()]));
}
return $this->renderForm('fallecido_tumba/edit.html.twig', [
'fallecido_tumba' => $fallecidoTumba,
'fallecido' => $fallecidoTumba->getFallecido(),
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_fallecido_tumba_delete', methods: ['POST'])]
public function delete(Request $request, FallecidoTumba $fallecidoTumba, FallecidoTumbaRepository $fallecidoTumbaRepository): Response {
if ($this->isCsrfTokenValid('delete' . $fallecidoTumba->getId(), $request->request->get('_token'))) {
$fallecidoTumbaRepository->remove($fallecidoTumba, true);
}
return $this->redirectToRoute('app_fallecido_tumba_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/zonas/{zona}/{fallecido}', name: 'app_fallecido_tumba_zona', methods: ['GET', 'POST'])]
public function tumbasPorZona(Request $request, Zona $zona, Fallecido $fallecido, TumbaRepository $tumbaRepository, \App\Repository\TipoTumbaRepository $tipoRepository): Response {
$tipos = $tipoRepository->findAll();
$datos = [];
foreach ($tipos as $tipo) {
$tumbas = $tumbaRepository->findBy(['zona' => $zona->getId(), 'tipoTumba' => $tipo]);
foreach ($tumbas as $tumba) {
$datos['tumbas'][$tipo->getNombre()][] = $tumba;
}
if (count($tumbas) > 0) {
$datos['tipo'][] = $tipo->getNombre();
}
}
return $this->renderForm('fallecido_tumba/tumbasZona.html.twig', [
'zona' => $zona,
'datos' => $datos,
'fallecido' => $fallecido,
]);
}
#[Route('/select/tumba/{fallecido}', name: 'app_fallecido_tumba_zona_select', methods: ['GET'])]
public function selectzona(ZonaRepository $zonaRepository, Fallecido $fallecido): Response {
$tiposTumba = $this->getDoctrine()->getManager()->getRepository("App\Entity\TipoTumba")->findAll();
return $this->render('fallecido_tumba/selectTumba.html.twig', [
'tipos_tumba' => $tiposTumba,
'fallecido' => $fallecido,
]);
}
#[Route('/zonas/{zona}/{fallecido}', name: 'app_fallecido_tumbazona_zonas', methods: ['GET'])]
public function zonas(Zona $zona = null, Fallecido $fallecido, ZonaRepository $zonaRepository): Response {
$zonas = $zonaRepository->findBy(['padre' => $zona]);
$tiposTumba = $this->getDoctrine()->getManager()->getRepository("App\Entity\TipoTumba")->findAll();
$datos = [];
foreach ($zonas as $zona) {
$datos[$zona->getId()]['eliminar'] = false;
if (count($zona->getTumbas()) == 0 && count($zona->getZonas()) == 0) {
$datos[$zona->getId()]['eliminar'] = true;
}
}
return $this->render('fallecido_tumba/zonas.html.twig', [
'zonas' => $zonas,
'datos' => $datos,
'tipos_tumba' => $tiposTumba,
'fallecido' => $fallecido,
]);
}
#[Route('/tumbas/{fallecido}', name: 'app_fallecido_tumba_tubmas_fallecido', methods: ['GET'])]
public function tumbasFallecido(Fallecido $fallecido, FallecidoTumbaRepository $fallecidoTumbaRepository): Response {
$fallecidoTumbas = $fallecidoTumbaRepository->findBy(['fallecido' => $fallecido->getId()], ['fecha' => 'DESC','id'=>'DESC']);
return $this->render('fallecido_tumba/tumbasFallecido.html.twig', [
'fallecido_tumbas' => $fallecidoTumbas,
]);
}
#[Route('/tumbas/fallecido/detalles/{id}', name: 'app_fallecido_tumba_tumbas_fallecido_detalles', methods: ['GET'])]
public function tumbasFallecidoDetalles(FallecidoTumba $fallecidoTumba): Response {
return $this->render('fallecido_tumba/fallecidoTumbaDetalles.html.twig', [
'parametros' => $fallecidoTumba->getParametroFallecidos(),
]);
}
#[Route('/fallecidos/tumba/{tumba}', name: 'app_fallecido_tumba_fallecidos', methods: ['GET'])]
public function fallecidosPorTumba(Tumba $tumba, \App\Service\FallecidosTumbaService $fallecidoTumbaService): Response {
return $this->render('fallecido_tumba/fallecidosPorTumba.html.twig', [
'fallecido_tumbas' => $fallecidoTumbaService->fallecidosPorTumba($tumba),
'tumba' => $tumba,
]);
}
}