feat: корректное обновление счетчика задач на кнопке + список просроченных задач

This commit is contained in:
2026-04-24 12:15:38 +03:00
parent c8da651e72
commit 4b05fbafc2
2 changed files with 51 additions and 43 deletions

68
app.R
View File

@@ -222,15 +222,16 @@ server <- function(input, output, session) {
observeEvent(main_form_is_empty(), {
if (main_form_is_empty() == TRUE) {
print("fired!")
output$base_data <- renderUI({
con <- db$make_db_connection(scheme(),"base_data")
on.exit(db$close_db_connection(con, "base_data"), add = TRUE)
tasks$update_task_button_count(con, values, NS("tasks"))
# записей в базе всего
query <- glue::glue("SELECT COUNT ({mhcs()$get_main_key_id}) FROM main")
records_count <- DBI::dbGetQuery(con, query) |>
records_count <- DBI::dbGetQuery(con, glue::glue("SELECT COUNT ({mhcs()$get_main_key_id}) FROM main")) |>
dplyr::pull()
# задачи на сегодня
@@ -256,31 +257,13 @@ server <- function(input, output, session) {
strong("Записей всего:"), records_count,
hr(),
h5("Задачи:"),
span(strong("Активных всего:"), if (tasks_count > 0) actionLink("tasks-show_dt_all", tasks_count) else "0", br()),
span(strong("Активных всего:"), if (tasks_count > 0) actionLink("tasks-show_dt_all", tasks_count) else "0", br()),
span(strong("Активных на сегодня:"), if (tasks_today_count > 0) actionLink("tasks-show_dt_today", tasks_today_count) else "0", br()),
span(strong("Просроченных:"), if (tasks_overdue_count > 0) actionLink("tasks-show_dt_overdue", tasks_overdue_count) else "0", br())
)
})
}
# buttons_to_toggle <- c(
# "save_data_button",
# "clean_data_button",
# "downloadDocx",
# "tasks-display_task_modal"
# )
# purrr::walk(
# buttons_to_toggle,
# \(x) {
# updateActionButton(
# inputId = x,
# disabled = main_form_is_empty()
# )
# }
# )
})
# обновление данных схем ------
@@ -907,40 +890,41 @@ server <- function(input, output, session) {
## логика: смена ключа -------
observeEvent(values$main_key, {
req(values$main_key)
con <- db$make_db_connection(scheme(),"load_data")
on.exit(db$close_db_connection(con, "load_data"), add = TRUE)
existed_main_keys <- db$get_keys_from_table("main", mhcs(), con)
if (!is.null(values$main_key)) {
existed_main_keys <- db$get_keys_from_table("main", mhcs(), con)
if (values$main_key %in% existed_main_keys) {
if (values$main_key %in% existed_main_keys) {
df <- db$read_df_from_db_by_id(
table_name = "main",
schm = mhcs(),
main_key_value = values$main_key,
con = con
)
df <- db$read_df_from_db_by_id(
table_name = "main",
schm = mhcs(),
main_key_value = values$main_key,
con = con
)
forms$load_data_to_form(
df = df,
table_name = "main",
mhcs
)
forms$load_data_to_form(
df = df,
table_name = "main",
mhcs
)
log_action_to_db("loading data", values$main_key, con = con)
log_action_to_db("loading data", values$main_key, con = con)
} else {
} else {
utils$clean_forms("main", mhcs())
utils$clean_forms("main", mhcs())
}
main_form_is_empty(FALSE)
}
# обновление счетичка задач
tasks$update_task_button_count(con, values, NS("tasks"))
main_form_is_empty(FALSE)
removeModal()
})

View File

@@ -329,6 +329,19 @@ server <- function(id, values, scheme, mhcs) {
display_tasks_dt_review()
})
### просроченные ------------
observeEvent(input$show_dt_overdue, {
con <- db$make_db_connection(scheme(),"display_task_modal")
on.exit(db$close_db_connection(con, "display_task_modal"), add = TRUE)
values$tasks_data <- DBI::dbGetQuery(con, glue::glue("SELECT * FROM tasks WHERE task_status = 'active' AND task_due_date < {as.integer(Sys.Date())}")) |>
dplyr::mutate(dplyr::across(c("task_datetime_created", "task_datetime_last_updated", "task_datetime_completed"), as.POSIXct)) |>
dplyr::mutate(dplyr::across(c("task_due_date"), as.Date))
display_tasks_dt_review()
})
### modal -----
display_tasks_dt_review <- function() {
@@ -409,13 +422,24 @@ update_task_button_count <- function(con, values, ns) {
inputID <- "display_task_modal"
if (!missing(ns)) inputID <- ns(inputID)
if (is.null(values$main_key)) {
updateActionButton(inputId = inputID, label = "Задачи: нет активных")
return()
}
if ("tasks" %in% DBI::dbListTables(con)) {
tasks_num <- DBI::dbGetQuery(con, glue::glue("SELECT COUNT ('task_id') FROM tasks WHERE task_main_key = '{values$main_key}' AND task_status = 'active'")) |>
dplyr::pull()
if (tasks_num > 0) {
updateActionButton(inputId = inputID, label = paste("активных задач:", tasks_num))
} else {
updateActionButton(inputId = inputID, label = "Задачи: нет активных")
}
}