From 07dff731520b5570f19dddf56289452aa8aeb0d4 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Mon, 2 Jan 2023 14:46:59 +0100 Subject: [PATCH] add contracts --- .gitignore | 1 + api/Dockerfile | 17 +- api/methods.py | 100 +++ api/openapi.yaml | 101 +++ api/requirements.txt | 40 + cli/accountStatement | 0 ...tStatement.tmpl => accountStatement.tmplx} | 0 ...ht.tmpl => betriebskostenuebersicht.tmplx} | 0 ...abrechnung.tmpl => jahresabrechnung.tmplx} | 0 r-scripts/hv2-analysis/.Rhistory | 131 ++++ .../hv2-analysis/income-expense-analysis.Rmd | 173 +++++ .../hv2-analysis/income-expense-analysis.docx | Bin 0 -> 11384 bytes .../hv2-analysis/income-expense-analysis.html | 720 ++++++++++++++++++ .../hv2-analysis/income-expense-analysis.pdf | Bin 0 -> 111588 bytes readme.md | 1 + requirements.txt | 1 + schema.json | 13 + schema/account-statement.sql | 3 +- schema/changes-contract.sql | 11 + schema/create.sql | 12 + ui/hv2-ui/package-lock.json | 96 ++- ui/hv2-ui/package.json | 2 - ui/hv2-ui/src/app/app-routing.module.ts | 5 + ui/hv2-ui/src/app/app.module.ts | 6 +- ui/hv2-ui/src/app/config.ts | 4 +- .../src/app/contract/contract.component.css | 4 + .../src/app/contract/contract.component.html | 46 ++ .../app/contract/contract.component.spec.ts | 25 + .../src/app/contract/contract.component.ts | 61 ++ ui/hv2-ui/src/app/data-object-service.ts | 32 + ui/hv2-ui/src/app/data-objects.ts | 15 + .../my-contracts/my-contracts.component.css | 0 .../my-contracts/my-contracts.component.html | 31 + .../my-contracts.component.spec.ts | 25 + .../my-contracts/my-contracts.component.ts | 38 + .../app/navigation/navigation.component.html | 2 + 36 files changed, 1671 insertions(+), 45 deletions(-) create mode 100644 api/requirements.txt create mode 100644 cli/accountStatement rename cli/{accountStatement.tmpl => accountStatement.tmplx} (100%) rename cli/{betriebskostenuebersicht.tmpl => betriebskostenuebersicht.tmplx} (100%) rename cli/{jahresabrechnung.tmpl => jahresabrechnung.tmplx} (100%) create mode 100644 r-scripts/hv2-analysis/income-expense-analysis.Rmd create mode 100644 r-scripts/hv2-analysis/income-expense-analysis.docx create mode 100644 r-scripts/hv2-analysis/income-expense-analysis.html create mode 100644 r-scripts/hv2-analysis/income-expense-analysis.pdf create mode 100644 requirements.txt create mode 100644 schema/changes-contract.sql create mode 100644 ui/hv2-ui/src/app/contract/contract.component.css create mode 100644 ui/hv2-ui/src/app/contract/contract.component.html create mode 100644 ui/hv2-ui/src/app/contract/contract.component.spec.ts create mode 100644 ui/hv2-ui/src/app/contract/contract.component.ts create mode 100644 ui/hv2-ui/src/app/my-contracts/my-contracts.component.css create mode 100644 ui/hv2-ui/src/app/my-contracts/my-contracts.component.html create mode 100644 ui/hv2-ui/src/app/my-contracts/my-contracts.component.spec.ts create mode 100644 ui/hv2-ui/src/app/my-contracts/my-contracts.component.ts diff --git a/.gitignore b/.gitignore index b2f020e..065b201 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ cli/*.pdf cli/*.aux .DS_Store .Rproj.user +.venv diff --git a/api/Dockerfile b/api/Dockerfile index de86b6b..0db7997 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -11,19 +11,6 @@ ARG CONF_DIR="${APP_DIR}/config" RUN \ apt update && \ apt install -y postgresql-client-common && \ - pip3 install psycopg2 && \ - pip3 install dateparser && \ - pip3 install connexion && \ - pip3 install connexion[swagger-ui] && \ - pip3 install uwsgi && \ - pip3 install flask-cors && \ - pip3 install python-jose[cryptography] && \ - pip3 install loguru && \ - pip3 install Cheetah3 - - - -RUN \ mkdir -p ${APP_DIR} && \ mkdir -p ${CONF_DIR} && \ useradd -d ${APP_DIR} -u 1000 user @@ -31,11 +18,15 @@ RUN \ COPY *.py ${APP_DIR}/ COPY openapi.yaml ${APP_DIR}/ COPY methods.py ${APP_DIR}/ +COPY requirements.txt ${APP_DIR}/ COPY server.ini ${CONF_DIR}/ WORKDIR ${APP_DIR} VOLUME ${CONF_DIR} +RUN \ + pip3 install -r requirements.txt + USER 1000:1000 EXPOSE 5000 diff --git a/api/methods.py b/api/methods.py index ba49384..9a2145f 100644 --- a/api/methods.py +++ b/api/methods.py @@ -1584,3 +1584,103 @@ SELECT } ) +def get_contracts(user, token_info): + return dbGetMany(user, token_info, { + "statement": """ +SELECT + id + ,supplier + ,content + ,identifier + ,notes + FROM contract_t + ORDER BY + supplier + ,content + """, + "params": () + } + ) + +def insert_contract(user, token_info, **args): + try: + body = args["body"] + v_supplier = body["supplier"] + v_content = body["content"] + v_identifier = body["identifier"] + v_notes = body["notes"] + return dbInsert(user, token_info, { + "statement": """ +INSERT INTO contract_t + ( + supplier + ,content + ,identifier + ,notes + ) VALUES ( + %s + ,%s + ,%s + ,%s + ) + RETURNING * +""", + "params": [ + v_supplier + ,v_content + ,v_identifier + ,v_notes + ] + }) + except KeyError as e: + logger.warning("insert_contract: parameter missing: {}".format(e)) + raise werkzeug.exceptions.UnprocessableEntity("parameter missing: {}".format(e)) + + +def get_contract(user, token_info, contractId=None): + return dbGetOne(user, token_info, { + "statement": """ +SELECT + id + ,supplier + ,content + ,identifier + ,notes + FROM contract_t + WHERE id = %s + """, + "params": (contractId, ) + } + ) + +def update_contract(user, token_info, contractId=None, **args): + try: + body = args["body"] + v_supplier = body["supplier"] + v_content = body["content"] + v_identifier = body["identifier"] + v_notes = body["notes"] + return dbUpdate(user, token_info, { + "statement": """ +UPDATE contract_t + SET + supplier = %s + ,content = %s + ,identifier = %s + ,notes = %s + WHERE id = %s + RETURNING * +""", + "params": [ + v_supplier, + v_content, + v_identifier, + v_notes, + contractId + ] + }) + except KeyError as e: + logger.warning("update_contract: parameter missing: {}".format(e)) + raise werkzeug.exceptions.UnprocessableEntity("parameter missing: {}".format(e)) + + diff --git a/api/openapi.yaml b/api/openapi.yaml index 1fb1bed..896b231 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -1440,6 +1440,92 @@ paths: $ref: '#/components/schemas/note' security: - jwt: ['secret'] + /v1/contracts: + get: + tags: [ "contract" ] + summary: Return all normalized contracts + operationId: methods.get_contracts + responses: + '200': + description: contracts response + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/contract' + security: + - jwt: ['secret'] + post: + tags: [ "contract" ] + summary: Insert a contract + operationId: methods.insert_contract + requestBody: + description: contract + content: + application/json: + schema: + $ref: '#/components/schemas/contract' + responses: + '200': + description: contract successfully inserted + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/contract' + security: + - jwt: ['secret'] + /v1/contracts/{contractId}: + get: + tags: [ "contract" ] + summary: Return the normalized contract with given id + operationId: methods.get_contract + parameters: + - name: contractId + in: path + required: true + schema: + type: integer + responses: + '200': + description: contract response + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/contract' + security: + - jwt: ['secret'] + put: + tags: [ "contract" ] + summary: Update a contract + operationId: methods.update_contract + parameters: + - name: contractId + in: path + required: true + schema: + type: integer + requestBody: + description: contract + content: + application/json: + schema: + $ref: '#/components/schemas/contract' + responses: + '200': + description: contract successfully inserted + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/contract' + security: + - jwt: ['secret'] # ------------------------------------------------------------------- # ATTENTION: This file will not be parsed by Cheetah @@ -1818,6 +1904,21 @@ components: type: integer note: type: string + contract: + description: contract + type: object + properties: + id: + type: integer + supplier: + type: string + content: + type: string + identifier: + type: string + notes: + type: string + nullable: true # ------------------------------------------------------------------- # ATTENTION: This file will not be parsed by Cheetah diff --git a/api/requirements.txt b/api/requirements.txt new file mode 100644 index 0000000..cd73637 --- /dev/null +++ b/api/requirements.txt @@ -0,0 +1,40 @@ +attrs==22.2.0 +certifi==2022.12.7 +cffi==1.15.1 +charset-normalizer==2.1.1 +Cheetah3==3.2.6.post1 +click==8.1.3 +clickclick==20.10.2 +connexion==2.14.1 +cryptography==39.0.0 +dateparser==1.1.5 +ecdsa==0.18.0 +Flask==2.2.2 +Flask-Cors==3.0.10 +idna==3.4 +inflection==0.5.1 +itsdangerous==2.1.2 +Jinja2==3.1.2 +jsonschema==4.17.3 +loguru==0.6.0 +MarkupSafe==2.1.1 +packaging==22.0 +psycopg2==2.9.5 +pyasn1==0.4.8 +pycparser==2.21 +pyrsistent==0.19.3 +python-dateutil==2.8.2 +python-jose==3.3.0 +pytz==2022.7 +pytz-deprecation-shim==0.1.0.post0 +PyYAML==6.0 +regex==2022.10.31 +requests==2.28.1 +rsa==4.9 +six==1.16.0 +swagger-ui-bundle==0.0.9 +tzdata==2022.7 +tzlocal==4.2 +urllib3==1.26.13 +uWSGI==2.0.21 +Werkzeug==2.2.2 diff --git a/cli/accountStatement b/cli/accountStatement new file mode 100644 index 0000000..e69de29 diff --git a/cli/accountStatement.tmpl b/cli/accountStatement.tmplx similarity index 100% rename from cli/accountStatement.tmpl rename to cli/accountStatement.tmplx diff --git a/cli/betriebskostenuebersicht.tmpl b/cli/betriebskostenuebersicht.tmplx similarity index 100% rename from cli/betriebskostenuebersicht.tmpl rename to cli/betriebskostenuebersicht.tmplx diff --git a/cli/jahresabrechnung.tmpl b/cli/jahresabrechnung.tmplx similarity index 100% rename from cli/jahresabrechnung.tmpl rename to cli/jahresabrechnung.tmplx diff --git a/r-scripts/hv2-analysis/.Rhistory b/r-scripts/hv2-analysis/.Rhistory index 7d1ea50..8e9f8b3 100644 --- a/r-scripts/hv2-analysis/.Rhistory +++ b/r-scripts/hv2-analysis/.Rhistory @@ -103,3 +103,134 @@ expense[expense$overhead_relevant] expense %>% filter(overhead_relevant == TRUE) source("~/Workspace/hv2-all-in-one/r-scripts/hv2-analysis/income.R") View(expense) +knitr::opts_chunk$set(echo = TRUE) +total_fee <- sum(income$Miete) +knitr::opts_chunk$set(echo = TRUE) +library(tidyverse, warn.conflicts = FALSE) +library(DBI, warn.conflicts = FALSE) +library(tidyr, warn.conflicts = FALSE) +library(dplyr, 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))) +knitr::kable(income) +total_fee <- sum(income$Miete) +total_overhead <- sum(income$Betriebskosten) +total_income <- total_fee + total_overhead +View(income) +knitr::opts_chunk$set(echo = TRUE) +library(tidyverse, warn.conflicts = FALSE) +library(DBI, warn.conflicts = FALSE) +library(tidyr, warn.conflicts = FALSE) +library(dplyr, 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))) +knitr::kable(income) +total_fee <- sum(income$Miete) +total_overhead <- sum(income$Betriebskosten) +total_income <- total_fee + total_overhead +toString(total_fee) +total_fee$value +total_fee[1] +total_fee[2] +total_fee[1] +t=total_fee +t +unnest(t) +a <- 6.4234 +a +num(a, digits=2) +a +format(a, digits=2) +format(a, digits=3) +a<-100.4234234 +a +format(a, digits=3) +format(a, nsmall=2) diff --git a/r-scripts/hv2-analysis/income-expense-analysis.Rmd b/r-scripts/hv2-analysis/income-expense-analysis.Rmd new file mode 100644 index 0000000..9b8cac4 --- /dev/null +++ b/r-scripts/hv2-analysis/income-expense-analysis.Rmd @@ -0,0 +1,173 @@ +--- +title: "HV2 Jahresabrechnung" +author: "Wolfgang Hottgenroth" +date: "2022-09-18" +output: + pdf_document: default + html_document: default + word_document: default +--- + + +```{r setup, include=FALSE, echo=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = FALSE, message=FALSE) +``` + + +```{r} +library(tidyverse, warn.conflicts = FALSE) +library(DBI, warn.conflicts = FALSE) +library(tidyr, warn.conflicts = FALSE) +library(dplyr, warn.conflicts = FALSE) +``` + +```{r} +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()) +``` + + +# Übersicht über die Einnahmen + +```{r} +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))) +``` + + +```{r} +knitr::kable(income) +``` + + +# Übersicht über die Ausgaben + +```{r} + +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))) +``` + +```{r} +knitr::kable(expense) +``` + + + +# Zusammenfassung + + + +```{r} +total_fee <- sum(income$Miete) +total_overhead <- sum(income$Betriebskosten) +total_income <- total_fee + total_overhead + +total_expense <- sum(expense$amount) +overhead_relevant_expense <- expense %>% + filter(overhead_relevant == TRUE) +total_overhead_relevant_expense <- sum(overhead_relevant_expense$amount) + +total <- total_income + total_expense + +overview.income <- as_tibble( + data.frame( + "Kategorie" = c("Mieteinnahmen", "Betriebskostenvorauszahlungen", "Einnahmen ingesamt"), + "Betrag" = c(total_fee, total_overhead, total_income) + ) +) +overview.expense <- as_tibble( + data.frame( + "Kategorie" = c("Ausgaben insgesamt", "davon Betriebskostenausgaben"), + "Betrag" = c(-1 * total_expense, -1 * total_overhead_relevant_expense) + ) +) + +overview.gain <- as_tibble( + data.frame( + "Überschuss" = c(total) + ) +) +``` + + +## Einnahmen +```{r} +knitr::kable(overview.income) +``` + +## Ausgaben +```{r} +knitr::kable(overview.expense) +``` + +## Überschuss +```{r} +knitr::kable(overview.gain) +``` diff --git a/r-scripts/hv2-analysis/income-expense-analysis.docx b/r-scripts/hv2-analysis/income-expense-analysis.docx new file mode 100644 index 0000000000000000000000000000000000000000..36f8fb80cbb55bf9e0b1785d68118d98abbc23d0 GIT binary patch literal 11384 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 DhuQ9r literal 0 HcmV?d00001 diff --git a/r-scripts/hv2-analysis/income-expense-analysis.html b/r-scripts/hv2-analysis/income-expense-analysis.html new file mode 100644 index 0000000..2a0e2da --- /dev/null +++ b/r-scripts/hv2-analysis/income-expense-analysis.html @@ -0,0 +1,720 @@ + + + + + + + + + + + + + + + +HV2 Jahresabrechnung + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+

Übersicht über die Einnahmen

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
flatpremiseMieteBetriebskosten
1. OG linksHaus Heisinger Str. 3463736.081195.05
1. OG mitteHaus Heisinger Str. 3463050.64975.79
1. OG rechtsHaus Heisinger Str. 3463714.601188.19
2. OG linksHaus Heisinger Str. 3465478.121833.53
2. OG rechtsHaus Heisinger Str. 3465690.881724.84
EG linksHaus Heisinger Str. 3463736.081195.05
EG mitteHaus Heisinger Str. 3463050.64975.79
EG rechtsHaus Heisinger Str. 3463714.601188.67
1. OG linksHaus Hemsingskotten 383701.401195.57
1. OG mitteHaus Hemsingskotten 383110.881004.83
1. OG rechtsHaus Hemsingskotten 383701.401195.57
2. OG linksHaus Hemsingskotten 385826.001799.20
2. OG rechtsHaus Hemsingskotten 385466.001799.33
EG linksHaus Hemsingskotten 383701.401195.57
EG mitteHaus Hemsingskotten 383470.881004.83
EG rechtsHaus Hemsingskotten 383701.401195.57
EG linksWohnung Weststrasse 194964.280.00
+
+
+

Übersicht über die Ausgaben

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
overhead_relevantcategoryamount
FALSEBeerdigung Papa0.00
FALSEBetriebskostenausgleich-339.54
FALSEGründung der GbR-12379.00
FALSEInstandhaltung-2652.59
FALSEKontoführungsgebühr-465.29
FALSENebenkosten Eva-Maria Nober-4291.15
FALSEnicht abrechenbare Positionen-820.56
FALSERechtschutzversicherung-3749.83
FALSESchuldendienst-24234.22
FALSEsonstiges-1649.00
FALSESteuern-5395.00
FALSEVerwaltung-1110.01
TRUE1. Grundsteuer-5066.59
TRUE2. Müllabfuhr-2498.40
TRUE3. Straßenreinigung u. Winterdienst-317.40
TRUE4. Entwässerung-5871.54
TRUE5. Wasserversorgung-3274.34
TRUE9. Gartenpflege-1880.84
TRUE10. Beleuchtung-315.01
TRUE12. Sach- u. Haftpflichtversicherung-5282.91
TRUE17. Sonstiges (Wartung Rauchmelder)-835.73
+
+
+

Zusammenfassung

+
+

Einnahmen

+ + + + + + + + + + + + + + + + + + + + + +
KategorieBetrag
Mieteinnahmen69815.28
Betriebskostenvorauszahlungen20667.38
Einnahmen ingesamt90482.66
+
+
+

Ausgaben

+ + + + + + + + + + + + + + + + + +
KategorieBetrag
Ausgaben insgesamt82428.95
davon Betriebskostenausgaben25342.76
+
+
+

Überschuss

+ + + + + + + + + + + +
Überschuss
8053.71
+
+
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/r-scripts/hv2-analysis/income-expense-analysis.pdf b/r-scripts/hv2-analysis/income-expense-analysis.pdf new file mode 100644 index 0000000000000000000000000000000000000000..55cd33b610f4d41eeedc0409883b8ebbde3b067c GIT binary patch literal 111588 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
+ + + + {{contract?.supplier}} {{contract?.content}} + + + ID: {{contract?.id}} + + + +
> +
+
+ + Partner + + +
+ + Gegenstand + + +
+ + ID + + +
+ + Notizen + + +
+ +
+
+ +
+
+
diff --git a/ui/hv2-ui/src/app/contract/contract.component.spec.ts b/ui/hv2-ui/src/app/contract/contract.component.spec.ts new file mode 100644 index 0000000..425b908 --- /dev/null +++ b/ui/hv2-ui/src/app/contract/contract.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ContractComponent } from './contract.component'; + +describe('ContractComponent', () => { + let component: ContractComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ContractComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ContractComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ui/hv2-ui/src/app/contract/contract.component.ts b/ui/hv2-ui/src/app/contract/contract.component.ts new file mode 100644 index 0000000..76a1b5a --- /dev/null +++ b/ui/hv2-ui/src/app/contract/contract.component.ts @@ -0,0 +1,61 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatButton } from '@angular/material/button'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ContractService } from '../data-object-service'; +import { Contract, NULL_CommercialPremise, NULL_Contract } from '../data-objects'; +import { MessageService } from '../message.service'; + +@Component({ + selector: 'app-contract', + templateUrl: './contract.component.html', + styleUrls: ['./contract.component.css'] +}) +export class ContractComponent implements OnInit { + + @ViewChild('submitButton') submitButton: MatButton + + contract: Contract = NULL_Contract + + constructor( + private contractService: ContractService, + private messageService: MessageService, + private route: ActivatedRoute, + private router: Router + ) { } + + async getContract(): Promise { + try { + const id = +this.route.snapshot.paramMap.get('id') + if (id != 0) { + this.contract = await this.contractService.getContract(id) + } + } catch (err) { + this.messageService.add(JSON.stringify(err, undefined, 4)) + } + } + + async saveContract() { + try { + this.submitButton.disabled = true + this.messageService.add(`saveContract: ${ JSON.stringify(this.contract, undefined, 4) }`) + if (this.contract.id == 0) { + this.messageService.add("about to insert new contract") + this.contract = await this.contractService.postContract(this.contract) + this.messageService.add(`Successfully added contract with id ${this.contract.id}`) + } else { + this.messageService.add("about to update existing contract") + this.contract = await this.contractService.putContract(this.contract) + this.messageService.add(`Successfully changed contract with id ${this.contract.id}`) + } + this.router.navigate(['/contracts']) + } finally { + this.submitButton.disabled = false + } + } + + ngOnInit(): void { + this.getContract() + } + +} diff --git a/ui/hv2-ui/src/app/data-object-service.ts b/ui/hv2-ui/src/app/data-object-service.ts index 13a5dba..38cd57c 100644 --- a/ui/hv2-ui/src/app/data-object-service.ts +++ b/ui/hv2-ui/src/app/data-object-service.ts @@ -27,6 +27,7 @@ import { TenancyFeeMapping } from './data-objects'; import { AccountEntryCategory } from './data-objects'; import { AccountEntry } from './data-objects'; import { Note } from './data-objects'; +import { Contract } from './data-objects'; @@ -519,4 +520,35 @@ export class NoteService { } +@Injectable({ providedIn: 'root' }) +export class ContractService { + constructor(private messageService: MessageService, private http: HttpClient) { } + + async getContracts(): Promise { + this.messageService.add(`ContractService: get data`); + return this.http.get(`${serviceBaseUrl}/v1/contracts`).toPromise() + } + + async getContract(id: number): Promise { + this.messageService.add(`ContractService: get data for ${id}`); + return this.http.get(`${serviceBaseUrl}/v1/contracts/${id}`).toPromise() + } + + async postContract(item: Contract): Promise { + let itemStr: string = JSON.stringify(item, undefined, 4) + this.messageService.add(`ContractService: post data for ${itemStr}`); + return this.http.post(`${serviceBaseUrl}/v1/contracts`, item).toPromise() + } + + async putContract(item: Contract): Promise { + let itemStr: string = JSON.stringify(item, undefined, 4) + this.messageService.add(`ContractService: put data for ${itemStr}`) + let id: number = item["id"] + return this.http.put(`${serviceBaseUrl}/v1/contracts/${id}`, item).toPromise() + } + + + +} + diff --git a/ui/hv2-ui/src/app/data-objects.ts b/ui/hv2-ui/src/app/data-objects.ts index 4730720..0582c9b 100644 --- a/ui/hv2-ui/src/app/data-objects.ts +++ b/ui/hv2-ui/src/app/data-objects.ts @@ -226,4 +226,19 @@ export const NULL_Note: Note = { ,note: '' } +export interface Contract { + id: number + supplier: string + content: string + identifier: string + notes: string +} +export const NULL_Contract: Contract = { + id: 0 + ,supplier: '' + ,content: '' + ,identifier: '' + ,notes: '' +} + diff --git a/ui/hv2-ui/src/app/my-contracts/my-contracts.component.css b/ui/hv2-ui/src/app/my-contracts/my-contracts.component.css new file mode 100644 index 0000000..e69de29 diff --git a/ui/hv2-ui/src/app/my-contracts/my-contracts.component.html b/ui/hv2-ui/src/app/my-contracts/my-contracts.component.html new file mode 100644 index 0000000..250ea23 --- /dev/null +++ b/ui/hv2-ui/src/app/my-contracts/my-contracts.component.html @@ -0,0 +1,31 @@ +
+ + + + Meine Verträge + + Neu anlegen + + + +
+ + + + + + + + + + + + + + + +
Partner{{element.supplier}}Gegenstand{{element.content}}ID{{element.identifier}}
+
+
+ +
\ No newline at end of file diff --git a/ui/hv2-ui/src/app/my-contracts/my-contracts.component.spec.ts b/ui/hv2-ui/src/app/my-contracts/my-contracts.component.spec.ts new file mode 100644 index 0000000..394901e --- /dev/null +++ b/ui/hv2-ui/src/app/my-contracts/my-contracts.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MyContractsComponent } from './my-contracts.component'; + +describe('MyContractsComponent', () => { + let component: MyContractsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MyContractsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MyContractsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ui/hv2-ui/src/app/my-contracts/my-contracts.component.ts b/ui/hv2-ui/src/app/my-contracts/my-contracts.component.ts new file mode 100644 index 0000000..b322429 --- /dev/null +++ b/ui/hv2-ui/src/app/my-contracts/my-contracts.component.ts @@ -0,0 +1,38 @@ +import { Component, OnInit } from '@angular/core'; +import { MatTableDataSource } from '@angular/material/table'; +import { ContractService } from '../data-object-service'; +import { Contract } from '../data-objects'; +import { MessageService } from '../message.service'; + +@Component({ + selector: 'app-my-contracts', + templateUrl: './my-contracts.component.html', + styleUrls: ['./my-contracts.component.css'] +}) +export class MyContractsComponent implements OnInit { + + contracts: Contract[] + dataSource: MatTableDataSource + displayedColumns: string[] = [ "supplier", "content", "identifier" ] + + constructor(private contractService: ContractService, private messageService: MessageService) { } + + async getContracts(): Promise { + try { + this.messageService.add("Trying to load contracts") + this.contracts = await this.contractService.getContracts(); + this.messageService.add("Contracts loaded") + + this.dataSource = new MatTableDataSource(this.contracts) + } catch (err) { + this.messageService.add(JSON.stringify(err, undefined, 4)) + } + } + + ngOnInit(): void { + this.messageService.add("MyContractsComponent.ngOnInit") + this.getContracts() + } + + +} diff --git a/ui/hv2-ui/src/app/navigation/navigation.component.html b/ui/hv2-ui/src/app/navigation/navigation.component.html index 7cb2ba7..13a6c84 100644 --- a/ui/hv2-ui/src/app/navigation/navigation.component.html +++ b/ui/hv2-ui/src/app/navigation/navigation.component.html @@ -22,6 +22,8 @@ Meine Häuser Buchführung + + Verträge Abmelden

_XpEEu!AVm^b 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%0AuCZk&0&Qez3mtqaHS^$ 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⋙dWlE5y8rnt2j5PHfl39A265^)c@B_vujA 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 JAsJz~{{@H%{z(7; literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 62656e8..0824474 100644 --- a/readme.md +++ b/readme.md @@ -2,6 +2,7 @@ ## Tools and Templates +* venv for Python tools is used, remember to activate, install dependencies via ``requirements.txt``, keep it up to date using ``pip freeze > requirements.txt`` * all tools provide should work on Linux and on Windows, shell scripts are avoided * templates files must be generated at development time, generated files must be put into the repository * use ``generate.py`` in the umbrella project's root without any arguments to generate all template files in all subdirectories using the ``schema.json`` from the umbrella project's root diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b191199 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Cheetah3==3.2.6.post1 diff --git a/schema.json b/schema.json index 816d4ce..f22ccee 100644 --- a/schema.json +++ b/schema.json @@ -157,6 +157,19 @@ { "name": "tenant", "sqltype": "integer", "notnull": true, "foreignkey": true }, { "name": "note", "sqltype": "varchar(4096)", "notnull": true } ] + }, + { + "name": "contract", + "immutable": false, + "columns": [ + { "name": "supplier", "sqltype": "varchar(256)", "notnull": true, "selector": 0 }, + { "name": "content", "sqltype": "varchar(256)", "notnull": true, "selector": 1 }, + { "name": "identifier", "sqltype": "varchar(256)", "notnull": true }, + { "name": "notes", "sqltype": "varchar(4096)", "notnull": false } + ], + "tableConstraints": [ + "unique(supplier, content)" + ] } ] } diff --git a/schema/account-statement.sql b/schema/account-statement.sql index 8072c99..662bf5d 100644 --- a/schema/account-statement.sql +++ b/schema/account-statement.sql @@ -88,4 +88,5 @@ 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; + aec.description +order by aec.overhead_relevant; diff --git a/schema/changes-contract.sql b/schema/changes-contract.sql new file mode 100644 index 0000000..73e9596 --- /dev/null +++ b/schema/changes-contract.sql @@ -0,0 +1,11 @@ + +CREATE TABLE contract_t ( + id serial not null primary key + ,supplier varchar(256) not null + ,content varchar(256) not null + ,identifier varchar(256) not null + ,unique(supplier, content) +); + +GRANT SELECT, INSERT, UPDATE ON contract_t TO hv2; +GRANT SELECT, UPDATE ON contract_t_id_seq TO hv2; diff --git a/schema/create.sql b/schema/create.sql index 30b50af..09ca34f 100644 --- a/schema/create.sql +++ b/schema/create.sql @@ -172,6 +172,18 @@ CREATE TABLE note_t ( GRANT SELECT, INSERT ON note_t TO hv2; GRANT SELECT, UPDATE ON note_t_id_seq TO hv2; +CREATE TABLE contract_t ( + id serial not null primary key + ,supplier varchar(256) not null + ,content varchar(256) not null + ,identifier varchar(256) not null + ,notes varchar(4096) + ,unique(supplier, content) +); + +GRANT SELECT, INSERT, UPDATE ON contract_t TO hv2; +GRANT SELECT, UPDATE ON contract_t_id_seq TO hv2; + diff --git a/ui/hv2-ui/package-lock.json b/ui/hv2-ui/package-lock.json index 5fc3a32..8cfc893 100644 --- a/ui/hv2-ui/package-lock.json +++ b/ui/hv2-ui/package-lock.json @@ -33,8 +33,6 @@ "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "codelyzer": "^6.0.0", - "jasmine-core": "~3.6.0", - "jasmine-spec-reporter": "~5.0.0", "karma": "~5.1.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.0.3", @@ -3588,6 +3586,16 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -6612,6 +6620,13 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -8575,19 +8590,11 @@ } }, "node_modules/jasmine-core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.6.0.tgz", - "integrity": "sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw==", - "dev": true - }, - "node_modules/jasmine-spec-reporter": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.2.tgz", - "integrity": "sha512-6gP1LbVgJ+d7PKksQBc2H0oDGNRQI3gKUsWlswKaQ2fif9X5gzhQcgM5+kiJGCQVurOG09jqNhk7payggyp5+g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", + "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", "dev": true, - "dependencies": { - "colors": "1.4.0" - } + "peer": true }, "node_modules/jasmine/node_modules/jasmine-core": { "version": "2.8.0", @@ -8889,6 +8896,12 @@ "karma-jasmine": ">=1.1" } }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "3.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz", + "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==", + "dev": true + }, "node_modules/karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -9980,6 +9993,13 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -19949,6 +19969,16 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -22456,6 +22486,13 @@ } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -23973,19 +24010,11 @@ } }, "jasmine-core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.6.0.tgz", - "integrity": "sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw==", - "dev": true - }, - "jasmine-spec-reporter": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.2.tgz", - "integrity": "sha512-6gP1LbVgJ+d7PKksQBc2H0oDGNRQI3gKUsWlswKaQ2fif9X5gzhQcgM5+kiJGCQVurOG09jqNhk7payggyp5+g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", + "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", "dev": true, - "requires": { - "colors": "1.4.0" - } + "peer": true }, "jasminewd2": { "version": "2.2.0", @@ -24354,6 +24383,14 @@ "dev": true, "requires": { "jasmine-core": "^3.6.0" + }, + "dependencies": { + "jasmine-core": { + "version": "3.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz", + "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==", + "dev": true + } } }, "karma-jasmine-html-reporter": { @@ -25101,6 +25138,13 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", diff --git a/ui/hv2-ui/package.json b/ui/hv2-ui/package.json index 23de218..9bd5017 100644 --- a/ui/hv2-ui/package.json +++ b/ui/hv2-ui/package.json @@ -37,8 +37,6 @@ "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "codelyzer": "^6.0.0", - "jasmine-core": "~3.6.0", - "jasmine-spec-reporter": "~5.0.0", "karma": "~5.1.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.0.3", diff --git a/ui/hv2-ui/src/app/app-routing.module.ts b/ui/hv2-ui/src/app/app-routing.module.ts index e2865fe..e521dfd 100644 --- a/ui/hv2-ui/src/app/app-routing.module.ts +++ b/ui/hv2-ui/src/app/app-routing.module.ts @@ -20,11 +20,14 @@ import { FeeDetailsComponent } from './fee-details/fee-details.component'; import { EnterPaymentComponent } from './enter-payment/enter-payment.component'; import { HomeComponent } from './home/home.component'; import { LedgerComponent } from './ledger/ledger.component'; +import { ContractComponent } from './contract/contract.component'; +import { MyContractsComponent } from './my-contracts/my-contracts.component'; const routes: Routes = [ { path: 'tenants', component: MyTenantsComponent, canActivate: [ AuthGuardService ] }, { path: 'premises', component: MyPremisesComponent, canActivate: [ AuthGuardService ] }, + { path: 'contracts', component: MyContractsComponent, canActivate: [ AuthGuardService ] }, { path: 'flats', component: MyFlatsComponent, canActivate: [ AuthGuardService ] }, { path: 'parkings', component: MyParkingsComponent, canActivate: [ AuthGuardService ] }, { path: 'commercialunits', component: MyCommercialUnitsComponent, canActivate: [ AuthGuardService ] }, @@ -46,6 +49,8 @@ const routes: Routes = [ { path: 'fee', component: FeeDetailsComponent, canActivate: [ AuthGuardService ] }, { path: 'enterPayment', component: EnterPaymentComponent, canActivate: [ AuthGuardService ] }, { path: 'ledger', component: LedgerComponent, canActivate: [ AuthGuardService ] }, + { path: 'contract', component: ContractComponent, canActivate: [ AuthGuardService ] }, + { path: 'contract/:id', component: ContractComponent, canActivate: [ AuthGuardService ] }, { path: 'home', component: HomeComponent }, { path: 'logout', component: LogoutComponent }, { path: 'login', component: LoginComponent }, diff --git a/ui/hv2-ui/src/app/app.module.ts b/ui/hv2-ui/src/app/app.module.ts index e5439aa..f38747e 100644 --- a/ui/hv2-ui/src/app/app.module.ts +++ b/ui/hv2-ui/src/app/app.module.ts @@ -51,6 +51,8 @@ import { HomeComponent } from './home/home.component'; import { LedgerComponent } from './ledger/ledger.component'; import { ErrorDialogComponent } from './error-dialog/error-dialog.component' import { MatSortModule } from '@angular/material/sort'; +import { ContractComponent } from './contract/contract.component'; +import { MyContractsComponent } from './my-contracts/my-contracts.component'; registerLocaleData(localeDe) @@ -81,7 +83,9 @@ registerLocaleData(localeDe) EnterPaymentComponent, HomeComponent, LedgerComponent, - ErrorDialogComponent + ErrorDialogComponent, + ContractComponent, + MyContractsComponent ], imports: [ BrowserModule, diff --git a/ui/hv2-ui/src/app/config.ts b/ui/hv2-ui/src/app/config.ts index b20965b..102eb6f 100644 --- a/ui/hv2-ui/src/app/config.ts +++ b/ui/hv2-ui/src/app/config.ts @@ -1,5 +1,5 @@ -export const serviceBaseUrl = "https://api.hv.nober.de"; +// export const serviceBaseUrl = "https://api.hv.nober.de"; // export const serviceBaseUrl = "http://172.16.3.96:8080"; -// export const serviceBaseUrl = "http://localhost:8080" +export const serviceBaseUrl = "http://localhost:8080" export const authserviceBaseUrl = "https://authservice.hottis.de" export const applicationId = "hv2" diff --git a/ui/hv2-ui/src/app/contract/contract.component.css b/ui/hv2-ui/src/app/contract/contract.component.css new file mode 100644 index 0000000..b4f7195 --- /dev/null +++ b/ui/hv2-ui/src/app/contract/contract.component.css @@ -0,0 +1,4 @@ + +.notearea { + width: 75%; +} \ No newline at end of file diff --git a/ui/hv2-ui/src/app/contract/contract.component.html b/ui/hv2-ui/src/app/contract/contract.component.html new file mode 100644 index 0000000..2744eb0 --- /dev/null +++ b/ui/hv2-ui/src/app/contract/contract.component.html @@ -0,0 +1,46 @@ +