Can now download from all banks registered on the banks/nordigen table and write to the PostgresSQL DB (or any DB, since we're now agnostic). Commented out most of the managers functions until the integration with the new DB client is complete. Set Optional relationships. Remove the DB types as dataclasses, it only increased the verbosity of the types w/o much going for it. Change the name Original to Transaction, since the type is the placeholder for the rest of the transaction information.
74 lines
1.9 KiB
Python
74 lines
1.9 KiB
Python
from datetime import date, timedelta
|
|
from functools import singledispatch
|
|
|
|
from pfbudget.common.types import TransactionError
|
|
from pfbudget.db.model import Bank, Transaction
|
|
from pfbudget.db.schema import DbBank, DbTransaction
|
|
from .utils import parse_decimal
|
|
|
|
|
|
@singledispatch
|
|
def convert(t):
|
|
print("No converter as been found")
|
|
pass
|
|
|
|
|
|
# @convert.register
|
|
# def _(t: Transaction) -> DbTransaction:
|
|
# return DbTransaction(
|
|
# t.date,
|
|
# t.description,
|
|
# t.bank,
|
|
# t.value,
|
|
# t.category,
|
|
# t.original,
|
|
# t.additional_comment,
|
|
# )
|
|
|
|
|
|
# @convert.register
|
|
# def _(db: DbTransaction) -> Transaction:
|
|
# try:
|
|
# return Transaction(db)
|
|
# except TransactionError:
|
|
# print(f"{db} is in the wrong format")
|
|
|
|
|
|
# @convert.register
|
|
# def _(db: DbBank, key: str = "") -> Bank:
|
|
# bank = Bank(db.name, db.bic, db.requisition_id, db.invert, db.offset, key=key)
|
|
# if not bank.invert:
|
|
# bank.invert = False
|
|
# if not bank.offset:
|
|
# bank.offset = 0
|
|
# return bank
|
|
|
|
|
|
# @convert.register
|
|
# def _(bank: Bank) -> DbBank:
|
|
# bank = DbBank(
|
|
# bank.name, bank.bic, "", "", bank.requisition_id, bank.invert, bank.offset
|
|
# )
|
|
# if not bank.invert:
|
|
# bank.invert = False
|
|
# if not bank.offset:
|
|
# bank.offset = 0
|
|
# return bank
|
|
|
|
|
|
@convert.register
|
|
def _(json: dict, bank: Bank) -> Transaction:
|
|
i = -1 if bank.nordigen.invert else 1
|
|
try:
|
|
transaction = Transaction(
|
|
date=date.fromisoformat(json["bookingDate"]),
|
|
description=json["remittanceInformationUnstructured"],
|
|
bank=bank.name,
|
|
amount=i * parse_decimal(json["transactionAmount"]["amount"]),
|
|
)
|
|
# transaction.date += timedelta(days=bank.offset)
|
|
return transaction
|
|
|
|
except TransactionError:
|
|
print(f"{json} is in the wrong format")
|