<?php
include("conexion/db.php");
require_once("lib/Firma.php");
require_once("lib/FirmaElectronica.php");
require_once("lib/tcpdf/tcpdf.php");
require_once("lib/class.phpmailer.php");
include(__DIR__."/lib/cride.php");

set_time_limit(300);

/**
  DECLARACION DE VARIABLES GLOBALES
**/
$GLOBALS['anulados'] = 'files/anulados/';
$GLOBALS['autorizados'] = 'files/autorizados/';
$GLOBALS['firmados'] = 'files/firmados/';
$GLOBALS['generados'] = 'files/generados/';
$GLOBALS['img'] = 'files/img/';
$GLOBALS['rechazados'] = 'files/rechazados/';
$GLOBALS['ride'] = 'files/ride/';
$GLOBALS['token'] = 'files/token/';


function obtieneClave(){
  $name = 'files/token/clave.txt';
  if(file_exists($name)) {
    $filecontent = file_get_contents($name) or die("Unable to open file!");
    return str_replace('clave: ','',$filecontent);
  }
}

/**
  BUSCA EL TIPO DE CODIGO DEL DOCUMENTO, CLAVEACCESO Y AMBIENTE
**/
function buscaTipoDocumento($archivo){
    $xmlstr=simplexml_load_file($archivo) or die("Error: No puede crear objeto");

    foreach ($xmlstr->children() as $child) {
        switch ($child->codDoc) {
          case '01':
            $params = ['codDoc' => $child->codDoc, 'claveAcceso' => $child->claveAcceso, 'ambiente' => $child->ambiente,
              'establecimiento' => $child->estab, 'secuencial' => $child->secuencial, 'fechaEmision' => $xmlstr->infoFactura->fechaEmision,
              'identificacionComprador' => $xmlstr->infoFactura->identificacionComprador,
              'razonSocialComprador' => $xmlstr->infoFactura->razonSocialComprador,
              'puntoEmision' => $child->ptoEmi
            ];
          break;
		  
          case '03':
            $params = ['codDoc' => $child->codDoc, 'claveAcceso' => $child->claveAcceso, 'ambiente' => $child->ambiente,
              'establecimiento' => $child->estab, 'secuencial' => $child->secuencial, 'fechaEmision' => $xmlstr->infoLiquidacionCompra->fechaEmision,
              'identificacionComprador' => $xmlstr->infoLiquidacionCompra->identificacionProveedor,
              'razonSocialComprador' => $xmlstr->infoLiquidacionCompra->razonSocialProveedor,
              'puntoEmision' => $child->ptoEmi
            ];
          break;

          case '04':
            $params = ['codDoc' => $child->codDoc, 'claveAcceso' => $child->claveAcceso, 'ambiente' => $child->ambiente,
              'establecimiento' => $child->estab, 'secuencial' => $child->secuencial, 'fechaEmision' => $xmlstr->infoNotaCredito->fechaEmision,
              'identificacionComprador' => $xmlstr->infoNotaCredito->identificacionComprador,
              'razonSocialComprador' => $xmlstr->infoNotaCredito->razonSocialComprador,
              'puntoEmision' => $child->ptoEmi
            ];
          break;

          case '06':
            $params = ['codDoc' => $child->codDoc, 'claveAcceso' => $child->claveAcceso, 'ambiente' => $child->ambiente,
              'establecimiento' => $child->estab, 'secuencial' => $child->secuencial, 'fechaEmision' => $xmlstr->infoGuiaRemision->fechaIniTransporte,
              'identificacionComprador' => $xmlstr->infoGuiaRemision->rucTransportista,
              'razonSocialComprador' => $xmlstr->infoGuiaRemision->razonSocialTransportista,
              'puntoEmision' => $child->ptoEmi
            ];
            break;

            case '07':
               $params = ['codDoc' => $child->codDoc, 'claveAcceso' => $child->claveAcceso, 'ambiente' => $child->ambiente,
                 'establecimiento' => $child->estab, 'secuencial' => $child->secuencial, 'fechaEmision' => $xmlstr->infoCompRetencion->fechaEmision,
                 'identificacionComprador' => $xmlstr->infoCompRetencion->identificacionSujetoRetenido,
                 'razonSocialComprador' => $xmlstr->infoCompRetencion->razonSocialSujetoRetenido,
                'puntoEmision' => $child->ptoEmi
            ];
            break;
        }
        return $params;
    }
}

