diff --git a/.gitignore b/.gitignore index 4d2990c..b2f020e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ cli/*.log cli/*.pdf cli/*.aux .DS_Store +.Rproj.user diff --git a/r-scripts/hv2-analysis/.Rhistory b/r-scripts/hv2-analysis/.Rhistory new file mode 100644 index 0000000..7d1ea50 --- /dev/null +++ b/r-scripts/hv2-analysis/.Rhistory @@ -0,0 +1,105 @@ +source("~/.active-rstudio-document") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +View(amounts) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +View(amounts) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +print(amounts) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +print(amounts) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +print(amounts) +print(amounts, digits=2) +print(amounts, width=100) +print(amounts, width=10) +print(amounts, width=100) +print(amounts, digits=10) +options(pillar.sigfig=7) +print(amounts) +options(pillar.sigfig=10) +print(amounts) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +library(tidyverse) +flextable::flextable +library(table) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +sum(amounts$fee) +sum(amounts$fee) + sum(amounts$overhead) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +sum(amounts$Betriebskosten) +sum(amounts$Betriebskosten, na.rm = TRUE) +sum(amounts$Betriebskosten, na.rm = FALSE) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +sum(amounts$Betriebskosten) +sum(amounts$Betriebskosten, na.rm = T) +sum(amounts$Betriebskosten, na.omit()) +sum(amounts$Betriebskosten +) +sum(amounts$Betriebskosten) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +amounts$Betriebskosten +amounts$Betriebskosten[is.na(.)] +amounts$Betriebskosten[is.na()] +amounts$Betriebskosten[NA] +amounts$Betriebskosten[1] +amounts$Betriebskosten[is.na()] +amounts$Betriebskosten[is.na] +d <- amounts$Betriebskosten +d +d[is.na(d)] +d[is.na(d)] <- 0 +d +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +View(expense) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +expense +expense[overhead_relevant==T] +expense[expense$overhead_relevant == T] +expense[expense$overhead_relevant == TRUE] +expense[expense$overhead_relevant] +expense %>% filter(overhead_relevant == TRUE) +source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") +View(expense) diff --git a/r-scripts/hv2-analysis/hv2-analysis.Rproj b/r-scripts/hv2-analysis/hv2-analysis.Rproj new file mode 100644 index 0000000..8e3c2eb --- /dev/null +++ b/r-scripts/hv2-analysis/hv2-analysis.Rproj @@ -0,0 +1,13 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX diff --git a/r-scripts/hv2-analysis/income.R b/r-scripts/hv2-analysis/income.R new file mode 100644 index 0000000..4aa248a --- /dev/null +++ b/r-scripts/hv2-analysis/income.R @@ -0,0 +1,118 @@ +library(tidyverse, warn.conflicts = FALSE) +library(DBI, warn.conflicts = FALSE) +library(tidyr, warn.conflicts = FALSE) +library(dplyr, warn.conflicts = FALSE) +# library(lubridate, warn.conflicts = FALSE) +# library(R.utils, warn.conflicts = FALSE) + + +YEAR <- 2021 + +HOME <- Sys.getenv("HOME") +Sys.setenv(PGHOST = "db.mainscnt.eu", + PGDATABASE = "hv2", + PGPORT = 5432, + PGUSER = "wn", + PGSSLMODE = "verify-ca", + PGSSLKEY = paste(HOME, "/keys/psql/wn-postgresql-client-2.key", sep=""), + PGSSLCERT = paste(HOME, "/keys/psql/wn-postgresql-client-2.crt", sep=""), + PGSSLROOTCERT = paste(HOME, "/keys/psql/postgres-ca.crt", sep="")) + +con <- dbConnect(RPostgres::Postgres()) + +res <- dbSendQuery(con, " +select f.description as flat, + p.description as premise, + aec.description as category, + sum(ae.amount) as amount +from flat_t f, + premise_t p, + tenancy_t ty, + tenant_t t, + account_t a, + account_entry_t ae, + account_entry_category_t aec +where p.id = f.premise and + ty.flat = f.id and + ty.tenant = t.id and + a.id = t.account and + ae.account = a.id and + aec.id = ae.account_entry_category and + ae.fiscal_year = $1 and + aec.description in ('Mietzahlung', 'Mietforderung', 'Betriebskostenforderung', 'Betriebskostenausgleich') +group by p.description, + f.description, + aec.description; +") +dbBind(res, list(YEAR)) + +income <- dbFetch(res) +dbClearResult(res) + +income <- income %>% + pivot_wider(names_from = category, values_from = amount) %>% + mutate(Miete := -1 * Mietforderung) %>% + mutate(Betriebskosten := Mietzahlung - Miete + Betriebskostenausgleich) %>% + select(flat, premise, Miete, Betriebskosten) %>% + arrange(premise, flat) %>% + mutate(across(where(is.numeric), ~num(., digits=2))) %>% + mutate(across(where(is.numeric), ~replace(., is.na(.), 0))) + + +total_fee <- sum(income$Miete) +total_overhead <- sum(income$Betriebskosten) +total_income <- total_fee + total_overhead + + +res <- dbSendQuery(con, " +select aec.overhead_relevant as overhead_relevant, + aec.description as category, + sum(ae.amount) as amount +from account_entry_category_t aec, + account_entry_t ae +where aec.id = ae.account_entry_category and + aec.id not in (2, 3, 4, 29) and + ae.fiscal_year = $1 +group by aec.overhead_relevant, + aec.description +") +dbBind(res, list(YEAR)) + +expense <- dbFetch(res) +dbClearResult(res) + +expense <- expense %>% + arrange(overhead_relevant, category) #%>% + #mutate(across(where(is.numeric), ~num(., digits=2))) #%>% + #mutate(across(where(is.numeric), ~replace(., is.na(.), 0))) + +total_expense <- sum(expense$amount) + +overhead_relevant_expense <- expense %>% + filter(overhead_relevant == TRUE) + +total_overhead_relevant_expense <- sum(overhead_relevant_expense$amount) + +print("Einkuenfte pro Wohnung") +print(income) + +print("Einkuenfte Miete") +print(total_fee) +print("Einkuenfte Betriebskosten") +print(total_overhead) +print("Einkuenfte Total") +print(total_income) + +print("Ausgaben") +print(expense) + +print(total_expense) + +print("davon betriebskosten-relevant") +print(total_overhead_relevant_expense) + +profit <- total_income + total_expense +print("Überschuss") +print(profit) + + diff --git a/schema/account-statement.sql b/schema/account-statement.sql index c289d94..8072c99 100644 --- a/schema/account-statement.sql +++ b/schema/account-statement.sql @@ -21,3 +21,71 @@ create or replace view account_statement_v as grant select on account_statement_v to hv2; + + + +create or replace view income_v as + select f.description as flat, + p.description as premise, + ae.amount as amount, + ty.id as tenancy_id, + t.lastname as tenant + + + from flat_t f, + premise_t p, + tenancy_t ty, + tenant_t t, + account_entry_t ae, + account_entry_category_t aec + + where p.id = f.premise and + f.id = ty.flat and + t.id = ty.tenant and + ae.id = t.account and + aec.id = ae.account_entry_category and + aec.description = 'Mietzahlung' and + ae.fiscal_year = 2021 + ; + + +select f.description as flat, + p.description as premise, + --ty.id as tenancy_id, + --t.lastname || ', ' || t.firstname as tenant, + --a.description as account, + aec.description as category, + sum(ae.amount) as amount +from flat_t f, + premise_t p, + tenancy_t ty, + tenant_t t, + account_t a, + account_entry_t ae, + account_entry_category_t aec +where p.id = f.premise and + ty.flat = f.id and + ty.tenant = t.id and + a.id = t.account and + ae.account = a.id and + aec.id = ae.account_entry_category and + ae.fiscal_year = 2021 and + aec.description in ('Mietzahlung', 'Mietforderung', 'Betriebskostenforderung') + +group by p.description, + f.description, + aec.description +; + + + +select aec.overhead_relevant as overhead_relevant, + aec.description as category, + sum(ae.amount) as amount +from account_entry_category_t aec, + account_entry_t ae +where aec.id = ae.account_entry_category and + aec.id not in (2, 3, 4, 29) and + ae.fiscal_year = 2021 +group by aec.overhead_relevant, + aec.description;