49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
from functools import singledispatch
|
|
|
|
from pfbudget.common.types import Bank, Transaction, TransactionError
|
|
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 (t.date, t.description, t.bank, t.value, t.category)
|
|
|
|
|
|
@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:
|
|
return Bank(db.name, db.bic, db.requisition_id, db.invert, key=key)
|
|
|
|
|
|
@convert.register
|
|
def _(bank: Bank, key: str = "") -> DbBank:
|
|
return DbBank(bank.name, bank.bic, "", "", bank.requisition_id, bank.invert)
|
|
|
|
|
|
@convert.register
|
|
def _(json: dict, bank: str, invert: bool) -> Transaction:
|
|
i = -1 if invert else 1
|
|
try:
|
|
return Transaction(
|
|
json["bookingDate"],
|
|
json["remittanceInformationUnstructured"],
|
|
bank,
|
|
i * parse_decimal(json["transactionAmount"]["amount"]),
|
|
)
|
|
except TransactionError:
|
|
print(f"{json} is in the wrong format")
|