diff --git a/api/methods.py b/api/methods.py
index c41c699..75ada88 100644
--- a/api/methods.py
+++ b/api/methods.py
@@ -813,6 +813,7 @@ SELECT
id
,description
,premise
+ ,area
FROM commercial_premise_t
ORDER BY
premise
@@ -827,21 +828,25 @@ def insert_commercial_premise(user, token_info, **args):
body = args["body"]
v_description = body["description"]
v_premise = body["premise"]
+ v_area = body["area"]
return dbInsert(user, token_info, {
"statement": """
INSERT INTO commercial_premise_t
(
description
,premise
+ ,area
) VALUES (
%s
,%s
+ ,%s
)
RETURNING *
""",
"params": [
v_description
,v_premise
+ ,v_area
]
})
except KeyError as e:
@@ -856,6 +861,7 @@ SELECT
id
,description
,premise
+ ,area
FROM commercial_premise_t
WHERE id = %s
""",
@@ -868,18 +874,21 @@ def update_commercial_premise(user, token_info, commercial_premiseId=None, **arg
body = args["body"]
v_description = body["description"]
v_premise = body["premise"]
+ v_area = body["area"]
return dbUpdate(user, token_info, {
"statement": """
UPDATE commercial_premise_t
SET
description = %s
,premise = %s
+ ,area = %s
WHERE id = %s
RETURNING *
""",
"params": [
v_description,
v_premise,
+ v_area,
commercial_premiseId
]
})
@@ -895,6 +904,7 @@ SELECT
id
,description
,premise
+ ,area
FROM commercial_premise_t
WHERE premise = %s
ORDER BY
diff --git a/api/openapi.yaml b/api/openapi.yaml
index 34fa233..a203e1e 100644
--- a/api/openapi.yaml
+++ b/api/openapi.yaml
@@ -1714,6 +1714,9 @@ components:
premise:
type: integer
nullable: true
+ area:
+ type: number
+ nullable: true
tenancy:
description: tenancy
type: object
diff --git a/cli/OverheadAccounts.py b/cli/OverheadAccounts.py
index 63b1684..b815466 100644
--- a/cli/OverheadAccounts.py
+++ b/cli/OverheadAccounts.py
@@ -1,6 +1,7 @@
-from db import dbGetMany
+from db import dbGetMany, dbGetOne
import datetime
from loguru import logger
+from decimal import *
def perform(dbh, params):
try:
@@ -12,42 +13,6 @@ def perform(dbh, params):
premises = (1, 2)
- # get flat tenants by object and timespan with paid overhead and due overhead
- tenants = dbGetMany(
- dbh,
- {
- "statement":
- """
- select t.id as tenant_id,
- t.firstname as tenant_firstname,
- t.lastname as tenant_lastname,
- f.id as flat_id,
- f.description as flat,
- p.id as house_id,
- p.description as house,
- ty.startdate as startdate,
- ty.enddate as enddate
- from tenant_t t,
- premise_t p,
- flat_t f,
- tenancy_t ty
- where ty.tenant = t.id and
- ty.flat = f.id and
- ty.startdate >= %(startDate)s and
- (ty.enddate <= %(endDate)s or ty.enddate is null) and
- f.premise = p.id and
- p.id in %(premises)s
- order by house_id, tenant_id
- """,
- "params": {
- "startDate": startDate,
- "endDate": endDate,
- "premises": premises
- }
- }
- )
- logger.info(f"{tenants=}")
-
# get overhead sums by object, category and timespan
overheadSums = dbGetMany(
@@ -86,6 +51,13 @@ def perform(dbh, params):
created_at between %(startDate)s and %(endDate)s and
p.id in %(premises)s
group by house_id, house, category
+ union
+ select 120 as sum,
+ 'Waschmaschine' as category,
+ id as house_id,
+ description as house
+ from premise_t
+ where id in %(premises)s
order by house_id, category
""",
"params": {
@@ -95,7 +67,106 @@ def perform(dbh, params):
}
}
)
- logger.info(f"{overheadSums=}")
+ # logger.info(f"{overheadSums=}")
+ for overheadSum in overheadSums:
+ logger.info(f"house: {overheadSum['house']}, category: {overheadSum['category']}, sum: {overheadSum['sum']}")
+
+ subtotal = {}
+ for premise in premises:
+ v = [ x['sum'] for x in overheadSums if x['house_id'] == premise ]
+ logger.info(f"{v=}")
+ subtotal[premise] = sum(v)
+ logger.info(f"{subtotal=}")
+
+
+
+
+ # get flat tenants by object and timespan with paid overhead and due overhead
+ tenants = dbGetMany(
+ dbh,
+ {
+ "statement":
+ """
+ select t.id as tenant_id,
+ t.firstname as tenant_firstname,
+ t.lastname as tenant_lastname,
+ f.id as flat_id,
+ f.description as flat,
+ p.id as house_id,
+ p.description as house,
+ ty.startdate as startdate,
+ ty.enddate as enddate,
+ t.account as tenant_account
+ from tenant_t t,
+ premise_t p,
+ flat_t f,
+ tenancy_t ty
+ where ty.tenant = t.id and
+ ty.flat = f.id and
+ ty.startdate <= %(startDate)s and
+ (ty.enddate >= %(endDate)s or ty.enddate is null) and
+ f.premise = p.id and
+ p.id in %(premises)s
+ order by house_id, tenant_id
+ """,
+ "params": {
+ "startDate": startDate,
+ "endDate": endDate,
+ "premises": premises
+ }
+ }
+ )
+
+ for tenant in tenants:
+ logger.info(f"firstname: {tenant['tenant_firstname']}, lastname: {tenant['tenant_lastname']}, house: {tenant['house']}, account: {tenant['tenant_account']}")
+
+ paidTotal = dbGetOne(
+ dbh,
+ {
+ "statement":
+ """
+ SELECT sum(amount) AS sum,
+ count(id) AS cnt
+ FROM account_entry_t
+ WHERE account = %(account)s AND
+ account_entry_category = 2 AND
+ due_at BETWEEN %(startDate)s AND %(endDate)s
+ """,
+ "params": {
+ "account": tenant['tenant_account'],
+ "startDate": startDate,
+ "endDate": endDate
+ }
+ }
+ )
+ receivableFee = dbGetOne(
+ dbh,
+ {
+ "statement":
+ """
+ SELECT sum(amount) * -1 AS sum ,
+ count(id) AS cnt
+ FROM account_entry_t
+ WHERE account = %(account)s AND
+ account_entry_category = 3 AND
+ due_at BETWEEN %(startDate)s AND %(endDate)s
+ """,
+ "params": {
+ "account": tenant['tenant_account'],
+ "startDate": startDate,
+ "endDate": endDate
+ }
+ }
+ )
+
+ logger.info(f"Payments: cnt: {paidTotal['cnt']}, sum: {paidTotal['sum']}")
+ logger.info(f"Receivable fees: cnt: {receivableFee['cnt']}, sum: {receivableFee['sum']}")
+
+ paidOverheadAdvance = paidTotal['sum'] - receivableFee['sum']
+ logger.info(f"Paid overhead: {paidOverheadAdvance} (by month: {paidOverheadAdvance / Decimal(12)})")
+
+
+
diff --git a/cli/db.py b/cli/db.py
index 7a0234a..b9fe284 100644
--- a/cli/db.py
+++ b/cli/db.py
@@ -21,7 +21,7 @@ def execDatabaseOperation(dbh, func, params):
def _opGetMany(cursor, params):
- logger.warning(f"{params=}")
+ #logger.warning(f"{params=}")
items = []
cursor.execute(params["statement"], params["params"])
for itemObj in cursor:
diff --git a/schema.json b/schema.json
index 5da984a..36bd926 100644
--- a/schema.json
+++ b/schema.json
@@ -79,7 +79,8 @@
"name": "commercial_premise",
"columns": [
{ "name": "description", "sqltype": "varchar(128)", "selector": 1 },
- { "name": "premise", "sqltype": "integer", "foreignkey": true, "selector": 0 }
+ { "name": "premise", "sqltype": "integer", "foreignkey": true, "selector": 0 },
+ { "name": "area", "sqltype": "numeric(10,2)", "notnull": false }
],
"tableConstraints": [
"unique(description, premise)"
diff --git a/schema/create.sql b/schema/create.sql
index 288dc4b..2f0f708 100644
--- a/schema/create.sql
+++ b/schema/create.sql
@@ -91,6 +91,7 @@ CREATE TABLE commercial_premise_t (
id serial not null primary key
,description varchar(128)
,premise integer references premise_t (id)
+ ,area numeric(10,2)
,unique(description, premise)
);
diff --git a/ui/hv2-ui/src/app/commercial-unit-details/commercial-unit-details.component.html b/ui/hv2-ui/src/app/commercial-unit-details/commercial-unit-details.component.html
index 78a04c6..3d9efe7 100644
--- a/ui/hv2-ui/src/app/commercial-unit-details/commercial-unit-details.component.html
+++ b/ui/hv2-ui/src/app/commercial-unit-details/commercial-unit-details.component.html
@@ -22,6 +22,10 @@