Add offset option to bank

A bank had an offset on the date of the transactions...
It also passes the interal Bank type to the converter, to access it's
additional options before converting.
This commit is contained in:
Luís Murta 2022-11-22 21:58:26 +00:00
parent a0d3af715e
commit c41bfb4bdf
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
4 changed files with 39 additions and 12 deletions

View File

@ -118,6 +118,7 @@ class Bank:
bic: str
requisition_id: str
invert: bool
offset: int
key: PrimaryKey = PrimaryKey.ID

View File

@ -50,7 +50,8 @@ CREATE TABLE IF NOT EXISTS banks (
nordigen_id TEXT,
nordigen_name TEXT,
requisition_id TEXT,
invert INTEGER
invert INTEGER,
offset INTEGER
)
"""
@ -62,7 +63,8 @@ class DbBank:
nordigen_id: str
nordigen_name: str
requisition_id: str
invert: bool
invert: bool = False
offset: int = 0
def tuple(self):
return (
@ -72,6 +74,7 @@ class DbBank:
self.nordigen_name,
self.requisition_id,
int(self.invert),
self.offset,
)

View File

@ -72,8 +72,7 @@ class NordigenInput(Input):
continue
converted = [
convert(t, bank.name, bank.invert)
for t in downloaded["transactions"]["booked"]
convert(t, bank) for t in downloaded["transactions"]["booked"]
]
transactions.extend(

View File

@ -1,3 +1,4 @@
from datetime import timedelta
from functools import singledispatch
from pfbudget.common.types import Bank, Transaction, TransactionError
@ -13,7 +14,15 @@ def convert(t):
@convert.register
def _(t: Transaction) -> DbTransaction:
return DbTransaction(t.date, t.description, t.bank, t.value, t.category, t.original, t.additional_comment)
return DbTransaction(
t.date,
t.description,
t.bank,
t.value,
t.category,
t.original,
t.additional_comment,
)
@convert.register
@ -26,23 +35,38 @@ def _(db: DbTransaction) -> Transaction:
@convert.register
def _(db: DbBank, key: str = "") -> Bank:
return Bank(db.name, db.bic, db.requisition_id, db.invert, key=key)
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, key: str = "") -> DbBank:
return DbBank(bank.name, bank.bic, "", "", bank.requisition_id, bank.invert)
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: str, invert: bool) -> Transaction:
i = -1 if invert else 1
def _(json: dict, bank: Bank) -> Transaction:
i = -1 if bank.invert else 1
try:
return Transaction(
transaction = Transaction(
json["bookingDate"],
json["remittanceInformationUnstructured"],
bank,
bank.name,
i * parse_decimal(json["transactionAmount"]["amount"]),
)
transaction.date += timedelta(days=bank.offset)
return transaction
except TransactionError:
print(f"{json} is in the wrong format")