R/db_descargar_archivo.R

Defines functions db_descargar_archivo

Documented in db_descargar_archivo

#' Función para descargar archivos del 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 variable logica que determina si se descargará o no el cuestionario de existir en el repositorio
#' @param pda variable logica que determina si se descargará o no el plan de análisis de existir en el repositorio
#' @param reglas_validacion variable logica que determina si se descargará o no el archivo con las reglas de validación de existir en el repositorio
#' @param base_original variable logica que determina si se descargará o no la base original de existir en el repositorio
#' @param base_procesada variable logica que determina si se descargará o no la base procesada de existir en el repositorio
#' @param c_limpieza variable logica que determina si se descargará o no el código de limpieza de existir en el repositorio
#' @param c_procesamiento variable logica que determina si se descargará o no el código de procesamiento de existir en el repositorio
#' @param c_analisis variable logica que determina si se descargará o no el código de análisis de existir en el repositorio
#' @param c_ponderacion variable logica que determina si se descargará o no el código de ponderación de existir en el repositorio
#' @param resultados_tablas variable logica que determina si se descargará o el archivo con las tablas de existir en el repositorio
#' @param resultados_analisis variable logica que determina si se descargará o el archivo comprimido con los resultados de análisis especiales de existir en el repositorio
#' @param presentacion variable logica que determina si se descargará o el archivo de la presentación de existir en el repositorio
#' @param con_pass cadena de conexión a la base de datos
#' 
#' 
#' @examples
#' # db_descargar_archivo(1)
#'


db_descargar_archivo<-function(proyecto_id = NA, proyecto = NA,ola = NA,
                               cuestionario = TRUE, pda = TRUE, 
                               catalogo_preguntas = TRUE,
                               reglas_validacion = TRUE,
                               base_original = TRUE,base_procesada = TRUE,
                               c_limpieza = TRUE,c_procesamiento = TRUE, c_analisis = TRUE ,c_ponderacion = TRUE,
                               resultados_tablas = TRUE, resultados_analisis = TRUE,
                               presentacion = TRUE,
                               directorio = dirname(rstudioapi::getActiveDocumentContext()$path),
                               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"
  )
  
  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))
  

  
  objetos_a_descargar<-data.frame(NA,NA)
  objetos_a_descargar<-objetos_a_descargar[-1,]
  names(objetos_a_descargar)<-c("archivo","ruta")
  
  
if(cuestionario){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("Cuestionario ",proyecto," - ", ola),paste0("Procesamiento/Proyectos/Cuestionario ",proyecto," - ", ola))
}
  
  
if(catalogo_preguntas){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("Catalogo de preguntas ",proyecto," - ", ola),paste0("Procesamiento/Proyectos/Catalogo de preguntas ",proyecto," - ", ola))
}

  
if(pda){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("PDA ",proyecto," - ", ola),paste0("Procesamiento/Proyectos/PDA ",proyecto," - ", ola))
}

  
if(reglas_validacion){
    fila<-nrow(objetos_a_descargar)+1
    objetos_a_descargar[fila,]<-c(paste0("Reglas de validación ",proyecto," - ", ola),paste0("Procesamiento/Proyectos/Reglas de validación ",proyecto," - ", ola))
}

if(base_original){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("base_original_",proyecto," - ", ola),paste0("Procesamiento/Proyectos/base_original_",proyecto," - ", ola))
}



if(base_procesada){
    fila<-nrow(objetos_a_descargar)+1
    objetos_a_descargar[fila,]<-c(paste0("base_procesada_",proyecto," - ", ola),paste0("Procesamiento/Proyectos/base_procesada_",proyecto," - ", ola))
}
  
if(c_limpieza){
    fila<-nrow(objetos_a_descargar)+1
    objetos_a_descargar[fila,]<-c(paste0("limpieza_",gsub(" ","_",proyecto),"_", ola),paste0("Procesamiento/Proyectos/limpieza_",gsub(" ","_",proyecto),"_", ola))
}
if(c_procesamiento){
    fila<-nrow(objetos_a_descargar)+1
    objetos_a_descargar[fila,]<-c(paste0("procesamiento_",gsub(" ","_",proyecto),"_", ola),paste0("Procesamiento/Proyectos/procesamiento_",gsub(" ","_",proyecto),"_", ola))
}
  

if(c_analisis){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("analisis_",gsub(" ","_",proyecto),"_", ola),paste0("Procesamiento/Proyectos/analisis_",gsub(" ","_",proyecto),"_", ola))
}
if(c_ponderacion){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("ponderacion_",gsub(" ","_",proyecto),"_", ola),paste0("Procesamiento/Proyectos/ponderacion_",gsub(" ","_",proyecto),"_", ola))
}
 

     
if(resultados_tablas){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("Tablas ",proyecto," - ", ola),paste0("Procesamiento/Proyectos/Tablas ",proyecto," - ", ola))
}
  
if(resultados_analisis){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("Análisis ",proyecto," - ", ola),paste0("Procesamiento/Proyectos/Análisis ",proyecto," - ", ola))
}

if(presentacion){
  fila<-nrow(objetos_a_descargar)+1
  objetos_a_descargar[fila,]<-c(paste0("Presentación ",proyecto," - ", ola),paste0("Procesamiento/Proyectos/Presentación ",proyecto," - ", ola))
}

  objetos_a_descargar <- objetos_a_descargar %>% 
    dplyr::filter(ruta %in% lista_archivos$key_sin_extension)

  for(i in 1:nrow(objetos_a_descargar)){
    
    objeto_actual<-objetos_a_descargar %>%  slice(i)
    
    ruta<-objeto_actual %>% select(ruta) %>%  c() %>% unlist()
    nombre<-objeto_actual %>% select(archivo) %>%  c() %>% unlist()
    
    archivo<-lista_archivos %>% 
      filter(key_sin_extension %in% ruta) %>%
      select(Key,extension) %>% 
      c() %>% 
      unlist()
    
    save_object(object = archivo[1],
                bucket = "upax-research-bucket",
                file = paste0(directorio,"/",nombre,".",archivo[2])
                )

  }
  
}
pelishk/upax_library documentation built on Nov. 28, 2022, 10:45 a.m.