/**
  LISTA ARCHIVOS XML EN DIRECTORIO DE GENERADOS
**/
function listarArchivos($thefolder){
	//$thefolder=__DIR__."\\".str_replace("/","\\",$thefolder);
    $archivos = array();
    if ($handler = opendir($thefolder)) {
      while (false !== ($file = readdir($handler))) {
        if ($file != "." && $file != ".." && $file != ".gitkeep") {
          $archivos[] = $file;
        }
      }
      closedir($handler);
    }
    return $archivos;
}

/**
  BUSCA UN ARCHIVO CREADO
**/
function buscaArchivocreado($filexml){
  $path = $GLOBALS['autorizados'];

  $files = array_diff(scandir($path), array('.', '..'));

  $archivo = array_search($filexml, $files);

  if($archivo){
    return true;
  }else{
    return false;
  }
}

/**
  GENERA CLAVE DE AUTORIZACION
**/
function generarClave($file){
  $archivo = $GLOBALS['generados'].$file;
  $xmlstr=simplexml_load_file($archivo) or die("Error: No puede crear objeto");

  $rut ="";
  $codElectr=$xmlstr->infoTributaria->codDoc;
  switch ($codElectr) {
    case "01":
        $fechaEmision = str_replace('/','',$xmlstr->infoFactura->fechaEmision);
        break;
    case "03":
        $fechaEmision = str_replace('/','',$xmlstr->infoLiquidacionCompra->fechaEmision);
        break;
	case "04":
        $fechaEmision = str_replace('/','',$xmlstr->infoNotaCredito->fechaEmision);
        break;
	case "06":
        $fechaEmision = str_replace('/','',$xmlstr->infoGuiaRemision->fechaIniTransporte);
        break;
    case "07":
        $fechaEmision = str_replace('/','',$xmlstr->infoCompRetencion->fechaEmision);
        break;
  }
    
  $rut = $fechaEmision;
  foreach ($xmlstr->children() as $child) {
    $tipoComprobante = $child->codDoc;
    $numeroRuc = $child->ruc;
    $tipoAmbiente = $child->ambiente;
    $serie = $child->estab.$child->ptoEmi;
    $numeroComprobante = $child->secuencial;
    $rut .= $tipoComprobante.$numeroRuc.$tipoAmbiente.$serie.$numeroComprobante;
  }
  //$codigoNumero = strval(26121976+mt_rand(1,30));
  $codigoNumero = "26121976";
  $rut .= $codigoNumero;
  foreach ($xmlstr->children() as $child) {
    $tipoEmision = $child->tipoEmision;
    $rut .= $tipoEmision;
  }
  

  $verificador = modulo11($rut);
  $claveAcceso = $rut.$verificador;
  foreach ($xmlstr->children() as $child) {
    if ($child->claveAcceso=="0000000000000000000000000000000000000000000000000") {
      $child->claveAcceso = $claveAcceso;
      break;
    }
  }
  $xmlstr->asXML($archivo);
}

/**
  GENERADOR MODULO 11
**/
function modulo11($num, $retorno_10='1'){
    $digits = str_replace(array('.',','), array(''.''), strrev($num));
    if(!ctype_digit($digits)){
      return false;
    }

    $sum = 0;
    $factor = 2;

    for( $i=0;$i<strlen($digits);$i++){
        $sum += substr($digits,$i,1)*$factor;
        if($factor == 7){
          $factor = 2;
        }else{
         $factor++;
        }
    }
    $dv = 11 - ($sum % 11);

    if ($dv<10){
       return $dv;
    }
    if ($dv==11){
      return 0;
    }
    return $retorno_10;
}

