Compare commits

..

3 Commits

Author SHA1 Message Date
cosw 479f455f86 pfad geändert
Merge branch 'main' of https://git.oswaldonline.de/cosw/gemfin-shiny

# Conflicts:
#	db/data_transfer.R
#	db/development.sqlite
#	www/documents/1028.jpg
#	www/documents/1069.PDF
2026-06-19 11:12:34 +02:00
cosw f960e390d9 beispieldateien hinzu 2026-06-19 11:08:06 +02:00
cosw dc7effe9b7 sqlite transfer überarbeitet 2026-06-19 11:06:26 +02:00
4 changed files with 342 additions and 339 deletions
+329 -326
View File
@@ -3,12 +3,11 @@
## Keeps Hibiscus payload fields unchanged ## Keeps Hibiscus payload fields unchanged
## ##
library("tidyverse") library(tidyverse)
library("dbx") library(dbx)
library("tools") library(RJDBC)
library("RJDBC") library(DBI)
library("DBI") library(RSQLite)
library("RSQLite")
source("~/R/rfunc/fehler_add.R") source("~/R/rfunc/fehler_add.R")
@@ -27,30 +26,14 @@ fm_driver_jar <- "~/R/fmjdbc.jar"
sqlite_path <- "db/development.sqlite" sqlite_path <- "db/development.sqlite"
# optional future switch
USE_CENTS <- FALSE
# Helpers ---- # Helpers ----
exec_sql <- function(sql) dbExecute(con_s, sql)
to_cents <- function(x) { f_anzahl <- function(tabelle){
if (is.null(x)) return(NA_integer_) dbxSelect(con_s, paste0("SELECt count(id) FROM ", tabelle)) %>% pull
if (is.factor(x)) x <- as.character(x)
if (is.character(x)) {
x <- trimws(x)
x[x == ""] <- NA
x <- gsub("\\.", "", x)
x <- gsub(",", ".", x)
}
d <- suppressWarnings(as.numeric(x))
ifelse(is.na(d), NA_integer_, as.integer(round(d * 100)))
} }
exec_sql <- function(sql) dbExecute(con_s, sql)
# Connections ---- # Connections ----
if (ok) { if (ok) {
drv <- JDBC(fm_driver_class, fm_driver_jar) drv <- JDBC(fm_driver_class, fm_driver_jar)
con_f <- dbConnect( con_f <- dbConnect(
@@ -70,55 +53,87 @@ if (ok) {
error_f <- fehler_add("SQLite connection established", TRUE, error_f) error_f <- fehler_add("SQLite connection established", TRUE, error_f)
} }
# Schema creation ---- ## * Transfer Accounts ----
if (ok) {
## * Accounts ---- exec_sql("DROP TABLE IF EXISTS konten;")
if(ok){ exec_sql("CREATE TABLE konten (
exec_sql("CREATE TABLE accounts (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
account_name TEXT NOT NULL, kontoname TEXT NOT NULL,
bank_name TEXT, bank_name TEXT,
hibiscus_account_id INTEGER, hibiscus_konto_id INTEGER,
budget_id INTEGER, budget_id INTEGER,
wiso_account TEXT, wiso_kategorie TEXT,
bank_account_no TEXT, bank_konto_nr TEXT,
is_donations INTEGER, ist_spende INTEGER,
notes TEXT, notiz TEXT,
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
accounts <- dbxSelect(con_f, "
konten <- dbxSelect(con_f, "
SELECT id, konto, budget_id, bankname, updated_at, created_at, SELECT id, konto, budget_id, bankname, updated_at, created_at,
konto_hibiscus, konto_wiso, kontonummer_bank, notizen, ist_spende konto_hibiscus, konto_wiso, kontonummer_bank, notizen, ist_spende
FROM Konten FROM Konten
") %>% ") %>%
transmute( transmute(
id = as.integer(id), id = as.integer(id),
account_name = konto, kontoname = konto,
bank_name = bankname, bank_name = bankname,
hibiscus_account_id = as.integer(konto_hibiscus), hibiscus_konto_id = as.integer(konto_hibiscus),
budget_id = as.integer(budget_id), budget_id = as.integer(budget_id),
wiso_account = konto_wiso, wiso_kategorie = konto_wiso,
bank_account_no = kontonummer_bank, bank_konto_nr = kontonummer_bank,
is_donations = as.integer(ist_spende), ist_spende = as.integer(ist_spende),
notes = notizen, notiz = notizen,
created_at = created_at, created_at = created_at,
updated_at = updated_at updated_at = updated_at
) )
dbWriteTable(con_s, "accounts", accounts, append = TRUE) dbWriteTable(con_s, "konten", konten, append = TRUE)
ok <- "accounts" %in% dbListTables(con_s) ok <- dbExistsTable(con_s, "konten")
error_f <- fehler_add("Die Accounts Tabelle wurde erstellt", ok, error_f) ok <- f_anzahl("konten") == nrow(konten) & ok
} ## ------------------------------------------------------- 2026-05-12 16:54 error_f <- fehler_add("Konten übertragen", TRUE, error_f)
}
## * Transfer Projekte ----
if (ok) {
exec_sql("DROP TABLE IF EXISTS projekte;")
exec_sql("CREATE TABLE projekte (
id INTEGER PRIMARY KEY,
projektname TEXT NOT NULL,
jahr INTEGER,
projekt_wiso TEXT,
bereich TEXT,
notiz TEXT,
created_at TEXT,
updated_at TEXT
);")
projekte <- dbxSelect(con_f, "
SELECT id, projektname, bereich, notiz, jahr, created_at, updated_at from Projekte") %>%
transmute(
id = as.integer(id),
projektname = projektname,
bereich = bereich,
notiz = notiz,
jahr = as.integer(jahr),
created_at = created_at,
updated_at = updated_at
)
## * Budgets Tabelle ---- dbWriteTable(con_s, "projekte", projekte, append = TRUE)
if(ok){ ok <- dbExistsTable(con_s, "projekte")
ok <- f_anzahl("projekte") == nrow(projekte) & ok
error_f <- fehler_add("Projekte übertragen", TRUE, error_f)
}
## * Transfer Budgets ----
if (ok) {
exec_sql("DROP TABLE IF EXISTS budgets;")
exec_sql("CREATE TABLE budgets ( exec_sql("CREATE TABLE budgets (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
row_no INTEGER, reihe INTEGER,
area TEXT, bereich TEXT,
label TEXT, bezeichnung TEXT,
direction TEXT, richtung TEXT,
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
@@ -128,209 +143,305 @@ if(ok){
") %>% ") %>%
transmute( transmute(
id = as.integer(id), id = as.integer(id),
row_no = as.integer(reihe), reihe = as.integer(reihe),
area = bereich, bereich = bereich,
label = bezeichnung, bezeichnung = bezeichnung,
direction = richtung, richtung = richtung,
created_at = format(Sys.time(), ""), created_at = format(Sys.time(), ""),
updated_at = format(Sys.time(), "") updated_at = format(Sys.time(), "")
) )
dbWriteTable(con_s, "budgets", budgets, append = TRUE) dbWriteTable(con_s, "budgets", budgets, append = TRUE)
ok <- "budgets" %in% dbListTables(con_s) ok <- dbExistsTable(con_s, "budgets")
error_f <- fehler_add("Die Budgets Tabelle wurde erstellt", ok, error_f) ok <- f_anzahl("budgets") == nrow(budgets) & ok
} ## ------------------------------------------------------- 2026-05-12 16:57 error_f <- fehler_add("Budgets übertragen", TRUE, error_f)
}
## * Contacts Tabelle ---- ### ** Transfer Budget-Werte
if(ok){ if(ok){
exec_sql("CREATE TABLE contacts ( exec_sql("DROP TABLE IF EXISTS budget_werte;")
exec_sql("CREATE TABLE budget_werte (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
first_name TEXT, budget_id INTEGER,
last_name TEXT, jahr INTEGER,
street TEXT, betrag DECIMAL,
postal_code TEXT, budget_listen_nr INTEGER,
city TEXT,
country TEXT,
phone TEXT,
mobile TEXT,
email TEXT,
salutation TEXT,
gender TEXT,
donor TEXT,
member INTEGER,
notes TEXT,
receipt_salutation TEXT,
receipt_name TEXT,
display_name TEXT,
partner_id INTEGER,
is_couple INTEGER,
is_company INTEGER,
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
contacts <- dbxSelect(con_f, " budget_werte <- dbReadTable(con_f, "Budgets_werte") %>%
transmute(
id = as.integer(id),
budget_id = as.integer(budget_id),
jahr = as.integer(jahr),
betrag = betrag,
budget_listen_nr = as.integer(budget_listen_nr),
created_at = format(Sys.time(), ""),
updated_at = format(Sys.time(), "")
)
dbWriteTable(con_s, "budget_werte", budget_werte, append = TRUE)
ok <- dbExistsTable(con_s, "budget_werte")
ok <- f_anzahl("budget_werte") == nrow(budget_werte) & ok
error_f <- fehler_add("budget_werte übertragen", TRUE, error_f)
} ## ------------------------------------------------------- 2026-06-19 08:52
## * Transfer Adressen ----
if (ok) {
exec_sql("DROP TABLE IF EXISTS adressen;")
exec_sql("CREATE TABLE adressen (
id INTEGER PRIMARY KEY,
vorname TEXT,
nachname TEXT,
strasse TEXT,
plz TEXT,
ort TEXT,
land TEXT,
telefon TEXT,
mobil TEXT,
email TEXT,
anrede TEXT,
geschlecht TEXT,
ist_mitglied INTEGER,
ist_firma INTEGER,
quittung_anrede TEXT,
quittung_name TEXT,
display_name TEXT,
partner_id INTEGER,
notiz TEXT,
created_at TEXT,
updated_at TEXT
);")
adressen <- dbxSelect(con_f, "
SELECT id, vorname, nachname, strasse, plz, ort, Land, SELECT id, vorname, nachname, strasse, plz, ort, Land,
telefon, mobil, email, anrede, geschlecht, spender, mitglied, notiz, telefon, mobil, email, anrede, geschlecht, mitglied, notiz,
quittung_anrede, quittung_name, bezeichnung, partner_id, b_paar, b_firma quittung_anrede, quittung_name, bezeichnung, partner_id, b_paar, b_firma
FROM Adressen FROM Adressen
") %>% ") %>%
as_tibble() %>% as_tibble() %>%
transmute( transmute(
id = as.integer(id), id = as.integer(id),
first_name = vorname, vorname = vorname,
last_name = nachname, nachname = nachname,
street = strasse, strasse = strasse,
postal_code = plz, plz = plz,
city = ort, ort = ort,
country = Land, land = Land,
phone = telefon, telefon = telefon,
mobile = mobil, mobil = mobil,
email = email, email = email,
salutation = anrede, anrede = anrede,
gender = geschlecht, geschlecht = geschlecht,
donor = spender, ist_mitglied = as.integer(mitglied),
member = as.integer(mitglied), ist_firma = as.integer(b_firma),
notes = notiz, quittung_anrede = quittung_anrede,
receipt_salutation = quittung_anrede, quittung_name = quittung_name,
receipt_name = quittung_name,
display_name = bezeichnung, display_name = bezeichnung,
partner_id = as.integer(partner_id), partner_id = as.integer(partner_id),
is_couple = as.integer(b_paar), notiz = notiz,
is_company = as.integer(b_firma),
created_at = format(Sys.time(), ""), created_at = format(Sys.time(), ""),
updated_at = format(Sys.time(), "") updated_at = format(Sys.time(), "")
) )
dbWriteTable(con_s, "adressen", adressen, append = TRUE)
ok <- dbExistsTable(con_s, "adressen")
ok <- f_anzahl("adressen") == nrow(adressen) & ok
error_f <- fehler_add("adressen übertragen", TRUE, error_f)
}
dbWriteTable(con_s, "contacts", contacts, append = TRUE) ## * Transfer Transaktionen ----
ok <- "contacts" %in% dbListTables(con_s)
error_f <- fehler_add("Die contacts Tabelle wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 16:58
## * Bankverbindungen ---- if (ok) {
if(ok){ exec_sql("DROP TABLE IF EXISTS transaktionen;")
exec_sql("CREATE TABLE bank_connections ( exec_sql("CREATE TABLE transaktionen (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
contact_id INTEGER, adress_id INTEGER,
contact_text TEXT, vwz TEXT,
iban TEXT, notiz TEXT,
bic TEXT, bank_kontakt TEXT,
bank_name TEXT,
remote_name TEXT,
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
bank_connections <- dbxSelect(con_f, "
SELECT id, adress_id, kontakt, iban, bic, kreditinstitut,
remote_name, created_at, updated_at
FROM Bankverbindungen
") %>%
transmute(
id = as.integer(id),
contact_id = as.integer(adress_id),
contact_text = kontakt,
iban = iban,
bic = bic,
bank_name = kreditinstitut,
remote_name = remote_name,
created_at = as.character(created_at),
updated_at = as.character(updated_at)
)
sum(duplicated(bank_connections$id))
dbWriteTable(con_s, "bank_connections", bank_connections, append = TRUE)
ok <- "bank_connections" %in% dbListTables(con_s)
error_f <- fehler_add(
paste(nrow(bank_connections), "Bankverbindungen übertragen"), TRUE, error_f
)
} ## ------------------------------------------------------- 2026-05-12 17:00
transaktionen <- dbxSelect(con_f, "
## * Entries Tabelle ----
if(ok){
exec_sql("CREATE TABLE entries (
id INTEGER PRIMARY KEY,
contact_id INTEGER,
purpose TEXT,
note TEXT,
remote_name TEXT,
created_at TEXT,
updated_at TEXT
);")
entries <- dbxSelect(con_f, "
SELECT id, adress_id, verwendungszweck, notiz, kontakt, created_at, updated_at SELECT id, adress_id, verwendungszweck, notiz, kontakt, created_at, updated_at
FROM trans FROM trans
") %>% ") %>%
as_tibble() %>% as_tibble() %>%
transmute( transmute(
id = as.integer(id), id = as.integer(id),
contact_id = as.integer(adress_id), adress_id = as.integer(adress_id),
purpose = verwendungszweck, vwz = verwendungszweck,
note = notiz, notiz = notiz,
remote_name = kontakt, bank_kontakt = kontakt,
created_at = created_at, created_at = created_at,
updated_at = updated_at updated_at = updated_at
) )
dbWriteTable(con_s, "entries", entries, append = TRUE)
ok <- "entries" %in% dbListTables(con_s)
error_f <- fehler_add("Die entries Tabelle wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 17:02
dbWriteTable(con_s, "transaktionen", transaktionen, append = TRUE)
ok <- dbExistsTable(con_s, "transaktionen")
ok <- f_anzahl("transaktionen") == nrow(transaktionen) & ok
error_f <- fehler_add("transaktionen übertragen", TRUE, error_f)
}
## * Postings Tabelle ---- ## * Transfer Postings ----
if(ok){
exec_sql("CREATE TABLE postings ( if (ok) {
exec_sql("DROP TABLE IF EXISTS buchungen;")
exec_sql("CREATE TABLE buchungen (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
entry_id INTEGER NOT NULL, trans_id INTEGER NOT NULL,
account_id INTEGER NOT NULL, konto_id INTEGER NOT NULL,
valuta TEXT NOT NULL, valuta TEXT NOT NULL,
booking_date TEXT, buchungsdatum TEXT,
amount NUMERIC NOT NULL, betrag DECIMAL,
invoice_no TEXT, rechnungsnummer TEXT,
note TEXT, notiz TEXT,
status TEXT, status TEXT,
waived INTEGER, ist_verzicht INTEGER,
bank_transaction_id INTEGER, umsatz_id INTEGER,
wiso_id INTEGER, wiso_id INTEGER,
receipt_id INTEGER, quittung_id INTEGER,
project_id INTEGER, projekt_id INTEGER,
coin_share_amount NUMERIC, betrag_muenzen DECIMAL,
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
postings <- dbxSelect(con_f, " buchungen <- dbxSelect(con_f, "
SELECT id, trans_id, konto_id, wertstellung, buchungsdatum, betrag, SELECT id, trans_id, konto_id, wertstellung, buchungsdatum, betrag,
rechnungsnummer, notiz, status, b_verzicht, umsatz_id, wiso_id, rechnungsnummer, notiz, status, b_verzicht, umsatz_id, wiso_id,
quittung_id, projekt_id, betrag_muenzen, created_at, updated_at quittung_id, projekt_id, betrag_muenzen, created_at, updated_at
FROM buchungen FROM buchungen
") %>% ") %>%
as_tibble() as_tibble()
postings <- postings %>% buchungen <- buchungen %>%
transmute( transmute(
id = as.integer(id), id = as.integer(id),
entry_id = as.integer(trans_id), trans_id = as.integer(trans_id),
account_id = as.integer(konto_id), konto_id = as.integer(konto_id),
valuta = as.character(wertstellung), valuta = as.character(wertstellung),
booking_date = as.character(buchungsdatum), buchungsdatum = as.character(buchungsdatum),
amount = betrag, betrag = betrag,
invoice_no = rechnungsnummer, rechnungsnummer = rechnungsnummer,
note = notiz, notiz = notiz,
status = status, status = status,
waived = as.integer(b_verzicht), ist_verzicht = as.integer(b_verzicht),
bank_transaction_id = as.integer(umsatz_id), umsatz_id = as.integer(umsatz_id),
wiso_id = as.integer(wiso_id), wiso_id = as.integer(wiso_id),
receipt_id = as.integer(quittung_id), quittung_id = as.integer(quittung_id),
project_id = as.integer(projekt_id), projekt_id = as.integer(projekt_id),
coin_share_amount = betrag_muenzen, betrag_muenzen = betrag_muenzen,
created_at = created_at, created_at = created_at,
updated_at = updated_at updated_at = updated_at
) )
dbWriteTable(con_s, "postings", postings, append = TRUE) dbWriteTable(con_s, "buchungen", buchungen, append = TRUE)
ok <- "postings" %in% dbListTables(con_s) ok <- dbExistsTable(con_s, "buchungen")
error_f <- fehler_add("Die Postings Tabelle wurde erstellt", ok, error_f) ok <- f_anzahl("buchungen") == nrow(buchungen) & ok
} ## ------------------------------------------------------- 2026-05-12 17:03 error_f <- fehler_add("buchungen übertragen", TRUE, error_f)
}
## * Transfer Attachments ----
## * Umsatz-Tabelle ----
if(ok){ if(ok){
exec_sql("CREATE TABLE hibiscus_transactions ( exec_sql("DROP TABLE IF EXISTS attachments;")
exec_sql("CREATE TABLE attachments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
trans_id INTEGER,
quittung_id INTEGER,
adress_id INTEGER,
wiso_id INTEGER,
btisch_id TEXT,
original_name TEXT,
kategorie TEXT,
ext TEXT NOT NULL,
notiz TEXT,
created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT DEFAULT (datetime('now'))
);")
att <- dbxSelect(con_f, "SELECT id, trans_id, quittung_id, wiso_id, btisch_id,
adress_id, ft_dateiname, beschreibung, created_at, updated_at, ft_extension FROM Dokumente") %>%
transmute(
id = as.integer(id),
trans_id = as.integer(trans_id),
quittung_id = as.integer(quittung_id),
wiso_id = as.integer(wiso_id),
btisch_id = as.integer(btisch_id),
adress_id = as.integer(adress_id),
created_at = as.character(created_at),
updated_at = as.character(updated_at),
original_name = ft_dateiname,
ext = paste0(id,".", ft_extension)
)
dbWriteTable(con_s, "attachments", att, append = T)
ok <- dbExistsTable(con_s, "attachments")
ok <- f_anzahl("attachments") == nrow(att) & ok
error_f <- fehler_add("attachments übertragen", TRUE, error_f)
} ## ------------------------------------------------------- 2026-03-19 16:38
### ** Dateien übertragen ----
if(ok){
pfad <- "~/Insync/Projekte/Gemeindefinanzen/gemfin-fm/gemfin04/Dokumente/datei/"
zielpfad <- "~/Documents/workspace/gemfin-shiny/www/documents/"
vorhanden <- list.files(pfad, pattern = "pdf")
eintraege <- att$original_name
anz <- length(eintraege)
for(ind in 1:length(eintraege)){
if( exists(paste0(zielpfad, eintraege[ind])) ){
cat(ind, " von ", anz, "\n")
file.copy(
from = paste0(pfad, vorhanden[ind]),
to = "~/Documents/workspace/gemfin-shiny/www/documents/")
}
}
neue_dateien <- list.files("~/Documents/workspace/gemfin-shiny/www/documents/")
length(neue_dateien)
eintraege <- att$original_name
length(eintraege)
nv <- att[-which(eintraege %in% neue_dateien),]
error_f <- fehler_add("Alle Dateien übertragen", nrow(nv) == 0, error_f)
} ## ------------------------------------------------------- 2026-04-28 18:40
## * Transfer Bankverbindungen ----
if (ok) {
exec_sql("DROP TABLE IF EXISTS bvb;")
exec_sql("CREATE TABLE bvb (
id INTEGER PRIMARY KEY,
adress_id INTEGER,
remote_name TEXT,
iban TEXT,
bic TEXT,
kreditinstitut TEXT,
created_at TEXT,
updated_at TEXT
);")
bvb <- dbxSelect(con_f, "
SELECT id, adress_id, kontakt, iban, bic, kreditinstitut,
created_at, updated_at
FROM Bankverbindungen
") %>%
transmute(
id = as.integer(id),
adress_id = as.integer(adress_id),
remote_name = kontakt,
iban = iban,
bic = bic,
kreditinstitut = kreditinstitut,
created_at = as.character(created_at),
updated_at = as.character(updated_at)
)
dbWriteTable(con_s, "bvb", bvb, append = TRUE)
ok <- dbExistsTable(con_s, "bvb")
ok <- f_anzahl("bvb") == nrow(bvb) & ok
error_f <- fehler_add("bvb übertragen", TRUE, error_f)
}
## * Transfer Hibiscus ----
if(ok){
exec_sql("DROP TABLE IF EXISTS umsatz;")
exec_sql("CREATE TABLE umsatz (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
konto_id INTEGER, konto_id INTEGER,
empfaenger_konto TEXT, empfaenger_konto TEXT,
@@ -343,151 +454,43 @@ if(ok){
datum TEXT, datum TEXT,
valuta TEXT, valuta TEXT,
saldo REAL, saldo REAL,
primanota INTEGER,
art TEXT,
customerref TEXT, customerref TEXT,
kommentar TEXT, kommentar TEXT,
endtoendid TEXT, endtoendid TEXT
mandateid TEXT,
empfaenger_name2 TEXT
);") );")
daten_hibiscus <- sync_hibiscus() %>% umsatz <- dbReadTable(con_f, "Umsatz") %>%
transmute(
id = as.integer(ID),
konto_id = as.integer(KONTO_ID),
empfaenger_konto = EMPFAENGER_KONTO,
empfaenger_blz = EMPFAENGER_BLZ,
empfaenger_name = EMPFAENGER_NAME,
betrag = as.numeric(BETRAG),
zweck =ZWECK,
zweck2 =ZWECK2,
zweck3 =ZWECK3,
datum =as.character(DATUM),
valuta = as.character(VALUTA),
saldo = SALDO,
primanota = PRIMANOTA,
art =ART,
customerref =CUSTOMERREF,
kommentar = KOMMENTAR,
endtoendid = ENDTOENDID,
mandateid = MANDATEID,
empfaenger_name2 =EMPFAENGER_NAME2
)
dbWriteTable(con_s, "hibiscus_transactions", daten_hibiscus, append = T)
anz <- dbxSelect(con_s, "select count(id) FROM hibiscus_transactions") %>% pull
ok <- nrow(daten_hibiscus) == anz
error_f <- fehler_add("Die Tabelle der Umsätze (Hibiscus) wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 17:05
## * Attachments Tabelle ----
if(ok){
exec_sql("CREATE TABLE attachments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
entry_id INTEGER,
quittung_id INTEGER,
adress_id INTEGER,
wiso_id INTEGER,
btisch_id TEXT,
original_name TEXT,
kategorie TEXT,
path TEXT NOT NULL,
note TEXT,
created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT DEFAULT (datetime('now'))
);")
att <- dbxSelect(con_f, "SELECT id, trans_id, quittung_id, wiso_id, btisch_id,
adress_id, ft_dateiname, beschreibung, created_at, updated_at, ft_extension FROM Dokumente") %>%
mutate(
id = as.integer(id),
trans_id = as.integer(trans_id),
quittung_id = as.integer(quittung_id),
wiso_id = as.integer(wiso_id),
btisch_id = as.integer(btisch_id),
adress_id = as.integer(adress_id),
created_at = as.character(created_at),
updated_at = as.character(updated_at),
path = paste0(id,".", ft_extension)
) %>%
rename(
entry_id = trans_id,
note = beschreibung,
original_name = ft_dateiname
) %>%
select(-ft_extension)
dbWriteTable(con_s, "attachments", att, append = T)
ok <- "attachments" %in% dbListTables(con_s)
error_f <- fehler_add("Die Attachments Tabelle wurder erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 17:07
## * Projekt - Tabelle ----
if(ok){
exec_sql("CREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
projektname TEXT,
bereich TEXT,
notiz TEXT,
jahr INTEGER,
created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT DEFAULT (datetime('now'))
);")
projects <- dbxSelect(con_f, "
SELECT id, projektname, bereich, notiz, jahr, created_at, updated_at from Projekte") %>%
transmute( transmute(
id = as.integer(id), id = as.integer(id),
projektname = projektname, konto_id = as.integer(konto_id),
bereich = bereich, empfaenger_konto = empfaenger_konto,
notiz = notiz, empfaenger_blz = empfaenger_blz,
jahr = as.integer(jahr), empfaenger_name = empfaenger_name,
created_at = created_at, betrag = betrag,
updated_at = updated_at zweck = zweck,
zweck2 = zweck2,
zweck3 = zweck2,
datum = datum,
valuta = valuta,
saldo = saldo,
kommentar = kommentar,
endtoendid = endtoendid
) )
dbWriteTable(con_s, "projects", projects, append = TRUE) dbWriteTable(con_s, "umsatz", umsatz, append = TRUE)
ok <- "projects" %in% dbListTables(con_s) ok <- sum(duplicated(umsatz$id)) == 0
error_f <- fehler_add("Die Projekte - Tabelle wurde erstellt", ok, error_f) ok <- dbExistsTable(con_s, "umsatz") & ok
} ## ------------------------------------------------------- 2026-05-12 17:08 ok <- f_anzahl("umsatz") == nrow(umsatz) & ok
error_f <- fehler_add("Tabelle Umsatz existiert", ok, error_f)
} ## ------------------------------------------------------- 2026-06-19 08:34
## * Dateien übertragen ----
if(ok){
pfad <- "~/Documents/workspace/gemfin-fm/gemfin04/Dokumente/datei/"
zielpfad <- "~/Documents/workspace/gemfin-shiny/www/documents/"
vorhanden <- list.files(pfad, pattern = "pdf")
eintraege <- att %>%
filter(!is.na(original_name)) %>%
mutate(
ext = file_ext(original_name),
zielname = paste0(zielpfad, id, ".", ext)
)
anz <- nrow(eintraege)
for(ind in 1:nrow(eintraege)){
herkunft <- paste0(pfad, eintraege$original_name[ind])
zielname <- eintraege$zielname[ind]
if( file.exists(herkunft) ){
# cat(ind, " von ", anz, "\n")
file.copy(
from = herkunft,
to = zielname,
overwrite = F)
}
}
# Check
neue_dateien <- list.files("~/Documents/workspace/gemfin-shiny/www/documents/")
length(neue_dateien)
length(eintraege)
nv <- att[-which(eintraege %in% neue_dateien),]
error_f <- fehler_add("Alle Dateien übertragen", nrow(nv) == 0, error_f)
} ## ------------------------------------------------------- 2026-04-28 18:40
# Close ---- # Close ----
dbListTables(con_s)
dbDisconnect(con_s) dbDisconnect(con_s)
dbDisconnect(con_f) dbDisconnect(con_f)
print("Migration finished.") print("Migration finished.")
Regular → Executable
BIN
View File
Binary file not shown.
Executable → Regular
View File

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Executable → Regular
View File