diff --git a/ZahlungenForderungen.py b/ZahlungenForderungen.py index 5a201fa..9212136 100644 --- a/ZahlungenForderungen.py +++ b/ZahlungenForderungen.py @@ -1,4 +1,6 @@ from dbpool import getConnection, getOne, getMany +import datetime +import decimal def get_zahlungen_by_mieter(mieter_id): return getMany(""" @@ -15,7 +17,7 @@ SELECT id, def get_zahlung(id): return getOne(""" SELECT id, - mieter + mieter, datum_ist, datum_soll betrag, @@ -28,7 +30,7 @@ SELECT id, def get_forderungen_by_mieter(mieter_id): return getMany(""" SELECT id, - mieter + mieter, datum, betrag, kommentar, @@ -40,7 +42,7 @@ SELECT id, def get_forderung(id): return getOne(""" SELECT id, - mieter + mieter, datum, betrag, kommentar, @@ -50,6 +52,8 @@ SELECT id, """, [ id ], "Forderung") def get_zahlungforderung_by_mieter_and_year(mieter_id, year): + if year == 0: + year = datetime.datetime.now().year start_date = "{}-01-01".format(year) end_date = "{}-12-31".format(year) return getMany(""" @@ -65,4 +69,38 @@ SELECT FROM zahlung_forderung WHERE mieter = ? AND datum_soll BETWEEN ? AND ? -""", [mieter_id, start_date, end_date], "ZahlungForderung") \ No newline at end of file +""", [mieter_id, start_date, end_date], "ZahlungForderung") + +def get_saldo_by_mieter_and_year(mieter_id, year): + if year == 0: + year = datetime.datetime.now().year + start_date = "{}-01-01".format(year) + end_date = "{}-12-31".format(year) + sumZahlungen = getOne(""" +SELECT + ROUND(sum(betrag), 2) as sum +FROM zahlung +WHERE mieter = ? AND + datum_soll BETWEEN ? AND ? +""", [mieter_id, start_date, end_date], "SumZahlung") + sumForderungen = getOne(""" +SELECT + ROUND(sum(betrag), 2) as sum +FROM forderung +WHERE mieter = ? AND + datum BETWEEN ? AND ? +""", [mieter_id, start_date, end_date], "SumZahlung") + print("Zahlung: {}, Forderung: {}".format(sumZahlungen, sumForderungen)) + decimal.getcontext().prec = 2 + sumZ = sumZahlungen["sum"] + if not sumZ: + sumZ = 0 + sumF = sumForderungen["sum"] + if not sumF: + sumF = 0 + saldo = sumZ - sumF + return { + "forderungen": float(sumF), + "saldo": float(saldo), + "zahlungen": float(sumZ) + } \ No newline at end of file diff --git a/swagger.yaml b/swagger.yaml index 22d4a85..7ce44cd 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -235,6 +235,29 @@ paths: description: No ZahlungForderung available 500: description: Some server error + /hv/mieter/{mieter_id}/saldo/{year}: + get: + tags: [ "Mieter", "Zahlung" ] + operationId: ZahlungenForderungen.get_saldo_by_mieter_and_year + summary: Returns sum of Zahlungen for a given Mieter and a given year + parameters: + - name: mieter_id + in: path + type: integer + required: true + - name: year + in: path + type: integer + required: true + responses: + 200: + description: Successful response + schema: + $ref: '#/definitions/Saldo' + 404: + description: Neither Forderungen nor Zahlungen available + 500: + description: Some server error definitions: @@ -346,3 +369,13 @@ definitions: type: string mieter: type: number + Saldo: + description: Saldo type + type: object + properties: + forderungen: + type: number + zahlungen: + type: number + saldo: + type: number