/**
  COLOCA CLAVE AUTORIZACION EN EL ARCHIVO XML
*/
function actualizaClave(){
  $archivos = listarArchivos($GLOBALS['generados']);
  $_conexion = new conexion();
  foreach ($archivos as $archivo) {
	$params = buscaTipoDocumento($GLOBALS['generados'].$archivo);

	$tipodocumento = $params['codDoc'];
	$secuencia = $params['secuencial'];

    $datos = $_conexion->buscarRepetidos("documentos","tipodocumento='".$tipodocumento."' and secuencia='".$secuencia."'");
	
	if(sizeof($datos)>0){
		echo "EL TIPO DE DOCUMENTO ".$tipodocumento." con la secuencia: ".$secuencia." YA EXISTE ";
		unlink($GLOBALS['generados'].$archivo);
	}else{
		$xmlstr=simplexml_load_file($GLOBALS['generados'].$archivo) or die("Error: No puede crear objeto");
		foreach ($xmlstr->children() as $child) {
		  if ($child->claveAcceso="0000000000000000000000000000000000000000000000000") {
			generarClave($archivo);
		  }
		  break;
		}		
	}
  }
}
/**
  RENOMBRA ARCHIVOS XML CON LA CLAVE DE ACCESO QUE CONTIENE CADA XML
**/
function renombrarXML(){
    $archivos = listarArchivos($GLOBALS['generados']);
    if (count($archivos)>0) {
      $_conexion = new conexion();

      foreach ($archivos as $archivo) {
        $params = buscaTipoDocumento($GLOBALS['generados'].$archivo);
        $claveAcceso = $params['claveAcceso'];

        $datos = $_conexion->buscar("documentos","claveacceso='".$claveAcceso."' and estado='GENERADO'");

        if(!$datos){

          if (strlen($archivo)<49) {
            rename($GLOBALS['generados'].$archivo, $GLOBALS['generados'].$claveAcceso.".xml");
          }

          $fecha = date('Y-m-d',strtotime(str_replace('/','-',$params['fechaEmision'])));

          $params = "'".$params['identificacionComprador']."','".$params['razonSocialComprador']."','".$fecha.
          "',".$params['ambiente'].",'".$params['secuencial']."','".$params['establecimiento']."','".$params['puntoEmision'].
          "','".$params['claveAcceso']."','".$params['codDoc']."','RENOMBRANDO','INFORMATIVO','GENERADO','".$GLOBALS['generados'].$claveAcceso.".xml'";

          $_conexion->insertar("documentos(cedrucpas, razonSocialComprador, fechaemision, ambiente, secuencia,
          agencia, puntoEmision, claveacceso, tipodocumento, mensaje, tipoMensaje, estado, pathxml)",$params);
        }
      }
      echo 'RENOMBRADO<br>';
    }
}
/**
  FIRMAR ARCHIVOS XML
**/
function firmarXML(){
	
    $_conexion = new conexion();
    $token = $GLOBALS['token'].'FIRMA.pfx';
    $contrasena = obtieneClave();
	 
    $config = array(
      'file' => $token,
      'pass' => $contrasena
    );
	
    $archivos = $_conexion->buscar('documentos',"estado='GENERADO'");
    if (sizeof($archivos)>0) {
      for ($i=0; $i <sizeof($archivos) ; $i++) {
        $clave = $archivos[$i]['claveacceso'];
        $firma = new \Shara\Comprobantes\Firma($config, $clave);
        $resp = $firma->verificarCertPKey();
		
        if ($resp["error"] === true){
          return $resp;
        }

        if (!is_dir($GLOBALS['firmados'])) {
          mkdir($GLOBALS['firmados'], 0777, true);
        }

        $xml = file_get_contents($archivos[$i]['pathxml'], FILE_USE_INCLUDE_PATH);

		
        $resp = $firma->firmar($xml, $GLOBALS['firmados']);

        $signedfile = $GLOBALS['firmados'].$clave.'.xml';

        unlink($archivos[$i]['pathxml']);
        $campos = "mensaje='FIRMANDO' , estado='FIRMADO', pathxml='".$signedfile."'";
        $condicion = "claveacceso='".$archivos[$i]['claveacceso']."' and estado='GENERADO'";

        $_conexion->actualizar('documentos', $campos, $condicion);
        echo "FIRMADO \n";
      }
    }
}

