-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.R
151 lines (135 loc) · 4.23 KB
/
app.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
library(shiny)
library(dplyr)
library(readxl)
library(readr)
library(stringi)
source("import.R")
source("notifications.R")
downloadButton <- function(...) {
tag <- shiny::downloadButton(...)
tag$attribs$download <- NULL
tag
}
ui <- fluidPage(
tags$head(
tags$style(HTML("
.conteneur{
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
#shiny-notification-panel{
left:calc(50% - 150px);
width: 300px;
top:0;
bottom:auto;
right:auto;
cursor: pointer;
}
.shiny-notification-error{
background-color: #bd362f;
color:white;
}
.shiny-notification-warning{
background-color: #f89406;
color:white;
}"))),
titlePanel("Remplacement IPP par numéro d'inclusion"),
div("Ce site permet de fusionner le fichier de correspondance avec celui du DIM, puis ne garder que le numéro d'inclusion et les données du DIM."),
div("Il nécessite que les deux fichiers aient une colonne nommée IPP en majuscule."),
div("Les fichiers peuvent être au format excel ou csv."),
sidebarLayout(
sidebarPanel(
fileInput("fichierCorrespondance", label = "Fichier de correspondance",
placeholder = "Aucun fichier sélectionné", buttonLabel = "Parcourir..."),
uiOutput("nincl"),
uiOutput("dim")
),
mainPanel(
uiOutput("ippmanquants"),
uiOutput("result")
)
)
)
server <- function(input, output) {
values <- reactiveValues()
observe({
req(input$fichierCorrespondance)
tab_corresp <- import_file(input$fichierCorrespondance$datapath)
if (!any(grepl("IPP", names(tab_corresp), ignore.case = FALSE))){
toast_showNotif("Il faut que le fichier de correspondance ait une colonne nommée IPP (en majuscule)", type = "error",
id = "corresp")
return()
}
values$tabCorresp <- tab_corresp
})
observe({
values$ready <- isTRUE(!is.null(input$colNincl) && input$colNincl != "-" && !is.null(values$tabDIM))
})
output$dim <- renderUI({
req(input$colNincl != "-")
fileInput("fichierDIM", label = "Fichier envoyé par le DIM",
placeholder = "Aucun fichier sélectionné", buttonLabel = "Parcourir...")
})
output$nincl <- renderUI({
req(values$tabCorresp)
tagList(
selectInput("colNincl", "Sélectionnez la colonne correspondant au numéro d'inclusion",
choices = c("-",colnames(values$tabCorresp)), selected = NULL)
)
})
observe({
req(input$fichierDIM)
tab_dim <- import_file(input$fichierDIM$datapath)
if (!any(grepl("IPP", names(tab_dim), ignore.case = FALSE))){
showNotification("Il faut que le fichier du DIM ait une colonne nommée IPP (en majuscule)", type = "error",
id = "dim")
return()
}
values$tabDIM <- tab_dim
})
observe({
req(values$ready)
values$final <- left_join(values$tabCorresp %>% select(all_of(c("IPP", input$colNincl))), values$tabDIM, by = "IPP")
})
output$result <- renderUI({
req(values$final)
tagList(
h1("Table fusionnée"),
DT::dataTableOutput("tableFinale")
)
})
output$tableFinale <- DT::renderDataTable({
values$final
}, options = list(searching = FALSE, scrollX = '100%',
paging = FALSE, info = FALSE, ordering = FALSE))
output$ippmanquants <- renderUI({
req(values$ready)
ipp_manquants <- anti_join(values$tabCorresp %>% select(all_of(c("IPP", input$colNincl))), values$tabDIM, by = "IPP") %>%
pull(IPP)
tagList(
if (length(ipp_manquants)){
div(class = "alert alert-danger", paste("Il manque les IPP suivants :", paste(ipp_manquants, collapse = ", ")))
} else {
"Aucun IPP ne manque."
},
fluidRow(
column(width = 3, offset = 7,
downloadButton("download", "Télécharger le fichier anonymisé")
)
)
)
})
output$download <- downloadHandler(
filename = function(){
paste0("fichier-pmsi-urceco-", format(Sys.time(), "%Y-%m-%dT%Hh%M"), ".csv")
},
content = function(file){
write.csv(values$final %>% select(-IPP), file, row.names = FALSE)
},
contentType = "text/csv"
)
}
# Run the application
shinyApp(ui = ui, server = server)