54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
#! /usr/bin/env python3
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
|
|
from sqlalchemy.orm import relationship, backref
|
|
from helper import format_amount
|
|
|
|
Base = declarative_base()
|
|
|
|
|
|
class Transaction(Base):
|
|
__tablename__ = "Transaction"
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String)
|
|
date = Column(DateTime)
|
|
iban = Column(String)
|
|
amount = Column(Integer)
|
|
description = Column(String)
|
|
category_id = Column(Integer, ForeignKey("Category.id"))
|
|
|
|
def is_positive(self):
|
|
return self.amount > 0
|
|
|
|
def pretty_amount(self):
|
|
return format_amount(self.amount)
|
|
|
|
def get_date(self, format):
|
|
if format == "iso":
|
|
return self.date.strftime("%Y-%m-%d")
|
|
elif format == "de":
|
|
return self.date.strftime("%d.%m.%Y")
|
|
else:
|
|
return "UNKNOWN FORMAT"
|
|
|
|
|
|
class Category(Base):
|
|
__tablename__ = "Category"
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String)
|
|
transactions = relationship("Transaction", backref="category")
|
|
parent_id = Column(Integer, ForeignKey("Category.id"))
|
|
children = relationship("Category", backref=backref("parent", remote_side=[id]))
|
|
|
|
def __repr__(self):
|
|
return f"<Category {self.name}>"
|
|
|
|
def is_child(self):
|
|
# we are a child if we have zero children
|
|
return len(self.children) == 0
|
|
|
|
def full_name(self):
|
|
if not self.parent:
|
|
return self.name
|
|
else:
|
|
return f"{self.parent.full_name()}:{self.name}"
|