<?php
namespace App\Controller;
use App\Entity\Comercial;
use App\Entity\Factura;
use App\Repository\BancoRepository;
use App\Repository\ContratoRepository;
use App\Repository\FacturaGenericaRepository;
use App\Repository\FacturaRepository;
use App\Repository\SuministroRepository;
use App\Repository\TipoImpuestoRepository;
use App\Repository\TipoIvaRepository;
use Doctrine\ORM\EntityManagerInterface;
use Dompdf\Dompdf;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Csrf\TokenStorage\TokenStorageInterface;
use Symfony\Contracts\Cache\ItemInterface;
class MainController extends AbstractController
{
/**
* @Route("/", name="homepage")
*/
public function index(ContratoRepository $contratoRepository, FacturaRepository $facturaRepository, FacturaGenericaRepository $facturaGenericaRepository): Response
{
if( !$this->isGranted("ROLE_COMERCIAL") && !$this->isGranted("ROLE_FACTURACION") ){
try {
session_destroy();
}catch (\Exception $e){}
$this->createAccessDeniedException();
$this->redirectToRoute("login");
}
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$cliente=$this->getUser()->getCliente();
$facturasContrato=[];
if($cliente==null){
$contratos=[];
} else{
$contratos=$contratoRepository->findByCliente($cliente);
}
foreach ($contratos as $contrato){
$facturas=$facturaRepository->findBy(['contrato'=>$contrato]);
$genericas=$facturaGenericaRepository->findBy(['contrato'=>$contrato]);
$facturasFinal=array_merge($facturas,$genericas);
usort( $facturasFinal, function ($a,$b){
$aClass=$a->getClassName();
$bClass=$b->getClassName();
if($aClass==$bClass){
switch ($aClass){
case 'Factura':
return date_diff($a->getFechaLectura(),$b->getFechaLectura())->days;
break;
case 'FacturaGenerica':
return date_diff($a->getFechaEmision(),$b->getFechaEmision())->days;
break;
}
}else{
switch ($aClass){
case 'Factura':
return date_diff($a->getFechaLectura(),$b->getFechaEmision())->days;
break;
case 'FacturaGenerica':
return date_diff($a->getFechaEmision(),$b->getFechaLectura())->days;
break;
}
}
return date_diff($a->getFechaEmision(),$b->getFechaEmision());
} );
$facturasContrato[$contrato->getId()]=array_reverse($facturasFinal);
}
if( $this->isGranted('ROLE_ADMIN') ){
$totalContratos=count( $contratoRepository->findBy([ 'oculto'=>false ]) );
$totalActivos=count( $contratoRepository->findBy(['estado'=>1,'oculto'=>false]) );
$totalBaja=count( $contratoRepository->findBy(['estado'=>2,'oculto'=>false]) );
$totalPendienteActivacion=count( $contratoRepository->findBy(['estado'=>3,'oculto'=>false]) );
$totalPendienteFirma=count( $contratoRepository->findBy(['estado'=>6,'oculto'=>false]) );
$totalBorrador=count( $contratoRepository->findBy(['estado'=>8,'oculto'=>false]) );
}
return $this->render('main/index.html.twig',[
'contratos'=>$contratos,
'facturasContrato'=>$facturasContrato,
'totalContratos'=>$totalContratos??null,
'totalActivos'=>$totalActivos??null,
'totalBaja'=>$totalBaja??null,
'totalPendienteActivacion'=>$totalPendienteActivacion??null,
'totalPendienteFirma'=>$totalPendienteFirma??null,
'totalBorrador'=>$totalBorrador??null
]);
}
/*
* @Route("/mailing", name="mailing")
*/
/* public function mailing( MailerInterface $mailer)
{
$this->denyAccessUnlessGranted('ROLE_SUPERADMIN');
$logger = new Logger('factura_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/email.log', Logger::DEBUG));
try {
if ( ($_SERVER['APP_ENV']??'finkaluz')=='finkaluz' ){
$body=$this->renderView('email/finkaluz.mailing.html.twig');
$from='finkaluz@finkaluz.com';
$subject='PROMOCIÓN FINKALUZ';
$tos=explode( ',',file_get_contents(__DIR__ . '/../../temp/asdf') );
foreach ($tos as $to){
$message = (new Email())
->subject($subject)
->from($from)
->to($to)
->html($body)
->attachFromPath(__DIR__ . '/../../temp/Dossier.pdf');
//->attachFromPath(__DIR__ . '/../../temp/' . ($factura->getNumeroFactura() ?? 'factura_sin_número') . '.pdf');
$mailer->send($message);
}
}
$status='success';
}catch (\Exception $exception){
$status='error';
$logger->info($exception->getMessage());
} catch (TransportExceptionInterface $e) {
$status='error';
$logger->info($e->getMessage());
}
return $this->render('test/echo.html.twig',[
'echo'=>$status,
]);
}*/
/*
* @Route("/env", name="env")
*/
/*public function env(): Response
{
$this->denyAccessUnlessGranted('ROLE_SUPERADMIN');
return $this->render('main/test.html.twig',[
'echo'=>var_export($_ENV,1)
]);
}*/
/*
* @Route("/test", name="test")
*/
/*public function test(ContratoRepository $contratoRepository)
{
$this->denyAccessUnlessGranted('ROLE_SUPERADMIN');
$cache=new FilesystemAdapter();
$numeroContratos = $cache->getItem('numero_contratos');
$numeroContratos->set( count($contratoRepository->findAll()) );
$cache->save($numeroContratos);
$numeroContratos=$cache->getItem('numero_contratos')->get();
return $this->render('main/test.html.twig',[
'echo'=>''
]);
}*/
/*
* @Route("/test/{id}", name="test")
public function test(Factura $factura, Request $request, FacturaRepository $facturaRepository, BancoRepository $bancoRepository)
{
}
/*
* @Route("/update_producto_proveedor", name="update_producto_proveedor")
public function updateProductoProveedor(ContratoRepository $contratoRepository, ProductoProveedorRepository $productoProveedorRepository)
{
$contratos=$contratoRepository->findAll();
//$contratos=$contratoRepository->findBy(['id'=>647]);
$status='success';
try{
foreach ($contratos as $contrato){
$productoProveedorOld=$contrato->getProductoProveedor();
if($productoProveedorOld->getNombre()!='PERSONALIZADO'){
$producto=$contrato->getProducto();
$productoProveedorNew=new ProductoProveedor();
$proveedor=$productoProveedorOld->getProveedor();
$productoProveedorNew->setNombre('PERSONALIZADO');
$productoProveedorNew->setProveedor($proveedor);
$productoProveedorNew->setTarifa($producto->getTarifa());
$productoProveedorNew->setFacturaElectronica(true);
$productoProveedorNew->setPersonalizado(true);
$productoProveedorNew->setDuracion( date_interval_create_from_date_string('1 year') );
$contrato->setProveedor($proveedor);
$this->getDoctrine()->getManager()->persist($productoProveedorNew);
$contrato->setProductoProveedor($productoProveedorNew);
}
}
}catch (\Exception $exception){
$status=$exception->getMessage();
}
$this->getDoctrine()->getManager()->flush();
return $this->render('main/test.html.twig',[
'echo'=>$status
]);
}
*/
/*
* @Route("/test/{id}", name="test")
public function test(Factura $factura, Request $request, FacturaRepository $facturaRepository, BancoRepository $bancoRepository)
{
return $this->render('main/test.html.twig',[
'echo'=>$status
]);
}
*/
/*
* @Route("/buttons", name="buttons")
*
public function buttons()
{
return $this->render('main/buttons.html.twig');
}
/*
* @Route("/cards", name="cards")
*
public function cards()
{
return $this->render('main/cards.html.twig');
}
/**
* @Route("/color", name="color")
*
public function color()
{
return $this->render('main/color.html.twig');
}
/**
* @Route("/border", name="border")
*
public function border()
{
return $this->render('main/border.html.twig');
}
/**
* @Route("/animation", name="animation")
*
public function animation()
{
return $this->render('main/animation.html.twig');
}
/**
* @Route("/other", name="other")
*
public function other()
{
return $this->render('main/other.html.twig');
}
*/
}