summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2013-04-15 00:31:16 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2013-04-15 00:31:16 +0200
commitefd12ebd857281530dd986674ccf3f1aba8f4e20 (patch)
treef67aaf432d094d27c4d729edb106992a8b7cc191 /app
parent58165e7f9c72f03604c54f2929b785fc39f760a5 (diff)
downloadkosten-efd12ebd857281530dd986674ccf3f1aba8f4e20.tar.gz
kosten-efd12ebd857281530dd986674ccf3f1aba8f4e20.tar.bz2
kosten-efd12ebd857281530dd986674ccf3f1aba8f4e20.zip
constexps functionality
Diffstat (limited to 'app')
-rw-r--r--app/forms.py6
-rw-r--r--app/views/consts.py97
2 files changed, 97 insertions, 6 deletions
diff --git a/app/forms.py b/app/forms.py
index a7b9fcd..1ab3c72 100644
--- a/app/forms.py
+++ b/app/forms.py
@@ -46,7 +46,7 @@ class ConstForm(Form):
end = DateField(u"Ende", req,
format="%m.%Y",
- default=today(),
+ default=today().replace(year = today().year + 1),
description=u"(einschließlich)")
months = IntegerField(u"Zahlungsrythmus", req,
@@ -56,9 +56,9 @@ class ConstForm(Form):
description=u"EUR",
places=2)
- desc = StringField(u"Beschreibung", req)
+ description = StringField(u"Beschreibung", req)
- cat = QuerySelectField(u"Kategorie",
+ category = QuerySelectField(u"Kategorie",
get_label="name")
prev = QuerySelectField(u"Vorgänger",
diff --git a/app/views/consts.py b/app/views/consts.py
index bda6067..f1e4ebd 100644
--- a/app/views/consts.py
+++ b/app/views/consts.py
@@ -1,12 +1,103 @@
from ..flask_extend import Blueprint
-from flask import render_template, request, url_for
+from flask import render_template, request, url_for, redirect
+
+import datetime
+from sqlalchemy import sql
+
+from ..model import db, Category, ConstExpense
+from ..forms import ConstForm, today
mod = Blueprint('consts', __name__)
+def const_form(cur=None, obj=None):
+ obj = cur if obj is None else obj
+ form = ConstForm(obj=obj)
+ form.category.query = Category.query.order_by(Category.name)
+
+ # init prev_list
+ CE = ConstExpense
+
+ filter = (CE.next == None)
+
+ if cur and cur.id is not None: # not empty
+ filter = sql.or_(CE.next == cur, filter)
+ filter = sql.and_(filter, CE.id != cur.id)
+
+ form.prev.query = CE.query.filter(filter).order_by(CE.description)
+
+ return form
+
+
@mod.route("/")
def all ():
- return render_template("page.jinja")
+ d = today()
+
+ expenses = ConstExpense.query.order_by(ConstExpense.start).all()
+
+ current = []
+ old = []
+ future = []
+
+ for e in expenses:
+ if e.start <= d:
+ if e.end >= d:
+ current.append(e)
+ else:
+ old.append(e)
+ else:
+ future.append(e)
+
+ return render_template("pages/constlist.jinja", current = current, old = old, future = future)
@mod.route("/<int:id>")
def show(id):
- return render_template("page.jinja")
+ return render_template("pages/const.jinja", exp = ConstExpense.get(id))
+
+@mod.route("/edit/<int:id>", methods=("GET", "POST"))
+def edit(id):
+ exp = ConstExpense.get(id)
+ form = const_form(exp)
+
+ if request.method == "POST":
+ if "deleteB" in request.form:
+ db.session.delete(exp)
+ db.session.commit()
+ return redirect(url_for(".all"))
+
+ elif form.validate(): # change
+ form.populate_obj(exp)
+ db.session.commit()
+ return redirect(url_for(".show", id = exp.id))
+
+ return render_template("pages/constedit.jinja", form=form)
+
+@mod.route("/add/from/<int:other>")
+def add_from(other):
+ exp = ConstExpense() # needed to initialize 'CE.next'
+
+ other = ConstExpense.get(other)
+
+ # get form with data from other
+ form = const_form(obj = other)
+
+ # replace some fields to be more meaningful
+ start = max(form.end.data, today())
+ form.start.data = start
+ form.end.data = start.replace(year = start.year + 1)
+ if not other.next: form.prev.data = other
+
+ return add(form)
+
+@mod.route("/add/", methods=("GET", "POST"))
+def add (form=None):
+ exp = ConstExpense()
+
+ form = const_form() if form is None else form
+
+ if form.validate_on_submit():
+ form.populate_obj(exp)
+ db.session.add(exp)
+ db.session.commit()
+ return redirect(url_for(".show", id = exp.id))
+
+ return render_template("pages/constadd.jinja", form = form)