Compare commits
3 Commits
e28c8b6a9c
...
479f455f86
| Author | SHA1 | Date | |
|---|---|---|---|
| 479f455f86 | |||
| f960e390d9 | |||
| dc7effe9b7 |
+325
-322
@@ -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 ----
|
||||||
|
|
||||||
to_cents <- function(x) {
|
|
||||||
if (is.null(x)) return(NA_integer_)
|
|
||||||
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)
|
exec_sql <- function(sql) dbExecute(con_s, sql)
|
||||||
|
f_anzahl <- function(tabelle){
|
||||||
|
dbxSelect(con_s, paste0("SELECt count(id) FROM ", tabelle)) %>% pull
|
||||||
|
}
|
||||||
|
|
||||||
# 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 ----
|
||||||
|
|
||||||
## * Accounts ----
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
exec_sql("CREATE TABLE accounts (
|
exec_sql("DROP TABLE IF EXISTS konten;")
|
||||||
|
exec_sql("CREATE TABLE konten (
|
||||||
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 ----
|
||||||
## * Budgets Tabelle ----
|
|
||||||
if (ok) {
|
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
|
||||||
|
)
|
||||||
|
|
||||||
|
dbWriteTable(con_s, "projekte", projekte, append = TRUE)
|
||||||
|
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("CREATE TABLE bank_connections (
|
exec_sql("DROP TABLE IF EXISTS transaktionen;")
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
## * Transfer Postings ----
|
||||||
|
|
||||||
## * Postings Tabelle ----
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
exec_sql("CREATE TABLE postings (
|
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
Binary file not shown.
Executable → Regular
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
Executable → Regular
Reference in New Issue
Block a user