#! /usr/bin/env python3 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Table from sqlalchemy.orm import relationship, backref from helper import format_amount from hashlib import md5 Base = declarative_base() association_table = Table( "association", Base.metadata, Column("transaction_id", Integer, ForeignKey("Transaction.id")), Column("tag_id", Integer, ForeignKey("Tag.id")), ) 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) tags = relationship("Tag", secondary=association_table, back_populates="transactions") 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 Tag(Base): __tablename__ = "Tag" id = Column(Integer, primary_key=True) name = Column(String, unique=True) description = Column(String) transactions = relationship("Transaction", secondary=association_table, back_populates="tags") def __repr__(self): return f"" def color(self): hash = md5(self.name.encode()).hexdigest()[-6:] return f"#{hash}"