feat: вызов DT актуальный задач + переход к ID из общего списка
This commit is contained in:
56
app.R
56
app.R
@@ -21,6 +21,7 @@ box::use(
|
|||||||
|
|
||||||
global_options$set_global_options(
|
global_options$set_global_options(
|
||||||
shiny.host = "0.0.0.0"
|
shiny.host = "0.0.0.0"
|
||||||
|
# APP.DEBUG = TRUE
|
||||||
)
|
)
|
||||||
global_options$check_and_init_scheme()
|
global_options$check_and_init_scheme()
|
||||||
|
|
||||||
@@ -159,6 +160,31 @@ server <- function(input, output, session) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
output$base_data <- renderUI({
|
||||||
|
|
||||||
|
con <- db$make_db_connection(scheme(),"base_data")
|
||||||
|
on.exit(db$close_db_connection(con, "base_data"), add = TRUE)
|
||||||
|
|
||||||
|
# записей в базе всего
|
||||||
|
query <- glue::glue("SELECT COUNT ({mhcs()$get_main_key_id}) FROM main")
|
||||||
|
records_count <- DBI::dbGetQuery(con, query) |>
|
||||||
|
dplyr::pull()
|
||||||
|
|
||||||
|
# задачи на сегодня
|
||||||
|
if ("tasks" %in% DBI::dbListTables(con)) {
|
||||||
|
query <- glue::glue("SELECT COUNT (task_id) FROM tasks WHERE task_status = 'active'")
|
||||||
|
tasks_count <- DBI::dbGetQuery(con, query) |>
|
||||||
|
dplyr::pull()
|
||||||
|
} else {
|
||||||
|
tasks_count <- 0
|
||||||
|
}
|
||||||
|
|
||||||
|
div(
|
||||||
|
strong("Записей всего:"), records_count, br(),
|
||||||
|
if (tasks_count > 0) p(strong("Задач на сегодня:"), actionLink("tasks-show_dt_today", tasks_count)) else "Задач нет"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
# REACTIVE VALUES =================================
|
# REACTIVE VALUES =================================
|
||||||
# Create a reactive values object to store the input data
|
# Create a reactive values object to store the input data
|
||||||
values <- reactiveValues(
|
values <- reactiveValues(
|
||||||
@@ -193,9 +219,9 @@ server <- function(input, output, session) {
|
|||||||
choices = enabled_schemes,
|
choices = enabled_schemes,
|
||||||
selected = scheme()
|
selected = scheme()
|
||||||
),
|
),
|
||||||
|
uiOutput("base_data"),
|
||||||
"Для начала работы нужно создать новую запись или загрузить существующую!",
|
"Для начала работы нужно создать новую запись или загрузить существующую!",
|
||||||
# сво
|
# сво
|
||||||
strong("tasks"),
|
|
||||||
# загрузка панели для работы с базой данных
|
# загрузка панели для работы с базой данных
|
||||||
uiOutput("admin_buttons_panel")
|
uiOutput("admin_buttons_panel")
|
||||||
)
|
)
|
||||||
@@ -205,6 +231,7 @@ server <- function(input, output, session) {
|
|||||||
validator_main(data_validation$init_val(mhcs()$get_scheme("main")))
|
validator_main(data_validation$init_val(mhcs()$get_scheme("main")))
|
||||||
validator_main()$enable()
|
validator_main()$enable()
|
||||||
mhcs()$get_main_form_ui
|
mhcs()$get_main_form_ui
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -723,9 +750,7 @@ server <- function(input, output, session) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
values$main_key <- new_main_key
|
values$main_key <- new_main_key
|
||||||
main_form_is_empty(FALSE)
|
|
||||||
log_action_to_db("creating new key", values$main_key, con)
|
log_action_to_db("creating new key", values$main_key, con)
|
||||||
utils$clean_forms("main", mhcs())
|
|
||||||
|
|
||||||
removeModal()
|
removeModal()
|
||||||
})
|
})
|
||||||
@@ -754,6 +779,7 @@ server <- function(input, output, session) {
|
|||||||
|
|
||||||
removeModal()
|
removeModal()
|
||||||
showNotification("Данные очищены!", type = "warning")
|
showNotification("Данные очищены!", type = "warning")
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
## сохранение даннных -------------------------------
|
## сохранение даннных -------------------------------
|
||||||
@@ -823,13 +849,26 @@ server <- function(input, output, session) {
|
|||||||
observeEvent(input$load_data, {
|
observeEvent(input$load_data, {
|
||||||
req(input$load_data_key_selector)
|
req(input$load_data_key_selector)
|
||||||
|
|
||||||
|
values$main_key <- input$load_data_key_selector
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
observeEvent(values$main_key, {
|
||||||
|
req(values$main_key)
|
||||||
|
|
||||||
|
print(values$main_key)
|
||||||
|
|
||||||
con <- db$make_db_connection(scheme(),"load_data")
|
con <- db$make_db_connection(scheme(),"load_data")
|
||||||
on.exit(db$close_db_connection(con, "load_data"), add = TRUE)
|
on.exit(db$close_db_connection(con, "load_data"), add = TRUE)
|
||||||
|
|
||||||
|
existed_main_keys <- (db$get_keys_from_table("main", mhcs(), con))
|
||||||
|
|
||||||
|
if (values$main_key %in% existed_main_keys) {
|
||||||
|
|
||||||
df <- db$read_df_from_db_by_id(
|
df <- db$read_df_from_db_by_id(
|
||||||
table_name = "main",
|
table_name = "main",
|
||||||
schm = mhcs(),
|
schm = mhcs(),
|
||||||
main_key_value = input$load_data_key_selector,
|
main_key_value = values$main_key,
|
||||||
con = con
|
con = con
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -839,13 +878,17 @@ server <- function(input, output, session) {
|
|||||||
mhcs
|
mhcs
|
||||||
)
|
)
|
||||||
|
|
||||||
values$main_key <- input$load_data_key_selector
|
log_action_to_db("loading data", values$main_key, con = con)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
utils$clean_forms("main", mhcs())
|
||||||
|
}
|
||||||
|
|
||||||
main_form_is_empty(FALSE)
|
main_form_is_empty(FALSE)
|
||||||
|
|
||||||
# обновление счетичка задач
|
# обновление счетичка задач
|
||||||
tasks$update_task_button_count(con, values, NS("tasks"))
|
tasks$update_task_button_count(con, values, NS("tasks"))
|
||||||
|
|
||||||
log_action_to_db("loading data", values$main_key, con = con)
|
|
||||||
removeModal()
|
removeModal()
|
||||||
|
|
||||||
})
|
})
|
||||||
@@ -1209,7 +1252,6 @@ server <- function(input, output, session) {
|
|||||||
# TASKS ---------------------------------------
|
# TASKS ---------------------------------------
|
||||||
tasks$server("tasks", values, scheme, mhcs)
|
tasks$server("tasks", values, scheme, mhcs)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
103
app/tasks.R
103
app/tasks.R
@@ -43,25 +43,6 @@ server <- function(id, values, scheme, mhcs) {
|
|||||||
tasks_selector <- NULL
|
tasks_selector <- NULL
|
||||||
}
|
}
|
||||||
|
|
||||||
## new tasks ----------------
|
|
||||||
get_default_task <- function() {
|
|
||||||
|
|
||||||
tibble::tibble(
|
|
||||||
task_id = paste0(format(Sys.time(), "%Y%m%d%H%M%S"), "_", values$main_key),
|
|
||||||
task_main_key = values$main_key,
|
|
||||||
task_status = "active",
|
|
||||||
task_title = "НОВАЯ ЗАДАЧА",
|
|
||||||
task_description = "",
|
|
||||||
task_due_date = NA,
|
|
||||||
task_user_created = values$current_user,
|
|
||||||
task_datetime_created = Sys.time(),
|
|
||||||
task_user_last_updated = NA,
|
|
||||||
task_datetime_last_updated = NA,
|
|
||||||
task_user_completed = NA,
|
|
||||||
task_datetime_completed = NA
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# ui --------------------
|
# ui --------------------
|
||||||
# очень большой костыль
|
# очень большой костыль
|
||||||
subroup_scheme <- mhcs()$get_scheme("tasks") |>
|
subroup_scheme <- mhcs()$get_scheme("tasks") |>
|
||||||
@@ -101,12 +82,31 @@ server <- function(id, values, scheme, mhcs) {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## new tasks ----------------
|
||||||
|
get_default_task <- function() {
|
||||||
|
|
||||||
|
tibble::tibble(
|
||||||
|
task_id = paste0(format(Sys.time(), "%Y%m%d%H%M%S"), "_", values$main_key),
|
||||||
|
task_main_key = values$main_key,
|
||||||
|
task_status = "active",
|
||||||
|
task_title = "НОВАЯ ЗАДАЧА",
|
||||||
|
task_description = "",
|
||||||
|
task_due_date = NA,
|
||||||
|
task_user_created = values$current_user,
|
||||||
|
task_datetime_created = Sys.time(),
|
||||||
|
task_user_last_updated = NA,
|
||||||
|
task_datetime_last_updated = NA,
|
||||||
|
task_user_completed = NA,
|
||||||
|
task_datetime_completed = NA
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
# button logic ---------------------
|
# button logic ---------------------
|
||||||
## отображение окна -----------------
|
## отображение окна -----------------
|
||||||
observeEvent(input$display_task_modal, {
|
observeEvent(input$display_task_modal, {
|
||||||
|
|
||||||
con <- db$make_db_connection(scheme(),"nested_tables")
|
con <- db$make_db_connection(scheme(),"display_task_modal")
|
||||||
on.exit(db$close_db_connection(con, "nested_tables"), add = TRUE)
|
on.exit(db$close_db_connection(con, "display_task_modal"), add = TRUE)
|
||||||
|
|
||||||
values$tasks_data <- if ("tasks" %in% DBI::dbListTables(con)) {
|
values$tasks_data <- if ("tasks" %in% DBI::dbListTables(con)) {
|
||||||
DBI::dbGetQuery(con, glue::glue("SELECT * FROM tasks WHERE task_main_key = '{values$main_key}'")) |>
|
DBI::dbGetQuery(con, glue::glue("SELECT * FROM tasks WHERE task_main_key = '{values$main_key}'")) |>
|
||||||
@@ -247,7 +247,7 @@ server <- function(id, values, scheme, mhcs) {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
## с
|
## создание новой задачи -------------
|
||||||
observeEvent(input$tasks_create_new_task, {
|
observeEvent(input$tasks_create_new_task, {
|
||||||
new_task <- get_default_task()
|
new_task <- get_default_task()
|
||||||
|
|
||||||
@@ -263,6 +263,7 @@ server <- function(id, values, scheme, mhcs) {
|
|||||||
show_modal_for_tasks()
|
show_modal_for_tasks()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
## создание новой авто-задачи -------------
|
||||||
observeEvent(input$tasks_add_autoreview, {
|
observeEvent(input$tasks_add_autoreview, {
|
||||||
new_task <- get_default_task()
|
new_task <- get_default_task()
|
||||||
|
|
||||||
@@ -282,6 +283,64 @@ server <- function(id, values, scheme, mhcs) {
|
|||||||
show_modal_for_tasks()
|
show_modal_for_tasks()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
## отображение списка задач для текущего дня ------------
|
||||||
|
observeEvent(input$show_dt_today, {
|
||||||
|
|
||||||
|
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'")) |>
|
||||||
|
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))
|
||||||
|
|
||||||
|
output$dt_todays_tasks <- DT::renderDataTable(
|
||||||
|
DT::datatable(
|
||||||
|
values$tasks_data,
|
||||||
|
caption = 'Table 1: This is a simple caption for the table.',
|
||||||
|
rownames = FALSE,
|
||||||
|
# colnames = col_types |> dplyr::pull(form_id, form_label),
|
||||||
|
extensions = c('KeyTable', "FixedColumns"),
|
||||||
|
# editable = 'cell',
|
||||||
|
selection = "single",
|
||||||
|
options = list(
|
||||||
|
dom = 'tip',
|
||||||
|
scrollX = TRUE,
|
||||||
|
fixedColumns = list(leftColumns = 1),
|
||||||
|
keys = TRUE
|
||||||
|
)
|
||||||
|
) |>
|
||||||
|
DT::formatDate(c("task_datetime_created", "task_datetime_completed", "task_datetime_last_updated", "task_due_date"), "toLocaleDateString", params = list('ru-RU'))
|
||||||
|
)
|
||||||
|
|
||||||
|
showModal(modalDialog(
|
||||||
|
DT::dataTableOutput(ns("dt_todays_tasks")),
|
||||||
|
size = "xl",
|
||||||
|
footer = tagList(
|
||||||
|
actionButton(ns("jump_to_main_key"), "перейти к id")
|
||||||
|
),
|
||||||
|
easyClose = TRUE
|
||||||
|
))
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
observeEvent(input$jump_to_main_key, {
|
||||||
|
|
||||||
|
if (is.null(input$dt_todays_tasks_rows_selected)) {
|
||||||
|
showNotification("необходимо выбрать задачу", type = "error")
|
||||||
|
} else {
|
||||||
|
|
||||||
|
# get key
|
||||||
|
new_main_key <- values$tasks_data[input$dt_todays_tasks_rows_selected,]$task_main_key
|
||||||
|
values$main_key <- new_main_key
|
||||||
|
|
||||||
|
showNotification("TODO: если ключа нет в таблице?!", type = "warning", duration = NULL)
|
||||||
|
removeModal()
|
||||||
|
|
||||||
|
# log_action_to_db("loading data", values$main_key, con = con)
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user