<?php
ini_set('error_reporting', "-1");
ini_set('error_reporting', E_ALL);

$doc_recibido = $_GET["documento"];

  
// $id_empresa = str_replace(".xml","",$doc_recibido);
 $id_empresa = 1; //substr ($id_empresa, -1);


require '../Clases/Firmar.php';

require '../Clases/Autentificacion.php';
require '../Clases/Empaquetar.php';

require './Clase_SoapSII.php';

require '../lib/tcpdf/tcpdf_barcodes_2d.php';
include '../lib/mpdf/mpdf.php';

date_default_timezone_set('America/Toronto');

require '../Clases/class.phpmailer.php';
include('../../conex.php'); 

if (!isset($_GET["documento"])){
  echo "<h3>No se ha enviado ninguna ruta.</h3>";  
}
else{
    $doc_recibido = $_GET["documento"];
	
/************** Datos Empresa ****************** seleccionar cual empresa  es el ingreso  en ssesion******/
	$sql_empresa = "SELECT * FROM empresa WHERE  id=$id_empresa;";
	
	$res_empresa = mysql_query($sql_empresa,$enlace);
	$row=0;
	
		$empresa_rut=mysql_result($res_empresa, $row, "rut_empresa");
		$empresa_rut = str_replace('.', '', $empresa_rut);
		$rut_representante=mysql_result($res_empresa, $row, "rut_representante");
	  	$rut_representante = str_replace('.', '', $rut_representante);
		$fecha_resolucion=mysql_result($res_empresa, $row, "fecha_resolucion");
		$numero_resolucion=mysql_result($res_empresa, $row, "numero_resolucion");
		
		$correo_dte=mysql_result($res_empresa, $row, "correo_dte");
		$clave_correo_dte=mysql_result($res_empresa, $row, "clave_correo_dte");
		
		$certificacion=mysql_result($res_empresa, $row, "certificacion");
		$fecha_certificacion=mysql_result($res_empresa, $row, "fecha_certificacion");
		$sitio_empresa=mysql_result($res_empresa, $row, "sitio_empresa");
        $ip_empresa=mysql_result($res_empresa, $row, "ip_empresa");
	     $clave_certificado_digital=mysql_result($res_empresa, $row, "clave_certificado_digital");
	   $correo_cifrado=mysql_result($res_empresa, $row, "correo_cifrado");
	   $correo_puerto=mysql_result($res_empresa, $row, "correo_puerto");
	   $correo_smtp=mysql_result($res_empresa, $row, "correo_smtp");
	   $nombre_empresa=mysql_result($res_empresa, $row, "nombre");		 
		
	
	if($certificacion=='SI') { $ambiente="CERTIFICACION"; $fecha_resolucion=$fecha_certificacion; $numero_resolucion=0;} else      {$ambiente="PRODUCCION";}
	
		
define("SLC_HAMBIENTE", $ambiente );

define("RUT_EMISOR", $empresa_rut );  
define("RUT_ENVIA", $rut_representante);
define("PK_RUTA",'./'.$rut_representante.'.pfx');

define("FECHA_RESOLUCION", $fecha_resolucion);
define("NUMERO_RESOLUCION", $numero_resolucion);

define("PK_PASS", $clave_certificado_digital);

define("PEM_RUTA", "./crt.pem");
define("KEY_RUTA", "./server.key");


    $arrDocRecibido = explode("|",$doc_recibido);

    foreach ($arrDocRecibido as $indiceDocs => $nDocs) 
	   {
        $documentos[$indiceDocs]["ruta"] = "../DOC/ORIGINAL/".$nDocs ;
        $documentos[$indiceDocs]["nombre"] = $nDocs ;
       }
    

    foreach ($documentos as $indice => $arrDocs) 
    {    
        $esteDocFrimar = new Firmar();
        $esteDocFrimar->dteFirmarRuta = $arrDocs["ruta"];
        $esteDocFrimar->dteFirmarNombre = $arrDocs["nombre"];
        $esteDocFrimar->pkRuta = PK_RUTA;
        $esteDocFrimar->pkPass = PK_PASS;
        $esteDocFrimar->Procesa();

        $documentos[$indice]["rutaFirmado"] = $esteDocFrimar->arrDteFirmadoRuta['archivo'];
        $documentos[$indice]["tipoDTE"] = $esteDocFrimar->tipoDTE;

        unset($esteDocFrimar);

    }
    
    $estaAutentificacion = new Autentificacion();
    
    $estaAutentificacion->pkPass = PK_PASS;
    $estaAutentificacion->pkRuta = PK_RUTA;
    $estaAutentificacion->pemRuta = PEM_RUTA;
    $estaAutentificacion->keyRuta = KEY_RUTA;

    $estaAutentificacion->getToken(); 
    
    $token = $estaAutentificacion->token;
 
    $estePaquete = new Empaquetar($documentos);
    $estePaquete->sRutEmisor=RUT_EMISOR;
    $estePaquete->sRutEnvia=RUT_ENVIA;
    $estePaquete->pkPass=PK_PASS;
    $estePaquete->pkRuta=PK_RUTA;
     $estePaquete->sFechaResolucion=FECHA_RESOLUCION;
    $estePaquete->sNumeroResolucion=NUMERO_RESOLUCION;
    $estePaquete->Empaqueta();

    $arrEnviar = $estePaquete->arrXmlEnviar;
//exit();   // no envia a SII
    $esteSoap = new Clase_SoapSII();

    $envio = $esteSoap->sendUploadDTE(array('rutEmisor' => RUT_EMISOR,'rutEnvia' => RUT_ENVIA,'archivo' => $arrEnviar['archivo'],'token' => $token));
    print_r($envio);


		//*******  saca datos de envio ****
	$trackid=get_string_between($envio,"<TRACKID>","</TRACKID>");
	  // echo ($trackid);
	$doc=get_string_between($envio,"<FILE>","</FILE>");
	   //echo (" ".$doc);
	$tipo_doc=get_string_between($doc,"DOC_","_");
      // echo (" ".$tipo_doc);
	$num_doc=get_string_between($doc,"DOC_".$tipo_doc."_","_".$id_empresa);
	  // echo (" ".$num_doc."  ");
	
	/************ enlace BD Vilca*******	
	$enlace = mysql_connect("192.168.0.9","mcaceres","mlcc56")
				  or die ("Error en la conexion Base Datos ......");
	mysql_select_db("macys", $enlace); */
	//*******************************
	$up_dcto = "UPDATE salida SET token='$trackid' WHERE tipo_dcto=$tipo_doc and num_dcto=$num_doc and empresa=$id_empresa";
	 mysql_query($up_dcto,$enlace);	
		
	
	///************PDF ****************
	
	 $nDocs = str_replace(".xml",'_f.xml',$nDocs);
	 
	$rutadoc = '../DOC/ORIGINAL/';
    $rutafrm = '../DOC/FIRMADO/';
    $rutapdf = '../DOC/PDF/';
	 $xmlf = file_get_contents($rutafrm.$nDocs);
   
    
    $xmlf=str_replace('<?xml version="1.0"?>','<?xml version="1.0" encoding="ISO-8859-1" ?>',$xmlf);
    //debug($xmlf); exit();    
    $xmlted = extraerTED(utf8_decode($xmlf));           // ted como xml    
   // debug($xmlted); exit();
    //echo "<textarea>".utf8_encode($xmlted)."</textarea>"; exit();
    
    $barcodeobj = new TCPDF2DBarcode($xmlted, 'PDF417');
    $timbre = $barcodeobj->getBarcodePngData(2, 1.3, array(0,0,0));
    $fp = fopen('timbre_1.png', 'w');
    fwrite($fp, $timbre);
    fclose($fp);
    
    //echo "<img src='timbre_1.png' >"; exit();
    
    genPDF($nDocs);
    
   // exit();

	
	////***********CORREO ************
	
	
        $documentos[$indiceDocs]["ruta"] = "../DOC/FIRMADO/".$nDocs ;
        $documentos[$indiceDocs]["nombre"] = $nDocs ;
    
    
    $esLibro = FALSE ;

    foreach ($documentos as $indice => $arrDocs) 
    {    
        $esteDocFrimar = new Firmar();
        $esteDocFrimar->dteFirmarRuta = $arrDocs["ruta"];
        $esteDocFrimar->pkRuta = PK_RUTA;
        $esteDocFrimar->pkPass = PK_PASS;
        $esteDocFrimar->getXMLdteFirmar();
        $esteDocFrimar->getTipoDocumentoFirmar();
        
        if ($esteDocFrimar->dteFrimarTipo=="DTE") {
            $oDoc =  new DOMDocument('1.0', 'ISO-8859-1');

            $oDoc->loadXML( $esteDocFrimar->dteFirmarXML );
            $oDTEs=$oDoc->getElementsByTagName('DTE');

            $aDatos= $esteDocFrimar-> obtieneDatosDTEdesdeXML($oDTEs->item(0));

            $sCodTdo=$aDatos['Encabezado']['IdDoc']['TipoDTE'];
            
            $sRutReceptor = $aDatos['Encabezado']['Receptor']['RUTRecep'] ;

            $esteDocFrimar->tipoDTE = $sCodTdo;
            
            $documentos[$indice]["rutaFirmado"] = $documentos[$indiceDocs]["ruta"];
           // echo "<pre>".$esteDocFrimar->tipoDTE."</pre>";
            $documentos[$indice]["tipoDTE"] = $esteDocFrimar->tipoDTE;
           
        }
        else {
            $documentos[$indice]["rutaFirmado"] = $arrDocs["ruta"];
            $esLibro= TRUE ;
            $documentos[$indice]["tipoDTE"] = $esteDocFrimar->tipoLibro;
        }

        unset($esteDocFrimar);

    }


    $estePaquete = new Empaquetar($documentos);
    $estePaquete->sRutEmisor=RUT_EMISOR; 
    $estePaquete->sRutEnvia=RUT_ENVIA;
    $estePaquete->sRutSII=$sRutReceptor;
    $estePaquete->pkPass=PK_PASS;
    $estePaquete->pkRuta=PK_RUTA;
     $estePaquete->sFechaResolucion=FECHA_RESOLUCION;
    $estePaquete->sNumeroResolucion=NUMERO_RESOLUCION;
    
    $estePaquete->Empaqueta();
    
    $arrEnviar= $estePaquete->arrXmlEnviar;
	// *** sacar correo ****
$correo_cliente ='facturas_dte@softemuco.cl';

    $razon = $trackid.' '.$sRutReceptor.' (Sin correo)';
		//**************** enlace BD Correo*******
$enlace_correo = mysql_connect("192.168.0.9","mcaceres","mlcc56")
				  or die ("Error en la conexion BAse Datos CORREO");				  
	mysql_select_db("correo_sii", $enlace_correo);
	//***********************
	$sqlc = "SELECT * FROM correos WHERE rut='$sRutReceptor'";
	$resc = mysql_query($sqlc,$enlace_correo);
	while (mysql_fetch_object ($resc))
			{			
			$correo_cliente = mysql_result($resc, 0, "correo");
			$razon = mysql_result($resc, 0, "razon_social");			
	        }
	// envia correo
	
   $d_pdf = str_replace(".xml",'.pdf',$nDocs);
   $d_cor = str_replace(".xml",'_mail.xml',$nDocs);
   
$docto_pdf='../DOC/PDF/'.$d_pdf;
$docto_firmado='../DOC/ENVIO/'. $d_cor;
$pos = strpos($correo_dte, '@'); $dom = substr($correo_dte, $pos+1);

$mail             = new PHPMailer();

$body             = file_get_contents('contents.html');
$body             = str_replace("[\]",'',$body);

$mail->IsSMTP(); // telling the class to use SMTP
//$mail->Host       = "mail.comercialandes.cl"; // SMTP server
//$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = $correo_smtp; // sets the SMTP server
$mail->Port       = $correo_puerto;                    // set the SMTP port for the GMAIL server
$mail->SMTPSecure = $correo_cifrado;       // set the SMTP port for the GMAIL server
$mail->Username   = $correo_dte; // SMTP account username
$mail->Password   = $clave_correo_dte;        // SMTP account password

$mail->SetFrom($correo_dte, 'DTE '.$nombre_empresa);      // desde

$mail->AddReplyTo("mcaceres@softemuco.cl","SofTemuco");

$mail->Subject    = "Envio DTE ".$sitio_empresa." ".$nDocs;

//$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$address = $correo_cliente;                                     //  hacia
$mail->AddAddress($address, $razon);

$mail->AddAttachment($docto_pdf);      // attachment
$mail->AddAttachment($docto_firmado);      // attachment
//$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send())
 {
  echo "Mailer Error 1: " . $mail->ErrorInfo;
} else {
  echo "Message sent 1!";
}
if ( $razon ==  $trackid.' '.$sRutReceptor.' (Sin correo)')  exit();
 $razon= $trackid.' '.$sRutReceptor;
 $address = 'facturas_dte@softemuco.cl';                                     //  hacia replica
$mail->AddAddress($address, $razon);

$mail->AddAttachment($docto_pdf);      // attachment
$mail->AddAttachment($docto_firmado);      // attachment
 if(!$mail->Send())
 {
  echo "Mailer Error 2: " . $mail->ErrorInfo;
} else {
  echo "Message sent 2!";
}

 }
 exit();
 ///**".$id_empresa."**************************** fin ************************

