<?php
/*si se quita el reporting marca muchos errores de variables no definidas en crearXML.php*/
error_reporting(0);
require_once ('../vendor/autoload.php');
require_once ('numerosAletras.php');
require_once ('crearXML.php');
require_once ('cadedaSello.php');
use \Mpdf\Mpdf;


class Pdf{
	public function __construct(){
      
	}

	public function configuration_footer(){
		$headerFooterContent = '
		<page_footer>
			<p style="text-align: center">
				Este documento es una representación impresa de un Comprobante Fiscal Digital a través de Internet
				versión 
				<br/><span class="pie_pagina">página {PAGENO} de {nb}</span>
			</p>
    	</page_footer>';
        $oddEvenConfiguration = [
            'L' => [ // L for Left part of the header
              'content' => '',
            ],
            'C' => [ // C for Center part of the header
              'content' => $headerFooterContent,
            ],
            'R' => [
              'content' => '',
            ],
            'line' => 0, // That's the relevant parameter
        ];
        $headerFooterConfiguration = [
          'odd' => $oddEvenConfiguration,
          'even' => $oddEvenConfiguration
        ];

        return $headerFooterConfiguration;
	}

	public function header(){
		$header = "<html>
		<head>
			<style  type='text/css'>
			.titulo{font-family: Montserrat,sans-serif;text-align:center;aling-items:center;font-size:14px}
			body {font-family: Montserrat,sans-serif; font-size: 14px;}
			.images{width:100px; height:100px;}
			.resultado{color:#7e7e7e;}
			span{color:black;}
			@page *{
               margin-top: 1.50cm;
               margin-bottom: 1.50cm;
               margin-left: 1.50cm;
               margin-right: 1.50cm;
            }
			</style>
		</head>
		<body>
			<div class='divContenido'>";
		return $header;
		}

	public function footer(){
	
		$footer = "</div>
		</body>
	</html>";
		return $footer;
	}	
	
	//vista preliminar factura
	public function generate_pdf_vistapre($rutalogo,$datosdeluusairo,$folio,$seriefolios,$datosdelcliente,$filas,$datacongf,$datainfoform,$certificados,$tipoXml){

		date_default_timezone_set('America/Guatemala');
		$fecha_actual =date('Y-m-d\TH:i:s');
        $mpdf = new Mpdf(['tempDir' =>  '../public']);
		$h = $this -> header();
		$f = $this -> footer();
        $path='';
		if($tipoXml==1){
			$path="public/temp/".$datosdeluusairo["RFC"]."/Facturas/";
			//marca un warning cuando existe
			if(!file_exists("../".$path)){
                mkdir("../".$path,0777,true);
            }
			//mkdir("../".$path, 0777,true);
		}else{
			$path="public/comprobantesFiscales/".$datosdeluusairo["RFC"]."/Facturas/";
			//marca un warning cuando existe
			if(!file_exists("../".$path)){
               mkdir("../".$path,0777,true);
            }
			//mkdir("../".$path, 0777,true);
		}
		
		if($seriefolios==''){
		 	$serieFac='SN';
		}else{
			$serieFac=$seriefolios;
		}	
		
		$name_xml = $datosdeluusairo["RFC"]."_".$folio."_".$serieFac.".xml";
		$name_xml_zip = $datosdeluusairo["RFC"]."_".$folio."_".$serieFac;
		
		
		$sello='';
		$xml=generarXML($datosdeluusairo,$datainfoform,$filas,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml);
        file_put_contents("../".$path.$name_xml, $xml);
       
	#### para crear el sello y pasarlo al xml	
		if($tipoXml==2){
			$sello=generarSello($path.$name_xml,$certificados[0]["ruta_certificado"],$certificados[0]["ruta_key"],$certificados[0]["pws_key"]);
			$xml=generarXML($datosdeluusairo,$datainfoform,$filas,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml);
			file_put_contents("../".$path.$name_xml, $xml);
		}
	### para crear el pdf con qr
		if($tipoXml==1){

            /*Esta sección se desactivara cuando en el PDF vaya en el nombre del emisor diferente a publico en general*/
			/*$xml = simplexml_load_file("../".$path.$name_xml);
			$ns = $xml->getNamespaces(true);
            $xml->registerXPathNamespace('c', $ns['cfdi']);

			foreach ($xml->xpath('//c:Comprobante//c:Receptor') as $Receptor){ 
               if($Receptor['Rfc'] == 'XAXX010101000' || $Receptor['Rfc'] == 'XEXX010101000'){
            	 $Receptor['Nombre'] = $datosdelcliente['nombre'].' '.$datosdelcliente['a_paterno'].' '.$datosdelcliente['a_materno'];
            	 $Repector['DomicilioFiscalReceptor'] = $datosdelcliente['idcp'];
               }
            }
            $xml->asXml("../".$path.$name_xml);*/
            
			$pdfcfdi=generar_pdf($path.$name_xml,$path,$datosdeluusairo["RFC"]."_".$folio."_".$serieFac);  
            
            //es un archivo temporal, no afecta si se queda con el nombre del emisor
			/*foreach ($xml->xpath('//c:Comprobante//c:Receptor') as $Receptor){ 
               if($Receptor['Rfc'] == 'XAXX010101000' || $Receptor['Rfc'] == 'XEXX010101000'){
            	 $Receptor['Nombre'] = "PUBLICO EN GENERAL";
               }
            }
            $xml->asXml("../".$path.$name_xml);*/
		} 
		//return  $pdfcfdi;
        $response = array(
            'op' => 'ok',
            'status' => true,
			'rutaXml' => "../".$path.$name_xml,
			'rutaZip' => "../".$path.$name_xml_zip,
			'contZip' => $name_xml,
			'file' => "data:application/pdf;base64,".base64_encode($pdfcfdi)
            //'file' => "data:text/plain;charset=utf-8;base64,".base64_encode($pdfcfdi)
        );
        die(json_encode($response));
	}


	//vista preliminar comprobante
	public function generate_pdf_vistapre_comp($rutalogo,$datosdeluusairo,$folio,$seriefolios,$datosdelcliente,$filas,$datacongf,$datainfoform,$certificados,$tipoXml,$NoCertificado,$Certificadotext,$f_pago,$h_pago,$m_pago,$s_pago,$formapago,$tipmoneda,$tipodecambio,$elrfcbando,$elnocuentabanco,$elrfcbandoI,$elnocuentabancoI,$datacomplementopagos,$CP_relacion,$CP_emitidos_uuid,$ingresacc,$detalles_agr_comPag,$numoperacion,$cerpago,$cadorgpago,$sellopago,$c_TipoCadena){
		
		date_default_timezone_set('America/Guatemala');
		$fecha_actual =date('Y-m-d\TH:i:s');
       
        $mpdf = new Mpdf(['tempDir' =>  '../public']);
		$h = $this -> header();
		$f = $this -> footer();
		$path='';

		if($tipoXml==1){
			$path="public/temp/".$datosdeluusairo["RFC"]."/ComplementosPagos/";
			mkdir("../".$path, 0777,true);
		}else{
			$path="public/comprobantesFiscales/".$datosdeluusairo["RFC"]."/ComplementosPagos/";
			mkdir("../".$path, 0777,true);
		}
		
		if($seriefolios==''){
		 	$serieFac='SN';
		}else{
			$serieFac=$seriefolios;
		}

		$name_xml = $datosdeluusairo["RFC"]."_".$folio."_".$serieFac.".xml";	
		
		$fecha_pagos=$f_pago.'T'.$h_pago.':'.$m_pago.':'.$s_pago;
		$sello='';

		$xml=generarXML_comp($datosdeluusairo,$datainfoform,$filas,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml,$NoCertificado,$Certificadotext,$fecha_pagos,$formapago,$tipmoneda,$tipodecambio,$elrfcbando,$elnocuentabanco,$elrfcbandoI,$elnocuentabancoI,$datacomplementopagos,$datacongf,$CP_relacion,$CP_emitidos_uuid,$ingresacc,$detalles_agr_comPag,$numoperacion,$cerpago,$cadorgpago,$sellopago,$c_TipoCadena);
        
        file_put_contents("../".$path.$name_xml, $xml);
	#### para crear el sello y pasarlo al xml	
		if($tipoXml==2){
			$sello=generarSello($path.$name_xml,$certificados[0]["ruta_certificado"],$certificados[0]["ruta_key"],$certificados[0]["pws_key"]);
			
			$xml=generarXML_comp($datosdeluusairo,$datainfoform,$filas,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml,$NoCertificado,$Certificadotext,$fecha_pagos,$formapago,$tipmoneda,$tipodecambio,$elrfcbando,$elnocuentabanco,$elrfcbandoI,$elnocuentabancoI,$datacomplementopagos,$datacongf,$CP_relacion,$CP_emitidos_uuid,$ingresacc,$detalles_agr_comPag,$numoperacion,$cerpago,$cadorgpago,$sellopago,$c_TipoCadena);
			file_put_contents("../".$path.$name_xml, $xml);
		}
	### para crear el pdf con qr
		if($tipoXml==1){
			$pdfcfdi=generar_pdf($path.$name_xml,$path,$datosdeluusairo["RFC"]."_".$folio."_".$serieFac);
		}
		
        $response = array(
            'op' => 'ok',
            'status' => true,
			'rutaXml' => "../".$path.$name_xml,
			'rutaZip' => "../".$path.$datosdeluusairo["RFC"]."_"."$folio"."_"."$serieFac",
			'contZip' => $name_xml,
            'file' => "data:application/pdf;base64,".base64_encode($pdfcfdi)
        );
		
        die(json_encode($response));	
	}

	//vista preliminar notas de credito
	public function generate_pdf_vistapre_NC($rutalogo,$datosdeluusairo,$folio,$seriefolios,$datosdelcliente,$detalles_facturas,$datacongf,$datainfoformNC,$certificados,$tipoXml/*,$filas_fact*/,$detalles_agr_facturas){
		date_default_timezone_set('America/Guatemala');
		$fecha_actual =date('Y-m-d\TH:i:s');
        $mpdf = new Mpdf(['tempDir' =>  '../public']);
		$h = $this -> header();
		$f = $this -> footer();
        $path='';

		if($tipoXml==1){
			$path="public/temp/".$datosdeluusairo["RFC"]."/NotasCredito/";
			mkdir("../".$path, 0777,true);
		}else{
			$path="public/comprobantesFiscales/".$datosdeluusairo["RFC"]."/NotasCredito/";
			mkdir("../".$path, 0777,true);
		}
		
		if($seriefolios==''){
		 	$serieFac='SN';
		}else{
			$serieFac=$seriefolios;
		}

		$name_xml= $datosdeluusairo["RFC"]."_".$folio."_".$serieFac.".xml";	
		
		
		$sello='';
		$xml=generarXML_NC($datosdeluusairo,$datainfoformNC,$detalles_facturas,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml/*,$filas_fact*/,$detalles_agr_facturas);
        file_put_contents("../".$path.$name_xml, $xml);
	#### para crear el sello y pasarlo al xml	
		if($tipoXml==2){
			$sello=generarSello($path.$name_xml,$certificados[0]["ruta_certificado"],$certificados[0]["ruta_key"],$certificados[0]["pws_key"]);
			$xml=generarXML_NC($datosdeluusairo,$datainfoformNC,$detalles_facturas,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml/*,$filas_fact*/,$detalles_agr_facturas);
			file_put_contents("../".$path.$name_xml, $xml);
		}
	### para crear el pdf con qr
		if($tipoXml==1){
			$pdfcfdi=generar_pdf($path.$name_xml,$path,$datosdeluusairo["RFC"]."_".$folio."_".$serieFac);
		}
		 
        $response = array(
            'op' => 'ok',
            'status' => true,
			'rutaXml' => "../".$path.$name_xml,
			'rutaZip' => "../".$path.$datosdeluusairo["RFC"]."_"."$folio"."_"."$serieFac",
			'contZip' => $name_xml,
            'file' => "data:application/pdf;base64,".base64_encode($pdfcfdi)
        );
        die(json_encode($response));	
	}


	public function generate_pdf_vistapre_cartaP($rutalogo,$datosdeluusairo,$folio,$seriefolios,$datosdelcliente,$dataProductosCarta,$datacongf,$datainfoformCartaP,$certificados,$tipoXml,$dataUbicaciones,$dataFiguras,$datamarcancias,$datatipotransp){

		date_default_timezone_set('America/Guatemala');
		$fecha_actual =date('Y-m-d\TH:i:s');
        $mpdf = new Mpdf(['tempDir' =>  '../public']);
		$h = $this -> header();
		$f = $this -> footer();
        $path='';
		if($tipoXml==1){
			$path="public/temp/".$datosdeluusairo["RFC"]."/CartaPorte/";
			//marca un warning cuando existe
			if(!file_exists("../".$path)){
                mkdir("../".$path,0777,true);
            }
			//mkdir("../".$path, 0777,true);
		}else{
			$path="public/comprobantesFiscales/".$datosdeluusairo["RFC"]."/CartaPorte/";
			//marca un warning cuando existe
			if(!file_exists("../".$path)){
               mkdir("../".$path,0777,true);
            }
			//mkdir("../".$path, 0777,true);
		}
		
		if($seriefolios==''){
		 	$serieFac='SN';
		}else{
			$serieFac=$seriefolios;
		}	
		
		$name_xml = $datosdeluusairo["RFC"]."_".$folio."_".$serieFac.".xml";
		$name_xml_zip = $datosdeluusairo["RFC"]."_".$folio."_".$serieFac;
		
		
		$sello='';
		$xml=generarXML_cartaP($datosdeluusairo,$datainfoformCartaP,$dataProductosCarta,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml,$dataUbicaciones,$dataFiguras,$datamarcancias,$datatipotransp);
        file_put_contents("../".$path.$name_xml, $xml);
       
	#### para crear el sello y pasarlo al xml	
		if($tipoXml==2){
			$sello=generarSello($path.$name_xml,$certificados[0]["ruta_certificado"],$certificados[0]["ruta_key"],$certificados[0]["pws_key"]);
			$xml=generarXML_cartaP($datosdeluusairo,$datainfoformCartaP,$dataProductosCarta,$datosdelcliente,$folio,$seriefolios,$sello,$fecha_actual,$tipoXml,$dataUbicaciones,$dataFiguras,$datamarcancias,$datatipotransp);
			file_put_contents("../".$path.$name_xml, $xml);
		}
	### para crear el pdf con qr
		if($tipoXml==1){

            /*Esta sección se desactivara cuando en el PDF vaya en el nombre del emisor diferente a publico en general*/
			/*$xml = simplexml_load_file("../".$path.$name_xml);
			$ns = $xml->getNamespaces(true);
            $xml->registerXPathNamespace('c', $ns['cfdi']);

			foreach ($xml->xpath('//c:Comprobante//c:Receptor') as $Receptor){ 
               if($Receptor['Rfc'] == 'XAXX010101000' || $Receptor['Rfc'] == 'XEXX010101000'){
            	 $Receptor['Nombre'] = $datosdelcliente['nombre'].' '.$datosdelcliente['a_paterno'].' '.$datosdelcliente['a_materno'];
            	 $Repector['DomicilioFiscalReceptor'] = $datosdelcliente['idcp'];
               }
            }
            $xml->asXml("../".$path.$name_xml);*/
            
			$pdfcfdi=generar_pdf($path.$name_xml,$path,$datosdeluusairo["RFC"]."_".$folio."_".$serieFac);  
            
            //es un archivo temporal, no afecta si se queda con el nombre del emisor
			/*foreach ($xml->xpath('//c:Comprobante//c:Receptor') as $Receptor){ 
               if($Receptor['Rfc'] == 'XAXX010101000' || $Receptor['Rfc'] == 'XEXX010101000'){
            	 $Receptor['Nombre'] = "PUBLICO EN GENERAL";
               }
            }
            $xml->asXml("../".$path.$name_xml);*/
		} 
		//return  $pdfcfdi;
        $response = array(
            'op' => 'ok',
            'status' => true,
			'rutaXml' => "../".$path.$name_xml,
			'rutaZip' => "../".$path.$name_xml_zip,
			'contZip' => $name_xml,
			'file' => "data:application/pdf;base64,".base64_encode($pdfcfdi)
            //'file' => "data:text/plain;charset=utf-8;base64,".base64_encode($pdfcfdi)
        );
        die(json_encode($response));
	}

	//pdf xml timbrado
	public function generate_pdftimbrado($rutaXML){ 
		
        #desbaratar la ruta principal para conseguir la ruta destino
		$DXml = explode("/", $rutaXML);
        $destinoPDF=$DXml[1].'/'.$DXml[2].'/'.$DXml[3].'/'.$DXml[4].'/'.$DXml[5].'/';
        $rutaXML=$DXml[1].'/'.$DXml[2].'/'.$DXml[3].'/'.$DXml[4].'/'.$DXml[5].'/'.$DXml[6];
        $arcPDF=$DXml[6];
		#desbaratar el archivo para poder concatenar .pdf y no .xml
        $Apdf = explode(".", $arcPDF);
		$archivoPDF=$Apdf[0];

		/*
        Leer el archivo modificar los datos cuando sea publico en general
		*/
        
		$pdfcfdi=generar_pdf($rutaXML,$destinoPDF,$archivoPDF);
		
        $response = array(
            'op' => 'ok',
            'status' => true,
            'file' => "data:text/plain;charset=utf-8;base64,".base64_encode($pdfcfdi)
        );
		
        die(json_encode($response));
		
	}

	public function generate_XMLtimbrado($rutaXML){ 
        #desbaratar la ruta principal para conseguir la ruta destino
		$DXml = explode("/", $rutaXML);
        $destinoPDF=$DXml[0].'/'.$DXml[1].'/'.$DXml[2].'/'.$DXml[3].'/'.$DXml[4].'/'.$DXml[5].'/';
        $arcPDF=$DXml[6];
		#desbaratar el archivo para poder concatenar .pdf y no .xml
        $Apdf = explode(".", $arcPDF);
		$archivoPDF=$Apdf[0];
		$xml = file_get_contents($rutaXML);

        $response = array(
            'op' => 'ok',
            'status' => true,
            'file' => "data:application/xml;base64,".base64_encode($xml)
        );
		
        die(json_encode($response));
		
	}

	public function generate_XMLadmin($rutaXML,$tipo){ 
		
		//$rutaXML=$path.'/'.$XML;
		
		if($tipo==1){
        	$DXml = explode("/", $rutaXML);
	       	$arcPDF=$DXml[5];
			#desbaratar el archivo para poder concatenar .pdf y no .xml
	        $Apdf = explode(".", $arcPDF);
			$archivoPDF=$Apdf[0];
        }
		
			
        if($tipo==2){
			$DXml = explode("/", $rutaXML);
	        $arcPDF=$DXml[6];
			#desbaratar el archivo para poder concatenar .pdf y no .xml
	        $Apdf = explode(".", $arcPDF);
			$archivoPDF=$Apdf[0];
		}

		$xml = file_get_contents($rutaXML);

        $response = array(
            'op' => 'ok',
            'status' => true,
            'archivoXML' => $archivoPDF,
            'file' => "data:application/xml;base64,".base64_encode($xml)
        );
		
        die(json_encode($response));
		
	}

	public function generate_pdfadmin($rutaXML,$tipo){ 
		
        #desbaratar la ruta principal para conseguir la ruta destino

        if($tipo==1){
        	$DXml = explode("/", $rutaXML);
	        $destinoPDF=$DXml[1].'/'.$DXml[2].'/'.$DXml[3].'/'.$DXml[4].'/';
	        $rutaXML=$DXml[1].'/'.$DXml[2].'/'.$DXml[3].'/'.$DXml[4].'/'.$DXml[5];
	        $arcPDF=$DXml[5];
			#desbaratar el archivo para poder concatenar .pdf y no .xml
	        $Apdf = explode(".", $arcPDF);
			$archivoPDF=$Apdf[0];
        }
		
			
        if($tipo==2){
			$DXml = explode("/", $rutaXML);
	        $destinoPDF=$DXml[1].'/'.$DXml[2].'/'.$DXml[3].'/'.$DXml[4].'/'.$DXml[5].'/';
	        $rutaXML=$DXml[1].'/'.$DXml[2].'/'.$DXml[3].'/'.$DXml[4].'/'.$DXml[5].'/'.$DXml[6];
	        $arcPDF=$DXml[6];
			#desbaratar el archivo para poder concatenar .pdf y no .xml
	        $Apdf = explode(".", $arcPDF);
			$archivoPDF=$Apdf[0];
		}

		
		/*
        Leer el archivo modificar los datos cuando sea publico en general
		*/
        $pdfcfdi=generar_pdf($rutaXML,$destinoPDF,$archivoPDF);

		$response = array(
            'op' => 'ok',
            'status' => true,
			'archivoPDF' => $archivoPDF,
			'file' => "data:text/plain;charset=utf-8;base64,".base64_encode($pdfcfdi)
        );

        /*Eliminar el PDF despues de la encriptacion*/
        $path_pdf = "../".$destinoPDF.$archivoPDF.".pdf";
        unlink($path_pdf);
		
        die(json_encode($response));
		
	}

	
}

?>