<?php
namespace App\Controller\Admin;
use App\Entity\Admin\Cliente;
use App\Form\Admin\ClienteType;
use App\Repository\Admin\ClienteRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RequestStack;
#[Route('/cliente')]
class ClienteController extends AbstractController {
#[Route('/', name: 'app_admin_cliente_index', methods: ['GET'])]
public function index(RequestStack $rs, ClienteRepository $clienteRepository): Response {
$session = $rs->getSession();
$filtro = unserialize($session->get('filtro.cliente'));
return $this->render('admin/cliente/index.html.twig', [
'clientes' => $clienteRepository->findByFiltro($filtro),
]);
}
#[Route('/new', name: 'app_admin_cliente_new', methods: ['GET', 'POST'])]
public function new(Request $request, ClienteRepository $clienteRepository): Response {
$cliente = new Cliente();
$form = $this->createForm(ClienteType::class, $cliente);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$cliente->setHabilitado(true);
$clienteRepository->add($cliente);
return $this->redirect($this->generateUrl('app_admin_cliente_show', ['id' => $cliente->getId()]));
}
return $this->renderForm('admin/cliente/form.html.twig', [
'cliente' => $cliente,
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_admin_cliente_show', methods: ['GET'])]
public function show(Cliente $cliente): Response {
$eliminable = 'disabled';
if (count($cliente->getContactos()) == 0 && count($cliente->getProyectos()) == 0) {
$eliminable = '';
}
return $this->render('admin/cliente/show.html.twig', [
'cliente' => $cliente,
'contactosCantidad' => count($cliente->getContactos()),
'proyectosCantidad' => count($cliente->getProyectos()),
'eliminable' => $eliminable,
]);
}
#[Route('/{id}/edit', name: 'app_admin_cliente_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Cliente $cliente, ClienteRepository $clienteRepository): Response {
$form = $this->createForm(ClienteType::class, $cliente);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$clienteRepository->add($cliente);
return $this->redirect($this->generateUrl('app_admin_cliente_show', ['id' => $cliente->getId()]));
}
return $this->renderForm('admin/cliente/form.html.twig', [
'cliente' => $cliente,
'form' => $form,
]);
}
#[Route('/{id}/delete', name: 'app_admin_cliente_delete', methods: ['GET', 'POST'])]
public function delete(Request $request, Cliente $cliente, ClienteRepository $clienteRepository): Response {
if (count($cliente->getContactos()) == 0 && count($cliente->getProyectos()) == 0) {
$clienteRepository->remove($cliente);
}
return $this->redirectToRoute('app_admin_cliente_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/estado/{id}', name: 'app_admin_cliente_estado', methods: ['GET', 'POST'])]
public function cambiarEstado(Cliente $cliente): Response {
$em = $this->getDoctrine()->getManager();
if ($cliente->getHabilitado()) {
$cliente->setHabilitado(false);
if (count($cliente->getContactos()) != 0) {
foreach ($cliente->getContactos() as $contacto) {
if (!is_null($contacto->getUsuario())) {
$contacto->getUsuario()->setHabilitado(false);
$em->persist($contacto->getUsuario());
}
}
}
} else {
$cliente->setHabilitado(true);
}
$em->persist($cliente);
$em->flush();
return $this->redirect($this->generateUrl('app_admin_cliente_index'));
}
}