src/Controller/FacturaController.php line 254

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Banco;
  4. use App\Entity\Comercial;
  5. use App\Entity\Factura;
  6. use App\Entity\FacturaGenerica;
  7. use App\Entity\Tool\Exporter;
  8. use App\Entity\Tool\RedsysAPI;
  9. use App\Entity\Tool\Validador;
  10. use App\Form\ExportarFacturaType;
  11. use App\Form\FacturaGenericaType;
  12. use App\Form\FacturaType;
  13. use App\Form\FiltrarFacturaLightType;
  14. use App\Form\FiltrarFacturaType;
  15. use App\Repository\BancoRepository;
  16. use App\Repository\ContratoRepository;
  17. use App\Repository\FacturaGenericaRepository;
  18. use App\Repository\FacturaRepository;
  19. use DateInterval;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Doctrine\ORM\Query\Expr\Math;
  22. use Exception;
  23. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  24. use Knp\Snappy\Pdf;
  25. use Dompdf\Dompdf;
  26. use Monolog\Handler\StreamHandler;
  27. use Monolog\Logger;
  28. use PhpOffice\PhpSpreadsheet\Writer\Xls;
  29. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  30. use Symfony\Component\Filesystem\Filesystem;
  31. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  32. use Symfony\Component\Mailer\MailerInterface;
  33. use Symfony\Component\Mime\Email;
  34. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  35. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  36. use Symfony\Component\HttpFoundation\Request;
  37. use Symfony\Component\HttpFoundation\Response;
  38. use Symfony\Component\Mime\FileinfoMimeTypeGuesser;
  39. use Symfony\Component\Routing\Annotation\Route;
  40. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  41. /**
  42.  * @Route("/")
  43.  */
  44. class FacturaController extends AbstractController
  45. {
  46.     /**
  47.      * @Route("/facturas", name="factura_index", methods={"GET"})
  48.      */
  49.     public function indexAjax(): Response
  50.     {
  51.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  52.         return $this->render('factura/indexAjax.html.twig', [
  53.             /*'facturas' => array_merge($facturaRepository->findAll(), $facturaGenericaRepository->findAll()),*/
  54.         ]);
  55.     }
  56.     /**
  57.      * @Route("/otros-conceptos", name="facturaGenerica_index", methods={"GET"})
  58.      */
  59.     public function genericaIndexAjax(): Response
  60.     {
  61.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  62.         return $this->render('factura/indexAjax.html.twig', [
  63.             /*'facturas' => array_merge($facturaRepository->findAll(), $facturaGenericaRepository->findAll()),*/
  64.         ]);
  65.     }
  66.     /**
  67.      * @Route("/facturas-old", name="factura_old", methods={"GET"})
  68.      */
  69.     public function index(): Response
  70.     {
  71.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  72.         return $this->render('factura/indexAjax.html.twig', [
  73.             /*'facturas' => array_merge($facturaRepository->findAll(), $facturaGenericaRepository->findAll()),*/
  74.         ]);
  75.     }
  76.     /**
  77.      * @Route("/filtrar-facturas", name="factura_filtrar", methods={"GET"})
  78.      */
  79.     public function latest(): Response
  80.     {
  81.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  82.         $form=$this->createForm(FiltrarFacturaLightType::class);
  83.         return $this->render('factura/indexAjax.html.twig', ['filtrarFacturaForm'=>$form->createView()]);
  84.     }
  85.     /**
  86.      * @Route("/facturas-devueltas", name="factura_devueltas", methods={"GET"})
  87.      */
  88.     public function devueltas(): Response
  89.     {
  90.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  91.         return $this->render('factura/indexAjax.html.twig', []);
  92.     }
  93.     /**
  94.      * @Route("/rentabilidad", name="rentabilidad", methods={"POST","GET"})
  95.      */
  96.     public function rentabilidad(FacturaRepository $facturaRepositoryFacturaGenericaRepository $facturaGenericaRepositoryRequest $request): Response
  97.     {
  98.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  99.         $form=$this->createForm(FiltrarFacturaType::class);
  100.         $form->handleRequest($request);
  101.         $formSubmitted=false;
  102.         $facturas=[];
  103.         $facturasGenericas=[];
  104.         $facturado=0;
  105.         $coste=0;
  106.         $pagado=0;
  107.         $devuelto=0;
  108.         $pendiente=0;
  109.         $beneficio=0;
  110.         if($form->isSubmitted() && $form->isValid()){
  111.             $formSubmitted=true;
  112.             $fechaEmisionFrom=$form->get('fechaEmisionFrom')->getData();
  113.             $fechaEmisionTo=$form->get('fechaEmisionTo')->getData();
  114.             $fechaLecturaFrom=$form->get('fechaLecturaFrom')->getData();
  115.             $fechaLecturaTo=$form->get('fechaLecturaTo')->getData();
  116.             $fechaCobroFrom=$form->get('fechaCobroFrom')->getData();
  117.             $fechaCobroTo=$form->get('fechaCobroTo')->getData();
  118.             $pagada=$form->get('pagada')->getData();
  119.             $tipo=$form->get('tipo')->getData();
  120.             $estadoCompraFactura=$form->get('estadoCompraFactura')->getData();
  121.             if($tipo=='todas' or $tipo=='suministro'){
  122.                 $facturas=$facturaRepository->findByFilter(
  123.                     $fechaEmisionFrom,
  124.                     $fechaEmisionTo,
  125.                     $fechaLecturaFrom,
  126.                     $fechaLecturaTo,
  127.                     $fechaCobroFrom,
  128.                     $fechaCobroTo,
  129.                     $pagada,
  130.                     $estadoCompraFactura
  131.                 );
  132.                 foreach ($facturas as $factura){
  133.                     $totalCompra=$factura->getTotalCompra();
  134.                     $estdoCompra=$factura->getEstadoCompra();
  135.                     $facturado+=$factura->getTotalFactura();
  136.                     $coste+=$totalCompra;
  137.                     if($estdoCompra !== null){
  138.                         switch($estdoCompra->getNombre()){
  139.                             case 'Pendiente':
  140.                                 $pendiente+=$totalCompra;
  141.                                 break;
  142.                             case 'Devuelta':
  143.                                 $devuelto+=$totalCompra;
  144.                                 break;
  145.                             case 'Pagada':
  146.                                 $pagado+=$totalCompra;
  147.                         }
  148.                     }
  149.                 }
  150.             }
  151.             if ($fechaLecturaFrom==null and $fechaLecturaTo==null and $fechaCobroFrom==null and $fechaCobroTo==null and $estadoCompraFactura==null and ($tipo=='todas' or $tipo=='otros')){
  152.                 $facturasGenericas=$facturaGenericaRepository->findByFilter(
  153.                     $fechaEmisionFrom,
  154.                     $fechaEmisionTo,
  155.                     $pagada
  156.                 );
  157.                 foreach ($facturasGenericas as $factura){
  158.                     $facturado+=$factura->getTotalFactura();
  159.                 }
  160.             }
  161.             $beneficio=$facturado-$coste;
  162.         }
  163.         return $this->render('factura/rentabilidad.html.twig', [
  164.             'filtrarFacturaForm' => $form->createView(),
  165.             'formSubmitted'=>$formSubmitted,
  166.             'facturas' => array_merge($facturas$facturasGenericas),
  167.             'facturado'=>$facturado,
  168.             'coste'=>$coste,
  169.             'pendiente'=>$pendiente,
  170.             'pagado'=>$pagado,
  171.             'devuelto'=>$devuelto,
  172.             'beneficio'=>$beneficio
  173.         ]);
  174.     }
  175.     /*
  176.      * @Route("facturas/new", name="factura_new", methods={"GET","POST"})
  177.     public function new(Request $request): Response
  178.     {
  179.         $factura = new Factura();
  180.         $form = $this->createForm(FacturaType::class, $factura);
  181.         $form->handleRequest($request);
  182.         if ($form->isSubmitted() && $form->isValid()) {
  183.             $entityManager = $this->getDoctrine()->getManager();
  184.             $entityManager->persist($factura);
  185.             $entityManager->flush();
  186.             return $this->redirectToRoute('factura_index');
  187.         }
  188.         return $this->render('factura/new.html.twig', [
  189.             'factura' => $factura,
  190.             'form' => $form->createView(),
  191.         ]);
  192.     }
  193.      */
  194.     /**
  195.      * @Route("/facturas/exportar", name="factura_exportar", methods={"POST","GET"})
  196.      */
  197.     public function export(Request $requestFacturaRepository $facturaRepositoryFacturaGenericaRepository $facturaGenericaRepository): Response
  198.     {
  199.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  200.         $form $this->createForm(ExportarFacturaType::class);
  201.         $form->handleRequest($request);
  202.         if ($form->isSubmitted() && $form->isValid()) {
  203.             switch ( $form->get('tipoFactura')->getData() ){
  204.                 case 2:
  205.                     $facturas=$facturaRepository->findByExportForm($form);
  206.                     break;
  207.                 case 3:
  208.                     $facturas=$facturaGenericaRepository->findByExportForm($form);
  209.                     break;
  210.                 default:
  211.                     $facturas=array_merge($facturaRepository->findByExportForm($form), $facturaGenericaRepository->findByExportForm($form));
  212.                     break;
  213.             }
  214.             $exporter=new Exporter$facturas );
  215.             $file=$exporter->createFactusolFacturaXls();
  216.             return new BinaryFileResponse($file);
  217.         }else{
  218.             return $this->render('factura/exportar.html.twig', [
  219.                 'form'=>$form->createView(),
  220.             ]);
  221.         }
  222.     }
  223.     /**
  224.      * @Route("factura/{id}", name="factura_show", methods={"GET"})
  225.      */
  226.     public function show(Factura $facturaFacturaRepository $facturaRepositoryBancoRepository $bancoRepositoryEntityManagerInterface $entityManager): Response
  227.     {
  228.         if(
  229.             $factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
  230.             ($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
  231.         ){
  232.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  233.         }
  234.         setlocale(LC_TIME"spanish");
  235.         $facturas=$facturaRepository->findBy(['contrato'=>$factura->getContrato()], ['fechaLectura'=>'ASC']);
  236.         $tarifa=$factura->getTarifa();
  237.         $entidad=$bancoRepository->findByCuenta($factura->getCcc());
  238.         $consumoAcumulado='0';
  239.         $consumoMedio='0';
  240.         $datosGrafica=[];
  241.         $ultimaFecha='';
  242.         $factura->calcularTotal();
  243.         if($tarifa->getTipoTarifa()=='Electricidad'){
  244.             /*if($tarifa=='2.0A' || $tarifa=='2.1A'){
  245.                 $periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  246.                 $totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  247.                 $totalPotencia=$totalPotenciaP1;
  248.                 $totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
  249.                 $totalEnergia=$totalEnergiaP1;
  250.                 $subtotal=round($totalEnergia+$totalPotencia,2);
  251.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  252.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  253.                 $otrosConceptos=0;
  254.                 foreach ($factura->getConceptos() as $concepto){
  255.                     $otrosConceptos+=round($concepto->getImporte(),2);
  256.                 }
  257.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  258.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  259.                 $totalFactura=round($importeTotal+$importeIva,2);
  260.                 if( $totalFactura!==$factura->getTotalFactura() ){
  261.                     $factura->setTotalFactura($totalFactura);
  262.                     $this->getDoctrine()->getManager()->flush();
  263.                 }
  264.             }
  265.             elseif($tarifa=='2.0DHA' || $tarifa=='2.1DHA'){
  266.                 $periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  267.                 $totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  268.                 $totalPotencia=$totalPotenciaP1;
  269.                 $totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
  270.                 $totalEnergiaP3=round($factura->getConsumoP3()*$factura->getPrecioEnergiaP3(),2);
  271.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP3;
  272.                 $subtotal=round($totalEnergia+$totalPotencia,2);
  273.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  274.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  275.                 $otrosConceptos=0;
  276.                 foreach ($factura->getConceptos() as $concepto){
  277.                     $otrosConceptos+=round($concepto->getImporte(),2);
  278.                 }
  279.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  280.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  281.                 $totalFactura=round($importeTotal+$importeIva,2);
  282.                 if( $totalFactura!==$factura->getTotalFactura() ){
  283.                     $factura->setTotalFactura($totalFactura);
  284.                     $this->getDoctrine()->getManager()->flush();
  285.                 }
  286.             }
  287.             elseif($tarifa=='2.0DHS' || $tarifa=='2.1DHS'){
  288.                 $periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  289.                 $totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  290.                 $totalPotencia=$totalPotenciaP1;
  291.                 $totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
  292.                 $totalEnergiaP2=round($factura->getConsumoP2()*$factura->getPrecioEnergiaP2(),2);
  293.                 $totalEnergiaP3=round($factura->getConsumoP3()*$factura->getPrecioEnergiaP3(),2);
  294.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
  295.                 $subtotal=round($totalEnergia+$totalPotencia,2);
  296.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  297.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  298.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto,2);
  299.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  300.                 $totalFactura=round($importeTotal+$importeIva,2);
  301.                 if( $totalFactura!==$factura->getTotalFactura() ){
  302.                     $factura->setTotalFactura($totalFactura);
  303.                     $this->getDoctrine()->getManager()->flush();
  304.                 }
  305.                 //Grafica
  306.                 if($factura===$facturas[0]){
  307.                     $consumoMedio=$factura->getTotalFactura();
  308.                     $datosGrafica[]=[
  309.                         str_replace('.','',strtolower( strftime('%h-%y',$factura->getFechaLectura()->getTimestamp()) )),
  310.                         $factura->getConsumoP1(),
  311.                         $factura->getConsumoP2(),
  312.                         $factura->getConsumoP3()
  313.                     ];
  314.                     $ultimaFecha=$factura->getFechaLectura();
  315.                     $consumoAcumulado=$factura->getConsumo();
  316.                 }
  317.                 else{
  318.                     $indiceFactura=array_search($factura, $facturas);
  319.                     if($indiceFactura<12){
  320.                         for($i=0;$i<=$indiceFactura && $i<12;$i++){
  321.                             $consumoMedio+=$facturas[$i]->getTotalFactura();
  322.                             $consumoAcumulado+=$facturas[$i]->getConsumo();
  323.                             $datosGrafica[]=[
  324.                                 str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  325.                                 $facturas[$i]->getConsumoP1(),
  326.                                 $facturas[$i]->getConsumoP2(),
  327.                                 $facturas[$i]->getConsumoP3()
  328.                             ];
  329.                             $ultimaFecha=$facturas[$i]->getFechaLectura();
  330.                         }
  331.                         $consumoMedio=$consumoMedio/($indiceFactura+1);
  332.                     }
  333.                     else{
  334.                         for($i=11;$i>=0;$i--){
  335.                             $n=$indiceFactura-$i;
  336.                             $consumoMedio+=$facturas[$n]->getTotalFactura();
  337.                             $consumoAcumulado+=$facturas[$i]->getConsumo();
  338.                             $datosGrafica[]=[
  339.                                 str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  340.                                 $facturas[$n]->getConsumoP1(),
  341.                                 $facturas[$n]->getConsumoP2(),
  342.                                 $facturas[$n]->getConsumoP3()
  343.                             ];
  344.                         }
  345.                         $consumoMedio=$consumoMedio/12;
  346.                         $ultimaFecha=$factura->getFechaLectura();
  347.                     }
  348.                 }
  349.                 while( count($datosGrafica)<12 ){
  350.                     $ultimaFecha = date_add($ultimaFecha, date_interval_create_from_date_string('1 month'));
  351.                     $datosGrafica[]=[
  352.                         str_replace('.','',strtolower( strftime('%h-%y',$ultimaFecha->getTimestamp()) )),
  353.                         0,
  354.                         0,
  355.                         0
  356.                     ];
  357.                 }
  358.                 //Return
  359.                 return $this->render('factura/factura.html.twig', [
  360.                     'factura' => $factura,
  361.                     'vencimientoFactura'=>date_create(),
  362.                     'finContrato'=>$contrato->getFechaFin(),
  363.                     'entidad'=>$entidad,
  364.                     'consumoMedio'=>$consumoMedio,
  365.                     'consumoAcumulado'=>$consumoAcumulado,
  366.                     'periodoFacturacion'=>$periodoFacturacion,
  367.                     'totalPotenciaP1'=>$totalPotenciaP1,
  368.                     'totalPotencia'=>$totalPotencia,
  369.                     'totalEnergiaP1'=>$totalEnergiaP1,
  370.                     'totalEnergiaP3'=>$totalEnergiaP3,
  371.                     'totalEnergia'=>$totalEnergia,
  372.                     'subtotal'=>$subtotal,
  373.                     'importeImpuesto'=>$importeImpuesto,
  374.                     'importeAlquiler'=>$importeAlquiler,
  375.                     'importeTotal'=>$importeTotal,
  376.                     'importeIva'=>$importeIva,
  377.                     'totalFactura'=>$totalFactura,
  378.                     'datosGrafica'=>$datosGrafica
  379.                 ]);
  380.             }
  381.             else*/
  382.             if($tarifa=='3.0A' || $tarifa=='3.1A'){
  383.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  384.                 $consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
  385.                 $consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
  386.                 $consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
  387.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  388.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  389.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  390.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  391.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  392.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  393.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
  394.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  395.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  396.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  397.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
  398.                 $reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
  399.                 $reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
  400.                 $excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
  401.                 $excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
  402.                 if($excesoReactivaP1<0)
  403.                     $excesoReactivaP1=0;
  404.                 if($excesoReactivaP2<0)
  405.                     $excesoReactivaP2=0;
  406.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  407.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  408.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2;
  409.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  410.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  411.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  412.                 $otrosConceptos=0;
  413.                 foreach ($factura->getConceptos() as $concepto){
  414.                     $otrosConceptos+=round($concepto->getImporte(),2);
  415.                 }
  416.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  417.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  418.                 $totalFactura=round($importeTotal+$importeIva,2);
  419.                 if( $totalFactura!==$factura->getTotalFactura() ){
  420.                     $factura->setTotalFactura($totalFactura);
  421.                     $entityManager->flush();
  422.                 }
  423.             }
  424.             else{
  425.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  426.                 $consumoP1Facturado=$factura->getConsumoP1();
  427.                 $consumoP2Facturado=$factura->getConsumoP2();
  428.                 $consumoP3Facturado=$factura->getConsumoP3();
  429.                 $consumoP4Facturado=$factura->getConsumoP4();
  430.                 $consumoP5Facturado=$factura->getConsumoP5();
  431.                 $consumoP6Facturado=$factura->getConsumoP6();
  432.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  433.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  434.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  435.                 $potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
  436.                 $potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
  437.                 $potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
  438.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  439.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  440.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  441.                 $totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
  442.                 $totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
  443.                 $totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
  444.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
  445.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  446.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  447.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  448.                 $totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
  449.                 $totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
  450.                 $totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
  451.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
  452.                 $reactivaP1=$factura->getReactivaP1();
  453.                 $reactivaP2=$factura->getReactivaP2();
  454.                 $reactivaP3=$factura->getReactivaP3();
  455.                 $reactivaP4=$factura->getReactivaP4();
  456.                 $reactivaP5=$factura->getReactivaP5();
  457.                 $reactivaP6=$factura->getReactivaP6();
  458.                 if($reactivaP1!=0)
  459.                     $excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
  460.                 else
  461.                     $excesoReactivaP1=0;
  462.                 if($reactivaP2!=0)
  463.                     $excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
  464.                 else
  465.                     $excesoReactivaP2=0;
  466.                 if($reactivaP3!=0)
  467.                     $excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
  468.                 else
  469.                     $excesoReactivaP3=0;
  470.                 if($reactivaP4!=0)
  471.                     $excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
  472.                 else
  473.                     $excesoReactivaP4=0;
  474.                 if($reactivaP5!=0)
  475.                     $excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
  476.                 else
  477.                     $excesoReactivaP5=0;
  478.                 if($reactivaP6!=0)
  479.                     $excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
  480.                 else
  481.                     $excesoReactivaP6=0;
  482.                 if($excesoReactivaP1<0)
  483.                     $excesoReactivaP1=0;
  484.                 if($excesoReactivaP2<0)
  485.                     $excesoReactivaP2=0;
  486.                 if($excesoReactivaP3<0)
  487.                     $excesoReactivaP3=0;
  488.                 if($excesoReactivaP4<0)
  489.                     $excesoReactivaP4=0;
  490.                 if($excesoReactivaP5<0)
  491.                     $excesoReactivaP5=0;
  492.                 if($excesoReactivaP6<0)
  493.                     $excesoReactivaP6=0;
  494.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  495.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  496.                 $importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
  497.                 $importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
  498.                 $importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
  499.                 $importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
  500.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
  501.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  502.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  503.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  504.                 $otrosConceptos=0;
  505.                 foreach ($factura->getConceptos() as $concepto){
  506.                     $otrosConceptos+=round($concepto->getImporte(),2);
  507.                 }
  508.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  509.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  510.                 $totalFactura=round($importeTotal+$importeIva,2);
  511.                 if( $totalFactura!==$factura->getTotalFactura() ){
  512.                     $factura->setTotalFactura($totalFactura);
  513.                     $entityManager->flush();
  514.                 }
  515.                 //throw $this->createNotFoundException('No se ha encontrado la factura');
  516.             }
  517.             //Grafica
  518.             $indiceFactura=array_search($factura$facturas);
  519.             $arrayP=[false,false,false,false,false,false];
  520.             if($indiceFactura<12){
  521.                 for($i=0;$i<=$indiceFactura && $i<12;$i++){
  522.                     $consumoMedio+=$facturas[$i]->getTotalFactura();
  523.                     $consumoAcumulado+=$facturas[$i]->getConsumo();
  524.                     $ultimaFecha=$facturas[$i]->getFechaLectura();
  525.                     $tarifaI=$facturas[$i]->getTarifa();
  526.                     $arrayPI=[
  527.                         $tarifaI->getEnergiaP1(),
  528.                         $tarifaI->getEnergiaP2(),
  529.                         $tarifaI->getEnergiaP3(),
  530.                         $tarifaI->getEnergiaP4(),
  531.                         $tarifaI->getEnergiaP5(),
  532.                         $tarifaI->getEnergiaP6()
  533.                     ];
  534.                     if(!$arrayP[0])
  535.                         $arrayP[0]=$arrayPI[0];
  536.                     if(!$arrayP[1])
  537.                         $arrayP[1]=$arrayPI[1];
  538.                     if(!$arrayP[2])
  539.                         $arrayP[2]=$arrayPI[2];
  540.                     if(!$arrayP[3])
  541.                         $arrayP[3]=$arrayPI[3];
  542.                     if(!$arrayP[4])
  543.                         $arrayP[4]=$arrayPI[4];
  544.                     if(!$arrayP[5])
  545.                         $arrayP[5]=$arrayPI[5];
  546.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  547.                         $datosGrafica[]=[
  548.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  549.                             $facturas[$i]->getConsumoP1(),
  550.                             0,
  551.                             0
  552.                         ];
  553.                         if ( 1>($numeroP??0) ){
  554.                             $numeroP=1;
  555.                         }
  556.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  557.                         $datosGrafica[]=[
  558.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  559.                             $facturas[$i]->getConsumoP1(),
  560.                             0,
  561.                             $facturas[$i]->getConsumoP3()
  562.                         ];
  563.                         if ( 2>($numeroP??0) ){
  564.                             $numeroP=2;
  565.                         }
  566.                     }else*/
  567.                     switch( $tarifaI->getNombre() ){
  568.                         case '3.0A': case '3.1A':
  569.                         $datosGrafica[]=[
  570.                             str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  571.                             $facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
  572.                             $facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
  573.                             $facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
  574.                             0,
  575.                             0,
  576.                             0
  577.                         ];
  578.                         break;
  579.                         default:
  580.                             $datosGrafica[]=[
  581.                                 str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  582.                                 $facturas[$i]->getConsumoP1()??0,
  583.                                 $facturas[$i]->getConsumoP2()??0,
  584.                                 $facturas[$i]->getConsumoP3()??0,
  585.                                 $facturas[$i]->getConsumoP4()??0,
  586.                                 $facturas[$i]->getConsumoP5()??0,
  587.                                 $facturas[$i]->getConsumoP6()??0,
  588.                             ];
  589.                             break;
  590.                     }
  591.                 }
  592.                 $consumoMedio=$consumoMedio/($indiceFactura+1);
  593.                 $numeroP=countarray_filter($arrayP) );
  594.             }
  595.             else{
  596.                 for($i=11;$i>=0;$i--){
  597.                     $n=$indiceFactura-$i;
  598.                     $consumoMedio+=$facturas[$n]->getTotalFactura();
  599.                     $consumoAcumulado+=$facturas[$n]->getConsumo();
  600.                     $tarifaI=$facturas[$n]->getTarifa();
  601.                     $arrayPI=[
  602.                         $tarifaI->getEnergiaP1(),
  603.                         $tarifaI->getEnergiaP2(),
  604.                         $tarifaI->getEnergiaP3(),
  605.                         $tarifaI->getEnergiaP4(),
  606.                         $tarifaI->getEnergiaP5(),
  607.                         $tarifaI->getEnergiaP6()
  608.                     ];
  609.                     if(!$arrayP[0])
  610.                         $arrayP[0]=$arrayPI[0];
  611.                     if(!$arrayP[1])
  612.                         $arrayP[1]=$arrayPI[1];
  613.                     if(!$arrayP[2])
  614.                         $arrayP[2]=$arrayPI[2];
  615.                     if(!$arrayP[3])
  616.                         $arrayP[3]=$arrayPI[3];
  617.                     if(!$arrayP[4])
  618.                         $arrayP[4]=$arrayPI[4];
  619.                     if(!$arrayP[5])
  620.                         $arrayP[5]=$arrayPI[5];
  621.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  622.                         $datosGrafica[]=[
  623.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  624.                             $facturas[$n]->getConsumoP1(),
  625.                             0,
  626.                             0
  627.                         ];
  628.                         if ( 1>($numeroP??0) ){
  629.                             $numeroP=1;
  630.                         }
  631.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  632.                         $datosGrafica[]=[
  633.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  634.                             $facturas[$n]->getConsumoP1(),
  635.                             0,
  636.                             $facturas[$n]->getConsumoP3()
  637.                         ];
  638.                         if ( 2>($numeroP??0) ){
  639.                             $numeroP=2;
  640.                         }
  641.                     }elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
  642.                         $datosGrafica[]=[
  643.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  644.                             $facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
  645.                             $facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
  646.                             $facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
  647.                         ];
  648.                     }*/
  649.                     switch( $tarifaI->getNombre() ){
  650.                         case '3.0A': case '3.1A':
  651.                         $datosGrafica[]=[
  652.                             str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  653.                             $facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
  654.                             $facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
  655.                             $facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
  656.                             0,
  657.                             0,
  658.                             0
  659.                         ];
  660.                         break;
  661.                         default:
  662.                             $datosGrafica[]=[
  663.                                 str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  664.                                 $facturas[$n]->getConsumoP1()??0,
  665.                                 $facturas[$n]->getConsumoP2()??0,
  666.                                 $facturas[$n]->getConsumoP3()??0,
  667.                                 $facturas[$n]->getConsumoP4()??0,
  668.                                 $facturas[$n]->getConsumoP5()??0,
  669.                                 $facturas[$n]->getConsumoP6()??0,
  670.                             ];
  671.                             break;
  672.                     }
  673.                 }
  674.                 $consumoMedio=$consumoMedio/12;
  675.                 $ultimaFecha=$factura->getFechaLectura();
  676.                 $numeroP=countarray_filter($arrayP) );
  677.             }
  678.             $timestamp=date_timestamp_get($ultimaFecha);
  679.             while( count($datosGrafica)<12 ){
  680.                 $ultimaFecha date_add($ultimaFechadate_interval_create_from_date_string('1 month'));
  681.                 $datosGrafica[]=[
  682.                     str_replace('.','',strtolowerstrftime('%h-%y',$ultimaFecha->getTimestamp()) )),
  683.                     0,
  684.                     0,
  685.                     0,
  686.                     0,
  687.                     0,
  688.                     0
  689.                 ];
  690.             }
  691.             $factura->setFechaLectura(date_timestamp_set($ultimaFecha,$timestamp));
  692.             $params=[
  693.                 'factura' => $factura,
  694.                 'entidad'=>$entidad,
  695.                 'consumoMedio'=>$consumoMedio,
  696.                 'consumoAcumulado'=>$consumoAcumulado,
  697.                 'periodoFacturacion'=>$periodoFacturacion,
  698.                 'potenciaP1Facturada'=>$potenciaP1Facturada??null,
  699.                 'potenciaP2Facturada'=>$potenciaP2Facturada??null,
  700.                 'potenciaP3Facturada'=>$potenciaP3Facturada??null,
  701.                 'potenciaP4Facturada'=>$potenciaP4Facturada??null,
  702.                 'potenciaP5Facturada'=>$potenciaP5Facturada??null,
  703.                 'potenciaP6Facturada'=>$potenciaP6Facturada??null,
  704.                 'totalPotenciaP1'=>$totalPotenciaP1,
  705.                 'totalPotenciaP2'=>$totalPotenciaP2??null,
  706.                 'totalPotenciaP3'=>$totalPotenciaP3??null,
  707.                 'totalPotenciaP4'=>$totalPotenciaP4??null,
  708.                 'totalPotenciaP5'=>$totalPotenciaP5??null,
  709.                 'totalPotenciaP6'=>$totalPotenciaP6??null,
  710.                 'totalPotencia'=>$totalPotencia,
  711.                 'totalEnergiaP1'=>$totalEnergiaP1,
  712.                 'totalEnergiaP2'=>$totalEnergiaP2??null,
  713.                 'totalEnergiaP3'=>$totalEnergiaP3??null,
  714.                 'totalEnergiaP4'=>$totalEnergiaP4??null,
  715.                 'totalEnergiaP5'=>$totalEnergiaP5??null,
  716.                 'totalEnergiaP6'=>$totalEnergiaP6??null,
  717.                 'totalEnergia'=>$totalEnergia,
  718.                 'reactivaP1'=>$reactivaP1??null,
  719.                 'reactivaP2'=>$reactivaP2??null,
  720.                 'reactivaP3'=>$reactivaP3??null,
  721.                 'reactivaP4'=>$reactivaP4??null,
  722.                 'reactivaP5'=>$reactivaP5??null,
  723.                 'reactivaP6'=>$reactivaP6??null,
  724.                 'excesoReactivaP1'=>$excesoReactivaP1??null,
  725.                 'excesoReactivaP2'=>$excesoReactivaP2??null,
  726.                 'excesoReactivaP3'=>$excesoReactivaP3??null,
  727.                 'excesoReactivaP4'=>$excesoReactivaP4??null,
  728.                 'excesoReactivaP5'=>$excesoReactivaP5??null,
  729.                 'excesoReactivaP6'=>$excesoReactivaP6??null,
  730.                 'importeReactivaP1'=>$importeReactivaP1??null,
  731.                 'importeReactivaP2'=>$importeReactivaP2??null,
  732.                 'importeReactivaP3'=>$importeReactivaP3??null,
  733.                 'importeReactivaP4'=>$importeReactivaP4??null,
  734.                 'importeReactivaP5'=>$importeReactivaP5??null,
  735.                 'importeReactivaP6'=>$importeReactivaP6??null,
  736.                 'totalReactiva'=>$totalReactiva??null,
  737.                 'subtotal'=>$subtotal,
  738.                 'importeImpuesto'=>$importeImpuesto,
  739.                 'importeAlquiler'=>$importeAlquiler,
  740.                 'otrosConceptos'=>$otrosConceptos??0,
  741.                 'importeTotal'=>$importeTotal,
  742.                 'importeIva'=>$importeIva,
  743.                 'totalFactura'=>$totalFactura,
  744.                 'consumoP1Facturado'=>$consumoP1Facturado??null,
  745.                 'consumoP2Facturado'=>$consumoP2Facturado??null,
  746.                 'consumoP3Facturado'=>$consumoP3Facturado??null,
  747.                 'consumoP4Facturado'=>$consumoP4Facturado??null,
  748.                 'consumoP5Facturado'=>$consumoP5Facturado??null,
  749.                 'consumoP6Facturado'=>$consumoP6Facturado??null,
  750.                 'datosGrafica'=>$datosGrafica,
  751.                 'arrayP'=>$arrayP??[true,false,false,false,false,false],
  752.                 'numeroP'=>$numeroP??1,
  753.             ];
  754.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  755.                 case 'finkaluz':
  756.                     return $this->render('factura/finkaluz.factura.html.twig'$params);
  757.                 case 'emfra':
  758.                     return $this->render('factura/emfra.factura.html.twig'$params);
  759.                 case 'onda':
  760.                     return $this->render('factura/onda.factura.html.twig'$params);
  761.                 case 'digitel':
  762.                     return $this->render('factura/digitel.factura.html.twig'$params);
  763.                 case 'apolo':
  764.                     return $this->render('factura/apolo.factura.html.twig'$params);
  765.                 case 'e3':
  766.                     return $this->render('factura/e3/factura.html.twig'$params);
  767.                 case 'telkes':
  768.                     return $this->render('factura/telkes/factura.html.twig'$params);
  769.                 case 'paladio':
  770.                     return $this->render('factura/paladio/factura.html.twig'$params);
  771.                 case 'arsen':
  772.                     return $this->render('factura/arsen/factura.html.twig'$params);
  773.                 default:
  774.                     return $this->render('factura/factura.html.twig'$params);
  775.             }
  776.         }
  777.         else{
  778.             $periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  779.             $totalPotenciaP1=round($factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  780.             $totalPotencia=$totalPotenciaP1;
  781.             $totalEnergiaP1=round($factura->getConsumoConvertidoP1()*$factura->getPrecioEnergiaP1(),2);
  782.             $totalEnergia=$totalEnergiaP1;
  783.             $subtotal=round($totalEnergia+$totalPotencia,2);
  784.             $importeImpuesto=round($factura->getImpuesto()*$factura->getConsumoConvertidoP1(),2);
  785.             $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  786.             $otrosConceptos=0;
  787.             foreach ($factura->getConceptos() as $concepto){
  788.                 $otrosConceptos+=round($concepto->getImporte(),2);
  789.             }
  790.             $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  791.             $importeIva=round($factura->getIva()*$importeTotal/100,2);
  792.             $totalFactura=round($importeTotal+$importeIva,2);
  793.             if( $totalFactura!==$factura->getTotalFactura() ){
  794.                 $factura->setTotalFactura($totalFactura);
  795.                 $entityManager->flush();
  796.             }
  797.             //Grafica
  798.             if($factura === $facturas[0]){
  799.                 $consumoMedio=$factura->getTotalFactura();
  800.                 $datosGrafica[]=[
  801.                     str_replace('.','',strtolowerstrftime('%h-%y',$factura->getFechaLectura()->getTimestamp()) )),
  802.                     $factura->getConsumoConvertidoP1()
  803.                 ];
  804.                 $ultimaFecha=$factura->getFechaLectura();
  805.                 $consumoAcumulado=$factura->getConsumoConvertidoP1();
  806.             }
  807.             else{
  808.                 $indiceFactura=array_search($factura$facturas);
  809.                 if($indiceFactura<12){
  810.                     for($i=0;$i<=$indiceFactura && $i<12;$i++){
  811.                         $consumoMedio+=$facturas[$i]->getTotalFactura();
  812.                         $consumoAcumulado+=$facturas[$i]->getConsumoConvertidoP1();
  813.                         $datosGrafica[]=[
  814.                             str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  815.                             $facturas[$i]->getConsumoConvertidoP1()
  816.                         ];
  817.                         $ultimaFecha=$facturas[$i]->getFechaLectura();
  818.                     }
  819.                     $consumoMedio=$consumoMedio/($indiceFactura+1);
  820.                 }
  821.                 else{
  822.                     for($i=11;$i>=0;$i--){
  823.                         $n=$indiceFactura-$i;
  824.                         $consumoMedio+=$facturas[$n]->getTotalFactura();
  825.                         $consumoAcumulado+=$factura->getConsumoConvertidoP1();
  826.                         $datosGrafica[]=[
  827.                             str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  828.                             $facturas[$n]->getConsumoConvertidoP1()
  829.                         ];
  830.                     }
  831.                     $consumoMedio=$consumoMedio/12;
  832.                     $ultimaFecha=$factura->getFechaLectura();
  833.                 }
  834.             }
  835.             $timestamp=date_timestamp_get($ultimaFecha);
  836.             while( count($datosGrafica)<12 ){
  837.                 $ultimaFecha date_add($ultimaFechadate_interval_create_from_date_string('1 month'));
  838.                 $datosGrafica[]=[
  839.                     str_replace('.','',strtolowerstrftime('%h-%y',$ultimaFecha->getTimestamp()) )),
  840.                     0
  841.                 ];
  842.             }
  843.             $factura->setFechaLectura(date_timestamp_set($ultimaFecha,$timestamp));
  844.             //Return
  845.             $params=[
  846.                 'factura' => $factura,
  847.                 'entidad'=>$entidad,
  848.                 'consumoMedio'=>$consumoMedio,
  849.                 'consumoAcumulado'=>$consumoAcumulado,
  850.                 'periodoFacturacion'=>$periodoFacturacion,
  851.                 'totalPotenciaP1'=>$totalPotenciaP1,
  852.                 'totalPotencia'=>$totalPotencia,
  853.                 'totalEnergiaP1'=>$totalEnergiaP1,
  854.                 'totalEnergia'=>$totalEnergia,
  855.                 'subtotal'=>$subtotal,
  856.                 'importeImpuesto'=>$importeImpuesto,
  857.                 'importeAlquiler'=>$importeAlquiler,
  858.                 'otrosConceptos'=>$otrosConceptos,
  859.                 'importeTotal'=>$importeTotal,
  860.                 'importeIva'=>$importeIva,
  861.                 'totalFactura'=>$totalFactura,
  862.                 'datosGrafica'=>$datosGrafica,
  863.                 'arrayP'=>$arrayP??[true,false,false,false,false,false],
  864.                 'numeroP'=>0,
  865.             ];
  866.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  867.                 case 'digitel':
  868.                     return $this->render('factura/digitel.factura.html.twig'$params);
  869.                 case 'apolo':
  870.                     return $this->render('factura/apolo.factura.html.twig'$params);
  871.                 case 'e3':
  872.                     return $this->render('factura/e3/factura.html.twig'$params);
  873.                 case 'telkes':
  874.                     return $this->render('factura/telkes/factura.html.twig'$params);
  875.                 case 'paladio':
  876.                     return $this->render('factura/paladio/factura.html.twig'$params);
  877.                 case 'arsen':
  878.                     return $this->render('factura/arsen/factura.html.twig'$params);
  879.                 default:
  880.                     return $this->render('factura/factura.html.twig'$params);
  881.             }
  882.         }
  883.     }
  884.     /**
  885.      * @Route("factura/{id}/pdf", name="factura_pdf", methods={"GET", "POST"})
  886.      */
  887.     public function pdf(Factura $facturaPdf $pdfRequest $requestFacturaRepository $facturaRepository,
  888.                         BancoRepository $bancoRepositoryEntityManagerInterface $entityManager): PdfResponse
  889.     {
  890.         if(
  891.             $factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
  892.             ($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
  893.         ){
  894.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  895.         }
  896.         $urlImagen=$request->request->get("urlImagen");
  897.         $facturas=$facturaRepository->findBy(['contrato'=>$factura->getContrato()], ['fechaLectura'=>'ASC']);
  898.         $tarifa=$factura->getTarifa();
  899.         $entidad=$bancoRepository->findByCuenta($factura->getCcc());
  900.         $consumoAcumulado='0';
  901.         $consumoMedio='0';
  902.         /*if($tarifa->getTipoTarifa()=='Electricidad'){
  903.             if($tarifa=='2.0A' || $tarifa=='2.1A'){
  904.                 $periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  905.                 $totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  906.                 $totalPotencia=$totalPotenciaP1;
  907.                 $totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
  908.                 $totalEnergia=$totalEnergiaP1;
  909.                 $subtotal=round($totalEnergia+$totalPotencia,2);
  910.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  911.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  912.                 $otrosConceptos=0;
  913.                 foreach ($factura->getConceptos() as $concepto){
  914.                     $otrosConceptos+=round($concepto->getImporte(),2);
  915.                 }
  916.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  917.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  918.                 $totalFactura=round($importeTotal+$importeIva,2);
  919.                 if( $totalFactura!==$factura->getTotalFactura() ){
  920.                     $factura->setTotalFactura($totalFactura);
  921.                     $this->getDoctrine()->getManager()->flush();
  922.                 }
  923.                 //Grafica
  924.                 if($factura === $facturas[0]){
  925.                     $consumoMedio=$factura->getTotalFactura();
  926.                     $consumoAcumulado=$factura->getLecturaEnergiaP1()-$factura->getLecturaAnteriorP1();
  927.                 }
  928.                 else{
  929.                     $indiceFactura=array_search($factura, $facturas);
  930.                     if($indiceFactura<12){
  931.                         for($i=0;$i<=$indiceFactura && $i<12;$i++){
  932.                             $consumoMedio+=$facturas[$i]->getTotalFactura();
  933.                             $consumoAcumulado+=$facturas[$i]->getConsumo();
  934.                         }
  935.                         $consumoMedio=$consumoMedio/($indiceFactura+1);
  936.                     }
  937.                     else{
  938.                         for($i=11;$i>=0;$i--){
  939.                             $n=$indiceFactura-$i;
  940.                             $consumoMedio+=$facturas[$n]->getTotalFactura();
  941.                             $consumoAcumulado+=$factura->getConsumo()[1];
  942.                         }
  943.                         $consumoMedio=$consumoMedio/12;
  944.                     }
  945.                 }
  946.             }
  947.             elseif($tarifa=='2.0DHA' || $tarifa=='2.1DHA'){
  948.                 $periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  949.                 $totalPotenciaP1=round($factura->getPotenciaP1()*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  950.                 $totalPotencia=$totalPotenciaP1;
  951.                 $totalEnergiaP1=round($factura->getConsumoP1()*$factura->getPrecioEnergiaP1(),2);
  952.                 $totalEnergiaP3=round($factura->getConsumoP3()*$factura->getPrecioEnergiaP3(),2);
  953.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP3;
  954.                 $subtotal=round($totalEnergia+$totalPotencia,2);
  955.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  956.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  957.                 $otrosConceptos=0;
  958.                 foreach ($factura->getConceptos() as $concepto){
  959.                     $otrosConceptos+=round($concepto->getImporte(),2);
  960.                 }
  961.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  962.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  963.                 $totalFactura=round($importeTotal+$importeIva,2);
  964.                 if( $totalFactura!==$factura->getTotalFactura() ){
  965.                     $factura->setTotalFactura($totalFactura);
  966.                     $this->getDoctrine()->getManager()->flush();
  967.                 }
  968.                 //Grafica
  969.                 if($factura===$facturas[0]){
  970.                     $consumoMedio=$factura->getTotalFactura();
  971.                     $consumoAcumulado=$factura->getConsumo();
  972.                 }
  973.                 else{
  974.                     $indiceFactura=array_search($factura, $facturas);
  975.                     if($indiceFactura<12){
  976.                         for($i=0;$i<=$indiceFactura && $i<12;$i++){
  977.                             $consumoMedio+=$facturas[$i]->getTotalFactura();
  978.                             $consumoAcumulado+=$facturas[$i]->getConsumo();
  979.                         }
  980.                         $consumoMedio=$consumoMedio/($indiceFactura+1);
  981.                     }
  982.                     else{
  983.                         for($i=11;$i>=0;$i--){
  984.                             $n=$indiceFactura-$i;
  985.                             $consumoMedio+=$facturas[$n]->getTotalFactura();
  986.                             $consumoAcumulado+=$facturas[$i]->getConsumo();
  987.                         }
  988.                         $consumoMedio=$consumoMedio/12;
  989.                     }
  990.                 }
  991.             }
  992.             elseif($tarifa=='3.0A' || $tarifa=='3.1A'){
  993.                 $periodoFacturacion=date_diff( $factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  994.                 $consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
  995.                 $consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
  996.                 $consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
  997.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  998.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  999.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  1000.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  1001.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  1002.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  1003.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
  1004.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  1005.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  1006.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  1007.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
  1008.                 $reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
  1009.                 $reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
  1010.                 $excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
  1011.                 $excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
  1012.                 if($excesoReactivaP1<0)
  1013.                     $excesoReactivaP1=0;
  1014.                 if($excesoReactivaP2<0)
  1015.                     $excesoReactivaP2=0;
  1016.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  1017.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  1018.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2;
  1019.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  1020.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  1021.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  1022.                 $otrosConceptos=0;
  1023.                 foreach ($factura->getConceptos() as $concepto){
  1024.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1025.                 }
  1026.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1027.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  1028.                 $totalFactura=round($importeTotal+$importeIva,2);
  1029.                 if( $totalFactura!==$factura->getTotalFactura() ){
  1030.                     $factura->setTotalFactura($totalFactura);
  1031.                     $this->getDoctrine()->getManager()->flush();
  1032.                 }
  1033.                 //Grafica
  1034.                 if($factura===$facturas[0]){
  1035.                     $consumoMedio=$factura->getTotalFactura();
  1036.                     $consumoAcumulado=$factura->getConsumo();
  1037.                 }
  1038.                 else{
  1039.                     $indiceFactura=array_search($factura, $facturas);
  1040.                     if($indiceFactura<12){
  1041.                         for($i=0;$i<=$indiceFactura && $i<12;$i++){
  1042.                             $consumoMedio+=$facturas[$i]->getTotalFactura();
  1043.                             $consumoAcumulado+=$facturas[$i]->getConsumo();
  1044.                         }
  1045.                         $consumoMedio=$consumoMedio/($indiceFactura+1);
  1046.                     }
  1047.                     else{
  1048.                         for($i=11;$i>=0;$i--){
  1049.                             $n=$indiceFactura-$i;
  1050.                             $consumoMedio+=$facturas[$n]->getTotalFactura();
  1051.                         }
  1052.                         $consumoMedio=$consumoMedio/12;
  1053.                         $ultimaFecha=$factura->getFechaLectura();
  1054.                     }
  1055.                 }
  1056.             }
  1057.             else{
  1058.                 throw $this->createNotFoundException('No se ha encontrado la factura');
  1059.             }
  1060.             $html=$this->renderView('factura/factura.pdf.twig', [
  1061.                 'factura' => $factura,
  1062.                 'entidad'=>$entidad,
  1063.                 'consumoMedio'=>$consumoMedio,
  1064.                 'consumoAcumulado'=>$consumoAcumulado,
  1065.                 'periodoFacturacion'=>$periodoFacturacion,
  1066.                 'potenciaP1Facturada'=>$potenciaP1Facturada??null,
  1067.                 'potenciaP2Facturada'=>$potenciaP2Facturada??null,
  1068.                 'potenciaP3Facturada'=>$potenciaP3Facturada??null,
  1069.                 'totalPotenciaP1'=>$totalPotenciaP1,
  1070.                 'totalPotenciaP2'=>$totalPotenciaP2??null,
  1071.                 'totalPotenciaP3'=>$totalPotenciaP3??null,
  1072.                 'totalPotencia'=>$totalPotencia,
  1073.                 'totalEnergiaP1'=>$totalEnergiaP1,
  1074.                 'totalEnergiaP2'=>$totalEnergiaP2??null,
  1075.                 'totalEnergiaP3'=>$totalEnergiaP3??null,
  1076.                 'totalEnergia'=>$totalEnergia,
  1077.                 'reactivaP1'=>$reactivaP1??null,
  1078.                 'reactivaP2'=>$reactivaP2??null,
  1079.                 'excesoReactivaP1'=>$excesoReactivaP1??null,
  1080.                 'excesoReactivaP2'=>$excesoReactivaP2??null,
  1081.                 'importeReactivaP1'=>$importeReactivaP1??null,
  1082.                 'importeReactivaP2'=>$importeReactivaP2??null,
  1083.                 'totalReactiva'=>$totalReactiva??null,
  1084.                 'subtotal'=>$subtotal,
  1085.                 'importeImpuesto'=>$importeImpuesto,
  1086.                 'importeAlquiler'=>$importeAlquiler,
  1087.                 'otrosConceptos'=>$otrosConceptos,
  1088.                 'importeTotal'=>$importeTotal,
  1089.                 'importeIva'=>$importeIva,
  1090.                 'totalFactura'=>$totalFactura,
  1091.                 'consumoP1Facturado'=>$consumoP1Facturado??null,
  1092.                 'consumoP2Facturado'=>$consumoP2Facturado??null,
  1093.                 'consumoP3Facturado'=>$consumoP3Facturado??null,
  1094.                 'urlImagen'=>$urlImagen
  1095.             ]);
  1096.         }*/
  1097.         if($tarifa->getTipoTarifa()=='Electricidad'){
  1098.             if($tarifa=='3.0A' || $tarifa=='3.1A'){
  1099.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  1100.                 $consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
  1101.                 $consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
  1102.                 $consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
  1103.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  1104.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  1105.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  1106.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  1107.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  1108.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  1109.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
  1110.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  1111.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  1112.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  1113.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
  1114.                 $reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
  1115.                 $reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
  1116.                 $excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
  1117.                 $excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
  1118.                 if($excesoReactivaP1<0)
  1119.                     $excesoReactivaP1=0;
  1120.                 if($excesoReactivaP2<0)
  1121.                     $excesoReactivaP2=0;
  1122.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  1123.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  1124.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2;
  1125.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  1126.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  1127.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  1128.                 $otrosConceptos=0;
  1129.                 foreach ($factura->getConceptos() as $concepto){
  1130.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1131.                 }
  1132.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1133.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  1134.                 $totalFactura=round($importeTotal+$importeIva,2);
  1135.                 if( $totalFactura!==$factura->getTotalFactura() ){
  1136.                     $factura->setTotalFactura($totalFactura);
  1137.                     $entityManager->flush();
  1138.                 }
  1139.             }
  1140.             else{
  1141.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  1142.                 $consumoP1Facturado=$factura->getConsumoP1();
  1143.                 $consumoP2Facturado=$factura->getConsumoP2();
  1144.                 $consumoP3Facturado=$factura->getConsumoP3();
  1145.                 $consumoP4Facturado=$factura->getConsumoP4();
  1146.                 $consumoP5Facturado=$factura->getConsumoP5();
  1147.                 $consumoP6Facturado=$factura->getConsumoP6();
  1148.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  1149.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  1150.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  1151.                 $potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
  1152.                 $potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
  1153.                 $potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
  1154.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  1155.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  1156.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  1157.                 $totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
  1158.                 $totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
  1159.                 $totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
  1160.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
  1161.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  1162.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  1163.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  1164.                 $totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
  1165.                 $totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
  1166.                 $totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
  1167.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
  1168.                 $reactivaP1=$factura->getReactivaP1();
  1169.                 $reactivaP2=$factura->getReactivaP2();
  1170.                 $reactivaP3=$factura->getReactivaP3();
  1171.                 $reactivaP4=$factura->getReactivaP4();
  1172.                 $reactivaP5=$factura->getReactivaP5();
  1173.                 $reactivaP6=$factura->getReactivaP6();
  1174.                 if($reactivaP1!=0)
  1175.                     $excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
  1176.                 else
  1177.                     $excesoReactivaP1=0;
  1178.                 if($reactivaP2!=0)
  1179.                     $excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
  1180.                 else
  1181.                     $excesoReactivaP2=0;
  1182.                 if($reactivaP3!=0)
  1183.                     $excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
  1184.                 else
  1185.                     $excesoReactivaP3=0;
  1186.                 if($reactivaP4!=0)
  1187.                     $excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
  1188.                 else
  1189.                     $excesoReactivaP4=0;
  1190.                 if($reactivaP5!=0)
  1191.                     $excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
  1192.                 else
  1193.                     $excesoReactivaP5=0;
  1194.                 if($reactivaP6!=0)
  1195.                     $excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
  1196.                 else
  1197.                     $excesoReactivaP6=0;
  1198.                 if($excesoReactivaP1<0)
  1199.                     $excesoReactivaP1=0;
  1200.                 if($excesoReactivaP2<0)
  1201.                     $excesoReactivaP2=0;
  1202.                 if($excesoReactivaP3<0)
  1203.                     $excesoReactivaP3=0;
  1204.                 if($excesoReactivaP4<0)
  1205.                     $excesoReactivaP4=0;
  1206.                 if($excesoReactivaP5<0)
  1207.                     $excesoReactivaP5=0;
  1208.                 if($excesoReactivaP6<0)
  1209.                     $excesoReactivaP6=0;
  1210.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  1211.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  1212.                 $importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
  1213.                 $importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
  1214.                 $importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
  1215.                 $importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
  1216.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
  1217.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  1218.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  1219.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  1220.                 $otrosConceptos=0;
  1221.                 foreach ($factura->getConceptos() as $concepto){
  1222.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1223.                 }
  1224.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1225.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  1226.                 $totalFactura=round($importeTotal+$importeIva,2);
  1227.                 if( $totalFactura!==$factura->getTotalFactura() ){
  1228.                     $factura->setTotalFactura($totalFactura);
  1229.                     $entityManager->flush();
  1230.                 }
  1231.                 //throw $this->createNotFoundException('No se ha encontrado la factura');
  1232.             }
  1233.             //Grafica
  1234.             $indiceFactura=array_search($factura$facturas);
  1235.             $arrayP=[false,false,false,false,false,false];
  1236.             if($indiceFactura<12){
  1237.                 for($i=0;$i<=$indiceFactura && $i<12;$i++){
  1238.                     $consumoMedio+=$facturas[$i]->getTotalFactura();
  1239.                     $consumoAcumulado+=$facturas[$i]->getConsumo();
  1240.                     $tarifaI=$facturas[$i]->getTarifa();
  1241.                     $arrayPI=[
  1242.                         $tarifaI->getEnergiaP1(),
  1243.                         $tarifaI->getEnergiaP2(),
  1244.                         $tarifaI->getEnergiaP3(),
  1245.                         $tarifaI->getEnergiaP4(),
  1246.                         $tarifaI->getEnergiaP5(),
  1247.                         $tarifaI->getEnergiaP6()
  1248.                     ];
  1249.                     if(!$arrayP[0])
  1250.                         $arrayP[0]=$arrayPI[0];
  1251.                     if(!$arrayP[1])
  1252.                         $arrayP[1]=$arrayPI[1];
  1253.                     if(!$arrayP[2])
  1254.                         $arrayP[2]=$arrayPI[2];
  1255.                     if(!$arrayP[3])
  1256.                         $arrayP[3]=$arrayPI[3];
  1257.                     if(!$arrayP[4])
  1258.                         $arrayP[4]=$arrayPI[4];
  1259.                     if(!$arrayP[5])
  1260.                         $arrayP[5]=$arrayPI[5];
  1261.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  1262.                         $datosGrafica[]=[
  1263.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  1264.                             $facturas[$i]->getConsumoP1(),
  1265.                             0,
  1266.                             0
  1267.                         ];
  1268.                         if ( 1>($numeroP??0) ){
  1269.                             $numeroP=1;
  1270.                         }
  1271.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  1272.                         $datosGrafica[]=[
  1273.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  1274.                             $facturas[$i]->getConsumoP1(),
  1275.                             0,
  1276.                             $facturas[$i]->getConsumoP3()
  1277.                         ];
  1278.                         if ( 2>($numeroP??0) ){
  1279.                             $numeroP=2;
  1280.                         }
  1281.                     }else*/
  1282.                     switch( $tarifaI->getNombre() ){
  1283.                         case '3.0A': case '3.1A':
  1284.                         $datosGrafica[]=[
  1285.                             str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  1286.                             $facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
  1287.                             $facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
  1288.                             $facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
  1289.                             0,
  1290.                             0,
  1291.                             0
  1292.                         ];
  1293.                         break;
  1294.                         default:
  1295.                             $datosGrafica[]=[
  1296.                                 str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  1297.                                 $facturas[$i]->getConsumoP1()??0,
  1298.                                 $facturas[$i]->getConsumoP2()??0,
  1299.                                 $facturas[$i]->getConsumoP3()??0,
  1300.                                 $facturas[$i]->getConsumoP4()??0,
  1301.                                 $facturas[$i]->getConsumoP5()??0,
  1302.                                 $facturas[$i]->getConsumoP6()??0,
  1303.                             ];
  1304.                             break;
  1305.                     }
  1306.                 }
  1307.                 $consumoMedio=$consumoMedio/($indiceFactura+1);
  1308.                 $numeroP=countarray_filter($arrayP) );
  1309.             }
  1310.             else{
  1311.                 for($i=11;$i>=0;$i--){
  1312.                     $n=$indiceFactura-$i;
  1313.                     $consumoMedio+=$facturas[$n]->getTotalFactura();
  1314.                     $consumoAcumulado+=$facturas[$n]->getConsumo();
  1315.                     $tarifaI=$facturas[$n]->getTarifa();
  1316.                     $arrayPI=[
  1317.                         $tarifaI->getEnergiaP1(),
  1318.                         $tarifaI->getEnergiaP2(),
  1319.                         $tarifaI->getEnergiaP3(),
  1320.                         $tarifaI->getEnergiaP4(),
  1321.                         $tarifaI->getEnergiaP5(),
  1322.                         $tarifaI->getEnergiaP6()
  1323.                     ];
  1324.                     if(!$arrayP[0])
  1325.                         $arrayP[0]=$arrayPI[0];
  1326.                     if(!$arrayP[1])
  1327.                         $arrayP[1]=$arrayPI[1];
  1328.                     if(!$arrayP[2])
  1329.                         $arrayP[2]=$arrayPI[2];
  1330.                     if(!$arrayP[3])
  1331.                         $arrayP[3]=$arrayPI[3];
  1332.                     if(!$arrayP[4])
  1333.                         $arrayP[4]=$arrayPI[4];
  1334.                     if(!$arrayP[5])
  1335.                         $arrayP[5]=$arrayPI[5];
  1336.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  1337.                         $datosGrafica[]=[
  1338.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  1339.                             $facturas[$n]->getConsumoP1(),
  1340.                             0,
  1341.                             0
  1342.                         ];
  1343.                         if ( 1>($numeroP??0) ){
  1344.                             $numeroP=1;
  1345.                         }
  1346.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  1347.                         $datosGrafica[]=[
  1348.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  1349.                             $facturas[$n]->getConsumoP1(),
  1350.                             0,
  1351.                             $facturas[$n]->getConsumoP3()
  1352.                         ];
  1353.                         if ( 2>($numeroP??0) ){
  1354.                             $numeroP=2;
  1355.                         }
  1356.                     }elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
  1357.                         $datosGrafica[]=[
  1358.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  1359.                             $facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
  1360.                             $facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
  1361.                             $facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
  1362.                         ];
  1363.                     }*/
  1364.                 }
  1365.                 $consumoMedio=$consumoMedio/12;;
  1366.                 $numeroP=countarray_filter($arrayP) );
  1367.             }
  1368.             $params=[
  1369.                 'factura' => $factura,
  1370.                 'entidad'=>$entidad,
  1371.                 'consumoMedio'=>$consumoMedio,
  1372.                 'consumoAcumulado'=>$consumoAcumulado,
  1373.                 'periodoFacturacion'=>$periodoFacturacion,
  1374.                 'potenciaP1Facturada'=>$potenciaP1Facturada??null,
  1375.                 'potenciaP2Facturada'=>$potenciaP2Facturada??null,
  1376.                 'potenciaP3Facturada'=>$potenciaP3Facturada??null,
  1377.                 'potenciaP4Facturada'=>$potenciaP4Facturada??null,
  1378.                 'potenciaP5Facturada'=>$potenciaP5Facturada??null,
  1379.                 'potenciaP6Facturada'=>$potenciaP6Facturada??null,
  1380.                 'totalPotenciaP1'=>$totalPotenciaP1,
  1381.                 'totalPotenciaP2'=>$totalPotenciaP2??null,
  1382.                 'totalPotenciaP3'=>$totalPotenciaP3??null,
  1383.                 'totalPotenciaP4'=>$totalPotenciaP4??null,
  1384.                 'totalPotenciaP5'=>$totalPotenciaP5??null,
  1385.                 'totalPotenciaP6'=>$totalPotenciaP6??null,
  1386.                 'totalPotencia'=>$totalPotencia,
  1387.                 'totalEnergiaP1'=>$totalEnergiaP1,
  1388.                 'totalEnergiaP2'=>$totalEnergiaP2??null,
  1389.                 'totalEnergiaP3'=>$totalEnergiaP3??null,
  1390.                 'totalEnergiaP4'=>$totalEnergiaP4??null,
  1391.                 'totalEnergiaP5'=>$totalEnergiaP5??null,
  1392.                 'totalEnergiaP6'=>$totalEnergiaP6??null,
  1393.                 'totalEnergia'=>$totalEnergia,
  1394.                 'reactivaP1'=>$reactivaP1??null,
  1395.                 'reactivaP2'=>$reactivaP2??null,
  1396.                 'reactivaP3'=>$reactivaP3??null,
  1397.                 'reactivaP4'=>$reactivaP4??null,
  1398.                 'reactivaP5'=>$reactivaP5??null,
  1399.                 'reactivaP6'=>$reactivaP6??null,
  1400.                 'excesoReactivaP1'=>$excesoReactivaP1??null,
  1401.                 'excesoReactivaP2'=>$excesoReactivaP2??null,
  1402.                 'excesoReactivaP3'=>$excesoReactivaP3??null,
  1403.                 'excesoReactivaP4'=>$excesoReactivaP4??null,
  1404.                 'excesoReactivaP5'=>$excesoReactivaP5??null,
  1405.                 'excesoReactivaP6'=>$excesoReactivaP6??null,
  1406.                 'importeReactivaP1'=>$importeReactivaP1??null,
  1407.                 'importeReactivaP2'=>$importeReactivaP2??null,
  1408.                 'importeReactivaP3'=>$importeReactivaP3??null,
  1409.                 'importeReactivaP4'=>$importeReactivaP4??null,
  1410.                 'importeReactivaP5'=>$importeReactivaP5??null,
  1411.                 'importeReactivaP6'=>$importeReactivaP6??null,
  1412.                 'totalReactiva'=>$totalReactiva??null,
  1413.                 'subtotal'=>$subtotal,
  1414.                 'importeImpuesto'=>$importeImpuesto,
  1415.                 'importeAlquiler'=>$importeAlquiler,
  1416.                 'otrosConceptos'=>$otrosConceptos??0,
  1417.                 'importeTotal'=>$importeTotal,
  1418.                 'importeIva'=>$importeIva,
  1419.                 'totalFactura'=>$totalFactura,
  1420.                 'consumoP1Facturado'=>$consumoP1Facturado??null,
  1421.                 'consumoP2Facturado'=>$consumoP2Facturado??null,
  1422.                 'consumoP3Facturado'=>$consumoP3Facturado??null,
  1423.                 'consumoP4Facturado'=>$consumoP4Facturado??null,
  1424.                 'consumoP5Facturado'=>$consumoP5Facturado??null,
  1425.                 'consumoP6Facturado'=>$consumoP6Facturado??null,
  1426.                 'arrayP'=>$arrayP??[true,false,false,false,false,false],
  1427.                 'numeroP'=>$numeroP??1,
  1428.                 'urlImagen'=>$urlImagen
  1429.             ];
  1430.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  1431.                 case 'finkaluz':
  1432.                     $html=$this->renderView('factura/finkaluz.factura.pdf.twig'$params);
  1433.                     break;
  1434.                 case 'emfra':
  1435.                     $html=$this->renderView('factura/emfra.factura.pdf.twig'$params);
  1436.                     break;
  1437.                 case 'onda':
  1438.                     $html=$this->renderView('factura/onda.factura.pdf.twig'$params);
  1439.                     break;
  1440.                 case 'digitel':
  1441.                     $html=$this->renderView('factura/digitel.factura.pdf.twig'$params);
  1442.                     break;
  1443.                 case 'apolo':
  1444.                     $html=$this->renderView('factura/apolo.factura.pdf.twig'$params);
  1445.                     break;
  1446.                 case 'e3':
  1447.                     $html=$this->renderView('factura/e3/factura.pdf.twig'$params);
  1448.                     break;
  1449.                 case 'telkes':
  1450.                     $html=$this->renderView('factura/telkes/factura.pdf.twig'$params);
  1451.                     break;
  1452.                 case 'paladio':
  1453.                     $html=$this->renderView('factura/paladio/factura.pdf.twig'$params);
  1454.                     break;
  1455.                 case 'arsen':
  1456.                     $html=$this->renderView('factura/arsen/factura.pdf.twig'$params);
  1457.                     break;
  1458.                 default:
  1459.                     $html=$this->renderView('factura/factura.pdf.twig'$params);
  1460.                     break;
  1461.             }
  1462.             /*$html=$this->renderView('factura/factura.pdf.twig', [
  1463.                 'factura' => $factura,
  1464.                 'entidad'=>$entidad,
  1465.                 'consumoMedio'=>$consumoMedio,
  1466.                 'consumoAcumulado'=>$consumoAcumulado,
  1467.                 'periodoFacturacion'=>$periodoFacturacion,
  1468.                 'potenciaP1Facturada'=>$potenciaP1Facturada??null,
  1469.                 'potenciaP2Facturada'=>$potenciaP2Facturada??null,
  1470.                 'potenciaP3Facturada'=>$potenciaP3Facturada??null,
  1471.                 'potenciaP4Facturada'=>$potenciaP4Facturada??null,
  1472.                 'potenciaP5Facturada'=>$potenciaP5Facturada??null,
  1473.                 'potenciaP6Facturada'=>$potenciaP6Facturada??null,
  1474.                 'totalPotenciaP1'=>$totalPotenciaP1,
  1475.                 'totalPotenciaP2'=>$totalPotenciaP2??null,
  1476.                 'totalPotenciaP3'=>$totalPotenciaP3??null,
  1477.                 'totalPotenciaP4'=>$totalPotenciaP4??null,
  1478.                 'totalPotenciaP5'=>$totalPotenciaP5??null,
  1479.                 'totalPotenciaP6'=>$totalPotenciaP6??null,
  1480.                 'totalPotencia'=>$totalPotencia,
  1481.                 'totalEnergiaP1'=>$totalEnergiaP1,
  1482.                 'totalEnergiaP2'=>$totalEnergiaP2??null,
  1483.                 'totalEnergiaP3'=>$totalEnergiaP3??null,
  1484.                 'totalEnergiaP4'=>$totalEnergiaP4??null,
  1485.                 'totalEnergiaP5'=>$totalEnergiaP5??null,
  1486.                 'totalEnergiaP6'=>$totalEnergiaP6??null,
  1487.                 'totalEnergia'=>$totalEnergia,
  1488.                 'reactivaP1'=>$reactivaP1??null,
  1489.                 'reactivaP2'=>$reactivaP2??null,
  1490.                 'reactivaP3'=>$reactivaP3??null,
  1491.                 'reactivaP4'=>$reactivaP4??null,
  1492.                 'reactivaP5'=>$reactivaP5??null,
  1493.                 'reactivaP6'=>$reactivaP6??null,
  1494.                 'excesoReactivaP1'=>$excesoReactivaP1??null,
  1495.                 'excesoReactivaP2'=>$excesoReactivaP2??null,
  1496.                 'excesoReactivaP3'=>$excesoReactivaP3??null,
  1497.                 'excesoReactivaP4'=>$excesoReactivaP4??null,
  1498.                 'excesoReactivaP5'=>$excesoReactivaP5??null,
  1499.                 'excesoReactivaP6'=>$excesoReactivaP6??null,
  1500.                 'importeReactivaP1'=>$importeReactivaP1??null,
  1501.                 'importeReactivaP2'=>$importeReactivaP2??null,
  1502.                 'importeReactivaP3'=>$importeReactivaP3??null,
  1503.                 'importeReactivaP4'=>$importeReactivaP4??null,
  1504.                 'importeReactivaP5'=>$importeReactivaP5??null,
  1505.                 'importeReactivaP6'=>$importeReactivaP6??null,
  1506.                 'totalReactiva'=>$totalReactiva??null,
  1507.                 'subtotal'=>$subtotal,
  1508.                 'importeImpuesto'=>$importeImpuesto,
  1509.                 'importeAlquiler'=>$importeAlquiler,
  1510.                 'otrosConceptos'=>$otrosConceptos??0,
  1511.                 'importeTotal'=>$importeTotal,
  1512.                 'importeIva'=>$importeIva,
  1513.                 'totalFactura'=>$totalFactura,
  1514.                 'consumoP1Facturado'=>$consumoP1Facturado??null,
  1515.                 'consumoP2Facturado'=>$consumoP2Facturado??null,
  1516.                 'consumoP3Facturado'=>$consumoP3Facturado??null,
  1517.                 'consumoP4Facturado'=>$consumoP4Facturado??null,
  1518.                 'consumoP5Facturado'=>$consumoP5Facturado??null,
  1519.                 'consumoP6Facturado'=>$consumoP6Facturado??null,
  1520.                 'arrayP'=>$arrayP??[true,false,false,false,false,false],
  1521.                 'numeroP'=>$numeroP??1,
  1522.                 'urlImagen'=>$urlImagen
  1523.             ]);*/
  1524.         }
  1525.         else{
  1526.             $periodoFacturacion=date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  1527.             $totalPotenciaP1=round($factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  1528.             $totalPotencia=$totalPotenciaP1;
  1529.             $totalEnergiaP1=round($factura->getConsumoConvertidoP1()*$factura->getPrecioEnergiaP1(),2);
  1530.             $totalEnergia=$totalEnergiaP1;
  1531.             $subtotal=round($totalEnergia+$totalPotencia,2);
  1532.             $importeImpuesto=round($factura->getImpuesto()*$factura->getConsumoConvertidoP1(),2);
  1533.             $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  1534.             $otrosConceptos=0;
  1535.             foreach ($factura->getConceptos() as $concepto){
  1536.                 $otrosConceptos+=round($concepto->getImporte(),2);
  1537.             }
  1538.             $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1539.             $importeIva=round($factura->getIva()*$importeTotal/100,2);
  1540.             $totalFactura=round($importeTotal+$importeIva,2);
  1541.             if( $totalFactura!==$factura->getTotalFactura() ){
  1542.                 $factura->setTotalFactura($totalFactura);
  1543.                 $entityManager->flush();
  1544.             }
  1545.             //Grafica
  1546.             if($factura === $facturas[0]){
  1547.                 $consumoMedio=$factura->getTotalFactura();
  1548.                 $consumoAcumulado=$factura->getConsumoConvertidoP1();
  1549.             }
  1550.             else{
  1551.                 $indiceFactura=array_search($factura$facturas);
  1552.                 if($indiceFactura<12){
  1553.                     for($i=0;$i<=$indiceFactura && $i<12;$i++){
  1554.                         $consumoMedio+=$facturas[$i]->getTotalFactura();
  1555.                         $consumoAcumulado+=$facturas[$i]->getConsumoConvertidoP1();
  1556.                     }
  1557.                     $consumoMedio=$consumoMedio/($indiceFactura+1);
  1558.                 }
  1559.                 else{
  1560.                     for($i=11;$i>=0;$i--){
  1561.                         $n=$indiceFactura-$i;
  1562.                         $consumoMedio+=$facturas[$n]->getTotalFactura();
  1563.                         $consumoAcumulado+=$factura->getConsumoConvertidoP1()[1];
  1564.                     }
  1565.                     $consumoMedio=$consumoMedio/12;
  1566.                 }
  1567.             }
  1568.             $html=$this->renderView('factura/factura.pdf.twig', [
  1569.                 'factura' => $factura,
  1570.                 'entidad'=>$entidad,
  1571.                 'consumoMedio'=>$consumoMedio,
  1572.                 'consumoAcumulado'=>$consumoAcumulado,
  1573.                 'periodoFacturacion'=>$periodoFacturacion,
  1574.                 'totalPotenciaP1'=>$totalPotenciaP1,
  1575.                 'totalPotencia'=>$totalPotencia,
  1576.                 'totalEnergiaP1'=>$totalEnergiaP1,
  1577.                 'totalEnergia'=>$totalEnergia,
  1578.                 'subtotal'=>$subtotal,
  1579.                 'importeImpuesto'=>$importeImpuesto,
  1580.                 'importeAlquiler'=>$importeAlquiler,
  1581.                 'otrosConceptos'=>$otrosConceptos,
  1582.                 'importeTotal'=>$importeTotal,
  1583.                 'importeIva'=>$importeIva,
  1584.                 'totalFactura'=>$totalFactura,
  1585.                 'urlImagen'=>$urlImagen
  1586.             ]);
  1587.         }
  1588.         return new PdfResponse(
  1589.             $pdf->getOutputFromHtml($html),
  1590.             (str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_numero').'.pdf'
  1591.         );
  1592.     }
  1593.     /**
  1594.      * @Route("factura/{id}/xml", name="factura_xml", methods={"GET", "POST"})
  1595.      */
  1596.     public function xml(Factura $facturaPdf $pdfRequest $requestFacturaRepository $facturaRepository,
  1597.                         BancoRepository $bancoRepositoryFilesystem $filesystemEntityManagerInterface $entityManager): Response
  1598.     {
  1599.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  1600.         $logger = new Logger('factura_logger');
  1601.         $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/email.log'Logger::DEBUG));
  1602.         $urlImagen $request->request->get("urlImagen");
  1603.         $facturas $facturaRepository->findBy(['contrato' => $factura->getContrato()], ['fechaLectura' => 'ASC']);
  1604.         $tarifa $factura->getTarifa();
  1605.         $entidad $bancoRepository->findByCuenta($factura->getCcc());
  1606.         $consumoAcumulado '0';
  1607.         $consumoMedio '0';
  1608.         /*if ($tarifa->getTipoTarifa() == 'Electricidad') {
  1609.             $subject = 'FACTURA ELECTRICIDAD';
  1610.             $tipo='electricidad';
  1611.             if ($tarifa == '2.0A' || $tarifa == '2.1A') {
  1612.                 $periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  1613.                 $totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
  1614.                 $totalPotencia = $totalPotenciaP1;
  1615.                 $totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
  1616.                 $totalEnergia = $totalEnergiaP1;
  1617.                 $subtotal = round($totalEnergia + $totalPotencia, 2);
  1618.                 $importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
  1619.                 $importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
  1620.                 $otrosConceptos=0;
  1621.                 foreach ($factura->getConceptos() as $concepto){
  1622.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1623.                 }
  1624.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1625.                 $importeIva = round($factura->getIva() * $importeTotal / 100, 2);
  1626.                 $totalFactura = round($importeTotal + $importeIva, 2);
  1627.                 if ($totalFactura !== $factura->getTotalFactura()) {
  1628.                     $factura->setTotalFactura($totalFactura);
  1629.                     $this->getDoctrine()->getManager()->flush();
  1630.                 }
  1631.                 //Grafica
  1632.                 if ($factura === $facturas[0]) {
  1633.                     $consumoMedio = $factura->getTotalFactura();
  1634.                     $consumoAcumulado = $factura->getLecturaEnergiaP1() - $factura->getLecturaAnteriorP1();
  1635.                 } else {
  1636.                     $indiceFactura = array_search($factura, $facturas);
  1637.                     if ($indiceFactura < 12) {
  1638.                         for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
  1639.                             $consumoMedio += $facturas[$i]->getTotalFactura();
  1640.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  1641.                         }
  1642.                         $consumoMedio = $consumoMedio / ($indiceFactura + 1);
  1643.                     } else {
  1644.                         for ($i = 11; $i >= 0; $i--) {
  1645.                             $n = $indiceFactura - $i;
  1646.                             $consumoMedio += $facturas[$n]->getTotalFactura();
  1647.                             $consumoAcumulado += $factura->getConsumo()[1];
  1648.                         }
  1649.                         $consumoMedio = $consumoMedio / 12;
  1650.                     }
  1651.                 }
  1652.             }
  1653.             elseif ($tarifa == '2.0DHA' || $tarifa == '2.1DHA') {
  1654.                 $periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  1655.                 $totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
  1656.                 $totalPotencia = $totalPotenciaP1;
  1657.                 $totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
  1658.                 $totalEnergiaP3 = round($factura->getConsumoP3() * $factura->getPrecioEnergiaP3(), 2);
  1659.                 $totalEnergia = $totalEnergiaP1 + $totalEnergiaP3;
  1660.                 $subtotal = round($totalEnergia + $totalPotencia, 2);
  1661.                 $importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
  1662.                 $importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
  1663.                 $otrosConceptos=0;
  1664.                 foreach ($factura->getConceptos() as $concepto){
  1665.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1666.                 }
  1667.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1668.                 $importeIva = round($factura->getIva() * $importeTotal / 100, 2);
  1669.                 $totalFactura = round($importeTotal + $importeIva, 2);
  1670.                 if ($totalFactura !== $factura->getTotalFactura()) {
  1671.                     $factura->setTotalFactura($totalFactura);
  1672.                     $this->getDoctrine()->getManager()->flush();
  1673.                 }
  1674.                 //Grafica
  1675.                 if ($factura === $facturas[0]) {
  1676.                     $consumoMedio = $factura->getTotalFactura();
  1677.                     $consumoAcumulado = $factura->getConsumo();
  1678.                 } else {
  1679.                     $indiceFactura = array_search($factura, $facturas);
  1680.                     if ($indiceFactura < 12) {
  1681.                         for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
  1682.                             $consumoMedio += $facturas[$i]->getTotalFactura();
  1683.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  1684.                         }
  1685.                         $consumoMedio = $consumoMedio / ($indiceFactura + 1);
  1686.                     } else {
  1687.                         for ($i = 11; $i >= 0; $i--) {
  1688.                             $n = $indiceFactura - $i;
  1689.                             $consumoMedio += $facturas[$n]->getTotalFactura();
  1690.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  1691.                         }
  1692.                         $consumoMedio = $consumoMedio / 12;
  1693.                     }
  1694.                 }
  1695.             }
  1696.             elseif ($tarifa == '3.0A' || $tarifa == '3.1A') {
  1697.                 $periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  1698.                 $consumoP1Facturado = $factura->getConsumoP1() + $factura->getConsumoP4();
  1699.                 $consumoP2Facturado = $factura->getConsumoP2() + $factura->getConsumoP5();
  1700.                 $consumoP3Facturado = $factura->getConsumoP3() + $factura->getConsumoP6();
  1701.                 $potenciaP1Facturada = $factura->getPotenciaFacturada('P1');
  1702.                 $potenciaP2Facturada = $factura->getPotenciaFacturada('P2');
  1703.                 $potenciaP3Facturada = $factura->getPotenciaFacturada('P3');
  1704.                 $totalPotenciaP1 = round($potenciaP1Facturada * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
  1705.                 $totalPotenciaP2 = round($potenciaP2Facturada * $factura->getPrecioPotenciaP2() * $periodoFacturacion, 2);
  1706.                 $totalPotenciaP3 = round($potenciaP3Facturada * $factura->getPrecioPotenciaP3() * $periodoFacturacion, 2);
  1707.                 $totalPotencia = $totalPotenciaP1 + $totalPotenciaP2 + $totalPotenciaP3;
  1708.                 $totalEnergiaP1 = round($consumoP1Facturado * $factura->getPrecioEnergiaP1(), 2);
  1709.                 $totalEnergiaP2 = round($consumoP2Facturado * $factura->getPrecioEnergiaP2(), 2);
  1710.                 $totalEnergiaP3 = round($consumoP3Facturado * $factura->getPrecioEnergiaP3(), 2);
  1711.                 $totalEnergia = $totalEnergiaP1 + $totalEnergiaP2 + $totalEnergiaP3;
  1712.                 $reactivaP1 = $factura->getReactivaP1() + $factura->getReactivaP4();
  1713.                 $reactivaP2 = $factura->getReactivaP2() + $factura->getReactivaP5();
  1714.                 $excesoReactivaP1 = $reactivaP1 - 0.33 * $consumoP1Facturado;
  1715.                 $excesoReactivaP2 = $reactivaP2 - 0.33 * $consumoP2Facturado;
  1716.                 if($excesoReactivaP1<0)
  1717.                     $excesoReactivaP1=0;
  1718.                 if($excesoReactivaP2<0)
  1719.                     $excesoReactivaP2=0;
  1720.                 $importeReactivaP1 = round($excesoReactivaP1 * $factura->getPrecioReactivaP1(), 2);
  1721.                 $importeReactivaP2 = round($excesoReactivaP2 * $factura->getPrecioReactivaP2(), 2);
  1722.                 $totalReactiva = $importeReactivaP1 + $importeReactivaP2;
  1723.                 $subtotal = round($totalEnergia + $totalPotencia + $totalReactiva, 2);
  1724.                 $importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
  1725.                 $importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
  1726.                 $otrosConceptos=0;
  1727.                 foreach ($factura->getConceptos() as $concepto){
  1728.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1729.                 }
  1730.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1731.                 $importeIva = round($factura->getIva() * $importeTotal / 100, 2);
  1732.                 $totalFactura = round($importeTotal + $importeIva, 2);
  1733.                 if ($totalFactura !== $factura->getTotalFactura()) {
  1734.                     $factura->setTotalFactura($totalFactura);
  1735.                     $this->getDoctrine()->getManager()->flush();
  1736.                 }
  1737.                 //Grafica
  1738.                 if ($factura === $facturas[0]) {
  1739.                     $consumoMedio = $factura->getTotalFactura();
  1740.                     $consumoAcumulado = $factura->getConsumo();
  1741.                 } else {
  1742.                     $indiceFactura = array_search($factura, $facturas);
  1743.                     if ($indiceFactura < 12) {
  1744.                         for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
  1745.                             $consumoMedio += $facturas[$i]->getTotalFactura();
  1746.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  1747.                         }
  1748.                         $consumoMedio = $consumoMedio / ($indiceFactura + 1);
  1749.                     } else {
  1750.                         for ($i = 11; $i >= 0; $i--) {
  1751.                             $n = $indiceFactura - $i;
  1752.                             $consumoMedio += $facturas[$n]->getTotalFactura();
  1753.                         }
  1754.                         $consumoMedio = $consumoMedio / 12;
  1755.                         $ultimaFecha = $factura->getFechaLectura();
  1756.                     }
  1757.                 }
  1758.             } else {
  1759.                 throw $this->createNotFoundException('No se ha encontrado la factura');
  1760.             }
  1761.             $html = $this->renderView('factura/factura.pdf.twig', [
  1762.                 'factura' => $factura,
  1763.                 'entidad' => $entidad,
  1764.                 'consumoMedio' => $consumoMedio,
  1765.                 'consumoAcumulado' => $consumoAcumulado,
  1766.                 'periodoFacturacion' => $periodoFacturacion,
  1767.                 'potenciaP1Facturada' => $potenciaP1Facturada ?? null,
  1768.                 'potenciaP2Facturada' => $potenciaP2Facturada ?? null,
  1769.                 'potenciaP3Facturada' => $potenciaP3Facturada ?? null,
  1770.                 'totalPotenciaP1' => $totalPotenciaP1,
  1771.                 'totalPotenciaP2' => $totalPotenciaP2 ?? null,
  1772.                 'totalPotenciaP3' => $totalPotenciaP3 ?? null,
  1773.                 'totalPotencia' => $totalPotencia,
  1774.                 'totalEnergiaP1' => $totalEnergiaP1,
  1775.                 'totalEnergiaP2' => $totalEnergiaP2 ?? null,
  1776.                 'totalEnergiaP3' => $totalEnergiaP3 ?? null,
  1777.                 'totalEnergia' => $totalEnergia,
  1778.                 'reactivaP1' => $reactivaP1 ?? null,
  1779.                 'reactivaP2' => $reactivaP2 ?? null,
  1780.                 'excesoReactivaP1' => $excesoReactivaP1 ?? null,
  1781.                 'excesoReactivaP2' => $excesoReactivaP2 ?? null,
  1782.                 'importeReactivaP1' => $importeReactivaP1 ?? null,
  1783.                 'importeReactivaP2' => $importeReactivaP2 ?? null,
  1784.                 'totalReactiva' => $totalReactiva ?? null,
  1785.                 'subtotal' => $subtotal,
  1786.                 'importeImpuesto' => $importeImpuesto,
  1787.                 'importeAlquiler' => $importeAlquiler,
  1788.                 'otrosConceptos'=>$otrosConceptos,
  1789.                 'importeTotal' => $importeTotal,
  1790.                 'importeIva' => $importeIva,
  1791.                 'totalFactura' => $totalFactura,
  1792.                 'consumoP1Facturado' => $consumoP1Facturado ?? null,
  1793.                 'consumoP2Facturado' => $consumoP2Facturado ?? null,
  1794.                 'consumoP3Facturado' => $consumoP3Facturado ?? null,
  1795.                 'urlImagen' => $urlImagen
  1796.             ]);
  1797.         }*/
  1798.         if($tarifa->getTipoTarifa()=='Electricidad'){
  1799.             $subject 'FACTURA ELECTRICIDAD';
  1800.             $tipo='electricidad';
  1801.             if($tarifa=='3.0A' || $tarifa=='3.1A'){
  1802.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  1803.                 $consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
  1804.                 $consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
  1805.                 $consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
  1806.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  1807.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  1808.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  1809.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  1810.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  1811.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  1812.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
  1813.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  1814.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  1815.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  1816.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
  1817.                 $reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
  1818.                 $reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
  1819.                 $excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
  1820.                 $excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
  1821.                 if($excesoReactivaP1<0)
  1822.                     $excesoReactivaP1=0;
  1823.                 if($excesoReactivaP2<0)
  1824.                     $excesoReactivaP2=0;
  1825.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  1826.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  1827.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2;
  1828.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  1829.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  1830.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  1831.                 $otrosConceptos=0;
  1832.                 foreach ($factura->getConceptos() as $concepto){
  1833.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1834.                 }
  1835.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1836.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  1837.                 $totalFactura=round($importeTotal+$importeIva,2);
  1838.                 if( $totalFactura!==$factura->getTotalFactura() ){
  1839.                     $factura->setTotalFactura($totalFactura);
  1840.                     $entityManager->flush();
  1841.                 }
  1842.             }
  1843.             else{
  1844.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  1845.                 $consumoP1Facturado=$factura->getConsumoP1();
  1846.                 $consumoP2Facturado=$factura->getConsumoP2();
  1847.                 $consumoP3Facturado=$factura->getConsumoP3();
  1848.                 $consumoP4Facturado=$factura->getConsumoP4();
  1849.                 $consumoP5Facturado=$factura->getConsumoP5();
  1850.                 $consumoP6Facturado=$factura->getConsumoP6();
  1851.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  1852.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  1853.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  1854.                 $potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
  1855.                 $potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
  1856.                 $potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
  1857.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  1858.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  1859.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  1860.                 $totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
  1861.                 $totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
  1862.                 $totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
  1863.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
  1864.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  1865.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  1866.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  1867.                 $totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
  1868.                 $totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
  1869.                 $totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
  1870.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
  1871.                 $reactivaP1=$factura->getReactivaP1();
  1872.                 $reactivaP2=$factura->getReactivaP2();
  1873.                 $reactivaP3=$factura->getReactivaP3();
  1874.                 $reactivaP4=$factura->getReactivaP4();
  1875.                 $reactivaP5=$factura->getReactivaP5();
  1876.                 $reactivaP6=$factura->getReactivaP6();
  1877.                 if($reactivaP1!=0)
  1878.                     $excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
  1879.                 else
  1880.                     $excesoReactivaP1=0;
  1881.                 if($reactivaP2!=0)
  1882.                     $excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
  1883.                 else
  1884.                     $excesoReactivaP2=0;
  1885.                 if($reactivaP3!=0)
  1886.                     $excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
  1887.                 else
  1888.                     $excesoReactivaP3=0;
  1889.                 if($reactivaP4!=0)
  1890.                     $excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
  1891.                 else
  1892.                     $excesoReactivaP4=0;
  1893.                 if($reactivaP5!=0)
  1894.                     $excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
  1895.                 else
  1896.                     $excesoReactivaP5=0;
  1897.                 if($reactivaP6!=0)
  1898.                     $excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
  1899.                 else
  1900.                     $excesoReactivaP6=0;
  1901.                 if($excesoReactivaP1<0)
  1902.                     $excesoReactivaP1=0;
  1903.                 if($excesoReactivaP2<0)
  1904.                     $excesoReactivaP2=0;
  1905.                 if($excesoReactivaP3<0)
  1906.                     $excesoReactivaP3=0;
  1907.                 if($excesoReactivaP4<0)
  1908.                     $excesoReactivaP4=0;
  1909.                 if($excesoReactivaP5<0)
  1910.                     $excesoReactivaP5=0;
  1911.                 if($excesoReactivaP6<0)
  1912.                     $excesoReactivaP6=0;
  1913.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  1914.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  1915.                 $importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
  1916.                 $importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
  1917.                 $importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
  1918.                 $importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
  1919.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
  1920.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  1921.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  1922.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  1923.                 $otrosConceptos=0;
  1924.                 foreach ($factura->getConceptos() as $concepto){
  1925.                     $otrosConceptos+=round($concepto->getImporte(),2);
  1926.                 }
  1927.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  1928.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  1929.                 $totalFactura=round($importeTotal+$importeIva,2);
  1930.                 if( $totalFactura!==$factura->getTotalFactura() ){
  1931.                     $factura->setTotalFactura($totalFactura);
  1932.                     $entityManager->flush();
  1933.                 }
  1934.                 //throw $this->createNotFoundException('No se ha encontrado la factura');
  1935.             }
  1936.             //Grafica
  1937.             $indiceFactura=array_search($factura$facturas);
  1938.             $arrayP=[false,false,false,false,false,false];
  1939.             if($indiceFactura<12){
  1940.                 for($i=0;$i<=$indiceFactura && $i<12;$i++){
  1941.                     $consumoMedio+=$facturas[$i]->getTotalFactura();
  1942.                     $consumoAcumulado+=$facturas[$i]->getConsumo();
  1943.                     $tarifaI=$facturas[$i]->getTarifa();
  1944.                     $arrayPI=[
  1945.                         $tarifaI->getEnergiaP1(),
  1946.                         $tarifaI->getEnergiaP2(),
  1947.                         $tarifaI->getEnergiaP3(),
  1948.                         $tarifaI->getEnergiaP4(),
  1949.                         $tarifaI->getEnergiaP5(),
  1950.                         $tarifaI->getEnergiaP6()
  1951.                     ];
  1952.                     if(!$arrayP[0])
  1953.                         $arrayP[0]=$arrayPI[0];
  1954.                     if(!$arrayP[1])
  1955.                         $arrayP[1]=$arrayPI[1];
  1956.                     if(!$arrayP[2])
  1957.                         $arrayP[2]=$arrayPI[2];
  1958.                     if(!$arrayP[3])
  1959.                         $arrayP[3]=$arrayPI[3];
  1960.                     if(!$arrayP[4])
  1961.                         $arrayP[4]=$arrayPI[4];
  1962.                     if(!$arrayP[5])
  1963.                         $arrayP[5]=$arrayPI[5];
  1964.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  1965.                         $datosGrafica[]=[
  1966.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  1967.                             $facturas[$i]->getConsumoP1(),
  1968.                             0,
  1969.                             0
  1970.                         ];
  1971.                         if ( 1>($numeroP??0) ){
  1972.                             $numeroP=1;
  1973.                         }
  1974.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  1975.                         $datosGrafica[]=[
  1976.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  1977.                             $facturas[$i]->getConsumoP1(),
  1978.                             0,
  1979.                             $facturas[$i]->getConsumoP3()
  1980.                         ];
  1981.                         if ( 2>($numeroP??0) ){
  1982.                             $numeroP=2;
  1983.                         }
  1984.                     }else*/
  1985.                     switch( $tarifaI->getNombre() ){
  1986.                         case '3.0A': case '3.1A':
  1987.                         $datosGrafica[]=[
  1988.                             str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  1989.                             $facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
  1990.                             $facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
  1991.                             $facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
  1992.                             0,
  1993.                             0,
  1994.                             0
  1995.                         ];
  1996.                         break;
  1997.                         default:
  1998.                             $datosGrafica[]=[
  1999.                                 str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  2000.                                 $facturas[$i]->getConsumoP1()??0,
  2001.                                 $facturas[$i]->getConsumoP2()??0,
  2002.                                 $facturas[$i]->getConsumoP3()??0,
  2003.                                 $facturas[$i]->getConsumoP4()??0,
  2004.                                 $facturas[$i]->getConsumoP5()??0,
  2005.                                 $facturas[$i]->getConsumoP6()??0,
  2006.                             ];
  2007.                             break;
  2008.                     }
  2009.                 }
  2010.                 $consumoMedio=$consumoMedio/($indiceFactura+1);
  2011.                 $numeroP=countarray_filter($arrayP) );
  2012.             }
  2013.             else{
  2014.                 for($i=11;$i>=0;$i--){
  2015.                     $n=$indiceFactura-$i;
  2016.                     $consumoMedio+=$facturas[$n]->getTotalFactura();
  2017.                     $consumoAcumulado+=$facturas[$n]->getConsumo();
  2018.                     $tarifaI=$facturas[$n]->getTarifa();
  2019.                     $arrayPI=[
  2020.                         $tarifaI->getEnergiaP1(),
  2021.                         $tarifaI->getEnergiaP2(),
  2022.                         $tarifaI->getEnergiaP3(),
  2023.                         $tarifaI->getEnergiaP4(),
  2024.                         $tarifaI->getEnergiaP5(),
  2025.                         $tarifaI->getEnergiaP6()
  2026.                     ];
  2027.                     if(!$arrayP[0])
  2028.                         $arrayP[0]=$arrayPI[0];
  2029.                     if(!$arrayP[1])
  2030.                         $arrayP[1]=$arrayPI[1];
  2031.                     if(!$arrayP[2])
  2032.                         $arrayP[2]=$arrayPI[2];
  2033.                     if(!$arrayP[3])
  2034.                         $arrayP[3]=$arrayPI[3];
  2035.                     if(!$arrayP[4])
  2036.                         $arrayP[4]=$arrayPI[4];
  2037.                     if(!$arrayP[5])
  2038.                         $arrayP[5]=$arrayPI[5];
  2039.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  2040.                         $datosGrafica[]=[
  2041.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  2042.                             $facturas[$n]->getConsumoP1(),
  2043.                             0,
  2044.                             0
  2045.                         ];
  2046.                         if ( 1>($numeroP??0) ){
  2047.                             $numeroP=1;
  2048.                         }
  2049.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  2050.                         $datosGrafica[]=[
  2051.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  2052.                             $facturas[$n]->getConsumoP1(),
  2053.                             0,
  2054.                             $facturas[$n]->getConsumoP3()
  2055.                         ];
  2056.                         if ( 2>($numeroP??0) ){
  2057.                             $numeroP=2;
  2058.                         }
  2059.                     }elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
  2060.                         $datosGrafica[]=[
  2061.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  2062.                             $facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
  2063.                             $facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
  2064.                             $facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
  2065.                         ];
  2066.                     }*/
  2067.                 }
  2068.                 $consumoMedio=$consumoMedio/12;;
  2069.                 $numeroP=countarray_filter($arrayP) );
  2070.             }
  2071.             $params=[
  2072.                 'factura' => $factura,
  2073.                 'entidad'=>$entidad,
  2074.                 'consumoMedio'=>$consumoMedio,
  2075.                 'consumoAcumulado'=>$consumoAcumulado,
  2076.                 'periodoFacturacion'=>$periodoFacturacion,
  2077.                 'potenciaP1Facturada'=>$potenciaP1Facturada??null,
  2078.                 'potenciaP2Facturada'=>$potenciaP2Facturada??null,
  2079.                 'potenciaP3Facturada'=>$potenciaP3Facturada??null,
  2080.                 'potenciaP4Facturada'=>$potenciaP4Facturada??null,
  2081.                 'potenciaP5Facturada'=>$potenciaP5Facturada??null,
  2082.                 'potenciaP6Facturada'=>$potenciaP6Facturada??null,
  2083.                 'totalPotenciaP1'=>$totalPotenciaP1,
  2084.                 'totalPotenciaP2'=>$totalPotenciaP2??null,
  2085.                 'totalPotenciaP3'=>$totalPotenciaP3??null,
  2086.                 'totalPotenciaP4'=>$totalPotenciaP4??null,
  2087.                 'totalPotenciaP5'=>$totalPotenciaP5??null,
  2088.                 'totalPotenciaP6'=>$totalPotenciaP6??null,
  2089.                 'totalPotencia'=>$totalPotencia,
  2090.                 'totalEnergiaP1'=>$totalEnergiaP1,
  2091.                 'totalEnergiaP2'=>$totalEnergiaP2??null,
  2092.                 'totalEnergiaP3'=>$totalEnergiaP3??null,
  2093.                 'totalEnergiaP4'=>$totalEnergiaP4??null,
  2094.                 'totalEnergiaP5'=>$totalEnergiaP5??null,
  2095.                 'totalEnergiaP6'=>$totalEnergiaP6??null,
  2096.                 'totalEnergia'=>$totalEnergia,
  2097.                 'reactivaP1'=>$reactivaP1??null,
  2098.                 'reactivaP2'=>$reactivaP2??null,
  2099.                 'reactivaP3'=>$reactivaP3??null,
  2100.                 'reactivaP4'=>$reactivaP4??null,
  2101.                 'reactivaP5'=>$reactivaP5??null,
  2102.                 'reactivaP6'=>$reactivaP6??null,
  2103.                 'excesoReactivaP1'=>$excesoReactivaP1??null,
  2104.                 'excesoReactivaP2'=>$excesoReactivaP2??null,
  2105.                 'excesoReactivaP3'=>$excesoReactivaP3??null,
  2106.                 'excesoReactivaP4'=>$excesoReactivaP4??null,
  2107.                 'excesoReactivaP5'=>$excesoReactivaP5??null,
  2108.                 'excesoReactivaP6'=>$excesoReactivaP6??null,
  2109.                 'importeReactivaP1'=>$importeReactivaP1??null,
  2110.                 'importeReactivaP2'=>$importeReactivaP2??null,
  2111.                 'importeReactivaP3'=>$importeReactivaP3??null,
  2112.                 'importeReactivaP4'=>$importeReactivaP4??null,
  2113.                 'importeReactivaP5'=>$importeReactivaP5??null,
  2114.                 'importeReactivaP6'=>$importeReactivaP6??null,
  2115.                 'totalReactiva'=>$totalReactiva??null,
  2116.                 'subtotal'=>$subtotal,
  2117.                 'importeImpuesto'=>$importeImpuesto,
  2118.                 'importeAlquiler'=>$importeAlquiler,
  2119.                 'otrosConceptos'=>$otrosConceptos??0,
  2120.                 'importeTotal'=>$importeTotal,
  2121.                 'importeIva'=>$importeIva,
  2122.                 'totalFactura'=>$totalFactura,
  2123.                 'consumoP1Facturado'=>$consumoP1Facturado??null,
  2124.                 'consumoP2Facturado'=>$consumoP2Facturado??null,
  2125.                 'consumoP3Facturado'=>$consumoP3Facturado??null,
  2126.                 'consumoP4Facturado'=>$consumoP4Facturado??null,
  2127.                 'consumoP5Facturado'=>$consumoP5Facturado??null,
  2128.                 'consumoP6Facturado'=>$consumoP6Facturado??null,
  2129.                 'arrayP'=>$arrayP??[true,false,false,false,false,false],
  2130.                 'numeroP'=>$numeroP??1,
  2131.                 'urlImagen'=>$urlImagen
  2132.             ];
  2133.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  2134.                 case 'finkaluz':
  2135.                     $html=$this->renderView('factura/finkaluz.factura.pdf.twig'$params);
  2136.                     break;
  2137.                 case 'emfra':
  2138.                     $html=$this->renderView('factura/emfra.factura.pdf.twig'$params);
  2139.                     break;
  2140.                 case 'onda':
  2141.                     $html=$this->renderView('factura/onda.factura.pdf.twig'$params);
  2142.                     break;
  2143.                 case 'digitel':
  2144.                     $html=$this->renderView('factura/digitel.factura.pdf.twig'$params);
  2145.                     break;
  2146.                 case 'apolo':
  2147.                     $html=$this->renderView('factura/apolo.factura.pdf.twig'$params);
  2148.                     break;
  2149.                 case 'e3':
  2150.                     $html=$this->renderView('factura/e3/factura.pdf.twig'$params);
  2151.                     break;
  2152.                 case 'telkes':
  2153.                     $html=$this->renderView('factura/telkes/factura.pdf.twig'$params);
  2154.                     break;
  2155.                 case 'paladio':
  2156.                     $html=$this->renderView('factura/paladio/factura.pdf.twig'$params);
  2157.                     break;
  2158.                 case 'arsen':
  2159.                     $html=$this->renderView('factura/arsen/factura.pdf.twig'$params);
  2160.                     break;
  2161.                 default:
  2162.                     $html=$this->renderView('factura/factura.pdf.twig'$params);
  2163.                     break;
  2164.             }
  2165.         }
  2166.         else {
  2167.             $subject 'FACTURA GAS';
  2168.             $tipo='gas';
  2169.             $periodoFacturacion date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  2170.             $totalPotenciaP1 round($factura->getPrecioPotenciaP1() * $periodoFacturacion2);
  2171.             $totalPotencia $totalPotenciaP1;
  2172.             $totalEnergiaP1 round($factura->getConsumoConvertidoP1() * $factura->getPrecioEnergiaP1(), 2);
  2173.             $totalEnergia $totalEnergiaP1;
  2174.             $subtotal round($totalEnergia $totalPotencia2);
  2175.             $importeImpuesto round($factura->getImpuesto() * $factura->getConsumoConvertidoP1(), 2);
  2176.             $importeAlquiler round($periodoFacturacion $factura->getAlquilerEquipos(), 2);
  2177.             $otrosConceptos=0;
  2178.             foreach ($factura->getConceptos() as $concepto){
  2179.                 $otrosConceptos+=round($concepto->getImporte(),2);
  2180.             }
  2181.             $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  2182.             $importeIva round($factura->getIva() * $importeTotal 1002);
  2183.             $totalFactura round($importeTotal $importeIva2);
  2184.             if ($totalFactura !== $factura->getTotalFactura()) {
  2185.                 $factura->setTotalFactura($totalFactura);
  2186.                 $entityManager->flush();
  2187.             }
  2188.             //Grafica
  2189.             if ($factura === $facturas[0]) {
  2190.                 $consumoMedio $factura->getTotalFactura();
  2191.                 $consumoAcumulado $factura->getConsumoConvertidoP1();
  2192.             } else {
  2193.                 $indiceFactura array_search($factura$facturas);
  2194.                 if ($indiceFactura 12) {
  2195.                     for ($i 0$i <= $indiceFactura && $i 12$i++) {
  2196.                         $consumoMedio += $facturas[$i]->getTotalFactura();
  2197.                         $consumoAcumulado += $facturas[$i]->getConsumoConvertidoP1();
  2198.                     }
  2199.                     $consumoMedio $consumoMedio / ($indiceFactura 1);
  2200.                 } else {
  2201.                     for ($i 11$i >= 0$i--) {
  2202.                         $n $indiceFactura $i;
  2203.                         $consumoMedio += $facturas[$n]->getTotalFactura();
  2204.                         $consumoAcumulado += $facturas[$n]->getConsumoConvertidoP1();
  2205.                     }
  2206.                     $consumoMedio $consumoMedio 12;
  2207.                 }
  2208.             }
  2209.             $params=[
  2210.                 'factura' => $factura,
  2211.                 'entidad' => $entidad,
  2212.                 'consumoMedio' => $consumoMedio,
  2213.                 'consumoAcumulado' => $consumoAcumulado,
  2214.                 'periodoFacturacion' => $periodoFacturacion,
  2215.                 'totalPotenciaP1' => $totalPotenciaP1,
  2216.                 'totalPotencia' => $totalPotencia,
  2217.                 'totalEnergiaP1' => $totalEnergiaP1,
  2218.                 'totalEnergia' => $totalEnergia,
  2219.                 'subtotal' => $subtotal,
  2220.                 'importeImpuesto' => $importeImpuesto,
  2221.                 'importeAlquiler' => $importeAlquiler,
  2222.                 'otrosConceptos'=>$otrosConceptos,
  2223.                 'importeTotal' => $importeTotal,
  2224.                 'importeIva' => $importeIva,
  2225.                 'totalFactura' => $totalFactura,
  2226.                 'urlImagen' => $urlImagen
  2227.             ];
  2228.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  2229.                 case 'finkaluz':
  2230.                     $html=$this->renderView('factura/finkaluz.factura.pdf.twig'$params);
  2231.                     break;
  2232.                 case 'emfra':
  2233.                     $html=$this->renderView('factura/emfra.factura.pdf.twig'$params);
  2234.                     break;
  2235.                 case 'onda':
  2236.                     $html=$this->renderView('factura/onda.factura.pdf.twig'$params);
  2237.                     break;
  2238.                 case 'digitel':
  2239.                     $html=$this->renderView('factura/digitel.factura.pdf.twig'$params);
  2240.                     break;
  2241.                 case 'apolo':
  2242.                     $html=$this->renderView('factura/apolo.factura.pdf.twig'$params);
  2243.                     break;
  2244.                 case 'e3':
  2245.                     $html=$this->renderView('factura/e3/factura.pdf.twig'$params);
  2246.                     break;
  2247.                 case 'telkes':
  2248.                     $html=$this->renderView('factura/telkes/factura.pdf.twig'$params);
  2249.                     break;
  2250.                 case 'paladio':
  2251.                     $html=$this->renderView('factura/paladio/factura.pdf.twig'$params);
  2252.                     break;
  2253.                 case 'arsen':
  2254.                     $html=$this->renderView('factura/arsen/factura.pdf.twig'$params);
  2255.                     break;
  2256.                 default:
  2257.                     $html=$this->renderView('factura/factura.pdf.twig'$params);
  2258.                     break;
  2259.             }
  2260.         }
  2261.         //Attach PDF
  2262.         try {
  2263.             unlink(__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
  2264.         } catch (\Exception $exception) {
  2265.         }
  2266.         $pdfPath=__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf';
  2267.         $pdf->generateFromHtml(
  2268.             $html,
  2269.             $pdfPath
  2270.         );
  2271.         $params['pdf']=base64_encode(file_get_contents($pdfPath));
  2272.         //Detect NIF type
  2273.         $nif=$factura->getNifCliente();
  2274.         $first=ctype_alphasubstr($nif,0,1) );
  2275.         $last=ctype_alphasubstr($nif,strlen($nif)-1,1) );
  2276.         $validador= new Validador();
  2277.         if( $validador->validateCif($nif) ){
  2278.             $params['tipoDocumento']='CIF';
  2279.         }
  2280.         elseif($first && $last)
  2281.             $params['tipoDocumento']='NIE';
  2282.         elseif ($first)
  2283.             $params['tipoDocumento']='CIF';
  2284.         else
  2285.             $params['tipoDocumento']='DNI';
  2286.         switch ($params['tipoDocumento']){
  2287.             case 'NIE':case 'DNI':
  2288.             $cliente=$factura->getContrato()->getCliente();
  2289.             if ( $factura->getNombreCliente()==$cliente->__toString() ){
  2290.                 $params['nombre']['nombre']=$cliente->getNombre();
  2291.                 $params['nombre']['apellido1']=$cliente->getApellido();
  2292.                 $params['nombre']['apellido2']=$cliente->getApellido2();
  2293.             }
  2294.             else{
  2295.                 $nombreArray=explode' '$factura->getNombreCliente() );
  2296.                 $arrayCount=count($nombreArray);
  2297.                 $params['nombre']['nombre']=$nombreArray[0];
  2298.                 if($arrayCount==2){
  2299.                     $params['nombre']['apellido1']=$nombreArray[1];
  2300.                 }elseif ($arrayCount==3){
  2301.                     $params['nombre']['apellido1']=$nombreArray[1];
  2302.                     $params['nombre']['apellido2']=$nombreArray[2];
  2303.                 }elseif ($arrayCount==4){
  2304.                     $params['nombre']['nombre'].=' '.$nombreArray[1];
  2305.                     $params['nombre']['apellido1']=$nombreArray[2];
  2306.                     $params['nombre']['apellido2']=$nombreArray[3];
  2307.                 }else {
  2308.                     $nombreArray explode(' '$factura->getNombreCliente());
  2309.                     $arrayCount count($nombreArray);
  2310.                     if ($arrayCount 1) {
  2311.                         $params['nombre']['apellido1'] = '';
  2312.                         $params['nombre']['apellido2'] = '';
  2313.                         $i=1;
  2314.                         for (; $i $arrayCount$i++) {
  2315.                             $concatenatedString $params['nombre']['apellido1'] . $nombreArray[$i] . ' ';
  2316.                             if (strlen($concatenatedString) <= 40) {
  2317.                                 $params['nombre']['apellido1'] = $concatenatedString;
  2318.                             } else {
  2319.                                 break;
  2320.                             }
  2321.                         }
  2322.                         for (; $i $arrayCount$i++) {
  2323.                             $concatenatedString $params['nombre']['apellido2'] . $nombreArray[$i] . ' ';
  2324.                             if (strlen($concatenatedString) <= 40) {
  2325.                                 $params['nombre']['apellido2'] = $concatenatedString;
  2326.                             } else {
  2327.                                 break;
  2328.                             }
  2329.                         }
  2330.                     }
  2331.                     $params['nombre']['apellido1'] = trim($params['nombre']['apellido1']);
  2332.                     $params['nombre']['apellido2'] = trim($params['nombre']['apellido2']);
  2333.                 }
  2334.             }
  2335.         }
  2336.         switch ($_SERVER['APP_ENV']??'finkaluz'){
  2337.             case 'finkaluz':
  2338.                 $xml=$this->renderView('factura/finkaluz.factura.xml.twig'$params);
  2339.                 break;
  2340.             case 'emfra':
  2341.                 $xml=$this->renderView('factura/emfra.factura.xml.twig'$params);
  2342.                 break;
  2343.             case 'onda':
  2344.                 $xml=$this->renderView('factura/onda.factura.xml.twig'$params);
  2345.                 break;
  2346.             case 'digitel':
  2347.                 $xml=$this->renderView('factura/digitel.factura.xml.twig'$params);
  2348.                 break;
  2349.             case 'apolo':
  2350.                 $xml=$this->renderView('factura/apolo.factura.xml.twig'$params);
  2351.                 break;
  2352.             case 'e3':
  2353.                 $xml=$this->renderView('factura/e3/factura.xml.twig'$params);
  2354.                 break;
  2355.             case 'telkes':
  2356.                 $xml=$this->renderView('factura/telkes/factura.xml.twig'$params);
  2357.                 break;
  2358.             case 'paladio':
  2359.                 $xml=$this->renderView('factura/paladio/factura.xml.twig'$params);
  2360.                 break;
  2361.             case 'arsen':
  2362.                 $xml=$this->renderView('factura/arsen/factura.xml.twig'$params);
  2363.                 break;
  2364.             default:
  2365.                 $xml=$this->renderView('factura/factura.xml.twig'$params);
  2366.                 break;
  2367.         }
  2368.         $path=__DIR__ '/../../temp/';
  2369.         $filename=(str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.xml';
  2370.         $filesystem->dumpFile($path.$filename$xml);
  2371.         $response= new BinaryFileResponse($path.$filename);
  2372.         // Create the disposition of the file
  2373.         $disposition $response->headers->makeDisposition(
  2374.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  2375.             $filename
  2376.         );
  2377.         // Set the content disposition
  2378.         $response->headers->set('Content-Disposition'$disposition);
  2379.         // Dispatch request
  2380.         return $response;
  2381.     }
  2382.     /**
  2383.      * @Route("factura/{id}/enviar", name="factura_enviar", methods={"GET", "POST"})
  2384.      */
  2385.     public function enviar(Factura $facturaPdf $pdfRequest $requestFacturaRepository $facturaRepository,
  2386.                            BancoRepository $bancoRepositoryMailerInterface $mailerEntityManagerInterface $entityManager): Response
  2387.     {
  2388.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  2389.         $logger = new Logger('factura_logger');
  2390.         $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/email.log'Logger::DEBUG));
  2391.         $urlImagen $request->request->get("urlImagen");
  2392.         $facturas $facturaRepository->findBy(['contrato' => $factura->getContrato()], ['fechaLectura' => 'ASC']);
  2393.         $tarifa $factura->getTarifa();
  2394.         $entidad $bancoRepository->findByCuenta($factura->getCcc());
  2395.         $consumoAcumulado '0';
  2396.         $consumoMedio '0';
  2397.         /*if ($tarifa->getTipoTarifa() == 'Electricidad') {
  2398.             $subject = 'FACTURA ELECTRICIDAD';
  2399.             $tipo='electricidad';
  2400.             if ($tarifa == '2.0A' || $tarifa == '2.1A') {
  2401.                 $periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  2402.                 $totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
  2403.                 $totalPotencia = $totalPotenciaP1;
  2404.                 $totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
  2405.                 $totalEnergia = $totalEnergiaP1;
  2406.                 $subtotal = round($totalEnergia + $totalPotencia, 2);
  2407.                 $importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
  2408.                 $importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
  2409.                 $otrosConceptos=0;
  2410.                 foreach ($factura->getConceptos() as $concepto){
  2411.                     $otrosConceptos+=round($concepto->getImporte(),2);
  2412.                 }
  2413.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  2414.                 $importeIva = round($factura->getIva() * $importeTotal / 100, 2);
  2415.                 $totalFactura = round($importeTotal + $importeIva, 2);
  2416.                 if ($totalFactura !== $factura->getTotalFactura()) {
  2417.                     $factura->setTotalFactura($totalFactura);
  2418.                     $this->getDoctrine()->getManager()->flush();
  2419.                 }
  2420.                 //Grafica
  2421.                 if ($factura === $facturas[0]) {
  2422.                     $consumoMedio = $factura->getTotalFactura();
  2423.                     $consumoAcumulado = $factura->getLecturaEnergiaP1() - $factura->getLecturaAnteriorP1();
  2424.                 } else {
  2425.                     $indiceFactura = array_search($factura, $facturas);
  2426.                     if ($indiceFactura < 12) {
  2427.                         for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
  2428.                             $consumoMedio += $facturas[$i]->getTotalFactura();
  2429.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  2430.                         }
  2431.                         $consumoMedio = $consumoMedio / ($indiceFactura + 1);
  2432.                     } else {
  2433.                         for ($i = 11; $i >= 0; $i--) {
  2434.                             $n = $indiceFactura - $i;
  2435.                             $consumoMedio += $facturas[$n]->getTotalFactura();
  2436.                             $consumoAcumulado += $factura->getConsumo()[1];
  2437.                         }
  2438.                         $consumoMedio = $consumoMedio / 12;
  2439.                     }
  2440.                 }
  2441.             }
  2442.             elseif ($tarifa == '2.0DHA' || $tarifa == '2.1DHA') {
  2443.                 $periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  2444.                 $totalPotenciaP1 = round($factura->getPotenciaP1() * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
  2445.                 $totalPotencia = $totalPotenciaP1;
  2446.                 $totalEnergiaP1 = round($factura->getConsumoP1() * $factura->getPrecioEnergiaP1(), 2);
  2447.                 $totalEnergiaP3 = round($factura->getConsumoP3() * $factura->getPrecioEnergiaP3(), 2);
  2448.                 $totalEnergia = $totalEnergiaP1 + $totalEnergiaP3;
  2449.                 $subtotal = round($totalEnergia + $totalPotencia, 2);
  2450.                 $importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
  2451.                 $importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
  2452.                 $otrosConceptos=0;
  2453.                 foreach ($factura->getConceptos() as $concepto){
  2454.                     $otrosConceptos+=round($concepto->getImporte(),2);
  2455.                 }
  2456.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  2457.                 $importeIva = round($factura->getIva() * $importeTotal / 100, 2);
  2458.                 $totalFactura = round($importeTotal + $importeIva, 2);
  2459.                 if ($totalFactura !== $factura->getTotalFactura()) {
  2460.                     $factura->setTotalFactura($totalFactura);
  2461.                     $this->getDoctrine()->getManager()->flush();
  2462.                 }
  2463.                 //Grafica
  2464.                 if ($factura === $facturas[0]) {
  2465.                     $consumoMedio = $factura->getTotalFactura();
  2466.                     $consumoAcumulado = $factura->getConsumo();
  2467.                 } else {
  2468.                     $indiceFactura = array_search($factura, $facturas);
  2469.                     if ($indiceFactura < 12) {
  2470.                         for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
  2471.                             $consumoMedio += $facturas[$i]->getTotalFactura();
  2472.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  2473.                         }
  2474.                         $consumoMedio = $consumoMedio / ($indiceFactura + 1);
  2475.                     } else {
  2476.                         for ($i = 11; $i >= 0; $i--) {
  2477.                             $n = $indiceFactura - $i;
  2478.                             $consumoMedio += $facturas[$n]->getTotalFactura();
  2479.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  2480.                         }
  2481.                         $consumoMedio = $consumoMedio / 12;
  2482.                     }
  2483.                 }
  2484.             }
  2485.             elseif ($tarifa == '3.0A' || $tarifa == '3.1A') {
  2486.                 $periodoFacturacion = date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  2487.                 $consumoP1Facturado = $factura->getConsumoP1() + $factura->getConsumoP4();
  2488.                 $consumoP2Facturado = $factura->getConsumoP2() + $factura->getConsumoP5();
  2489.                 $consumoP3Facturado = $factura->getConsumoP3() + $factura->getConsumoP6();
  2490.                 $potenciaP1Facturada = $factura->getPotenciaFacturada('P1');
  2491.                 $potenciaP2Facturada = $factura->getPotenciaFacturada('P2');
  2492.                 $potenciaP3Facturada = $factura->getPotenciaFacturada('P3');
  2493.                 $totalPotenciaP1 = round($potenciaP1Facturada * $factura->getPrecioPotenciaP1() * $periodoFacturacion, 2);
  2494.                 $totalPotenciaP2 = round($potenciaP2Facturada * $factura->getPrecioPotenciaP2() * $periodoFacturacion, 2);
  2495.                 $totalPotenciaP3 = round($potenciaP3Facturada * $factura->getPrecioPotenciaP3() * $periodoFacturacion, 2);
  2496.                 $totalPotencia = $totalPotenciaP1 + $totalPotenciaP2 + $totalPotenciaP3;
  2497.                 $totalEnergiaP1 = round($consumoP1Facturado * $factura->getPrecioEnergiaP1(), 2);
  2498.                 $totalEnergiaP2 = round($consumoP2Facturado * $factura->getPrecioEnergiaP2(), 2);
  2499.                 $totalEnergiaP3 = round($consumoP3Facturado * $factura->getPrecioEnergiaP3(), 2);
  2500.                 $totalEnergia = $totalEnergiaP1 + $totalEnergiaP2 + $totalEnergiaP3;
  2501.                 $reactivaP1 = $factura->getReactivaP1() + $factura->getReactivaP4();
  2502.                 $reactivaP2 = $factura->getReactivaP2() + $factura->getReactivaP5();
  2503.                 $excesoReactivaP1 = $reactivaP1 - 0.33 * $consumoP1Facturado;
  2504.                 $excesoReactivaP2 = $reactivaP2 - 0.33 * $consumoP2Facturado;
  2505.                 if($excesoReactivaP1<0)
  2506.                     $excesoReactivaP1=0;
  2507.                 if($excesoReactivaP2<0)
  2508.                     $excesoReactivaP2=0;
  2509.                 $importeReactivaP1 = round($excesoReactivaP1 * $factura->getPrecioReactivaP1(), 2);
  2510.                 $importeReactivaP2 = round($excesoReactivaP2 * $factura->getPrecioReactivaP2(), 2);
  2511.                 $totalReactiva = $importeReactivaP1 + $importeReactivaP2;
  2512.                 $subtotal = round($totalEnergia + $totalPotencia + $totalReactiva, 2);
  2513.                 $importeImpuesto = round($factura->getImpuesto() * $subtotal / 100, 2);
  2514.                 $importeAlquiler = round($periodoFacturacion * $factura->getAlquilerEquipos(), 2);
  2515.                 $otrosConceptos=0;
  2516.                 foreach ($factura->getConceptos() as $concepto){
  2517.                     $otrosConceptos+=round($concepto->getImporte(),2);
  2518.                 }
  2519.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  2520.                 $importeIva = round($factura->getIva() * $importeTotal / 100, 2);
  2521.                 $totalFactura = round($importeTotal + $importeIva, 2);
  2522.                 if ($totalFactura !== $factura->getTotalFactura()) {
  2523.                     $factura->setTotalFactura($totalFactura);
  2524.                     $this->getDoctrine()->getManager()->flush();
  2525.                 }
  2526.                 //Grafica
  2527.                 if ($factura === $facturas[0]) {
  2528.                     $consumoMedio = $factura->getTotalFactura();
  2529.                     $consumoAcumulado = $factura->getConsumo();
  2530.                 } else {
  2531.                     $indiceFactura = array_search($factura, $facturas);
  2532.                     if ($indiceFactura < 12) {
  2533.                         for ($i = 0; $i <= $indiceFactura && $i < 12; $i++) {
  2534.                             $consumoMedio += $facturas[$i]->getTotalFactura();
  2535.                             $consumoAcumulado += $facturas[$i]->getConsumo();
  2536.                         }
  2537.                         $consumoMedio = $consumoMedio / ($indiceFactura + 1);
  2538.                     } else {
  2539.                         for ($i = 11; $i >= 0; $i--) {
  2540.                             $n = $indiceFactura - $i;
  2541.                             $consumoMedio += $facturas[$n]->getTotalFactura();
  2542.                         }
  2543.                         $consumoMedio = $consumoMedio / 12;
  2544.                         $ultimaFecha = $factura->getFechaLectura();
  2545.                     }
  2546.                 }
  2547.             } else {
  2548.                 throw $this->createNotFoundException('No se ha encontrado la factura');
  2549.             }
  2550.             $html = $this->renderView('factura/factura.pdf.twig', [
  2551.                 'factura' => $factura,
  2552.                 'entidad' => $entidad,
  2553.                 'consumoMedio' => $consumoMedio,
  2554.                 'consumoAcumulado' => $consumoAcumulado,
  2555.                 'periodoFacturacion' => $periodoFacturacion,
  2556.                 'potenciaP1Facturada' => $potenciaP1Facturada ?? null,
  2557.                 'potenciaP2Facturada' => $potenciaP2Facturada ?? null,
  2558.                 'potenciaP3Facturada' => $potenciaP3Facturada ?? null,
  2559.                 'totalPotenciaP1' => $totalPotenciaP1,
  2560.                 'totalPotenciaP2' => $totalPotenciaP2 ?? null,
  2561.                 'totalPotenciaP3' => $totalPotenciaP3 ?? null,
  2562.                 'totalPotencia' => $totalPotencia,
  2563.                 'totalEnergiaP1' => $totalEnergiaP1,
  2564.                 'totalEnergiaP2' => $totalEnergiaP2 ?? null,
  2565.                 'totalEnergiaP3' => $totalEnergiaP3 ?? null,
  2566.                 'totalEnergia' => $totalEnergia,
  2567.                 'reactivaP1' => $reactivaP1 ?? null,
  2568.                 'reactivaP2' => $reactivaP2 ?? null,
  2569.                 'excesoReactivaP1' => $excesoReactivaP1 ?? null,
  2570.                 'excesoReactivaP2' => $excesoReactivaP2 ?? null,
  2571.                 'importeReactivaP1' => $importeReactivaP1 ?? null,
  2572.                 'importeReactivaP2' => $importeReactivaP2 ?? null,
  2573.                 'totalReactiva' => $totalReactiva ?? null,
  2574.                 'subtotal' => $subtotal,
  2575.                 'importeImpuesto' => $importeImpuesto,
  2576.                 'importeAlquiler' => $importeAlquiler,
  2577.                 'otrosConceptos'=>$otrosConceptos,
  2578.                 'importeTotal' => $importeTotal,
  2579.                 'importeIva' => $importeIva,
  2580.                 'totalFactura' => $totalFactura,
  2581.                 'consumoP1Facturado' => $consumoP1Facturado ?? null,
  2582.                 'consumoP2Facturado' => $consumoP2Facturado ?? null,
  2583.                 'consumoP3Facturado' => $consumoP3Facturado ?? null,
  2584.                 'urlImagen' => $urlImagen
  2585.             ]);
  2586.         }*/
  2587.         if($tarifa->getTipoTarifa()=='Electricidad'){
  2588.             $subject 'FACTURA ELECTRICIDAD';
  2589.             $tipo='electricidad';
  2590.             if($tarifa=='3.0A' || $tarifa=='3.1A'){
  2591.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  2592.                 $consumoP1Facturado=$factura->getConsumoP1()+$factura->getConsumoP4();
  2593.                 $consumoP2Facturado=$factura->getConsumoP2()+$factura->getConsumoP5();
  2594.                 $consumoP3Facturado=$factura->getConsumoP3()+$factura->getConsumoP6();
  2595.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  2596.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  2597.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  2598.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  2599.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  2600.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  2601.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3;
  2602.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  2603.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  2604.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  2605.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3;
  2606.                 $reactivaP1=$factura->getReactivaP1()+$factura->getReactivaP4();
  2607.                 $reactivaP2=$factura->getReactivaP2()+$factura->getReactivaP5();
  2608.                 $excesoReactivaP1=$reactivaP1-0.33*$consumoP1Facturado;
  2609.                 $excesoReactivaP2=$reactivaP2-0.33*$consumoP2Facturado;
  2610.                 if($excesoReactivaP1<0)
  2611.                     $excesoReactivaP1=0;
  2612.                 if($excesoReactivaP2<0)
  2613.                     $excesoReactivaP2=0;
  2614.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  2615.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  2616.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2;
  2617.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  2618.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  2619.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  2620.                 $otrosConceptos=0;
  2621.                 foreach ($factura->getConceptos() as $concepto){
  2622.                     $otrosConceptos+=round($concepto->getImporte(),2);
  2623.                 }
  2624.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  2625.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  2626.                 $totalFactura=round($importeTotal+$importeIva,2);
  2627.                 if( $totalFactura!==$factura->getTotalFactura() ){
  2628.                     $factura->setTotalFactura($totalFactura);
  2629.                     $entityManager->flush();
  2630.                 }
  2631.             }
  2632.             else{
  2633.                 $periodoFacturacion=date_diff$factura->getFechaLecturaAnterior(), $factura->getFechaLectura() )->days;
  2634.                 $consumoP1Facturado=$factura->getConsumoP1();
  2635.                 $consumoP2Facturado=$factura->getConsumoP2();
  2636.                 $consumoP3Facturado=$factura->getConsumoP3();
  2637.                 $consumoP4Facturado=$factura->getConsumoP4();
  2638.                 $consumoP5Facturado=$factura->getConsumoP5();
  2639.                 $consumoP6Facturado=$factura->getConsumoP6();
  2640.                 $potenciaP1Facturada=$factura->getPotenciaFacturada('P1');
  2641.                 $potenciaP2Facturada=$factura->getPotenciaFacturada('P2');
  2642.                 $potenciaP3Facturada=$factura->getPotenciaFacturada('P3');
  2643.                 $potenciaP4Facturada=$factura->getPotenciaFacturada('P4');
  2644.                 $potenciaP5Facturada=$factura->getPotenciaFacturada('P5');
  2645.                 $potenciaP6Facturada=$factura->getPotenciaFacturada('P6');
  2646.                 $totalPotenciaP1=round($potenciaP1Facturada*$factura->getPrecioPotenciaP1()*$periodoFacturacion,2);
  2647.                 $totalPotenciaP2=round($potenciaP2Facturada*$factura->getPrecioPotenciaP2()*$periodoFacturacion,2);
  2648.                 $totalPotenciaP3=round($potenciaP3Facturada*$factura->getPrecioPotenciaP3()*$periodoFacturacion,2);
  2649.                 $totalPotenciaP4=round($potenciaP4Facturada*$factura->getPrecioPotenciaP4()*$periodoFacturacion,2);
  2650.                 $totalPotenciaP5=round($potenciaP5Facturada*$factura->getPrecioPotenciaP5()*$periodoFacturacion,2);
  2651.                 $totalPotenciaP6=round($potenciaP6Facturada*$factura->getPrecioPotenciaP6()*$periodoFacturacion,2);
  2652.                 $totalPotencia=$totalPotenciaP1+$totalPotenciaP2+$totalPotenciaP3+$totalPotenciaP4+$totalPotenciaP5+$totalPotenciaP6;
  2653.                 $totalEnergiaP1=round($consumoP1Facturado*$factura->getPrecioEnergiaP1(),2);
  2654.                 $totalEnergiaP2=round($consumoP2Facturado*$factura->getPrecioEnergiaP2(),2);
  2655.                 $totalEnergiaP3=round($consumoP3Facturado*$factura->getPrecioEnergiaP3(),2);
  2656.                 $totalEnergiaP4=round($consumoP4Facturado*$factura->getPrecioEnergiaP4(),2);
  2657.                 $totalEnergiaP5=round($consumoP5Facturado*$factura->getPrecioEnergiaP5(),2);
  2658.                 $totalEnergiaP6=round($consumoP6Facturado*$factura->getPrecioEnergiaP6(),2);
  2659.                 $totalEnergia=$totalEnergiaP1+$totalEnergiaP2+$totalEnergiaP3+$totalEnergiaP4+$totalEnergiaP5+$totalEnergiaP6;
  2660.                 $reactivaP1=$factura->getReactivaP1();
  2661.                 $reactivaP2=$factura->getReactivaP2();
  2662.                 $reactivaP3=$factura->getReactivaP3();
  2663.                 $reactivaP4=$factura->getReactivaP4();
  2664.                 $reactivaP5=$factura->getReactivaP5();
  2665.                 $reactivaP6=$factura->getReactivaP6();
  2666.                 if($reactivaP1!=0)
  2667.                     $excesoReactivaP1=$reactivaP1-0.33*$factura->getConsumoP1();
  2668.                 else
  2669.                     $excesoReactivaP1=0;
  2670.                 if($reactivaP2!=0)
  2671.                     $excesoReactivaP2=$reactivaP2-0.33*$factura->getConsumoP2();
  2672.                 else
  2673.                     $excesoReactivaP2=0;
  2674.                 if($reactivaP3!=0)
  2675.                     $excesoReactivaP3=$reactivaP3-0.33*$factura->getConsumoP3();
  2676.                 else
  2677.                     $excesoReactivaP3=0;
  2678.                 if($reactivaP4!=0)
  2679.                     $excesoReactivaP4=$reactivaP4-0.33*$factura->getConsumoP4();
  2680.                 else
  2681.                     $excesoReactivaP4=0;
  2682.                 if($reactivaP5!=0)
  2683.                     $excesoReactivaP5=$reactivaP5-0.33*$factura->getConsumoP5();
  2684.                 else
  2685.                     $excesoReactivaP5=0;
  2686.                 if($reactivaP6!=0)
  2687.                     $excesoReactivaP6=$reactivaP6-0.33*$factura->getConsumoP6();
  2688.                 else
  2689.                     $excesoReactivaP6=0;
  2690.                 if($excesoReactivaP1<0)
  2691.                     $excesoReactivaP1=0;
  2692.                 if($excesoReactivaP2<0)
  2693.                     $excesoReactivaP2=0;
  2694.                 if($excesoReactivaP3<0)
  2695.                     $excesoReactivaP3=0;
  2696.                 if($excesoReactivaP4<0)
  2697.                     $excesoReactivaP4=0;
  2698.                 if($excesoReactivaP5<0)
  2699.                     $excesoReactivaP5=0;
  2700.                 if($excesoReactivaP6<0)
  2701.                     $excesoReactivaP6=0;
  2702.                 $importeReactivaP1=round($excesoReactivaP1*$factura->getPrecioReactivaP1(),2);
  2703.                 $importeReactivaP2=round($excesoReactivaP2*$factura->getPrecioReactivaP2(),2);
  2704.                 $importeReactivaP3=round($excesoReactivaP3*$factura->getPrecioReactivaP3(),2);
  2705.                 $importeReactivaP4=round($excesoReactivaP4*$factura->getPrecioReactivaP4(),2);
  2706.                 $importeReactivaP5=round($excesoReactivaP5*$factura->getPrecioReactivaP5(),2);
  2707.                 $importeReactivaP6=round($excesoReactivaP6*$factura->getPrecioReactivaP6(),2);
  2708.                 $totalReactiva=$importeReactivaP1+$importeReactivaP2+$importeReactivaP3+$importeReactivaP4+$importeReactivaP5+$importeReactivaP6;
  2709.                 $subtotal=round($totalEnergia+$totalPotencia+$totalReactiva,2);
  2710.                 $importeImpuesto=round($factura->getImpuesto()*$subtotal/100,2);
  2711.                 $importeAlquiler=round($periodoFacturacion*$factura->getAlquilerEquipos(),2);
  2712.                 $otrosConceptos=0;
  2713.                 foreach ($factura->getConceptos() as $concepto){
  2714.                     $otrosConceptos+=round($concepto->getImporte(),2);
  2715.                 }
  2716.                 $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  2717.                 $importeIva=round($factura->getIva()*$importeTotal/100,2);
  2718.                 $totalFactura=round($importeTotal+$importeIva,2);
  2719.                 if( $totalFactura!==$factura->getTotalFactura() ){
  2720.                     $factura->setTotalFactura($totalFactura);
  2721.                     $entityManager->flush();
  2722.                 }
  2723.                 //throw $this->createNotFoundException('No se ha encontrado la factura');
  2724.             }
  2725.             //Grafica
  2726.             $indiceFactura=array_search($factura$facturas);
  2727.             $arrayP=[false,false,false,false,false,false];
  2728.             if($indiceFactura<12){
  2729.                 for($i=0;$i<=$indiceFactura && $i<12;$i++){
  2730.                     $consumoMedio+=$facturas[$i]->getTotalFactura();
  2731.                     $consumoAcumulado+=$facturas[$i]->getConsumo();
  2732.                     $tarifaI=$facturas[$i]->getTarifa();
  2733.                     $arrayPI=[
  2734.                         $tarifaI->getEnergiaP1(),
  2735.                         $tarifaI->getEnergiaP2(),
  2736.                         $tarifaI->getEnergiaP3(),
  2737.                         $tarifaI->getEnergiaP4(),
  2738.                         $tarifaI->getEnergiaP5(),
  2739.                         $tarifaI->getEnergiaP6()
  2740.                     ];
  2741.                     if(!$arrayP[0])
  2742.                         $arrayP[0]=$arrayPI[0];
  2743.                     if(!$arrayP[1])
  2744.                         $arrayP[1]=$arrayPI[1];
  2745.                     if(!$arrayP[2])
  2746.                         $arrayP[2]=$arrayPI[2];
  2747.                     if(!$arrayP[3])
  2748.                         $arrayP[3]=$arrayPI[3];
  2749.                     if(!$arrayP[4])
  2750.                         $arrayP[4]=$arrayPI[4];
  2751.                     if(!$arrayP[5])
  2752.                         $arrayP[5]=$arrayPI[5];
  2753.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  2754.                         $datosGrafica[]=[
  2755.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  2756.                             $facturas[$i]->getConsumoP1(),
  2757.                             0,
  2758.                             0
  2759.                         ];
  2760.                         if ( 1>($numeroP??0) ){
  2761.                             $numeroP=1;
  2762.                         }
  2763.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  2764.                         $datosGrafica[]=[
  2765.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  2766.                             $facturas[$i]->getConsumoP1(),
  2767.                             0,
  2768.                             $facturas[$i]->getConsumoP3()
  2769.                         ];
  2770.                         if ( 2>($numeroP??0) ){
  2771.                             $numeroP=2;
  2772.                         }
  2773.                     }else*/
  2774.                     switch( $tarifaI->getNombre() ){
  2775.                         case '3.0A': case '3.1A':
  2776.                         $datosGrafica[]=[
  2777.                             str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  2778.                             $facturas[$i]->getConsumoP1()+$facturas[$i]->getConsumoP4(),
  2779.                             $facturas[$i]->getConsumoP2()+$facturas[$i]->getConsumoP5(),
  2780.                             $facturas[$i]->getConsumoP3()+$facturas[$i]->getConsumoP6(),
  2781.                             0,
  2782.                             0,
  2783.                             0
  2784.                         ];
  2785.                         break;
  2786.                         default:
  2787.                             $datosGrafica[]=[
  2788.                                 str_replace('.','',strtolowerstrftime('%h-%y',$facturas[$i]->getFechaLectura()->getTimestamp()) )),
  2789.                                 $facturas[$i]->getConsumoP1()??0,
  2790.                                 $facturas[$i]->getConsumoP2()??0,
  2791.                                 $facturas[$i]->getConsumoP3()??0,
  2792.                                 $facturas[$i]->getConsumoP4()??0,
  2793.                                 $facturas[$i]->getConsumoP5()??0,
  2794.                                 $facturas[$i]->getConsumoP6()??0,
  2795.                             ];
  2796.                             break;
  2797.                     }
  2798.                 }
  2799.                 $consumoMedio=$consumoMedio/($indiceFactura+1);
  2800.                 $numeroP=countarray_filter($arrayP) );
  2801.             }
  2802.             else{
  2803.                 for($i=11;$i>=0;$i--){
  2804.                     $n=$indiceFactura-$i;
  2805.                     $consumoMedio+=$facturas[$n]->getTotalFactura();
  2806.                     $consumoAcumulado+=$facturas[$n]->getConsumo();
  2807.                     $tarifaI=$facturas[$n]->getTarifa();
  2808.                     $arrayPI=[
  2809.                         $tarifaI->getEnergiaP1(),
  2810.                         $tarifaI->getEnergiaP2(),
  2811.                         $tarifaI->getEnergiaP3(),
  2812.                         $tarifaI->getEnergiaP4(),
  2813.                         $tarifaI->getEnergiaP5(),
  2814.                         $tarifaI->getEnergiaP6()
  2815.                     ];
  2816.                     if(!$arrayP[0])
  2817.                         $arrayP[0]=$arrayPI[0];
  2818.                     if(!$arrayP[1])
  2819.                         $arrayP[1]=$arrayPI[1];
  2820.                     if(!$arrayP[2])
  2821.                         $arrayP[2]=$arrayPI[2];
  2822.                     if(!$arrayP[3])
  2823.                         $arrayP[3]=$arrayPI[3];
  2824.                     if(!$arrayP[4])
  2825.                         $arrayP[4]=$arrayPI[4];
  2826.                     if(!$arrayP[5])
  2827.                         $arrayP[5]=$arrayPI[5];
  2828.                     /*if ( $tarifaI=='2.0A' || $tarifaI=='2.1A' ){
  2829.                         $datosGrafica[]=[
  2830.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  2831.                             $facturas[$n]->getConsumoP1(),
  2832.                             0,
  2833.                             0
  2834.                         ];
  2835.                         if ( 1>($numeroP??0) ){
  2836.                             $numeroP=1;
  2837.                         }
  2838.                     }elseif ( $tarifaI=='2.0DHA' || $tarifaI=='2.1DHA' ){
  2839.                         $datosGrafica[]=[
  2840.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  2841.                             $facturas[$n]->getConsumoP1(),
  2842.                             0,
  2843.                             $facturas[$n]->getConsumoP3()
  2844.                         ];
  2845.                         if ( 2>($numeroP??0) ){
  2846.                             $numeroP=2;
  2847.                         }
  2848.                     }elseif( $tarifaI=='3.0A' || $tarifaI=='3.1A' ){
  2849.                         $datosGrafica[]=[
  2850.                             str_replace('.','',strtolower( strftime('%h-%y',$facturas[$n]->getFechaLectura()->getTimestamp()) )),
  2851.                             $facturas[$n]->getConsumoP1()+$facturas[$n]->getConsumoP4(),
  2852.                             $facturas[$n]->getConsumoP2()+$facturas[$n]->getConsumoP5(),
  2853.                             $facturas[$n]->getConsumoP3()+$facturas[$n]->getConsumoP6(),
  2854.                         ];
  2855.                     }*/
  2856.                 }
  2857.                 $consumoMedio=$consumoMedio/12;;
  2858.                 $numeroP=countarray_filter($arrayP) );
  2859.             }
  2860.             $params=[
  2861.                 'factura' => $factura,
  2862.                 'entidad'=>$entidad,
  2863.                 'consumoMedio'=>$consumoMedio,
  2864.                 'consumoAcumulado'=>$consumoAcumulado,
  2865.                 'periodoFacturacion'=>$periodoFacturacion,
  2866.                 'potenciaP1Facturada'=>$potenciaP1Facturada??null,
  2867.                 'potenciaP2Facturada'=>$potenciaP2Facturada??null,
  2868.                 'potenciaP3Facturada'=>$potenciaP3Facturada??null,
  2869.                 'potenciaP4Facturada'=>$potenciaP4Facturada??null,
  2870.                 'potenciaP5Facturada'=>$potenciaP5Facturada??null,
  2871.                 'potenciaP6Facturada'=>$potenciaP6Facturada??null,
  2872.                 'totalPotenciaP1'=>$totalPotenciaP1,
  2873.                 'totalPotenciaP2'=>$totalPotenciaP2??null,
  2874.                 'totalPotenciaP3'=>$totalPotenciaP3??null,
  2875.                 'totalPotenciaP4'=>$totalPotenciaP4??null,
  2876.                 'totalPotenciaP5'=>$totalPotenciaP5??null,
  2877.                 'totalPotenciaP6'=>$totalPotenciaP6??null,
  2878.                 'totalPotencia'=>$totalPotencia,
  2879.                 'totalEnergiaP1'=>$totalEnergiaP1,
  2880.                 'totalEnergiaP2'=>$totalEnergiaP2??null,
  2881.                 'totalEnergiaP3'=>$totalEnergiaP3??null,
  2882.                 'totalEnergiaP4'=>$totalEnergiaP4??null,
  2883.                 'totalEnergiaP5'=>$totalEnergiaP5??null,
  2884.                 'totalEnergiaP6'=>$totalEnergiaP6??null,
  2885.                 'totalEnergia'=>$totalEnergia,
  2886.                 'reactivaP1'=>$reactivaP1??null,
  2887.                 'reactivaP2'=>$reactivaP2??null,
  2888.                 'reactivaP3'=>$reactivaP3??null,
  2889.                 'reactivaP4'=>$reactivaP4??null,
  2890.                 'reactivaP5'=>$reactivaP5??null,
  2891.                 'reactivaP6'=>$reactivaP6??null,
  2892.                 'excesoReactivaP1'=>$excesoReactivaP1??null,
  2893.                 'excesoReactivaP2'=>$excesoReactivaP2??null,
  2894.                 'excesoReactivaP3'=>$excesoReactivaP3??null,
  2895.                 'excesoReactivaP4'=>$excesoReactivaP4??null,
  2896.                 'excesoReactivaP5'=>$excesoReactivaP5??null,
  2897.                 'excesoReactivaP6'=>$excesoReactivaP6??null,
  2898.                 'importeReactivaP1'=>$importeReactivaP1??null,
  2899.                 'importeReactivaP2'=>$importeReactivaP2??null,
  2900.                 'importeReactivaP3'=>$importeReactivaP3??null,
  2901.                 'importeReactivaP4'=>$importeReactivaP4??null,
  2902.                 'importeReactivaP5'=>$importeReactivaP5??null,
  2903.                 'importeReactivaP6'=>$importeReactivaP6??null,
  2904.                 'totalReactiva'=>$totalReactiva??null,
  2905.                 'subtotal'=>$subtotal,
  2906.                 'importeImpuesto'=>$importeImpuesto,
  2907.                 'importeAlquiler'=>$importeAlquiler,
  2908.                 'otrosConceptos'=>$otrosConceptos??0,
  2909.                 'importeTotal'=>$importeTotal,
  2910.                 'importeIva'=>$importeIva,
  2911.                 'totalFactura'=>$totalFactura,
  2912.                 'consumoP1Facturado'=>$consumoP1Facturado??null,
  2913.                 'consumoP2Facturado'=>$consumoP2Facturado??null,
  2914.                 'consumoP3Facturado'=>$consumoP3Facturado??null,
  2915.                 'consumoP4Facturado'=>$consumoP4Facturado??null,
  2916.                 'consumoP5Facturado'=>$consumoP5Facturado??null,
  2917.                 'consumoP6Facturado'=>$consumoP6Facturado??null,
  2918.                 'arrayP'=>$arrayP??[true,false,false,false,false,false],
  2919.                 'numeroP'=>$numeroP??1,
  2920.                 'urlImagen'=>$urlImagen
  2921.             ];
  2922.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  2923.                 case 'finkaluz':
  2924.                     $html=$this->renderView('factura/finkaluz.factura.pdf.twig'$params);
  2925.                     break;
  2926.                 case 'emfra':
  2927.                     $html=$this->renderView('factura/emfra.factura.pdf.twig'$params);
  2928.                     break;
  2929.                 case 'onda':
  2930.                     $html=$this->renderView('factura/onda.factura.pdf.twig'$params);
  2931.                     break;
  2932.                 case 'digitel':
  2933.                     $html=$this->renderView('factura/digitel.factura.pdf.twig'$params);
  2934.                     break;
  2935.                 case 'apolo':
  2936.                     $html=$this->renderView('factura/apolo.factura.pdf.twig'$params);
  2937.                     break;
  2938.                 case 'e3':
  2939.                     $html=$this->renderView('factura/e3/factura.pdf.twig'$params);
  2940.                     break;
  2941.                 case 'telkes':
  2942.                     $html=$this->renderView('factura/telkes/factura.pdf.twig'$params);
  2943.                     break;
  2944.                 case 'paladio':
  2945.                     $html=$this->renderView('factura/paladio/factura.pdf.twig'$params);
  2946.                     break;
  2947.                 case 'arsen':
  2948.                     $html=$this->renderView('factura/arsen/factura.pdf.twig'$params);
  2949.                     break;
  2950.                 default:
  2951.                     $html=$this->renderView('factura/factura.pdf.twig'$params);
  2952.                     break;
  2953.             }
  2954.         }
  2955.         else {
  2956.             $subject 'FACTURA GAS';
  2957.             $tipo='gas';
  2958.             $periodoFacturacion date_diff($factura->getFechaLecturaAnterior(), $factura->getFechaLectura())->days;
  2959.             $totalPotenciaP1 round($factura->getPrecioPotenciaP1() * $periodoFacturacion2);
  2960.             $totalPotencia $totalPotenciaP1;
  2961.             $totalEnergiaP1 round($factura->getConsumoConvertidoP1() * $factura->getPrecioEnergiaP1(), 2);
  2962.             $totalEnergia $totalEnergiaP1;
  2963.             $subtotal round($totalEnergia $totalPotencia2);
  2964.             $importeImpuesto round($factura->getImpuesto() * $factura->getConsumoConvertidoP1(), 2);
  2965.             $importeAlquiler round($periodoFacturacion $factura->getAlquilerEquipos(), 2);
  2966.             $otrosConceptos=0;
  2967.             foreach ($factura->getConceptos() as $concepto){
  2968.                 $otrosConceptos+=round($concepto->getImporte(),2);
  2969.             }
  2970.             $importeTotal=round($subtotal+$importeAlquiler+$importeImpuesto+$otrosConceptos,2);
  2971.             $importeIva round($factura->getIva() * $importeTotal 1002);
  2972.             $totalFactura round($importeTotal $importeIva2);
  2973.             if ($totalFactura !== $factura->getTotalFactura()) {
  2974.                 $factura->setTotalFactura($totalFactura);
  2975.                 $entityManager->flush();
  2976.             }
  2977.             //Grafica
  2978.             if ($factura === $facturas[0]) {
  2979.                 $consumoMedio $factura->getTotalFactura();
  2980.                 $consumoAcumulado $factura->getConsumoConvertidoP1();
  2981.             } else {
  2982.                 $indiceFactura array_search($factura$facturas);
  2983.                 if ($indiceFactura 12) {
  2984.                     for ($i 0$i <= $indiceFactura && $i 12$i++) {
  2985.                         $consumoMedio += $facturas[$i]->getTotalFactura();
  2986.                         $consumoAcumulado += $facturas[$i]->getConsumoConvertidoP1();
  2987.                     }
  2988.                     $consumoMedio $consumoMedio / ($indiceFactura 1);
  2989.                 } else {
  2990.                     for ($i 11$i >= 0$i--) {
  2991.                         $n $indiceFactura $i;
  2992.                         $consumoMedio += $facturas[$n]->getTotalFactura();
  2993.                         $consumoAcumulado += $facturas[$n]->getConsumoConvertidoP1();
  2994.                     }
  2995.                     $consumoMedio $consumoMedio 12;
  2996.                 }
  2997.             }
  2998.             $params=[
  2999.                 'factura' => $factura,
  3000.                 'entidad' => $entidad,
  3001.                 'consumoMedio' => $consumoMedio,
  3002.                 'consumoAcumulado' => $consumoAcumulado,
  3003.                 'periodoFacturacion' => $periodoFacturacion,
  3004.                 'totalPotenciaP1' => $totalPotenciaP1,
  3005.                 'totalPotencia' => $totalPotencia,
  3006.                 'totalEnergiaP1' => $totalEnergiaP1,
  3007.                 'totalEnergia' => $totalEnergia,
  3008.                 'subtotal' => $subtotal,
  3009.                 'importeImpuesto' => $importeImpuesto,
  3010.                 'importeAlquiler' => $importeAlquiler,
  3011.                 'otrosConceptos'=>$otrosConceptos,
  3012.                 'importeTotal' => $importeTotal,
  3013.                 'importeIva' => $importeIva,
  3014.                 'totalFactura' => $totalFactura,
  3015.                 'urlImagen' => $urlImagen
  3016.             ];
  3017.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  3018.                 case 'finkaluz':
  3019.                     $html=$this->renderView('factura/finkaluz.factura.pdf.twig'$params);
  3020.                     break;
  3021.                 case 'emfra':
  3022.                     $html=$this->renderView('factura/emfra.factura.pdf.twig'$params);
  3023.                     break;
  3024.                 case 'onda':
  3025.                     $html=$this->renderView('factura/onda.factura.pdf.twig'$params);
  3026.                     break;
  3027.                 case 'digitel':
  3028.                     $html=$this->renderView('factura/digitel.factura.pdf.twig'$params);
  3029.                     break;
  3030.                 case 'apolo':
  3031.                     $html=$this->renderView('factura/apolo.factura.pdf.twig'$params);
  3032.                     break;
  3033.                 case 'e3':
  3034.                     $html=$this->renderView('factura/e3/factura.pdf.twig'$params);
  3035.                     break;
  3036.                 case 'telkes':
  3037.                     $html=$this->renderView('factura/telkes/factura.pdf.twig'$params);
  3038.                     break;
  3039.                 case 'paladio':
  3040.                     $html=$this->renderView('factura/paladio/factura.pdf.twig'$params);
  3041.                     break;
  3042.                 case 'arsen':
  3043.                     $html=$this->renderView('factura/arsen/factura.pdf.twig'$params);
  3044.                     break;
  3045.                 default:
  3046.                     $html=$this->renderView('factura/factura.pdf.twig'$params);
  3047.                     break;
  3048.             }
  3049.         }
  3050.         try {
  3051.             unlink(__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
  3052.         } catch (\Exception $exception) {
  3053.         }
  3054.         $pdf->generateFromHtml(
  3055.             $html,
  3056.             __DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf'
  3057.         );
  3058.         try {
  3059.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  3060.                 case 'finkaluz':
  3061.                     $body=$this->renderView('email/finkaluz.factura.html.twig',['tipo'=>$tipo]);
  3062.                     $from='finkaluz@finkaluz.com';
  3063.                     break;
  3064.                 case 'emfra':
  3065.                     $body=$this->renderView('email/emfra.factura.html.twig',['tipo'=>$tipo]);
  3066.                     $from='finkaluz@finkaluz.com';
  3067.                     break;
  3068.                 case 'onda':
  3069.                     $body=$this->renderView('email/onda.factura.html.twig',['tipo'=>$tipo]);
  3070.                     $from='facturacion@ondaenergia.es';
  3071.                     break;
  3072.                 case 'digitel':
  3073.                     $body=$this->renderView('email/digitel.factura.html.twig',['tipo'=>$tipo'email'=>$factura->getContrato()->getCliente()->getEmail()]);
  3074.                     $from='facturacionluz@itdigitel.es';
  3075.                     break;
  3076.                 case 'apolo':
  3077.                     $body=$this->renderView('email/apolo.factura.html.twig',['tipo'=>$tipo,'factura'=>$factura]);
  3078.                     $from='clientes@vibraenergies.es';
  3079.                     break;
  3080.                 case 'e3':
  3081.                     $body=$this->renderView('email/e3/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
  3082.                     $from='e3powerenergy@e3powerenergy.com';
  3083.                     break;
  3084.                 case 'telkes':
  3085.                     $body=$this->renderView('email/telkes/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
  3086.                     $from='info@telkesenergia.es';
  3087.                     break;
  3088.                 case 'paladio':
  3089.                     $body=$this->renderView('email/paladio/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
  3090.                     $from='clientes@paladiopartners.es';
  3091.                     break;
  3092.                 case 'arsen':
  3093.                     $body=$this->renderView('email/arsen/factura.html.twig',['tipo'=>$tipo,'cliente'=>$factura->getContrato()->getCliente()]);
  3094.                     $from='arsenenergia@arsenenergia.com';
  3095.                     break;
  3096.                 default:
  3097.                     $body=$this->renderView('email/factura.html.twig',['tipo'=>$tipo]);
  3098.                     $from='energaze@energaze.com';
  3099.                     break;
  3100.             }
  3101.             $message = (new Email())
  3102.                 ->subject($subject)
  3103.                 ->from($from)
  3104.                 ->to($factura->getContrato()->getCliente()->getEmail())
  3105.                 ->html($body)
  3106.                 ->attachFromPath(__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
  3107.             /*try{
  3108.                 unlink(__DIR__.'/../../temp/'.(str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_número').'.pdf');
  3109.             }catch (\Exception $exception){}*/
  3110.             $mailer->send($message);
  3111.             $status='success';
  3112.         }catch (\Exception $exception){
  3113.             $status='error';
  3114.             $logger->info($exception->getMessage());
  3115.         }
  3116.         return $this->redirectToRoute('factura_show',['id'=>$factura->getId(), 'status'=>$status]);
  3117.     }
  3118.     /**
  3119.      * @Route("factura/{id}/pagar", name="factura_pagar", methods={"GET","POST"})
  3120.      */
  3121.     public function pagar(Factura $facturaMailerInterface $mailerEntityManagerInterface $entityManager): Response
  3122.     {
  3123.         if( $factura->getContrato()->getCliente()->getUser()!=$this->getUser() ){
  3124.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3125.         }
  3126.         $env=$_SERVER['APP_ENV']??'finkaluz';
  3127.         $error=false;
  3128.         $version="";
  3129.         $params="";
  3130.         $signature="";
  3131.         $logger = new Logger('my_logger');
  3132.         $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log'Logger::DEBUG));
  3133.         if($factura->getDevuelta()) {
  3134.             //$logger->info('Detectado !pagado. Inicia comprobación.');
  3135.             $api = new RedsysAPI;
  3136.             if (!empty($_POST)) {
  3137.                 //URL DE RESP. ONLINE
  3138.                 //$logger->info('Detectado POST. Inicia comprobación.');
  3139.                 $version $_POST["Ds_SignatureVersion"];
  3140.                 $datos $_POST["Ds_MerchantParameters"];
  3141.                 $signatureRecibida $_POST["Ds_Signature"];
  3142.                 $decodec $api->decodeMerchantParameters($datos);
  3143.                 switch ($env){
  3144.                     case 'finkaluz':case 'emfra':
  3145.                     $kc 'Kh6cHWPsap169mNSJCUNi2vpxT1DnnAd';
  3146.                     break;
  3147.                     default:
  3148.                         $kc 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';
  3149.                         break;
  3150.                 }
  3151.                 $firma $api->createMerchantSignatureNotif($kc$datos);
  3152.                 $logger->info(gettype($decodec));
  3153.                 $logger->info($decodec["Ds_Response"]);
  3154.                 $decodec2=json_decode($decodectrue);
  3155.                 $logger->info(gettype($decodec2));
  3156.                 $logger->info($decodec2["Ds_Response"]);
  3157.                 if ($firma === $signatureRecibida) {
  3158.                     if (intval($decodec['Ds_Response'])<100){
  3159.                         $pagado true;
  3160.                         $logger->info('Marcando $pagado=true');
  3161.                     }else{
  3162.                         $error=true;
  3163.                     }
  3164.                     echo'FIRMA OK';
  3165.                 } else {
  3166.                     $pagado false;
  3167.                     //$logger->info('Firma POST denegada.');
  3168.                     echo'FIRMA KO';
  3169.                 }
  3170.             }
  3171.             elseif (!empty($_GET)) {//URL DE RESP. ONLINE
  3172.                 //$logger->info('Detectado GET. Inicia comprobación.');
  3173.                 $version $_GET["Ds_SignatureVersion"];
  3174.                 $datos $_GET["Ds_MerchantParameters"];
  3175.                 $signatureRecibida $_GET["Ds_Signature"];
  3176.                 $decodec json_decode($api->decodeMerchantParameters($datos), true);
  3177.                 switch ($env){
  3178.                     case 'finkaluz':case 'emfra':
  3179.                     $kc 'Kh6cHWPsap169mNSJCUNi2vpxT1DnnAd';
  3180.                     break;
  3181.                     default:
  3182.                         $kc 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';
  3183.                         break;
  3184.                 }
  3185.                 $firma $api->createMerchantSignatureNotif($kc$datos);
  3186.                 $logger->info(gettype($decodec));
  3187.                 $logger->info($decodec["Ds_Response"]);
  3188.                 $decodec2=json_decode($decodectrue);
  3189.                 $logger->info(gettype($decodec2));
  3190.                 $logger->info($decodec2["Ds_Response"]);
  3191.                 if ($firma === $signatureRecibida) {
  3192.                     if (intval($decodec['Ds_Response'])<100){
  3193.                         $pagado true;
  3194.                         $logger->info('Marcando $pagado=true');
  3195.                     }else{
  3196.                         $error=true;
  3197.                     }
  3198.                     echo'FIRMA OK';
  3199.                 } else {
  3200.                     $pagado false;
  3201.                     //$logger->info('Firma GET denegada.');
  3202.                     echo'FIRMA KO';
  3203.                 }
  3204.             }
  3205.             else{
  3206.                 $api=new RedsysAPI();
  3207.                 $logger = new Logger('my_logger');
  3208.                 $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log'Logger::DEBUG));
  3209.                 switch ($env){
  3210.                     case 'finkaluz':case 'emfra':
  3211.                     $fuc="355719071";
  3212.                     break;
  3213.                     default:
  3214.                         $fuc="351398243";
  3215.                         break;
  3216.                 }
  3217.                 $terminal="1";
  3218.                 $moneda="978";
  3219.                 $trans="0";
  3220.                 $url=$this->generateUrl('factura_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  3221.                 $urlOKKO=$this->generateUrl('factura_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  3222.                 $id=time();
  3223.                 $amount=str_replace('.','',$factura->getTotalFactura());;
  3224.                 // Se Rellenan los campos
  3225.                 $api->setParameter("DS_MERCHANT_AMOUNT",$amount);
  3226.                 $api->setParameter("DS_MERCHANT_ORDER",$id);
  3227.                 $api->setParameter("DS_MERCHANT_MERCHANTCODE",$fuc);
  3228.                 $api->setParameter("DS_MERCHANT_CURRENCY",$moneda);
  3229.                 $api->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$trans);
  3230.                 $api->setParameter("DS_MERCHANT_TERMINAL",$terminal);
  3231.                 $api->setParameter("DS_MERCHANT_MERCHANTURL",$url);
  3232.                 $api->setParameter("DS_MERCHANT_URLOK",$urlOKKO);
  3233.                 $api->setParameter("DS_MERCHANT_URLKO",$urlOKKO);
  3234.                 //Datos de configuración
  3235.                 $version="HMAC_SHA256_V1";
  3236.                 switch ($env){
  3237.                     case 'finkaluz':case 'emfra':
  3238.                     $kc 'Kh6cHWPsap169mNSJCUNi2vpxT1DnnAd';
  3239.                     break;
  3240.                     default:
  3241.                         $kc 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';
  3242.                         break;
  3243.                 }
  3244.                 // Se generan los parámetros de la petición
  3245.                 $request "";
  3246.                 $params $api->createMerchantParameters();
  3247.                 $signature $api->createMerchantSignature($kc);
  3248.             }
  3249.             if ($pagado??null === true) {
  3250.                 $logger->info('Marcando como pagado.');
  3251.                 $factura->setDevuelta(false);
  3252.                 $entityManager->persist($factura);
  3253.                 $entityManager->flush();
  3254.                 //Notificación email
  3255.                 try {
  3256.                     switch ($env){
  3257.                         case 'finkaluz':
  3258.                             $body=$this->renderView('email/finkaluz.facturaPagada.html.twig',['factura'=>$factura]);
  3259.                             $from='finkaluz@finkaluz.com';
  3260.                             break;
  3261.                         case 'emfra':
  3262.                             $body=$this->renderView('email/emfra.facturaPagada.html.twig',['factura'=>$factura]);
  3263.                             $from='finkaluz@finkaluz.com';
  3264.                             break;
  3265.                         case 'apolo':
  3266.                             $body=$this->renderView('email/apolo.facturaPagada.html.twig',['factura'=>$factura]);
  3267.                             $from='clientes@vibraenergies.es';
  3268.                             break;
  3269.                         default:
  3270.                             $body=$this->renderView('email/facturaPagada.html.twig',['factura'=>$factura]);
  3271.                             $from='energaze@energaze.com';
  3272.                             break;
  3273.                     }
  3274.                     $message = (new Email())
  3275.                         ->subject('FACTURA PAGADA')
  3276.                         ->from($from)
  3277.                         ->to($factura->getContrato()->getCliente()->getEmail())
  3278.                         ->html($body);
  3279.                     $mailer->send($message);
  3280.                 }catch (\Exception $exception){
  3281.                     $logger->info($exception->getMessage());
  3282.                 }
  3283.             }elseif ($pagado??null === false){
  3284.                 $error=true;
  3285.             }
  3286.         }
  3287.         switch ($env){
  3288.             case 'finkaluz':
  3289.                 $template='factura/finkaluz.pagar.html.twig';
  3290.                 break;
  3291.             case 'emfra':
  3292.                 $template='factura/emfra.pagar.html.twig';
  3293.                 break;
  3294.             case 'apolo':
  3295.                 $template='factura/apolo.pagar.html.twig';
  3296.                 break;
  3297.             default:
  3298.                 $template='factura/pagar.html.twig';
  3299.                 break;
  3300.         }
  3301.         return $this->render($template, [
  3302.             'factura' => $factura,
  3303.             'error' => $error,
  3304.             'version' => $version,
  3305.             'params' => $params,
  3306.             'signature' => $signature,
  3307.         ]);
  3308.     }
  3309.     /**
  3310.      * @Route("factura/{id}/edit", name="factura_edit", methods={"GET","POST"})
  3311.      */
  3312.     public function edit(Request $requestFactura $facturaEntityManagerInterface $entityManager): Response
  3313.     {
  3314.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3315.         $form $this->createForm(FacturaType::class, $factura);
  3316.         $form->handleRequest($request);
  3317.         if ($form->isSubmitted() && $form->isValid()) {
  3318.             $factura->calcularTotal();
  3319.             $entityManager->flush();
  3320.             return $this->redirectToRoute('factura_show', ['id'=>$factura->getId()]);
  3321.         }
  3322.         return $this->render('factura/edit.html.twig', [
  3323.             'factura' => $factura,
  3324.             'form' => $form->createView(),
  3325.         ]);
  3326.     }
  3327.     /*    /**
  3328.          * @Route("factura/{id}", name="factura_delete", methods={"DELETE"})
  3329.          *
  3330.         public function delete(Request $request, Factura $factura): Response
  3331.         {
  3332.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3333.             if ($this->isCsrfTokenValid('delete'.$factura->getId(), $request->request->get('_token'))) {
  3334.                 $contrato=$factura->getContrato();
  3335.                 $entityManager = $this->getDoctrine()->getManager();
  3336.                 $entityManager->remove($factura);
  3337.                 $entityManager->flush();
  3338.             }
  3339.             return $this->redirectToRoute('contrato_show',['id'=>$contrato->getId()]);
  3340.         }*/
  3341.     /**
  3342.      * @Route("factura/{id}", name="factura_delete", methods={"POST"})
  3343.      */
  3344.     public function delete(Request $requestFactura $facturaFacturaRepository $facturaRepository): Response
  3345.     {
  3346.         if ($this->isCsrfTokenValid('delete'.$factura->getId(), $request->request->get('_token'))) {
  3347.             $contrato=$factura->getContrato();
  3348.             $facturaRepository->remove($facturatrue);
  3349.         }
  3350.         return $this->redirectToRoute('contrato_show',['id'=>$contrato->getId()], Response::HTTP_SEE_OTHER);
  3351.     }
  3352.     /**
  3353.      * @Route("factura/otros/{id}", name="facturaGenerica_show", methods={"GET"})
  3354.      */
  3355.     public function showGenerica(FacturaGenerica $facturaBancoRepository $bancoRepositoryEntityManagerInterface $entityManager): Response
  3356.     {
  3357.         if(
  3358.             $factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
  3359.             ($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
  3360.         ){
  3361.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3362.         }
  3363.         $entidad=$bancoRepository->findByCuenta($factura->getCcc());
  3364.         $importeTotal=0;
  3365.         foreach ($factura->getConceptos() as $concepto){
  3366.             $importeTotal+=$concepto->getImporte();
  3367.         }
  3368.         $importeIva=round($factura->getIva()*$importeTotal/100,2);
  3369.         $totalFactura=round($importeTotal+$importeIva,2);
  3370.         if( $totalFactura!==$factura->getTotalFactura() ){
  3371.             $factura->setTotalFactura($totalFactura);
  3372.             $entityManager->flush();
  3373.         }
  3374.         $params=[
  3375.             'factura' => $factura,
  3376.             'entidad'=>$entidad,
  3377.             'importeTotal'=>$importeTotal,
  3378.             'importeIva'=>$importeIva,
  3379.             'totalFactura'=>$totalFactura,
  3380.         ];
  3381.         switch ($_SERVER['APP_ENV']??'finkaluz'){
  3382.             case 'finkaluz':
  3383.                 return $this->render('factura_generica/finkaluz.factura.html.twig'$params);
  3384.             case 'emfra':
  3385.                 return $this->render('factura_generica/emfra.factura.html.twig'$params);
  3386.             case 'onda':
  3387.                 return $this->render('factura_generica/onda.factura.html.twig'$params);
  3388.             case 'digitel':
  3389.                 return $this->render('factura_generica/digitel.factura.html.twig'$params);
  3390.             case 'apolo':
  3391.                 return $this->render('factura_generica/apolo.factura.html.twig'$params);
  3392.             case 'e3':
  3393.                 return $this->render('factura_generica/e3/factura.html.twig'$params);
  3394.             case 'telkes':
  3395.                 return $this->render('factura_generica/telkes/factura.html.twig'$params);
  3396.             case 'paladio':
  3397.                 return $this->render('factura_generica/paladio/factura.html.twig'$params);
  3398.             case 'arsen':
  3399.                 return $this->render('factura_generica/arsen/factura.html.twig'$params);
  3400.             default:
  3401.                 return $this->render('factura_generica/factura.html.twig'$params);
  3402.         }
  3403.     }
  3404.     /**
  3405.      * @Route("factura/otros/{id}/pdf", name="facturaGenerica_pdf", methods={"GET", "POST"})
  3406.      */
  3407.     public function pdfGenerica(FacturaGenerica $facturaPdf $pdfBancoRepository $bancoRepositoryEntityManagerInterface $entityManager): Response
  3408.     {
  3409.         if(
  3410.             $factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
  3411.             ($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
  3412.         ){
  3413.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3414.         }
  3415.         $entidad=$bancoRepository->findByCuenta($factura->getCcc());
  3416.         $importeTotal=0;
  3417.         foreach ($factura->getConceptos() as $concepto){
  3418.             $importeTotal+=$concepto->getImporte();
  3419.         }
  3420.         $importeIva=round($factura->getIva()*$importeTotal/100,2);
  3421.         $totalFactura=round($importeTotal+$importeIva,2);
  3422.         if( $totalFactura!==$factura->getTotalFactura() ){
  3423.             $factura->setTotalFactura($totalFactura);
  3424.             $entityManager->flush();
  3425.         }
  3426.         $params=[
  3427.             'factura' => $factura,
  3428.             'entidad'=>$entidad,
  3429.             'importeTotal'=>$importeTotal,
  3430.             'importeIva'=>$importeIva,
  3431.             'totalFactura'=>$totalFactura,
  3432.         ];
  3433.         switch ($_SERVER['APP_ENV']??'finkaluz'){
  3434.             case 'finkaluz':
  3435.                 $html=$this->renderView('factura_generica/finkaluz.factura.pdf.twig'$params);
  3436.                 break;
  3437.             case 'emfra':
  3438.                 $html=$this->renderView('factura_generica/emfra.factura.pdf.twig'$params);
  3439.                 break;
  3440.             case 'onda':
  3441.                 $html=$this->renderView('factura_generica/onda.factura.pdf.twig'$params);
  3442.                 break;
  3443.             case 'digitel':
  3444.                 $html=$this->renderView('factura_generica/digitel.factura.pdf.twig'$params);
  3445.                 break;
  3446.             case 'apolo':
  3447.                 $html=$this->renderView('factura_generica/apolo.factura.pdf.twig'$params);
  3448.                 break;
  3449.             case 'e3':
  3450.                 $html=$this->renderView('factura_generica/e3/factura.pdf.twig'$params);
  3451.                 break;
  3452.             case 'telkes':
  3453.                 $html=$this->renderView('factura_generica/telkes/factura.pdf.twig'$params);
  3454.                 break;
  3455.             case 'paladio':
  3456.                 $html=$this->renderView('factura_generica/paladio/factura.pdf.twig'$params);
  3457.                 break;
  3458.             case 'arsen':
  3459.                 $html=$this->renderView('factura_generica/arsen/factura.pdf.twig'$params);
  3460.                 break;
  3461.             default:
  3462.                 $html=$this->renderView('factura_generica/factura.pdf.twig'$params);
  3463.                 break;
  3464.         }
  3465.         return new PdfResponse(
  3466.             $pdf->getOutputFromHtml($html),
  3467.             (str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_numero').'.pdf'
  3468.         );
  3469.     }
  3470.     /**
  3471.      * @Route("factura/otros/{id}/xml", name="facturaGenerica_xml", methods={"GET", "POST"})
  3472.      */
  3473.     public function xmlGenerica(FacturaGenerica $facturaPdf $pdfBancoRepository $bancoRepository,
  3474.                                 Filesystem $filesystemEntityManagerInterface $entityManager): Response
  3475.     {
  3476.         if(
  3477.             $factura->getContrato()->getCliente()->getUser()!=$this->getUser() &&
  3478.             ($factura->getContrato()->getSeller()??new Comercial())->getUser()!=$this->getUser()
  3479.         ){
  3480.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3481.         }
  3482.         $entidad=$bancoRepository->findByCuenta($factura->getCcc());
  3483.         $importeTotal=0;
  3484.         foreach ($factura->getConceptos() as $concepto){
  3485.             $importeTotal+=$concepto->getImporte();
  3486.         }
  3487.         $importeIva=round($factura->getIva()*$importeTotal/100,2);
  3488.         $totalFactura=round($importeTotal+$importeIva,2);
  3489.         if( $totalFactura!==$factura->getTotalFactura() ){
  3490.             $factura->setTotalFactura($totalFactura);
  3491.             $entityManager->flush();
  3492.         }
  3493.         $params=[
  3494.             'factura' => $factura,
  3495.             'entidad'=>$entidad,
  3496.             'importeTotal'=>$importeTotal,
  3497.             'importeIva'=>$importeIva,
  3498.             'totalFactura'=>$totalFactura,
  3499.         ];
  3500.         switch ($_SERVER['APP_ENV']??'finkaluz'){
  3501.             case 'finkaluz':
  3502.                 $html=$this->renderView('factura_generica/finkaluz.factura.pdf.twig'$params);
  3503.                 break;
  3504.             case 'emfra':
  3505.                 $html=$this->renderView('factura_generica/emfra.factura.pdf.twig'$params);
  3506.                 break;
  3507.             case 'onda':
  3508.                 $html=$this->renderView('factura_generica/onda.factura.pdf.twig'$params);
  3509.                 break;
  3510.             case 'digitel':
  3511.                 $html=$this->renderView('factura_generica/digitel.factura.pdf.twig'$params);
  3512.                 break;
  3513.             case 'apolo':
  3514.                 $html=$this->renderView('factura_generica/apolo.factura.pdf.twig'$params);
  3515.                 break;
  3516.             case 'e3':
  3517.                 $html=$this->renderView('factura_generica/e3/factura.pdf.twig'$params);
  3518.                 break;
  3519.             case 'telkes':
  3520.                 $html=$this->renderView('factura_generica/telkes/factura.pdf.twig'$params);
  3521.                 break;
  3522.             case 'paladio':
  3523.                 $html=$this->renderView('factura_generica/paladio/factura.pdf.twig'$params);
  3524.                 break;
  3525.             case 'arsen':
  3526.                 $html=$this->renderView('factura_generica/arsen/factura.pdf.twig'$params);
  3527.                 break;
  3528.             default:
  3529.                 $html=$this->renderView('factura_generica/factura.pdf.twig'$params);
  3530.                 break;
  3531.         }
  3532.         //Attach PDF
  3533.         try {
  3534.             unlink(__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
  3535.         } catch (\Exception $exception) {
  3536.         }
  3537.         $pdfPath=__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf';
  3538.         $pdf->generateFromHtml(
  3539.             $html,
  3540.             $pdfPath
  3541.         );
  3542.         $params['pdf']=base64_encode(file_get_contents($pdfPath));
  3543.         //Detect NIF type
  3544.         $nif=$factura->getNifCliente();
  3545.         $first=ctype_alphasubstr($nif,0,1) );
  3546.         $last=ctype_alphasubstr($nif,strlen($nif)-1,1) );
  3547.         $validador= new Validador();
  3548.         if( $validador->validateCif($nif) ){
  3549.             $params['tipoDocumento']='CIF';
  3550.         }
  3551.         elseif($first && $last)
  3552.             $params['tipoDocumento']='NIE';
  3553.         elseif ($first)
  3554.             $params['tipoDocumento']='CIF';
  3555.         else
  3556.             $params['tipoDocumento']='DNI';
  3557.         switch ($params['tipoDocumento']){
  3558.             case 'NIE':case 'DNI':
  3559.             $cliente=$factura->getContrato()->getCliente();
  3560.             if ( $factura->getNombreCliente()==$cliente->__toString() ){
  3561.                 $params['nombre']['nombre']=$cliente->getNombre();
  3562.                 $params['nombre']['apellido1']=$cliente->getApellido();
  3563.                 $params['nombre']['apellido2']=$cliente->getApellido2();
  3564.             }
  3565.             else{
  3566.                 $nombreArray=explode' '$factura->getNombreCliente() );
  3567.                 $arrayCount=count($nombreArray);
  3568.                 $params['nombre']['nombre']=$nombreArray[0];
  3569.                 if($arrayCount==2){
  3570.                     $params['nombre']['apellido1']=$nombreArray[1];
  3571.                 }elseif ($arrayCount==3){
  3572.                     $params['nombre']['apellido1']=$nombreArray[1];
  3573.                     $params['nombre']['apellido2']=$nombreArray[2];
  3574.                 }elseif ($arrayCount==4){
  3575.                     $params['nombre']['nombre'].=' '.$nombreArray[1];
  3576.                     $params['nombre']['apellido1']=$nombreArray[2];
  3577.                     $params['nombre']['apellido2']=$nombreArray[3];
  3578.                 }else {
  3579.                     $nombreArray explode(' '$factura->getNombreCliente());
  3580.                     $arrayCount count($nombreArray);
  3581.                     if ($arrayCount 1) {
  3582.                         $params['nombre']['apellido1'] = '';
  3583.                         $params['nombre']['apellido2'] = '';
  3584.                         $i=1;
  3585.                         for (; $i $arrayCount$i++) {
  3586.                             $concatenatedString $params['nombre']['apellido1'] . $nombreArray[$i] . ' ';
  3587.                             if (strlen($concatenatedString) <= 40) {
  3588.                                 $params['nombre']['apellido1'] = $concatenatedString;
  3589.                             } else {
  3590.                                 break;
  3591.                             }
  3592.                         }
  3593.                         for (; $i $arrayCount$i++) {
  3594.                             $concatenatedString $params['nombre']['apellido2'] . $nombreArray[$i] . ' ';
  3595.                             if (strlen($concatenatedString) <= 40) {
  3596.                                 $params['nombre']['apellido2'] = $concatenatedString;
  3597.                             } else {
  3598.                                 break;
  3599.                             }
  3600.                         }
  3601.                     }
  3602.                     $params['nombre']['apellido1'] = trim($params['nombre']['apellido1']);
  3603.                     $params['nombre']['apellido2'] = trim($params['nombre']['apellido2']);
  3604.                 }
  3605.             }
  3606.         }
  3607.         switch ($_SERVER['APP_ENV']??'finkaluz'){
  3608.             case 'finkaluz':
  3609.                 $xml=$this->renderView('factura_generica/finkaluz.factura.xml.twig'$params);
  3610.                 break;
  3611.             case 'emfra':
  3612.                 $xml=$this->renderView('factura_generica/emfra.factura.xml.twig'$params);
  3613.                 break;
  3614.             case 'onda':
  3615.                 $xml=$this->renderView('factura_generica/onda.factura.xml.twig'$params);
  3616.                 break;
  3617.             case 'digitel':
  3618.                 $xml=$this->renderView('factura_generica/digitel.factura.xml.twig'$params);
  3619.                 break;
  3620.             case 'apolo':
  3621.                 $xml=$this->renderView('factura_generica/apolo.factura.xml.twig'$params);
  3622.                 break;
  3623.             case 'e3':
  3624.                 $xml=$this->renderView('factura_generica/e3/factura.xml.twig'$params);
  3625.                 break;
  3626.             case 'telkes':
  3627.                 $xml=$this->renderView('factura_generica/telkes/factura.xml.twig'$params);
  3628.                 break;
  3629.             case 'paladio':
  3630.                 $xml=$this->renderView('factura_generica/paladio/factura.xml.twig'$params);
  3631.                 break;
  3632.             case 'arsen':
  3633.                 $xml=$this->renderView('factura_generica/arsen/factura.xml.twig'$params);
  3634.                 break;
  3635.             default:
  3636.                 $xml=$this->renderView('factura_generica/factura.xml.twig'$params);
  3637.                 break;
  3638.         }
  3639.         $path=__DIR__ '/../../temp/';
  3640.         $filename=(str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.xml';
  3641.         $filesystem->dumpFile($path.$filename$xml);
  3642.         $response= new BinaryFileResponse($path.$filename);
  3643.         // Create the disposition of the file
  3644.         $disposition $response->headers->makeDisposition(
  3645.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  3646.             $filename
  3647.         );
  3648.         // Set the content disposition
  3649.         $response->headers->set('Content-Disposition'$disposition);
  3650.         // Dispatch request
  3651.         return $response;
  3652.     }
  3653.     /**
  3654.      * @Route("factura/otros/{id}/enviar", name="facturaGenerica_enviar", methods={"GET", "POST"})
  3655.      */
  3656.     public function enviarGenerica(FacturaGenerica $facturaPdf $pdfBancoRepository $bancoRepository,
  3657.                                    MailerInterface $mailerEntityManagerInterface $entityManager): Response
  3658.     {
  3659.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3660.         $logger = new Logger('factura_logger');
  3661.         $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/email.log'Logger::DEBUG));
  3662.         $entidad $bancoRepository->findByCuenta($factura->getCcc());
  3663.         $tarifa $factura->getTarifa();
  3664.         if ($tarifa->getTipoTarifa() == 'Electricidad') {
  3665.             $subject 'FACTURA ELECTRICIDAD';
  3666.             $tipo='electricidad';
  3667.         }
  3668.         else {
  3669.             $subject 'FACTURA GAS';
  3670.             $tipo='gas';
  3671.         }
  3672.         $importeTotal=0;
  3673.         foreach ($factura->getConceptos() as $concepto){
  3674.             $importeTotal+=$concepto->getImporte();
  3675.         }
  3676.         $importeIva=round($factura->getIva()*$importeTotal/100,2);
  3677.         $totalFactura=round($importeTotal+$importeIva,2);
  3678.         if( $totalFactura!==$factura->getTotalFactura() ) {
  3679.             $factura->setTotalFactura($totalFactura);
  3680.             $entityManager->flush();
  3681.         }
  3682.         $params=[
  3683.             'factura' => $factura,
  3684.             'entidad'=>$entidad,
  3685.             'importeTotal'=>$importeTotal,
  3686.             'importeIva'=>$importeIva,
  3687.             'totalFactura'=>$totalFactura,
  3688.         ];
  3689.         switch ($_SERVER['APP_ENV']??'finkaluz'){
  3690.             case 'finkaluz':
  3691.                 $html=$this->renderView('factura_generica/finkaluz.factura.pdf.twig'$params);
  3692.                 break;
  3693.             case 'emfra':
  3694.                 $html=$this->renderView('factura_generica/emfra.factura.pdf.twig'$params);
  3695.                 break;
  3696.             case 'onda':
  3697.                 $html=$this->renderView('factura_generica/onda.factura.pdf.twig'$params);
  3698.                 break;
  3699.             case 'digitel':
  3700.                 $html=$this->renderView('factura_generica/digitel.factura.pdf.twig'$params);
  3701.                 break;
  3702.             case 'apolo':
  3703.                 $html=$this->renderView('factura_generica/apolo.factura.pdf.twig'$params);
  3704.                 break;
  3705.             case 'e3':
  3706.                 $html=$this->renderView('factura_generica/e3/factura.pdf.twig'$params);
  3707.                 break;
  3708.             case 'telkes':
  3709.                 $html=$this->renderView('factura_generica/telkes/factura.pdf.twig'$params);
  3710.                 break;
  3711.             case 'paladio':
  3712.                 $html=$this->renderView('factura_generica/paladio/factura.pdf.twig'$params);
  3713.                 break;
  3714.             case 'arsen':
  3715.                 $html=$this->renderView('factura_generica/arsen/factura.pdf.twig'$params);
  3716.                 break;
  3717.             default:
  3718.                 $html=$this->renderView('factura_generica/factura.pdf.twig'$params);
  3719.                 break;
  3720.         }
  3721.         try {
  3722.             unlink(__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
  3723.         } catch (\Exception $exception) {
  3724.         }
  3725.         $pdf->generateFromHtml(
  3726.             $html,
  3727.             __DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf'
  3728.         );
  3729.         try {
  3730.             switch ($_SERVER['APP_ENV']??'finkaluz'){
  3731.                 case 'finkaluz':
  3732.                     $body=$this->renderView('email/finkaluz.factura.html.twig',['tipo'=>$tipo]);
  3733.                     $from='finkaluz@finkaluz.com';
  3734.                     break;
  3735.                 case 'emfra':
  3736.                     $body=$this->renderView('email/emfra.factura.html.twig',['tipo'=>$tipo]);
  3737.                     $from='finkaluz@finkaluz.com';
  3738.                     break;
  3739.                 case 'onda':
  3740.                     $body=$this->renderView('email/onda.factura.html.twig',['tipo'=>$tipo]);
  3741.                     $from='facturacion@ondaenergia.es';
  3742.                     break;
  3743.                 case 'digitel':
  3744.                     $body=$this->renderView('email/digitel.factura.html.twig',['tipo'=>$tipo'email'=>$factura->getContrato()->getCliente()->getEmail()]);
  3745.                     $from='energy@itdigitel.es';
  3746.                     break;
  3747.                 case 'apolo':
  3748.                     $body=$this->renderView('email/apolo.factura.html.twig',['tipo'=>$tipo'factura'=>$factura]);
  3749.                     $from='clientes@vibraenergies.es';
  3750.                     break;
  3751.                 case 'e3':
  3752.                     $body=$this->renderView('email/e3/factura.html.twig',['tipo'=>$tipo]);
  3753.                     $from='e3powerenergy@e3powerenergy.com';
  3754.                     break;
  3755.                 case 'telkes':
  3756.                     $body=$this->renderView('email/telkes/factura.html.twig',['tipo'=>$tipo]);
  3757.                     $from='info@telkesenergia.com';
  3758.                     break;
  3759.                 case 'paladio':
  3760.                     $body=$this->renderView('email/paladio/factura.html.twig',['tipo'=>$tipo]);
  3761.                     $from='clientes@paladiopartners.com';
  3762.                     break;
  3763.                 case 'arsen':
  3764.                     $body=$this->renderView('email/arsen/factura.html.twig',['tipo'=>$tipo]);
  3765.                     $from='arsenenergia@arsenenergia.com';
  3766.                     break;
  3767.                 default:
  3768.                     $body=$this->renderView('email/factura.html.twig',['tipo'=>$tipo]);
  3769.                     $from='energaze@energaze.com';
  3770.                     break;
  3771.             }
  3772.             $message = (new Email())
  3773.                 ->subject($subject)
  3774.                 ->from($from)
  3775.                 ->to($factura->getContrato()->getCliente()->getEmail())
  3776.                 ->html($body)
  3777.                 ->attachFromPath(__DIR__ '/../../temp/' . (str_replace('/',"-",$factura->getNumeroFactura()) ?? 'factura_sin_número') . '.pdf');
  3778.             /*try{
  3779.                 unlink(__DIR__.'/../../temp/'.(str_replace('/',"-",$factura->getNumeroFactura())??'factura_sin_número').'.pdf');
  3780.             }catch (\Exception $exception){}*/
  3781.             $mailer->send($message);
  3782.             $status='success';
  3783.         }catch (\Exception $exception){
  3784.             $status='error';
  3785.             $logger->info($exception->getMessage());
  3786.         }
  3787.         return $this->redirectToRoute('facturaGenerica_show',['id'=>$factura->getId(), 'status'=>$status]);
  3788.     }
  3789.     /**
  3790.      * @Route("factura/otros/{id}/pagar", name="facturaGenerica_pagar", methods={"GET","POST"})
  3791.      */
  3792.     public function pagarGenerica(FacturaGenerica $facturaMailerInterface $mailerEntityManagerInterface $entityManager): Response
  3793.     {
  3794.         if( $factura->getContrato()->getCliente()->getUser()!=$this->getUser() ){
  3795.             $this->denyAccessUnlessGranted('ROLE_FACTURACION');
  3796.         }
  3797.         $error=false;
  3798.         $version="";
  3799.         $params="";
  3800.         $signature="";
  3801.         $logger = new Logger('my_logger');
  3802.         $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log'Logger::DEBUG));
  3803.         if($factura->getDevuelta()) {
  3804.             //$logger->info('Detectado !pagado. Inicia comprobación.');
  3805.             $api = new RedsysAPI;
  3806.             if (!empty($_POST)) {//URL DE RESP. ONLINE
  3807.                 //$logger->info('Detectado POST. Inicia comprobación.');
  3808.                 $version $_POST["Ds_SignatureVersion"];
  3809.                 $datos $_POST["Ds_MerchantParameters"];
  3810.                 $signatureRecibida $_POST["Ds_Signature"];
  3811.                 $decodec $api->decodeMerchantParameters($datos);
  3812.                 $kc 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq'//Clave recuperada de CANALES
  3813.                 $firma $api->createMerchantSignatureNotif($kc$datos);
  3814.                 $logger->info(gettype($decodec));
  3815.                 $logger->info($decodec["Ds_Response"]);
  3816.                 $decodec2=json_decode($decodectrue);
  3817.                 $logger->info(gettype($decodec2));
  3818.                 $logger->info($decodec2["Ds_Response"]);
  3819.                 if ($firma === $signatureRecibida) {
  3820.                     if (intval($decodec['Ds_Response'])<100){
  3821.                         $pagado true;
  3822.                         $logger->info('Marcando $pagado=true');
  3823.                     }else{
  3824.                         $error=true;
  3825.                     }
  3826.                     echo'FIRMA OK';
  3827.                 } else {
  3828.                     $pagado false;
  3829.                     //$logger->info('Firma POST denegada.');
  3830.                     echo'FIRMA KO';
  3831.                 }
  3832.             }
  3833.             elseif (!empty($_GET)) {//URL DE RESP. ONLINE
  3834.                 //$logger->info('Detectado GET. Inicia comprobación.');
  3835.                 $version $_GET["Ds_SignatureVersion"];
  3836.                 $datos $_GET["Ds_MerchantParameters"];
  3837.                 $signatureRecibida $_GET["Ds_Signature"];
  3838.                 $decodec json_decode($api->decodeMerchantParameters($datos), true);
  3839.                 $kc 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq'//Clave recuperada de CANALES
  3840.                 $firma $api->createMerchantSignatureNotif($kc$datos);
  3841.                 $logger->info(gettype($decodec));
  3842.                 $logger->info($decodec["Ds_Response"]);
  3843.                 $decodec2=json_decode($decodectrue);
  3844.                 $logger->info(gettype($decodec2));
  3845.                 $logger->info($decodec2["Ds_Response"]);
  3846.                 if ($firma === $signatureRecibida) {
  3847.                     if (intval($decodec['Ds_Response'])<100){
  3848.                         $pagado true;
  3849.                         $logger->info('Marcando $pagado=true');
  3850.                     }else{
  3851.                         $error=true;
  3852.                     }
  3853.                     echo'FIRMA OK';
  3854.                 } else {
  3855.                     $pagado false;
  3856.                     //$logger->info('Firma GET denegada.');
  3857.                     echo'FIRMA KO';
  3858.                 }
  3859.             }
  3860.             else{
  3861.                 $api=new RedsysAPI();
  3862.                 $logger = new Logger('my_logger');
  3863.                 $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaRedsys.log'Logger::DEBUG));
  3864.                 $fuc="351398243";
  3865.                 $terminal="1";
  3866.                 $moneda="978";
  3867.                 $trans="0";
  3868.                 $url=$this->generateUrl('facturaGenerica_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  3869.                 $urlOKKO=$this->generateUrl('facturaGenerica_pagar',['id' => $factura->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  3870.                 $id=time();
  3871.                 $amount=str_replace('.','',$factura->getTotalFactura());;
  3872.                 // Se Rellenan los campos
  3873.                 $api->setParameter("DS_MERCHANT_AMOUNT",$amount);
  3874.                 $api->setParameter("DS_MERCHANT_ORDER",$id);
  3875.                 $api->setParameter("DS_MERCHANT_MERCHANTCODE",$fuc);
  3876.                 $api->setParameter("DS_MERCHANT_CURRENCY",$moneda);
  3877.                 $api->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$trans);
  3878.                 $api->setParameter("DS_MERCHANT_TERMINAL",$terminal);
  3879.                 $api->setParameter("DS_MERCHANT_MERCHANTURL",$url);
  3880.                 $api->setParameter("DS_MERCHANT_URLOK",$urlOKKO);
  3881.                 $api->setParameter("DS_MERCHANT_URLKO",$urlOKKO);
  3882.                 //Datos de configuración
  3883.                 $version="HMAC_SHA256_V1";
  3884.                 $kc 'f534PExNDgl6MWbwG8BglFJTFeFzr9Dq';//Clave recuperada de CANALES
  3885.                 // Se generan los parámetros de la petición
  3886.                 $request "";
  3887.                 $params $api->createMerchantParameters();
  3888.                 $signature $api->createMerchantSignature($kc);
  3889.             }
  3890.             if ($pagado??null === true) {
  3891.                 $logger->info('Marcando como pagado.');
  3892.                 $factura->setDevuelta(false);
  3893.                 $entityManager->persist($factura);
  3894.                 $entityManager->flush();
  3895.                 //Notificación email
  3896.                 try {
  3897.                     $message = (new Email())
  3898.                         ->subject('FACTURA PAGADA')
  3899.                         ->from('contacto@energaze.com')
  3900.                         ->to($factura->getContrato()->getCliente()->getEmail())
  3901.                         ->html($this->renderView('email/facturaPagada.html.twig',['factura'=>$factura]));
  3902.                     $mailer->send($message);
  3903.                 }catch (\Exception $exception){
  3904.                     $logger->info($exception->getMessage());
  3905.                 }
  3906.             }elseif ($pagado??null === false){
  3907.                 $error=true;
  3908.             }
  3909.         }
  3910.         return $this->render('factura/pagar.html.twig', [
  3911.             'factura' => $factura,
  3912.             'error' => $error,
  3913.             'version' => $version,
  3914.             'params' => $params,
  3915.             'signature' => $signature,
  3916.         ]);
  3917.     }
  3918.     /**
  3919.      * @Route("factura/otros/{id}/edit", name="facturaGenerica_edit", methods={"GET","POST"})
  3920.      */
  3921.     public function editGenerica(Request $requestFacturaGenerica $facturaEntityManagerInterface $entityManager): Response
  3922.     {
  3923.         $this->denyAccessUnlessGranted('ROLE_FACTURACION');;
  3924.         $logger = new Logger('my_logger');
  3925.         $logger->pushHandler(new StreamHandler(__DIR__.'/../../logs/pruebaApi.log'Logger::DEBUG));
  3926.         $form $this->createForm(FacturaGenericaType::class, $factura);
  3927.         $form->handleRequest($request);
  3928.         if ($form->isSubmitted() && $form->isValid()) {
  3929.             $factura->calcularTotal();
  3930.             $entityManager->flush();
  3931.             $logger->info('Factura '.$factura->getId().' editada por usuario '.$this->getUser()->getUsername());
  3932.             return $this->redirectToRoute('facturaGenerica_show', ['id'=>$factura->getId()]);
  3933.         }
  3934.         return $this->render('factura_generica/edit.html.twig', [
  3935.             'contrato'=>$factura->getContrato(),
  3936.             'factura' => $factura,
  3937.             'form' => $form->createView(),
  3938.         ]);
  3939.     }
  3940.     /**
  3941.      * @Route("factura/otros/{id}", name="facturaGenerica_delete", methods={"POST"})
  3942.      */
  3943.     public function deleteGenerica(Request $requestFacturaGenerica $facturaFacturaGenericaRepository $facturaRepository): Response
  3944.     {
  3945.         if ($this->isCsrfTokenValid('delete'.$factura->getId(), $request->request->get('_token'))) {
  3946.             $contrato=$factura->getContrato();
  3947.             $facturaRepository->remove($facturatrue);
  3948.         }
  3949.         return $this->redirectToRoute('contrato_show',['id'=>$contrato->getId()], Response::HTTP_SEE_OTHER);
  3950.     }
  3951. }