src/Controller/UtFacturasController.php line 1020

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\FeCajas;
  4. use App\Entity\FeClientes;
  5. use App\Entity\FeCreDirCuotas;
  6. use App\Entity\FeCreDirecto;
  7. use App\Entity\FeFacCamAdicionales;
  8. use App\Entity\FeFacDetalles;
  9. use App\Entity\FeFacDetImpuestos;
  10. use App\Entity\FeInvMovimientos;
  11. use App\Entity\FeParametros;
  12. use App\Entity\FeTipCreditos;
  13. use App\Entity\FeVenDetalles;
  14. use App\Entity\FeVenDetImpuestos;
  15. use App\Entity\FeVentas;
  16. use App\Entity\Users;
  17. use App\Entity\UtFacturas;
  18. use App\Form\UtFacturasType;
  19. use App\Repository\FeCajasRepository;
  20. use App\Repository\FeClientesRepository;
  21. use App\Repository\FeComerciosRepository;
  22. use App\Repository\FeFacDetallesRepository;
  23. use App\Repository\FeForPagoRepository;
  24. use App\Repository\FeInventariosRepository;
  25. use App\Repository\FeInvMovimientosRepository;
  26. use App\Repository\FeParametrosRepository;
  27. use App\Repository\FeProductosRepository;
  28. use App\Repository\FeSucursalesRepository;
  29. use App\Repository\FeTabIvaRepository;
  30. use App\Repository\FeTipCreditosRepository;
  31. use App\Repository\FeTipIdentificacionesRepository;
  32. use App\Repository\FeVentasRepository;
  33. use App\Repository\UsersRepository;
  34. use App\Repository\UtFacturasRepository;
  35. use Dompdf\Options;
  36. use PHPMailer\PHPMailer\PHPMailer;
  37. use Picqer\Barcode\BarcodeGeneratorPNG;
  38. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  39. use Symfony\Component\HttpFoundation\Request;
  40. use Symfony\Component\HttpFoundation\Response;
  41. use Symfony\Component\Routing\Annotation\Route;
  42. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  43. use Dompdf\Dompdf;
  44. /**
  45.  * @Route("/ut/facturas")
  46.  */
  47. class UtFacturasController extends AbstractController
  48. {
  49.     //prueba templates
  50.     /**
  51.      * @Route("/test-template", name="ut_facturas_templates", methods={"GET","POST"})
  52.      */
  53.     public function template(Request $requestUtFacturasRepository $utFacturasRepositoryFeForPagoRepository $feForPagoRepositoryFeFacDetallesRepository $feFacDetallesRepository): Response
  54.     {
  55.         $user $this->getUser();
  56.         $utFactura $utFacturasRepository->find(950);
  57.         $forPago $feForPagoRepository->getAll();
  58.         $facDetalles $feFacDetallesRepository->findBy(['facturas'=>$utFactura->getId()]);
  59.         return $this->render('ut_facturas/'$utFactura->getComercios()->getComFacTemplate() .'/factura.html.twig',array(
  60.             'utFactura' => $utFactura,
  61.             'forPago' => $forPago,
  62.             'existeLogo' => file_exists("./keys/".$utFactura->getFacRuc()."/logo.png"),
  63.             'facDetalles' => $facDetalles,
  64.             //'fecAutorizacion' => $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion'],
  65.         ));
  66.     }
  67.     
  68.     //REPORTES
  69.     /**
  70.      * @Route("/reportes", name="ut_facturas_reportes", methods={"GET","POST"})
  71.      */
  72.     public function reportes(Request $requestUtFacturasRepository $utFacturasRepository): Response
  73.     {
  74.         $user $this->getUser();
  75.         return $this->render('ut_facturas/reportes.html.twig', [
  76.             'ut_facturas' => $utFacturasRepository->getAll($user->getComercio()==null?'All':$user->getComercio()->getId()),
  77.         ]);
  78.     }
  79.     /**
  80.      * @Route("/reportes-comprobantes", name="ut_comprobantes_reportes", methods={"GET","POST"})
  81.      */
  82.     public function repComprobamtes(Request $requestUtFacturasRepository $utFacturasRepository): Response
  83.     {
  84.         $user $this->getUser();
  85.         return $this->render('ut_facturas/repComprobantes.html.twig', [
  86.             'ut_comprobantes' => $utFacturasRepository->getComprobantes($user->getComercio()==null?'All':$user->getComercio()->getId()),
  87.         ]);
  88.     }
  89.     //FIN REPORTES
  90.     //GENERA PDF
  91.     /**
  92.      * @Route("/genera/pdf/{facId}", name="ut_facturas_genera_pdf", methods={"GET","POST"})
  93.      */
  94.     public function generaFacturaPdf($facIdRequest $requestUtFacturasRepository $utFacturasRepositoryFeFacDetallesRepository $feFacDetallesRepository,
  95.                                      FeForPagoRepository $feForPagoRepository): Response
  96.     {
  97.         $forPago $feForPagoRepository->getAll();
  98.         $utFactura $utFacturasRepository->find($facId);
  99.         $facDetalles $feFacDetallesRepository->findBy(['facturas'=>$facId]);
  100.         //CREA PDF RIDE
  101.         $options = new Options();
  102.         $options->set('isRemoteEnabled',TRUE);
  103.         $dompdf = new Dompdf($options);
  104.         $contxt stream_context_create([
  105.             'ssl' => [
  106.                 'verify_peer' => FALSE,
  107.                 'verify_peer_name' => FALSE,
  108.                 'allow_self_signed'=> TRUE
  109.             ]
  110.         ]);
  111.         $dompdf->setHttpContext($contxt);
  112.         $dompdf->set_paper('A4');
  113.         $html $this->renderView('ut_facturas/'$utFactura->getComercios()->getComFacTemplate() .'/factura.html.twig',array(
  114.             'utFactura' => $utFactura,
  115.             'forPago' => $forPago,
  116.             'existeLogo' => file_exists("./keys/".$utFactura->getFacRuc()."/logo.png"),
  117.             'facDetalles' => $facDetalles,
  118.             //'fecAutorizacion' => $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion'],
  119.         ));
  120.         // Load HTML to Dompdf $dompdf->loadHtml($html); // (Optional) Setup the paper size and orientation 'portrait' or 'portrait' $dompdf->setPaper('A4', 'portrait'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser (inline view) $dompdf->stream("mypdf.pdf", [ "Attachment" => false ]); } }
  121.         $dompdf->load_html($html);
  122.         $dompdf->render();
  123.         $output $dompdf->output();
  124.         file_put_contents("./facturas_ride/".$utFactura->getFacClave().".pdf"$output);
  125.         return new Response('ok',200);
  126.     }
  127.     /**
  128.      * @Route("/", name="ut_facturas_index", methods={"GET","POST"})
  129.      */
  130.     public function index(Request $requestUtFacturasRepository $utFacturasRepository): Response
  131.     {
  132.         if($request->isMethod('POST')){
  133.             $facId $_GET['facId'];
  134.         }else{
  135.             $facId "0";
  136.         }
  137.         //dd($facId);
  138.         $user $this->getUser();
  139.         return $this->render('ut_facturas/index.html.twig', [
  140.             'ut_facturas' => $utFacturasRepository->getAll($user->getComercio()==null?'All':$user->getComercio()->getId()),
  141.             'facId'=>$facId
  142.         ]);
  143.     }
  144.     /**
  145.      * @Route("/new", name="ut_facturas_new", methods={"GET","POST"})
  146.      */
  147.     public function new(
  148.         Request $requestUserPasswordEncoderInterface $encoderFeTipIdentificacionesRepository $feTipIdentificacionesRepository,
  149.         FeClientesRepository $feClientesRepositoryFeProductosRepository $feProductosRepositoryFeCajasRepository $feCajasRepository,
  150.         UsersRepository $usersRepositoryFeSucursalesRepository $feSucursalesRepositoryFeInventariosRepository $feInventariosRepository,
  151.         FeParametrosRepository $feParametrosRepositoryFeTipCreditosRepository $feTipCreditosRepositoryFeForPagoRepository $feForPagoRepository,
  152.         FeTabIvaRepository $feTabIvaRepository
  153.     ): Response
  154.     {
  155.     date_default_timezone_set('America/Guayaquil');
  156.         $user $this->getUser();
  157.         $utFactura = new UtFacturas();
  158.         $form $this->createForm(UtFacturasType::class, $utFactura);
  159.         $form->handleRequest($request);
  160.         if ($form->isSubmitted() && $form->isValid()) {
  161.             $em $this->getDoctrine()->getManager();
  162.             function generacionCodigoNumerico()
  163.             {
  164.                 for( $i 1$i <= 8$i++ ) {
  165.                     $cod[$i] = rand(09);
  166.                 }
  167.                 return implode$cod );
  168.             }
  169.             function invertirCadena$cadena ) {
  170.                 $cadenaInvertida "";
  171.                 for ( $x strlen$cadena ) - 1$x >= 0$x-- ) {
  172.                     $cadenaInvertida $cadenaInvertida substr$cadena$x);
  173.                 }
  174.                 return $cadenaInvertida;
  175.             }
  176.             function obtenerSumaPorDigitos$cadena ) {
  177.                 $pivote 2;
  178.                 $longitudCadena strlen$cadena );
  179.                 $cantidadTotal 0;
  180.                 $b 1;
  181.                 for ( $i 0$i $longitudCadena$i++ ) {
  182.                     if ( $pivote == ) {
  183.                         $pivote 2;
  184.                     }
  185.                     //$temporal = intval(substr($cadena,$i, $b));
  186.                     $temporal intvalsubstr$cadena$i) );
  187.                     $b++;
  188.                     $temporal $temporal $pivote;
  189.                     $pivote++;
  190.                     $cantidadTotal $cantidadTotal $temporal;
  191.                 }
  192.                 $cantidadTotal 11 $cantidadTotal 11;
  193.                 if ( $cantidadTotal == 11 )
  194.                     $cantidadTotal 0;
  195.                 if ( $cantidadTotal == 10 )
  196.                     $cantidadTotal 1;
  197.                 return $cantidadTotal;
  198.             }
  199. //INICIO GUARDADO//////////////////////////////////////////////////////////////////////
  200.             date_default_timezone_set('America/Guayaquil');
  201.             $arreglo $request->request->all();
  202.             //dd($arreglo);
  203.             $detalles json_decode($arreglo['detalles']);
  204.             $opcion $arreglo['opciones'];
  205.             //dd($detalles);
  206.             $utFactura->setFacTotConImpBase($arreglo['subdoce']);
  207.             $utFactura->setFacTotConImpCodigo('2');
  208.             $utFactura->setFacTotConImpPorcentaje('2');
  209.             $utFactura->setFacTotConImpTarifa('12');
  210.             $utFactura->setFacTotConImpValor($arreglo['ivadoce']);
  211.             $utFactura->setFacLog('Factura Generada');
  212.             //$utFactura->setFacFecEmision(date("Y-m-d"));
  213.             $utFactura->setFacFecEnvio(date("Y-m-d"));
  214.             $utFactura->setFacFecRespuesta(null);
  215.             $utFactura->setFacCajId($arreglo['facCajId']);
  216.             //IMPUESTOS
  217.             $utFactura->setFacSubCero($arreglo['subcero']);
  218.             $utFactura->setFacSubCinco($arreglo['subcinco']);
  219.             $utFactura->setFacSubDoce($arreglo['subdoce']);
  220.             $utFactura->setFacSubTrece($arreglo['subtrece']);
  221.             $utFactura->setFacSubCatorce($arreglo['subcatorce']);
  222.             $utFactura->setFacSubQuince($arreglo['subquince']);
  223.             $utFactura->setFacSubNoObjeto($arreglo['subnoobjeto']);
  224.             $utFactura->setFacSubExento($arreglo['subexento']);
  225.             $utFactura->setFacSubDiferenciado($arreglo['subdiferenciado']);
  226.             $utFactura->setFacIvaCinco(round($arreglo['ivacinco'],2));
  227.             $utFactura->setFacIvaDoce(round($arreglo['ivadoce'],2));
  228.             $utFactura->setFacIvaTrece(round($arreglo['ivatrece'],2));
  229.             $utFactura->setFacIvaCatorce(round($arreglo['ivacatorce'],2));
  230.             $utFactura->setFacIvaQuince(round($arreglo['ivaquince'],2));
  231. //GUARDA INF ADICIONAL
  232.             if(isset($arreglo['infAdicional'])){
  233.                 $utFactura->setFacInfAdicional($arreglo['infAdicional']);
  234.             }
  235.             //GUARDA DETALLE
  236.             foreach ($detalles as $detalle){
  237.                 //dd($detalle->proCantidad);
  238.                 $inventario $feInventariosRepository->find($detalle->invId);
  239.                 $facDetalle = new FeFacDetalles();
  240.                 $facDetalle->setFacturas($utFactura);
  241.                 $facDetalle->setFacDetSubtotal($detalle->proSubTotal);
  242.                 $facDetalle->setFacDetPvp($detalle->proPvp);
  243.                 $facDetalle->setFacDetNomProducto($detalle->proNombre);
  244.                 $facDetalle->setFacDetDescuento($detalle->proDescuento);
  245.                 $facDetalle->setFacDetCodProducto($detalle->proCodigo);
  246.                 $facDetalle->setFacDetCantidad($detalle->proCantidad);
  247.                 $facDetalle->setInventarios($inventario);
  248.                 $em->persist($facDetalle);
  249.                 //GUARDA IMPUESTO
  250.                 $facDetImpuesto = new FeFacDetImpuestos();
  251.                 $facDetImpuesto->setFacDetImpValor($detalle->proIva);
  252.                 $facDetImpuesto->setFacDetImpTarifa($detalle->proPorcentaje);
  253.                 $facDetImpuesto->setFacDetImpCodPorcentaje($detalle->proPorCodigo);
  254.                 $facDetImpuesto->setFacDetImpCodigo(2);
  255.                 $facDetImpuesto->setFacDetImpBase($detalle->proSubTotal);
  256.                 $facDetImpuesto->setFacdetalles($facDetalle);
  257.                 $facDetImpuesto->setFacDetImpValor($detalle->proIva);
  258.                 $em->persist($facDetImpuesto);
  259.             }
  260.             //$em->flush();
  261.             $subtot round($arreglo['ut_facturas']['facTotSinImpuestos'],2);
  262.             $total round($arreglo['ut_facturas']['facTotal'],2);
  263.             $tipDoc "".$arreglo['ut_facturas']['facTipIdeConprador']."";
  264.             $numero "".$arreglo['ut_facturas']['facIdeComprador']."";
  265.             $nombre "".$arreglo['ut_facturas']['facRazSocComprador']."";
  266.             $direccion "".$arreglo['ut_facturas']['facCamAdiDireccion']."";
  267.             $email "".$arreglo['ut_facturas']['facCamAdiEmail']."";
  268.             if($email == ''){
  269.                 $email "info-e@e-digital.ec";
  270.             }
  271.             $caja =  $feCajasRepository->find($arreglo['facCajId']);
  272.             $ticNum intval($caja->getCajNumFactura()) + 1;
  273.             $caja->setCajNumFactura($ticNum);
  274.             $em->persist($caja);
  275.             //CREA CLIENTE
  276.             $clientes $feClientesRepository->findBy(['cliDocumento'=>$utFactura->getFacIdeComprador(), 'comercios'=>$user->getComercio()->getId()]);
  277.             $tipIdentificacion $feTipIdentificacionesRepository->findBy(['tipIdeCodigo'=>$utFactura->getFacTipIdeConprador()])[0];
  278.             if(count($clientes) == 0){
  279.                 $cliente =  new FeClientes();
  280.                 $cliente->setIdentificaciones($tipIdentificacion);
  281.                 $cliente->setCliTelefono($utFactura->getFacCamAdiTelefono());
  282.                 $cliente->setCliNombre($utFactura->getFacRazSocComprador());
  283.                 $cliente->setCliEstado(1);
  284.                 $cliente->setCliEmail($utFactura->getFacCamAdiEmail());
  285.                 $cliente->setCliDocumento($utFactura->getFacIdeComprador());
  286.                 $cliente->setCliDireccion($utFactura->getFacCamAdiDireccion());
  287.                 $cliente->setComercios($user->getComercio());
  288.                 $em->persist($cliente);
  289.                 //$em->flush();
  290.             }else{
  291.                 $cliente $clientes[0];
  292.                 $cliente->setIdentificaciones($tipIdentificacion);
  293.                 $cliente->setCliTelefono($utFactura->getFacCamAdiTelefono());
  294.                 $cliente->setCliNombre($nombre);
  295.                 $cliente->setCliEstado(1);
  296.                 $cliente->setCliEmail($email);
  297.                 $cliente->setCliDocumento($numero);
  298.                 $cliente->setCliDireccion($direccion);
  299.                 $cliente->setComercios($user->getComercio());
  300.                 $em->persist($cliente);
  301.             }
  302.             //CREA USUARTIO PARA CLIENTE
  303.             $usuario $usersRepository->findBy(['username'=>$numero]);
  304.             if(count($usuario) == 0){
  305.                 $user = new Users();
  306.                 $encoded $encoder->encodePassword($user$numero);
  307.                 $user->addRole('CLIENTE');
  308.                 $user->setUsername($numero);
  309.                 $user->setUsernameCanonical($numero);
  310.                 $user->setEnabled(1);
  311.                 $user->setEmail($numero."@".$utFactura->getComercios()->getComEcoDominio());
  312.                 $user->setEmailCanonical($email);
  313.                 $user->setPassword($encoded);
  314.                 $user->setUsuNombres($nombre);
  315.                 $user->setUsuApellidos("");
  316.                 $user->setMenu(1);
  317.                 $em->persist($user);
  318.                 //$em->flush();
  319.             }
  320.             //GUARDA VENTA
  321.             $sucursal $feSucursalesRepository->find($arreglo['facSucId']);
  322.             $venta = new FeVentas();
  323.             $venta->setVenUsuario($user->getUsuApellidos()." ".$user->getUsuNombres());
  324.             $venta->setVenTotSinImpuestos($arreglo['ut_facturas']['facTotSinImpuestos']);
  325.             $venta->setVenTotImpuestos($arreglo['ivadoce']);
  326.             $venta->setVenTotDescuentos($arreglo['ut_facturas']['facTotDescuentos']);
  327.             $venta->setVenTotConImpuestos($arreglo['ut_facturas']['facTotal']);
  328.             $venta->setVenFecVenta(new \DateTime('now'));
  329.             if($opcion == 'facturar'){
  330.                 $venta->setVenEstado('PROCESANDO');
  331.             }else {
  332.                 $venta->setVenEstado('REGISTRADA');
  333.             }
  334.             $venta->setVenCajId($arreglo['facCajId']);
  335.             $venta->setSucursales($sucursal);
  336.             $venta->setVenPagCon($arreglo['pagacon']);
  337.             $venta->setVenCambio($arreglo['cambio']);
  338.             $venta->setVenForPago($arreglo['venforpago']);
  339.             $venta->setVenDetPago($arreglo['vendetalle']);
  340.             $venta->setVenSubTot0($arreglo['subcero']);
  341.             $venta->setVenSubTot12($arreglo['subdoce']);
  342.             if(count($clientes) == 0) {
  343.                 $venta->setClientes($cliente);
  344.             }else{
  345.                 $venta->setClientes($clientes[0]);
  346.             }
  347.             $em->persist($venta);
  348.             //GUARDA DETALLE VENTA
  349.             foreach ($detalles as $detalle) {
  350.                 //dd($detalle->proId);
  351.                 $inventario $feInventariosRepository->find($detalle->invId);
  352.                 $venDetalle = new FeVenDetalles();
  353.                 $venDetalle->setVenDetSubtotal($detalle->proSubTotal);
  354.                 $venDetalle->setVenDetPvp($detalle->proPvp);
  355.                 $venDetalle->setVenDetNomProducto($detalle->proNombre);
  356.                 $venDetalle->setVenDetDescuento($detalle->proDescuento);
  357.                 $venDetalle->setVenDetCodProducto($detalle->proCodigo);
  358.                 $venDetalle->setVenDetCantidad($detalle->proCantidad);
  359.                 $venDetalle->setVentas($venta);
  360.                 $venDetalle->setInventarios($inventario);
  361.                 $em->persist($venDetalle);
  362.                 //GUARDA IMPUESTOS
  363.                 $venDetImpuesto = new FeVenDetImpuestos();
  364.                 $venDetImpuesto->setVenDetImpValor($detalle->proIva);
  365.                 if ($detalle->proIva == 0) {
  366.                     $codPor 0;
  367.                     $tarifa 0;
  368.                 } else {
  369.                     $codPor 2;
  370.                     $tarifa 12;
  371.                 }
  372.                 $venDetImpuesto->setVenDetImpTarifa($tarifa);
  373.                 $venDetImpuesto->setVenDetImpCodPorcentaje($codPor);
  374.                 $venDetImpuesto->setVenDetImpCodigo(2);
  375.                 $venDetImpuesto->setVenDetImpBase($detalle->proSubTotal);
  376.                 $venDetImpuesto->setVendetalles($venDetalle);
  377.                 $venDetImpuesto->setVenDetImpValor($detalle->proIva);
  378.                 $em->persist($venDetImpuesto);
  379.                 if( $inventario->getProductos()->getProTipInventario() == 'Almacenable'){
  380.                     //DESCUENTA DE INVENTARIO
  381.                     //$feInventario = $feInventariosRepository->findBy(["productos" => $detalle->proId])[0];
  382.                     $feInvMovimiento = new FeInvMovimientos();
  383.                     $feInvMovimiento->setInvMovCantidad(($inventario->getInvCanDisponible() - $detalle->proCantidad) - $inventario->getInvCanDisponible());
  384.                     $feInvMovimiento->setInvMovUsuario($user->getUsuApellidos() . " " $user->getUsuNombres());
  385.                     $feInvMovimiento->setInvMovTipo("EGRESO");
  386.                     $feInvMovimiento->setInvMovCanNueva($inventario->getInvCanDisponible() - $detalle->proCantidad);
  387.                     $feInvMovimiento->setInvMovCanAnterior($inventario->getInvCanDisponible());
  388.                     $feInvMovimiento->setInvMovObservacion("VENTA REALIZADA");
  389.                     $feInvMovimiento->setInventarios($inventario);
  390.                     $feInvMovimiento->setInvMovFecMovimiento(new \DateTime('now'));
  391.                     $em->persist($feInvMovimiento);
  392.                     //GUARDA NUEVA CANTIDAD
  393.                     $inventario->setInvCanDisponible($inventario->getInvCanDisponible() - $detalle->proCantidad);
  394.                     $em->persist($inventario);
  395.                 }
  396.             }
  397.             $utFactura->setVentas($venta);
  398.             $em->flush();
  399.             //GUARDA CREDITO DIRECTO DE SER EL CASO
  400.             if($arreglo['venforpago'] == 'CREDITO DIRECTO'){
  401.                 $tipCredito $feTipCreditosRepository->find($arreglo['tipCredito']);
  402.                 $credito = new FeCreDirecto();
  403.                 $credito->setCreDirEstado('ACTIVO');
  404.                 $credito->setCreDirFecha(new \DateTime"now", new \DateTimeZone'America/Guayaquil' )));
  405.                 $credito->setCreDirIdeCliente($utFactura->getFacIdeComprador());
  406.                 $credito->setCreDirNomCliente($utFactura->getFacRazSocComprador());
  407.                 $totIntereses $arreglo['ut_facturas']['facTotal'] * (($tipCredito->getTipCrePorcentaje() / 100) + 1);
  408.                 $credito->setCreDirTotal($totIntereses);
  409.                 $credito->setTipcreditos($tipCredito);
  410.                 $credito->setVentas($venta);
  411.                 $em->persist($credito);
  412.                 $em->flush();
  413.                 $date = new \DateTime"now", new \DateTimeZone'America/Guayaquil' ));
  414.                 $time $date;
  415.                 //GUARDA CUOTAS CREDITO DIRECTO
  416.                 for($i=0$i<$tipCredito->getTipCreMeses(); $i++){
  417.                     $time $time->add(new \DateInterval('P1M'));
  418.                     $cuota = new FeCreDirCuotas();
  419.                     $cuota->setCreDirCuoEstado('PENDIENTE');
  420.                     $cuota->setCreDirCuoFecPago(null);
  421.                     $cuota->setCreDirCuoFecRegistro($date);
  422.                     $cuota->setCreDirCuoFecVencimiento($time);
  423.                     $cuota->setCreDirCuoObservacion(null);
  424.                     $cuoValor round($credito->getCreDirTotal() / $tipCredito->getTipCreMeses(),2);
  425.                     $cuota->setCreDirCuoValor($cuoValor);
  426.                     $cuota->setCreDirCuoAbono(0);
  427.                     $cuota->setCreDirCuoSaldo($cuoValor);
  428.                     $cuota->setCredirecto($credito);
  429.                     $em->persist($cuota);
  430.                     $em->flush();
  431.                 }
  432.             }
  433.             //GENERA CLAVE
  434.             $tipoAmbiente $utFactura->getComercios()->getComAmbiente();
  435.             $comRegimen $utFactura->getComercios()->getComRegimen();
  436.             $codigoNumerico generacionCodigoNumerico();
  437.             $fecha = new \DateTime($utFactura->getFacFecEmision());
  438.             $fecha $fecha->format('dmY');
  439.             $tipoComprobante $utFactura->getFacCodDoc();
  440.             $numRuc $utFactura->getFacRuc();
  441.             $serie $utFactura->getFacEstablecimiento().$utFactura->getFacPunEmision();
  442.             $numeroComprobante str_pad($ticNum9"0"STR_PAD_LEFT);
  443.             $TipoEmision $utFactura->getFacTipEmision();
  444.             $codigoNume "$fecha$tipoComprobante$numRuc$tipoAmbiente$serie$numeroComprobante$codigoNumerico$TipoEmision";
  445.             $claveautorizacion "$codigoNumeobtenerSumaPorDigitosinvertirCadena$codigoNume ) );
  446.             //GUARDA LA FACTURA +
  447.             $utFactura->setFacClave($claveautorizacion);
  448.             $utFactura->setFacSecuencial($numeroComprobante);
  449.             $em->persist($utFactura);
  450.             $em->flush();
  451.             //genera xml
  452.             $fecha = new \DateTime($utFactura->getFacFecEmision());
  453.             $fecha $fecha->format('d/m/Y');
  454.             $xml '<?xml version="1.0" encoding="UTF-8"?>
  455.                 <factura id="comprobante" version="2.1.0">
  456.                     <infoTributaria>
  457.                         <ambiente>'.$tipoAmbiente.'</ambiente>
  458.                         <tipoEmision>1</tipoEmision>
  459.                         <razonSocial>'.$utFactura->getFacRazSocial().'</razonSocial>
  460.                         <nombreComercial>'.$utFactura->getFacNomComercial().'</nombreComercial>
  461.                         <ruc>'.$utFactura->getFacRuc().'</ruc>
  462.                         <claveAcceso>'.$claveautorizacion.'</claveAcceso>
  463.                         <codDoc>'.$utFactura->getFacCodDoc().'</codDoc>
  464.                         <estab>'.$utFactura->getFacEstablecimiento().'</estab>
  465.                         <ptoEmi>'.$utFactura->getFacPunEmision().'</ptoEmi>
  466.                         <secuencial>'.$numeroComprobante.'</secuencial>
  467.                         <dirMatriz>'.$utFactura->getFacDirMatriz().'</dirMatriz>';
  468.                 if($utFactura->getComercios()->getComRimpe() == 'R') {
  469.                     $xml .= '
  470.                             <contribuyenteRimpe>CONTRIBUYENTE RÉGIMEN RIMPE</contribuyenteRimpe>';
  471.                 }
  472.                 if($utFactura->getComercios()->getComRimpe() == 'N') {
  473.                     $xml .= '
  474.                             <contribuyenteRimpe>CONTRIBUYENTE NEGOCIO POPULAR - RÉGIMEN RIMPE</contribuyenteRimpe>';
  475.                 }
  476.                 $xml .='
  477.                     </infoTributaria>
  478.                     <infoFactura>
  479.                         <fechaEmision>'$fecha .'</fechaEmision>
  480.                         <dirEstablecimiento>'.$utFactura->getFacDirEstablecimiento().'</dirEstablecimiento>
  481.                         <obligadoContabilidad>'.$utFactura->getFacObligado().'</obligadoContabilidad>
  482.                         <tipoIdentificacionComprador>'.$tipDoc.'</tipoIdentificacionComprador>
  483.                         <razonSocialComprador>'.$nombre.'</razonSocialComprador>
  484.                         <identificacionComprador>'.$numero.'</identificacionComprador>
  485.                         <direccionComprador>'.$direccion.'</direccionComprador>
  486.                         <totalSinImpuestos>'.$subtot.'</totalSinImpuestos>
  487.                         <totalDescuento>'.$utFactura->getFacTotDescuentos().'</totalDescuento>
  488.                         <totalConImpuestos>
  489.                             <totalImpuesto>
  490.                                 <codigo>2</codigo>
  491.                                 <codigoPorcentaje>0</codigoPorcentaje>
  492.                                 <baseImponible>'.$utFactura->getFacSubCero().'</baseImponible>
  493.                                 <tarifa>0</tarifa>
  494.                                 <valor>0</valor>
  495.                             </totalImpuesto>
  496.                             <totalImpuesto>
  497.                                 <codigo>2</codigo>
  498.                                 <codigoPorcentaje>5</codigoPorcentaje>
  499.                                 <baseImponible>'.$utFactura->getFacSubCinco().'</baseImponible>
  500.                                 <tarifa>5</tarifa>
  501.                                 <valor>' $utFactura->getFacIvaCinco() . '</valor>
  502.                             </totalImpuesto>
  503.                             <totalImpuesto>
  504.                                 <codigo>2</codigo>
  505.                                 <codigoPorcentaje>2</codigoPorcentaje>
  506.                                 <baseImponible>'.$utFactura->getFacSubDoce().'</baseImponible>
  507.                                 <tarifa>12</tarifa>
  508.                                 <valor>'.$utFactura->getFacIvaDoce().'</valor>
  509.                             </totalImpuesto>
  510.                             <totalImpuesto>
  511.                                 <codigo>2</codigo>
  512.                                 <codigoPorcentaje>10</codigoPorcentaje>
  513.                                 <baseImponible>'.$utFactura->getFacSubTrece().'</baseImponible>
  514.                                 <tarifa>13</tarifa>
  515.                                 <valor>'.$utFactura->getFacIvaTrece().'</valor>
  516.                             </totalImpuesto>
  517.                             <totalImpuesto>
  518.                                 <codigo>2</codigo>
  519.                                 <codigoPorcentaje>3</codigoPorcentaje>
  520.                                 <baseImponible>'.$utFactura->getFacSubCatorce().'</baseImponible>
  521.                                 <tarifa>14</tarifa>
  522.                                 <valor>'.$utFactura->getFacIvaCatorce().'</valor>
  523.                             </totalImpuesto>
  524.                             <totalImpuesto>
  525.                                 <codigo>2</codigo>
  526.                                 <codigoPorcentaje>4</codigoPorcentaje>
  527.                                 <baseImponible>'.$utFactura->getFacSubQuince().'</baseImponible>
  528.                                 <tarifa>15</tarifa>
  529.                                 <valor>'.$utFactura->getFacIvaQuince().'</valor>
  530.                             </totalImpuesto>
  531.                         </totalConImpuestos>
  532.                         <propina>0.00</propina>
  533.                         <importeTotal>'.$total.'</importeTotal>
  534.                         <moneda>DOLAR</moneda>
  535.                         <pagos>
  536.                             <pago>
  537.                                 <formaPago>'.strval($utFactura->getFacForPago()).'</formaPago>
  538.                                 <total>'.$total.'</total>
  539.                             </pago>
  540.                         </pagos>
  541.                     </infoFactura>
  542.                     <detalles>';
  543.             for($i=0$i<count($detalles); $i++){
  544.                 $detalle = (array)$detalles[$i];
  545.                 $atributos =  json_decode($detalle['invAtributos']);
  546.                 //GENERA ETIQUETAS Y VALORES
  547.                 $etiquetas "";
  548.                 $valores "";
  549.                 if( is_array($atributos)){
  550.                     for($j=0$j<count($atributos); $j++){
  551.                         //var_dump($atributos[$i]->name);
  552.                         $etiquetas .= $atributos[$j]->name "|";
  553.                         $valores .= $atributos[$j]->value "|";
  554.                     }
  555.                 }
  556.                 if($detalle['proIva'] == 0){
  557.                     $codPor 0;
  558.                     $tarifa 0;
  559.                 }else{
  560.                     $codPor 2;
  561.                     $tarifa 12;
  562.                 }
  563.                 $xml .='
  564.                                 <detalle>
  565.                                     <codigoPrincipal>'.$detalle['invId'].'</codigoPrincipal>
  566.                                     <descripcion>'.$detalle['proNombre'].'</descripcion>
  567.                                     <cantidad>'.round($detalle['proCantidad'],2).'</cantidad>
  568.                                     <precioUnitario>'.round($detalle['proPvp'],4).'</precioUnitario>
  569.                                     <descuento>'.round($detalle['proDescuento'],2).'</descuento>
  570.                                     <precioTotalSinImpuesto>'.round($detalle['proSubTotal'],2).'</precioTotalSinImpuesto>
  571.                                     <detallesAdicionales>
  572.                                         <detAdicional nombre="ETIQUETAS" valor="'. ($etiquetas!=""?$etiquetas:"none") . '"/>
  573.                                         <detAdicional nombre="VALORES" valor="'. ($valores!=""?$valores:"none") . '"/>
  574.                                     </detallesAdicionales>
  575.                                     <impuestos>
  576.                                         <impuesto>
  577.                                             <codigo>2</codigo>
  578.                                             <codigoPorcentaje>'.$detalle['proPorCodigo'].'</codigoPorcentaje>
  579.                                             <tarifa>'.$detalle['proPorcentaje'].'</tarifa>
  580.                                             <baseImponible>'.round($detalle['proSubTotal'],2).'</baseImponible>
  581.                                             <valor>'.round($detalle['proIva'],2).'</valor>
  582.                                         </impuesto>
  583.                                     </impuestos>
  584.                                 </detalle>';
  585.             }
  586.             $xml .='
  587.                     </detalles>
  588.                     <infoAdicional>
  589.                         <campoAdicional nombre="Dirección">'.$direccion.'</campoAdicional>
  590.                         <campoAdicional nombre="Email">'.$email.'</campoAdicional>
  591.                     </infoAdicional>
  592.                 </factura>';
  593.             $doc = new \DOMDocument(1.0);
  594.             $nombre_archivo "logscron.txt";
  595.             //file_exists($nombre_archivo);
  596.             $log fopen($nombre_archivo"a+");
  597.             $mensaje $xml;
  598.             fwrite($log"------XML-----"$mensaje"\n");
  599.             $doc->loadXML($xml);
  600.             $doc->saveXML();
  601.             $doc->save('facturas_generadas/'.$claveautorizacion.'.xml');
  602. //////////////////////////////////////////////////////////////////////////////////        //FIRMA XML
  603.             function hex_to_base64$hex ) {
  604.                 $return '';
  605.                 foreach ( str_split$hex) as $pair ) {
  606.                     $return .= chrhexdec$pair ) );
  607.                 }
  608.                 return base64_encode$return );
  609.             }
  610.             function getModulo($utFactura) {
  611.                 //$numRuc = $_SESSION[ 'rucempresa' ];
  612.                 $data openssl_pkey_get_detailsopenssl_pkey_get_privatefile_get_contents"keys/".$utFactura->getFacRuc()."/key.pem" ) ) );
  613.                 $modulus base64_encode$data'rsa' ][ 'n' ] );
  614.                 return $modulus;
  615.             }
  616.             function getPublicKey($utFactura) {
  617.                 //$numRuc = $_SESSION[ 'rucempresa' ];
  618.                 $data file_get_contents"keys/".$utFactura->getFacRuc()."/cert.pem" );
  619.                 $begin "CERTIFICATE-----";
  620.                 $end "-----END";
  621.                 $pem_data substr$datastrpos$data$begin ) + strlen$begin ), strpos$data$end ) - ( strpos$data$begin ) + strlen$begin ) ) );
  622.                 return str_replace"\n"""$pem_data );
  623.             }
  624.             function pem2der$pem_data ) {
  625.                 $begin "CERTIFICATE-----";
  626.                 $end "-----END";
  627.                 $pem_data substr$pem_datastrpos$pem_data$begin ) + strlen$begin ) );
  628.                 $pem_data substr$pem_data0strpos$pem_data$end ) );
  629.                 $der base64_decode$pem_data );
  630.                 return $der;
  631.             }
  632.             $pem_data file_get_contents"keys/".$utFactura->getFacRuc()."/cert.pem" );
  633.             $pem2der pem2der$pem_data );
  634.             $ruta 'facturas_generadas/'.$claveautorizacion.'.xml';
  635.             $doc = new \DOMDocument(1.0);
  636.             $doc->load$rutaLIBXML_NOEMPTYTAG );
  637.             $root $doc->getElementsByTagName"factura" )->item);
  638.             $x $doc->getElementsByTagName"factura" )->item)->C14N();
  639.             $digestRef3 hex_to_base64sha1$x ) );
  640.             $llavepublica wordwrapgetPublicKey($utFactura), 76"\n"true );
  641.             $modulo wordwrapgetModulo($utFactura), 76"\n"true );
  642.             $DigestValueCert hex_to_base64sha1$pem2der ) );
  643.             $certdata = array();
  644.             $certdata openssl_x509_parsefile_get_contents"keys/".$utFactura->getFacRuc()."/cert.pem" ), );
  645.             //dd($certdata);
  646.             $ds "ds:";
  647.             $etsi "etsi:";
  648.             function generateRandomNumber$digits ) {
  649.                 if ( $digits ) {
  650.                     return generateRandomNumber$digits ) . generateRandomNumber);
  651.                 }
  652.                 return "" randpow10$digits ), pow10$digits ) - );
  653.             }
  654.             $nombreIssuer "CN=" $certdata'issuer' ][ 'commonName' ];
  655.             if(isset($certdata'issuer' ][ 'localityName' ])){
  656.                 $nombreIssuer .= ",L=".$certdata'issuer' ][ 'localityName' ];
  657.             }
  658.             $nombreIssuer .= ",OU="$certdata'issuer' ][ 'organizationalUnitName' ] . ",O=" $certdata'issuer' ][ 'organizationName' ] . ",C=" $certdata'issuer' ][ 'countryName' ];
  659.             $pos strpos($certdata['issuer']['commonName'], 'ANF');
  660.             if($pos !== false) {
  661.                 $nombreIssuer .= ",2.5.4.5=#130d31373932363031323135303031";
  662.             }
  663.             $pos strpos($certdata['issuer']['commonName'], 'UANATACA');
  664.             if($pos !== false) {
  665.                 $nombreIssuer .= ",2.5.4.97=#0c0f56415445532d413636373231343939";
  666.             }
  667.             $numerodeserie $certdata'serialNumber' ];
  668.             $CertificateNumber generateRandomNumber);
  669.             $SignatureNumber generateRandomNumber);
  670.             $SignedPropertiesNumber generateRandomNumber);
  671.             $SignedInfoNumber generateRandomNumber);
  672.             $SignedPropertiesIDNumber generateRandomNumber);
  673.             $ReferenceIDNumber generateRandomNumber);
  674.             $SignatureValueNumber generateRandomNumber);
  675.             $ObjectNumber generateRandomNumber);
  676.             $signature $doc->createElement$ds "Signature" );
  677.             $signature->setAttribute'xmlns:ds''http://www.w3.org/2000/09/xmldsig#' );
  678.             $signature->setAttribute'xmlns:etsi''http://uri.etsi.org/01903/v1.3.2#' );
  679.             $signature->setAttribute'Id''Signature' $SignatureNumber );
  680.             $root->appendChild$signature );
  681.             $SignedInfo $doc->createElement$ds "SignedInfo" );
  682.             $SignedInfo->setAttribute'Id''Signature-SignedInfo' $SignedInfoNumber );
  683.             $signature->appendChild$SignedInfo );
  684.             $CanonicalizationMethod $doc->createElement$ds "CanonicalizationMethod" );
  685.             $CanonicalizationMethod->setAttribute'Algorithm''http://www.w3.org/TR/2001/REC-xml-c14n-20010315' );
  686.             $SignedInfo->appendChild$CanonicalizationMethod );
  687.             $SignatureMethod $doc->createElement$ds "SignatureMethod" );
  688.             $SignatureMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#rsa-sha1' );
  689.             $SignedInfo->appendChild$SignatureMethod );
  690.             $Reference1 $doc->createElement$ds "Reference" );
  691.             $Reference1->setAttribute'Id''SignedPropertiesID' $SignedPropertiesIDNumber );
  692.             $Reference1->setAttribute'Type''http://uri.etsi.org/01903#SignedProperties' );
  693.             $Reference1->setAttribute'URI''#Signature' $SignatureNumber '-SignedProperties' $SignedPropertiesNumber );
  694.             $SignedInfo->appendChild$Reference1 );
  695.             $DigestMethod $doc->createElement$ds "DigestMethod"'' );
  696.             $Reference1->appendChild$DigestMethod );
  697.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  698.             $DigestValue1 $doc->createElement$ds "DigestValue" );
  699.             $Reference1->appendChild$DigestValue1 );
  700.             $Reference2 $doc->createElement$ds "Reference" );
  701.             $Reference2->setAttribute'URI''#Certificate' $CertificateNumber );
  702.             $SignedInfo->appendChild$Reference2 );
  703.             $DigestMethod $doc->createElement$ds "DigestMethod"'' );
  704.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  705.             $Reference2->appendChild$DigestMethod );
  706.             $DigestValue2 $doc->createElement$ds "DigestValue" );
  707.             $Reference2->appendChild$DigestValue2 );
  708.             $Reference3 $doc->createElement$ds "Reference" );
  709.             $Reference3->setAttribute'Id''Reference-ID-' $ReferenceIDNumber );
  710.             $Reference3->setAttribute'URI''#comprobante' );
  711.             $SignedInfo->appendChild$Reference3 );
  712.             $Transforms $doc->createElement$ds "Transforms" );
  713.             $Reference3->appendChild$Transforms );
  714.             $Transform $doc->createElement$ds "Transform" );
  715.             $Transform->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#enveloped-signature' );
  716.             $Transforms->appendChild$Transform );
  717.             $DigestMethod $doc->createElement$ds "DigestMethod" );
  718.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  719.             $Reference3->appendChild$DigestMethod );
  720.             $DigestValue3 $doc->createElement$ds "DigestValue"$digestRef3 );
  721.             $Reference3->appendChild$DigestValue3 );
  722. //se acaba el signed info
  723.             $SignatureValue $doc->createElement$ds "SignatureValue" );
  724.             $SignatureValue->setAttribute'Id''SignatureValue' $SignatureValueNumber );
  725.             $signature->appendChild$SignatureValue );
  726. //SE acaba el valor de la firma
  727.             $KeyInfo $doc->createElement$ds "KeyInfo" );
  728.             $KeyInfo->setAttribute'Id''Certificate' $CertificateNumber );
  729.             $signature->appendChild$KeyInfo );
  730.             $X509Data $doc->createElement$ds "X509Data" );
  731.             $KeyInfo->appendChild$X509Data );
  732.             $X509Certificate $doc->createElement$ds "X509Certificate""\n" $llavepublica "\n" );
  733.             $X509Data->appendChild$X509Certificate );
  734.             $KeyValue $doc->createElement$ds "KeyValue" );
  735.             $KeyInfo->appendChild$KeyValue );
  736.             $RSAKeyValue $doc->createElement$ds "RSAKeyValue" );
  737.             $KeyValue->appendChild$RSAKeyValue );
  738.             $Modulus $doc->createElement$ds "Modulus""\n" $modulo "\n" );
  739.             $RSAKeyValue->appendChild$Modulus );
  740.             $Exponent $doc->createElement$ds "Exponent""AQAB" );
  741.             $RSAKeyValue->appendChild$Exponent );
  742.             $SignatureValue $doc->getElementsByTagName"SignatureValue" )->item);
  743. //COMIENZA OBJECT
  744.             $doc->save$rutaLIBXML_NOEMPTYTAG );
  745.             $doc->load$rutaLIBXML_NOEMPTYTAG );
  746.             $Object $doc->createElement$ds "Object" );
  747.             $Object->setAttribute'Id''Signature' $SignatureNumber '-Object' $ObjectNumber );
  748.             $signature $doc->getElementsByTagName'Signature' )->item);
  749.             $signature->appendChild$Object );
  750.             $QualifyingProperties $doc->createElement$etsi "QualifyingProperties" );
  751.             $QualifyingProperties->setAttribute'Target''#Signature' $SignatureNumber );
  752.             $Object->appendChild$QualifyingProperties );
  753.             $SignedProperties $doc->createElement$etsi "SignedProperties" );
  754.             $SignedProperties->setAttribute'Id''Signature' $SignatureNumber "-SignedProperties" $SignedPropertiesNumber );
  755.             $QualifyingProperties->appendChild$SignedProperties );
  756.             $SignedSignatureProperties $doc->createElement$etsi "SignedSignatureProperties" );
  757.             $SignedProperties->appendChild$SignedSignatureProperties );
  758.             $date = new \DateTime"now", new \DateTimeZone'America/Guayaquil' ) );
  759.             $SigningTime $doc->createElement$etsi "SigningTime"$date->format'c' ) );
  760.             $SignedSignatureProperties->appendChild$SigningTime );
  761.             $SigningCertificate $doc->createElement$etsi "SigningCertificate" );
  762.             $SignedSignatureProperties->appendChild$SigningCertificate );
  763.             $Cert $doc->createElement$etsi "Cert" );
  764.             $SigningCertificate->appendChild$Cert );
  765.             $CertDigest $doc->createElement$etsi "CertDigest" );
  766.             $Cert->appendChild$CertDigest );
  767.             $DigestMethod $doc->createElement$ds "DigestMethod" );
  768.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  769.             $CertDigest->appendChild$DigestMethod );
  770.             $DigestValue $doc->createElement$ds "DigestValue"$DigestValueCert );
  771.             $CertDigest->appendChild$DigestValue );
  772.             $IssuerSerial $doc->createElement$etsi "IssuerSerial" );
  773.             $Cert->appendChild$IssuerSerial );
  774.             $X509IssuerName $doc->createElement$ds "X509IssuerName"$nombreIssuer ); //CAMBIAR RAZON ESTATIOCOS
  775.             $IssuerSerial->appendChild$X509IssuerName );
  776.             $X509SerialNumber $doc->createElement$ds "X509SerialNumber"$numerodeserie ); //CAMBIAR RAZON ESTATIOCOS
  777.             $IssuerSerial->appendChild$X509SerialNumber );
  778.             $SignedDataObjectProperties $doc->createElement$etsi "SignedDataObjectProperties" );
  779.             $SignedProperties->appendChild$SignedDataObjectProperties );
  780.             $DataObjectFormat $doc->createElement$etsi "DataObjectFormat" );
  781.             $DataObjectFormat->setAttribute"ObjectReference""#Reference-ID-" $ReferenceIDNumber );
  782.             $SignedDataObjectProperties->appendChild$DataObjectFormat );
  783.             $SignedDataObjectProperties $doc->createElement$etsi "Description"'contenido comprobante' );
  784.             $DataObjectFormat->appendChild$SignedDataObjectProperties );
  785.             $SignedDataObjectProperties $doc->createElement$etsi "MimeType"'text/xml' );
  786.             $DataObjectFormat->appendChild$SignedDataObjectProperties );
  787.             if ( $doc->save$rutaLIBXML_NOEMPTYTAG ) ) {
  788.                 $doc->preserveWhiteSpace true;
  789.                 $doc->formatOutput false;
  790.                 $doc->load$ruta );
  791.                 $primerDigestRef hex_to_base64sha1$doc->getElementsByTagName"SignedProperties" )->item)->C14N() ) );
  792.                 $segundoDigestRef hex_to_base64sha1$doc->getElementsByTagName"KeyInfo" )->item)->C14N() ) );
  793.                 $reference1 $doc->getElementsByTagName"Reference" )->item);
  794.                 $DigestValue1 $reference1->getElementsByTagName"DigestValue" )->item);
  795.                 $text $doc->createTextNode$primerDigestRef );
  796.                 $text $DigestValue1->appendChild$text );
  797.                 $reference2 $doc->getElementsByTagName"Reference" )->item);
  798.                 $DigestValue2 $reference2->getElementsByTagName"DigestValue" )->item);
  799.                 $text $doc->createTextNode$segundoDigestRef );
  800.                 $text $DigestValue2->appendChild$text );
  801.                 $doc->save$rutaLIBXML_NOEMPTYTAG );
  802.                 $doc->load$ruta );
  803.                 // VALOR DE SignatureValue
  804.                 $pkey file_get_contents"keys/".$utFactura->getFacRuc()."/key.pem" );
  805.                 openssl_sign$doc->getElementsByTagName"SignedInfo" )->item)->C14N(), $sigval$pkey );
  806.                 $valorFirma wordwrapbase64_encode$sigval ), 76"\n"true );
  807.                 $SignatureValue $doc->getElementsByTagName"SignatureValue" )->item);
  808.                 $text $doc->createTextNode"\n" $valorFirma "\n" );
  809.                 $text $SignatureValue->appendChild$text );
  810.                 if ( $doc->save$rutaLIBXML_NOEMPTYTAG ) ) {
  811.                     //GUARDA XML EN BD
  812.                     if($opcion == 'facturar'){
  813.                         $utFactura->setFacEstado("FIRMADA");
  814.                     }else{
  815.                         $utFactura->setFacEstado("REGISTRADA");
  816.                     }
  817.                     $utFactura->setFacXml(strval($doc->saveXML()));
  818.                     $em->persist($utFactura);
  819.                     $em->flush();
  820.                 }
  821.             }
  822. //////////////////////////////////////////////////////////////////////////////////        //FIN FIRMA XML
  823. //////////////////////////////////////////////////////////////////////////////////        //GENERA PDF COMPROBANTE
  824.             //$url = "http://localhost/jm/billingplus/public/ut/facturas/comprobante/pdf/".$utFactura->getId();
  825.             //header( 'Location: http://www.yoursite.com/new_page.html' );
  826.             if($opcion == 'facturar') {
  827.                 return $this->redirectToRoute('ut_facturas_index', ['facId' => $utFactura->getId()], 307);
  828.             }else{
  829.                 return $this->redirectToRoute('fe_ventas_index', ['facId' => $utFactura->getId()], 307);
  830.             }
  831. //////////////////////////////////////////////////////////////////////////////////        //FIN GENERA PDF COMPROBANTE
  832.         }
  833.         $parametros $feParametrosRepository->getParametrosByComercio($user->getComercio()->getId());
  834.         $forPago $feForPagoRepository->getAll();
  835.         foreach ($parametros as $parametro ){
  836.             if($parametro['parNombre'] == 'automotores' && $parametro['parValor'] == 'S'){
  837.                 return $this->render('ut_facturas/new_automotores.html.twig', [
  838.                     'user'=>$user,
  839.                     'comId' => $user->getComercio()==null?'All':$user->getComercio()->getId(),
  840.                     'parametros' => $parametros,
  841.                     'forpago' => $forPago,
  842.                     'fe_clientes' => $feClientesRepository->getAll($user->getComercio()==null?'All':$user->getComercio()->getId()),
  843.                     'fe_productos' => $feProductosRepository->getAllByEstado($user->getComercio()==null?'All':$user->getComercio()->getId(),1,$user->getSucursal()->getId()),
  844.                     'ut_factura' => $utFactura,
  845.                     'tipos_credito' => $feTipCreditosRepository->getAllByEstado($user->getComercio()==null?'All':$user->getComercio()->getId(), 1),
  846.                     'form' => $form->createView(),
  847.                     'ivas' => $feTabIvaRepository->getActivas()
  848.                 ]);
  849.             }
  850.         }
  851.         return $this->render('ut_facturas/new.html.twig', [
  852.             'user'=>$user,
  853.             'comId' => $user->getComercio()==null?'All':$user->getComercio()->getId(),
  854.             'parametros' => $parametros,
  855.             'forpago' => $forPago,
  856.             'fe_clientes' => $feClientesRepository->getAll($user->getComercio()==null?'All':$user->getComercio()->getId()),
  857.             'fe_productos' => $feProductosRepository->getAllByEstado($user->getComercio()==null?'All':$user->getComercio()->getId(),1,$user->getSucursal()->getId()),
  858.             'ut_factura' => $utFactura,
  859.             'ivas' => $feTabIvaRepository->getActivas(),
  860.             'tipos_credito' => $feTipCreditosRepository->getAllByEstado($user->getComercio()==null?'All':$user->getComercio()->getId(), 1),
  861.             'form' => $form->createView(),
  862.         ]);
  863.     }
  864.     /**
  865.      * Genera Comprobante en PDF para impresion
  866.      *
  867.      * @Route("/comprobante/pdf/{facId}", name="utfacturas_comprobante", methods={"POST","GET"})
  868.      */
  869.     public function comprobanteAction($facIdUtFacturasRepository $utFacturasRepositoryFeFacDetallesRepository $feFacDetallesRepository,
  870.                                       UsersRepository $usersRepositoryFeForPagoRepository $feForPagoRepository)
  871.     {
  872.         if(isset($_GET['tickets'])){
  873.             $tickets json_decode($_GET['tickets']);
  874.         }else{
  875.             $tickets null;
  876.         }
  877.         $em $this->getDoctrine()->getManager();
  878.         $forPago $feForPagoRepository->getAll();
  879.         $utFacturas $utFacturasRepository->find($facId);
  880.         $productos $feFacDetallesRepository->findBy(['facturas'=>$facId]);
  881.         $vendedor $usersRepository->find($utFacturas->getFacUsuario());
  882. // Introducimos HTML de prueba
  883.         $options = new Options();
  884.         $options->set('isRemoteEnabled',TRUE);
  885.         $dompdf = new Dompdf($options);
  886.         $contxt stream_context_create([
  887.             'ssl' => [
  888.                 'verify_peer' => FALSE,
  889.                 'verify_peer_name' => FALSE,
  890.                 'allow_self_signed'=> TRUE
  891.             ]
  892.         ]);
  893.         $dompdf->setHttpContext($contxt);
  894.         $paper_size = array(0,0,215.4334,600);
  895.         $dompdf->set_paper($paper_size);
  896.         $dompdf->set_option('defaultMediaType''all');
  897.         $dompdf->set_option('isFontSubsettingEnabled'true);
  898.         $html $this->renderView('ut_facturas/comprobante.html.twig',array(
  899.             'forPago' => $forPago,
  900.             'utFacturas' => $utFacturas,
  901.             'productos' => $productos,
  902.             'tickets' => $tickets,
  903.             'vendedor' => $vendedor
  904.         ));
  905.         // Load HTML to Dompdf $dompdf->loadHtml($html); // (Optional) Setup the paper size and orientation 'portrait' or 'portrait' $dompdf->setPaper('A4', 'portrait'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser (inline view) $dompdf->stream("mypdf.pdf", [ "Attachment" => false ]); } }
  906.         $dompdf->load_html($html);
  907.         $dompdf->render();
  908.         /*$page_count = $dompdf->get_canvas( )->get_page_number( );
  909.         unset( $dompdf );
  910.         $dompdf = new Dompdf($options);
  911.         $contxt = stream_context_create([
  912.             'ssl' => [
  913.                 'verify_peer' => FALSE,
  914.                 'verify_peer_name' => FALSE,
  915.                 'allow_self_signed'=> TRUE
  916.             ]
  917.         ]);
  918.         $dompdf->setHttpContext($contxt);
  919.         $paper_size = array(0,0,215.4334, 215.4334 * $page_count + 20);
  920.         $dompdf->set_paper($paper_size);
  921.         $html = $this->renderView('ut_facturas/comprobante.html.twig',array(
  922.             'utFacturas' => $utFacturas,
  923.             'productos' => $productos,
  924.             'tickets' => $tickets,
  925.             'vendedor' => $vendedor
  926.         ));
  927.         // Load HTML to Dompdf $dompdf->loadHtml($html); // (Optional) Setup the paper size and orientation 'portrait' or 'portrait' $dompdf->setPaper('A4', 'portrait'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser (inline view) $dompdf->stream("mypdf.pdf", [ "Attachment" => false ]); } }
  928.         $dompdf->load_html($html);
  929.         $dompdf->render();*/
  930.         $dompdf->stream($utFacturas->getFacClave().'.pdf', array("Attachment" => false));
  931.         exit;
  932.     }
  933.     /**
  934.      * CRON proceso de autorizacion de facturas
  935.      *
  936.      * @Route("/autorizacion/cron/", name="utfacturas_autorizacion_cron", methods={"GET"})
  937.      * @throws \SoapFault
  938.      */
  939.     public function cronAction(UtFacturasRepository $utFacturasRepositoryFeFacDetallesRepository $feFacDetallesRepository,
  940.                                FeVentasRepository $feVentasRepositoryFeComerciosRepository $feComerciosRepositoryFeForPagoRepository $feForPagoRepository)
  941.     {
  942.         date_default_timezone_set('America/Guayaquil');
  943.         $em $this->getDoctrine()->getManager();
  944.         $forPago $feForPagoRepository->getAll();
  945.         $utFacturas $utFacturasRepository->getFacPendientes();
  946.         if(count($utFacturas) < 1){
  947.             $mensaje "No existen facturas pendientes o recibidas";
  948.             $response json_encode($mensaje);
  949.             return new Response($response200, array('Content-Type' => 'application/json'));
  950.         }
  951.         $nombre_archivo "logscron.txt";
  952.         file_exists($nombre_archivo);
  953.         $log fopen($nombre_archivo"a+");
  954.         $mensaje "inicio ";
  955.         fwrite($log"-------------"$mensaje"\n");
  956.         fwrite($logdate("d-m-Y H:m:s"). "\n");
  957.         foreach ($utFacturas as $factura) {
  958.             $facId $factura['id'];
  959.             $utFactura $utFacturasRepository->find($facId);
  960.             fwrite($log"\n factura con estado -> "$utFactura->getFacEstado() . " \n");
  961.             $facDetalles $feFacDetallesRepository->findBy(['facturas'=>$facId]);
  962.             fwrite($log"\n id de factura:  "$facId"\n");
  963.             $tipoAmbiente $utFactura->getComercios()->getComAmbiente();
  964.             fwrite($log"\n Ambiente:  "$tipoAmbiente"\n");
  965.             $claveautorizacion $factura['facClave'];
  966.             $ruta 'facturas_generadas/' $claveautorizacion '.xml';
  967.             ini_set('soap.wsdl_cache_enabled''0');
  968.             ini_set('soap.wsdl_cache_ttl''0');
  969.             ini_set('default_socket_timeout'600);
  970.             if($factura['facEstado'] != 'RECIBIDA'){
  971.                 if ($tipoAmbiente == "1") {
  972.                     $url "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl";
  973.                 } else if ($tipoAmbiente == "2") {
  974.                     $url "https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl"// AMBIENTE PRODUCCION ACTIVAR AL ESTAR SEGUROS
  975.                 }
  976.                 $stream_context stream_context_create([
  977.                     'ssl' => [
  978.                         'verify_peer'       => false,
  979.                         'verify_peer_name'  => false,
  980.                         'allow_self_signed' => true
  981.                     ]
  982.                 ]);
  983.                 $options = array(
  984.                     'exceptions' => true,
  985.                     'trace' => 1,
  986.                     'stream_context' => $stream_context,
  987.                 );
  988.                 $client = new \SoapClient($url$options);
  989.                 $x = array();
  990.                 $x['xml'] = file_get_contents($ruta);
  991.                 $result "";
  992.                 $result $client->validarComprobante($x);
  993.                 fwrite($log"\n Result ValidarComprovante:  "json_encode($result). "\n");
  994.                 $array json_decode(json_encode($result), True);
  995.                 //$em->flush();
  996.                 if (@$array['RespuestaRecepcionComprobante']['estado'] == "RECIBIDA") {
  997.                     $mensaje "El comprobante ha sido RECIBIDO";
  998.                     $utFactura->setFacEstado('RECIBIDA');
  999.                     $utFactura->setFacLog($mensaje);
  1000.                     $em->persist($utFactura);
  1001.                     $em->flush();
  1002.                     fwrite($log"\n Factura Recibida \n");
  1003.                 } else {
  1004.                     if (@$array['RespuestaRecepcionComprobante']['estado'] == "DEVUELTA") {
  1005.                         if (@$array['RespuestaRecepcionComprobante']['comprobantes']['comprobante']['mensajes']['mensaje']['mensaje'] == "CLAVE ACCESO REGISTRADA") {
  1006.                             $mensaje "Este comprobante ya ha sido enviado.";
  1007.                         } else {
  1008.                             $mensaje json_encode($array['RespuestaRecepcionComprobante']['comprobantes']['comprobante']) ;
  1009.                         }
  1010.                         $utFactura->setFacEstado('DEVUELTA');
  1011.                         $utFactura->setFacLog($mensaje);
  1012.                         $em->persist($utFactura);
  1013.                         $em->flush();
  1014.                         fwrite($log"\n Factura Devuelta: ".$mensaje." \n");
  1015.                     } else {
  1016.                         $mensaje $array['RespuestaRecepcionComprobante']['estado'];
  1017.                         $utFactura->setFacEstado('ERROR');
  1018.                         $utFactura->setFacLog($mensaje);
  1019.                         $em->persist($utFactura);
  1020.                         $em->flush();
  1021.                         fwrite($log"\n Factura Con Errores: ".$mensaje." \n");
  1022.                     }
  1023.                     $response json_encode($mensaje);
  1024.                     return new Response($response200, array('Content-Type' => 'application/json'));
  1025.                 }
  1026.             }
  1027.             //VALIDAR LA AUTORIZACION DE LA FACTURA
  1028.             if ($tipoAmbiente == "1") {
  1029.                 $urlAutorizacion "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl";
  1030.             } else if ($tipoAmbiente == "2") {
  1031.                 $urlAutorizacion "https://cel.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl"// AMBIENTE PRODUCCION ACTIVAR AL ESTAR SEGUROS
  1032.             }
  1033.             $stream_context stream_context_create([
  1034.                 'ssl' => [
  1035.                     'verify_peer'       => false,
  1036.                     'verify_peer_name'  => false,
  1037.                     'allow_self_signed' => true
  1038.                 ]
  1039.             ]);
  1040.             $options = array(
  1041.                 'exceptions' => true,
  1042.                 'trace' => 1,
  1043.                 'stream_context' => $stream_context
  1044.             );
  1045.             $client = new \SoapClient($urlAutorizacion$options);
  1046.             $peticion = array(
  1047.                 "autorizacionComprobante" => array(
  1048.                     "claveAccesoComprobante" => $claveautorizacion,
  1049.                 )
  1050.             );
  1051.             $resultAutorizacion $client->__soapCall("autorizacionComprobante"$peticion);
  1052.             $array json_decode(json_encode($resultAutorizacion), True);
  1053.             if(count($array['RespuestaAutorizacionComprobante']['autorizaciones']) > 0) {
  1054.                 fwrite($log"\n Despues de RECIBIDA -> " $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['estado'] . "\n");
  1055.                 if ($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['estado'] == "AUTORIZADO") {
  1056.                     $mensaje "El Comprobante ha sido AUTORIZADO";
  1057.                     $doc = new \DOMDocument('1.0''UTF-8');
  1058.                     $root $doc->createElement("autorizacion");
  1059.                     $doc->appendChild($root);
  1060.                     $estado $doc->createElement("estado"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['estado']);
  1061.                     $root->appendChild($estado);
  1062.                     $numeroAutorizacion $doc->createElement("numeroAutorizacion"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['numeroAutorizacion']);
  1063.                     $root->appendChild($numeroAutorizacion);
  1064.                     $fechaAutorizacion $doc->createElement("fechaAutorizacion"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion']);
  1065.                     $root->appendChild($fechaAutorizacion);
  1066.                     $ambiente $doc->createElement("ambiente"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['ambiente']);
  1067.                     $root->appendChild($ambiente);
  1068.                     $prefijo "<";
  1069.                     $posfijo ">";
  1070.                     $comprobanteconcdata htmlspecialchars_decode($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['comprobante']);
  1071.                     $comprobante $doc->createElement("comprobante"$comprobanteconcdata);
  1072.                     $root->appendChild($comprobante);
  1073.                     if (!file_exists('facturas_autorizadas')) {
  1074.                         mkdir('facturas_autorizadas'0755true);
  1075.                     }
  1076.                     $doc->save("./facturas_autorizadas/" $claveautorizacion ".xml");
  1077.                     $utFactura->setFacEstado('AUTORIZADA');
  1078.                     $utFactura->setFacLog($mensaje);
  1079.                     $utFactura->setFacFecRespuesta($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion']);
  1080.                     $em->persist($utFactura);
  1081.                     $comercio $feComerciosRepository->find($utFactura->getComercios()->getId());
  1082.                     if ($comercio->getPlanes()->getPlaNumDocumentos())
  1083.                         $comercio->setComNumDocDisponibles($comercio->getComNumDocDisponibles() - 1);
  1084.                     $em->persist($comercio);
  1085.                     fwrite($log"\n Factura Autorizada \n");
  1086.                     $em->flush();
  1087.                     //CREA CODEBAR
  1088.                     $generator = new BarcodeGeneratorPNG();
  1089.                     $barcode $generator->getBarcode($claveautorizacion$generator::TYPE_CODE_128);
  1090.                     file_put_contents("./codigos_barra/" $claveautorizacion '.png'$barcode);
  1091.                     fwrite($log"\n Código de Barras generado \n");
  1092.                     //CREA PDF RIDE
  1093.                     $options = new Options();
  1094.                     $options->set('isRemoteEnabled'TRUE);
  1095.                     $dompdf = new Dompdf($options);
  1096.                     $contxt stream_context_create([
  1097.                         'ssl' => [
  1098.                             'verify_peer' => FALSE,
  1099.                             'verify_peer_name' => FALSE,
  1100.                             'allow_self_signed' => TRUE
  1101.                         ]
  1102.                     ]);
  1103.                     $dompdf->setHttpContext($contxt);
  1104.                     $dompdf->set_paper('A4');
  1105.                     $html $this->renderView('ut_facturas/' $utFactura->getComercios()->getComFacTemplate() . '/factura.html.twig', array(
  1106.                         'forPago' => $forPago,
  1107.                         'utFactura' => $utFactura,
  1108.                         'existeLogo' => file_exists("./keys/" $utFactura->getFacRuc() . "/logo.png"),
  1109.                         'facDetalles' => $facDetalles,
  1110.                     ));
  1111.                     // Load HTML to Dompdf $dompdf->loadHtml($html); // (Optional) Setup the paper size and orientation 'portrait' or 'portrait' $dompdf->setPaper('A4', 'portrait'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser (inline view) $dompdf->stream("mypdf.pdf", [ "Attachment" => false ]); } }
  1112.                     $dompdf->load_html($html);
  1113.                     $dompdf->render();
  1114.                     $output $dompdf->output();
  1115.                     file_put_contents("./facturas_ride/" $claveautorizacion ".pdf"$output);
  1116.                     fwrite($log"\n PDF RIDE Generado \n");
  1117.                     //CAMBIA ESTADO AL REGISTRO DE VENTA
  1118.                     $venta $feVentasRepository->find($utFactura->getVentas()->getId());
  1119.                     $venta->setVenEstado('FACTURADA');
  1120.                     $em->persist($venta);
  1121.                     $em->flush();
  1122.                     fwrite($log"\n Cambia estado de la venta \n");
  1123.                     //ENVIO DE CORREO
  1124.                     $mail = new PHPMailer(true);
  1125.                     $mail->SMTPOptions = array(
  1126.                         'ssl' => array(
  1127.                             'verify_peer' => false,
  1128.                             'verify_peer_name' => false,
  1129.                             'allow_self_signed' => true
  1130.                         )
  1131.                     );
  1132.                     //$mail->SMTPDebug = 2;
  1133.                     //Luego tenemos que iniciar la validación por SMTP:
  1134.                     $mail->IsSMTP();
  1135.                     $mail->SMTPAuth true;
  1136.                     $mail->SMTPSecure $_ENV['mailer_secure'];
  1137.                     $mail->Host $_ENV['mailer_host'];
  1138.                     $mail->Username $_ENV['mailer_user'];
  1139.                     $mail->Password $_ENV['mailer_password'];
  1140.                     $mail->Port $_ENV['mailer_port'];
  1141.                     $mail->SMTPKeepAlive true;
  1142.                     $mail->Mailer $_ENV['mailer_transport'];
  1143.                     $mail->From $_ENV['mailer_from'];
  1144.                     $mail->FromName $utFactura->getFacNomComercial(); //A RELLENAR Nombre a mostrar del remitente.
  1145.                     $mail->AddAddress("jaimemejiar1980@gmail.com");
  1146.                     $mail->AddAddress($comercio->getComEmail());
  1147.                     if ($factura['facCamAdiEmail'] != '' and $tipoAmbiente == 2) {
  1148.                         $mail->AddAddress($utFactura->getComercios()->getComEmail());
  1149.                         if (filter_var($factura['facCamAdiEmail'], FILTER_VALIDATE_EMAIL)) {
  1150.                             $mail->AddAddress($factura['facCamAdiEmail']);
  1151.                         } else {
  1152.                             fwrite($log"\n mail mo válido \n");
  1153.                         }
  1154.                     } else {
  1155.                         fwrite($log"\n Ambiente de pruebas o correo no válido \n");
  1156.                     }
  1157.                     $archivoPDF "./facturas_ride/" $claveautorizacion ".pdf";
  1158.                     $archivoXML "./facturas_autorizadas/" $claveautorizacion ".xml";
  1159.                     $mail->AddAttachment($archivoXML);
  1160.                     $mail->AddAttachment($archivoPDF);
  1161.                     $mail->IsHTML(true); // El correo se envía como HTML
  1162.                     $fecha = new \DateTime('now');
  1163.                     $mail->Subject utf8_decode("FACTURAS ELECTRONICAS - DOCUMENTO GENERADO"); // Este es el titulo del email.
  1164.                     $body $this->renderView('emails/factura.html.twig', array(
  1165.                         'utFactura' => $utFactura,
  1166.                         'facDetalles' => $facDetalles,
  1167.                         'existeLogo' => file_exists("./keys/" $utFactura->getFacRuc() . "/logo.png"),
  1168.                         //'fecAutorizacion' => $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion'],
  1169.                     ));
  1170.                     $body .= utf8_decode("<br><br><h3>Este correo es enviado automaticamente, favor no responder</h3>");
  1171.                     $mail->Body $body// Mensaje a enviar.
  1172.                     $exito $mail->Send(); // Envía el correo.
  1173.                     //var_dump($mail);
  1174.                     if ($exito) {
  1175.                         $mensaje "El correo fue enviado correctamente.";
  1176.                     } else {
  1177.                         $mensaje "Hubo un problema. Contacta a un administrador.";
  1178.                     }
  1179.                     fwrite($log"\n PDF: -> " $mensaje " \n");
  1180.                 } else {
  1181.                     $mensaje json_encode($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['mensajes']['mensaje']);
  1182.                     /*if(is_array($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['mensajes']['mensaje'])){
  1183.                         dd($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['mensajes']['mensaje']);
  1184.                         $mensaje = $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['mensajes']['mensaje'][0]['mensaje'] . " -> " . $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['mensajes']['mensaje'][0]['informacionAdicional'];
  1185.                     }else{
  1186.                         $mensaje = $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['mensajes']['mensaje']['mensaje'] . " -> " . $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['mensajes']['mensaje']['informacionAdicional'];
  1187.                     }*/
  1188.                     $utFactura->setFacEstado('ERROR-AUT');
  1189.                     $utFactura->setFacLog($mensaje);
  1190.                     $em->persist($utFactura);
  1191.                     fwrite($log"\n Factura Con Errores en la Autorización \n");
  1192.                 }
  1193.                 fwrite($log$mensaje);
  1194.             }else{
  1195.                 $utFactura->setFacEstado('DEVUELTA');
  1196.                 $utFactura->setFacLog("Servicio SRI con intermitencias");
  1197.                 $em->persist($utFactura);
  1198.                 fwrite($log"\n Servicios SRI con errore \n");
  1199.             }
  1200.         }
  1201.         $mensaje "fin";
  1202.         fwrite($log"\n-------------"$mensaje"\n");
  1203.         fclose($log);
  1204.         $response json_encode($mensaje);
  1205.         return new Response($response200, array('Content-Type' => 'application/json'));
  1206.     }
  1207.     /**
  1208.      * @Route("/{id}/show", name="ut_facturas_show", methods={"GET"})
  1209.      */
  1210.     public function show(UtFacturas $utFacturaFeFacDetallesRepository $feFacDetallesRepositoryFeForPagoRepository $feForPagoRepository): Response
  1211.     {
  1212.         $forPago $feForPagoRepository->getAll();
  1213.         $productos $feFacDetallesRepository->findBy(['facturas'=>$utFactura->getId()]);
  1214.         //CREA PDF RIDE
  1215.         $options = new Options();
  1216.         $options->set('isRemoteEnabled',TRUE);
  1217.         $dompdf = new Dompdf($options);
  1218.         $contxt stream_context_create([
  1219.             'ssl' => [
  1220.                 'verify_peer' => FALSE,
  1221.                 'verify_peer_name' => FALSE,
  1222.                 'allow_self_signed'=> TRUE
  1223.             ]
  1224.         ]);
  1225.         $dompdf->setHttpContext($contxt);
  1226.         $dompdf->set_paper('A4');
  1227.         $html $this->renderView('ut_facturas/'$utFactura->getComercios()->getComFacTemplate() .'/factura.html.twig',array(
  1228.             'forPago' => $forPago,
  1229.             'utFactura' => $utFactura,
  1230.             'existeLogo' => file_exists("./keys/".$utFactura->getFacRuc()."/logo.png"),
  1231.             'productos' => $productos,
  1232.             //'fecAutorizacion' => $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion'],
  1233.         ));
  1234.         // Load HTML to Dompdf $dompdf->loadHtml($html); // (Optional) Setup the paper size and orientation 'portrait' or 'portrait' $dompdf->setPaper('A4', 'portrait'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser (inline view) $dompdf->stream("mypdf.pdf", [ "Attachment" => false ]); } }
  1235.         $dompdf->load_html($html);
  1236.         $dompdf->render();
  1237.         $output $dompdf->stream($utFactura->getFacClave().'.pdf', array("Attachment" => false));
  1238.         exit;
  1239.     }
  1240.     /**
  1241.      * @Route("/{id}/edit", name="ut_facturas_edit", methods={"GET","POST"})
  1242.      */
  1243.     public function edit(Request $requestUtFacturas $utFactura): Response
  1244.     {
  1245.         $form $this->createForm(UtFacturasType::class, $utFactura);
  1246.         $form->handleRequest($request);
  1247.         if ($form->isSubmitted() && $form->isValid()) {
  1248.             $this->getDoctrine()->getManager()->flush();
  1249.             return $this->redirectToRoute('ut_facturas_index');
  1250.         }
  1251.         return $this->render('ut_facturas/edit.html.twig', [
  1252.             'ut_factura' => $utFactura,
  1253.             'form' => $form->createView(),
  1254.         ]);
  1255.     }
  1256.     /**
  1257.      * @Route("/{id}", name="ut_facturas_delete", methods={"DELETE"})
  1258.      */
  1259.     public function delete(Request $requestUtFacturas $utFactura): Response
  1260.     {
  1261.         if ($this->isCsrfTokenValid('delete'.$utFactura->getId(), $request->request->get('_token'))) {
  1262.             $entityManager $this->getDoctrine()->getManager();
  1263.             $entityManager->remove($utFactura);
  1264.             $entityManager->flush();
  1265.         }
  1266.         return $this->redirectToRoute('ut_facturas_index');
  1267.     }
  1268.     /**
  1269.      * re envía PDF de la facturas
  1270.      *
  1271.      * @Route("/reenviar-pdf/{id}", name="utfacturas_reenviar_pdf", methods={"GET"})
  1272.      * @throws \SoapFault
  1273.      */
  1274.     public function reenviarPdf(UtFacturas $utFacturaFeFacDetallesRepository $feFacDetallesRepositoryFeForPagoRepository $feForPagoRepository)
  1275.     {
  1276.         $forPago $feForPagoRepository->getAll();
  1277.         date_default_timezone_set('America/Guayaquil');
  1278.         $em $this->getDoctrine()->getManager();
  1279.         $facDetalles $feFacDetallesRepository->findBy(['facturas'=>$utFactura->getId()]);
  1280.         $tipoAmbiente $utFactura->getComercios()->getComAmbiente();
  1281.         $claveautorizacion $utFactura->getFacClave();
  1282.         //ENVIO DE CORREO
  1283.         $mail = new PHPMailer(true);
  1284.         $mail->SMTPOptions = array(
  1285.             'ssl' => array(
  1286.                 'verify_peer' => false,
  1287.                 'verify_peer_name' => false,
  1288.                 'allow_self_signed' => true
  1289.             )
  1290.         );
  1291.         //$mail->SMTPDebug = 2;
  1292.         //Luego tenemos que iniciar la validación por SMTP:
  1293.         $mail->IsSMTP();
  1294.         $mail->SMTPAuth true;
  1295.         $mail->SMTPSecure $_ENV['mailer_secure'];
  1296.         $mail->Host $_ENV['mailer_host'];
  1297.         $mail->Username $_ENV['mailer_user'];
  1298.         $mail->Password $_ENV['mailer_password'];
  1299.         $mail->Port $_ENV['mailer_port'];
  1300.         $mail->SMTPKeepAlive true;
  1301.         $mail->Mailer $_ENV['mailer_transport'];
  1302.         $mail->From $_ENV['mailer_from'];
  1303.         $mail->FromName $utFactura->getFacNomComercial(); //A RELLENAR Nombre a mostrar del remitente.
  1304.         $mail->AddAddress("jaimemejiar1980@gmail.com");
  1305.         $mail->AddAddress($utFactura->getComercios()->getComEmail());
  1306.         if($utFactura->getFacCamAdiEmail() != '' and $tipoAmbiente == 2) {
  1307.             $mail->AddAddress($utFactura->getComercios()->getComEmail());
  1308.             if (filter_var($utFactura->getFacCamAdiEmail(), FILTER_VALIDATE_EMAIL)) {
  1309.                 $mail->AddAddress($utFactura->getFacCamAdiEmail());
  1310.             }
  1311.         }
  1312.         $archivoPDF "./facturas_ride/".$claveautorizacion.".pdf";
  1313.         $archivoXML "./facturas_autorizadas/".$claveautorizacion.".xml";
  1314.         $mail->AddAttachment($archivoXML);
  1315.         $mail->AddAttachment($archivoPDF);
  1316.         $mail->IsHTML(true); // El correo se envía como HTML
  1317.         $fecha = new \DateTime('now');
  1318.         $mail->Subject utf8_decode("FACTURAS ELECTRONICAS - DOCUMENTO GENERADO"); // Este es el titulo del email.
  1319.         $body $this->renderView('emails/factura.html.twig',array(
  1320.             'forPago' => $forPago,
  1321.             'utFactura' => $utFactura,
  1322.             'facDetalles' => $facDetalles,
  1323.             'existeLogo' => file_exists("./keys/".$utFactura->getFacRuc()."/logo.png"),
  1324.             //'fecAutorizacion' => $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion'],
  1325.         ));
  1326.         $body .= utf8_decode("<br><br><h3>Este correo es enviado automaticamente, favor no responder</h3>");
  1327.         $mail->Body $body// Mensaje a enviar.
  1328.         $exito $mail->Send(); // Envía el correo.
  1329.         //var_dump($mail);
  1330.         if ($exito) {
  1331.             $mensaje =  "El correo fue enviado correctamente.";
  1332.         } else {
  1333.             $mensaje "Hubo un problema. Contacta a un administrador.";
  1334.         }
  1335.         return $this->redirectToRoute('ut_facturas_index');
  1336.         //$response = json_encode($mensaje);
  1337.         //return new Response($mensaje, 200, array('Content-Type' => 'application/json'));
  1338.     }
  1339. }