<?php
namespace App\Controller;
use App\Entity\Banco;
use App\Entity\Comercial;
use App\Entity\Factura;
use App\Entity\FacturaGenerica;
use App\Entity\Tool\Exporter;
use App\Entity\Tool\RedsysAPI;
use App\Entity\Tool\Validador;
use App\Form\ExportarFacturaType;
use App\Form\FacturaGenericaType;
use App\Form\FacturaType;
use App\Form\FiltrarFacturaLightType;
use App\Form\FiltrarFacturaType;
use App\Repository\BancoRepository;
use App\Repository\ContratoRepository;
use App\Repository\FacturaGenericaRepository;
use App\Repository\FacturaRepository;
use DateInterval;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\Expr\Math;
use Exception;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Knp\Snappy\Pdf;
use Dompdf\Dompdf;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use PhpOffice\PhpSpreadsheet\Writer\Xls;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\FileinfoMimeTypeGuesser;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
* @Route("/")
*/
class FacturaController extends AbstractController
{
/**
* @Route("/facturas", name="factura_index", methods={"GET"})
*/
public function indexAjax(): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
return $this->render('factura/indexAjax.html.twig', [
/*'facturas' => array_merge($facturaRepository->findAll(), $facturaGenericaRepository->findAll()),*/
]);
}
/**
* @Route("/otros-conceptos", name="facturaGenerica_index", methods={"GET"})
*/
public function genericaIndexAjax(): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
return $this->render('factura/indexAjax.html.twig', [
/*'facturas' => array_merge($facturaRepository->findAll(), $facturaGenericaRepository->findAll()),*/
]);
}
/**
* @Route("/facturas-old", name="factura_old", methods={"GET"})
*/
public function index(): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
return $this->render('factura/indexAjax.html.twig', [
/*'facturas' => array_merge($facturaRepository->findAll(), $facturaGenericaRepository->findAll()),*/
]);
}
/**
* @Route("/filtrar-facturas", name="factura_filtrar", methods={"GET"})
*/
public function latest(): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
$form=$this->createForm(FiltrarFacturaLightType::class);
return $this->render('factura/indexAjax.html.twig', ['filtrarFacturaForm'=>$form->createView()]);
}
/**
* @Route("/facturas-devueltas", name="factura_devueltas", methods={"GET"})
*/
public function devueltas(): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
return $this->render('factura/indexAjax.html.twig', []);
}
/**
* @Route("/rentabilidad", name="rentabilidad", methods={"POST","GET"})
*/
public function rentabilidad(FacturaRepository $facturaRepository, FacturaGenericaRepository $facturaGenericaRepository, Request $request): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
$form=$this->createForm(FiltrarFacturaType::class);
$form->handleRequest($request);
$formSubmitted=false;
$facturas=[];
$facturasGenericas=[];
$facturado=0;
$coste=0;
$pagado=0;
$devuelto=0;
$pendiente=0;
$beneficio=0;
if($form->isSubmitted() && $form->isValid()){
$formSubmitted=true;
$fechaEmisionFrom=$form->get('fechaEmisionFrom')->getData();
$fechaEmisionTo=$form->get('fechaEmisionTo')->getData();
$fechaLecturaFrom=$form->get('fechaLecturaFrom')->getData();
$fechaLecturaTo=$form->get('fechaLecturaTo')->getData();
$fechaCobroFrom=$form->get('fechaCobroFrom')->getData();
$fechaCobroTo=$form->get('fechaCobroTo')->getData();
$pagada=$form->get('pagada')->getData();
$tipo=$form->get('tipo')->getData();
$estadoCompraFactura=$form->get('estadoCompraFactura')->getData();
if($tipo=='todas' or $tipo=='suministro'){
$facturas=$facturaRepository->findByFilter(
$fechaEmisionFrom,
$fechaEmisionTo,
$fechaLecturaFrom,
$fechaLecturaTo,
$fechaCobroFrom,
$fechaCobroTo,
$pagada,
$estadoCompraFactura
);
foreach ($facturas as $factura){
$totalCompra=$factura->getTotalCompra();
$estdoCompra=$factura->getEstadoCompra();
$facturado+=$factura->getTotalFactura();
$coste+=$totalCompra;
if($estdoCompra !== null){
switch($estdoCompra->getNombre()){
case 'Pendiente':
$pendiente+=$totalCompra;
break;
case 'Devuelta':
$devuelto+=$totalCompra;
break;
case 'Pagada':
$pagado+=$totalCompra;
}
}
}
}
if ($fechaLecturaFrom==null and $fechaLecturaTo==null and $fechaCobroFrom==null and $fechaCobroTo==null and $estadoCompraFactura==null and ($tipo=='todas' or $tipo=='otros')){
$facturasGenericas=$facturaGenericaRepository->findByFilter(
$fechaEmisionFrom,
$fechaEmisionTo,
$pagada
);
foreach ($facturasGenericas as $factura){
$facturado+=$factura->getTotalFactura();
}
}
$beneficio=$facturado-$coste;
}
return $this->render('factura/rentabilidad.html.twig', [
'filtrarFacturaForm' => $form->createView(),
'formSubmitted'=>$formSubmitted,
'facturas' => array_merge($facturas, $facturasGenericas),
'facturado'=>$facturado,
'coste'=>$coste,
'pendiente'=>$pendiente,
'pagado'=>$pagado,
'devuelto'=>$devuelto,
'beneficio'=>$beneficio
]);
}
/*
* @Route("facturas/new", name="factura_new", methods={"GET","POST"})
public function new(Request $request): Response
{
$factura = new Factura();
$form = $this->createForm(FacturaType::class, $factura);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($factura);
$entityManager->flush();
return $this->redirectToRoute('factura_index');
}
return $this->render('factura/new.html.twig', [
'factura' => $factura,
'form' => $form->createView(),
]);
}
*/
/**
* @Route("/facturas/exportar", name="factura_exportar", methods={"POST","GET"})
*/
public function export(Request $request, FacturaRepository $facturaRepository, FacturaGenericaRepository $facturaGenericaRepository): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$form = $this->createForm(ExportarFacturaType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
switch ( $form->get('tipoFactura')->getData() ){
case 2:
$facturas=$facturaRepository->findByExportForm($form);
break;
case 3:
$facturas=$facturaGenericaRepository->findByExportForm($form);
break;
default:
$facturas=array_merge($facturaRepository->findByExportForm($form), $facturaGenericaRepository->findByExportForm($form));
break;
}
$exporter=new Exporter( $facturas );
$file=$exporter->createFactusolFacturaXls();
return new BinaryFileResponse($file);
}else{
return $this->render('factura/exportar.html.twig', [
'form'=>$form->createView(),
]);
}
}
/**
* @Route("factura/{id}", name="factura_show", methods={"GET"})
*/
public function show(Factura $factura, FacturaRepository $facturaRepository, BancoRepository $bancoRepository, EntityManagerInterface $entityManager): Response
{
if(
$factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
){
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
}
setlocale(LC_TIME, "spanish");
$facturas=$facturaRepository->findBy(['contrato'=>$factura->getContrato()], ['fechaLectura'=>'ASC']);
$tarifa=$factura->getTarifa();
$entidad=$bancoRepository->findByCuenta($factura->getCcc());
$consumoAcumulado='0';
$consumoMedio='0';
$datosGrafica=[];
$ultimaFecha='';
$factura->calcularTotal();
if($tarifa->getTipoTarifa()=='Electricidad'){
/*if($tarifa=='2.0A' || $tarifa=='2.1A'){
$periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1;
$totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
$totalEnergia=$totalEnergiaP1;
$subtotal=round($totalEnergia+$totalPotencia,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
}
elseif($tarifa=='2.0DHA' || $tarifa=='2.1DHA'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1;
$totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP3=round($factura->getConsumoP3()*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP3;
$subtotal=round($totalEnergia+$totalPotencia,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
}
elseif($tarifa=='2.0DHS' || $tarifa=='2.1DHS'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1;
$totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($factura->getConsumoP2()*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($factura->getConsumoP3()*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
$subtotal=round($totalEnergia+$totalPotencia,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if($factura===$facturas[0]){
$consumoMedio=$factura->getTotalFactura();
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$factura->getFechaLectura()->getTimestamp()) )),
$factura->getConsumoP1(),
$factura->getConsumoP2(),
$factura->getConsumoP3()
];
$ultimaFecha=$factura->getFechaLectura();
$consumoAcumulado=$factura->getConsumo();
}
else{
$indiceFactura=array_search($factura, $facturas);
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
$facturas[$i]->getConsumoP2(),
$facturas[$i]->getConsumoP3()
];
$ultimaFecha=$facturas[$i]->getFechaLectura();
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
$facturas[$n]->getConsumoP2(),
$facturas[$n]->getConsumoP3()
];
}
$consumoMedio=$consumoMedio/12;
$ultimaFecha=$factura->getFechaLectura();
}
}
while( count($datosGrafica)<12 ){
$ultimaFecha = date_add($ultimaFecha, date_interval_create_from_date_string('1 month'));
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$ultimaFecha->getTimestamp()) )),
0,
0,
0
];
}
//Return
return $this->render('factura/factura.html.twig', [
'factura' => $factura,
'vencimientoFactura'=>date_create(),
'finContrato'=>$contrato->getFechaFin(),
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergiaP3'=>$totalEnergiaP3,
'totalEnergia'=>$totalEnergia,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'datosGrafica'=>$datosGrafica
]);
}
else*/
if($tarifa=='3.0A' || $tarifa=='3.1A'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
$consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
$consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
$reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
$reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
$excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
$excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
}
else{
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1();
$consumoP2Facturado=$factura->getConsumoP2();
$consumoP3Facturado=$factura->getConsumoP3();
$consumoP4Facturado=$factura->getConsumoP4();
$consumoP5Facturado=$factura->getConsumoP5();
$consumoP6Facturado=$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
$potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
$potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
$totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
$totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
$totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
$totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
$reactivaP1=$factura->getReactivaP1();
$reactivaP2=$factura->getReactivaP2();
$reactivaP3=$factura->getReactivaP3();
$reactivaP4=$factura->getReactivaP4();
$reactivaP5=$factura->getReactivaP5();
$reactivaP6=$factura->getReactivaP6();
if($reactivaP1!=0)
$excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
else
$excesoReactivaP1=0;
if($reactivaP2!=0)
$excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
else
$excesoReactivaP2=0;
if($reactivaP3!=0)
$excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
else
$excesoReactivaP3=0;
if($reactivaP4!=0)
$excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
else
$excesoReactivaP4=0;
if($reactivaP5!=0)
$excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
else
$excesoReactivaP5=0;
if($reactivaP6!=0)
$excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
else
$excesoReactivaP6=0;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
if($excesoReactivaP3<0)
$excesoReactivaP3=0;
if($excesoReactivaP4<0)
$excesoReactivaP4=0;
if($excesoReactivaP5<0)
$excesoReactivaP5=0;
if($excesoReactivaP6<0)
$excesoReactivaP6=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
$importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
$importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
$importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//throw $this->createNotFoundException('No se ha encontrado la factura');
}
//Grafica
$indiceFactura=array_search($factura, $facturas);
$arrayP=[false,false,false,false,false,false];
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
$ultimaFecha=$facturas[$i]->getFechaLectura();
$tarifaI=$facturas[$i]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
$facturas[$i]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}else*/
switch( $tarifaI->getNombre() ){
case '3.0A': case '3.1A':
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
$facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
$facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
0,
0,
0
];
break;
default:
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()??0,
$facturas[$i]->getConsumoP2()??0,
$facturas[$i]->getConsumoP3()??0,
$facturas[$i]->getConsumoP4()??0,
$facturas[$i]->getConsumoP5()??0,
$facturas[$i]->getConsumoP6()??0,
];
break;
}
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
$numeroP=count( array_filter($arrayP) );
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$facturas[$n]->getConsumo();
$tarifaI=$facturas[$n]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
$facturas[$n]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
$facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
$facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
];
}*/
switch( $tarifaI->getNombre() ){
case '3.0A': case '3.1A':
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
$facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
$facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
0,
0,
0
];
break;
default:
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1()??0,
$facturas[$n]->getConsumoP2()??0,
$facturas[$n]->getConsumoP3()??0,
$facturas[$n]->getConsumoP4()??0,
$facturas[$n]->getConsumoP5()??0,
$facturas[$n]->getConsumoP6()??0,
];
break;
}
}
$consumoMedio=$consumoMedio/12;
$ultimaFecha=$factura->getFechaLectura();
$numeroP=count( array_filter($arrayP) );
}
$timestamp=date_timestamp_get($ultimaFecha);
while( count($datosGrafica)<12 ){
$ultimaFecha = date_add($ultimaFecha, date_interval_create_from_date_string('1 month'));
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$ultimaFecha->getTimestamp()) )),
0,
0,
0,
0,
0,
0
];
}
$factura->setFechaLectura(date_timestamp_set($ultimaFecha,$timestamp));
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'potenciaP1Facturada'=>$potenciaP1Facturada??null,
'potenciaP2Facturada'=>$potenciaP2Facturada??null,
'potenciaP3Facturada'=>$potenciaP3Facturada??null,
'potenciaP4Facturada'=>$potenciaP4Facturada??null,
'potenciaP5Facturada'=>$potenciaP5Facturada??null,
'potenciaP6Facturada'=>$potenciaP6Facturada??null,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotenciaP2'=>$totalPotenciaP2??null,
'totalPotenciaP3'=>$totalPotenciaP3??null,
'totalPotenciaP4'=>$totalPotenciaP4??null,
'totalPotenciaP5'=>$totalPotenciaP5??null,
'totalPotenciaP6'=>$totalPotenciaP6??null,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergiaP2'=>$totalEnergiaP2??null,
'totalEnergiaP3'=>$totalEnergiaP3??null,
'totalEnergiaP4'=>$totalEnergiaP4??null,
'totalEnergiaP5'=>$totalEnergiaP5??null,
'totalEnergiaP6'=>$totalEnergiaP6??null,
'totalEnergia'=>$totalEnergia,
'reactivaP1'=>$reactivaP1??null,
'reactivaP2'=>$reactivaP2??null,
'reactivaP3'=>$reactivaP3??null,
'reactivaP4'=>$reactivaP4??null,
'reactivaP5'=>$reactivaP5??null,
'reactivaP6'=>$reactivaP6??null,
'excesoReactivaP1'=>$excesoReactivaP1??null,
'excesoReactivaP2'=>$excesoReactivaP2??null,
'excesoReactivaP3'=>$excesoReactivaP3??null,
'excesoReactivaP4'=>$excesoReactivaP4??null,
'excesoReactivaP5'=>$excesoReactivaP5??null,
'excesoReactivaP6'=>$excesoReactivaP6??null,
'importeReactivaP1'=>$importeReactivaP1??null,
'importeReactivaP2'=>$importeReactivaP2??null,
'importeReactivaP3'=>$importeReactivaP3??null,
'importeReactivaP4'=>$importeReactivaP4??null,
'importeReactivaP5'=>$importeReactivaP5??null,
'importeReactivaP6'=>$importeReactivaP6??null,
'totalReactiva'=>$totalReactiva??null,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos??0,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'consumoP1Facturado'=>$consumoP1Facturado??null,
'consumoP2Facturado'=>$consumoP2Facturado??null,
'consumoP3Facturado'=>$consumoP3Facturado??null,
'consumoP4Facturado'=>$consumoP4Facturado??null,
'consumoP5Facturado'=>$consumoP5Facturado??null,
'consumoP6Facturado'=>$consumoP6Facturado??null,
'datosGrafica'=>$datosGrafica,
'arrayP'=>$arrayP??[true,false,false,false,false,false],
'numeroP'=>$numeroP??1,
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
return $this->render('factura/finkaluz.factura.html.twig', $params);
case 'emfra':
return $this->render('factura/emfra.factura.html.twig', $params);
case 'onda':
return $this->render('factura/onda.factura.html.twig', $params);
case 'digitel':
return $this->render('factura/digitel.factura.html.twig', $params);
case 'apolo':
return $this->render('factura/apolo.factura.html.twig', $params);
case 'e3':
return $this->render('factura/e3/factura.html.twig', $params);
case 'telkes':
return $this->render('factura/telkes/factura.html.twig', $params);
case 'paladio':
return $this->render('factura/paladio/factura.html.twig', $params);
case 'arsen':
return $this->render('factura/arsen/factura.html.twig', $params);
default:
return $this->render('factura/factura.html.twig', $params);
}
}
else{
$periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1=round($factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1;
$totalEnergiaP1=round($factura->getConsumoConvertidoP1()*$factura->getPrecioEnergiaP1(),2);
$totalEnergia=$totalEnergiaP1;
$subtotal=round($totalEnergia+$totalPotencia,2);
$importeImpuesto=round($factura->getImpuesto()*$factura->getConsumoConvertidoP1(),2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//Grafica
if($factura === $facturas[0]){
$consumoMedio=$factura->getTotalFactura();
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$factura->getFechaLectura()->getTimestamp()) )),
$factura->getConsumoConvertidoP1()
];
$ultimaFecha=$factura->getFechaLectura();
$consumoAcumulado=$factura->getConsumoConvertidoP1();
}
else{
$indiceFactura=array_search($factura, $facturas);
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumoConvertidoP1();
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoConvertidoP1()
];
$ultimaFecha=$facturas[$i]->getFechaLectura();
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$factura->getConsumoConvertidoP1();
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoConvertidoP1()
];
}
$consumoMedio=$consumoMedio/12;
$ultimaFecha=$factura->getFechaLectura();
}
}
$timestamp=date_timestamp_get($ultimaFecha);
while( count($datosGrafica)<12 ){
$ultimaFecha = date_add($ultimaFecha, date_interval_create_from_date_string('1 month'));
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$ultimaFecha->getTimestamp()) )),
0
];
}
$factura->setFechaLectura(date_timestamp_set($ultimaFecha,$timestamp));
//Return
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergia'=>$totalEnergia,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'datosGrafica'=>$datosGrafica,
'arrayP'=>$arrayP??[true,false,false,false,false,false],
'numeroP'=>0,
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'digitel':
return $this->render('factura/digitel.factura.html.twig', $params);
case 'apolo':
return $this->render('factura/apolo.factura.html.twig', $params);
case 'e3':
return $this->render('factura/e3/factura.html.twig', $params);
case 'telkes':
return $this->render('factura/telkes/factura.html.twig', $params);
case 'paladio':
return $this->render('factura/paladio/factura.html.twig', $params);
case 'arsen':
return $this->render('factura/arsen/factura.html.twig', $params);
default:
return $this->render('factura/factura.html.twig', $params);
}
}
}
/**
* @Route("factura/{id}/pdf", name="factura_pdf", methods={"GET", "POST"})
*/
public function pdf(Factura $factura, Pdf $pdf, Request $request, FacturaRepository $facturaRepository,
BancoRepository $bancoRepository, EntityManagerInterface $entityManager): PdfResponse
{
if(
$factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
){
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
}
$urlImagen=$request->request->get("urlImagen");
$facturas=$facturaRepository->findBy(['contrato'=>$factura->getContrato()], ['fechaLectura'=>'ASC']);
$tarifa=$factura->getTarifa();
$entidad=$bancoRepository->findByCuenta($factura->getCcc());
$consumoAcumulado='0';
$consumoMedio='0';
/*if($tarifa->getTipoTarifa()=='Electricidad'){
if($tarifa=='2.0A' || $tarifa=='2.1A'){
$periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1;
$totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
$totalEnergia=$totalEnergiaP1;
$subtotal=round($totalEnergia+$totalPotencia,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if($factura === $facturas[0]){
$consumoMedio=$factura->getTotalFactura();
$consumoAcumulado=$factura->getLecturaEnergiaP1()-$factura->getLecturaAnteriorP1();
}
else{
$indiceFactura=array_search($factura, $facturas);
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$factura->getConsumo()[1];
}
$consumoMedio=$consumoMedio/12;
}
}
}
elseif($tarifa=='2.0DHA' || $tarifa=='2.1DHA'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1;
$totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP3=round($factura->getConsumoP3()*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP3;
$subtotal=round($totalEnergia+$totalPotencia,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if($factura===$facturas[0]){
$consumoMedio=$factura->getTotalFactura();
$consumoAcumulado=$factura->getConsumo();
}
else{
$indiceFactura=array_search($factura, $facturas);
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
}
$consumoMedio=$consumoMedio/12;
}
}
}
elseif($tarifa=='3.0A' || $tarifa=='3.1A'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
$consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
$consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
$reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
$reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
$excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
$excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if($factura===$facturas[0]){
$consumoMedio=$factura->getTotalFactura();
$consumoAcumulado=$factura->getConsumo();
}
else{
$indiceFactura=array_search($factura, $facturas);
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
}
$consumoMedio=$consumoMedio/12;
$ultimaFecha=$factura->getFechaLectura();
}
}
}
else{
throw $this->createNotFoundException('No se ha encontrado la factura');
}
$html=$this->renderView('factura/factura.pdf.twig', [
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'potenciaP1Facturada'=>$potenciaP1Facturada??null,
'potenciaP2Facturada'=>$potenciaP2Facturada??null,
'potenciaP3Facturada'=>$potenciaP3Facturada??null,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotenciaP2'=>$totalPotenciaP2??null,
'totalPotenciaP3'=>$totalPotenciaP3??null,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergiaP2'=>$totalEnergiaP2??null,
'totalEnergiaP3'=>$totalEnergiaP3??null,
'totalEnergia'=>$totalEnergia,
'reactivaP1'=>$reactivaP1??null,
'reactivaP2'=>$reactivaP2??null,
'excesoReactivaP1'=>$excesoReactivaP1??null,
'excesoReactivaP2'=>$excesoReactivaP2??null,
'importeReactivaP1'=>$importeReactivaP1??null,
'importeReactivaP2'=>$importeReactivaP2??null,
'totalReactiva'=>$totalReactiva??null,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'consumoP1Facturado'=>$consumoP1Facturado??null,
'consumoP2Facturado'=>$consumoP2Facturado??null,
'consumoP3Facturado'=>$consumoP3Facturado??null,
'urlImagen'=>$urlImagen
]);
}*/
if($tarifa->getTipoTarifa()=='Electricidad'){
if($tarifa=='3.0A' || $tarifa=='3.1A'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
$consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
$consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
$reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
$reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
$excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
$excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
}
else{
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1();
$consumoP2Facturado=$factura->getConsumoP2();
$consumoP3Facturado=$factura->getConsumoP3();
$consumoP4Facturado=$factura->getConsumoP4();
$consumoP5Facturado=$factura->getConsumoP5();
$consumoP6Facturado=$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
$potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
$potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
$totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
$totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
$totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
$totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
$reactivaP1=$factura->getReactivaP1();
$reactivaP2=$factura->getReactivaP2();
$reactivaP3=$factura->getReactivaP3();
$reactivaP4=$factura->getReactivaP4();
$reactivaP5=$factura->getReactivaP5();
$reactivaP6=$factura->getReactivaP6();
if($reactivaP1!=0)
$excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
else
$excesoReactivaP1=0;
if($reactivaP2!=0)
$excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
else
$excesoReactivaP2=0;
if($reactivaP3!=0)
$excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
else
$excesoReactivaP3=0;
if($reactivaP4!=0)
$excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
else
$excesoReactivaP4=0;
if($reactivaP5!=0)
$excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
else
$excesoReactivaP5=0;
if($reactivaP6!=0)
$excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
else
$excesoReactivaP6=0;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
if($excesoReactivaP3<0)
$excesoReactivaP3=0;
if($excesoReactivaP4<0)
$excesoReactivaP4=0;
if($excesoReactivaP5<0)
$excesoReactivaP5=0;
if($excesoReactivaP6<0)
$excesoReactivaP6=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
$importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
$importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
$importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//throw $this->createNotFoundException('No se ha encontrado la factura');
}
//Grafica
$indiceFactura=array_search($factura, $facturas);
$arrayP=[false,false,false,false,false,false];
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
$tarifaI=$facturas[$i]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
$facturas[$i]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}else*/
switch( $tarifaI->getNombre() ){
case '3.0A': case '3.1A':
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
$facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
$facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
0,
0,
0
];
break;
default:
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()??0,
$facturas[$i]->getConsumoP2()??0,
$facturas[$i]->getConsumoP3()??0,
$facturas[$i]->getConsumoP4()??0,
$facturas[$i]->getConsumoP5()??0,
$facturas[$i]->getConsumoP6()??0,
];
break;
}
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
$numeroP=count( array_filter($arrayP) );
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$facturas[$n]->getConsumo();
$tarifaI=$facturas[$n]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
$facturas[$n]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
$facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
$facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
];
}*/
}
$consumoMedio=$consumoMedio/12;;
$numeroP=count( array_filter($arrayP) );
}
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'potenciaP1Facturada'=>$potenciaP1Facturada??null,
'potenciaP2Facturada'=>$potenciaP2Facturada??null,
'potenciaP3Facturada'=>$potenciaP3Facturada??null,
'potenciaP4Facturada'=>$potenciaP4Facturada??null,
'potenciaP5Facturada'=>$potenciaP5Facturada??null,
'potenciaP6Facturada'=>$potenciaP6Facturada??null,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotenciaP2'=>$totalPotenciaP2??null,
'totalPotenciaP3'=>$totalPotenciaP3??null,
'totalPotenciaP4'=>$totalPotenciaP4??null,
'totalPotenciaP5'=>$totalPotenciaP5??null,
'totalPotenciaP6'=>$totalPotenciaP6??null,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergiaP2'=>$totalEnergiaP2??null,
'totalEnergiaP3'=>$totalEnergiaP3??null,
'totalEnergiaP4'=>$totalEnergiaP4??null,
'totalEnergiaP5'=>$totalEnergiaP5??null,
'totalEnergiaP6'=>$totalEnergiaP6??null,
'totalEnergia'=>$totalEnergia,
'reactivaP1'=>$reactivaP1??null,
'reactivaP2'=>$reactivaP2??null,
'reactivaP3'=>$reactivaP3??null,
'reactivaP4'=>$reactivaP4??null,
'reactivaP5'=>$reactivaP5??null,
'reactivaP6'=>$reactivaP6??null,
'excesoReactivaP1'=>$excesoReactivaP1??null,
'excesoReactivaP2'=>$excesoReactivaP2??null,
'excesoReactivaP3'=>$excesoReactivaP3??null,
'excesoReactivaP4'=>$excesoReactivaP4??null,
'excesoReactivaP5'=>$excesoReactivaP5??null,
'excesoReactivaP6'=>$excesoReactivaP6??null,
'importeReactivaP1'=>$importeReactivaP1??null,
'importeReactivaP2'=>$importeReactivaP2??null,
'importeReactivaP3'=>$importeReactivaP3??null,
'importeReactivaP4'=>$importeReactivaP4??null,
'importeReactivaP5'=>$importeReactivaP5??null,
'importeReactivaP6'=>$importeReactivaP6??null,
'totalReactiva'=>$totalReactiva??null,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos??0,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'consumoP1Facturado'=>$consumoP1Facturado??null,
'consumoP2Facturado'=>$consumoP2Facturado??null,
'consumoP3Facturado'=>$consumoP3Facturado??null,
'consumoP4Facturado'=>$consumoP4Facturado??null,
'consumoP5Facturado'=>$consumoP5Facturado??null,
'consumoP6Facturado'=>$consumoP6Facturado??null,
'arrayP'=>$arrayP??[true,false,false,false,false,false],
'numeroP'=>$numeroP??1,
'urlImagen'=>$urlImagen
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura/factura.pdf.twig', $params);
break;
}
/*$html=$this->renderView('factura/factura.pdf.twig', [
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'potenciaP1Facturada'=>$potenciaP1Facturada??null,
'potenciaP2Facturada'=>$potenciaP2Facturada??null,
'potenciaP3Facturada'=>$potenciaP3Facturada??null,
'potenciaP4Facturada'=>$potenciaP4Facturada??null,
'potenciaP5Facturada'=>$potenciaP5Facturada??null,
'potenciaP6Facturada'=>$potenciaP6Facturada??null,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotenciaP2'=>$totalPotenciaP2??null,
'totalPotenciaP3'=>$totalPotenciaP3??null,
'totalPotenciaP4'=>$totalPotenciaP4??null,
'totalPotenciaP5'=>$totalPotenciaP5??null,
'totalPotenciaP6'=>$totalPotenciaP6??null,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergiaP2'=>$totalEnergiaP2??null,
'totalEnergiaP3'=>$totalEnergiaP3??null,
'totalEnergiaP4'=>$totalEnergiaP4??null,
'totalEnergiaP5'=>$totalEnergiaP5??null,
'totalEnergiaP6'=>$totalEnergiaP6??null,
'totalEnergia'=>$totalEnergia,
'reactivaP1'=>$reactivaP1??null,
'reactivaP2'=>$reactivaP2??null,
'reactivaP3'=>$reactivaP3??null,
'reactivaP4'=>$reactivaP4??null,
'reactivaP5'=>$reactivaP5??null,
'reactivaP6'=>$reactivaP6??null,
'excesoReactivaP1'=>$excesoReactivaP1??null,
'excesoReactivaP2'=>$excesoReactivaP2??null,
'excesoReactivaP3'=>$excesoReactivaP3??null,
'excesoReactivaP4'=>$excesoReactivaP4??null,
'excesoReactivaP5'=>$excesoReactivaP5??null,
'excesoReactivaP6'=>$excesoReactivaP6??null,
'importeReactivaP1'=>$importeReactivaP1??null,
'importeReactivaP2'=>$importeReactivaP2??null,
'importeReactivaP3'=>$importeReactivaP3??null,
'importeReactivaP4'=>$importeReactivaP4??null,
'importeReactivaP5'=>$importeReactivaP5??null,
'importeReactivaP6'=>$importeReactivaP6??null,
'totalReactiva'=>$totalReactiva??null,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos??0,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'consumoP1Facturado'=>$consumoP1Facturado??null,
'consumoP2Facturado'=>$consumoP2Facturado??null,
'consumoP3Facturado'=>$consumoP3Facturado??null,
'consumoP4Facturado'=>$consumoP4Facturado??null,
'consumoP5Facturado'=>$consumoP5Facturado??null,
'consumoP6Facturado'=>$consumoP6Facturado??null,
'arrayP'=>$arrayP??[true,false,false,false,false,false],
'numeroP'=>$numeroP??1,
'urlImagen'=>$urlImagen
]);*/
}
else{
$periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1=round($factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1;
$totalEnergiaP1=round($factura->getConsumoConvertidoP1()*$factura->getPrecioEnergiaP1(),2);
$totalEnergia=$totalEnergiaP1;
$subtotal=round($totalEnergia+$totalPotencia,2);
$importeImpuesto=round($factura->getImpuesto()*$factura->getConsumoConvertidoP1(),2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//Grafica
if($factura === $facturas[0]){
$consumoMedio=$factura->getTotalFactura();
$consumoAcumulado=$factura->getConsumoConvertidoP1();
}
else{
$indiceFactura=array_search($factura, $facturas);
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumoConvertidoP1();
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$factura->getConsumoConvertidoP1()[1];
}
$consumoMedio=$consumoMedio/12;
}
}
$html=$this->renderView('factura/factura.pdf.twig', [
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergia'=>$totalEnergia,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'urlImagen'=>$urlImagen
]);
}
return new PdfResponse(
$pdf->getOutputFromHtml($html),
(str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_numero').'.pdf'
);
}
/**
* @Route("factura/{id}/xml", name="factura_xml", methods={"GET", "POST"})
*/
public function xml(Factura $factura, Pdf $pdf, Request $request, FacturaRepository $facturaRepository,
BancoRepository $bancoRepository, Filesystem $filesystem, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
$logger = new Logger('factura_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/email.log', Logger::DEBUG));
$urlImagen = $request->request->get("urlImagen");
$facturas = $facturaRepository->findBy(['contrato' => $factura->getContrato()], ['fechaLectura' => 'ASC']);
$tarifa = $factura->getTarifa();
$entidad = $bancoRepository->findByCuenta($factura->getCcc());
$consumoAcumulado = '0';
$consumoMedio = '0';
/*if ($tarifa->getTipoTarifa() == 'Electricidad') {
$subject = 'FACTURA ELECTRICIDAD';
$tipo='electricidad';
if ($tarifa == '2.0A' || $tarifa == '2.1A') {
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1;
$totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
$totalEnergia = $totalEnergiaP1;
$subtotal = round($totalEnergia + $totalPotencia, 2);
$importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getLecturaEnergiaP1() - $factura->getLecturaAnteriorP1();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
$consumoAcumulado += $factura->getConsumo()[1];
}
$consumoMedio = $consumoMedio / 12;
}
}
}
elseif ($tarifa == '2.0DHA' || $tarifa == '2.1DHA') {
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1;
$totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
$totalEnergiaP3 = round($factura->getConsumoP3() * $factura->getPrecioEnergiaP3(), 2);
$totalEnergia = $totalEnergiaP1 + $totalEnergiaP3;
$subtotal = round($totalEnergia + $totalPotencia, 2);
$importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getConsumo();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / 12;
}
}
}
elseif ($tarifa == '3.0A' || $tarifa == '3.1A') {
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$consumoP1Facturado = $factura->getConsumoP1() + $factura->getConsumoP4();
$consumoP2Facturado = $factura->getConsumoP2() + $factura->getConsumoP5();
$consumoP3Facturado = $factura->getConsumoP3() + $factura->getConsumoP6();
$potenciaP1Facturada = $factura->getPotenciaFacturada('P1');
$potenciaP2Facturada = $factura->getPotenciaFacturada('P2');
$potenciaP3Facturada = $factura->getPotenciaFacturada('P3');
$totalPotenciaP1 = round($potenciaP1Facturada * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotenciaP2 = round($potenciaP2Facturada * $factura->getPrecioPotenciaP2() * $periodoFacturacion, 2);
$totalPotenciaP3 = round($potenciaP3Facturada * $factura->getPrecioPotenciaP3() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1 + $totalPotenciaP2 + $totalPotenciaP3;
$totalEnergiaP1 = round($consumoP1Facturado * $factura->getPrecioEnergiaP1(), 2);
$totalEnergiaP2 = round($consumoP2Facturado * $factura->getPrecioEnergiaP2(), 2);
$totalEnergiaP3 = round($consumoP3Facturado * $factura->getPrecioEnergiaP3(), 2);
$totalEnergia = $totalEnergiaP1 + $totalEnergiaP2 + $totalEnergiaP3;
$reactivaP1 = $factura->getReactivaP1() + $factura->getReactivaP4();
$reactivaP2 = $factura->getReactivaP2() + $factura->getReactivaP5();
$excesoReactivaP1 = $reactivaP1 - 0.33 * $consumoP1Facturado;
$excesoReactivaP2 = $reactivaP2 - 0.33 * $consumoP2Facturado;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
$importeReactivaP1 = round($excesoReactivaP1 * $factura->getPrecioReactivaP1(), 2);
$importeReactivaP2 = round($excesoReactivaP2 * $factura->getPrecioReactivaP2(), 2);
$totalReactiva = $importeReactivaP1 + $importeReactivaP2;
$subtotal = round($totalEnergia + $totalPotencia + $totalReactiva, 2);
$importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getConsumo();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
}
$consumoMedio = $consumoMedio / 12;
$ultimaFecha = $factura->getFechaLectura();
}
}
} else {
throw $this->createNotFoundException('No se ha encontrado la factura');
}
$html = $this->renderView('factura/factura.pdf.twig', [
'factura' => $factura,
'entidad' => $entidad,
'consumoMedio' => $consumoMedio,
'consumoAcumulado' => $consumoAcumulado,
'periodoFacturacion' => $periodoFacturacion,
'potenciaP1Facturada' => $potenciaP1Facturada ?? null,
'potenciaP2Facturada' => $potenciaP2Facturada ?? null,
'potenciaP3Facturada' => $potenciaP3Facturada ?? null,
'totalPotenciaP1' => $totalPotenciaP1,
'totalPotenciaP2' => $totalPotenciaP2 ?? null,
'totalPotenciaP3' => $totalPotenciaP3 ?? null,
'totalPotencia' => $totalPotencia,
'totalEnergiaP1' => $totalEnergiaP1,
'totalEnergiaP2' => $totalEnergiaP2 ?? null,
'totalEnergiaP3' => $totalEnergiaP3 ?? null,
'totalEnergia' => $totalEnergia,
'reactivaP1' => $reactivaP1 ?? null,
'reactivaP2' => $reactivaP2 ?? null,
'excesoReactivaP1' => $excesoReactivaP1 ?? null,
'excesoReactivaP2' => $excesoReactivaP2 ?? null,
'importeReactivaP1' => $importeReactivaP1 ?? null,
'importeReactivaP2' => $importeReactivaP2 ?? null,
'totalReactiva' => $totalReactiva ?? null,
'subtotal' => $subtotal,
'importeImpuesto' => $importeImpuesto,
'importeAlquiler' => $importeAlquiler,
'otrosConceptos'=>$otrosConceptos,
'importeTotal' => $importeTotal,
'importeIva' => $importeIva,
'totalFactura' => $totalFactura,
'consumoP1Facturado' => $consumoP1Facturado ?? null,
'consumoP2Facturado' => $consumoP2Facturado ?? null,
'consumoP3Facturado' => $consumoP3Facturado ?? null,
'urlImagen' => $urlImagen
]);
}*/
if($tarifa->getTipoTarifa()=='Electricidad'){
$subject = 'FACTURA ELECTRICIDAD';
$tipo='electricidad';
if($tarifa=='3.0A' || $tarifa=='3.1A'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
$consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
$consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
$reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
$reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
$excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
$excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
}
else{
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1();
$consumoP2Facturado=$factura->getConsumoP2();
$consumoP3Facturado=$factura->getConsumoP3();
$consumoP4Facturado=$factura->getConsumoP4();
$consumoP5Facturado=$factura->getConsumoP5();
$consumoP6Facturado=$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
$potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
$potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
$totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
$totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
$totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
$totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
$reactivaP1=$factura->getReactivaP1();
$reactivaP2=$factura->getReactivaP2();
$reactivaP3=$factura->getReactivaP3();
$reactivaP4=$factura->getReactivaP4();
$reactivaP5=$factura->getReactivaP5();
$reactivaP6=$factura->getReactivaP6();
if($reactivaP1!=0)
$excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
else
$excesoReactivaP1=0;
if($reactivaP2!=0)
$excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
else
$excesoReactivaP2=0;
if($reactivaP3!=0)
$excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
else
$excesoReactivaP3=0;
if($reactivaP4!=0)
$excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
else
$excesoReactivaP4=0;
if($reactivaP5!=0)
$excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
else
$excesoReactivaP5=0;
if($reactivaP6!=0)
$excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
else
$excesoReactivaP6=0;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
if($excesoReactivaP3<0)
$excesoReactivaP3=0;
if($excesoReactivaP4<0)
$excesoReactivaP4=0;
if($excesoReactivaP5<0)
$excesoReactivaP5=0;
if($excesoReactivaP6<0)
$excesoReactivaP6=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
$importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
$importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
$importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//throw $this->createNotFoundException('No se ha encontrado la factura');
}
//Grafica
$indiceFactura=array_search($factura, $facturas);
$arrayP=[false,false,false,false,false,false];
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
$tarifaI=$facturas[$i]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
$facturas[$i]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}else*/
switch( $tarifaI->getNombre() ){
case '3.0A': case '3.1A':
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
$facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
$facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
0,
0,
0
];
break;
default:
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()??0,
$facturas[$i]->getConsumoP2()??0,
$facturas[$i]->getConsumoP3()??0,
$facturas[$i]->getConsumoP4()??0,
$facturas[$i]->getConsumoP5()??0,
$facturas[$i]->getConsumoP6()??0,
];
break;
}
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
$numeroP=count( array_filter($arrayP) );
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$facturas[$n]->getConsumo();
$tarifaI=$facturas[$n]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
$facturas[$n]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
$facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
$facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
];
}*/
}
$consumoMedio=$consumoMedio/12;;
$numeroP=count( array_filter($arrayP) );
}
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'potenciaP1Facturada'=>$potenciaP1Facturada??null,
'potenciaP2Facturada'=>$potenciaP2Facturada??null,
'potenciaP3Facturada'=>$potenciaP3Facturada??null,
'potenciaP4Facturada'=>$potenciaP4Facturada??null,
'potenciaP5Facturada'=>$potenciaP5Facturada??null,
'potenciaP6Facturada'=>$potenciaP6Facturada??null,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotenciaP2'=>$totalPotenciaP2??null,
'totalPotenciaP3'=>$totalPotenciaP3??null,
'totalPotenciaP4'=>$totalPotenciaP4??null,
'totalPotenciaP5'=>$totalPotenciaP5??null,
'totalPotenciaP6'=>$totalPotenciaP6??null,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergiaP2'=>$totalEnergiaP2??null,
'totalEnergiaP3'=>$totalEnergiaP3??null,
'totalEnergiaP4'=>$totalEnergiaP4??null,
'totalEnergiaP5'=>$totalEnergiaP5??null,
'totalEnergiaP6'=>$totalEnergiaP6??null,
'totalEnergia'=>$totalEnergia,
'reactivaP1'=>$reactivaP1??null,
'reactivaP2'=>$reactivaP2??null,
'reactivaP3'=>$reactivaP3??null,
'reactivaP4'=>$reactivaP4??null,
'reactivaP5'=>$reactivaP5??null,
'reactivaP6'=>$reactivaP6??null,
'excesoReactivaP1'=>$excesoReactivaP1??null,
'excesoReactivaP2'=>$excesoReactivaP2??null,
'excesoReactivaP3'=>$excesoReactivaP3??null,
'excesoReactivaP4'=>$excesoReactivaP4??null,
'excesoReactivaP5'=>$excesoReactivaP5??null,
'excesoReactivaP6'=>$excesoReactivaP6??null,
'importeReactivaP1'=>$importeReactivaP1??null,
'importeReactivaP2'=>$importeReactivaP2??null,
'importeReactivaP3'=>$importeReactivaP3??null,
'importeReactivaP4'=>$importeReactivaP4??null,
'importeReactivaP5'=>$importeReactivaP5??null,
'importeReactivaP6'=>$importeReactivaP6??null,
'totalReactiva'=>$totalReactiva??null,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos??0,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'consumoP1Facturado'=>$consumoP1Facturado??null,
'consumoP2Facturado'=>$consumoP2Facturado??null,
'consumoP3Facturado'=>$consumoP3Facturado??null,
'consumoP4Facturado'=>$consumoP4Facturado??null,
'consumoP5Facturado'=>$consumoP5Facturado??null,
'consumoP6Facturado'=>$consumoP6Facturado??null,
'arrayP'=>$arrayP??[true,false,false,false,false,false],
'numeroP'=>$numeroP??1,
'urlImagen'=>$urlImagen
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura/factura.pdf.twig', $params);
break;
}
}
else {
$subject = 'FACTURA GAS';
$tipo='gas';
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1 = round($factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1;
$totalEnergiaP1 = round($factura->getConsumoConvertidoP1() * $factura->getPrecioEnergiaP1(), 2);
$totalEnergia = $totalEnergiaP1;
$subtotal = round($totalEnergia + $totalPotencia, 2);
$importeImpuesto = round($factura->getImpuesto() * $factura->getConsumoConvertidoP1(), 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getConsumoConvertidoP1();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumoConvertidoP1();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
$consumoAcumulado += $facturas[$n]->getConsumoConvertidoP1();
}
$consumoMedio = $consumoMedio / 12;
}
}
$params=[
'factura' => $factura,
'entidad' => $entidad,
'consumoMedio' => $consumoMedio,
'consumoAcumulado' => $consumoAcumulado,
'periodoFacturacion' => $periodoFacturacion,
'totalPotenciaP1' => $totalPotenciaP1,
'totalPotencia' => $totalPotencia,
'totalEnergiaP1' => $totalEnergiaP1,
'totalEnergia' => $totalEnergia,
'subtotal' => $subtotal,
'importeImpuesto' => $importeImpuesto,
'importeAlquiler' => $importeAlquiler,
'otrosConceptos'=>$otrosConceptos,
'importeTotal' => $importeTotal,
'importeIva' => $importeIva,
'totalFactura' => $totalFactura,
'urlImagen' => $urlImagen
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura/factura.pdf.twig', $params);
break;
}
}
//Attach PDF
try {
unlink(__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
} catch (\Exception $exception) {
}
$pdfPath=__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf';
$pdf->generateFromHtml(
$html,
$pdfPath
);
$params['pdf']=base64_encode(file_get_contents($pdfPath));
//Detect NIF type
$nif=$factura->getNifCliente();
$first=ctype_alpha( substr($nif,0,1) );
$last=ctype_alpha( substr($nif,strlen($nif)-1,1) );
$validador= new Validador();
if( $validador->validateCif($nif) ){
$params['tipoDocumento']='CIF';
}
elseif($first && $last)
$params['tipoDocumento']='NIE';
elseif ($first)
$params['tipoDocumento']='CIF';
else
$params['tipoDocumento']='DNI';
switch ($params['tipoDocumento']){
case 'NIE':case 'DNI':
$cliente=$factura->getContrato()->getCliente();
if ( $factura->getNombreCliente()==$cliente->__toString() ){
$params['nombre']['nombre']=$cliente->getNombre();
$params['nombre']['apellido1']=$cliente->getApellido();
$params['nombre']['apellido2']=$cliente->getApellido2();
}
else{
$nombreArray=explode( ' ', $factura->getNombreCliente() );
$arrayCount=count($nombreArray);
$params['nombre']['nombre']=$nombreArray[0];
if($arrayCount==2){
$params['nombre']['apellido1']=$nombreArray[1];
}elseif ($arrayCount==3){
$params['nombre']['apellido1']=$nombreArray[1];
$params['nombre']['apellido2']=$nombreArray[2];
}elseif ($arrayCount==4){
$params['nombre']['nombre'].=' '.$nombreArray[1];
$params['nombre']['apellido1']=$nombreArray[2];
$params['nombre']['apellido2']=$nombreArray[3];
}else {
$nombreArray = explode(' ', $factura->getNombreCliente());
$arrayCount = count($nombreArray);
if ($arrayCount > 1) {
$params['nombre']['apellido1'] = '';
$params['nombre']['apellido2'] = '';
$i=1;
for (; $i < $arrayCount; $i++) {
$concatenatedString = $params['nombre']['apellido1'] . $nombreArray[$i] . ' ';
if (strlen($concatenatedString) <= 40) {
$params['nombre']['apellido1'] = $concatenatedString;
} else {
break;
}
}
for (; $i < $arrayCount; $i++) {
$concatenatedString = $params['nombre']['apellido2'] . $nombreArray[$i] . ' ';
if (strlen($concatenatedString) <= 40) {
$params['nombre']['apellido2'] = $concatenatedString;
} else {
break;
}
}
}
$params['nombre']['apellido1'] = trim($params['nombre']['apellido1']);
$params['nombre']['apellido2'] = trim($params['nombre']['apellido2']);
}
}
}
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$xml=$this->renderView('factura/finkaluz.factura.xml.twig', $params);
break;
case 'emfra':
$xml=$this->renderView('factura/emfra.factura.xml.twig', $params);
break;
case 'onda':
$xml=$this->renderView('factura/onda.factura.xml.twig', $params);
break;
case 'digitel':
$xml=$this->renderView('factura/digitel.factura.xml.twig', $params);
break;
case 'apolo':
$xml=$this->renderView('factura/apolo.factura.xml.twig', $params);
break;
case 'e3':
$xml=$this->renderView('factura/e3/factura.xml.twig', $params);
break;
case 'telkes':
$xml=$this->renderView('factura/telkes/factura.xml.twig', $params);
break;
case 'paladio':
$xml=$this->renderView('factura/paladio/factura.xml.twig', $params);
break;
case 'arsen':
$xml=$this->renderView('factura/arsen/factura.xml.twig', $params);
break;
default:
$xml=$this->renderView('factura/factura.xml.twig', $params);
break;
}
$path=__DIR__ . '/../../temp/';
$filename=(str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.xml';
$filesystem->dumpFile($path.$filename, $xml);
$response= new BinaryFileResponse($path.$filename);
// Create the disposition of the file
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$filename
);
// Set the content disposition
$response->headers->set('Content-Disposition', $disposition);
// Dispatch request
return $response;
}
/**
* @Route("factura/{id}/enviar", name="factura_enviar", methods={"GET", "POST"})
*/
public function enviar(Factura $factura, Pdf $pdf, Request $request, FacturaRepository $facturaRepository,
BancoRepository $bancoRepository, MailerInterface $mailer, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
$logger = new Logger('factura_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/email.log', Logger::DEBUG));
$urlImagen = $request->request->get("urlImagen");
$facturas = $facturaRepository->findBy(['contrato' => $factura->getContrato()], ['fechaLectura' => 'ASC']);
$tarifa = $factura->getTarifa();
$entidad = $bancoRepository->findByCuenta($factura->getCcc());
$consumoAcumulado = '0';
$consumoMedio = '0';
/*if ($tarifa->getTipoTarifa() == 'Electricidad') {
$subject = 'FACTURA ELECTRICIDAD';
$tipo='electricidad';
if ($tarifa == '2.0A' || $tarifa == '2.1A') {
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1;
$totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
$totalEnergia = $totalEnergiaP1;
$subtotal = round($totalEnergia + $totalPotencia, 2);
$importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getLecturaEnergiaP1() - $factura->getLecturaAnteriorP1();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
$consumoAcumulado += $factura->getConsumo()[1];
}
$consumoMedio = $consumoMedio / 12;
}
}
}
elseif ($tarifa == '2.0DHA' || $tarifa == '2.1DHA') {
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1;
$totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
$totalEnergiaP3 = round($factura->getConsumoP3() * $factura->getPrecioEnergiaP3(), 2);
$totalEnergia = $totalEnergiaP1 + $totalEnergiaP3;
$subtotal = round($totalEnergia + $totalPotencia, 2);
$importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getConsumo();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / 12;
}
}
}
elseif ($tarifa == '3.0A' || $tarifa == '3.1A') {
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$consumoP1Facturado = $factura->getConsumoP1() + $factura->getConsumoP4();
$consumoP2Facturado = $factura->getConsumoP2() + $factura->getConsumoP5();
$consumoP3Facturado = $factura->getConsumoP3() + $factura->getConsumoP6();
$potenciaP1Facturada = $factura->getPotenciaFacturada('P1');
$potenciaP2Facturada = $factura->getPotenciaFacturada('P2');
$potenciaP3Facturada = $factura->getPotenciaFacturada('P3');
$totalPotenciaP1 = round($potenciaP1Facturada * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotenciaP2 = round($potenciaP2Facturada * $factura->getPrecioPotenciaP2() * $periodoFacturacion, 2);
$totalPotenciaP3 = round($potenciaP3Facturada * $factura->getPrecioPotenciaP3() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1 + $totalPotenciaP2 + $totalPotenciaP3;
$totalEnergiaP1 = round($consumoP1Facturado * $factura->getPrecioEnergiaP1(), 2);
$totalEnergiaP2 = round($consumoP2Facturado * $factura->getPrecioEnergiaP2(), 2);
$totalEnergiaP3 = round($consumoP3Facturado * $factura->getPrecioEnergiaP3(), 2);
$totalEnergia = $totalEnergiaP1 + $totalEnergiaP2 + $totalEnergiaP3;
$reactivaP1 = $factura->getReactivaP1() + $factura->getReactivaP4();
$reactivaP2 = $factura->getReactivaP2() + $factura->getReactivaP5();
$excesoReactivaP1 = $reactivaP1 - 0.33 * $consumoP1Facturado;
$excesoReactivaP2 = $reactivaP2 - 0.33 * $consumoP2Facturado;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
$importeReactivaP1 = round($excesoReactivaP1 * $factura->getPrecioReactivaP1(), 2);
$importeReactivaP2 = round($excesoReactivaP2 * $factura->getPrecioReactivaP2(), 2);
$totalReactiva = $importeReactivaP1 + $importeReactivaP2;
$subtotal = round($totalEnergia + $totalPotencia + $totalReactiva, 2);
$importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$this->getDoctrine()->getManager()->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getConsumo();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumo();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
}
$consumoMedio = $consumoMedio / 12;
$ultimaFecha = $factura->getFechaLectura();
}
}
} else {
throw $this->createNotFoundException('No se ha encontrado la factura');
}
$html = $this->renderView('factura/factura.pdf.twig', [
'factura' => $factura,
'entidad' => $entidad,
'consumoMedio' => $consumoMedio,
'consumoAcumulado' => $consumoAcumulado,
'periodoFacturacion' => $periodoFacturacion,
'potenciaP1Facturada' => $potenciaP1Facturada ?? null,
'potenciaP2Facturada' => $potenciaP2Facturada ?? null,
'potenciaP3Facturada' => $potenciaP3Facturada ?? null,
'totalPotenciaP1' => $totalPotenciaP1,
'totalPotenciaP2' => $totalPotenciaP2 ?? null,
'totalPotenciaP3' => $totalPotenciaP3 ?? null,
'totalPotencia' => $totalPotencia,
'totalEnergiaP1' => $totalEnergiaP1,
'totalEnergiaP2' => $totalEnergiaP2 ?? null,
'totalEnergiaP3' => $totalEnergiaP3 ?? null,
'totalEnergia' => $totalEnergia,
'reactivaP1' => $reactivaP1 ?? null,
'reactivaP2' => $reactivaP2 ?? null,
'excesoReactivaP1' => $excesoReactivaP1 ?? null,
'excesoReactivaP2' => $excesoReactivaP2 ?? null,
'importeReactivaP1' => $importeReactivaP1 ?? null,
'importeReactivaP2' => $importeReactivaP2 ?? null,
'totalReactiva' => $totalReactiva ?? null,
'subtotal' => $subtotal,
'importeImpuesto' => $importeImpuesto,
'importeAlquiler' => $importeAlquiler,
'otrosConceptos'=>$otrosConceptos,
'importeTotal' => $importeTotal,
'importeIva' => $importeIva,
'totalFactura' => $totalFactura,
'consumoP1Facturado' => $consumoP1Facturado ?? null,
'consumoP2Facturado' => $consumoP2Facturado ?? null,
'consumoP3Facturado' => $consumoP3Facturado ?? null,
'urlImagen' => $urlImagen
]);
}*/
if($tarifa->getTipoTarifa()=='Electricidad'){
$subject = 'FACTURA ELECTRICIDAD';
$tipo='electricidad';
if($tarifa=='3.0A' || $tarifa=='3.1A'){
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
$consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
$consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
$reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
$reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
$excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
$excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
}
else{
$periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
$consumoP1Facturado=$factura->getConsumoP1();
$consumoP2Facturado=$factura->getConsumoP2();
$consumoP3Facturado=$factura->getConsumoP3();
$consumoP4Facturado=$factura->getConsumoP4();
$consumoP5Facturado=$factura->getConsumoP5();
$consumoP6Facturado=$factura->getConsumoP6();
$potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
$potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
$potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
$potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
$potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
$potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
$totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
$totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
$totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
$totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
$totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
$totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
$totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
$totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
$totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
$totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
$totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
$totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
$totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
$totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
$reactivaP1=$factura->getReactivaP1();
$reactivaP2=$factura->getReactivaP2();
$reactivaP3=$factura->getReactivaP3();
$reactivaP4=$factura->getReactivaP4();
$reactivaP5=$factura->getReactivaP5();
$reactivaP6=$factura->getReactivaP6();
if($reactivaP1!=0)
$excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
else
$excesoReactivaP1=0;
if($reactivaP2!=0)
$excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
else
$excesoReactivaP2=0;
if($reactivaP3!=0)
$excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
else
$excesoReactivaP3=0;
if($reactivaP4!=0)
$excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
else
$excesoReactivaP4=0;
if($reactivaP5!=0)
$excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
else
$excesoReactivaP5=0;
if($reactivaP6!=0)
$excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
else
$excesoReactivaP6=0;
if($excesoReactivaP1<0)
$excesoReactivaP1=0;
if($excesoReactivaP2<0)
$excesoReactivaP2=0;
if($excesoReactivaP3<0)
$excesoReactivaP3=0;
if($excesoReactivaP4<0)
$excesoReactivaP4=0;
if($excesoReactivaP5<0)
$excesoReactivaP5=0;
if($excesoReactivaP6<0)
$excesoReactivaP6=0;
$importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
$importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
$importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
$importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
$importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
$importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
$totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
$subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
$importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
$importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//throw $this->createNotFoundException('No se ha encontrado la factura');
}
//Grafica
$indiceFactura=array_search($factura, $facturas);
$arrayP=[false,false,false,false,false,false];
if($indiceFactura<12){
for($i=0;$i<=$indiceFactura && $i<12;$i++){
$consumoMedio+=$facturas[$i]->getTotalFactura();
$consumoAcumulado+=$facturas[$i]->getConsumo();
$tarifaI=$facturas[$i]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1(),
0,
$facturas[$i]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}else*/
switch( $tarifaI->getNombre() ){
case '3.0A': case '3.1A':
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
$facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
$facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
0,
0,
0
];
break;
default:
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
$facturas[$i]->getConsumoP1()??0,
$facturas[$i]->getConsumoP2()??0,
$facturas[$i]->getConsumoP3()??0,
$facturas[$i]->getConsumoP4()??0,
$facturas[$i]->getConsumoP5()??0,
$facturas[$i]->getConsumoP6()??0,
];
break;
}
}
$consumoMedio=$consumoMedio/($indiceFactura+1);
$numeroP=count( array_filter($arrayP) );
}
else{
for($i=11;$i>=0;$i--){
$n=$indiceFactura-$i;
$consumoMedio+=$facturas[$n]->getTotalFactura();
$consumoAcumulado+=$facturas[$n]->getConsumo();
$tarifaI=$facturas[$n]->getTarifa();
$arrayPI=[
$tarifaI->getEnergiaP1(),
$tarifaI->getEnergiaP2(),
$tarifaI->getEnergiaP3(),
$tarifaI->getEnergiaP4(),
$tarifaI->getEnergiaP5(),
$tarifaI->getEnergiaP6()
];
if(!$arrayP[0])
$arrayP[0]=$arrayPI[0];
if(!$arrayP[1])
$arrayP[1]=$arrayPI[1];
if(!$arrayP[2])
$arrayP[2]=$arrayPI[2];
if(!$arrayP[3])
$arrayP[3]=$arrayPI[3];
if(!$arrayP[4])
$arrayP[4]=$arrayPI[4];
if(!$arrayP[5])
$arrayP[5]=$arrayPI[5];
/*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
0
];
if ( 1>($numeroP??0) ){
$numeroP=1;
}
}elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1(),
0,
$facturas[$n]->getConsumoP3()
];
if ( 2>($numeroP??0) ){
$numeroP=2;
}
}elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
$datosGrafica[]=[
str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
$facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
$facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
$facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
];
}*/
}
$consumoMedio=$consumoMedio/12;;
$numeroP=count( array_filter($arrayP) );
}
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'consumoMedio'=>$consumoMedio,
'consumoAcumulado'=>$consumoAcumulado,
'periodoFacturacion'=>$periodoFacturacion,
'potenciaP1Facturada'=>$potenciaP1Facturada??null,
'potenciaP2Facturada'=>$potenciaP2Facturada??null,
'potenciaP3Facturada'=>$potenciaP3Facturada??null,
'potenciaP4Facturada'=>$potenciaP4Facturada??null,
'potenciaP5Facturada'=>$potenciaP5Facturada??null,
'potenciaP6Facturada'=>$potenciaP6Facturada??null,
'totalPotenciaP1'=>$totalPotenciaP1,
'totalPotenciaP2'=>$totalPotenciaP2??null,
'totalPotenciaP3'=>$totalPotenciaP3??null,
'totalPotenciaP4'=>$totalPotenciaP4??null,
'totalPotenciaP5'=>$totalPotenciaP5??null,
'totalPotenciaP6'=>$totalPotenciaP6??null,
'totalPotencia'=>$totalPotencia,
'totalEnergiaP1'=>$totalEnergiaP1,
'totalEnergiaP2'=>$totalEnergiaP2??null,
'totalEnergiaP3'=>$totalEnergiaP3??null,
'totalEnergiaP4'=>$totalEnergiaP4??null,
'totalEnergiaP5'=>$totalEnergiaP5??null,
'totalEnergiaP6'=>$totalEnergiaP6??null,
'totalEnergia'=>$totalEnergia,
'reactivaP1'=>$reactivaP1??null,
'reactivaP2'=>$reactivaP2??null,
'reactivaP3'=>$reactivaP3??null,
'reactivaP4'=>$reactivaP4??null,
'reactivaP5'=>$reactivaP5??null,
'reactivaP6'=>$reactivaP6??null,
'excesoReactivaP1'=>$excesoReactivaP1??null,
'excesoReactivaP2'=>$excesoReactivaP2??null,
'excesoReactivaP3'=>$excesoReactivaP3??null,
'excesoReactivaP4'=>$excesoReactivaP4??null,
'excesoReactivaP5'=>$excesoReactivaP5??null,
'excesoReactivaP6'=>$excesoReactivaP6??null,
'importeReactivaP1'=>$importeReactivaP1??null,
'importeReactivaP2'=>$importeReactivaP2??null,
'importeReactivaP3'=>$importeReactivaP3??null,
'importeReactivaP4'=>$importeReactivaP4??null,
'importeReactivaP5'=>$importeReactivaP5??null,
'importeReactivaP6'=>$importeReactivaP6??null,
'totalReactiva'=>$totalReactiva??null,
'subtotal'=>$subtotal,
'importeImpuesto'=>$importeImpuesto,
'importeAlquiler'=>$importeAlquiler,
'otrosConceptos'=>$otrosConceptos??0,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
'consumoP1Facturado'=>$consumoP1Facturado??null,
'consumoP2Facturado'=>$consumoP2Facturado??null,
'consumoP3Facturado'=>$consumoP3Facturado??null,
'consumoP4Facturado'=>$consumoP4Facturado??null,
'consumoP5Facturado'=>$consumoP5Facturado??null,
'consumoP6Facturado'=>$consumoP6Facturado??null,
'arrayP'=>$arrayP??[true,false,false,false,false,false],
'numeroP'=>$numeroP??1,
'urlImagen'=>$urlImagen
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura/factura.pdf.twig', $params);
break;
}
}
else {
$subject = 'FACTURA GAS';
$tipo='gas';
$periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
$totalPotenciaP1 = round($factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
$totalPotencia = $totalPotenciaP1;
$totalEnergiaP1 = round($factura->getConsumoConvertidoP1() * $factura->getPrecioEnergiaP1(), 2);
$totalEnergia = $totalEnergiaP1;
$subtotal = round($totalEnergia + $totalPotencia, 2);
$importeImpuesto = round($factura->getImpuesto() * $factura->getConsumoConvertidoP1(), 2);
$importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
$otrosConceptos=0;
foreach ($factura->getConceptos() as $concepto){
$otrosConceptos+=round($concepto->getImporte(),2);
}
$importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
$importeIva = round($factura->getIva() * $importeTotal / 100, 2);
$totalFactura = round($importeTotal + $importeIva, 2);
if ($totalFactura !== $factura->getTotalFactura()) {
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
//Grafica
if ($factura === $facturas[0]) {
$consumoMedio = $factura->getTotalFactura();
$consumoAcumulado = $factura->getConsumoConvertidoP1();
} else {
$indiceFactura = array_search($factura, $facturas);
if ($indiceFactura < 12) {
for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
$consumoMedio += $facturas[$i]->getTotalFactura();
$consumoAcumulado += $facturas[$i]->getConsumoConvertidoP1();
}
$consumoMedio = $consumoMedio / ($indiceFactura + 1);
} else {
for ($i = 11; $i >= 0; $i--) {
$n = $indiceFactura - $i;
$consumoMedio += $facturas[$n]->getTotalFactura();
$consumoAcumulado += $facturas[$n]->getConsumoConvertidoP1();
}
$consumoMedio = $consumoMedio / 12;
}
}
$params=[
'factura' => $factura,
'entidad' => $entidad,
'consumoMedio' => $consumoMedio,
'consumoAcumulado' => $consumoAcumulado,
'periodoFacturacion' => $periodoFacturacion,
'totalPotenciaP1' => $totalPotenciaP1,
'totalPotencia' => $totalPotencia,
'totalEnergiaP1' => $totalEnergiaP1,
'totalEnergia' => $totalEnergia,
'subtotal' => $subtotal,
'importeImpuesto' => $importeImpuesto,
'importeAlquiler' => $importeAlquiler,
'otrosConceptos'=>$otrosConceptos,
'importeTotal' => $importeTotal,
'importeIva' => $importeIva,
'totalFactura' => $totalFactura,
'urlImagen' => $urlImagen
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura/factura.pdf.twig', $params);
break;
}
}
try {
unlink(__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
} catch (\Exception $exception) {
}
$pdf->generateFromHtml(
$html,
__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf'
);
try {
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$body=$this->renderView('email/finkaluz.factura.html.twig',['tipo'=>$tipo]);
$from='finkaluz@finkaluz.com';
break;
case 'emfra':
$body=$this->renderView('email/emfra.factura.html.twig',['tipo'=>$tipo]);
$from='finkaluz@finkaluz.com';
break;
case 'onda':
$body=$this->renderView('email/onda.factura.html.twig',['tipo'=>$tipo]);
$from='facturacion@ondaenergia.es';
break;
case 'digitel':
$body=$this->renderView('email/digitel.factura.html.twig',['tipo'=>$tipo, 'email'=>$factura->getContrato()->getCliente()->getEmail()]);
$from='facturacionluz@itdigitel.es';
break;
case 'apolo':
$body=$this->renderView('email/apolo.factura.html.twig',['tipo'=>$tipo,'factura'=>$factura]);
$from='clientes@vibraenergies.es';
break;
case 'e3':
$body=$this->renderView('email/e3/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
$from='e3powerenergy@e3powerenergy.com';
break;
case 'telkes':
$body=$this->renderView('email/telkes/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
$from='info@telkesenergia.es';
break;
case 'paladio':
$body=$this->renderView('email/paladio/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
$from='clientes@paladiopartners.es';
break;
case 'arsen':
$body=$this->renderView('email/arsen/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
$from='arsenenergia@arsenenergia.com';
break;
default:
$body=$this->renderView('email/factura.html.twig',['tipo'=>$tipo]);
$from='energaze@energaze.com';
break;
}
$message = (new Email())
->subject($subject)
->from($from)
->to($factura->getContrato()->getCliente()->getEmail())
->html($body)
->attachFromPath(__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
/*try{
unlink(__DIR__.'/../../temp/'.(str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_número').'.pdf');
}catch (\Exception $exception){}*/
$mailer->send($message);
$status='success';
}catch (\Exception $exception){
$status='error';
$logger->info($exception->getMessage());
}
return $this->redirectToRoute('factura_show',['id'=>$factura->getId(), 'status'=>$status]);
}
/**
* @Route("factura/{id}/pagar", name="factura_pagar", methods={"GET","POST"})
*/
public function pagar(Factura $factura, MailerInterface $mailer, EntityManagerInterface $entityManager): Response
{
if( $factura->getContrato()->getCliente()->getUser()!=$this->getUser() ){
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
}
$env=$_SERVER['APP_ENV']??'finkaluz';
$error=false;
$version="";
$params="";
$signature="";
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log', Logger::DEBUG));
if($factura->getDevuelta()) {
//$logger->info('Detectado !pagado. Inicia comprobación.');
$api = new RedsysAPI;
if (!empty($_POST)) {
//URL DE RESP. ONLINE
//$logger->info('Detectado POST. Inicia comprobación.');
$version = $_POST["Ds_SignatureVersion"];
$datos = $_POST["Ds_MerchantParameters"];
$signatureRecibida = $_POST["Ds_Signature"];
$decodec = $api->decodeMerchantParameters($datos);
switch ($env){
case 'finkaluz':case 'emfra':
$kc = 'Kh6cHWPsap169mNSJCUNi2vpxT1DnnAd';
break;
default:
$kc = 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';
break;
}
$firma = $api->createMerchantSignatureNotif($kc, $datos);
$logger->info(gettype($decodec));
$logger->info($decodec["Ds_Response"]);
$decodec2=json_decode($decodec, true);
$logger->info(gettype($decodec2));
$logger->info($decodec2["Ds_Response"]);
if ($firma === $signatureRecibida) {
if (intval($decodec['Ds_Response'])<100){
$pagado = true;
$logger->info('Marcando $pagado=true');
}else{
$error=true;
}
echo'FIRMA OK';
} else {
$pagado = false;
//$logger->info('Firma POST denegada.');
echo'FIRMA KO';
}
}
elseif (!empty($_GET)) {//URL DE RESP. ONLINE
//$logger->info('Detectado GET. Inicia comprobación.');
$version = $_GET["Ds_SignatureVersion"];
$datos = $_GET["Ds_MerchantParameters"];
$signatureRecibida = $_GET["Ds_Signature"];
$decodec = json_decode($api->decodeMerchantParameters($datos), true);
switch ($env){
case 'finkaluz':case 'emfra':
$kc = 'Kh6cHWPsap169mNSJCUNi2vpxT1DnnAd';
break;
default:
$kc = 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';
break;
}
$firma = $api->createMerchantSignatureNotif($kc, $datos);
$logger->info(gettype($decodec));
$logger->info($decodec["Ds_Response"]);
$decodec2=json_decode($decodec, true);
$logger->info(gettype($decodec2));
$logger->info($decodec2["Ds_Response"]);
if ($firma === $signatureRecibida) {
if (intval($decodec['Ds_Response'])<100){
$pagado = true;
$logger->info('Marcando $pagado=true');
}else{
$error=true;
}
echo'FIRMA OK';
} else {
$pagado = false;
//$logger->info('Firma GET denegada.');
echo'FIRMA KO';
}
}
else{
$api=new RedsysAPI();
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log', Logger::DEBUG));
switch ($env){
case 'finkaluz':case 'emfra':
$fuc="355719071";
break;
default:
$fuc="351398243";
break;
}
$terminal="1";
$moneda="978";
$trans="0";
$url=$this->generateUrl('factura_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
$urlOKKO=$this->generateUrl('factura_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
$id=time();
$amount=str_replace('.','',$factura->getTotalFactura());;
// Se Rellenan los campos
$api->setParameter("DS_MERCHANT_AMOUNT",$amount);
$api->setParameter("DS_MERCHANT_ORDER",$id);
$api->setParameter("DS_MERCHANT_MERCHANTCODE",$fuc);
$api->setParameter("DS_MERCHANT_CURRENCY",$moneda);
$api->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$trans);
$api->setParameter("DS_MERCHANT_TERMINAL",$terminal);
$api->setParameter("DS_MERCHANT_MERCHANTURL",$url);
$api->setParameter("DS_MERCHANT_URLOK",$urlOKKO);
$api->setParameter("DS_MERCHANT_URLKO",$urlOKKO);
//Datos de configuración
$version="HMAC_SHA256_V1";
switch ($env){
case 'finkaluz':case 'emfra':
$kc = 'Kh6cHWPsap169mNSJCUNi2vpxT1DnnAd';
break;
default:
$kc = 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';
break;
}
// Se generan los parámetros de la petición
$request = "";
$params = $api->createMerchantParameters();
$signature = $api->createMerchantSignature($kc);
}
if ($pagado??null === true) {
$logger->info('Marcando como pagado.');
$factura->setDevuelta(false);
$entityManager->persist($factura);
$entityManager->flush();
//Notificación email
try {
switch ($env){
case 'finkaluz':
$body=$this->renderView('email/finkaluz.facturaPagada.html.twig',['factura'=>$factura]);
$from='finkaluz@finkaluz.com';
break;
case 'emfra':
$body=$this->renderView('email/emfra.facturaPagada.html.twig',['factura'=>$factura]);
$from='finkaluz@finkaluz.com';
break;
case 'apolo':
$body=$this->renderView('email/apolo.facturaPagada.html.twig',['factura'=>$factura]);
$from='clientes@vibraenergies.es';
break;
default:
$body=$this->renderView('email/facturaPagada.html.twig',['factura'=>$factura]);
$from='energaze@energaze.com';
break;
}
$message = (new Email())
->subject('FACTURA PAGADA')
->from($from)
->to($factura->getContrato()->getCliente()->getEmail())
->html($body);
$mailer->send($message);
}catch (\Exception $exception){
$logger->info($exception->getMessage());
}
}elseif ($pagado??null === false){
$error=true;
}
}
switch ($env){
case 'finkaluz':
$template='factura/finkaluz.pagar.html.twig';
break;
case 'emfra':
$template='factura/emfra.pagar.html.twig';
break;
case 'apolo':
$template='factura/apolo.pagar.html.twig';
break;
default:
$template='factura/pagar.html.twig';
break;
}
return $this->render($template, [
'factura' => $factura,
'error' => $error,
'version' => $version,
'params' => $params,
'signature' => $signature,
]);
}
/**
* @Route("factura/{id}/edit", name="factura_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Factura $factura, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
$form = $this->createForm(FacturaType::class, $factura);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$factura->calcularTotal();
$entityManager->flush();
return $this->redirectToRoute('factura_show', ['id'=>$factura->getId()]);
}
return $this->render('factura/edit.html.twig', [
'factura' => $factura,
'form' => $form->createView(),
]);
}
/* /**
* @Route("factura/{id}", name="factura_delete", methods={"DELETE"})
*
public function delete(Request $request, Factura $factura): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
if ($this->isCsrfTokenValid('delete'.$factura->getId(), $request->request->get('_token'))) {
$contrato=$factura->getContrato();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($factura);
$entityManager->flush();
}
return $this->redirectToRoute('contrato_show',['id'=>$contrato->getId()]);
}*/
/**
* @Route("factura/{id}", name="factura_delete", methods={"POST"})
*/
public function delete(Request $request, Factura $factura, FacturaRepository $facturaRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$factura->getId(), $request->request->get('_token'))) {
$contrato=$factura->getContrato();
$facturaRepository->remove($factura, true);
}
return $this->redirectToRoute('contrato_show',['id'=>$contrato->getId()], Response::HTTP_SEE_OTHER);
}
/**
* @Route("factura/otros/{id}", name="facturaGenerica_show", methods={"GET"})
*/
public function showGenerica(FacturaGenerica $factura, BancoRepository $bancoRepository, EntityManagerInterface $entityManager): Response
{
if(
$factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
){
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
}
$entidad=$bancoRepository->findByCuenta($factura->getCcc());
$importeTotal=0;
foreach ($factura->getConceptos() as $concepto){
$importeTotal+=$concepto->getImporte();
}
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
return $this->render('factura_generica/finkaluz.factura.html.twig', $params);
case 'emfra':
return $this->render('factura_generica/emfra.factura.html.twig', $params);
case 'onda':
return $this->render('factura_generica/onda.factura.html.twig', $params);
case 'digitel':
return $this->render('factura_generica/digitel.factura.html.twig', $params);
case 'apolo':
return $this->render('factura_generica/apolo.factura.html.twig', $params);
case 'e3':
return $this->render('factura_generica/e3/factura.html.twig', $params);
case 'telkes':
return $this->render('factura_generica/telkes/factura.html.twig', $params);
case 'paladio':
return $this->render('factura_generica/paladio/factura.html.twig', $params);
case 'arsen':
return $this->render('factura_generica/arsen/factura.html.twig', $params);
default:
return $this->render('factura_generica/factura.html.twig', $params);
}
}
/**
* @Route("factura/otros/{id}/pdf", name="facturaGenerica_pdf", methods={"GET", "POST"})
*/
public function pdfGenerica(FacturaGenerica $factura, Pdf $pdf, BancoRepository $bancoRepository, EntityManagerInterface $entityManager): Response
{
if(
$factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
){
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
}
$entidad=$bancoRepository->findByCuenta($factura->getCcc());
$importeTotal=0;
foreach ($factura->getConceptos() as $concepto){
$importeTotal+=$concepto->getImporte();
}
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura_generica/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura_generica/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura_generica/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura_generica/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura_generica/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura_generica/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura_generica/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura_generica/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura_generica/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura_generica/factura.pdf.twig', $params);
break;
}
return new PdfResponse(
$pdf->getOutputFromHtml($html),
(str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_numero').'.pdf'
);
}
/**
* @Route("factura/otros/{id}/xml", name="facturaGenerica_xml", methods={"GET", "POST"})
*/
public function xmlGenerica(FacturaGenerica $factura, Pdf $pdf, BancoRepository $bancoRepository,
Filesystem $filesystem, EntityManagerInterface $entityManager): Response
{
if(
$factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
){
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
}
$entidad=$bancoRepository->findByCuenta($factura->getCcc());
$importeTotal=0;
foreach ($factura->getConceptos() as $concepto){
$importeTotal+=$concepto->getImporte();
}
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ){
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura_generica/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura_generica/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura_generica/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura_generica/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura_generica/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura_generica/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura_generica/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura_generica/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura_generica/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura_generica/factura.pdf.twig', $params);
break;
}
//Attach PDF
try {
unlink(__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
} catch (\Exception $exception) {
}
$pdfPath=__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf';
$pdf->generateFromHtml(
$html,
$pdfPath
);
$params['pdf']=base64_encode(file_get_contents($pdfPath));
//Detect NIF type
$nif=$factura->getNifCliente();
$first=ctype_alpha( substr($nif,0,1) );
$last=ctype_alpha( substr($nif,strlen($nif)-1,1) );
$validador= new Validador();
if( $validador->validateCif($nif) ){
$params['tipoDocumento']='CIF';
}
elseif($first && $last)
$params['tipoDocumento']='NIE';
elseif ($first)
$params['tipoDocumento']='CIF';
else
$params['tipoDocumento']='DNI';
switch ($params['tipoDocumento']){
case 'NIE':case 'DNI':
$cliente=$factura->getContrato()->getCliente();
if ( $factura->getNombreCliente()==$cliente->__toString() ){
$params['nombre']['nombre']=$cliente->getNombre();
$params['nombre']['apellido1']=$cliente->getApellido();
$params['nombre']['apellido2']=$cliente->getApellido2();
}
else{
$nombreArray=explode( ' ', $factura->getNombreCliente() );
$arrayCount=count($nombreArray);
$params['nombre']['nombre']=$nombreArray[0];
if($arrayCount==2){
$params['nombre']['apellido1']=$nombreArray[1];
}elseif ($arrayCount==3){
$params['nombre']['apellido1']=$nombreArray[1];
$params['nombre']['apellido2']=$nombreArray[2];
}elseif ($arrayCount==4){
$params['nombre']['nombre'].=' '.$nombreArray[1];
$params['nombre']['apellido1']=$nombreArray[2];
$params['nombre']['apellido2']=$nombreArray[3];
}else {
$nombreArray = explode(' ', $factura->getNombreCliente());
$arrayCount = count($nombreArray);
if ($arrayCount > 1) {
$params['nombre']['apellido1'] = '';
$params['nombre']['apellido2'] = '';
$i=1;
for (; $i < $arrayCount; $i++) {
$concatenatedString = $params['nombre']['apellido1'] . $nombreArray[$i] . ' ';
if (strlen($concatenatedString) <= 40) {
$params['nombre']['apellido1'] = $concatenatedString;
} else {
break;
}
}
for (; $i < $arrayCount; $i++) {
$concatenatedString = $params['nombre']['apellido2'] . $nombreArray[$i] . ' ';
if (strlen($concatenatedString) <= 40) {
$params['nombre']['apellido2'] = $concatenatedString;
} else {
break;
}
}
}
$params['nombre']['apellido1'] = trim($params['nombre']['apellido1']);
$params['nombre']['apellido2'] = trim($params['nombre']['apellido2']);
}
}
}
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$xml=$this->renderView('factura_generica/finkaluz.factura.xml.twig', $params);
break;
case 'emfra':
$xml=$this->renderView('factura_generica/emfra.factura.xml.twig', $params);
break;
case 'onda':
$xml=$this->renderView('factura_generica/onda.factura.xml.twig', $params);
break;
case 'digitel':
$xml=$this->renderView('factura_generica/digitel.factura.xml.twig', $params);
break;
case 'apolo':
$xml=$this->renderView('factura_generica/apolo.factura.xml.twig', $params);
break;
case 'e3':
$xml=$this->renderView('factura_generica/e3/factura.xml.twig', $params);
break;
case 'telkes':
$xml=$this->renderView('factura_generica/telkes/factura.xml.twig', $params);
break;
case 'paladio':
$xml=$this->renderView('factura_generica/paladio/factura.xml.twig', $params);
break;
case 'arsen':
$xml=$this->renderView('factura_generica/arsen/factura.xml.twig', $params);
break;
default:
$xml=$this->renderView('factura_generica/factura.xml.twig', $params);
break;
}
$path=__DIR__ . '/../../temp/';
$filename=(str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.xml';
$filesystem->dumpFile($path.$filename, $xml);
$response= new BinaryFileResponse($path.$filename);
// Create the disposition of the file
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$filename
);
// Set the content disposition
$response->headers->set('Content-Disposition', $disposition);
// Dispatch request
return $response;
}
/**
* @Route("factura/otros/{id}/enviar", name="facturaGenerica_enviar", methods={"GET", "POST"})
*/
public function enviarGenerica(FacturaGenerica $factura, Pdf $pdf, BancoRepository $bancoRepository,
MailerInterface $mailer, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
$logger = new Logger('factura_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/email.log', Logger::DEBUG));
$entidad = $bancoRepository->findByCuenta($factura->getCcc());
$tarifa = $factura->getTarifa();
if ($tarifa->getTipoTarifa() == 'Electricidad') {
$subject = 'FACTURA ELECTRICIDAD';
$tipo='electricidad';
}
else {
$subject = 'FACTURA GAS';
$tipo='gas';
}
$importeTotal=0;
foreach ($factura->getConceptos() as $concepto){
$importeTotal+=$concepto->getImporte();
}
$importeIva=round($factura->getIva()*$importeTotal/100,2);
$totalFactura=round($importeTotal+$importeIva,2);
if( $totalFactura!==$factura->getTotalFactura() ) {
$factura->setTotalFactura($totalFactura);
$entityManager->flush();
}
$params=[
'factura' => $factura,
'entidad'=>$entidad,
'importeTotal'=>$importeTotal,
'importeIva'=>$importeIva,
'totalFactura'=>$totalFactura,
];
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$html=$this->renderView('factura_generica/finkaluz.factura.pdf.twig', $params);
break;
case 'emfra':
$html=$this->renderView('factura_generica/emfra.factura.pdf.twig', $params);
break;
case 'onda':
$html=$this->renderView('factura_generica/onda.factura.pdf.twig', $params);
break;
case 'digitel':
$html=$this->renderView('factura_generica/digitel.factura.pdf.twig', $params);
break;
case 'apolo':
$html=$this->renderView('factura_generica/apolo.factura.pdf.twig', $params);
break;
case 'e3':
$html=$this->renderView('factura_generica/e3/factura.pdf.twig', $params);
break;
case 'telkes':
$html=$this->renderView('factura_generica/telkes/factura.pdf.twig', $params);
break;
case 'paladio':
$html=$this->renderView('factura_generica/paladio/factura.pdf.twig', $params);
break;
case 'arsen':
$html=$this->renderView('factura_generica/arsen/factura.pdf.twig', $params);
break;
default:
$html=$this->renderView('factura_generica/factura.pdf.twig', $params);
break;
}
try {
unlink(__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
} catch (\Exception $exception) {
}
$pdf->generateFromHtml(
$html,
__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf'
);
try {
switch ($_SERVER['APP_ENV']??'finkaluz'){
case 'finkaluz':
$body=$this->renderView('email/finkaluz.factura.html.twig',['tipo'=>$tipo]);
$from='finkaluz@finkaluz.com';
break;
case 'emfra':
$body=$this->renderView('email/emfra.factura.html.twig',['tipo'=>$tipo]);
$from='finkaluz@finkaluz.com';
break;
case 'onda':
$body=$this->renderView('email/onda.factura.html.twig',['tipo'=>$tipo]);
$from='facturacion@ondaenergia.es';
break;
case 'digitel':
$body=$this->renderView('email/digitel.factura.html.twig',['tipo'=>$tipo, 'email'=>$factura->getContrato()->getCliente()->getEmail()]);
$from='energy@itdigitel.es';
break;
case 'apolo':
$body=$this->renderView('email/apolo.factura.html.twig',['tipo'=>$tipo, 'factura'=>$factura]);
$from='clientes@vibraenergies.es';
break;
case 'e3':
$body=$this->renderView('email/e3/factura.html.twig',['tipo'=>$tipo]);
$from='e3powerenergy@e3powerenergy.com';
break;
case 'telkes':
$body=$this->renderView('email/telkes/factura.html.twig',['tipo'=>$tipo]);
$from='info@telkesenergia.com';
break;
case 'paladio':
$body=$this->renderView('email/paladio/factura.html.twig',['tipo'=>$tipo]);
$from='clientes@paladiopartners.com';
break;
case 'arsen':
$body=$this->renderView('email/arsen/factura.html.twig',['tipo'=>$tipo]);
$from='arsenenergia@arsenenergia.com';
break;
default:
$body=$this->renderView('email/factura.html.twig',['tipo'=>$tipo]);
$from='energaze@energaze.com';
break;
}
$message = (new Email())
->subject($subject)
->from($from)
->to($factura->getContrato()->getCliente()->getEmail())
->html($body)
->attachFromPath(__DIR__ . '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
/*try{
unlink(__DIR__.'/../../temp/'.(str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_número').'.pdf');
}catch (\Exception $exception){}*/
$mailer->send($message);
$status='success';
}catch (\Exception $exception){
$status='error';
$logger->info($exception->getMessage());
}
return $this->redirectToRoute('facturaGenerica_show',['id'=>$factura->getId(), 'status'=>$status]);
}
/**
* @Route("factura/otros/{id}/pagar", name="facturaGenerica_pagar", methods={"GET","POST"})
*/
public function pagarGenerica(FacturaGenerica $factura, MailerInterface $mailer, EntityManagerInterface $entityManager): Response
{
if( $factura->getContrato()->getCliente()->getUser()!=$this->getUser() ){
$this->denyAccessUnlessGranted('ROLE_FACTURACION');
}
$error=false;
$version="";
$params="";
$signature="";
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log', Logger::DEBUG));
if($factura->getDevuelta()) {
//$logger->info('Detectado !pagado. Inicia comprobación.');
$api = new RedsysAPI;
if (!empty($_POST)) {//URL DE RESP. ONLINE
//$logger->info('Detectado POST. Inicia comprobación.');
$version = $_POST["Ds_SignatureVersion"];
$datos = $_POST["Ds_MerchantParameters"];
$signatureRecibida = $_POST["Ds_Signature"];
$decodec = $api->decodeMerchantParameters($datos);
$kc = 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq'; //Clave recuperada de CANALES
$firma = $api->createMerchantSignatureNotif($kc, $datos);
$logger->info(gettype($decodec));
$logger->info($decodec["Ds_Response"]);
$decodec2=json_decode($decodec, true);
$logger->info(gettype($decodec2));
$logger->info($decodec2["Ds_Response"]);
if ($firma === $signatureRecibida) {
if (intval($decodec['Ds_Response'])<100){
$pagado = true;
$logger->info('Marcando $pagado=true');
}else{
$error=true;
}
echo'FIRMA OK';
} else {
$pagado = false;
//$logger->info('Firma POST denegada.');
echo'FIRMA KO';
}
}
elseif (!empty($_GET)) {//URL DE RESP. ONLINE
//$logger->info('Detectado GET. Inicia comprobación.');
$version = $_GET["Ds_SignatureVersion"];
$datos = $_GET["Ds_MerchantParameters"];
$signatureRecibida = $_GET["Ds_Signature"];
$decodec = json_decode($api->decodeMerchantParameters($datos), true);
$kc = 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq'; //Clave recuperada de CANALES
$firma = $api->createMerchantSignatureNotif($kc, $datos);
$logger->info(gettype($decodec));
$logger->info($decodec["Ds_Response"]);
$decodec2=json_decode($decodec, true);
$logger->info(gettype($decodec2));
$logger->info($decodec2["Ds_Response"]);
if ($firma === $signatureRecibida) {
if (intval($decodec['Ds_Response'])<100){
$pagado = true;
$logger->info('Marcando $pagado=true');
}else{
$error=true;
}
echo'FIRMA OK';
} else {
$pagado = false;
//$logger->info('Firma GET denegada.');
echo'FIRMA KO';
}
}
else{
$api=new RedsysAPI();
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log', Logger::DEBUG));
$fuc="351398243";
$terminal="1";
$moneda="978";
$trans="0";
$url=$this->generateUrl('facturaGenerica_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
$urlOKKO=$this->generateUrl('facturaGenerica_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
$id=time();
$amount=str_replace('.','',$factura->getTotalFactura());;
// Se Rellenan los campos
$api->setParameter("DS_MERCHANT_AMOUNT",$amount);
$api->setParameter("DS_MERCHANT_ORDER",$id);
$api->setParameter("DS_MERCHANT_MERCHANTCODE",$fuc);
$api->setParameter("DS_MERCHANT_CURRENCY",$moneda);
$api->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$trans);
$api->setParameter("DS_MERCHANT_TERMINAL",$terminal);
$api->setParameter("DS_MERCHANT_MERCHANTURL",$url);
$api->setParameter("DS_MERCHANT_URLOK",$urlOKKO);
$api->setParameter("DS_MERCHANT_URLKO",$urlOKKO);
//Datos de configuración
$version="HMAC_SHA256_V1";
$kc = 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';//Clave recuperada de CANALES
// Se generan los parámetros de la petición
$request = "";
$params = $api->createMerchantParameters();
$signature = $api->createMerchantSignature($kc);
}
if ($pagado??null === true) {
$logger->info('Marcando como pagado.');
$factura->setDevuelta(false);
$entityManager->persist($factura);
$entityManager->flush();
//Notificación email
try {
$message = (new Email())
->subject('FACTURA PAGADA')
->from('contacto@energaze.com')
->to($factura->getContrato()->getCliente()->getEmail())
->html($this->renderView('email/facturaPagada.html.twig',['factura'=>$factura]));
$mailer->send($message);
}catch (\Exception $exception){
$logger->info($exception->getMessage());
}
}elseif ($pagado??null === false){
$error=true;
}
}
return $this->render('factura/pagar.html.twig', [
'factura' => $factura,
'error' => $error,
'version' => $version,
'params' => $params,
'signature' => $signature,
]);
}
/**
* @Route("factura/otros/{id}/edit", name="facturaGenerica_edit", methods={"GET","POST"})
*/
public function editGenerica(Request $request, FacturaGenerica $factura, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('ROLE_FACTURACION');;
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaApi.log', Logger::DEBUG));
$form = $this->createForm(FacturaGenericaType::class, $factura);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$factura->calcularTotal();
$entityManager->flush();
$logger->info('Factura '.$factura->getId().' editada por usuario '.$this->getUser()->getUsername());
return $this->redirectToRoute('facturaGenerica_show', ['id'=>$factura->getId()]);
}
return $this->render('factura_generica/edit.html.twig', [
'contrato'=>$factura->getContrato(),
'factura' => $factura,
'form' => $form->createView(),
]);
}
/**
* @Route("factura/otros/{id}", name="facturaGenerica_delete", methods={"POST"})
*/
public function deleteGenerica(Request $request, FacturaGenerica $factura, FacturaGenericaRepository $facturaRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$factura->getId(), $request->request->get('_token'))) {
$contrato=$factura->getContrato();
$facturaRepository->remove($factura, true);
}
return $this->redirectToRoute('contrato_show',['id'=>$contrato->getId()], Response::HTTP_SEE_OTHER);
}
}