diff --git a/app.R b/app.R index 7cc9f5c..f045a6e 100644 --- a/app.R +++ b/app.R @@ -868,6 +868,7 @@ server <- function(input, output, session) { date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) number_columns <- subset(scheme, form_type == "number", form_id, drop = TRUE) + other_cols <- which(colnames(df) %in% c(date_columns, number_columns)) df <- df |> dplyr::mutate( @@ -875,9 +876,10 @@ server <- function(input, output, session) { dplyr::across(tidyselect::all_of({{date_columns}}), as.Date), # числа - к единому формату десятичных значений dplyr::across(tidyselect::all_of({{number_columns}}), ~ gsub("\\.", "," , .x)), + dplyr::across(tidyselect::all_of({{other_cols}}), as.character) ) |> # очистка от пустых ключей - dplyr::filter(!is.na(main_key)) + dplyr::filter(!is.na(mhcs()$get_main_key_id)) df } @@ -1044,6 +1046,7 @@ server <- function(input, output, session) { # столбцы в таблицы и схема df_to_schema_compare <- setdiff(colnames(df), unique(scheme$form_id)) + df_to_schema_compare <- df_to_schema_compare[df_to_schema_compare != main_key_id] schema_to_df_compare <- setdiff(unique(scheme$form_id), colnames(df)) if (length(df_to_schema_compare) > 0 ) { @@ -1054,8 +1057,8 @@ server <- function(input, output, session) { if (length(schema_to_df_compare) > 0 ) { message <- glue::glue("столбцы в таблице '{table_name}' не соответсвуют схеме") - cli::cli_warn(c(message, paste("- ", schema_to_df_compare))) showNotification(message, type = "error") + cli::cli_warn(c(message, paste("- ", schema_to_df_compare))) return() } @@ -1067,8 +1070,9 @@ server <- function(input, output, session) { df <- openxlsx2::read_xlsx(wb, table_name) scheme <- mhcs()$get_scheme_with_values_forms(table_name) - date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) + date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) number_columns <- subset(scheme, form_type == "number", form_id, drop = TRUE) + other_cols <- which(colnames(df) %in% c(date_columns, number_columns)) # функция для преобразование числовых значений и сохранения "NA" num_converter <- function(old_col) { @@ -1086,8 +1090,9 @@ server <- function(input, output, session) { 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({{date_columns}}), \(x) purrr::map_chr(x, db$excel_to_db_dates_converter)), dplyr::across(tidyselect::all_of({{number_columns}}), num_converter), + dplyr::across(tidyselect::all_of({{other_cols}}), as.character) ) |> select(all_of(unique(c(main_key_id, scheme$form_id)))) @@ -1115,7 +1120,7 @@ server <- function(input, output, session) { # очистка от пустых ключей df <- df |> - dplyr::filter(!is.na(main_key)) + dplyr::filter(!is.na({{main_key_id}})) DBI::dbWriteTable( con, diff --git a/modules/db.R b/modules/db.R index d9300b3..98a84b2 100644 --- a/modules/db.R +++ b/modules/db.R @@ -191,6 +191,7 @@ write_df_to_db = function( date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) number_columns <- subset(scheme, form_type == "number", form_id, drop = TRUE) + other_cols <- which(colnames(df) %in% c(date_columns, number_columns)) df <- df |> dplyr::mutate( @@ -198,7 +199,11 @@ write_df_to_db = function( dplyr::across(tidyselect::all_of({{date_columns}}), \(x) purrr::map_chr(x, excel_to_db_dates_converter)), # числа - к единому формату десятичных значений dplyr::across(tidyselect::all_of({{number_columns}}), ~ gsub("\\.", "," , .x)), + dplyr::across(tidyselect::all_of({{other_cols}}), as.character), ) + + df |> + dplyr::glimpse() if (table_name == "main") { del_query <- glue::glue("DELETE FROM main WHERE {main_key_id} = '{main_key_value}'")