Example #1
0
 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;
 }
Example #3
0
 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 */
 }
Example #4
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 */
     }
 }
Example #5
0
 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 */
 }