private function process_stack() { $arr_detalle = array(); //Ruta en donde se almacenan los XML que se van a procesar $ruta_xml = "/volume1/Inbox_Recibo_Nomina_XML/"; // Instancia a la clase que lee los XML $read_xml = new Read_XML_Inbox_Nomina(); //Recorremos la pila recibida //Recorremos la pila recibida for ($valor = 0; $valor < count($this->pila); $valor++) { $existe = 0; $nombre_xml = $this->pila[$valor]; //Se comprueba la extensión del archivo $extension = strtolower($this->type_extension($nombre_xml)); //Cuando se encuentren archivos XML son procesados para obtener su información if ($extension == "xml") { if (!strstr($nombre_xml, 'Invalido') == false or !strstr($nombre_xml, 'Existe') == false) { printf('\\ Ya se habia introducido invalido ' . $nombre_xml); continue; } $this->array_xml = $read_xml->detalle($ruta_xml, $nombre_xml); if (strlen($this->array_xml['emisor']['rfc']) == 0 or strlen($this->array_xml['receptor']['rfc']) == 0 or strlen($this->array_xml['timbreFiscalDigital']['UUID']) == 0) { printf('\\n xml invalido ' . $nombre_xml); rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Recibo_Nomina_XML/" . "Invalido_" . date('mdyHms') . '_' . $nombre_xml); continue; } /* Validación de XML */ printf('\\n Comienza validacion....'); $validador = new webservice_sat(); $validacion = $validador->valida_cfdi($this->array_xml['emisor']['rfc'], $this->array_xml['receptor']['rfc'], $this->array_xml['comprobante_encabezado']['total'], $this->array_xml['timbreFiscalDigital']['UUID']); if ($validacion->getElementsByTagName("Estado")->item(0)->nodeValue != 'Vigente') { printf("\n Fallo en validacion"); rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Recibo_Nomina_XML/" . "Invalido_" . date('mdyHms') . '_' . $nombre_xml); continue; } } else { //Se guardan en stack los pdf que van llegando if ($extension == "pdf") { array_push($this->pila_pdf, $nombre_xml); } continue; } // /* Devuelve el id del emisor si existe sino se aumenta el contador */ if (($this->id_emisor = $this->exist_emisor()) == 0) { $this->id_emisor = $this->Insert_emisor(); } else { $existe++; } // /* Devuelve el id del receptor si existe sino se aumenta el contador */ if (($this->id_receptor = $this->exist_receptor()) == 0) { $this->id_receptor = $this->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 ($this->id_emisor == 0) { $this->id_emisor = $this->id_emisor(); } if ($this->id_receptor == 0) { $this->id_receptor = $this->id_receptor(); } //// if (($id_detalle = $this->exist_detalle()) == 0) { $extension = pathinfo($nombre_xml, PATHINFO_EXTENSION); $nombre_acuse = basename($nombre_xml, '.' . $extension); $ruta_cfdi = $this->get_ruta_cfdi(); $validacion->save($ruta_cfdi . $nombre_acuse . "SAT.xml"); $id_validacion = $this->insert_validacion($validacion, $ruta_cfdi . $nombre_acuse . "SAT.xml"); $ruta = $this->move_cfdi($ruta_xml, $nombre_xml); $this->id_detalle = $this->Insert_detalle($id_validacion, $ruta . $nombre_xml); $id_and_xml = array("id" => $this->id_detalle, "nombre_xml" => $nombre_xml); array_push($this->pila_xml, $id_and_xml); } else { $existe++; } if ($existe == 3) { $intentos = $this->obtener_intentos($this->id_emisor, $nombre_xml); $this->renombrado_fallido($ruta_xml, $nombre_xml, $intentos); /* Se renombra con Existe_ */ } //Se elimina el nombre del archivo procesado del archivo Log // $this->delete_first_line(); //Al terminar de insertar, se vacia el contenido de cada array while (count($this->emisor)) { array_pop($this->emisor); } while (count($this->receptor)) { array_pop($this->receptor); } while (count($this->detalle)) { array_pop($this->detalle); } while (count($arr_detalle)) { array_pop($arr_detalle); } while (count($this->array_xml)) { array_pop($this->array_xml); } $this->id_emisor = 0; $this->id_receptor = 0; } // fin For $this->stack_xml = $this->pila_xml; // Al termino del Procesamiento de todos los XML se procesa la pila de PDF //para localizar su directorio correspondiente y se inserta en la BD su ruta if (count($this->stack_xml) == 0) { $this->registro_pdf = $this->pila_pdf; } else { foreach ($this->pila_pdf as $valor) { //Se envia la pila donde estan los xml que se lograron insertar en la BD y el pdf a buscar $this->search_pdf_in_stack($valor); } } //Al termino de procesar los PDF se insertan los xml que no tienen pareja pdf en el registro // foreach ($this->stack_xml as $dato) // { //// echo " XML STACK = ".$dato['nombre_xml']; // //Insertamos en la tabla registro xml el nombre del pdf // $cadena = explode(".", $dato['nombre_xml']); // $xml_a_buscar=$cadena[0]; // $xml_registro="$xml_a_buscar.pdf"; // $this->insert_xml_registro($dato['id'], $xml_registro); // } // $insert_pdf=new Insert_pdf(); // //Se envian los PDF que no tienen pareja xml // $insert_pdf->recibir_datos($this->registro_pdf); return TRUE; }
private function process_stack() { $arr_detalle = array(); //Ruta en donde se almacenan los XML que se van a procesar $ruta_xml = "/volume1/Inbox_Factura_proveedor/"; // Instancia a la clase que lee los XML $read_xml = new Read_factura_cliente(); //Recorremos la pila recibida for ($valor = 0; $valor < count($this->pila); $valor++) { $existe = 0; $nombre_xml = $this->pila[$valor]; print PHP_EOL . PHP_EOL . ' Comienza Procesamiento de ....' . $nombre_xml . PHP_EOL; //Se comprueba la extensión del archivo $extension = strtolower($this->type_extension($nombre_xml)); //Cuando se encuentren archivos XML son procesados para obtener su información if ($extension == "xml") { if (!strstr($nombre_xml, 'Invalido') == false or !strstr($nombre_xml, 'Existe') == false or !strstr($nombre_xml, 'ErrorEstructura') == false) { print '\\n Ya se habia introducido invalido ' . $nombre_xml; continue; } $this->array_xml = $read_xml->detalle($ruta_xml, $nombre_xml); if (!is_array($this->array_xml)) { printf('\\n xml invalido ' . $nombre_xml); if (file_exists($ruta_xml . $nombre_xml)) { rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Factura_proveedor/" . "ErrorEstructura_" . date('m-d-y-H-m-s') . '_' . $nombre_xml); } continue; } if (strlen($this->array_xml['emisor']['rfc']) == 0 or strlen($this->array_xml['receptor']['rfc']) == 0 or strlen($this->array_xml['timbreFiscalDigital']['UUID']) == 0) { printf('\\n xml invalido ' . $nombre_xml); if (file_exists($ruta_xml . $nombre_xml)) { rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Factura_proveedor/" . "ErrorEstructura_" . date('m-d-y-H-m-s') . '_' . $nombre_xml); } continue; } /* Validación de XML */ $validador = new webservice_sat(); $validacion = $validador->valida_cfdi($this->array_xml['emisor']['rfc'], $this->array_xml['receptor']['rfc'], $this->array_xml['encabezado']['total'], $this->array_xml['timbreFiscalDigital']['UUID']); if (!is_object($validacion)) { printf("\n Fallo en validacion {$nombre_xml}"); rename($ruta_xml . $nombre_xml, "/volume1/Inbox_Factura_proveedor/" . "Invalido_" . date('mdyHms') . '_' . $nombre_xml); continue; } } else { //Se guardan en stack los pdf que van llegando if ($extension == "pdf") { array_push($this->pila_pdf, $nombre_xml); } continue; } /* Devuelve el id del emisor si existe sino se aumenta el contador */ if (($this->id_emisor = $this->exist_emisor()) == 0) { $this->id_emisor = $this->Insert_emisor(); } else { $existe++; } if (!($this->id_emisor > 0)) { printf("\n Posible error de lectura {$nombre_xml}"); return; } /* Devuelve el id del receptor si existe sino se aumenta el contador */ if (($this->id_receptor = $this->exist_receptor()) == 0) { $this->id_receptor = $this->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 ($this->id_emisor == 0) { $this->id_emisor = $this->id_emisor(); } if ($this->id_receptor == 0) { $this->id_receptor = $this->id_receptor(); } if (($id_detalle = $this->exist_detalle()) == 0) { $extension = pathinfo($nombre_xml, PATHINFO_EXTENSION); $nombre_acuse = basename($nombre_xml, '.' . $extension); $ruta_cfdi = $this->get_ruta_cfdi(); $validacion->save($ruta_cfdi . $nombre_acuse . "SAT.xml"); $id_validacion = $this->insert_validacion($validacion, $ruta_cfdi . $nombre_acuse . "SAT.xml"); $ruta = $this->move_cfdi($ruta_xml, $nombre_xml); $this->id_detalle = $this->Insert_detalle($id_validacion, $ruta . $nombre_xml, ''); $id_and_xml = array("id" => $this->id_detalle, "nombre_xml" => $nombre_xml); array_push($this->pila_xml, $id_and_xml); } else { $existe++; } if ($existe == 3) { $intentos = $this->obtener_intentos($this->id_emisor, $nombre_xml); $this->renombrado_fallido($ruta_xml, $nombre_xml, $intentos); /* Se renombra con Existe_ */ } //Al terminar de insertar, se vacia el contenido de cada array while (count($this->emisor)) { array_pop($this->emisor); } while (count($this->receptor)) { array_pop($this->receptor); } while (count($this->detalle)) { array_pop($this->detalle); } while (count($arr_detalle)) { array_pop($arr_detalle); } while (count($this->array_xml)) { array_pop($this->array_xml); } $this->id_emisor = 0; $this->id_receptor = 0; } // fin For $this->stack_xml = $this->pila_xml; // Al termino del Procesamiento de todos los XML se procesa la pila de PDF //para localizar su directorio correspondiente y se inserta en la BD su ruta if (count($this->stack_xml) == 0) { $this->registro_pdf = $this->pila_pdf; } else { foreach ($this->pila_pdf as $valor) { //Se envia la pila donde estan los xml que se lograron insertar en la BD y el pdf a buscar $this->search_pdf_in_stack($valor); } } return TRUE; }
private function motor_descarga_correo() { $XML = new XML(); $BD = new DataBase(); $DataBaseName = "CFDI"; $id_correo = $_POST['id_correo']; $host = trim($_POST['host']); $servidor = $_POST['servidor']; $correo = trim($_POST['correo']); $password = trim($_POST['password']); $puerto = $_POST['puerto']; $nombre_usuario = $_POST['nombre_usuario']; $savedirpath = '/volume1/web/correoCFDI/extraidos/' . $nombre_usuario . '/'; $dir_extraidos = $savedirpath; $ResultObtenerAdjuntos = $this->obtener_adjuntos($host, $puerto, $correo, $password, $savedirpath); if ($ResultObtenerAdjuntos == 0) { return; } $array_archivos = $this->escaneo_dir_extraidos($savedirpath); if (!is_array($array_archivos)) { return 0; } // printf("<p> Iniciando validacion </p>"); $dir_invalidos = "/volume1/web/correoCFDI/invalidos/{$nombre_usuario}/"; /* CFDI invalidos o existentes */ foreach ($array_archivos as $valor) { $id_motor_insert = 0; /* Se guardan los ids de los inserts para devolver una consulta con el detalle de * movimientos */ /* 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 = $this->info_mail_envios(0); /* Comprobación de parámetros para validación */ if (!is_array($array_read_xml)) { // printf("Formato incorrecto"); $id_motor_insert = $this->notificar_cfdi_invalido($nombre_usuario, $id_correo, $carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'invalido'); 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']); $id_motor_insert = $this->notificar_cfdi_invalido($nombre_usuario, $id_correo, $carga_proveedor, $correo_envios, $valor['xml'], $valor['pdf'], $valor['correo'], 'invalido'); 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']); // echo ("<p> 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']."</p>"); if (!is_object($validacion)) { /* 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']); $id_motor_insert = $this->notificar_cfdi_invalido($nombre_usuario, $id_correo, $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); $id_motor_insert = $this->insert_motor_correo($id_correo, $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); } $intentos = $carga_proveedor->obtener_intentos($carga_proveedor->id_emisor, $nombre_xml); if (file_exists($dir_extraidos . $valor['correo'] . "/" . $valor['pdf'])) { rename($dir_extraidos . $valor['correo'] . "/" . $valor['pdf'], $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $valor['pdf']); $ruta_pdf = $dir_invalidos . $valor['correo'] . "/Existe_" . $intentos . "_" . $valor['pdf']; } if (file_exists($dir_extraidos . $valor['correo'] . "/{$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; } $id_motor_insert = $this->insert_motor_correo($id_correo, $carga_proveedor, $valor['correo'], 'repetido', $ruta_xml, $ruta_pdf); } array_push($this->motor_recolector_movimientos, $id_motor_insert); /* 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 */ } $this->motor_detalle_movimientos(); /* Se obtiene el detalle de movimientos realizando una consulta */ }
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 */ } }
private function UpdateCfdi() { $receipt = new Receipt(); $content = filter_input(INPUT_POST, "content"); $IdUser = filter_input(INPUT_POST, "IdUser"); $UserName = filter_input(INPUT_POST, "UserName"); $PdfPath = filter_input(INPUT_POST, "PdfPath"); $XmlPath = filter_input(INPUT_POST, "XmlPath"); $IdCfdi = filter_input(INPUT_POST, "IdCfdi"); $FileState = filter_input(INPUT_POST, "FileState"); $key = 0; $TableName = ''; if (strcasecmp($content, "provider") == 0) { $TableName = "proveedor"; $key = 3; } if (strcasecmp($content, "client") == 0) { $TableName = "cliente"; $key = 2; } if (strcasecmp($content, "payroll") == 0) { $TableName = "nomina"; $key = 1; } $PdfNewName = $_FILES['pdf']['name']; $PdfNewPath = $_FILES['pdf']['tmp_name']; $XmlNewName = $_FILES['xml']['name']; $XmlNewPath = $_FILES['xml']['tmp_name']; $NewPdfName = pathinfo($PdfNewName, PATHINFO_FILENAME); $NewXmlName = pathinfo($XmlNewName, PATHINFO_FILENAME); $NewPdfExtension = pathinfo($PdfNewName, PATHINFO_EXTENSION); $OldXmlName = pathinfo($XmlPath, PATHINFO_FILENAME); $OldExtensionXml = pathinfo($XmlPath, PATHINFO_EXTENSION); $oldSatReceiptName = pathinfo($XmlPath, PATHINFO_FILENAME); $OldPdfName = pathinfo($PdfPath, PATHINFO_FILENAME); $OldExtensionPdf = pathinfo($PdfPath, PATHINFO_EXTENSION); $OldPathSatReceipt = dirname($XmlPath) . "/" . $OldXmlName . "SAT." . $OldExtensionXml; if ($_FILES['xml']['error'] != UPLOAD_ERR_OK) { XML::XmlResponse("Error", 0, "<p>" . $_FILES['xml']['error'] . '</p>'); return; } if ($_FILES['xml']['pdf'] != UPLOAD_ERR_OK) { XML::XmlResponse("Error", 0, "<p>" . $_FILES['xml']['error'] . '</p>'); return; } if (!file_exists($XmlPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b> no existe el Xml a reemplazar</p>"); return 0; } if (!file_exists($OldPathSatReceipt)) { XML::XmlResponse("Error", 0, "<p><b>Error</b> no existe el comprobante de validación del Xml</p>"); return 0; } /* Validación del mismo nombre del xml y el pdf */ if (file_exists($PdfNewPath) and file_exists($XmlNewPath)) { if (strcasecmp($NewPdfName, $NewXmlName) != 0) { XML::XmlResponse("Error", 0, "<p>El Pdf y el Xml deben tener el mismo nombre</p>"); return 0; } } $ReadXml = new Read_factura_cliente(); $Validation = new webservice_sat(); $ValidationXml = $ReadXml->validacion_estructura($XmlPath); if ($ValidationXml != 1) { XML::XmlResponse("Error", 0, "<p><b>Error</b> el xml es inválido</p>"); return 0; } $XmlDetail = $ReadXml->GetDetail($XmlNewPath); $ValidateXml = $Validation->valida_cfdi($XmlDetail['emisor']['rfc'], $XmlDetail['receptor']['rfc'], $XmlDetail['encabezado']['total'], $XmlDetail['timbreFiscalDigital']['UUID']); if (!is_object($ValidateXml)) { XML::XMLReponse("Error", 0, "<p><b>Error</b> el xml es inválido</p>"); return 0; } /* Se crea el directorio donde se almacenan las actualizaciones de un CFDI */ if (!file_exists(dirname($XmlPath) . "/copias")) { mkdir(dirname($XmlPath) . "/copias", 0777, true); } /* Se mueve el antiguo xml y se sube el nuevo reemplazando la ruta del antiguo xml */ $NewRouteDestinationXml = dirname($XmlPath) . "/copias/" . basename($XmlPath); if (file_exists($NewRouteDestinationXml)) { // echo "ya existe el xml en la ruta destino<br><br>"; $OldXmlName = pathinfo($this->RenameFile(dirname($NewRouteDestinationXml), basename($NewRouteDestinationXml)), PATHINFO_FILENAME); // echo "<p>Nuevo nombre $NewName</p>"; $NewRouteDestinationXml = dirname($NewRouteDestinationXml) . "/{$OldXmlName}.{$OldExtensionXml}"; } if (!rename($XmlPath, $NewRouteDestinationXml)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el xml antiguo al histórico de copias</p>"); return 0; } if (!move_uploaded_file($XmlNewPath, $XmlPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el nuevo Xml a su ruta correspondiente</p>"); return 0; } /* Se mueve el comprobante SAT al directorio de copias */ $NewPathSatReceipt = dirname($NewRouteDestinationXml) . "/" . $OldXmlName . "SAT.xml"; if (!rename($OldPathSatReceipt, $NewPathSatReceipt)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el comprobante de validación antiguo al histórico de copias</p>"); return 0; } $NewSatReceipt = dirname($XmlPath) . "/" . $oldSatReceiptName . "SAT.{$OldExtensionXml}"; $ValidateXml->save($NewSatReceipt); /* Sí existe un PDF este se mueve a copias */ $NewRouteDestinationPdf = dirname($XmlPath) . "/copias"; if (file_exists($PdfPath)) { $NewPdfPath = $NewRouteDestinationPdf . "/" . $OldXmlName . "." . $OldExtensionPdf; if (!rename($PdfPath, $NewPdfPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el xml antiguo al histórico de copias</p>"); return 0; } } /* Sí se adjunta un nuevo pdf se introduce en la ruta del XML */ if (file_exists($PdfNewPath)) { $NewPdfPath = dirname($XmlPath) . "/" . $OldPdfName . ".{$OldExtensionPdf}"; if (!move_uploaded_file($PdfNewPath, $NewPdfPath)) { XML::XmlResponse("Error", 0, "<p><b>Error</b>al trasladar el nuevo PDF a su ruta correspondiente</p>"); return 0; } } $NewIdReceipt = $receipt->InsertValidationCfdi($TableName, $ValidateXml, $NewPathSatReceipt); $historical = new Historical(); $NewIdHistorical = $historical->InsertHistorical($TableName, $IdUser, $IdCfdi, $NewIdReceipt, $NewRouteDestinationXml, $NewRouteDestinationPdf . "/" . $OldXmlName . "." . $OldExtensionPdf, $FileState); if ($NewIdHistorical == 0) { return 0; } if ($this->UpdateMetadatas($TableName, $IdCfdi, $XmlDetail, $XmlPath, $PdfPath) != 1) { return 0; } $doc = new DOMDocument('1.0', 'utf-8'); $doc->formatOutput = true; $root = $doc->createElement('Update'); $doc->appendChild($root); $mensaje_ = $doc->createElement('Mensaje', '<p>Datos actualizados con éxito</p>'); $root->appendChild($mensaje_); $Fecha = $doc->createElement("Fecha", $XmlDetail['encabezado']['fecha']); $root->appendChild($Fecha); $Folio = $doc->createElement("Folio", $XmlDetail['encabezado']['folio']); $root->appendChild($Folio); $Subtotal = $doc->createElement("subTotal", $XmlDetail['encabezado']['subTotal']); $root->appendChild($Subtotal); $Total = $doc->createElement("Total", $XmlDetail['encabezado']['total']); $root->appendChild($Total); header("Content-Type:text/xml"); echo $doc->saveXML(); // $log = new Log(); // $log->write_line(8,$IdUser,$IdCfdi,$key);/* Registro Log */ }