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 */ } }