74 lines
2 KiB
Python
74 lines
2 KiB
Python
#! /usr/bin/env python3
|
|
from bottle import route, run, template, redirect, request, post
|
|
from models import Category, Transaction
|
|
from helper import get_session
|
|
import click
|
|
|
|
session = None
|
|
|
|
|
|
@route("/")
|
|
def index():
|
|
return template("index")
|
|
|
|
|
|
@route("/categories")
|
|
def categories():
|
|
categories = session.query(Category).all()
|
|
categories = [c for c in categories if c.is_child()]
|
|
return template("categories", categories=categories)
|
|
|
|
|
|
@route("/category/<name>")
|
|
def category(name):
|
|
c = session.query(Category).filter(Category.name == name).first()
|
|
if c:
|
|
transactions = session.query(Transaction).filter(Transaction.category_id == c.id).all()
|
|
else:
|
|
transactions = []
|
|
|
|
return template("category", category=c, transactions=transactions)
|
|
|
|
|
|
@route("/category/<name>/delete")
|
|
def delete_category(name):
|
|
c = session.query(Category).filter(Category.name == name).first()
|
|
if c:
|
|
session.delete(c)
|
|
session.commit()
|
|
|
|
return redirect("/categories")
|
|
|
|
|
|
@route("/transactions")
|
|
def transactions():
|
|
if request.GET.get("unsorted", None):
|
|
print("Unsorted")
|
|
transactions = session.query(Transaction).filter(Transaction.category_id == None).all()
|
|
else:
|
|
print("all")
|
|
transactions = session.query(Transaction).all()
|
|
categories = session.query(Category).all()
|
|
childs = [c for c in categories if c.is_child()]
|
|
return template("transactions", transactions=transactions, categories=childs)
|
|
|
|
|
|
@post("/bulksort")
|
|
def buksort():
|
|
cid = request.forms.get("category")
|
|
transaction_ids = request.forms.getall("transaction")
|
|
for id in transaction_ids:
|
|
t = session.query(Transaction).get(id)
|
|
t.category__id = cid
|
|
session.add(t)
|
|
print(f"Sorted {len(transaction_ids)} transactions into category {cid}")
|
|
session.commit()
|
|
return redirect("/transactions")
|
|
|
|
|
|
@click.command(name="serve")
|
|
@click.option("--profile", "-p")
|
|
def command(profile):
|
|
global session
|
|
session = get_session(profile)
|
|
run(host="0.0.0.0", port=8080, reloader=True)
|