/**
  ENVIO ARCHIVOS XML
  En este proceso de envio ya puedo ver en el SRI si esta aprobado o no
**/
function enviarXML(){
    $_conexion = new conexion();
    $archivos = $_conexion->buscar('documentos', "estado='FIRMADO'");

    if (sizeof($archivos)>0) {
      for ($i=0; $i < sizeof($archivos) ; $i++) {
        $ambiente = $archivos[$i]['ambiente'];

        if ($ambiente==1) {
          $url = "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl";
        }else{
          $url = "https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl";
        }

        $xmlpath = $archivos[$i]['pathxml'];

        $xmlobj = simplexml_load_file($xmlpath);
        $comprobante = $xmlobj->asXML();
        $comprobante=str_replace("\r\n", "\n", $comprobante);
        $params = array("xml"=>$comprobante);
        try {
          $client = new SoapClient($url);
        } catch (\Exception $e) {
          echo "ERROR SRI FUERA DE SERVICIO AMBIENTE ".$ambiente."\n";
          return false;
        }
		
        $result = $client->validarComprobante($params);

		$estado = $result->RespuestaRecepcionComprobante->estado;

        switch ($estado) {
          case 'RECIBIDA':
            $mensaje = [
              'estado' => $result->RespuestaRecepcionComprobante->estado,
              'mensaje' => 'Enviado SRI'
            ];

            $campos = "estado='".$mensaje['estado']."', mensaje='".$mensaje['mensaje']."'";
            $condicion = "claveacceso='".$archivos[$i]['claveacceso']."'";
            $_conexion->actualizar('documentos', $campos, $condicion);

          break;

          case 'DEVUELTA':
            $mensaje_arreglo=$result->RespuestaRecepcionComprobante->comprobantes->comprobante->mensajes->mensaje;
            if (is_array($mensaje_arreglo)) {
              $mensaje = [
                'estado' => $result->RespuestaRecepcionComprobante->estado,
                'claveAcceso' => $result->RespuestaRecepcionComprobante->comprobantes->comprobante->claveAcceso,
                'mensaje' => $result->RespuestaRecepcionComprobante->comprobantes->comprobante->mensajes->mensaje['0']->mensaje,
                'tipo' => $result->RespuestaRecepcionComprobante->comprobantes->comprobante->mensajes->mensaje['0']->tipo,
                'informacionAdicional' => str_replace("'","",$result->RespuestaRecepcionComprobante->comprobantes->comprobante->mensajes->mensaje['0']->informacionAdicional)
              ];
            } else {
              $mensaje = [
                'estado' => $result->RespuestaRecepcionComprobante->estado,
                'claveAcceso' => $result->RespuestaRecepcionComprobante->comprobantes->comprobante->claveAcceso,
                'mensaje' => $result->RespuestaRecepcionComprobante->comprobantes->comprobante->mensajes->mensaje->mensaje,
                'tipo' => $result->RespuestaRecepcionComprobante->comprobantes->comprobante->mensajes->mensaje->tipo,
                'informacionAdicional' => str_replace("'","",$result->RespuestaRecepcionComprobante->comprobantes->comprobante->mensajes->mensaje->informacionAdicional)
              ];

            }
            $campos = "estado='".$mensaje['estado']."', claveacceso='".$mensaje['claveAcceso']."', mensaje='".
            $mensaje['mensaje']."', tipomensaje='".$mensaje['tipo']."', informacionadicional='".$mensaje['informacionAdicional']."'";

            $condicion = "claveacceso='".$archivos[$i]['claveacceso']."'";
            $_conexion->actualizar('documentos',$campos, $condicion);

          break;
        }
        echo 'ENVIADO - '.$archivos[$i]['secuencia']."\n";
      }
    }
}

