Files
gemfin-shiny/R/entry_edit_modal.R
T
2026-03-09 17:34:49 +01:00

93 lines
3.0 KiB
R

# entry_edit_mod.R
entryEditUI <- function(id) {
ns <- NS(id)
tagList(
uiOutput(ns("entry_ui")),
uiOutput(ns("postings_ui"))
)
}
entryEditServer <- function(id, entry_id, conn) {
moduleServer(id, function(input, output, session) {
ns <- session$ns
entry_postings <- reactiveVal(read_postings_by_entry(conn, entry_id))
entry_data <- reactiveVal(read_entry(conn, entry_id))
output$entry_ui <- renderUI({
e <- entry_data()
tagList(
fluidRow(
column(6, selectizeInput(ns("contact_id"), "Kontakt",
choices = get_contact_choices(conn),
selected = e$contact_id)),
column(6, textInput(ns("purpose"), "Verwendungszweck", value = e$purpose))
),
hr()
)
})
# Choices für contact nach dem Flush setzen
output$postings_ui <- renderUI({
alle <- entry_postings()
lapply(seq_len(nrow(alle)), function(i) {
print(paste("project selected:", alle$project_id[i]))
print(head(get_project_choices(conn)))
print(class(get_project_choices(conn)))
div(
style = "border-left: 3px solid #3c8dbc; padding: 5px; margin-bottom: 5px",
fluidRow(
column(3,
selectInput(ns(paste0("account_id_", i)), "Konto",
choices = get_account_choices(conn),
selected = as.character(alle$account_id[i]))
),
column(3, selectizeInput(ns(paste0("project_id_", i)), "Projekt",
choices = get_project_choices(conn),
selected = ifelse(is.na(alle$project_id[i]), "", as.character(alle$project_id[i])))
),
column(2, numericInput(ns(paste0("amount_", i)), "Betrag", value = alle$amount[i])),
column(3, textInput(ns(paste0("notiz_", i)), "Notiz", value = alle$notiz[i])),
column(1, actionButton(ns(paste0("delete_", i)), "", icon = icon("trash"), class = "btn-danger btn-sm"))
)
)
})
})
# Choices befüllen nachdem renderUI fertig ist
observe({
alle <- entry_postings()
e <- entry_data()
req(nrow(alle) > 0, nrow(e) > 0)
session$onFlushed(function() {
# Contact
updateSelectizeInput(session, "contact_id",
choices = get_contact_choices(conn),
selected = e$contact_id)
# Postings
lapply(seq_len(nrow(alle)), function(i) {
updateSelectizeInput(session, paste0("account_id_", i),
choices = get_account_choices(conn),
selected = alle$account_id[i])
updateSelectizeInput(session, paste0("project_id_", i),
choices = get_project_choices(conn),
selected = alle$project_id[i])
})
}, once = TRUE)
})
# Speichern-Logik
observeEvent(input$speichern, {
alle <- entry_postings()
lapply(seq_len(nrow(alle)), function(i) {
# update posting i in DB
})
})
})
}