budget/pfbudget/transactions.py
Luís Murta a1f5699b12
Add original and additional comment columns do DB
To have cleared information on manually added transactions to the
database, this patch adds the original column so those added after
the parsing can be marked as such.
Also adds a column to add comments to transaction, when they are not
explicit from the transaction message.
2021-12-01 18:31:25 +00:00

104 lines
2.7 KiB
Python

from datetime import date
from decimal import Decimal, InvalidOperation
COMMENT_TOKEN = "#"
class TransactionError(Exception):
pass
class Transaction:
def __init__(self, *args, file=None):
self.date = None
self.description = ""
self.bank = ""
self.value = 0
self.category = None
self.original = ""
self.additional_comment = ""
arg = args[0] if len(args) == 1 else list(args)
try:
if type(arg[0]) is date:
self.date = arg[0]
else:
self.date = date.fromisoformat(arg[0])
self.description = " ".join(arg[1].split())
self.bank = arg[2]
if type(arg[3]) is float:
self.value = arg[3]
else:
self.value = Decimal(args[3])
self.category = arg[4]
self.original = arg[5]
self.additional_comment = arg[6]
except IndexError:
pass
except InvalidOperation:
print(f"{args}")
raise TransactionError
self.year = self.date.year
self.month = self.date.month
self.day = self.date.day
self.modified = False
def to_list(self):
return [self.date, self.description, self.bank, self.value, self.category]
def update_category(self):
return (self.category, self.date, self.description, self.bank, self.value)
@property
def category(self):
return self._category
@category.setter
def category(self, v):
self.modified = True
self._category = v
def __eq__(self, other):
return (
self.date == other.date
and self.description == other.description
and self.bank == other.bank
and self.value == other.value
)
def __ne__(self, other):
return (
self.date != other.date
or self.description != other.description
or self.bank != other.bank
or self.value != other.value
)
def __lt__(self, other):
return self.date < other.date
def __le__(self, other):
return self.date <= other.date
def __gt__(self, other):
return self.date > other.date
def __ge__(self, other):
return self.date >= other.date
def __repr__(self):
return "{} {} ({}) {}€ at {}".format(
self.date.strftime("%d/%m/%y"),
self.description,
self.category,
self.value,
self.bank,
)
def __str__(self):
return "{} {} {}€ at {}".format(
self.date.strftime("%d/%m/%y"), self.category, self.value, self.bank
)