/**
  VEO EL ESTADO DE MI XML SI ESTA AUTORIZADO O NO Y GENERO EL NUEVO XML EN CUALQUIERA DE LOS DOS CASOS
**/
function autorizaXML(){
    $_conexion = new conexion();
    $archivos = $_conexion->buscar('documentos', "estado='RECIBIDA' or mensaje='CLAVE ACCESO REGISTRADA'");
    if (sizeof($archivos)>0) {
      for ($i=0; $i < sizeof($archivos) ; $i++) {
        $ambiente = $archivos[$i]['ambiente'];

        if ($ambiente==1) {
          $url = "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl";
        }else{
          $url = "https://cel.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl";
        }

        $params = array("claveAccesoComprobante" => $archivos[$i]['claveacceso']);
        try {
          $client = new SoapClient($url);
        } catch (\Exception $e) {
          echo "ERROR SRI FUERA DE SERVICIO\n";
          return false;
        }

        $result = $client->autorizacionComprobante($params);
        $fecha = date('Y-m-d H:i:s',strtotime($result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->fechaAutorizacion));
        if(!isset($result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->mensajes->mensaje->mensaje)){
          $mensajedc='';
          $infoadicional = '';
        }else{
          $mensajedc=$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->mensajes->mensaje->mensaje;
          $infoadicional = $result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->mensajes->mensaje->informacionAdicional;
        }

        $campos="";
        $estado = $result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->estado;
        if ($estado == "NO AUTORIZADO") {
          $mensaje = [
            'estado' => $result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->estado,
            'fechaAutorizacion' => $fecha,
            'mensaje' => $mensajedc,
            'informaciondicional' => $infoadicional
          ];
        }else {
          $mensaje = [
            'estado' => $result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->estado,
            'numeroAutorizacion' => $result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->numeroAutorizacion,
            'fechaAutorizacion' => $fecha,
            'ambiente' => $result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->ambiente,
            'comprobante' => $result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->comprobante,
            'mensaje' => $mensajedc,
            'informaciondicional' => $infoadicional
          ];
          $campos = "numeroautorizacion='".$mensaje['numeroAutorizacion']."', ";
        }

        $campos .= "estado='".$mensaje['estado']."', mensaje='".
        $mensaje['mensaje']."', fechaautorizacion='".$mensaje['fechaAutorizacion'].
        "', informacionadicional='".$mensaje['informaciondicional']."'";
        $condicion = "claveacceso='".$archivos[$i]['claveacceso']."'";
        $_conexion->actualizar('documentos',$campos, $condicion);

        echo $estado."-".$archivos[$i]['secuencia']."\n";
        unlink($archivos[$i]['pathxml']);
      }
    }
}

