R/db_cargar_archivo.R

Defines functions db_cargar_archivo

Documented in db_cargar_archivo

#' Función para cargar archivos al repositorio s3
#'
#' @param proyecto_id id del proyecto asignado en la tabla de proyectos. En caso de proporcionar este campo ya no es necesario indicar proyecto y ola
#' @param proyecto nombre del proyecto que se le asigno en la tabla de proyectos. En caso de proporcionar este campo y el de ola ya no es necesario indicar proyecto_id
#' @param ola numero de ola que se asigno en la tabla de proyectos. En caso de proporcionar este campo y proyecto ya no es necesario indicar proyecto_id
#' @param cuestionario cadena de texto que contiene el nombre del archivo o la ruta completa del cuestionario
#' @param pda cadena de texto que contiene el nombre del archivo o la ruta completa del plan de análisis
#' @param reglas_validacion cadena de texto que contiene el nombre del archivo o la ruta completa del archivo con las reglas de validación
#' @param base_original cadena de texto que contiene el nombre del archivo o la ruta completa de la base original
#' @param base_procesada cadena de texto que contiene el nombre del archivo o la ruta completa de la base procesada
#' @param c_limpieza cadena de texto que contiene el nombre del archivo o la ruta completa del código de limpieza
#' @param c_procesamiento cadena de texto que contiene el nombre del archivo o la ruta completa del código de procesamiento
#' @param c_analisis cadena de texto que contiene el nombre del archivo o la ruta completa del código de análisis especiales
#' @param c_ponderacion cadena de texto que contiene el nombre del archivo o la ruta completa del código de ponderación
#' @param resultados_tablas cadena de texto que contiene el nombre del archivo o la ruta completa del archivo con las tablas
#' @param resultados_analisis cadena de texto que contiene el nombre del archivo o la ruta completa del archivo comprimido con todos los analisis especiales
#' @param presentacion cadena de texto que contiene el nombre del archivo o la ruta completa de la presentación
#' @param con_pass conexion a la base de datos
#' 
#' 
#' @examples
#' # db_cargar_archivo(1,cuestionario = "01Documentos/Cuestionario Digital Wallet_v10.docx")
#'


