forked from gaugendre/ofx-processor
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
from collections import defaultdict
|
|
|
|
|
|
class Line:
|
|
data = None
|
|
|
|
def __init__(self, data=None):
|
|
self.data = data
|
|
|
|
def get_date(self):
|
|
pass
|
|
|
|
def get_amount(self):
|
|
pass
|
|
|
|
def get_memo(self):
|
|
pass
|
|
|
|
def get_payee(self):
|
|
pass
|
|
|
|
def to_ynab_transaction(self, transaction_ids):
|
|
date = self.get_date()
|
|
payee = self.get_payee()
|
|
memo = self.get_memo()
|
|
amount = self.get_amount()
|
|
import_id = f"YNAB:{amount}:{date}"
|
|
transaction_ids[import_id] += 1
|
|
occurrence = transaction_ids[import_id]
|
|
import_id = f"{import_id}:{occurrence}"
|
|
ynab_transaction = {
|
|
"date": date,
|
|
"amount": amount,
|
|
"payee_name": payee,
|
|
"memo": memo,
|
|
"import_id": import_id,
|
|
}
|
|
return ynab_transaction
|
|
|
|
|
|
class Processor:
|
|
transaction_ids = defaultdict(int)
|
|
line_class = Line
|
|
|
|
def __init__(self, iterable):
|
|
self.iterable = iterable
|
|
|
|
def get_transactions(self):
|
|
return list(map(self._get_transaction, self.iterable))
|
|
|
|
def _get_transaction(self, data):
|
|
line = self.line_class(data)
|
|
return line.to_ynab_transaction(self.transaction_ids)
|