#! /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"" 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}"