function genPDF($xmlfirmado) 
   {
    $id_empresa = str_replace("_f.xml","",$xmlfirmado);
    $id_empresa = substr ($id_empresa, -1);
 
    $rutafrm = '../DOC/FIRMADO/';
    $rutapdf = '../DOC/PDF/';
    
    $rutadoc = $rutafrm . $xmlfirmado;
    $mpdf = new mPDF();
    
    $xslDoc = new DOMDocument();
    $xslDoc->load("../visor/visualizador_".$id_empresa.".xsl");
    
    $sXmlDoc=  utf8_encode(str_replace('<?xml version="1.0" encoding="UTF-8"?>'.chr(10), chr(10), file_get_contents($rutadoc)));
    
    $xmlDoc = new DOMDocument("1.0","iso-8859-1");
    $xmlDoc->loadXML($sXmlDoc);
    //echo $xmlDoc->saveXML();
    

    $proc = new XSLTProcessor();
    $proc->importStylesheet($xslDoc);
   
    $html = $proc->transformToXML($xmlDoc);
    
    //echo "$html";exit();

    $mpdf->WriteHTML($html);
    
    $mpdf ->AddPage();
    $mpdf->WriteHTML($html);
    
    $mpdf ->AddPage();
    
    $xslDocC = new DOMDocument();
    $xslDocC->load("../visor/visualizador_cedible_".$id_empresa.".xsl");
    
    $sXmlDocC=  utf8_encode(str_replace('<?xml version="1.0" encoding="UTF-8"?>'.chr(10), chr(10), file_get_contents($rutadoc)));
    
    $xmlDocC = new DOMDocument("1.0","iso-8859-1");
    $xmlDocC->loadXML($sXmlDocC);
    //echo $xmlDoc->saveXML();
    

    $procC = new XSLTProcessor();
    $procC->importStylesheet($xslDocC);
   
    $htmlC = $procC->transformToXML($xmlDocC);
    
    $mpdf->WriteHTML($htmlC);
    
    $mpdf ->Output($rutapdf.  str_replace(".xml", ".pdf", $xmlfirmado),'F');
   // $mpdf->Output();
   }

/* funcion para extraer CAF, omitiendo nodos fuera de éste */
function extraerTED($xmlfirmado) {
    $dom = new DOMDocument();
    $dom->loadXML($xmlfirmado);
    $xmlted = $dom->saveXML();
    preg_match('/<TED.+?>.*?<\/TED>/ims', $xmlted, $ted);
    
    return(alinearXML($ted[0]));
}

function alinearXML($xml) {
	$xmlt = str_replace("\t", '', $xml);
	$xmlt = str_replace("\n", '', $xmlt);
	$xmlt = str_replace("\r", '', $xmlt);
	return($xmlt);
}

function debug($xmlstr) {
    $xmlstr = htmlentities($xmlstr);
    echo "<textarea style='width: 99%; height: 99%'>$xmlstr</textarea";
}
function get_string_between($string, $start, $end)
    {
    $string = " ".$string;
     $ini = strpos($string,$start);
     if ($ini == 0) return "";
     $ini += strlen($start);     
     $len = strpos($string,$end,$ini) - $ini;
     return substr($string,$ini,$len);
   }

?>