src/Controller/UtRetencionesController.php line 836

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\FeRetImpuestos;
  4. use App\Entity\UtRetenciones;
  5. use App\Form\UtRetencionesType;
  6. use App\Repository\FeCajasRepository;
  7. use App\Repository\FeComerciosRepository;
  8. use App\Repository\FeRetImpuestosRepository;
  9. use App\Repository\FeRetPorIvaRepository;
  10. use App\Repository\FeRetPorRentaRepository;
  11. use App\Repository\UtFacComprasRepository;
  12. use App\Repository\UtRetencionesRepository;
  13. use Dompdf\Options;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\Validator\Constraints\DateTime;
  19. use PHPMailer\PHPMailer\PHPMailer;
  20. use Picqer\Barcode\BarcodeGeneratorPNG;
  21. use Dompdf\Dompdf;
  22. /**
  23.  * @Route("/ut/retenciones")
  24.  */
  25. class UtRetencionesController extends AbstractController
  26. {
  27.     /** CAMBIA DE ESTADO AL REGISTRO
  28.      *
  29.      * @Route("/cambia-estado-registro/{id}/{estado}", name="ut_retenciones_cambia_estado", methods={"GET"})
  30.      */
  31.     public function cambiaEstado($id$estadoUtRetencionesRepository $utRetencionesRepository): Response
  32.     {
  33.         $em $this->getDoctrine()->getManager();
  34.         $user $this->getUser();
  35.         $registro $em->getRepository(UtRetenciones::class)->find($id);
  36.         $registro->setRetEstado($estado);
  37.         $em->persist($registro);
  38.         $em->flush();
  39.         return $this->render('ut_retenciones/index.html.twig', [
  40.             'ut_retenciones' => $utRetencionesRepository->getAll($user->getComercio()==null?'All':$user->getComercio()->getId())
  41.         ]);
  42.     }
  43.     /**
  44.      * @Route("/", name="ut_retenciones_index", methods={"GET"})
  45.      */
  46.     public function index(UtRetencionesRepository $utRetencionesRepository): Response
  47.     {
  48.         $user $this->getUser();
  49.         return $this->render('ut_retenciones/index.html.twig', [
  50.             'ut_retenciones' => $utRetencionesRepository->getAll($user->getComercio()==null?'All':$user->getComercio()->getId())
  51.         ]);
  52.     }
  53.     /**
  54.      * @Route("/new/{facComId}", name="ut_retenciones_new", methods={"GET","POST"})
  55.      */
  56.     public function new(Request $request$facComIdUtFacComprasRepository $utFacComprasRepositoryFeRetPorIvaRepository $feRetPorIvaRepository,
  57.                         FeRetPorRentaRepository $feRetPorRentaRepositoryFeCajasRepository $feCajasRepository): Response
  58.     {
  59.         $utRetencione = new UtRetenciones();
  60.         $utRetencione->setFaccompras($utFacComprasRepository->find($facComId));
  61.         $form $this->createForm(UtRetencionesType::class, $utRetencione);
  62.         $form->handleRequest($request);
  63.         if ($form->isSubmitted() && $form->isValid()) {
  64.             $arreglo $request->request->all();
  65.             //dd($arreglo);
  66.             $em $this->getDoctrine()->getManager();
  67.             function generacionCodigoNumerico()
  68.             {
  69.                 for( $i 1$i <= 8$i++ ) {
  70.                     $cod[$i] = rand(09);
  71.                 }
  72.                 return implode$cod );
  73.             }
  74.             function invertirCadena$cadena ) {
  75.                 $cadenaInvertida "";
  76.                 for ( $x strlen$cadena ) - 1$x >= 0$x-- ) {
  77.                     $cadenaInvertida $cadenaInvertida substr$cadena$x);
  78.                 }
  79.                 return $cadenaInvertida;
  80.             }
  81.             function obtenerSumaPorDigitos$cadena ) {
  82.                 $pivote 2;
  83.                 $longitudCadena strlen$cadena );
  84.                 $cantidadTotal 0;
  85.                 $b 1;
  86.                 for ( $i 0$i $longitudCadena$i++ ) {
  87.                     if ( $pivote == ) {
  88.                         $pivote 2;
  89.                     }
  90.                     //$temporal = intval(substr($cadena,$i, $b));
  91.                     $temporal intvalsubstr$cadena$i) );
  92.                     $b++;
  93.                     $temporal $temporal $pivote;
  94.                     $pivote++;
  95.                     $cantidadTotal $cantidadTotal $temporal;
  96.                 }
  97.                 $cantidadTotal 11 $cantidadTotal 11;
  98.                 if ( $cantidadTotal == 11 )
  99.                     $cantidadTotal 0;
  100.                 if ( $cantidadTotal == 10 )
  101.                     $cantidadTotal 1;
  102.                 return $cantidadTotal;
  103.             }
  104.             if(isset($arreglo['retiva'])){
  105.                 $impuesto = new FeRetImpuestos();
  106.                 $impuesto->setRetenciones($utRetencione);
  107.                 $impuesto->setRetImpBasImponible($arreglo['retIvaValor']);
  108.                 $impuesto->setRetImpCodigo(2);
  109.                 $impuesto->setRetImpCodRetencion($arreglo['retIvaCodigo']);
  110.                 $impuesto->setRetImpCodSustento('01');
  111.                 $impuesto->setRetImpFecEmiSustento($utRetencione->getFaccompras()->getFacComFecEmision());
  112.                 $impuesto->setRetImpNumDocSustento($utRetencione->getFaccompras()->getFacComEstablecimiento().$utRetencione->getFaccompras()->getFacComPunEmision().$utRetencione->getFaccompras()->getFacComSecuencial());
  113.                 $impuesto->setRetImpPorcentaje($arreglo['retIvaPorcentaje']);
  114.                 $impuesto->setRetImpValRetenido(round($arreglo['retValor'] ,2));
  115.                 $em->persist($impuesto);
  116.             }
  117.             if(isset($arreglo['retrenta'])){
  118.                 $impuesto = new FeRetImpuestos();
  119.                 $impuesto->setRetenciones($utRetencione);
  120.                 $impuesto->setRetImpBasImponible($arreglo['retRenValor']);
  121.                 $impuesto->setRetImpCodigo(1);
  122.                 $impuesto->setRetImpCodRetencion($arreglo['retRenCodigo']);
  123.                 $impuesto->setRetImpCodSustento('01');
  124.                 $impuesto->setRetImpFecEmiSustento($utRetencione->getFaccompras()->getFacComFecEmision());
  125.                 $impuesto->setRetImpNumDocSustento($utRetencione->getFaccompras()->getFacComEstablecimiento().$utRetencione->getFaccompras()->getFacComPunEmision().$utRetencione->getFaccompras()->getFacComSecuencial());
  126.                 $impuesto->setRetImpPorcentaje($arreglo['retRenPorcentaje']);
  127.                 $impuesto->setRetImpValRetenido(round($arreglo['renValor'] ,2));
  128.                 $em->persist($impuesto);
  129.             }
  130.             $caja =  $feCajasRepository->find($arreglo['retCajid']);
  131.             $ticNum intval($caja->getCajNumRetencion()) + 1;
  132.             $caja->setCajNumRetencion($ticNum);
  133.             $em->persist($caja);
  134.             //GENERA CLAVE
  135.             $tipoAmbiente $utRetencione->getFaccompras()->getSucursales()->getComercios()->getComAmbiente();
  136.             $codigoNumerico generacionCodigoNumerico();
  137.             $fecha = (new \DateTime($utRetencione->getRetFecEmision()))->format('dmY');
  138.             $tipoComprobante $utRetencione->getRetCodDoc();
  139.             $numRuc $utRetencione->getRetRuc();
  140.             $serie $utRetencione->getRetEstablecimiento().$utRetencione->getRetPunEmision();
  141.             $numeroComprobante str_pad($ticNum9"0"STR_PAD_LEFT);
  142.             $TipoEmision $utRetencione->getRetTipEmision();
  143.             $codigoNume "$fecha$tipoComprobante$numRuc$tipoAmbiente$serie$numeroComprobante$codigoNumerico$TipoEmision";
  144.             $claveautorizacion "$codigoNumeobtenerSumaPorDigitosinvertirCadena$codigoNume ) );
  145.             //GUARDA LA RETENCION +
  146.             $utRetencione->setRetClave($claveautorizacion);
  147.             $utRetencione->setRetSecuencial($numeroComprobante);
  148.             $em->persist($utRetencione);
  149.             $em->flush();
  150.             if($utRetencione->getRetObligado() == 1){
  151.                 $obligado "SI";
  152.             }else{
  153.                 $obligado "NO";
  154.             }
  155.             //genera xml
  156.             $xml '<?xml version="1.0" encoding="UTF-8"?>
  157.                 <comprobanteRetencion id="comprobante" version="1.0.0">
  158.                     <infoTributaria>
  159.                         <ambiente>'.$tipoAmbiente.'</ambiente>
  160.                         <tipoEmision>1</tipoEmision>
  161.                         <razonSocial>'.$utRetencione->getRetRazSocial().'</razonSocial>
  162.                         <nombreComercial>'.$utRetencione->getRetNomComercial().'</nombreComercial>
  163.                         <ruc>'.$utRetencione->getRetRuc().'</ruc>
  164.                         <claveAcceso>'.$claveautorizacion.'</claveAcceso>
  165.                         <codDoc>'.$utRetencione->getRetCodDoc().'</codDoc>
  166.                         <estab>'.$utRetencione->getRetEstablecimiento().'</estab>
  167.                         <ptoEmi>'.$utRetencione->getRetPunEmision().'</ptoEmi>
  168.                         <secuencial>'.$numeroComprobante.'</secuencial>
  169.                         <dirMatriz>'.$utRetencione->getRetDirMatriz().'</dirMatriz>
  170.                     </infoTributaria>
  171.                     <infoCompRetencion>
  172.                         <fechaEmision>'. (new \DateTime($utRetencione->getRetFecEmision()))->format('d/m/Y') .'</fechaEmision>
  173.                         <dirEstablecimiento>'.$utRetencione->getRetDirEstablecimiento().'</dirEstablecimiento>
  174.                         <obligadoContabilidad>' $obligado '</obligadoContabilidad>
  175.                         <tipoIdentificacionSujetoRetenido>'.$utRetencione->getRetTipIdeSujeto().'</tipoIdentificacionSujetoRetenido>
  176.                         <razonSocialSujetoRetenido>'.$utRetencione->getRetRazSocSujeto().'</razonSocialSujetoRetenido>
  177.                         <identificacionSujetoRetenido>'.$utRetencione->getRetIdeSujeto().'</identificacionSujetoRetenido>
  178.                         <periodoFiscal>'.$utRetencione->getRetPerFiscal().'</periodoFiscal>
  179.                     </infoCompRetencion>
  180.                     <impuestos>';
  181.             if(isset($arreglo['retiva'])){
  182.                 $xml .='
  183.                         <impuesto>
  184.                             <codigo>2</codigo>
  185.                             <codigoRetencion>'$arreglo['retIvaCodigo'] .'</codigoRetencion>
  186.                             <baseImponible>'.$arreglo['retIvaValor'].'</baseImponible>
  187.                             <porcentajeRetener>'.$arreglo['retIvaPorcentaje'].'</porcentajeRetener>
  188.                             <valorRetenido>'.round($arreglo['retValor'] ,2).'</valorRetenido>
  189.                             <codDocSustento>01</codDocSustento>
  190.                             <numDocSustento>'.$utRetencione->getFaccompras()->getFacComEstablecimiento().$utRetencione->getFaccompras()->getFacComPunEmision().$utRetencione->getFaccompras()->getFacComSecuencial().'</numDocSustento>
  191.                             <fechaEmisionDocSustento>'.(new \DateTime($utRetencione->getFaccompras()->getFacComFecEmision()))->format('d/m/Y').'</fechaEmisionDocSustento>
  192.                         </impuesto>';
  193.             }
  194.             if(isset($arreglo['retrenta'])){
  195.                 $xml .='
  196.                         <impuesto>
  197.                             <codigo>1</codigo>
  198.                             <codigoRetencion>'$arreglo['retRenCodigo'] .'</codigoRetencion>
  199.                             <baseImponible>'.$arreglo['retRenValor'].'</baseImponible>
  200.                             <porcentajeRetener>'.$arreglo['retRenPorcentaje'].'</porcentajeRetener>
  201.                             <valorRetenido>'.round($arreglo['renValor'] ,2).'</valorRetenido>
  202.                             <codDocSustento>01</codDocSustento>
  203.                             <numDocSustento>'.$utRetencione->getFaccompras()->getFacComEstablecimiento().$utRetencione->getFaccompras()->getFacComPunEmision().$utRetencione->getFaccompras()->getFacComSecuencial().'</numDocSustento>
  204.                             <fechaEmisionDocSustento>'.(new \DateTime($utRetencione->getFaccompras()->getFacComFecEmision()))->format('d/m/Y').'</fechaEmisionDocSustento>
  205.                         </impuesto>';
  206.             }
  207.             $xml .='
  208.                     </impuestos>
  209.                     <infoAdicional>
  210.                         <campoAdicional nombre="Email">'.$utRetencione->getRetCamAdiEmail().'</campoAdicional>
  211.                     </infoAdicional>
  212.                 </comprobanteRetencion>';
  213.             $doc = new \DOMDocument(1.0);
  214.             $doc->loadXML($xml);
  215.             $doc->saveXML();
  216.             $doc->save('retenciones_generadas/'.$claveautorizacion.'.xml');
  217. //////////////////////////////////////////////////////////////////////////////////        //FIRMA XML
  218.             function hex_to_base64$hex ) {
  219.                 $return '';
  220.                 foreach ( str_split$hex) as $pair ) {
  221.                     $return .= chrhexdec$pair ) );
  222.                 }
  223.                 return base64_encode$return );
  224.             }
  225.             function getModulo($utRetencione) {
  226.                 //$numRuc = $_SESSION[ 'rucempresa' ];
  227.                 $data openssl_pkey_get_detailsopenssl_pkey_get_privatefile_get_contents"keys/".$utRetencione->getRetRuc()."/key.pem" ) ) );
  228.                 $modulus base64_encode$data'rsa' ][ 'n' ] );
  229.                 return $modulus;
  230.             }
  231.             function getPublicKey($utRetencione) {
  232.                 //$numRuc = $_SESSION[ 'rucempresa' ];
  233.                 $data file_get_contents"keys/".$utRetencione->getRetRuc()."/cert.pem" );
  234.                 $begin "CERTIFICATE-----";
  235.                 $end "-----END";
  236.                 $pem_data substr$datastrpos$data$begin ) + strlen$begin ), strpos$data$end ) - ( strpos$data$begin ) + strlen$begin ) ) );
  237.                 return str_replace"\n"""$pem_data );
  238.             }
  239.             function pem2der$pem_data ) {
  240.                 $begin "CERTIFICATE-----";
  241.                 $end "-----END";
  242.                 $pem_data substr$pem_datastrpos$pem_data$begin ) + strlen$begin ) );
  243.                 $pem_data substr$pem_data0strpos$pem_data$end ) );
  244.                 $der base64_decode$pem_data );
  245.                 return $der;
  246.             }
  247.             $pem_data file_get_contents"keys/".$utRetencione->getRetRuc()."/cert.pem" );
  248.             $pem2der pem2der$pem_data );
  249.             $ruta 'retenciones_generadas/'.$claveautorizacion.'.xml';
  250.             $doc = new \DOMDocument(1.0);
  251.             $doc->load$rutaLIBXML_NOEMPTYTAG );
  252.             $root $doc->getElementsByTagName"comprobanteRetencion" )->item);
  253.             $x $doc->getElementsByTagName"comprobanteRetencion" )->item)->C14N();
  254.             $digestRef3 hex_to_base64sha1$x ) );
  255.             $llavepublica wordwrapgetPublicKey($utRetencione), 76"\n"true );
  256.             $modulo wordwrapgetModulo($utRetencione), 76"\n"true );
  257.             $DigestValueCert hex_to_base64sha1$pem2der ) );
  258.             $certdata = array();
  259.             $certdata openssl_x509_parsefile_get_contents"keys/".$utRetencione->getRetRuc()."/cert.pem" ), );
  260.             $ds "ds:";
  261.             $etsi "etsi:";
  262.             function generateRandomNumber$digits ) {
  263.                 if ( $digits ) {
  264.                     return generateRandomNumber$digits ) . generateRandomNumber);
  265.                 }
  266.                 return "" randpow10$digits ), pow10$digits ) - );
  267.             }
  268.             $nombreIssuer "CN=" $certdata'issuer' ][ 'commonName' ];
  269.             //$nombreIssuer .= ",L=".$certdata[ 'issuer' ][ 'localityName' ];
  270.             if(isset($certdata'issuer' ][ 'localityName' ])){
  271.                 $nombreIssuer .= ",L=".$certdata'issuer' ][ 'localityName' ];
  272.             }else{
  273.                 //if(isset($certdata[ 'subject' ][ 'localityName' ])){
  274.                 //    $nombreIssuer .= ",L=".$certdata[ 'subject' ][ 'localityName' ];
  275.                 //}
  276.             }
  277.             $nombreIssuer .= ",OU="$certdata'issuer' ][ 'organizationalUnitName' ] . ",O=" $certdata'issuer' ][ 'organizationName' ] . ",C=" $certdata'issuer' ][ 'countryName' ];
  278.             $pos strpos($certdata['issuer']['commonName'], 'ANF');
  279.             if($pos !== false) {
  280.                 $nombreIssuer .= ",2.5.4.5=#130d31373932363031323135303031";
  281.             }
  282.             $pos strpos($certdata['issuer']['commonName'], 'UANATACA');
  283.             if($pos !== false) {
  284.                 $nombreIssuer .= ",2.5.4.97=#0c0f56415445532d413636373231343939";
  285.             }
  286.             $numerodeserie $certdata'serialNumber' ];
  287.             $CertificateNumber generateRandomNumber);
  288.             $SignatureNumber generateRandomNumber);
  289.             $SignedPropertiesNumber generateRandomNumber);
  290.             $SignedInfoNumber generateRandomNumber);
  291.             $SignedPropertiesIDNumber generateRandomNumber);
  292.             $ReferenceIDNumber generateRandomNumber);
  293.             $SignatureValueNumber generateRandomNumber);
  294.             $ObjectNumber generateRandomNumber);
  295.             $signature $doc->createElement$ds "Signature" );
  296.             $signature->setAttribute'xmlns:ds''http://www.w3.org/2000/09/xmldsig#' );
  297.             $signature->setAttribute'xmlns:etsi''http://uri.etsi.org/01903/v1.3.2#' );
  298.             $signature->setAttribute'Id''Signature' $SignatureNumber );
  299.             $root->appendChild$signature );
  300.             $SignedInfo $doc->createElement$ds "SignedInfo" );
  301.             $SignedInfo->setAttribute'Id''Signature-SignedInfo' $SignedInfoNumber );
  302.             $signature->appendChild$SignedInfo );
  303.             $CanonicalizationMethod $doc->createElement$ds "CanonicalizationMethod" );
  304.             $CanonicalizationMethod->setAttribute'Algorithm''http://www.w3.org/TR/2001/REC-xml-c14n-20010315' );
  305.             $SignedInfo->appendChild$CanonicalizationMethod );
  306.             $SignatureMethod $doc->createElement$ds "SignatureMethod" );
  307.             $SignatureMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#rsa-sha1' );
  308.             $SignedInfo->appendChild$SignatureMethod );
  309.             $Reference1 $doc->createElement$ds "Reference" );
  310.             $Reference1->setAttribute'Id''SignedPropertiesID' $SignedPropertiesIDNumber );
  311.             $Reference1->setAttribute'Type''http://uri.etsi.org/01903#SignedProperties' );
  312.             $Reference1->setAttribute'URI''#Signature' $SignatureNumber '-SignedProperties' $SignedPropertiesNumber );
  313.             $SignedInfo->appendChild$Reference1 );
  314.             $DigestMethod $doc->createElement$ds "DigestMethod"'' );
  315.             $Reference1->appendChild$DigestMethod );
  316.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  317.             $DigestValue1 $doc->createElement$ds "DigestValue" );
  318.             $Reference1->appendChild$DigestValue1 );
  319.             $Reference2 $doc->createElement$ds "Reference" );
  320.             $Reference2->setAttribute'URI''#Certificate' $CertificateNumber );
  321.             $SignedInfo->appendChild$Reference2 );
  322.             $DigestMethod $doc->createElement$ds "DigestMethod"'' );
  323.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  324.             $Reference2->appendChild$DigestMethod );
  325.             $DigestValue2 $doc->createElement$ds "DigestValue" );
  326.             $Reference2->appendChild$DigestValue2 );
  327.             $Reference3 $doc->createElement$ds "Reference" );
  328.             $Reference3->setAttribute'Id''Reference-ID-' $ReferenceIDNumber );
  329.             $Reference3->setAttribute'URI''#comprobante' );
  330.             $SignedInfo->appendChild$Reference3 );
  331.             $Transforms $doc->createElement$ds "Transforms" );
  332.             $Reference3->appendChild$Transforms );
  333.             $Transform $doc->createElement$ds "Transform" );
  334.             $Transform->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#enveloped-signature' );
  335.             $Transforms->appendChild$Transform );
  336.             $DigestMethod $doc->createElement$ds "DigestMethod" );
  337.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  338.             $Reference3->appendChild$DigestMethod );
  339.             $DigestValue3 $doc->createElement$ds "DigestValue"$digestRef3 );
  340.             $Reference3->appendChild$DigestValue3 );
  341. //se acaba el signed info
  342.             $SignatureValue $doc->createElement$ds "SignatureValue" );
  343.             $SignatureValue->setAttribute'Id''SignatureValue' $SignatureValueNumber );
  344.             $signature->appendChild$SignatureValue );
  345. //SE acaba el valor de la firma
  346.             $KeyInfo $doc->createElement$ds "KeyInfo" );
  347.             $KeyInfo->setAttribute'Id''Certificate' $CertificateNumber );
  348.             $signature->appendChild$KeyInfo );
  349.             $X509Data $doc->createElement$ds "X509Data" );
  350.             $KeyInfo->appendChild$X509Data );
  351.             $X509Certificate $doc->createElement$ds "X509Certificate""\n" $llavepublica "\n" );
  352.             $X509Data->appendChild$X509Certificate );
  353.             $KeyValue $doc->createElement$ds "KeyValue" );
  354.             $KeyInfo->appendChild$KeyValue );
  355.             $RSAKeyValue $doc->createElement$ds "RSAKeyValue" );
  356.             $KeyValue->appendChild$RSAKeyValue );
  357.             $Modulus $doc->createElement$ds "Modulus""\n" $modulo "\n" );
  358.             $RSAKeyValue->appendChild$Modulus );
  359.             $Exponent $doc->createElement$ds "Exponent""AQAB" );
  360.             $RSAKeyValue->appendChild$Exponent );
  361.             $SignatureValue $doc->getElementsByTagName"SignatureValue" )->item);
  362. //COMIENZA OBJECT
  363.             $doc->save$rutaLIBXML_NOEMPTYTAG );
  364.             $doc->load$rutaLIBXML_NOEMPTYTAG );
  365.             $Object $doc->createElement$ds "Object" );
  366.             $Object->setAttribute'Id''Signature' $SignatureNumber '-Object' $ObjectNumber );
  367.             $signature $doc->getElementsByTagName'Signature' )->item);
  368.             $signature->appendChild$Object );
  369.             $QualifyingProperties $doc->createElement$etsi "QualifyingProperties" );
  370.             $QualifyingProperties->setAttribute'Target''#Signature' $SignatureNumber );
  371.             $Object->appendChild$QualifyingProperties );
  372.             $SignedProperties $doc->createElement$etsi "SignedProperties" );
  373.             $SignedProperties->setAttribute'Id''Signature' $SignatureNumber "-SignedProperties" $SignedPropertiesNumber );
  374.             $QualifyingProperties->appendChild$SignedProperties );
  375.             $SignedSignatureProperties $doc->createElement$etsi "SignedSignatureProperties" );
  376.             $SignedProperties->appendChild$SignedSignatureProperties );
  377.             $date = new \DateTime"now", new \DateTimeZone'America/Guayaquil' ) );
  378.             $SigningTime $doc->createElement$etsi "SigningTime"$date->format'c' ) );
  379.             $SignedSignatureProperties->appendChild$SigningTime );
  380.             $SigningCertificate $doc->createElement$etsi "SigningCertificate" );
  381.             $SignedSignatureProperties->appendChild$SigningCertificate );
  382.             $Cert $doc->createElement$etsi "Cert" );
  383.             $SigningCertificate->appendChild$Cert );
  384.             $CertDigest $doc->createElement$etsi "CertDigest" );
  385.             $Cert->appendChild$CertDigest );
  386.             $DigestMethod $doc->createElement$ds "DigestMethod" );
  387.             $DigestMethod->setAttribute'Algorithm''http://www.w3.org/2000/09/xmldsig#sha1' );
  388.             $CertDigest->appendChild$DigestMethod );
  389.             $DigestValue $doc->createElement$ds "DigestValue"$DigestValueCert );
  390.             $CertDigest->appendChild$DigestValue );
  391.             $IssuerSerial $doc->createElement$etsi "IssuerSerial" );
  392.             $Cert->appendChild$IssuerSerial );
  393.             $X509IssuerName $doc->createElement$ds "X509IssuerName"$nombreIssuer ); //CAMBIAR RAZON ESTATIOCOS
  394.             $IssuerSerial->appendChild$X509IssuerName );
  395.             $X509SerialNumber $doc->createElement$ds "X509SerialNumber"$numerodeserie ); //CAMBIAR RAZON ESTATIOCOS
  396.             $IssuerSerial->appendChild$X509SerialNumber );
  397.             $SignedDataObjectProperties $doc->createElement$etsi "SignedDataObjectProperties" );
  398.             $SignedProperties->appendChild$SignedDataObjectProperties );
  399.             $DataObjectFormat $doc->createElement$etsi "DataObjectFormat" );
  400.             $DataObjectFormat->setAttribute"ObjectReference""#Reference-ID-" $ReferenceIDNumber );
  401.             $SignedDataObjectProperties->appendChild$DataObjectFormat );
  402.             $SignedDataObjectProperties $doc->createElement$etsi "Description"'contenido comprobante' );
  403.             $DataObjectFormat->appendChild$SignedDataObjectProperties );
  404.             $SignedDataObjectProperties $doc->createElement$etsi "MimeType"'text/xml' );
  405.             $DataObjectFormat->appendChild$SignedDataObjectProperties );
  406.             if ( $doc->save$rutaLIBXML_NOEMPTYTAG ) ) {
  407.                 $doc->preserveWhiteSpace true;
  408.                 $doc->formatOutput false;
  409.                 $doc->load$ruta );
  410.                 $primerDigestRef hex_to_base64sha1$doc->getElementsByTagName"SignedProperties" )->item)->C14N() ) );
  411.                 $segundoDigestRef hex_to_base64sha1$doc->getElementsByTagName"KeyInfo" )->item)->C14N() ) );
  412.                 $reference1 $doc->getElementsByTagName"Reference" )->item);
  413.                 $DigestValue1 $reference1->getElementsByTagName"DigestValue" )->item);
  414.                 $text $doc->createTextNode$primerDigestRef );
  415.                 $text $DigestValue1->appendChild$text );
  416.                 $reference2 $doc->getElementsByTagName"Reference" )->item);
  417.                 $DigestValue2 $reference2->getElementsByTagName"DigestValue" )->item);
  418.                 $text $doc->createTextNode$segundoDigestRef );
  419.                 $text $DigestValue2->appendChild$text );
  420.                 $doc->save$rutaLIBXML_NOEMPTYTAG );
  421.                 $doc->load$ruta );
  422.                 // VALOR DE SignatureValue
  423.                 $pkey file_get_contents"keys/".$utRetencione->getRetRuc()."/key.pem" );
  424.                 openssl_sign$doc->getElementsByTagName"SignedInfo" )->item)->C14N(), $sigval$pkey );
  425.                 $valorFirma wordwrapbase64_encode$sigval ), 76"\n"true );
  426.                 $SignatureValue $doc->getElementsByTagName"SignatureValue" )->item);
  427.                 $text $doc->createTextNode"\n" $valorFirma "\n" );
  428.                 $text $SignatureValue->appendChild$text );
  429.                 if ( $doc->save$rutaLIBXML_NOEMPTYTAG ) ) {
  430.                     //GUARDA XML EN BD
  431.                     $utRetencione->setRetEstado("FIRMADA");
  432.                     $utRetencione->setRetXml(strval($doc->saveXML()));
  433.                     $em->persist($utRetencione);
  434.                     $em->flush();
  435.                 }
  436.             }
  437. //////////////////////////////////////////////////////////////////////////////////        //FIN FIRMA XML
  438.             return $this->redirectToRoute('ut_retenciones_autorizacion',['id'=>$utRetencione->getId()]);
  439.         }
  440.         return $this->render('ut_retenciones/new.html.twig', [
  441.             'ut_retencione' => $utRetencione,
  442.             'fe_retiva' => $feRetPorIvaRepository->getByEstado(1),
  443.             'fe_retrenta' => $feRetPorRentaRepository->getByEstado(1),
  444.             'form' => $form->createView(),
  445.             'fe_cajas' => $feCajasRepository->getBySucursal($utFacComprasRepository->find($facComId)->getSucursales()->getId()),
  446.             'facCompra'=> $utFacComprasRepository->find($facComId),
  447.             'regDetalles' => $utFacComprasRepository->getRegDetalles($facComId)
  448.         ]);
  449.     }
  450.     /**
  451.      * @Route("/{id}", name="ut_retenciones_show", methods={"GET"})
  452.      */
  453.     public function show(UtRetenciones $utRetencione): Response
  454.     {
  455.         return $this->render('ut_retenciones/show.html.twig', [
  456.             'ut_retencione' => $utRetencione,
  457.         ]);
  458.     }
  459.     /**
  460.      * @Route("/{id}/edit", name="ut_retenciones_edit", methods={"GET","POST"})
  461.      */
  462.     public function edit(Request $requestUtRetenciones $utRetencione): Response
  463.     {
  464.         $form $this->createForm(UtRetencionesType::class, $utRetencione);
  465.         $form->handleRequest($request);
  466.         if ($form->isSubmitted() && $form->isValid()) {
  467.             $this->getDoctrine()->getManager()->flush();
  468.             return $this->redirectToRoute('ut_retenciones_index');
  469.         }
  470.         return $this->render('ut_retenciones/edit.html.twig', [
  471.             'ut_retencione' => $utRetencione,
  472.             'form' => $form->createView(),
  473.         ]);
  474.     }
  475.     /**
  476.      * @Route("/{id}", name="ut_retenciones_delete", methods={"DELETE"})
  477.      */
  478.     public function delete(Request $requestUtRetenciones $utRetencione): Response
  479.     {
  480.         if ($this->isCsrfTokenValid('delete'.$utRetencione->getId(), $request->request->get('_token'))) {
  481.             $entityManager $this->getDoctrine()->getManager();
  482.             $entityManager->remove($utRetencione);
  483.             $entityManager->flush();
  484.         }
  485.         return $this->redirectToRoute('ut_retenciones_index');
  486.     }
  487.     /**
  488.      *  proceso de autorizacion de comprobantes de retención
  489.      *
  490.      * @Route("/manual/autorizacion/{id}", name="ut_retenciones_autorizacion", methods={"GET"})
  491.      * @throws \SoapFault
  492.      */
  493.     public function autorizacionAction(UtRetenciones $utRetencioneUtRetencionesRepository $utRetencionesRepositoryFeComerciosRepository $feComerciosRepository): Response
  494.     {
  495.         date_default_timezone_set('America/Guayaquil');
  496.         $em $this->getDoctrine()->getManager();
  497.         //$utFacturas = $em->getRepository('AppBundle:UtFacturas')->getFacPendientes();
  498.         //$ut = $utFacturasRepository->getFacPendientes();
  499.         //$usuario = $this->container->getParameter('database_user');
  500.         //$contrasena = $this->container->getParameter('database_password');
  501.         //$servidor = $this->container->getParameter('database_host');
  502.         //$basededatos = $this->container->getParameter('database_name');
  503.         //$conexion = mysqli_connect( $servidor, $usuario, $contrasena ) or die ("No se ha podido conectar al servidor de Base de datos");
  504.         //$db = mysqli_select_db( $conexion, $basededatos );
  505.         $nombre_archivo "logscron_retenciones.txt";
  506.         file_exists($nombre_archivo);
  507.         $log fopen($nombre_archivo"a+");
  508.         $mensaje "inicio";
  509.         fwrite($log"-------------"$mensaje"\n");
  510.         fwrite($logdate("d-m-Y H:m:s"). "\n");
  511.         //foreach ($utFacturas as $factura) {
  512.         //$facId = $factura['id'];
  513.         //$utFactura = $utFacturasRepository->find($facId);
  514.         $impuestos $utRetencione->getRetimpuestos();
  515.         fwrite($log"\n id de retencion:  "$utRetencione->getId(). "\n");
  516.         $tipoAmbiente $utRetencione->getFaccompras()->getSucursales()->getComercios()->getComAmbiente();
  517.         fwrite($log"\n Ambiente:  "$tipoAmbiente"\n");
  518.         $claveautorizacion $utRetencione->getRetClave();
  519.         $ruta 'retenciones_generadas/' $claveautorizacion '.xml';
  520.         ini_set('soap.wsdl_cache_enabled''0');
  521.         ini_set('soap.wsdl_cache_ttl''0');
  522.         ini_set('default_socket_timeout'600);
  523.         if($utRetencione->getRetEstado() != 'RECIBIDA'){
  524.             if ($tipoAmbiente == "1") {
  525.                 $url "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl";
  526.             } else if ($tipoAmbiente == "2") {
  527.                 $url "https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl"// AMBIENTE PRODUCCION ACTIVAR AL ESTAR SEGUROS
  528.             }
  529.             $stream_context stream_context_create([
  530.                 'ssl' => [
  531.                     'verify_peer'       => false,
  532.                     'verify_peer_name'  => false,
  533.                     'allow_self_signed' => true
  534.                 ]
  535.             ]);
  536.             $options = array(
  537.                 'exceptions' => true,
  538.                 'trace' => 1,
  539.                 'stream_context' => $stream_context
  540.             );
  541.             $client = new \SoapClient($url$options);
  542.             $x = array();
  543.             $x['xml'] = file_get_contents($ruta);
  544.             $result "";
  545.             $result $client->validarComprobante($x);
  546.             fwrite($log"\n Resultado ValidarComprovante:  "json_encode($result). "\n");
  547.             $array json_decode(json_encode($result), True);
  548.             $em->flush();
  549.             if (@$array['RespuestaRecepcionComprobante']['estado'] == "RECIBIDA") {
  550.                 $mensaje "El comprobante de retencion ha sido RECIBIDO";
  551.                 $utRetencione->setRetEstado('RECIBIDA');
  552.                 $utRetencione->setRetLog($mensaje);
  553.                 $em->persist($utRetencione);
  554.                 $em->flush();
  555.                 fwrite($log"\n Comprobante de Retención Recibido \n");
  556.             } else {
  557.                 if (@$array['RespuestaRecepcionComprobante']['estado'] == "DEVUELTA") {
  558.                     if (@$array['RespuestaRecepcionComprobante']['comprobantes']['comprobante']['mensajes']['mensaje']['mensaje'] == "CLAVE ACCESO REGISTRADA") {
  559.                         $mensaje "Este comprobante de retención ya ha sido enviado.";
  560.                     } else {
  561.                         $mensaje $array['RespuestaRecepcionComprobante']['comprobantes']['comprobante']['mensajes']['mensaje']['mensaje'] ;
  562.                     }
  563.                     $utRetencione->setRetEstado('DEVUELTA');
  564.                     $utRetencione->setRetLog($mensaje);
  565.                     $em->persist($utRetencione);
  566.                     $em->flush();
  567.                     fwrite($log"\n Comprobante de Retención Devuelto: ".$mensaje." \n");
  568.                 } else {
  569.                     $mensaje $array['RespuestaRecepcionComprobante']['estado'];
  570.                     $utRetencione->setRetEstado('ERROR');
  571.                     $utRetencione->setRetLog($mensaje);
  572.                     $em->persist($utRetencione);
  573.                     $em->flush();
  574.                     fwrite($log"\n Comprobante de Retención Con Errores: ".$mensaje." \n");
  575.                 }
  576.                 $response json_encode($mensaje);
  577.                 return new Response($response200, array('Content-Type' => 'application/json'));
  578.             }
  579.         }
  580.         //VALIDAR LA AUTORIZACION DE LA FIRMA
  581.         if ($tipoAmbiente == "1") {
  582.             $urlAutorizacion "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl";
  583.         } else if ($tipoAmbiente == "2") {
  584.             $urlAutorizacion "https://cel.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl"// AMBIENTE PRODUCCION ACTIVAR AL ESTAR SEGUROS
  585.         }
  586.         $stream_context stream_context_create([
  587.             'ssl' => [
  588.                 'verify_peer'       => false,
  589.                 'verify_peer_name'  => false,
  590.                 'allow_self_signed' => true
  591.             ]
  592.         ]);
  593.         $options = array(
  594.             'exceptions' => true,
  595.             'trace' => 1,
  596.             'stream_context' => $stream_context
  597.         );
  598.         $client = new \SoapClient($urlAutorizacion$options);
  599.         $peticion = array(
  600.             "autorizacionComprobante" => array(
  601.                 "claveAccesoComprobante" => $claveautorizacion,
  602.             )
  603.         );
  604.         $resultAutorizacion $client->__soapCall("autorizacionComprobante"$peticion);
  605.         $array json_decode(json_encode($resultAutorizacion), True);
  606.         fwrite($log"\n Despues de RECIBIDO".json_encode($array['RespuestaAutorizacionComprobante']['autorizaciones'])."\n");
  607.         if (isset($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']) && $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['estado'] == "AUTORIZADO") {
  608.             $mensaje "El Comprobante de Retención ha sido AUTORIZADO";
  609.             $doc = new \DOMDocument('1.0''UTF-8');
  610.             $root $doc->createElement("autorizacion");
  611.             $doc->appendChild($root);
  612.             $estado $doc->createElement("estado"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['estado']);
  613.             $root->appendChild($estado);
  614.             $numeroAutorizacion $doc->createElement("numeroAutorizacion"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['numeroAutorizacion']);
  615.             $root->appendChild($numeroAutorizacion);
  616.             $fechaAutorizacion $doc->createElement("fechaAutorizacion"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion']);
  617.             $root->appendChild($fechaAutorizacion);
  618.             $ambiente $doc->createElement("ambiente"$array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['ambiente']);
  619.             $root->appendChild($ambiente);
  620.             $prefijo "<";
  621.             $posfijo ">";
  622.             $comprobanteconcdata htmlspecialchars_decode($prefijo "![CDATA[" $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['comprobante'] . "]]" $posfijo);
  623.             $comprobante $doc->createElement("comprobante"$comprobanteconcdata);
  624.             $root->appendChild($comprobante);
  625.             if (!file_exists('retenciones_autorizadas')) {
  626.                 mkdir('retenciones_autorizadas'0755true);
  627.             }
  628.             $doc->save("./retenciones_autorizadas/" $claveautorizacion ".xml");
  629.             $utRetencione->setRetEstado('AUTORIZADA');
  630.             $utRetencione->setRetLog("Fue Autorizada");
  631.             $utRetencione->setRetFecRespuesta($array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion']);
  632.             $em->persist($utRetencione);
  633.             $comercio $feComerciosRepository->find($utRetencione->getFaccompras()->getSucursales()->getComercios()->getId());
  634.             $comercio->setComNumDocDisponibles($comercio->getComNumDocDisponibles() - 1);
  635.             $em->persist($comercio);
  636.             fwrite($log"\n Comprobante de Retencion Autorizado \n");
  637.             $em->flush();
  638.             //CREA CODEBAR
  639.             $generator = new BarcodeGeneratorPNG();
  640.             $barcode $generator->getBarcode($claveautorizacion$generator::TYPE_CODE_128);
  641.             file_put_contents("./codigos_barra/".$claveautorizacion.'.png'$barcode);
  642.             fwrite($log"\n Código de Barras generado \n");
  643.             //CREA PDF RIDE
  644.             $options = new Options();
  645.             $options->set('isRemoteEnabled',TRUE);
  646.             $dompdf = new Dompdf($options);
  647.             $contxt stream_context_create([
  648.                 'ssl' => [
  649.                     'verify_peer' => FALSE,
  650.                     'verify_peer_name' => FALSE,
  651.                     'allow_self_signed'=> TRUE
  652.                 ]
  653.             ]);
  654.             $dompdf->setHttpContext($contxt);
  655.             $dompdf->set_paper('A4');
  656.             $html $this->renderView('ut_retenciones/retencion.html.twig',array(
  657.                 'utRetencion' => $utRetencione,
  658.                 'existeLogo' => file_exists("./keys/".$utRetencione->getRetRuc()."/logo.png"),
  659.                 'impuestos' => $impuestos,
  660.                 //'fecAutorizacion' => $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion'],
  661.             ));
  662.             // 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 ]); } }
  663.             $dompdf->load_html($html);
  664.             $dompdf->render();
  665.             $output $dompdf->output();
  666.             file_put_contents("./retenciones_ride/".$claveautorizacion.".pdf"$output);
  667.             fwrite($log"\n PDF RIDE Generado \n");
  668.             //CAMBIA ESTADO AL REGISTRO DE VENTA
  669.             $em->flush();
  670. //ENVIO DE CORREO
  671.             $mail = new PHPMailer(true);
  672.             $mail->SMTPOptions = array(
  673.                 'ssl' => array(
  674.                     'verify_peer' => false,
  675.                     'verify_peer_name' => false,
  676.                     'allow_self_signed' => true
  677.                 )
  678.             );
  679.             //$mail->SMTPDebug = 2;
  680. //Luego tenemos que iniciar la validación por SMTP:
  681.             $mail->IsSMTP();
  682.             $mail->SMTPAuth true;
  683.             $mail->SMTPSecure $_ENV['mailer_secure'];
  684.             $mail->Host $_ENV['mailer_host'];
  685.             $mail->Username $_ENV['mailer_user'];
  686.             $mail->Password $_ENV['mailer_password'];
  687.             $mail->Port $_ENV['mailer_port'];
  688.             $mail->SMTPKeepAlive true;
  689.             $mail->Mailer $_ENV['mailer_transport'];
  690.             $mail->From $_ENV['mailer_from'];
  691.             $mail->FromName $utRetencione->getRetNomComercial(); //A RELLENAR Nombre a mostrar del remitente.
  692.             $mail->AddAddress("jaimemejiar1980@gmail.com");
  693.             $mail->AddAddress($comercio->getComEmail());
  694.             if($utRetencione->getRetCamAdiEmail() != '' and $tipoAmbiente == 2) {
  695.                 $mail->AddAddress($utRetencione->getFaccompras()->getSucursales()->getComercios()->getComEmail());
  696.                 if (filter_var($utRetencione->getRetCamAdiEmail(), FILTER_VALIDATE_EMAIL)) {
  697.                     $mail->AddAddress($utRetencione->getRetCamAdiEmail());
  698.                 }
  699.             }
  700.             $archivoPDF "./retenciones_ride/".$claveautorizacion.".pdf";
  701.             $archivoXML "./retenciones_autorizadas/".$claveautorizacion.".xml";
  702.             $mail->AddAttachment($archivoXML);
  703.             $mail->AddAttachment($archivoPDF);
  704.             $mail->IsHTML(true); // El correo se envía como HTML
  705.             $fecha = new \DateTime('now');
  706.             $mail->Subject utf8_decode("COMPROBANTE DE RETENCION - DOCUMENTO GENERADO"); // Este es el titulo del email.
  707.             $body $this->renderView('emails/retencion.html.twig',array(
  708.                 'utRetencion' => $utRetencione,
  709.                 'existeLogo' => file_exists("./keys/".$utRetencione->getRetRuc()."/logo.png"),
  710.                 'impuestos' => $impuestos,
  711.                 //'fecAutorizacion' => $array['RespuestaAutorizacionComprobante']['autorizaciones']['autorizacion']['fechaAutorizacion'],
  712.             ));
  713.             $body .= utf8_decode("<br><br><h3>Este correo es enviado automaticamente, favor no responder</h3>");
  714.             $mail->Body $body// Mensaje a enviar.
  715.             $exito $mail->Send(); // Envía el correo.
  716.             //var_dump($mail);
  717.             if ($exito) {
  718.                 $mensaje =  "El correo fue enviado correctamente.";
  719.             } else {
  720.                 $mensaje "Hubo un problema. Contacta a un administrador.";
  721.             }
  722.             fwrite($log"\n ".$mensaje." \n");
  723.         } else {
  724.             $mensaje json_encode($array['RespuestaAutorizacionComprobante']['autorizaciones']);
  725.             $utRetencione->setRetEstado('ERROR-AUT');
  726.             $utRetencione->setRetLog($mensaje);
  727.             $em->persist($utRetencione);
  728.             fwrite($log"\n Comprobante de Retención Con Errores en la Autorización \n");
  729.         }
  730.         //print_r($mensaje);
  731.         fwrite($log$mensaje );
  732.         $mensaje "fin";
  733.         fwrite($log"\n-------------"$mensaje"\n");
  734.         fclose($log);
  735.         $response json_encode($mensaje);
  736.         $user $this->getUser();
  737.         return $this->render('ut_retenciones/index.html.twig', [
  738.             'ut_retenciones' => $user != null $utRetencionesRepository->getAll($user->getComercio()==null?'All':$user->getComercio()->getId()): null
  739.         ]);
  740.     }
  741.     /**
  742.      * CRON proceso de actualizacion de retenciones
  743.      *
  744.      * @Route("/autorizacion/cron/", name="utretenciones_autorizacion_cron", methods={"GET"})
  745.      * @throws \SoapFault
  746.      */
  747.     public function cronAction(UtRetencionesRepository $utRetencionesRepositoryFeComerciosRepository $feComerciosRepository )
  748.     {
  749.         date_default_timezone_set('America/Guayaquil');
  750.         $em $this->getDoctrine()->getManager();
  751.         //$utFacturas = $em->getRepository('AppBundle:UtFacturas')->getFacPendientes();
  752.         $utRetenciones $utRetencionesRepository->getRetPendientes();
  753.         if(count($utRetenciones) < 1){
  754.             $mensaje "No existen facturas pendientes o recibidas";
  755.             $response json_encode($mensaje);
  756.             return new Response($response200, array('Content-Type' => 'application/json'));
  757.         }
  758.         $nombre_archivo "logscron.txt";
  759.         file_exists($nombre_archivo);
  760.         $log fopen($nombre_archivo"a+");
  761.         $mensaje "inicio ";
  762.         fwrite($log"-------------"$mensaje"\n");
  763.         fwrite($logdate("d-m-Y H:m:s"). "\n");
  764.         foreach ($utRetenciones as $retencion) {
  765.             $ret $utRetencionesRepository->find($retencion['id']);
  766.             $this->autorizacionAction($ret$utRetencionesRepository$feComerciosRepository);
  767.         }
  768.         $mensaje "fin";
  769.         fwrite($log"\n-------------"$mensaje"\n");
  770.         fclose($log);
  771.         $response json_encode($mensaje);
  772.         return new Response($response200, array('Content-Type' => 'application/json'));
  773.     }
  774. }