db_cargar_archivo<-function(proyecto_id = NA, proyecto = NA,ola = NA,
                           cuestionario = NA, pda = NA, 
                           reglas_validacion = NA,
                           catalogo_preguntas = NA,
                           base_original = NA,base_procesada = NA,
                           c_limpieza = NA,c_procesamiento = NA, c_analisis = NA ,c_ponderacion = NA,
                           resultados_tablas = NA, resultados_analisis = NA,
                           presentacion = NA,
                           con_pass = db_conexion()){
  
  
require(tidyr)
require(dplyr)
require(aws.s3)
  
if(!is.na(proyecto)&!is.na(ola)){
  proyecto_datos<-DBI::dbGetQuery(con_pass,paste0("SELECT * FROM proyectos WHERE proyecto = '",proyecto,"' AND ola = ", ola))
}else if(!is.na(proyecto_id)){
  proyecto_datos<-DBI::dbGetQuery(con_pass,paste0("SELECT * FROM proyectos WHERE proyecto_id = ",proyecto_id))
}

DBI::dbDisconnect(con_pass)
#Preparamos la tabla con la información del proyecto
proyecto_datos<-proyecto_datos %>% data.frame() %>%
  mutate(proyecto_id = as.numeric(proyecto_id),
         fecha = as.character(fecha)) %>% 
  slice(1) %>% 
  unlist()

if(length(proyecto_datos)>0){
  proyecto<-proyecto_datos["proyecto" ]
  ola <- proyecto_datos["ola" ]
}else(
  stop("No se encuentra el proyecto en la tabla de proyectos")
)




Sys.setenv(
  AWS_ACCESS_KEY_ID = "AKIAI6BZCS6ISK3ITXIQ",
  AWS_SECRET_ACCESS_KEY = "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",
  AWS_REGION = "us-east-1"
)

lista<-list()




if(!is.na(cuestionario)){
  lista[["cuestionario"]]<-c(cuestionario,paste0("Procesamiento/Proyectos/Cuestionario ",proyecto," - ", ola,".",tools::file_ext(cuestionario)))
}

if(!is.na(catalogo_preguntas)){
  lista[["catalogo_preguntas"]]<-c(catalogo_preguntas,paste0("Procesamiento/Proyectos/Catalogo de preguntas ",proyecto," - ", ola,".",tools::file_ext(catalogo_preguntas)))
}

if(!is.na(pda)){
  lista[["pda"]]<-c(pda,paste0("Procesamiento/Proyectos/PDA ",proyecto," - ", ola,".",tools::file_ext(pda)))
}

if(!is.na(reglas_validacion)){
  lista[["reglas"]] <- c(reglas_validacion,paste0("Procesamiento/Proyectos/Reglas de validación ",proyecto," - ", ola,".",tools::file_ext(reglas_validacion)))
}

if(!is.na(base_original)){
  lista[["base_original"]]<-c(base_original,paste0("Procesamiento/Proyectos/base_original_",proyecto," - ", ola,".",tools::file_ext(base_original)))
}

if(!is.na(base_procesada)){
  lista[["base_procesada"]]<-c(base_procesada,paste0("Procesamiento/Proyectos/base_procesada_",proyecto," - ", ola,".",tools::file_ext(base_procesada)))
}

if(!is.na(c_limpieza)){
  lista[["codigo_limpieza"]]<-c(c_limpieza,paste0("Procesamiento/Proyectos/limpieza_",gsub(" ","_",proyecto),"_", ola,".",tools::file_ext(c_limpieza)))
}

if(!is.na(c_procesamiento)){
  lista[["codigo_proceso"]]<-c(c_procesamiento,paste0("Procesamiento/Proyectos/procesamiento_",gsub(" ","_",proyecto),"_", ola,".",tools::file_ext(c_procesamiento)))
}


if(!is.na(c_analisis)){
  lista[["codigo_analisis"]]<-c(c_analisis,paste0("Procesamiento/Proyectos/analisis_",gsub(" ","_",proyecto),"_", ola,".",tools::file_ext(c_analisis)))
}


if(!is.na(c_ponderacion)){
  lista[["codigo_ponderacion"]]<-c(c_ponderacion,paste0("Procesamiento/Proyectos/ponderacion_",gsub(" ","_",proyecto),"_", ola,".",tools::file_ext(c_ponderacion)))
}

if(!is.na(resultados_tablas)){
  lista[["resultados_tablas"]]<-c(resultados_tablas,paste0("Procesamiento/Proyectos/Tablas ",proyecto," - ", ola,".",tools::file_ext(resultados_tablas)))
}

if(!is.na(resultados_analisis)){
  lista[["resultados_analisis"]]<-c(resultados_analisis,paste0("Procesamiento/Proyectos/Análisis ",proyecto," - ", ola,".",tools::file_ext(resultados_analisis)))
}


if(!is.na(presentacion)){
  lista[["presentacion"]]<-c(presentacion,paste0("Procesamiento/Proyectos/Presentación ",proyecto," - ", ola,".",tools::file_ext(presentacion)))
}


#Descargamos los nombres de los archivos que existen en el repositorio 
quita_extension<-function(key,extension){
  for(i in 1:length(key)){
    key[i]<-gsub(pattern = paste0(".",extension[i]),replacement = "",x = key[i] ,fixed = T)
  }
  return(key)
}

lista_archivos<-  aws.s3::get_bucket_df("upax-research-bucket", prefix="Procesamiento/Proyectos/")
lista_archivos <- lista_archivos %>%
  mutate(extension = tools::file_ext(Key),
         key_sin_extension = quita_extension(Key,extension))


lista_validacion<-data.frame()
for(i in 1:length(lista)){
  lista_validacion[i,1]<-lista[[i]][1]
  lista_validacion[i,2]<-lista[[i]][2]
}

lista_validacion<-lista_validacion %>%  dplyr::mutate(extension = tools::file_ext(V2),
         key_sin_extension = quita_extension(V2,extension))  %>%  
  dplyr::filter(key_sin_extension %in% lista_archivos$key_sin_extension)  %>%  
  dplyr::mutate(key_sin_extension_p = gsub("Procesamiento/Proyectos/","",key_sin_extension))

if(nrow(lista_validacion)>0){
  input<-menu(c("Si", "No"), title=cat("Esta operación sobrescribira los siguientes archivos: \n \n",paste0(lista_validacion$key_sin_extension_p,collapse = " \n "),"\n \n ¿Deseas continuar?"))
  
  
  if(input %in% 1){
    #Borramos los archivos existentes 
    lista_archivos_eliminar <- lista_archivos %>% dplyr::filter(key_sin_extension %in% lista_validacion$key_sin_extension)
    
    for(i in 1:nrow(lista_archivos_eliminar)){
      aws.s3::delete_object(object = lista_archivos_eliminar[i,"Key"],bucket = "upax-research-bucket")
    }
  }        
  
  if(input %in% 2){
    stop("No se realizaron cambios")
  }
}

if(length(lista)==0){
  stop("No hay archivos para cargar")
}else{
  for(i in 1:length(lista)){
    aws.s3::put_object(file = lista[[i]][1],
               bucket = "upax-research-bucket",
               object = lista[[i]][2])
  }
  return("Archivos cargados con exito")
}
}
pelishk/upax_library documentation built on Nov. 28, 2022, 10:45 a.m.