/**
  CREA XML AUTORIZACO
**/
function creaXMLAutorizado(){
    $_conexion = new conexion();
    $archivos = $_conexion->buscar('documentos', "(estado='AUTORIZADO' or estado='NO AUTORIZADO') and mensaje not like '%CREADO XML%'");
    if (sizeof($archivos)>0) {
      for ($i=0; $i < sizeof($archivos) ; $i++) {
        $ambiente = $archivos[$i]['ambiente'];

        if ($ambiente==1) {
          $url = "https://celcer.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl";
        }else{
          $url = "https://cel.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl";
        }
        if ($archivos[$i]['estado'] == "AUTORIZADO") {
          $params = array("claveAccesoComprobante" => $archivos[$i]['numeroautorizacion']);
        }else {
          $params = array("claveAccesoComprobante" => $archivos[$i]['claveacceso']);
        }

        try {
          $client = new SoapClient($url);
        } catch (\Exception $e) {
          echo "ERROR SRI FUERA DE SERVICIO\n";
          return false;
        }
        $result = $client->autorizacionComprobante($params);
        $dom = new DOMDocument('1.0', 'UTF-8');
        $dom->formatOutput = true;

        $raiz = $dom->createElement('autorizacion');
        $estado = $dom->createElement("estado",$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->estado);

        if ($archivos[$i]['estado'] == "AUTORIZADO") {
          $numeroAutorizacion = $dom->createElement("numeroAutorizacion",$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->numeroAutorizacion);
        }else {
          $numeroAutorizacion = $dom->createElement("claveAcceso",$result->RespuestaAutorizacionComprobante->claveAccesoConsultada);
        }

        $fechaAutorizacion = $dom->createElement("fechaAutorizacion",$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->fechaAutorizacion);
        $tipoAmbiente = $dom->createElement("ambiente",$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->ambiente);
        $comprobante = $dom->createElement("comprobante",$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->comprobante);
        if ($archivos[$i]['estado'] == "AUTORIZADO") {
          $mensaje = $dom->createElement('mensajes');
        }else{
          $mensaje = $dom->createElement("errormensaje",$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->mensajes->mensaje->mensaje);
          $infoerror = $dom->createElement("infoerror",$result->RespuestaAutorizacionComprobante->autorizaciones->autorizacion->mensajes->mensaje->informacionAdicional);
        }
        // Append element in the document
        $str = $dom->saveHTML($comprobante);
        $xmla = simplexml_load_string($str);
        $comprobante = $dom->createElement('comprobante');

        //create a CDATA section (that is another DOMNode instance) and put it inside the name tag
        $comprobante_cdata = $dom->createCDATASection($xmla);
        $comprobante->appendChild($comprobante_cdata);

        //create the XML structure
        $raiz->appendChild($estado);
        $raiz->appendChild($numeroAutorizacion);
        $raiz->appendChild($fechaAutorizacion);
        $raiz->appendChild($tipoAmbiente);
        $raiz->appendChild($mensaje);
        if ($archivos[$i]['estado'] != "AUTORIZADO") {
          $raiz->appendChild($infoerror);
        }
        $raiz->appendChild($comprobante);
        $dom->appendChild($raiz);

        if (!is_dir($GLOBALS['autorizados']) || !is_dir($GLOBALS['rechazados'])) {
          mkdir($GLOBALS['autorizados'], 0777, true);
          mkdir($GLOBALS['rechazados'], 0777, true);
        }

        if ($archivos[$i]['estado'] == "AUTORIZADO") {
          $path = $GLOBALS['autorizados'].$archivos[$i]['numeroautorizacion'].'.xml';
        }else {
          $path = $GLOBALS['rechazados'].$archivos[$i]['claveacceso'].'.xml';
        }

        $dom->saveXML();
        $dom->save($path);

        if ($archivos[$i]['estado'] == "AUTORIZADO") {
          $creado = buscaArchivocreado($archivos[$i]['numeroautorizacion'].'.xml');
        }else {
          $creado = "";
        }

        if($creado){
          $campos = "mensaje='CREADO XML', pathxml='".$GLOBALS['autorizados'].$archivos[$i]['numeroautorizacion'].".xml'";
          $condicion = "numeroautorizacion='".$archivos[$i]['numeroautorizacion']."' and estado='AUTORIZADO' and mensaje<>'CREADO XML'";

          echo "CREADO XML AUTORIZADO \n";
          $_cride = new cride();
          $_cride->crearRide(__DIR__."/files/autorizados/",$archivos[$i]['numeroautorizacion'], $archivos[$i]['tipodocumento']);
		  
        }else {
          $campos = "pathxml='".$GLOBALS['rechazados'].$archivos[$i]['claveacceso'].".xml', mensaje='".
          $archivos[$i]['mensaje']." CREADO XML'";
          $condicion = "claveacceso='".$archivos[$i]['claveacceso']."' and estado='NO AUTORIZADO'";
          echo "CREADO XML RECHAZADO \n";
        }
        $_conexion->actualizar('documentos',$campos, $condicion);
      }
    }
}

/**
MENSAJE PARA CORREO ELECTRÓNICO
**/

