Exemplo n.º 1
0
 function inicio_motor_correo()
 {
     $dir_extraidos = "/volume1/web/correoCFDI/extraidos/";
     $dir_invalidos = "/volume1/web/correoCFDI/invalidos/";
     /* CFDI invalidos o existentes */
     $mail = new mail();
     /* Listado de correos registrados */
     $lista_correo = $mail->get_lista_correo();
     if (count($lista_correo) == 0) {
         return;
     }
     /* Información del correo dedicado a envios */
     $correo_envios = $mail->info_mail_envios(0);
     /* El parámetro no se ocupa por el momento */
     foreach ($lista_correo as $correo) {
         printf("\n\n Iniciando extracción en " . $correo['correo'] . "\n\n");
         $mail->obtener_adjuntos($correo['host_imap'], $correo['puerto'], $correo['correo'], $correo['password'], '/volume1/web/correoCFDI/extraidos/');
     }
     printf("\nFinalizo extraccion");
     /* Después de la extracción se busca en el directorio de extraidos */
     $array_archivos = $this->escaneo_dir_extraidos();
     printf("\n\n Iniciando validacion \n\n");
     foreach ($array_archivos as $valor) {
         /* Instancia a clase de Carga de Facturas */
         $carga_proveedor = new Carga_factura_proveedor();
         /* Lectura del XML */
         $read_xml = new Read_factura_cliente();
         $carga_proveedor->array_xml = '';
         $carga_proveedor->id_detalle = 0;
         $carga_proveedor->id_emisor = 0;
         $carga_proveedor->id_receptor = 0;
         $nombre_xml = $valor['xml'];
         $array_read_xml = $read_xml->detalle($dir_extraidos . $valor['correo'] . "/", $valor['xml']);
         $carga_proveedor->array_xml = $array_read_xml;
         /* Datos de correo de envio (Se ocupa para respuestas de correo con CFDI inválidos) */
         $correo_envios = $mail->info_mail_envios(0);
         /* Comprobación de parámetros para validación */
         if (count($array_read_xml) <= 0 or $array_read_xml == null) {
             printf("Formato incorrecto");
             $this->notificar_cfdi_invalido($carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'desconocido');
             continue;
         }
         if (strlen($array_read_xml['emisor']['rfc']) == 0 or strlen($array_read_xml['receptor']['rfc']) == 0 or strlen($array_read_xml['timbreFiscalDigital']['UUID']) == 0) {
             printf('\\n xml invalido ' . $valor['xml']);
             $this->notificar_cfdi_invalido($carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'desconocido');
             continue;
         }
         /* Validación del CFDI */
         $validacion_web = new webservice_sat();
         $validacion = $validacion_web->valida_cfdi($array_read_xml['emisor']['rfc'], $array_read_xml['receptor']['rfc'], $array_read_xml['encabezado']['total'], $array_read_xml['timbreFiscalDigital']['UUID']);
         printf("\n validando.... E rfc=" . $array_read_xml['emisor']['rfc'] . " R rfc=" . $array_read_xml['receptor']['rfc'] . " total=" . $array_read_xml['encabezado']['total'] . " UUID=" . $array_read_xml['timbreFiscalDigital']['UUID']);
         if (!count($validacion) > 0) {
             /* Se registra en el sistema el archivo como inválido y se notifica al correo emisor. */
             printf("\n Fallo en validacion " . $valor['xml'] . "reenviando a " . $valor['correo']);
             $this->notificar_cfdi_invalido($carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'invalido');
             continue;
         }
         /* Una vez válidado el CFDI se inserta en la BD */
         /* Devuelve el id del emisor si existe sino se aumenta el contador */
         $existe = 0;
         if (($carga_proveedor->id_emisor = $carga_proveedor->exist_emisor()) == 0) {
             $carga_proveedor->id_emisor = $carga_proveedor->Insert_emisor();
         } else {
             $existe++;
         }
         /* Devuelve el id del receptor si existe sino se aumenta el contador */
         if (($carga_proveedor->id_receptor = $carga_proveedor->exist_receptor()) == 0) {
             $carga_proveedor->id_receptor = $carga_proveedor->insert_receptor();
         } else {
             $existe++;
         }
         /*Se obtienen los ids emisor y receptor después de la inserción de los mismo
          * esto pasa sino existian en caso de que existan la condición se ignora  */
         if ($carga_proveedor->id_emisor == 0) {
             $carga_proveedor->id_emisor = $carga_proveedor->id_emisor();
         }
         if ($carga_proveedor->id_receptor == 0) {
             $carga_proveedor->id_receptor = $carga_proveedor->id_receptor();
         }
         if (($id_detalle = $carga_proveedor->exist_detalle()) == 0) {
             $extension = pathinfo($nombre_xml, PATHINFO_EXTENSION);
             $nombre_acuse = basename($nombre_xml, '.' . $extension);
             $ruta_cfdi = $carga_proveedor->get_ruta_cfdi();
             $validacion->save($ruta_cfdi . $nombre_acuse . "SAT.xml");
             $id_validacion = $carga_proveedor->insert_validacion($validacion, $ruta_cfdi . $nombre_acuse . "SAT.xml");
             $ruta = $carga_proveedor->move_cfdi($dir_extraidos . $valor['correo'] . "/", $nombre_xml);
             $ruta_pdf = NULL;
             if (file_exists($dir_extraidos . $valor['correo'] . "/" . $valor['pdf'])) {
                 $carga_proveedor->move_cfdi($dir_extraidos . $valor['correo'] . "/", $valor['pdf']);
                 $ruta_pdf = $ruta . $valor['pdf'];
             }
             $carga_proveedor->id_detalle = $carga_proveedor->Insert_detalle($id_validacion, $ruta . $nombre_xml, $ruta_pdf);
             $this->insert_motor_correo(0, $carga_proveedor, $valor['correo'], 'valido', $ruta . $nombre_xml, $ruta_pdf);
         } else {
             $existe++;
         }
         if ($existe == 3) {
             $ruta_pdf = NULL;
             $ruta_xml = NULL;
             if (!file_exists($dir_invalidos . $valor['correo'])) {
                 mkdir($dir_invalidos . $valor['correo'], 0777, true);
                 chmod($dir_invalidos . $valor['correo'], 0777);
             }
             if (file_exists($dir_invalidos . $valor['correo'] . "/" . $valor['pdf'])) {
                 $ruta_pdf = $dir_invalidos . $valor['correo'] . "/" . $valor['pdf'];
             }
             $intentos = $carga_proveedor->obtener_intentos($carga_proveedor->id_emisor, $nombre_xml);
             rename($dir_extraidos . $valor['correo'] . "/" . $nombre_xml, $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $nombre_xml);
             $ruta_xml = $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $nombre_xml;
             $this->insert_motor_correo(0, $carga_proveedor, $valor['correo'], 'repetido', $ruta_xml, $ruta_pdf);
         }
         /* Se limpian las variables globales */
         while (count($carga_proveedor->emisor)) {
             array_pop($carga_proveedor->emisor);
         }
         while (count($carga_proveedor->receptor)) {
             array_pop($carga_proveedor->receptor);
         }
         while (count($carga_proveedor->detalle)) {
             array_pop($carga_proveedor->detalle);
         }
         while (count($carga_proveedor->array_xml)) {
             array_pop($carga_proveedor->array_xml);
         }
         /* Insert en la BD */
     }
 }