From 7264500512c745ccadab1c4d8d386ad058d7371f Mon Sep 17 00:00:00 2001 From: aureol-le-rocher <95870033+aureol-le-rocher@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:39:41 +0000 Subject: [PATCH 1/6] normalize path to uppercase to ensure consistent joins --- R/set_permissions.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/set_permissions.R b/R/set_permissions.R index e38ee66..457e629 100644 --- a/R/set_permissions.R +++ b/R/set_permissions.R @@ -83,6 +83,7 @@ set_permissions <- function(campaign_name, dribble_files <- dribble_files |> dplyr::mutate(dir_path = ifelse(stringr::str_ends(path, "/"), path, paste0(fs::path_dir(path), "/"))) |> + dplyr::mutate(path = stringr::str_to_upper(path)) |> googledrive::drive_reveal("mimeType") files_for_zs_editors <- dribble_files |> dplyr::filter(str_ends(mime_type, "spreadsheet")) |> From 71047433a2511cd3fb0f7c72baebc517cd5235af Mon Sep 17 00:00:00 2001 From: aureol-le-rocher <95870033+aureol-le-rocher@users.noreply.github.com> Date: Sat, 21 Mar 2026 11:42:18 +0000 Subject: [PATCH 2/6] ensure zone_de_sante matches antenne to prevent permission errors --- R/server.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/server.R b/R/server.R index 5332354..cfbb16c 100644 --- a/R/server.R +++ b/R/server.R @@ -342,7 +342,7 @@ server <- function(input, output, session) { filtered_zs_p <- if (!is.null(selected_prov) && length(selected_prov) > 0) { current_data |> - filter(provinces %in% selected_prov) |> + filter(provinces %in% selected_prov,antennes %in% input$perm_antenne) |> pull(zones_de_sante) |> unique() } else { From a7f0f5a683164929ad0659223588b41d3bed56e7 Mon Sep 17 00:00:00 2001 From: aureol-le-rocher <95870033+aureol-le-rocher@users.noreply.github.com> Date: Sat, 21 Mar 2026 12:11:22 +0000 Subject: [PATCH 3/6] add req() guards to renderPlot() to prevent error --- R/server.R | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/R/server.R b/R/server.R index cfbb16c..9d60f94 100644 --- a/R/server.R +++ b/R/server.R @@ -1718,6 +1718,8 @@ observeEvent(input$click_download_campaign_quality_monitoring,{ #### Plots ---- output$campaign_completeness_plot <- renderPlot( { + req(input$prov_selector_campaign_completeness) + req(input$zs_selector_campaign_completeness) validate( need(!is.null(campaign_quality()), "No campaign quality data."), @@ -1736,6 +1738,9 @@ observeEvent(input$click_download_campaign_quality_monitoring,{ output$campaign_completeness_plot_daily <- renderPlot( { + + req(input$prov_selector_campaign_completeness) + req(input$zs_selector_campaign_completeness) validate( need(!is.null(campaign_quality()), "No campaign quality data."), need(nrow(campaign_quality()) > 0, "No campaign quality data.") @@ -1749,6 +1754,9 @@ observeEvent(input$click_download_campaign_quality_monitoring,{ output$campaign_urban_rural_plot <- renderPlot( { + req(input$prov_selector_campaign_completeness) + req(input$zs_selector_campaign_completeness) + validate( need(!is.null(campaign_quality()), "No campaign quality data."), need(nrow(campaign_quality()) > 0, "No campaign quality data.") @@ -1763,6 +1771,8 @@ observeEvent(input$click_download_campaign_quality_monitoring,{ output$campaign_recovery_plot <- renderPlot( { + req(input$prov_selector_campaign_completeness) + req(input$zs_selector_campaign_completeness) validate( need(!is.null(campaign_quality()), "No campaign quality data."), need(nrow(campaign_quality()) > 0, "No campaign quality data.") From b6d04d113ebb639bc51e451e86008a9f06535b86 Mon Sep 17 00:00:00 2001 From: aureol-le-rocher <95870033+aureol-le-rocher@users.noreply.github.com> Date: Sat, 21 Mar 2026 12:37:08 +0000 Subject: [PATCH 4/6] reset antenne selector in ui_monitoring() to first valid option on province change --- R/server.R | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/R/server.R b/R/server.R index 9d60f94..d1d5ff5 100644 --- a/R/server.R +++ b/R/server.R @@ -395,12 +395,14 @@ server <- function(input, output, session) { options = lapply(x <- filtered_campaign_ant, function(x) list(key = x, text = x) ), - value = if (is.null(isolate(input$ant_selector_campaign_completeness))) { - filtered_campaign_ant[1] - } else { - isolate(input$ant_selector_campaign_completeness) + value = { + current <- isolate(input$ant_selector_campaign_completeness) + if (!is.null(current) && current %in% filtered_campaign_ant) { + current + } else { + filtered_campaign_ant[1] + } } - # value = isolate(input$ant_selector_campaign_completeness) ) From 178afc01f96652f42a2614d888536dc36334809b Mon Sep 17 00:00:00 2001 From: aureol-le-rocher <95870033+aureol-le-rocher@users.noreply.github.com> Date: Sat, 21 Mar 2026 15:51:13 +0000 Subject: [PATCH 5/6] Add missing recovery and coverage column to empty tibble schema --- R/server.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/R/server.R b/R/server.R index d1d5ff5..87c8989 100644 --- a/R/server.R +++ b/R/server.R @@ -127,9 +127,13 @@ server <- function(input, output, session) { aire_de_sante = character(), jour = character(), rapport_completude_pct = numeric(), + couverture_campagne_pct = numeric(), # Was missing couverture_campaign_cumulative = numeric(), avg_vax_rural = numeric(), avg_vax_urban = numeric(), + recovery_0_11 = numeric(), # Was missing and was returning an error at the start of the app + recovery_12_23 = numeric(), # Was missing + recovery_24_59 = numeric(), # Was missing recovery_0_11_cumulative = numeric(), recovery_12_23_cumulative = numeric(), recovery_24_59_cumulative = numeric(), From 321dda33fb87412add845472bca6cc49d4344cbb Mon Sep 17 00:00:00 2001 From: aureol-le-rocher <95870033+aureol-le-rocher@users.noreply.github.com> Date: Sat, 21 Mar 2026 18:14:02 +0000 Subject: [PATCH 6/6] Load template data explicitely via data() in the server --- .Rbuildignore | 1 + R/server.R | 11 ++++++----- data-raw/import_template_data.R | 10 ++++++++++ data-raw/permission_template.csv | 5 +++++ data-raw/template_geographic.csv | 10 ++++++++++ data/data_perm.rda | Bin 492 -> 638 bytes data/template_data_geographics.rda | Bin 786 -> 552 bytes 7 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 data-raw/import_template_data.R create mode 100644 data-raw/permission_template.csv create mode 100644 data-raw/template_geographic.csv diff --git a/.Rbuildignore b/.Rbuildignore index 9257dd4..1732f82 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -9,3 +9,4 @@ ^pkgdown$ ^\.github$ ^\.secrets$ +^data-raw$ diff --git a/R/server.R b/R/server.R index 87c8989..6ae3b14 100644 --- a/R/server.R +++ b/R/server.R @@ -709,15 +709,16 @@ server <- function(input, output, session) { shinyjs::click("download_template") }) - + data("template_data_geographics", package = "rdcAVS", envir = globalenv()) + data("data_perm", package = "rdcAVS", envir = globalenv()) output$download_template <- downloadHandler( filename = function(){ paste("template_geographic",Sys.Date(),".csv",sep = "") }, content = function(file){ - x <- get("template_data_geographics", envir = asNamespace("rdcAVS")) - write.csv(x,file,row.names = FALSE) + # x <- get("template_data_geographics", envir = asNamespace("rdcAVS")) + write.csv(template_data_geographics,file,row.names = FALSE) } ) @@ -1387,8 +1388,8 @@ observeEvent(input$download_geo,{ paste("template_permissions",Sys.Date(),".csv",sep = "") }, content = function(file){ - y <- get("data_perm", envir = asNamespace("rdcAVS")) - write.csv(y,file,row.names = FALSE) + # y <- get("data_perm", envir = asNamespace("rdcAVS")) + write.csv(data_perm,file,row.names = FALSE) } ) diff --git a/data-raw/import_template_data.R b/data-raw/import_template_data.R new file mode 100644 index 0000000..89cb7bc --- /dev/null +++ b/data-raw/import_template_data.R @@ -0,0 +1,10 @@ +## code to import `data_perm` +library(readr) +data_perm <- readr::read_csv("data-raw/permission_template.csv") +usethis::use_data(data_perm, overwrite = TRUE) + + +## code to import `template_data_geographics` + +template_data_geographics <- readr::read_csv("data-raw/template_geographic.csv") +usethis::use_data(template_data_geographics, overwrite = TRUE) diff --git a/data-raw/permission_template.csv b/data-raw/permission_template.csv new file mode 100644 index 0000000..6be54b2 --- /dev/null +++ b/data-raw/permission_template.csv @@ -0,0 +1,5 @@ +name,phone,notes,email,level,role,province,antenne,zone_de_sante +Test Level zone de sante,8175149870,Data manager_ZS,paul08@gmail.com,zone de sante,writer,PROVINCE1,ANTENNE1,ZONE SANTE 1 +Test Level Antenne,82231416576,Data manager_ANTENNE,km34@gmail.com,antenne,reader,PROVINCE2,ANTENNE2, +Test Level Province,814649110,Data manger_PROVINCE,kwa@gmail.com,province,reader,PROVINCE1,, +Test Level National,,partenaire,auer@gmail.com,national,writer,,, diff --git a/data-raw/template_geographic.csv b/data-raw/template_geographic.csv new file mode 100644 index 0000000..4a2f6e1 --- /dev/null +++ b/data-raw/template_geographic.csv @@ -0,0 +1,10 @@ +provinces,antennes,zones_de_sante,aires_de_sante,population_totale +Maniema,Kasongo,Kabambare,Biyungi,12345 +Maniema,Kasongo,Kabambare,Fimbo Nyingi,12347 +Maniema,Kasongo,Kabambare,Kabeya,12349 +Maniema,Kasongo,Kabambare,Kalonda Kibuyu,12351 +Maniema,Kasongo,Kabambare,Kalunga Mugabo,12353 +Maniema,Kasongo,Kabambare,Kiyanga,12355 +Maniema,Kasongo,Kabambare,Malota,12357 +Maniema,Kasongo,Kabambare,Musongela,12359 +Maniema,Kasongo,Kabambare,Ndanda Lukala,12361 diff --git a/data/data_perm.rda b/data/data_perm.rda index 127a1183447a7bfb498fc1625a3ba840ba97864d..db1a736c97039b4b503f4899db9212991dca9339 100644 GIT binary patch literal 638 zcmV-^0)hQPT4*^jL0KkKSq1HMzyJb@f7k#2-9SPId_aGt-%!8r-;lrv5C8x`0DwRM zKn1`8eU!2Q!%-%H(U2Md00E((WB@%Q(f|OFNs0*3pfqRz00003Kmasoa|xg{28|d- zgAt}COicz6pkxCk0!cLtsPxFmG{|ISJtlzDOn?~xVF#$pi9Va+9PUN{FcTy}C6kpXGJx`7X@$zFEC|cah)Rj0SoBg*_GLZl+I>oxkO3Mnd zK|9FU8VZ*uvmHt)IuZz^GC(fo1Sl{Icc!Y1l4JdVaqfkrn>7k>#hhDKV;N3ODU|rB z7tUk|UXFzTI^`PZE3gFwl1+dxNKGKlfPe|Kng)VtpnyU5^g#k91v~_!O`yanIuj2n z{tgrAL3e~5)6Wqsj4I3u5)QagStZ;7nP9rnXs8sWDgb`oa1sE(JK|9=h5^fIfezsj zSl~Kv^al8723bHgouw%dfnnqzXL0@A9AU)K0)vR*6DMGT^oKgo2W894LA9;VM=fhk zo5~@84X-|N835_xr))F=_S#`R?+d!$_Bd YCxE-cEH?ot=$rRy2Ko_;s08QWtQvd(} literal 492 zcmVb3o2taiR7GS^k-;h86073u(zyaK8 zm8ud@l6fbmqIyy2o}uL)pbU)+)X|gDdVwgKDt@Hjs-Bveq-p7(Kn6ez5s{8y696Uv z0Wbg)00AOX6v}3%nrJk7fB*mnO*GR<=+lfu64|`i(@cWgSX6{a7AoqMBUB|ugiMhD zvor0P-lvw#*uWJ1s53;I(5&<~qD{svos5-Ne9JTL%mh zCA7e#5i+X@7Bx%C7FY;im?J7XeWPXpOswmXPIjPWp7)ANiI1)JuawRQMQB+fj`xru ikyzT@IK=zUb+-@iun*e=W@8#V{9VZu;X*?hyiEYi_1@b6 diff --git a/data/template_data_geographics.rda b/data/template_data_geographics.rda index b4c8a9add257ec394bf4afdee4ab75d4957ccf71..890b5df6150da2f5582f41d8c176ddca4e2eb448 100644 GIT binary patch literal 552 zcmV+@0@wXQT4*^jL0KkKS)rpGI{*S4f5iX)=_mXL2tZX27C^u6->^Uc06+kNzycf! zph8j-8UO}>0000000212lO`h*047WmAO?&h07C)BOqnqlm;o|inE*6l7y=jskpu{B zMpH(nnlfn7paG*G(`sphDK6kJW<(HZnr2xXP)d@9X*&=cloCn9JBb?G=E-c@D6(#O zX4g_uYe4JYtZ?XSjS~_vV7e%svA}CK&)drX)|iTtVF(6bTi?8{b~e4qW4Hq}0D38u z0uhcO90~RCU0K^vVL`?U=mi-G79c>tk{Km)phA-jz{p^W1Xu(IPtm{#fhQKw$g{dF z=Z}TF*w_arPxAAm3zi3H8I-0i0c~AfE^_a0rW5D|F^(yqWv@c)b}$@}+1g4bu@7i& zo$@9AZsZflS!~cyIf?g!Xb(^!JrtN@phZAbB*AfwVR0iK!faYXY7JX5zQ`8>xbNZ0 zk49%&skk@|iZq9UfG6Q=&`K;tf}@Dc78~34nfqo*voc4C>jY+0LIi0#nlN_dAA-QTo@148&^PkthpL>2l{mc^pl@z87{x0N-aG@bXMmTmay6A)e literal 786 zcmV+t1MU1mT4*^jL0KkKSq>L4>i`F$fB*mg=_E)8fAH_J*FeAT-;h911x!Dg-}c}S z006`R1O>nX=NU6*Qh_BVnhBsN^lEyV4=B(ckQoEYGzNfrni_h50ks~XwKO&oJ*5Vc zpQTNy|EW+70MHEpXaE2J&@?myMnC`opa3`k00000000^Q000000000HDNQt{o{bQC zBN31Rri}mwKpFr50Av6F0MXjDu-?|QlI9@4i*F`ocUL8SiaLAy63b$&zlob(I*LD= z_BHkQVc?cbc6&C$^={ViSS;uixhafVEd-N9#JTXdocn};YXC-~g#;``1kdErF!Tnf z%zl1Vt4n5H21bv~ncpZK>2TmyfSf2d^(A+;3I?2)nicdpbk3EC0cm22G9V^p)ViiL zPF4du~jejthvEa8EL1wpL|<9@ALRdf9)bDZbIez;)^Q4BD`_=o}rkpvJyQNl395j7D- z6i~Q3Hj796buO@vkgotNs}m$4wwm(;X-!m1o-(wHN`RU!~&-D z(I^aL;)s)@l*$5c$y6u z3Gy0LM>TN_cDC*14=?)l#v~V5fzah@TFehP#nVF)m55hkeo&ogZdoohkInFcHq)$