schmeckels/models.py
2020-04-25 11:07:51 +02:00

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}"