library(magrittr) library(shiny) library(rstudioapi) library(dplyr) # # 0. routing # -------- options(shiny.port = 7860) options(shiny.host = "159.65.249.154") # PROYECT_HOME=dirname(rstudioapi::getActiveDocumentContext()$path) setwd(PROYECT_HOME) list.files(getwd()) # absolute_path=function( APP_HOME ){ sprintf("%s/%s", PROYECT_HOME,APP_HOME) } absolute_path("datasource inspecciones") # #setwd(absolute_path("assets")) #unserialized_logo=imager::load.image("logo.png") # # 1.0 dependencias # -------- # library(shiny) options(shiny.maxRequestSize=30*1024^2) # # 1.1 custom-dependencias # -------- CODE_HOME=absolute_path("code") setwd(CODE_HOME) source("dataframe extention.R") source("Compute_YEI.R") # # 1.1 authentication # -------- # talk_states=list( "unauthenticated"="No has ingresado credenciales válidas aún", "authenticated"="Estás autenticado y los reportes están listos para exportar" ) # CURRENT_STATE="unauthenticated" EXPORT_STATE=FALSE # credentials.authenticate=function( input_user, input_pasword, valid_credentials=data.frame(user="stockpesca", pasword="Temporal1843@!") ){ # # cambia el estado de la aplicaci?n seg?n la validez de las credenciales # valid= valid_credentials %>% dplyr::filter(user==input_user & pasword==input_pasword) if (nrow(valid)>0) { .GlobalEnv[["CURRENT_STATE"]] ="authenticated"} else { .GlobalEnv[["CURRENT_STATE"]] ="unauthenticated" } print(.GlobalEnv[["CURRENT_STATE"]]) } # # 2.0 data-access # -------- # empty_table=data.frame( data=c("No tiene permisos para ver esta tabla") ) # datasource.raw_inspecciones=function( ){ setwd(absolute_path("datasource inspecciones")) readxl::read_excel("TABLA MAESTRA.xlsx") %>% #head() %>% as.data.frame() } #datasource.raw_inspecciones() %>% View() inspecciones.cache=NULL #inspecciones.cache=datasource.raw_inspecciones() # query_data=function( file_path ){ if(.GlobalEnv[["CURRENT_STATE"]]=="unauthenticated"){ empty_table } else { # datasource.raw_inspecciones() # # # user_input_pwd="Temporal1843@!" # db_file_name="inspecciones.accdb" # # try({ # # # setwd(absolute_path("datasource inspecciones")) # library(odbc) # conexion <- dbConnect(odbc::odbc(), # .connection_string = # sprintf( # paste("Driver={Microsoft Access Driver (*.mdb, *.accdb)}", # "Dbq=%s", # "Pwd=%s", # sep=";"), paste(paste(absolute_path("datasource inspecciones"), db_file_name, sep="/" )),user_input_pwd)) # #https://www.connectionstrings.com/access-2007/ # # library(dplyr) # query <- # dbSendQuery(conexion, "SELECT * FROM inspecciones;") # # # dbFetch(query) # }) %>% as.data.frame() # tryCatch({ data <- readxl::read_excel(file_path) print("Archivo leído correctamente") data }, error = function(e) { print("Error al leer el archivo:") print(e$message) data.frame(Mensaje = "Error al leer el archivo Excel") }) } } # # 2.1 reports # -------- # inspecciones.activas=function( inspecciones ){ inspecciones %>% # dplyr::mutate( activa=TRUE ) %>% dplyr::filter( activa ) } # inspecciones.ensamblar_variables_de_reporte=function( inspecciones ){ inspecciones %>% dplyr::mutate( ano=ANO_ZARPE, mes=MES_ZARPE, arte=ARTE, sitio=SITIO, fecha=paste(ANO_ZARPE, MES_ZARPE, DIA_ZARPE, sep="+" ), horas_faena=HORA_FAENA ) } # tabla_de_reporte.formatear_ciclo_anual_en_columnas= function( Tabla_de_reporte ){ Tabla_de_reporte %>% tidyr::pivot_wider( names_from = mes, names_prefix = "month_", values_from = dplyr::last(names(.)) ) %>% Dataframe.order( c( grep(names(.), pattern="^[^m]", value=TRUE), paste("month_", 1:12, sep="")) ) } # table_logic_per_index=list( "1.1"=function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% split(paste(.$ano, .$mes, .$arte)) %>% lapply(function(sub_df){ data.frame( ano=dplyr::first(sub_df$ano), mes=dplyr::first(sub_df$mes), arte=dplyr::first(sub_df$arte), reportada="(conteo) faenas activas", faenas_activas=sub_df %>% nrow() ) }) %>% bind_rows() %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() }, "1.2"=function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% split(paste(.$ano, .$mes, .$arte, .$sitio)) %>% lapply(function(sub_df){ data.frame( ano=dplyr::first(sub_df$ano), mes=dplyr::first(sub_df$mes), arte=dplyr::first(sub_df$arte), sitio=dplyr::first(sub_df$sitio), reportada="(conteo) faenas activas", faenas_activas=sub_df %>% nrow() ) }) %>% bind_rows() %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() }, "1.3"=function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% split(paste(.$ano, .$mes, .$arte, .$AREA, .$SUBAREA)) %>% lapply(function(sub_df){ data.frame( ano=dplyr::first(sub_df$ano), mes=dplyr::first(sub_df$mes), arte=dplyr::first(sub_df$arte), area=dplyr::first(sub_df$AREA), subarea=dplyr::first(sub_df$SUBAREA), reportada="(conteo) faenas activas", faenas_activas=nrow(sub_df) ) }) %>% bind_rows() %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() }, "1.4"=function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% split(paste(.$ano, .$mes, .$arte)) %>% lapply(function(sub_df){ data.frame( ano=dplyr::first(sub_df$ano), mes=dplyr::first(sub_df$mes), arte=dplyr::first(sub_df$arte), reportada="dias de actividad", dias_actividad=length(unique(sub_df$fecha)) ) }) %>% bind_rows() %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() }, "1.5"=function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% split(paste(.$ano, .$mes, .$arte, .$sitio)) %>% lapply(function(sub_df){ data.frame( ano=dplyr::first(sub_df$ano), mes=dplyr::first(sub_df$mes), arte=dplyr::first(sub_df$arte), sitio=dplyr::first(sub_df$sitio), reportada="dias de actividad", dias_actividad=length(unique(sub_df$fecha)) ) }) %>% bind_rows() %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() }, "1.6"=function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% split(paste(.$ano, .$mes, .$arte)) %>% lapply(function(sub_df){ data.frame( ano=dplyr::first(sub_df$ano), mes=dplyr::first(sub_df$mes), arte=dplyr::first(sub_df$arte), reportada="(promedio) de las horas de faena x (1.3)", horas_de_faena=round(mean(sub_df$horas_faena),3)*(1.3) ) }) %>% bind_rows() %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() }, "1.7"=function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% split(paste(.$ano, .$mes, .$arte, .$AREA, .$SUBAREA )) %>% lapply(function(sub_df){ data.frame( ano=dplyr::first(sub_df$ano), mes=dplyr::first(sub_df$mes), arte=dplyr::first(sub_df$arte), area=dplyr::first(sub_df$AREA), subarea=dplyr::first(sub_df$SUBAREA), reportada="(promedio) de las horas de faena x (1.3)", horas_de_faena=round(mean(sub_df$horas_faena),3)*(1.3) ) }) %>% bind_rows() %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } ) # setwd(CODE_HOME) source("Compute_YEI.R") # table_logic_per_index[["2.1"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% inspecciones.GROUP_BY.compute_yei( GROUP_BY=c( "ano" , "mes", "CLASIFICAC", "NOM_VULGAR" ) ) %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } # # table_logic_per_index[["2.2"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% inspecciones.GROUP_BY.compute_yei( GROUP_BY=c( "ano", "mes", "arte" , "GRUPO", "SUBGRUPO" ) ) %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } # table_logic_per_index[["2.3"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% inspecciones.GROUP_BY.compute_yei( GROUP_BY=c( "ano", "mes", "arte", "sitio" ) ) %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } # table_logic_per_index[["2.4"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% inspecciones.GROUP_BY.compute_yei( GROUP_BY=c( "ano", "mes", "arte", "SUBGRUPO", "NOM_VULGAR" ) ) %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } # # table_logic_per_index[["2.5"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% inspecciones.GROUP_BY.compute_yei( GROUP_BY=c( "ano", "mes", "arte", "SUBGRUPO", "NOM_VULGAR", "AREA" ) ) %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } # table_logic_per_index[["2.6"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% inspecciones.GROUP_BY.compute_yei( GROUP_BY=c( "ano", "mes", "arte", "METODO", "GRUPO", "SUBGRUPO", "NOM_VULGAR" ) ) %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } # table_logic_per_index[["2.7"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% inspecciones.GROUP_BY.compute_yei( GROUP_BY=c( "ano", "mes", "arte", "METODO", "GRUPO", "SUBGRUPO", "NOM_VULGAR", "AREA" ) ) %>% tabla_de_reporte.formatear_ciclo_anual_en_columnas() } # # setwd(CODE_HOME) source("Compute_YEI.R") # inspecciones.ensamblar_captura_diaria= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.activas() %>% inspecciones.ensamblar_variables_de_reporte() %>% dplyr::transmute( captura_total=CT_KG, dia_zarpe=paste(ANO_ZARPE, MES_ZARPE , DIA_ZARPE, sep="/" ), dia_arribo=paste(ANO_ARRIBO, MES_ARRIBO, DIA_ARRIBO, sep="/" ), num_pescadores=PESCADORES, arte_pesca=ARTE, grupo=GRUPO ) %>% dplyr::mutate( dia_zarpe=as.Date(dia_zarpe), dia_arribo=as.Date(dia_arribo) ) %>% dplyr::mutate( num_dias=as.numeric((dia_arribo-dia_zarpe)+1) ) %>% dplyr::mutate( captura_diaria=round( (captura_total/num_dias),4), captura_diaria_por_pescador=round( ( (captura_total/num_dias)/num_pescadores ),4), ) } # table_logic_per_index[["3.1"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.ensamblar_captura_diaria() %>% split(paste(.$arte_pesca,.$grupo)) %>% lapply(function(sub_df){ data.frame( mean_captura_diaria=round(mean(sub_df$captura_diaria, na.rm=TRUE),3), sd_captura_diaria=round(sd(sub_df$captura_diaria, na.rm=TRUE), 3), #IC_captura_diaria_lower=, #IC_captura_diaria_lower=, arte_pesca=dplyr::first(sub_df$arte_pesca), grupo=dplyr::first(sub_df$grupo) ) }) %>% bind_rows() } # # table_logic_per_index[["3.2"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.ensamblar_captura_diaria() %>% split(paste(.$arte_pesca,.$grupo)) %>% lapply(function(sub_df){ data.frame( mean_captura_diaria_por_pescado=round(mean(sub_df$captura_diaria_por_pescador, na.rm=TRUE),3), sd_captura_diaria_por_pescado=round(sd(sub_df$captura_diaria_por_pescador, na.rm=TRUE), 3), #IC_captura_diaria_lower=, #IC_captura_diaria_lower=, arte_pesca=dplyr::first(sub_df$arte_pesca), grupo=dplyr::first(sub_df$grupo) ) }) %>% bind_rows() } table_logic_per_index[["3.3"]]= function( inspecciones=inspecciones.cache ){ inspecciones %>% inspecciones.ensamblar_captura_diaria() %>% dplyr::mutate( captura_diaria_por_pescador_por_hora = captura_diaria_por_pescador / 24 # Converting to hourly rate ) %>% split(paste(.$arte_pesca,.$grupo)) %>% lapply(function(sub_df){ data.frame( mean_captura_diaria_por_pescador_por_hora=round(mean(sub_df$captura_diaria_por_pescador_por_hora, na.rm=TRUE),3), sd_captura_diaria_por_pescador_por_hora=round(sd(sub_df$captura_diaria_por_pescador_por_hora, na.rm=TRUE), 3), arte_pesca=dplyr::first(sub_df$arte_pesca), grupo=dplyr::first(sub_df$grupo) ) }) %>% bind_rows() } # fetch_table_per_index=function( index=1.1 ){ table_logic_per_index[[index]]() } # table.preview=function( table, max_rows=15, max_cols=8 ){ tryCatch({ table[1:min(max_rows, nrow(table) ), 1:min(max_cols, ncol(nrow(table)))] }, error = function(e){empty_table}) } # 5. exportar a un reporte ?nico # # 6. interfaz del usuario exportar a un reporte ?nico # setwd(PROYECT_HOME) # library(shiny) ui = fluidPage( column(3, fluidRow( wellPanel( shiny::HTML("
Bienvenido a la aplicación pesquera . Escoja una acción
") )), fluidRow( wellPanel( shiny::tags$strong("Credenciales"), shiny::textInput("usuario", label=NULL, placeholder = "inserte usuario", width='100%'), shiny::passwordInput("contrasena", label=NULL, placeholder = "inserte contrasena", width='100%') # shiny::actionButton("enviar_credenciales", # "Enviar credenciales", # width='100%') )), fluidRow( wellPanel( fileInput('main_file_input', 'Seleccione un archivo desde su computador', accept = c(".xlsx") ))), fluidRow( wellPanel( shiny::tags$strong("Reportes"), shiny::tags$br(), shiny::actionButton("exportar_reportes", "Exportar reportes", width='100%'), textOutput("export_result") ), plotOutput( "logo", width = "100%", height = "200px") ), ), # column, column(12-4, offset = 1, fluidRow(wellPanel( shiny::tags$strong("Mensajes"), textOutput("messages"))), shiny::tags$strong("Pre-visualización de reportes"), tabsetPanel( tabPanel("0. Tabla maestra", div(shiny::tableOutput("0_tabla_maestra"), style = "font-size:50%")), tabPanel("1. Esfuerzo", tabsetPanel( tabPanel( "1.1", div(shiny::tableOutput("1.1")), style = "font-size:50%"), tabPanel( "1.2", div(shiny::tableOutput("1.2")), style = "font-size:50%"), tabPanel( "1.3", div(shiny::tableOutput("1.3")), style = "font-size:50%" ), tabPanel( "1.4", div(shiny::tableOutput("1.4")), style = "font-size:50%"), tabPanel( "1.5", div(shiny::tableOutput("1.5")), style = "font-size:50%"), tabPanel( "1.6", div(shiny::tableOutput("1.6")), style = "font-size:50%"), tabPanel( "1.7", div(shiny::tableOutput("1.7")), style = "font-size:50%") )), tabPanel("2. Captura total", tabsetPanel( tabPanel( "2.1", div(shiny::tableOutput("2.1")), style = "font-size:50%"), tabPanel( "2.2", div(shiny::tableOutput("2.2")), style = "font-size:50%"), tabPanel( "2.3", div(shiny::tableOutput("2.3")), style = "font-size:50%"), tabPanel( "2.4", div(shiny::tableOutput("2.4")), style = "font-size:50%"), tabPanel( "2.5", div(shiny::tableOutput("2.5")), style = "font-size:50%"), tabPanel( "2.6", div(shiny::tableOutput("2.6")), style = "font-size:50%"), tabPanel( "2.7", div(shiny::tableOutput("2.7")), style = "font-size:50%") )), tabPanel("3. CPUE", tabsetPanel( tabPanel( "3.1", div(shiny::tableOutput("3.1")), style = "font-size:50%"), tabPanel( "3.2", div(shiny::tableOutput("3.2")), style = "font-size:50%"), tabPanel( "3.3", div(shiny::tableOutput("3.3")), style = "font-size:50%"))) # )), ))) # index.managed_table=function( index, input ){ if(is.null(input$main_file_input) || CURRENT_STATE=="unauthenticated"){ empty_table } else { tryCatch({ fetch_table_per_index(index) %>% table.preview() }, error = function(e) { empty_table }) } } # server server = function(input, output) { # usuario=reactive({input$usuario}) contrasena=reactive({input$contrasena}) exportar=reactive({input$exportar_reportes}) exportado=reactiveValues( se_exporto=FALSE ) actualizar_mensaje_exportado=reactive({ exportado }) # output$"0_tabla_maestra" = renderTable({ credentials.authenticate(input$usuario, input$contrasena) print("Autenticado") file_path_ = input$main_file_input$datapath print("Path") print(file_path_) data <- query_data(file_path = file_path_) #print(paste("Tabla maestra data:", data)) # debug statement inspecciones.cache <<- data loaded_data(data) data %>% table.preview() }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) # Crear un reactive value para los datos cargados loaded_data <- reactiveVal(NULL) # Observar cambios en el archivo cargado observeEvent(input$main_file_input, { file_path_ <- input$main_file_input$datapath data <- query_data(file_path = file_path_) inspecciones.cache <<- data loaded_data(data) }) authenticated <- reactive({ credentials.authenticate(input$usuario, input$contrasena) return(.GlobalEnv[["CURRENT_STATE"]] == "authenticated") }) output$"1.1" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("1.1") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover = TRUE, bordered = TRUE, width = '100%', spacing = "s" ) output$"1.2" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("1.2") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"1.3" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("1.3") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"1.4" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("1.4") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"1.5" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("1.5") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"1.6" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("1.6") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"1.7" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("1.7") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"2.1" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("2.1") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"2.2" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("2.2") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"2.3" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("2.3") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"2.4" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("2.4") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"2.5" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("2.5") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"2.6" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("2.6") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"2.7" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("2.7") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"3.1" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("3.1") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"3.2" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("3.2") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"3.3" = renderTable({ if (authenticated()) { print(paste("User is authenticated, showing results...")) data <- fetch_table_per_index("3.3") data } else { print(paste("User is not authenticated, returning error message...")) "No tiene permisos para ver esta tabla" } }, striped = TRUE, hover=TRUE, bordered=TRUE, width='100%', spacing="s" ) output$"export_result"=renderText({ actualizar_mensaje_exportado() ifelse(exportado$se_exporto==TRUE, "Felicidades! El reporte fue exportado", "Aún no has exportado el reporte") }) observeEvent(input$exportar_reportes,{ if (.GlobalEnv[["CURRENT_STATE"]] == "authenticated") { # Ensure the 'reportes' directory exists setwd(PROYECT_HOME) if (!dir.exists("reportes")) { dir.create("reportes") } setwd("reportes") # Create a new workbook wb <- openxlsx::createWorkbook() # Generate and add each report to a separate sheet report_indices <- c("1.1", "1.2","1.3", "1.4", "1.5", "1.6", "1.7", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "3.1", "3.2","3.3") for (index in report_indices) { tryCatch({ report_data <- fetch_table_per_index(index) openxlsx::addWorksheet(wb, sheetName = paste("Reporte", index)) openxlsx::writeData(wb, sheet = paste("Reporte", index), x = report_data) }, error = function(e) { print(paste("Error generating report", index, ":", e$message)) }) } # Save the workbook openxlsx::saveWorkbook(wb, "exporte_reportes.xlsx", overwrite = TRUE) .GlobalEnv[["EXPORT_STATE"]] <- TRUE exportado$se_exporto <- TRUE # Optional: Show a message or log the successful export print("Reports exported successfully!") } }) } # Run the application shinyApp(ui = ui, server = server)