From efd12ebd857281530dd986674ccf3f1aba8f4e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Mon, 15 Apr 2013 00:31:16 +0200 Subject: constexps functionality --- app/forms.py | 6 ++-- app/views/consts.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 97 insertions(+), 6 deletions(-) (limited to 'app') 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("/") def show(id): - return render_template("page.jinja") + return render_template("pages/const.jinja", exp = ConstExpense.get(id)) + +@mod.route("/edit/", 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/") +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) -- cgit v1.2.3