diff --git a/README.md b/README.md index 407faa3..074806e 100644 --- a/README.md +++ b/README.md @@ -45,4 +45,10 @@ ``` AUTH_DB_KEY = "this_is_your_password" -``` \ No newline at end of file +``` + +# trade-ofs + +## экспорт данных + +Числовые значения выгружаются в xlsx в виде текстовых значений, чтобы сохранить указаные "NA" в базе. Потенциально возможно добавление опции при экспорте для корректного экспотра числовых значений. \ No newline at end of file diff --git a/app.R b/app.R index 1222eee..1b7c107 100644 --- a/app.R +++ b/app.R @@ -812,7 +812,7 @@ server <- function(input, output, session) { # set date params options("openxlsx2.dateFormat" = "dd.mm.yyyy") - cli::cli_alert_success("DATA EXPORTED") + cli::cli_alert_success("База успешно экспортирована") showNotification("База успешно экспортирована", type = "message") log_action_to_db("export db", con = con) @@ -996,11 +996,26 @@ server <- function(input, output, session) { filter(!form_type %in% c("description", "nested_forms")) date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) + number_columns <- subset(scheme, form_type == "number", form_id, drop = TRUE) + + # функция для преобразование числовых значений и сохранения "NA" + num_converter <- function(old_col) { + vec_with_na <- which(old_col == "NA") + + # текстовые и числовые значения в текст: '24.0', '24,5' > '24', '24,5' (также обрезеаются десятичные значения где не нужно) + new_col <- suppressWarnings(as.character(as.double(gsub(",", "\\.", old_col)))) + + # значения где были явно указаны 'NA' остаются с текстом 'NA' + new_col[which(old_col == "NA")] <- "NA" + + gsub("\\.", ",", new_col) + } df <- df |> dplyr::mutate( # даты - к единому формату dplyr::across(tidyselect::all_of({{date_columns}}), \(x) purrr::map_chr(x, db$excel_to_db_dates_converter)), + dplyr::across(tidyselect::all_of({{number_columns}}), num_converter), ) |> select(all_of(unique(c(main_key_id, scheme$form_id)))) @@ -1044,8 +1059,6 @@ server <- function(input, output, session) { # FUNCTIONS ============================== ## reading tables from db all ======== read_df_from_db_all <- function(table_name, con) { - # DBI::dbConnect(RSQLite::SQLite(), dbfile) - # on.exit(DBI::dbDisconnect(con), add = TRUE) # check if this table exist if (table_name %in% dbListTables(con)) { @@ -1061,8 +1074,6 @@ server <- function(input, output, session) { ## LOGGING ACTIONS log_action_to_db <- function(action, pat_id = as.character(NA), con) { - # DBI::dbConnect(RSQLite::SQLite(), dbfile) - # on.exit(DBI::dbDisconnect(con), add = TRUE) action_row <- tibble( user = ifelse(AUTH_ENABLED, res_auth$user, "anonymous"), diff --git a/modules/data_validation.R b/modules/data_validation.R index 8255a8a..a23755f 100644 --- a/modules/data_validation.R +++ b/modules/data_validation.R @@ -93,7 +93,7 @@ init_val <- function(scheme, ns) { if (!all(compare_to_dict)) { text <- paste0("'",x[!compare_to_dict],"'", collapse = ", ") - glue::glue("Данные варианты, не соответствуют схеме: {text}") + glue::glue("варианты, не соответствующие схеме: {text}") } }) diff --git a/modules/db.R b/modules/db.R index 96b19f3..64c8955 100644 --- a/modules/db.R +++ b/modules/db.R @@ -141,7 +141,6 @@ compare_existing_table_with_schema <- function( length(form_base_difference) == 0 && length(base_form_difference) == 0) { cli::cli_warn("changes in scheme file detected: assuming order changed only") - print(all_ids_from_schema) } if (length(all_ids_from_schema) == length(colnames(df_to_rewrite)) &&