# R/sync_hibiscus.R sync_hibiscus <- function(conn) { ok <- TRUE error_f <- NULL # ── Einstellungen ──────────────────────────────────────────────────────────── SYNC_AB <- as.Date("2024-01-01") if (as.character(Sys.info())[1] == "Darwin") { h2jar <- "/Users/cosw/bin/jameica.app/lib/h2/migration-h2/disabled/h2-1.4.199.jar" url <- "jdbc:h2:/Users/cosw/insync/Projekte/Gemeindefinanzen/jameica/hibiscus/h2db/hibiscus;IFEXISTS=TRUE;CIPHER=AES" } if (as.character(Sys.info())[1] == "Linux") { h2jar <- "..." url <- "jdbc:h2:/home/cosw/.jameica/hibiscus/h2db/hibiscus;IFEXISTS=TRUE;CIPHER=AES" } user <- "hibiscus" pw <- "FbvGoL+yJlH1GtUojnC8ZajYuTA= FbvGoL+yJlH1GtUojnC8ZajYuTA=" # ── Hibiscus H2 lesen ──────────────────────────────────────────────────────── if (ok) { tryCatch({ drv <- JDBC("org.h2.Driver", h2jar, identifier.quote = "`") con_j <- dbConnect(drv, url, user, pw) originaldaten <- dbReadTable(con_j, "UMSATZ") dbDisconnect(con_j) ok <- nrow(originaldaten) > 0 error_f <- fehler_add(paste("Hibiscus Daten gelesen:", nrow(originaldaten)), ok, error_f) }, error = function(e) { ok <<- FALSE error_f <<- fehler_add(paste("H2 Fehler:", e$message), FALSE, error_f) }) } # ── Bereits vorhandene IDs ──────────────────────────────────────────────────── if (ok) { vh <- dbxSelect(conn, "SELECT id FROM hibiscus_transactions") %>% pull() error_f <- fehler_add(paste("Vorhandene IDs:", length(vh)), TRUE, error_f) } # ── Neue Datensätze bestimmen ───────────────────────────────────────────────── if (ok) { neue_daten <- originaldaten %>% filter(!ID %in% vh) %>% filter(DATUM >= SYNC_AB) %>% rename_with(tolower) %>% mutate( id = as.integer(id), datum = as.character(datum), valuta = as.character(valuta) ) ok <- nrow(neue_daten) > 0 error_f <- fehler_add(paste("Neue Datensätze:", nrow(neue_daten)), ok, error_f) } # ── In SQLite schreiben ─────────────────────────────────────────────────────── if (ok) { dbWriteTable(conn, "hibiscus_transactions", neue_daten, append = TRUE) error_f <- fehler_add( paste(nrow(neue_daten), "Umsätze gespeichert"), TRUE, error_f ) } error_f }