Dokumente hinzu und Anzeigefehler korrigiert

This commit is contained in:
2026-05-13 09:31:38 +02:00
parent 2e7933ad58
commit e27ee5fd0b
33 changed files with 259 additions and 305 deletions
+1 -2
View File
@@ -193,11 +193,10 @@ buchungenServer <- function(id, conn, r_global) {
## *** Anhänge anzeigen ---- ## *** Anhänge anzeigen ----
tagList(lapply(seq_len(nrow(att)), function(i) { tagList(lapply(seq_len(nrow(att)), function(i) {
ext <- tools::file_ext(att$original_name[i]) ext <- tools::file_ext(att$original_name[i])
filename <- paste0("www/documents/", att$id[i], ".", ext) filename <- paste0("documents/", att$id[i], ".", ext)
## *** Anhang öffnen ---- ## *** Anhang öffnen ----
observeEvent(input[[paste0("open_att_", att$id[i])]], { observeEvent(input[[paste0("open_att_", att$id[i])]], {
browser()
showModal(modalDialog( showModal(modalDialog(
tags$iframe(src = filename, width = "100%", height = "600px", tags$iframe(src = filename, width = "100%", height = "600px",
style = "border:none;"), style = "border:none;"),
+235 -280
View File
@@ -3,11 +3,12 @@
## Keeps Hibiscus payload fields unchanged ## Keeps Hibiscus payload fields unchanged
## ##
library(tidyverse) library("tidyverse")
library(dbx) library("dbx")
library(RJDBC) library("tools")
library(DBI) library("RJDBC")
library(RSQLite) library("DBI")
library("RSQLite")
source("~/R/rfunc/fehler_add.R") source("~/R/rfunc/fehler_add.R")
@@ -71,8 +72,8 @@ if (ok) {
# Schema creation ---- # Schema creation ----
if (ok) { ## * Accounts ----
if(ok){
exec_sql("CREATE TABLE accounts ( exec_sql("CREATE TABLE accounts (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
account_name TEXT NOT NULL, account_name TEXT NOT NULL,
@@ -86,7 +87,32 @@ if (ok) {
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
accounts <- dbxSelect(con_f, "
SELECT id, konto, budget_id, bankname, updated_at, created_at,
konto_hibiscus, konto_wiso, kontonummer_bank, notizen, ist_spende
FROM Konten
") %>%
transmute(
id = as.integer(id),
account_name = konto,
bank_name = bankname,
hibiscus_account_id = as.integer(konto_hibiscus),
budget_id = as.integer(budget_id),
wiso_account = konto_wiso,
bank_account_no = kontonummer_bank,
is_donations = as.integer(ist_spende),
notes = notizen,
created_at = created_at,
updated_at = updated_at
)
dbWriteTable(con_s, "accounts", accounts, append = TRUE)
ok <- "accounts" %in% dbListTables(con_s)
error_f <- fehler_add("Die Accounts Tabelle wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 16:54
## * Budgets Tabelle ----
if(ok){
exec_sql("CREATE TABLE budgets ( exec_sql("CREATE TABLE budgets (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
row_no INTEGER, row_no INTEGER,
@@ -96,7 +122,26 @@ if (ok) {
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
budgets <- dbxSelect(con_f, "
SELECT id, richtung, bereich, bezeichnung, reihe
FROM Budgets
") %>%
transmute(
id = as.integer(id),
row_no = as.integer(reihe),
area = bereich,
label = bezeichnung,
direction = richtung,
created_at = format(Sys.time(), ""),
updated_at = format(Sys.time(), "")
)
dbWriteTable(con_s, "budgets", budgets, append = TRUE)
ok <- "budgets" %in% dbListTables(con_s)
error_f <- fehler_add("Die Budgets Tabelle wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 16:57
## * Contacts Tabelle ----
if(ok){
exec_sql("CREATE TABLE contacts ( exec_sql("CREATE TABLE contacts (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
first_name TEXT, first_name TEXT,
@@ -122,185 +167,6 @@ if (ok) {
created_at TEXT, created_at TEXT,
updated_at TEXT updated_at TEXT
);") );")
exec_sql("CREATE TABLE bank_connections (
id INTEGER PRIMARY KEY,
contact_id INTEGER,
contact_text TEXT,
iban TEXT,
bic TEXT,
bank_name TEXT,
remote_name TEXT,
created_at TEXT,
updated_at TEXT
);")
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
);")
if (!USE_CENTS) {
exec_sql("CREATE TABLE postings (
id INTEGER PRIMARY KEY,
entry_id INTEGER NOT NULL,
account_id INTEGER NOT NULL,
valuta TEXT NOT NULL,
booking_date TEXT,
amount NUMERIC NOT NULL,
invoice_no TEXT,
note TEXT,
status TEXT,
waived INTEGER,
bank_transaction_id INTEGER,
wiso_id INTEGER,
receipt_id INTEGER,
project_id INTEGER,
coin_share_amount NUMERIC,
created_at TEXT,
updated_at TEXT
);")
} else {
exec_sql("CREATE TABLE postings (
id INTEGER PRIMARY KEY,
entry_id INTEGER NOT NULL,
account_id INTEGER NOT NULL,
valuta TEXT NOT NULL,
booking_date TEXT,
amount_cents INTEGER NOT NULL,
invoice_no TEXT,
note TEXT,
status TEXT,
waived INTEGER,
bank_transaction_id INTEGER,
wiso_id INTEGER,
receipt_id INTEGER,
project_id INTEGER,
coin_share_cents INTEGER,
created_at TEXT,
updated_at TEXT
);")
}
# Hibiscus payload unchanged ----
exec_sql("CREATE TABLE hibiscus_transactions (
id INTEGER PRIMARY KEY,
konto_id INTEGER,
empfaenger_konto TEXT,
empfaenger_blz TEXT,
empfaenger_name TEXT,
betrag REAL,
zweck TEXT,
zweck2 TEXT,
zweck3 TEXT,
datum TEXT,
valuta TEXT,
saldo REAL,
primanota INTEGER,
art TEXT,
customerref TEXT,
kommentar TEXT,
checksum REAL,
umsatztyp_id INTEGER,
flags REAL,
gvcode INTEGER,
addkey INTEGER,
txid TEXT,
purposecode TEXT,
endtoendid TEXT,
mandateid TEXT,
empfaenger_name2 TEXT,
creditorid TEXT
);")
# Attachments ----
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'))
);")
error_f <- fehler_add("Schema created", TRUE, error_f)
}
# Transfer Accounts ----
if (ok) {
accounts <- dbxSelect(con_f, "
SELECT id, konto, budget_id, bankname, updated_at, created_at,
konto_hibiscus, konto_wiso, kontonummer_bank, notizen, ist_spende
FROM Konten
") %>%
transmute(
id = as.integer(id),
account_name = konto,
bank_name = bankname,
hibiscus_account_id = as.integer(konto_hibiscus),
budget_id = as.integer(budget_id),
wiso_account = konto_wiso,
bank_account_no = kontonummer_bank,
is_donations = as.integer(ist_spende),
notes = notizen,
created_at = created_at,
updated_at = updated_at
)
dbWriteTable(con_s, "accounts", accounts, append = TRUE)
}
if (ok) {
projects <- 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, "projects", projects, append = TRUE)
}
# Transfer Budgets ----
if (ok) {
budgets <- dbxSelect(con_f, "
SELECT id, richtung, bereich, bezeichnung, reihe
FROM Budgets
") %>%
transmute(
id = as.integer(id),
row_no = as.integer(reihe),
area = bereich,
label = bezeichnung,
direction = richtung,
created_at = format(Sys.time(), ""),
updated_at = format(Sys.time(), "")
)
dbWriteTable(con_s, "budgets", budgets, append = TRUE)
}
# Transfer Contacts
if (ok) {
contacts <- dbxSelect(con_f, " contacts <- 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, spender, mitglied, notiz,
@@ -335,11 +201,59 @@ if (ok) {
) )
dbWriteTable(con_s, "contacts", contacts, append = TRUE) dbWriteTable(con_s, "contacts", contacts, append = TRUE)
} ok <- "contacts" %in% dbListTables(con_s)
error_f <- fehler_add("Die contacts Tabelle wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 16:58
# Transfer Entries ---- ## * Bankverbindungen ----
if(ok){
exec_sql("CREATE TABLE bank_connections (
id INTEGER PRIMARY KEY,
contact_id INTEGER,
contact_text TEXT,
iban TEXT,
bic TEXT,
bank_name TEXT,
remote_name TEXT,
created_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
if (ok) {
## * 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, " 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
@@ -354,13 +268,33 @@ if (ok) {
created_at = created_at, created_at = created_at,
updated_at = updated_at updated_at = updated_at
) )
dbWriteTable(con_s, "entries", entries, append = TRUE) 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
# Transfer Postings ----
if (ok) { ## * Postings Tabelle ----
if(ok){
exec_sql("CREATE TABLE postings (
id INTEGER PRIMARY KEY,
entry_id INTEGER NOT NULL,
account_id INTEGER NOT NULL,
valuta TEXT NOT NULL,
booking_date TEXT,
amount NUMERIC NOT NULL,
invoice_no TEXT,
note TEXT,
status TEXT,
waived INTEGER,
bank_transaction_id INTEGER,
wiso_id INTEGER,
receipt_id INTEGER,
project_id INTEGER,
coin_share_amount NUMERIC,
created_at TEXT,
updated_at TEXT
);")
postings <- dbxSelect(con_f, " postings <- 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,
@@ -368,8 +302,6 @@ if (ok) {
FROM buchungen FROM buchungen
") %>% ") %>%
as_tibble() as_tibble()
if (!USE_CENTS) {
postings <- postings %>% postings <- postings %>%
transmute( transmute(
id = as.integer(id), id = as.integer(id),
@@ -390,36 +322,66 @@ if (ok) {
created_at = created_at, created_at = created_at,
updated_at = updated_at updated_at = updated_at
) )
} else {
postings <- postings %>%
transmute(
id = as.integer(id),
entry_id = as.integer(trans_id),
account_id = as.integer(konto_id),
valuta = as.character(wertstellung),
booking_date = as.character(buchungsdatum),
amount_cents = to_cents(betrag),
invoice_no = rechnungsnummer,
note = notiz,
status = status,
waived = as.integer(b_verzicht),
bank_transaction_id = as.integer(umsatz_id),
wiso_id = as.integer(wiso_id),
receipt_id = as.integer(quittung_id),
project_id = as.integer(projekt_id),
coin_share_cents = to_cents(betrag_muenzen),
created_at = created_at,
updated_at = updated_at
)
}
dbWriteTable(con_s, "postings", postings, append = TRUE) dbWriteTable(con_s, "postings", postings, append = TRUE)
} ok <- "postings" %in% dbListTables(con_s)
error_f <- fehler_add("Die Postings Tabelle wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 17:03
# Daten aus Attachments Tabelle übertragen ----
## * Umsatz-Tabelle ----
if(F){
exec_sql("CREATE TABLE hibiscus_transactions (
id INTEGER PRIMARY KEY,
konto_id INTEGER,
empfaenger_konto TEXT,
empfaenger_blz TEXT,
empfaenger_name TEXT,
betrag REAL,
zweck TEXT,
zweck2 TEXT,
zweck3 TEXT,
datum TEXT,
valuta TEXT,
saldo REAL,
primanota INTEGER,
art TEXT,
customerref TEXT,
kommentar TEXT,
checksum REAL,
umsatztyp_id INTEGER,
flags REAL,
gvcode INTEGER,
addkey INTEGER,
txid TEXT,
purposecode TEXT,
endtoendid TEXT,
mandateid TEXT,
empfaenger_name2 TEXT,
creditorid TEXT
);")
ok <- NA
error_f <- fehler_add("Die Tabelle der Umsätze (Hibiscus) wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 17:05
## * Attachments Tabelle ----
if(ok){ 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, 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 Attachments") %>% adress_id, ft_dateiname, beschreibung, created_at, updated_at, ft_extension FROM Dokumente") %>%
mutate( mutate(
id = as.integer(id), id = as.integer(id),
trans_id = as.integer(trans_id), trans_id = as.integer(trans_id),
@@ -437,59 +399,76 @@ if(ok){
original_name = ft_dateiname original_name = ft_dateiname
) %>% ) %>%
select(-ft_extension) select(-ft_extension)
dbWriteTable(con_s, "Attachments", att, append = T) dbWriteTable(con_s, "attachments", att, append = T)
} ## ------------------------------------------------------- 2026-03-19 16:38 ok <- "attachments" %in% dbListTables(con_s)
error_f <- fehler_add("Die Attachments Tabelle wurder erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 17:07
## * Daeien übertragen ---- ## * Projekct - Tabelle ----
if(ok){ if(ok){
pfad <- "~/Insync/Projekte/Gemeindefinanzen/gemfin-fm/gemfin04/Dokumente/datei/" 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(
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, "projects", projects, append = TRUE)
ok <- "projects" %in% dbListTables(con_s)
error_f <- fehler_add("Die Projekte - Tabelle wurde erstellt", ok, error_f)
} ## ------------------------------------------------------- 2026-05-12 17:08
## * Dateien übertragen ----
if(ok){
pfad <- "~/Documents/workspace/gemfin-fm/gemfin04/Dokumente/datei/"
zielpfad <- "~/Documents/workspace/gemfin-shiny/www/documents/" zielpfad <- "~/Documents/workspace/gemfin-shiny/www/documents/"
vorhanden <- list.files(pfad, pattern = "pdf") vorhanden <- list.files(pfad, pattern = "pdf")
eintraege <- att$original_name eintraege <- att %>%
anz <- length(eintraege) filter(!is.na(original_name)) %>%
for(ind in 1:length(eintraege)){ mutate(
if( exists(paste0(zielpfad, eintraege[ind])) ){ 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") cat(ind, " von ", anz, "\n")
file.copy( file.copy(
from = paste0(pfad, vorhanden[ind]), from = herkunft,
to = "~/Documents/workspace/gemfin-shiny/www/documents/") to = zielname,
overwrite = F)
} }
} }
# Check
neue_dateien <- list.files("~/Documents/workspace/gemfin-shiny/www/documents/") neue_dateien <- list.files("~/Documents/workspace/gemfin-shiny/www/documents/")
length(neue_dateien) length(neue_dateien)
eintraege <- att$original_name
length(eintraege) length(eintraege)
nv <- att[-which(eintraege %in% neue_dateien),] nv <- att[-which(eintraege %in% neue_dateien),]
error_f <- fehler_add("Alle Dateien übertragen", nrow(nv) == 0, error_f) error_f <- fehler_add("Alle Dateien übertragen", nrow(nv) == 0, error_f)
} ## ------------------------------------------------------- 2026-04-28 18:40 } ## ------------------------------------------------------- 2026-04-28 18:40
# Transfer Bankverbindungen ----
if (ok) {
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)
error_f <- fehler_add(
paste(nrow(bank_connections), "Bankverbindungen übertragen"), TRUE, error_f
)
}
# Close ---- # Close ----
@@ -498,27 +477,3 @@ dbDisconnect(con_f)
print("Migration finished.") print("Migration finished.")
## * Dateien umbenennen ----
library("tools")
atts <- dbReadTable(conn, "attachments")
sum(duplicated(atts$id)) == 0
pfad <- "www/attachments/"
for( ind in 1:nrow(atts)){
datei <- atts$original_name[ind]
if( file.exists(paste0(pfad, datei)) ){
# print(ind)
ext <- file_ext(datei)
idwert <- atts$id[ind]
if(is.na(idwert)) break
name_neu <- paste0(idwert,".",ext)
print(name_neu)
file.copy(from = paste0(pfad, datei), to=paste0("www/documents/", name_neu), overwrite = T)
}
}
atts %>%
filter(id == 1379)
which( "1379.pdf" %in% atts$original_name)
Executable → Regular
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.