feat: более явный перенос данных (даты, числа, все остальное - текст)
This commit is contained in:
15
app.R
15
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,
|
||||
|
||||
Reference in New Issue
Block a user