<?php
namespace App\Controller;
use App\Entity\Periodo;
use App\Entity\Ubicacion;
use App\Entity\Usuario;
use App\Form\UbicacionType;
use App\Form\UnidadFiltroType;
use http\Client\Curl\User;
use App\Repository\UbicacionRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/ubicacion')]
class UbicacionController extends AbstractController
{
public EntityManagerInterface $emi;
public function __construct(EntityManagerInterface $entityManager)
{
$this->emi = $entityManager;
}
#[Route('/', name: 'app_ubicacion_index', methods: ['GET', 'POST'])]
public function index(Request $request, UbicacionRepository $ubicacionRepository): Response #EntityManagerInterface $entityManager
{
# Se obtiene el nivel de acceso
$perfil = $request->getSession()->get('perfil');
$nivel = $perfil[3]["nivel"];
//$ubicacions = [];
# Si el nivel de acceso es 0 = "Sin acceso" entonces se retorna a página de inicio
if ($nivel == 0) {
$this->addFlash('danger', 'El acceso a agregar "Otros equipos" está restringido.');
return $this->redirectToRoute('homepage');
}
# Usuario que está autenticado
/** @var Usuario $user */
$user = $this->getUser();
# Formulario de filtro por unidad
(in_array($nivel, [2, 3])) ? $uni = true : $uni = false;
$form = $this->createForm(UnidadFiltroType::class, null, ['unidad' => $uni]);
$form->handleRequest($request);
if ($request->isMethod('POST')) {
if (empty($form['unidad']->getData())) {
$ubicacions = $ubicacionRepository->findAll();
} else {
$ubicacions = $ubicacionRepository->findBy(['unidad' => $form['unidad']->getData()]);
}
$data = [];
foreach ($ubicacions as $ubicacion) {
/*$activo = match ($ubicacion->getActivo()) {
"1" => '<span class="badge bg-gradient-yellow d-block">Activo</span>',
"0" => '<span class="badge bg-gradient-primary d-block">Inactivo</span>',
default => ""
};*/
if ($ubicacion->getActivo() == 1) {
$activo = "Si";
} else {
$activo = "No";
}
$ver = $this->generateUrl('app_ubicacion_show', ['idUbi' => $ubicacion->getIdUbi()]);
$editar = $this->generateUrl('app_ubicacion_edit', ['idUbi' => $ubicacion->getIdUbi()]);
$data[] = [
'idUbi' => $ubicacion->getIdUbi(),
'area' => $ubicacion->getArea(),
'unidad' => $ubicacion->getUnidad(),
'activo' => $activo,
/*'estatus' => $estatus,'usuario' => $ubicacion->getUsuario()->getNombre() . ' ' . $ubicacion->getUsuario()->getPapellido(),
'ubicacion' => substr($ubicacion->getUnidad()->getIdUni(), 3, 3) . ' - ' . $ubicacion->getUbicacion()->getArea(),*/
'ver' => $ver,
'editar' => $editar
];
}
return new JsonResponse($data, Response::HTTP_OK);
}
if ($nivel == 1) {
$ubicacions = $ubicacionRepository->findBy(['unidad' => $user->getUnidad()]);
}
if (in_array($nivel, [2, 3])) {
$ubicacions = $ubicacionRepository->findAll();
}
return $this->render('ubicacion/index.html.twig', [
//'url' => $this->generateUrl('app_ubicacion_index'),
'ubicacions' => $ubicacions,
'form' => $form->createView(),
'nivel' => $nivel,
]);
}
#[Route('/new', name: 'app_ubicacion_new', methods: ['GET', 'POST'])]
public function new(Request $request, EntityManagerInterface $entityManager): Response
{
$perfil = $request->getSession()->get('perfil');
$nivel = $perfil[3]["nivel"];
if ($nivel == 3) { //regresar a 3
$this->addFlash('danger', 'El acceso a agregar "Ubicaciones" está restringido.');
return $this->redirectToRoute('homepage');
}
if ($nivel ==4) { //regresar a 3
$this->addFlash('danger', 'El acceso a agregar "Ubicaciones" está restringido.');
return $this->redirectToRoute('homepage');
}
/** @var Usuario $user */
$user = $this->getUser();
$ubicacion = new Ubicacion();
$form = $this->createForm(UbicacionType::class, $ubicacion);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($nivel==2){
$ubicacion->setUnidad($ubicacion->getUnidad());
}else{
$ubicacion->setUnidad($user->getUnidad());
}
$entityManager->persist($ubicacion);
$entityManager->flush();
return $this->redirectToRoute('app_ubicacion_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('ubicacion/new.html.twig', [
'ubicacion' => $ubicacion,
'form' => $form,
'rol' => $user->getRol()->getIdRol()
]);
}
#[Route('/{idUbi}', name: 'app_ubicacion_show', methods: ['GET'])]
public function show(Ubicacion $ubicacion): Response
{
return $this->render('ubicacion/modalV.html.twig', [
'ubicacion' => $ubicacion,
]);
}
#[Route('/{idUbi}/edit', name: 'app_ubicacion_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Ubicacion $ubicacion, EntityManagerInterface $entityManager): Response
{
$form = $this->createForm(UbicacionType::class, $ubicacion);
//if ($periodo ->getActual() == 1){
$form->remove('unidad');
//}
$form->handleRequest($request);
/** @var Usuario $user */
$user = $this->getUser();
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->flush();
if ($ubicacion->getActivo() == 1) {
$activo = "Activo";
} else {
$activo = "Inactivo";
}
$data = array(
'idUbi' => $ubicacion->getIdUbi(),
'area' => $ubicacion->getArea(),
'unidad' => $ubicacion->getUnidad($ubicacion->setUnidad($user->getUnidad())),
'activo' => $activo,
'mensaje' => 'Se actualizo correctamente',
);
return new JsonResponse($data);
//return $this->redirectToRoute('app_ubicacion_index', [], Response::HTTP_SEE_OTHER);
}
if($form->isSubmitted() && !$form->isValid()){
$view = $this->renderForm('ubicacion/modal.html.twig', [
'ubicacion' => $ubicacion,
'form' => $form,
]);
$response = new JsonResponse(['form' => $view]);
$response->setStatusCode(Response::HTTP_BAD_REQUEST);
return $response;
}
return $this->renderForm('ubicacion/modal.html.twig', [
'ubicacion' => $ubicacion,
'form' => $form,
]);
}
#[Route('/{idUbi}', name: 'app_ubicacion_delete', methods: ['POST'])]
public function delete(Request $request, Ubicacion $ubicacion, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('delete'.$ubicacion->getIdUbi(), $request->request->get('_token'))) {
$entityManager->remove($ubicacion);
$entityManager->flush();
}
return $this->redirectToRoute('app_ubicacion_index', [], Response::HTTP_SEE_OTHER);
}
}