Compare commits
11 Commits
12ef7693d5
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 479f455f86 | |||
| f960e390d9 | |||
| dc7effe9b7 | |||
| e28c8b6a9c | |||
| e27ee5fd0b | |||
| 2e7933ad58 | |||
| 88de12e0b0 | |||
| 6ae86577aa | |||
| b5d7e435c1 | |||
| f52d5fa3dd | |||
| 4175690455 |
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>gemfin-shiny</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.statet.r.resourceProjects.RBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.statet.ide.resourceProjects.Statet</nature>
|
||||||
|
<nature>org.eclipse.statet.r.resourceProjects.R</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
num_inp <- function(id, betrag, ro = FALSE){
|
||||||
|
autonumericInput(
|
||||||
|
inputId = id,
|
||||||
|
label = NULL,
|
||||||
|
width = "100%",
|
||||||
|
value = betrag,
|
||||||
|
currencySymbol = "",
|
||||||
|
currencySymbolPlacement = "s",
|
||||||
|
align = "right",
|
||||||
|
readOnly = ro,
|
||||||
|
style = "height: 15px !important; padding: 1px 1px;"
|
||||||
|
)
|
||||||
|
}
|
||||||
+58
-34
@@ -1,28 +1,43 @@
|
|||||||
# module_buchungen.R
|
##
|
||||||
|
## Datum : 2026-04-29_08-17
|
||||||
|
## Name : Christian Oswald
|
||||||
|
## Datei : buchungen_mod.R
|
||||||
|
## Projekt : gemfin-shiny
|
||||||
|
## Kommentar: Modul für die Anzeige der Buchungen - praktisch Hauptformular
|
||||||
|
##
|
||||||
|
|
||||||
|
## * UI ----
|
||||||
buchungenUI <- function(id) {
|
buchungenUI <- function(id) {
|
||||||
ns <- NS(id)
|
ns <- NS(id)
|
||||||
tagList(
|
tagList(
|
||||||
useShinyjs(),
|
useShinyjs(),
|
||||||
|
## ** Tabelle ----
|
||||||
h3("Hauptbuchungen"),
|
h3("Hauptbuchungen"),
|
||||||
fluidRow(
|
fluidRow(
|
||||||
column(8, reactableOutput(ns("buchungen_table")),
|
column(8, reactableOutput(ns("buchungen_table")),
|
||||||
|
num_inp(ns("saldo"), 0, ro = T),
|
||||||
|
div(
|
||||||
|
style = "display: flex; justify-content: flex-end; margin-top: 5px;",
|
||||||
|
|
||||||
|
),
|
||||||
hr(),
|
hr(),
|
||||||
|
## ** Gegenbuchungen ----
|
||||||
h3("Details / Gegenbuchungen"),
|
h3("Details / Gegenbuchungen"),
|
||||||
uiOutput(ns("details_table")) ,
|
uiOutput(ns("details_table")) ,
|
||||||
|
),
|
||||||
|
## ** Eingabefelder ----
|
||||||
),
|
|
||||||
|
|
||||||
column(4,
|
column(4,
|
||||||
selectizeInput(ns("contact"), label = "Kontakt", choices = get_contact_choices(conn),
|
selectizeInput(ns("contact"), label = "Kontakt", choices = get_contact_choices(conn),
|
||||||
selected = NA, width = "100%"),
|
selected = NA, width = "100%"),
|
||||||
textAreaInput(ns("note"), label = "Verwendungszweck", value = NA, width = "100%"),
|
textAreaInput(ns("note"), label = "Verwendungszweck", value = NA, width = "100%"),
|
||||||
|
|
||||||
|
## ** Anhänge ----
|
||||||
h3("Dateien"),
|
h3("Dateien"),
|
||||||
uiOutput(ns("attachments_ui")),
|
uiOutput(ns("attachments_ui")),
|
||||||
fileInput(ns("anhang"), NULL, multiple = TRUE,
|
fileInput(ns("anhang"), NULL, multiple = TRUE,
|
||||||
accept = c(".pdf", ".jpg", ".png", ".xlsx", ".docx"),
|
accept = c(".pdf", ".jpg", ".png", ".xlsx", ".docx"),
|
||||||
width = "100%"),
|
width = "100%"),
|
||||||
|
## ** Buttons ----
|
||||||
div(
|
div(
|
||||||
style = "display: flex; flex-direction: column; gap: 10px; align-items: flex-start;",
|
style = "display: flex; flex-direction: column; gap: 10px; align-items: flex-start;",
|
||||||
|
|
||||||
@@ -39,12 +54,7 @@ buchungenUI <- function(id) {
|
|||||||
size = "sm", style = "material-flat", color = "success", block = TRUE, icon = icon("floppy-disk")),
|
size = "sm", style = "material-flat", color = "success", block = TRUE, icon = icon("floppy-disk")),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,19 +62,18 @@ buchungenServer <- function(id, conn, r_global) {
|
|||||||
moduleServer(id, function(input, output, session) {
|
moduleServer(id, function(input, output, session) {
|
||||||
ns <- session$ns
|
ns <- session$ns
|
||||||
|
|
||||||
# ── Reactive Variablen ----
|
## ** Reactive Variablen ----
|
||||||
postings_data <- reactiveVal(read_buch_tabelle(conn))
|
postings_data <- reactiveVal(read_buch_tabelle(conn))
|
||||||
sel_details <- reactiveVal(NULL)
|
sel_details <- reactiveVal(NULL)
|
||||||
selected_trans_id <- reactiveVal(NULL)
|
selected_entry_id <- reactiveVal(NULL)
|
||||||
reset_trigger <- reactiveVal(NULL)
|
reset_trigger <- reactiveVal(NULL)
|
||||||
current_main_idx <- reactiveVal(NULL)
|
current_main_idx <- reactiveVal(NULL)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ── Filter ----
|
## ** Filter ----
|
||||||
aktiver_filter <- reactive(r_global$buchungen_filter)
|
aktiver_filter <- reactive(r_global$buchungen_filter)
|
||||||
|
|
||||||
gefilterte_daten <- reactive({
|
gefilterte_daten <- reactive({
|
||||||
d <- postings_data()
|
d <- postings_data()
|
||||||
f <- aktiver_filter()
|
f <- aktiver_filter()
|
||||||
@@ -79,8 +88,7 @@ buchungenServer <- function(id, conn, r_global) {
|
|||||||
else d
|
else d
|
||||||
})
|
})
|
||||||
|
|
||||||
|
## ** Haupttabelle rendern ----
|
||||||
# ── Haupttabelle rendern ----
|
|
||||||
output$buchungen_table <- renderReactable({
|
output$buchungen_table <- renderReactable({
|
||||||
reset_trigger()
|
reset_trigger()
|
||||||
f_reactable(
|
f_reactable(
|
||||||
@@ -91,15 +99,24 @@ buchungenServer <- function(id, conn, r_global) {
|
|||||||
filterable = TRUE,
|
filterable = TRUE,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
## ** Auswahl anzeigen ----
|
||||||
sel <- reactive(getReactableState("buchungen_table", "selected"))
|
sel <- reactive(getReactableState("buchungen_table", "selected"))
|
||||||
observeEvent(sel(), ignoreInit = T, {
|
observeEvent(sel(), ignoreInit = T, {
|
||||||
|
idwert <- gefilterte_daten()$id[sel()]
|
||||||
|
record <- read_posting(conn, idwert)
|
||||||
|
record_entry <- read_entry(conn, record$entry_id)
|
||||||
|
updateSelectizeInput(session, "contact", selected = record_entry$contact_id)
|
||||||
|
updateTextAreaInput(session, "note", value = record_entry$purpose)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
output$details_table <- renderUI({
|
output$details_table <- renderUI({
|
||||||
req(sel())
|
req(sel())
|
||||||
# Daten laden
|
## *** Daten-Gegenbuchungen laden ----
|
||||||
df <- read_buch_entries(conn, gefilterte_daten()$entry_id[sel()])
|
df <- read_buch_entries(conn, gefilterte_daten()$entry_id[sel()])
|
||||||
sel_details(df)
|
sel_details(df)
|
||||||
|
## *** Gegenbuchungen rendern ----
|
||||||
rows <- lapply(1:nrow(df), function(ind) {
|
rows <- lapply(1:nrow(df), function(ind) {
|
||||||
fluidRow(class = "details-row",
|
fluidRow(class = "details-row",
|
||||||
# HIER: Index an die ID hängen!
|
# HIER: Index an die ID hängen!
|
||||||
@@ -116,14 +133,11 @@ buchungenServer <- function(id, conn, r_global) {
|
|||||||
})
|
})
|
||||||
tagList(rows)
|
tagList(rows)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
observeEvent(input$save_trans, {
|
observeEvent(input$save_trans, {
|
||||||
req(sel_details())
|
req(sel_details())
|
||||||
n_rows <- nrow(sel_details())
|
n_rows <- nrow(sel_details())
|
||||||
|
|
||||||
# Alle Zeilen in einer Liste sammeln
|
# Alle Zeilen in einer Liste sammeln
|
||||||
all_records <- lapply(1:n_rows, function(ind) {
|
all_records <- lapply(1:n_rows, function(ind) {
|
||||||
data.frame(
|
data.frame(
|
||||||
@@ -135,10 +149,19 @@ buchungenServer <- function(id, conn, r_global) {
|
|||||||
stringsAsFactors = FALSE
|
stringsAsFactors = FALSE
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
# Zu einem großen Dataframe zusammenfügen
|
# Zu einem großen Dataframe zusammenfügen
|
||||||
final_df <- do.call(rbind, all_records)
|
final_df <- do.call(rbind, all_records)
|
||||||
browser()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Datenbank-Update-Logik
|
# Datenbank-Update-Logik
|
||||||
tryCatch({
|
tryCatch({
|
||||||
@@ -158,21 +181,21 @@ buchungenServer <- function(id, conn, r_global) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
# ── Anhänge ----
|
## ** Anhänge ----
|
||||||
output$attachments_ui <- renderUI({
|
output$attachments_ui <- renderUI({
|
||||||
req(sel_details())
|
req(sel_details())
|
||||||
entry_id <-
|
selected_entry_id(dbxSelect(conn, paste0("SELECT entry_id FROM postings WHERE id=",
|
||||||
dbxSelect(conn, paste0("SELECT entry_id FROM postings WHERE id=",
|
sel_details()$id[1])) %>%
|
||||||
sel_details()$id[1])) %>% pull
|
pull )
|
||||||
att <- dbxSelect(conn, paste0(
|
print(selected_entry_id())
|
||||||
"SELECT * FROM attachments WHERE entry_id = ", entry_id
|
att <- dbxSelect(conn, paste0("SELECT * FROM attachments WHERE entry_id = ", selected_entry_id() ))
|
||||||
))
|
|
||||||
if (nrow(att) == 0) return(p("Keine Anhänge vorhanden."))
|
if (nrow(att) == 0) return(p("Keine Anhänge vorhanden."))
|
||||||
|
## *** 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("attachments/", att$id[i], ".", ext)
|
filename <- paste0("documents/", att$id[i], ".", ext)
|
||||||
|
|
||||||
|
## *** Anhang öffnen ----
|
||||||
observeEvent(input[[paste0("open_att_", att$id[i])]], {
|
observeEvent(input[[paste0("open_att_", att$id[i])]], {
|
||||||
showModal(modalDialog(
|
showModal(modalDialog(
|
||||||
tags$iframe(src = filename, width = "100%", height = "600px",
|
tags$iframe(src = filename, width = "100%", height = "600px",
|
||||||
@@ -184,6 +207,7 @@ buchungenServer <- function(id, conn, r_global) {
|
|||||||
))
|
))
|
||||||
}, ignoreInit = TRUE, once = FALSE)
|
}, ignoreInit = TRUE, once = FALSE)
|
||||||
|
|
||||||
|
## *** Buttons Anhänge ----
|
||||||
div(
|
div(
|
||||||
actionLink(ns(paste0("open_att_", att$id[i])), att$original_name[i]),
|
actionLink(ns(paste0("open_att_", att$id[i])), att$original_name[i]),
|
||||||
actionLink(ns(paste0("del_att_", att$id[i])), "✕",
|
actionLink(ns(paste0("del_att_", att$id[i])), "✕",
|
||||||
|
|||||||
@@ -26,4 +26,5 @@ resolve_contact <- function(conn, empfaenger_name, empfaenger_konto) {
|
|||||||
select(contact_id) %>%
|
select(contact_id) %>%
|
||||||
collect()
|
collect()
|
||||||
if (nrow(bc) > 0) bc$contact_id[1] else NA_integer_
|
if (nrow(bc) > 0) bc$contact_id[1] else NA_integer_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
##
|
||||||
|
## Datum : 2026-05-13_09-37
|
||||||
|
## Name : Christian Oswald
|
||||||
|
## Datei : sync_hibiscus.R
|
||||||
|
## Projekt : gemfin-shiny
|
||||||
|
## Kommentar: Liest Daten aus der Hibiscus Datenbank
|
||||||
|
##
|
||||||
|
|
||||||
|
## * Initialisierung ----
|
||||||
|
|
||||||
|
sync_hibiscus <- function(){
|
||||||
|
if (as.character(Sys.info())[1] == "Linux") {
|
||||||
|
jdbc_url <- "jdbc:h2:/home/cosw/.jameica/hibiscus/h2db/hibiscus;IFEXISTS=TRUE;CIPHER=AES"
|
||||||
|
pw <- "LsOX6Ytldl4lJBcVoA6j+MDLzaA= LsOX6Ytldl4lJBcVoA6j+MDLzaA="
|
||||||
|
}
|
||||||
|
|
||||||
|
if(as.character(Sys.info())[1] == "Windows"){
|
||||||
|
source("c:/Users/chris/R/rfunc/fehler_add.R")
|
||||||
|
url <- "jdbc:h2:~/Insync/Projekte/Gemeindefinanzen/jameica/hibiscus/h2db/hibiscus;IFEXISTS=TRUE;CIPHER=AES"
|
||||||
|
h2jar <- "C:/Users/chris/bin/jameica/lib/h2/migration-h2/disabled/h2-1.4.199.jar"
|
||||||
|
}
|
||||||
|
# JDBC - Verbindung ----
|
||||||
|
if (as.character(Sys.info())[1] == "Darwin") {
|
||||||
|
source("/Users/cosw/R/rfunc/fehler_add.R")
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
user <- "hibiscus"
|
||||||
|
pw <- "FbvGoL+yJlH1GtUojnC8ZajYuTA= FbvGoL+yJlH1GtUojnC8ZajYuTA="
|
||||||
|
drv <- JDBC("org.h2.Driver", h2jar, identifier.quote="`")
|
||||||
|
|
||||||
|
con_j <- dbConnect(drv, url, user, pw)
|
||||||
|
originaldaten <- dbReadTable(con_j, "UMSATZ")
|
||||||
|
dbDisconnect(con_j)
|
||||||
|
return(originaldaten)
|
||||||
|
}
|
||||||
+292
-296
@@ -26,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(
|
||||||
@@ -69,201 +53,61 @@ 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) {
|
if (ok) {
|
||||||
|
exec_sql("DROP TABLE IF EXISTS konten;")
|
||||||
exec_sql("CREATE TABLE accounts (
|
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
|
||||||
);")
|
);")
|
||||||
|
|
||||||
exec_sql("CREATE TABLE budgets (
|
konten <- dbxSelect(con_f, "
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
row_no INTEGER,
|
|
||||||
area TEXT,
|
|
||||||
label TEXT,
|
|
||||||
direction TEXT,
|
|
||||||
created_at TEXT,
|
|
||||||
updated_at TEXT
|
|
||||||
);")
|
|
||||||
|
|
||||||
exec_sql("CREATE TABLE contacts (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
first_name TEXT,
|
|
||||||
last_name TEXT,
|
|
||||||
street TEXT,
|
|
||||||
postal_code TEXT,
|
|
||||||
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,
|
|
||||||
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,
|
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, "konten", konten, append = TRUE)
|
||||||
dbWriteTable(con_s, "accounts", accounts, append = TRUE)
|
ok <- dbExistsTable(con_s, "konten")
|
||||||
|
ok <- f_anzahl("konten") == nrow(konten) & ok
|
||||||
|
error_f <- fehler_add("Konten übertragen", TRUE, error_f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## * Transfer Projekte ----
|
||||||
if (ok) {
|
if (ok) {
|
||||||
projects <- dbxSelect(con_f, "
|
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") %>%
|
SELECT id, projektname, bereich, notiz, jahr, created_at, updated_at from Projekte") %>%
|
||||||
transmute(
|
transmute(
|
||||||
id = as.integer(id),
|
id = as.integer(id),
|
||||||
@@ -275,152 +119,247 @@ if (ok) {
|
|||||||
updated_at = updated_at
|
updated_at = updated_at
|
||||||
)
|
)
|
||||||
|
|
||||||
dbWriteTable(con_s, "projects", projects, append = TRUE)
|
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 ----
|
## * Transfer Budgets ----
|
||||||
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
|
exec_sql("DROP TABLE IF EXISTS budgets;")
|
||||||
|
exec_sql("CREATE TABLE budgets (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
reihe INTEGER,
|
||||||
|
bereich TEXT,
|
||||||
|
bezeichnung TEXT,
|
||||||
|
richtung TEXT,
|
||||||
|
created_at TEXT,
|
||||||
|
updated_at TEXT
|
||||||
|
);")
|
||||||
budgets <- dbxSelect(con_f, "
|
budgets <- dbxSelect(con_f, "
|
||||||
SELECT id, richtung, bereich, bezeichnung, reihe
|
SELECT id, richtung, bereich, bezeichnung, reihe
|
||||||
FROM Budgets
|
FROM Budgets
|
||||||
") %>%
|
") %>%
|
||||||
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 <- dbExistsTable(con_s, "budgets")
|
||||||
|
ok <- f_anzahl("budgets") == nrow(budgets) & ok
|
||||||
|
error_f <- fehler_add("Budgets übertragen", TRUE, error_f)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Transfer Contacts
|
### ** Transfer Budget-Werte
|
||||||
|
if(ok){
|
||||||
|
exec_sql("DROP TABLE IF EXISTS budget_werte;")
|
||||||
|
exec_sql("CREATE TABLE budget_werte (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
budget_id INTEGER,
|
||||||
|
jahr INTEGER,
|
||||||
|
betrag DECIMAL,
|
||||||
|
budget_listen_nr INTEGER,
|
||||||
|
created_at TEXT,
|
||||||
|
updated_at TEXT
|
||||||
|
);")
|
||||||
|
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) {
|
if (ok) {
|
||||||
contacts <- dbxSelect(con_f, "
|
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)
|
||||||
dbWriteTable(con_s, "contacts", contacts, append = TRUE)
|
ok <- dbExistsTable(con_s, "adressen")
|
||||||
|
ok <- f_anzahl("adressen") == nrow(adressen) & ok
|
||||||
|
error_f <- fehler_add("adressen übertragen", TRUE, error_f)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Transfer Entries ----
|
## * Transfer Transaktionen ----
|
||||||
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
entries <- dbxSelect(con_f, "
|
exec_sql("DROP TABLE IF EXISTS transaktionen;")
|
||||||
|
exec_sql("CREATE TABLE transaktionen (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
adress_id INTEGER,
|
||||||
|
vwz TEXT,
|
||||||
|
notiz TEXT,
|
||||||
|
bank_kontakt TEXT,
|
||||||
|
created_at TEXT,
|
||||||
|
updated_at TEXT
|
||||||
|
);")
|
||||||
|
|
||||||
|
transaktionen <- 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)
|
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 ----
|
## * Transfer Postings ----
|
||||||
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
postings <- dbxSelect(con_f, "
|
exec_sql("DROP TABLE IF EXISTS buchungen;")
|
||||||
|
exec_sql("CREATE TABLE buchungen (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
trans_id INTEGER NOT NULL,
|
||||||
|
konto_id INTEGER NOT NULL,
|
||||||
|
valuta TEXT NOT NULL,
|
||||||
|
buchungsdatum TEXT,
|
||||||
|
betrag DECIMAL,
|
||||||
|
rechnungsnummer TEXT,
|
||||||
|
notiz TEXT,
|
||||||
|
status TEXT,
|
||||||
|
ist_verzicht INTEGER,
|
||||||
|
umsatz_id INTEGER,
|
||||||
|
wiso_id INTEGER,
|
||||||
|
quittung_id INTEGER,
|
||||||
|
projekt_id INTEGER,
|
||||||
|
betrag_muenzen DECIMAL,
|
||||||
|
created_at TEXT,
|
||||||
|
updated_at TEXT
|
||||||
|
);")
|
||||||
|
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()
|
||||||
|
buchungen <- buchungen %>%
|
||||||
if (!USE_CENTS) {
|
|
||||||
postings <- postings %>%
|
|
||||||
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
|
||||||
)
|
)
|
||||||
} else {
|
dbWriteTable(con_s, "buchungen", buchungen, append = TRUE)
|
||||||
postings <- postings %>%
|
ok <- dbExistsTable(con_s, "buchungen")
|
||||||
transmute(
|
ok <- f_anzahl("buchungen") == nrow(buchungen) & ok
|
||||||
id = as.integer(id),
|
error_f <- fehler_add("buchungen übertragen", TRUE, error_f)
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Daten aus Attachments Tabelle übertragen ----
|
## * Transfer Attachments ----
|
||||||
if(ok){
|
if(ok){
|
||||||
|
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,
|
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(
|
transmute(
|
||||||
id = as.integer(id),
|
id = as.integer(id),
|
||||||
trans_id = as.integer(trans_id),
|
trans_id = as.integer(trans_id),
|
||||||
quittung_id = as.integer(quittung_id),
|
quittung_id = as.integer(quittung_id),
|
||||||
@@ -429,19 +368,18 @@ if(ok){
|
|||||||
adress_id = as.integer(adress_id),
|
adress_id = as.integer(adress_id),
|
||||||
created_at = as.character(created_at),
|
created_at = as.character(created_at),
|
||||||
updated_at = as.character(updated_at),
|
updated_at = as.character(updated_at),
|
||||||
path = paste0(id,".", ft_extension)
|
original_name = ft_dateiname,
|
||||||
) %>%
|
ext = paste0(id,".", ft_extension)
|
||||||
rename(
|
)
|
||||||
entry_id = trans_id,
|
dbWriteTable(con_s, "attachments", att, append = T)
|
||||||
note = beschreibung,
|
ok <- dbExistsTable(con_s, "attachments")
|
||||||
original_name = ft_dateiname
|
ok <- f_anzahl("attachments") == nrow(att) & ok
|
||||||
) %>%
|
error_f <- fehler_add("attachments übertragen", TRUE, error_f)
|
||||||
select(-ft_extension)
|
|
||||||
dbWriteTable(con_s, "Attachments", att, append = T)
|
|
||||||
} ## ------------------------------------------------------- 2026-03-19 16:38
|
} ## ------------------------------------------------------- 2026-03-19 16:38
|
||||||
|
|
||||||
|
|
||||||
## * Daeien übertragen ----
|
### ** Dateien übertragen ----
|
||||||
if(ok){
|
if(ok){
|
||||||
pfad <- "~/Insync/Projekte/Gemeindefinanzen/gemfin-fm/gemfin04/Dokumente/datei/"
|
pfad <- "~/Insync/Projekte/Gemeindefinanzen/gemfin-fm/gemfin04/Dokumente/datei/"
|
||||||
zielpfad <- "~/Documents/workspace/gemfin-shiny/www/documents/"
|
zielpfad <- "~/Documents/workspace/gemfin-shiny/www/documents/"
|
||||||
@@ -450,7 +388,7 @@ if(ok){
|
|||||||
anz <- length(eintraege)
|
anz <- length(eintraege)
|
||||||
for(ind in 1:length(eintraege)){
|
for(ind in 1:length(eintraege)){
|
||||||
if( exists(paste0(zielpfad, eintraege[ind])) ){
|
if( exists(paste0(zielpfad, eintraege[ind])) ){
|
||||||
cat(ind, " von ", anz, "\n")
|
cat(ind, " von ", anz, "\n")
|
||||||
file.copy(
|
file.copy(
|
||||||
from = paste0(pfad, vorhanden[ind]),
|
from = paste0(pfad, vorhanden[ind]),
|
||||||
to = "~/Documents/workspace/gemfin-shiny/www/documents/")
|
to = "~/Documents/workspace/gemfin-shiny/www/documents/")
|
||||||
@@ -465,36 +403,94 @@ if(ok){
|
|||||||
} ## ------------------------------------------------------- 2026-04-28 18:40
|
} ## ------------------------------------------------------- 2026-04-28 18:40
|
||||||
|
|
||||||
|
|
||||||
# Transfer Bankverbindungen ----
|
## * Transfer Bankverbindungen ----
|
||||||
if (ok) {
|
if (ok) {
|
||||||
bank_connections <- dbxSelect(con_f, "
|
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,
|
SELECT id, adress_id, kontakt, iban, bic, kreditinstitut,
|
||||||
remote_name, created_at, updated_at
|
created_at, updated_at
|
||||||
FROM Bankverbindungen
|
FROM Bankverbindungen
|
||||||
") %>%
|
") %>%
|
||||||
transmute(
|
transmute(
|
||||||
id = as.integer(id),
|
id = as.integer(id),
|
||||||
contact_id = as.integer(adress_id),
|
adress_id = as.integer(adress_id),
|
||||||
contact_text = kontakt,
|
remote_name = kontakt,
|
||||||
iban = iban,
|
iban = iban,
|
||||||
bic = bic,
|
bic = bic,
|
||||||
bank_name = kreditinstitut,
|
kreditinstitut = kreditinstitut,
|
||||||
remote_name = remote_name,
|
|
||||||
created_at = as.character(created_at),
|
created_at = as.character(created_at),
|
||||||
updated_at = as.character(updated_at)
|
updated_at = as.character(updated_at)
|
||||||
)
|
)
|
||||||
|
dbWriteTable(con_s, "bvb", bvb, append = TRUE)
|
||||||
sum(duplicated(bank_connections$id))
|
ok <- dbExistsTable(con_s, "bvb")
|
||||||
dbWriteTable(con_s, "bank_connections", bank_connections, append = TRUE)
|
ok <- f_anzahl("bvb") == nrow(bvb) & ok
|
||||||
error_f <- fehler_add(
|
error_f <- fehler_add("bvb übertragen", TRUE, error_f)
|
||||||
paste(nrow(bank_connections), "Bankverbindungen übertragen"), TRUE, error_f
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## * Transfer Hibiscus ----
|
||||||
|
if(ok){
|
||||||
|
exec_sql("DROP TABLE IF EXISTS umsatz;")
|
||||||
|
exec_sql("CREATE TABLE umsatz (
|
||||||
|
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,
|
||||||
|
customerref TEXT,
|
||||||
|
kommentar TEXT,
|
||||||
|
endtoendid TEXT
|
||||||
|
);")
|
||||||
|
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 = betrag,
|
||||||
|
zweck = zweck,
|
||||||
|
zweck2 = zweck2,
|
||||||
|
zweck3 = zweck2,
|
||||||
|
datum = datum,
|
||||||
|
valuta = valuta,
|
||||||
|
saldo = saldo,
|
||||||
|
kommentar = kommentar,
|
||||||
|
endtoendid = endtoendid
|
||||||
|
)
|
||||||
|
dbWriteTable(con_s, "umsatz", umsatz, append = TRUE)
|
||||||
|
ok <- sum(duplicated(umsatz$id)) == 0
|
||||||
|
ok <- dbExistsTable(con_s, "umsatz") & ok
|
||||||
|
ok <- f_anzahl("umsatz") == nrow(umsatz) & ok
|
||||||
|
error_f <- fehler_add("Tabelle Umsatz existiert", ok, error_f)
|
||||||
|
} ## ------------------------------------------------------- 2026-06-19 08:34
|
||||||
|
|
||||||
|
|
||||||
# Close ----
|
# Close ----
|
||||||
|
|
||||||
|
dbListTables(con_s)
|
||||||
dbDisconnect(con_s)
|
dbDisconnect(con_s)
|
||||||
dbDisconnect(con_f)
|
dbDisconnect(con_f)
|
||||||
|
|
||||||
print("Migration finished.")
|
print("Migration finished.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -12,8 +12,8 @@ library("conflicted")
|
|||||||
library("R.utils")
|
library("R.utils")
|
||||||
library("shinyjs")
|
library("shinyjs")
|
||||||
|
|
||||||
conflicts_prefer(dplyr::select)
|
conflicts_prefer()
|
||||||
conflicts_prefer(dplyr::filter)
|
conflicts_prefer()
|
||||||
|
|
||||||
|
|
||||||
conn <- dbConnect(RSQLite::SQLite(), "db/development.sqlite")
|
conn <- dbConnect(RSQLite::SQLite(), "db/development.sqlite")
|
||||||
@@ -21,3 +21,25 @@ sourceDirectory("R/")
|
|||||||
source("~/R/rfunc/fehler_add.R")
|
source("~/R/rfunc/fehler_add.R")
|
||||||
|
|
||||||
|
|
||||||
|
conflicts_prefer(
|
||||||
|
ggplot2::`%+%`,
|
||||||
|
shinyjs::alert,
|
||||||
|
shinydashboard::box,
|
||||||
|
rJava::clone,
|
||||||
|
dplyr::select,
|
||||||
|
dplyr::filter,
|
||||||
|
tidyr::extract,
|
||||||
|
shinyjs::hidden,
|
||||||
|
dplyr::ident,
|
||||||
|
dplyr::lag,
|
||||||
|
shiny::printStackTrace,
|
||||||
|
shinyjs::removeClass,
|
||||||
|
shinyjs::reset,
|
||||||
|
shiny::runExample,
|
||||||
|
shiny::setProgress,
|
||||||
|
shinyjs::show,
|
||||||
|
dplyr::sql,
|
||||||
|
shiny::validate,
|
||||||
|
.quiet = TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 116 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user