function enviaCorreo($objXml,$tipodocumento){
  //var_dump($objXml);
  $correo = '';
  $documento = '';
  $xmlFact = simplexml_load_string($objXml->comprobante);


  if ($tipodocumento != '07') {

      for ($i=0; $i < count($xmlFact->infoAdicional->campoAdicional); $i++) {
        if ($xmlFact->infoAdicional->campoAdicional[$i]['nombre'] == 'Correo'){
              $correo=$xmlFact->infoAdicional->campoAdicional[$i];
        }else{
              $correo='ramiro.torres@loversoft.com.ec';
        }
      }

  }else{
      $correo = 'ramiro.torres@loversoft.com.ec';
  }
function enviaCorreo($objXml, $tipodocumento)
{
    // ...

    $message = obtenerMensajeCorreo($xmlFact, $tipodocumento);
    $filename = "{$xmlFact->infoTributaria->claveAcceso}.pdf";
    $filelocation = "C:\\www\\xmllov-mvcorp\\files\\ride"; // Ruta del archivo PDF
    $fileRide = $filelocation . "\\" . $filename;

    $filenameXml = "{$xmlFact->infoTributaria->claveAcceso}.xml";
    $filelocationXml = "C:\\www\\xmllov-mvcorp\\files\\autorizados"; // Ruta del archivo XML
    $fileXml = $filelocationXml . "\\" . $filenameXml;

    $mail = new PHPMailer;
    $mail->IsSMTP();
    $mail->CharSet = 'UTF-8';
    $mail->Host = 'smtp.gmail.com.ec';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'mauriciofactowers@gmail.com';
    $mail->Password = 'Asdf123$';
    $mail->SMTPSecure = 'ssl';
    $mail->From = 'mauriciofactowers@gmail.com';
    $mail->FromName = 'EQUIPAGUA';
    $mail->AddAddress($correo);
    $mail->WordWrap = 50;
    $mail->IsHTML(true);
    $mail->Subject = 'Documento Electrónico';

    $mail->Body = $message;

    if (file_exists($fileRide)) {
        $mail->addAttachment($fileRide, $filename);
    } else {
        echo 'El archivo PDF adjunto no existe.';
        return;
    }

    if (file_exists($fileXml)) {
        $mail->addAttachment($fileXml, $filenameXml);
    } else {
        echo 'El archivo XML adjunto no existe.';
        return;
    }

    if ($mail->Send()) {
        echo 'Correo enviado correctamente!';
    } else {
        echo 'Error al enviar el correo: ' . $mail->ErrorInfo;
    }
}

}


function obtenerMensajeCorreo($xmlFact,$tipodocumento){
  $cliente = $xmlFact->infoFactura->razonSocialComprador;
  $facNumber = substr($xmlFact->infoTributaria->claveAcceso,24,15);
  $facNumber = substr($facNumber,0,3).'-'.substr($facNumber,3,3).'-'.substr($facNumber,6,9);

  switch ($tipodocumento) {
      case '01':
        $documento = 'FACTURA';
          break;
      case '06':
        $documento = 'NOTA DE CRÉDITO';
          break;
      case '04':
        $documento = 'GUÍA DE REMISIÓN';
          break;
      case '07':
        $documento = 'RETENCIÓN';
          break;
	  case '03':
		$documento = 'LIQUIDACIÓN DE COMPRA DE BIENES Y PRESTACIÓN DE SERVICIOS';
		  break;
        default:
          // code...
        break;
  }


  $msg = "<!DOCTYPE html>
          <html lang='es'>
          <head>
              <meta charset='UTF-8'>
          </head>
          <body>
          <div style='margin: 0 auto; background-color: white; width:800px; overflow-y:auto;'>
              <h4>Estimado(a) cliente  $cliente </h4>
              <hr>
              <p>
                  <strong>Nos complace informarle que su documento electrónico ha sido generado con el siguiente detalle:</strong>
                  <br/>
                  <br/>
                  <strong>Tipo de documento: </strong> $documento
                  <br/>
                  <strong>Documento electrónico No: </strong>$facNumber
                  <br/>
                  <br/>
                  <strong>Adjunto encontrará su documento electrónico.</strong>
                  <br/>
              </p>
              <br>

          </div>
      </body>
   </html>";
  return $msg;
}

actualizaClave();
renombrarXML();
firmarXML();
enviarXML();
autorizaXML();
creaXMLAutorizado();
