Skip to content
Snippets Groups Projects
download.R 4.93 KiB
Newer Older
Vincent DUPONT's avatar
Vincent DUPONT committed
### download.R
### Module de téléchargement des données
### Ce module permet aux utilisateurs de télécharger les données filtrées pour la région
### frontalière entre le Brésil et la Colombie.

##################
### Préparation des listes de sélection
##################

# Préparation des zones résidentielles colombiennes
# Cette section filtre et organise les zones résidentielles de Colombie pour la sélection
DOWN_residencial_area_co <- JSON_area_har %>%
  filter(source == "CO") %>%
  select(id, name) %>%
  arrange(name)
DOWN_residencial_area_list_co <- as.list(DOWN_residencial_area_co$id)
names(DOWN_residencial_area_list_co) <- DOWN_residencial_area_co$name

# Préparation des zones résidentielles brésiliennes
# Similaire à la Colombie, mais pour les zones du Brésil
DOWN_residencial_area_br <- JSON_area_har %>%
  filter(source == "BR") %>%
  select(id, name) %>%
  arrange(name)
DOWN_residencial_area_list_br <- as.list(DOWN_residencial_area_br$id)
names(DOWN_residencial_area_list_br) <- DOWN_residencial_area_br$name

# Préparation des centres de santé colombiens
DOWN_health_center_co <- JSON_healthcenter_har %>%
  filter(source == "CO") %>%
  select(id_center, name) %>%
  arrange(name)
DOWN_health_center_list_co <- as.list(DOWN_health_center_co$id_center)
names(DOWN_health_center_list_co) <- DOWN_health_center_co$name

# Préparation des centres de santé brésiliens
DOWN_health_center_br <- JSON_healthcenter_har %>%
  filter(source == "BR") %>%
  select(id_center, name) %>%
  arrange(name)
DOWN_health_center_list_br <- as.list(DOWN_health_center_br$id_center)
names(DOWN_health_center_list_br) <- DOWN_health_center_br$name

##################
### Interface utilisateur réactive
##################

# Interface pour la sélection des zones colombiennes
# Cette fonction génère dynamiquement les options de sélection selon le type choisi
output$DOWNlocation_co <- renderUI({
  switch(input$DOWNtype,
         "residence_area" = selectInput("DOWNselection_co", tr("CO"), 
                                        DOWN_residencial_area_list_co, multiple = TRUE),
         "center" = selectInput("DOWNselection_co", tr("CO"), 
                                DOWN_health_center_list_co, multiple = TRUE),
         "infection_place" = selectInput("DOWNselection_co", tr("CO"), 
                                         DOWN_residencial_area_list_co, multiple = TRUE)
  )
})

# Interface pour la sélection des zones brésiliennes
output$DOWNlocation_br <- renderUI({
  switch(input$DOWNtype,
         "residence_area" = selectInput("DOWNselection_br", tr("BR"), 
                                        DOWN_residencial_area_list_br, multiple = TRUE),
         "center" = selectInput("DOWNselection_br", tr("BR"), 
                                DOWN_health_center_list_br, multiple = TRUE),
         "infection_place" = selectInput("DOWNselection_br", tr("BR"), 
                                         DOWN_residencial_area_list_br, multiple = TRUE)
  )
})

##################
### Préparation des données pour le téléchargement
##################

# Tableau réactif principal
# Cette fonction filtre les données selon les critères sélectionnés
DOWN_tab <- reactive({
  # Conversion des dates sélectionnées
  date1 <- as.Date(paste0(input$DOWNdates[1],"-01-01"))
  date2 <- as.Date(paste0(input$DOWNdates[2],"-12-31"))
  
  # Application des filtres de base
  df <- consultation_har_filter(JSON_cons_har,
                                new_attack = input$DOWNnew_attack,
                                diagn = input$DOWNdiagn,
                                sex = input$DOWNsex,
                                minAge = input$DOWNage[1], 
                                maxAge = input$DOWNage[2]
  ) %>%
    filter(consultation_date >= date1 & consultation_date <= date2)
  
  # Filtrage selon le type de localisation
  if(input$DOWNtype == "center"){
    df <- df %>% filter(id_center %in% c(input$DOWNselection_co, 
                                         input$DOWNselection_br))
  } else if(input$DOWNtype == "residence_area"){
    df <- df %>% filter(residence_place %in% c(input$DOWNselection_co, 
                                               input$DOWNselection_br))
  } else if(input$DOWNtype == "infection_place"){
    df <- df %>% filter(infection_place %in% c(input$DOWNselection_co, 
                                               input$DOWNselection_br))
  }
  
  # Sélection des colonnes pertinentes
  df <- df %>% select(
    source,
    id_center,
    residence_place,
    infection_place,
    consultation_date,
    patient_sex,
    patient_age,
    new_attack,
    diagnosis_result
  )
  
  return(df)
})

##################
### Interface de téléchargement
##################

# Rendu du tableau de données avec options de téléchargement
output$DOWN_table <- renderDataTable(
  DOWN_tab(),
  server = FALSE,
  rownames = FALSE, 
  extensions = 'Buttons', 
  options = list(
    dom = 'Bfrtip',
    buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
  )
)