From 83b161683678ecd2de25ad615220fc6a7b7455a6 Mon Sep 17 00:00:00 2001 From: Christian Oswald Date: Wed, 18 Mar 2026 16:27:33 +0100 Subject: [PATCH] tabelle ohne paginierung, trans-aktionen korrigiert --- R/_funktionen/f_table.R | 5 +++-- R/buchungen_mod.R | 35 +++++++++++++++++++++++++++-------- db/development.sqlite | Bin 1015808 -> 1015808 bytes 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/R/_funktionen/f_table.R b/R/_funktionen/f_table.R index 13bfad1..e53b4ea 100644 --- a/R/_funktionen/f_table.R +++ b/R/_funktionen/f_table.R @@ -1,13 +1,14 @@ -f_reactable <- function(daten, coldefs = NULL, selection = "single", defaultSelected = NULL) { +f_reactable <- function(daten, coldefs = NULL, selection = "single", defaultSelected = NULL, hoehe = NULL) { reactable( daten, selection = selection, defaultSelected = defaultSelected, # Ermöglicht das Wiederherstellen der Auswahl - pagination = TRUE, + pagination = F, defaultPageSize = 17, showPageSizeOptions = TRUE, filterable = TRUE, highlight = TRUE, + height = hoehe, # <--- FIXIERT DEN HEADER und macht den Body scrollbar bordered = TRUE, striped = FALSE, compact = TRUE, diff --git a/R/buchungen_mod.R b/R/buchungen_mod.R index a91098e..770405a 100644 --- a/R/buchungen_mod.R +++ b/R/buchungen_mod.R @@ -27,6 +27,8 @@ buchungenServer <- function(id, conn) { details_data <- reactiveVal(NULL) selected_trans_id <- reactiveVal(NULL) current_main_idx <- reactiveVal(NULL) + current_page <- reactiveVal(1) + # Trigger-Objekt für das Modal: enthält post_id und einen Counter # Der Counter erzwingt eine Reaktion, auch wenn die gleiche ID zweimal geklickt wird @@ -40,9 +42,12 @@ buchungenServer <- function(id, conn) { req(postings_data()) f_reactable(daten = postings_data(), coldefs = coldef_entries_tabelle, selection = "single", + hoehe = "60vh", defaultSelected = current_main_idx()) }) + + # Details laden wenn Zeile gewählt wird ---- sel_details <- reactive(getReactableState("buchungen_table", "selected")) observeEvent(sel_details(), ignoreInit = T, { @@ -54,7 +59,7 @@ buchungenServer <- function(id, conn) { output$details_table <- renderReactable({ req(details_data()) - f_reactable(details_data(), coldefs = coldef_entries_tabelle, selection = "single") + f_reactable(details_data(), coldefs = coldef_entries_tabelle, selection = "single", hoehe = NULL) }) # Event: Detail hinzufügen (Neu) ---- @@ -78,33 +83,47 @@ buchungenServer <- function(id, conn) { details_data(read_buch_tabelle(conn, trans_id = selected_trans_id())) # Optional: Auch Haupttabelle erneuern, falls sich Summen geändert haben postings_data(read_buch_tabelle(conn)) + updateReactable("buchungen_table", data = postings_data(read_buch_tabelle(conn))) }) - # 'Neue Transaktion' Observer ---- + # Neue Transaktion Observer ---- observeEvent(input$add_trans, { new_t_id <- max_id(conn, "entries") + 1 - - # 1. Entry anlegen + # 1. Entry anlegen dbxInsert(conn, "entries", data.frame(id = new_t_id)) - # 2. Zwei Postings direkt vor-anlegen (z.B. mit Betrag 0) p_id1 <- max_id(conn, "postings") + 1 p_id2 <- p_id1 + 1 - new_postings <- data.frame( id = c(p_id1, p_id2), entry_id = c(new_t_id, new_t_id), amount = c(0, 0), account_id = c(0, 0), valuta = c(Sys.Date(), Sys.Date()) - ) dbxInsert(conn, "postings", new_postings) - # 3. UI refreshen selected_trans_id(new_t_id) postings_data(read_buch_tabelle(conn)) details_data(read_buch_tabelle(conn, trans_id = new_t_id)) + daten_postings <- postings_data() + daten_details <- details_data() + + updateReactable("buchungen_table", data = daten_postings) + }) + + observeEvent(input$del_trans, ignoreInit = T, { + req(selected_trans_id()) + print( selected_trans_id()) + dbxDelete(conn, "postings", where = data.frame(entry_id= selected_trans_id())) + dbxDelete(conn, "entries", where = data.frame(id = selected_trans_id())) + postings_data(read_buch_tabelle(conn)) + details_data(leer_df_from_table(conn, "postings") ) + daten_postings <- postings_data() + daten_details <- details_data() + updateReactable("buchungen_table", data = daten_postings) + updateReactable("details_table", data = daten_details ) + }) }) diff --git a/db/development.sqlite b/db/development.sqlite index ae0bf5abec81d814ce13991c814114ab2ec9a6f2..6c5c93ad7979c2d44399adf0dccb8cea54ae4645 100644 GIT binary patch delta 180 zcmZo@uxn_rn;^~THBrWy(W^0GYXak|^GvKiHw!wfWo6}PobSM~{ohqa&t1&Z*rx#n zeb`;)9%TqIFmWg{a4;Z%{{bTdBQsqCV_icFpr|5V1x}A*rf*bd5^jGtoe7AUftUq| gS%H`hh}nUd1Bf|+mA+c-2QGl6A&{4F$)m00x=s9vjZ^)5OV@C7Z7s; PF%J;)ZhtqOPv`{zzne1Z