Files
gemfin-shiny/R/_funktionen/sync_hibiscus.R
T
2026-04-28 10:23:20 +02:00

69 lines
2.9 KiB
R
Executable File

# 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
}