<?php
namespace App\Controller;
use App\Entity\ComCasoComex;
use App\Entity\ComDocumentosSoporteCasoComex;
use App\Form\ComDocumentosSoporteCasoComexType;
use App\Repository\ComDocumentosSoporteCasoComexRepository;
use App\Services\DocumentHandler;
use App\Services\MailerCore;
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('/com/documentos/soporte/caso/comex')]
class ComDocumentosSoporteCasoComexController extends AbstractController
{
private $entityManager;
private $repository;
private $code = 0;
private $msj = "";
private $url = "";
private $html = "";
private $mailerCore;
public function __construct(EntityManagerInterface $entityManager, MailerCore $mailerCore)
{
$this->entityManager = $entityManager;
$this->mailerCore = $mailerCore;
}
#[Route('/com/documentos_caso_comex/new/{id}', name: 'app_com_documentos_soporte_caso_comex_new')]
public function new(Request $request, EntityManagerInterface $entityManager, $id = null, DocumentHandler $documentHandler): Response
{
$casoComex = $this->entityManager->getRepository(ComCasoComex::class)->find($id);
if (!$casoComex) {
throw $this->createNotFoundException('No se encontro el registro');
}
$comDocumentosSoporteCasoComex = new ComDocumentosSoporteCasoComex();
$form = $this->createForm(ComDocumentosSoporteCasoComexType::class, $comDocumentosSoporteCasoComex, [
'method' => 'POST',
'action' => $this->generateUrl('app_com_documentos_soporte_caso_comex_new', [
'id' => $casoComex->getId(),
])
]);
$form->handleRequest($request);
$files = $form->get('file')->getData(); //traemos el array de archivos ya que marcamos multiple en el type
if ($form->isSubmitted() && $form->isValid()) {
$ultimoDocumento = null;
if ($files) {
foreach ($files as $file) {
$rutaArchivo = $documentHandler->cargarArchivo($file, ComCasoComex::class);
if ($rutaArchivo['code'] === 'success') {
$documento = new ComDocumentosSoporteCasoComex();
$documento->setArchivos($rutaArchivo['msj']);
$documento->setComCasoComex($casoComex);
$documento->setCreateAt(new \DateTime('now'));
$documento->setCreateUser($this->getUser()->getUsername());
$documento->setUpdateAt(new \DateTime('now'));
$documento->setUpdateUser($this->getUser()->getUsername());
$entityManager->persist($documento);
$ultimoDocumento = $documento; // guardo el último para la redirección
} else {
$this->code = 'warning';
$this->msj = "Imposible cargar el archivo, {$rutaArchivo['msj']}";
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html
])
);
}
}
$entityManager->flush();
}
$this->code = 'success';
$this->msj = "Registro creado exitosamente";
$this->url = $this->generateUrl('app_com_caso_comex_new', [
'id' => $casoComex->getTerEmpresaCliente()->getId(),
'idC' => $casoComex->getId(),
]);
$this->html = '';
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html
])
);
}
return $this->renderForm('com_documentos_soporte_caso_comex/new.html.twig', [
'com_documentos_soporte_caso_comex' => $comDocumentosSoporteCasoComex,
'form' => $form,
]);
}
#[Route('/com/documentos_caso_comex/edit/{id}', name: 'app_com_documentos_soporte_caso_comex_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, ComDocumentosSoporteCasoComex $comDocumentosSoporteCasoComex, EntityManagerInterface $entityManager, DocumentHandler $documentHandler): Response
{
$casoComex = $comDocumentosSoporteCasoComex->getComCasoComex();
if (!$casoComex) {
throw $this->createNotFoundException('No se encontro el registro');
}
if (!$comDocumentosSoporteCasoComex) {
throw $this->createNotFoundException('Registro no encontrado');
}
//Definimos si es edicion para mostrar en el campo de file que solo pueda cargar un archivo el usuario
$esEdicion = true;
//Lo pasamos al formulario
$form = $this->createForm(ComDocumentosSoporteCasoComexType::class, $comDocumentosSoporteCasoComex, [
'esEdicion' => $esEdicion,
'method' => 'POST',
'action' => $this->generateUrl('app_com_documentos_soporte_caso_comex_edit', [
'id' => $comDocumentosSoporteCasoComex->getId(),
])
]);
$form->handleRequest($request);
//obtenemos el archivo que se subio
$file = $form->get('file')->getData();
if ($form->isSubmitted() && $form->isValid()) {
$comDocumentosSoporteCasoComex->setUpdateAt(new \DateTime('now'));
$comDocumentosSoporteCasoComex->setUpdateUser($this->getUser()->getUsername());
//Cargamos el archivo
if($file){
$rutaArchivo = $documentHandler->cargarArchivo($file, ComCasoComex::class);
if($rutaArchivo['code'] === 'success'){
$comDocumentosSoporteCasoComex->setArchivos($rutaArchivo['msj']);
$entityManager->persist($comDocumentosSoporteCasoComex);
}else {
$this->code = 'warning';
$this->msj = "Imposible cargar el archivo, {$rutaArchivo['msj']}";
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));
}
$entityManager->flush();
}
$this->code = 'success';
$this->msj = "Registro actualizado exitosamente";
$this->url = $this->generateUrl('app_com_caso_comex_new', [
'id' => $casoComex->getTerEmpresaCliente()->getId(),
'idC' => $casoComex->getId(),
]);
$this->html = '';
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html
])
);
}
return $this->renderForm('com_documentos_soporte_caso_comex/edit.html.twig', [
'com_documentos_soporte_caso_comex' => $comDocumentosSoporteCasoComex,
'form' => $form,
]);
}
#[Route('/com/documentos_caso_comex/delete/{id}', name: 'app_com_documentos_soporte_caso_comex_delete')]
public function delete(Request $request, ComDocumentosSoporteCasoComex $comDocumentosSoporteCasoComex, EntityManagerInterface $entityManager): Response
{
$casoComex = $comDocumentosSoporteCasoComex->getComCasoComex();
if (!$casoComex) {
throw $this->createNotFoundException('No se encontro el registro');
}
if (!$comDocumentosSoporteCasoComex) {
throw $this->createNotFoundException('Registro no encontrado');
}
$entityManager->remove($comDocumentosSoporteCasoComex);
$entityManager->flush();
$url = $this->generateUrl('app_com_caso_comex_new', [
'id' => $casoComex->getTerEmpresaCliente()->getId(),
'idC' => $casoComex->getId(),
]);
return new JsonResponse([
'code' => 'success',
'msj' => 'Registro eliminado exitosamente',
'url' => $url,
'html' => ''
]);
}
}