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 +++++++++++++++++++++++++++++++++++++++-- templates/pages/const.jinja | 39 +++++++++++++++++ templates/pages/const.mako | 38 ---------------- templates/pages/constadd.jinja | 12 +++++ templates/pages/constadd.mako | 16 ------- templates/pages/constedit.jinja | 13 ++++++ templates/pages/constedit.mako | 10 ----- templates/pages/constlist.jinja | 23 ++++++++++ templates/pages/constlist.mako | 32 -------------- 10 files changed, 184 insertions(+), 102 deletions(-) create mode 100644 templates/pages/const.jinja delete mode 100644 templates/pages/const.mako create mode 100644 templates/pages/constadd.jinja delete mode 100644 templates/pages/constadd.mako create mode 100644 templates/pages/constedit.jinja delete mode 100644 templates/pages/constedit.mako create mode 100644 templates/pages/constlist.jinja delete mode 100644 templates/pages/constlist.mako 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) diff --git a/templates/pages/const.jinja b/templates/pages/const.jinja new file mode 100644 index 0000000..13e8008 --- /dev/null +++ b/templates/pages/const.jinja @@ -0,0 +1,39 @@ +{% extends "page.jinja" %} + +{% set fmt="%m.%Y" %} + +{% block heading %} + Konstante Kosten +{% endblock %} + +{% block content %} +
    +
  • Beschreibung: {{exp.description}}
  • +
  • Kategorie: {{exp.category.name}}
  • +
  • Betrag: {{exp.expense | eur}}
  • +
  • Betrag pro Monat: {{exp.monthly | eur}}
  • +
  • Start: {{exp.start | date(format=fmt)}}
  • +
  • Ende: {{exp.end | date(format=fmt)}}
  • +
  • Zahlungsrhythmus: + {% if exp.months == 1 %} + monatlich + {% elif exp.months == 6 %} + halbjährlich + {% elif exp.months == 12 %} + jährlich + {% else %} + alle {{exp.months}} Monate + {% endif %} +
+

+ Bearbeiten  + Erstelle neuen auf dem jetzigen basierenden Eintrag +

+ {% if exp.prev %} {{ left_arrow(url_for(".show", id = exp.prev.id), target(exp.prev)) }} {% endif %} + {% if exp.next %} {{ right_arrow(url_for(".show", id = exp.next.id), target(exp.next)) }} {% endif %} +{% endblock %} + +{% macro target(p) -%} + {{ p.description }} ({{ p.start | date(fmt) ~ "-" ~ p.end | date(fmt) }})
+ {{ p.expense | eur }} +{%- endmacro %} diff --git a/templates/pages/const.mako b/templates/pages/const.mako deleted file mode 100644 index 95098ea..0000000 --- a/templates/pages/const.mako +++ /dev/null @@ -1,38 +0,0 @@ -<%inherit file="/page.mako" /> - -
    -
  • Beschreibung: ${exp.description}
  • -
  • Kategorie: ${exp.category.name}
  • -
  • Betrag: ${exp.expense | eur}
  • -
  • Betrag pro Monat: ${exp.monthly | eur}
  • -
  • Start: ${dformat(exp.start)}
  • -
  • Ende: ${dformat(exp.end)}
  • -
  • Zahlungsrhythmus: - % if exp.months == 1: - monatlich - % elif exp.months == 6: - halbjährlich - % elif exp.months == 12: - jährlich - % else: - alle ${exp.months} Monate - % endif -
-

Bearbeiten Erstelle neuen auf dem jetzigen basierenden Eintrag

- -<% - def create(p): - return ("const/%s" % p.id, "%s (%s-%s)
%s" % (p.description, dformat(p.start), dformat(p.end), eur(p.expense))) - - p = exp.prev - if p: - context.write(self.left_arrow(*create(p))) - - p = exp.next - if p: - context.write(self.right_arrow(*create(p))) -%> - -<%block name="heading"> - Konstante Kosten - diff --git a/templates/pages/constadd.jinja b/templates/pages/constadd.jinja new file mode 100644 index 0000000..8f878b4 --- /dev/null +++ b/templates/pages/constadd.jinja @@ -0,0 +1,12 @@ +{% extends "page.jinja" %} + +{% block heading %} + Füge neue konstante Ausgabe hinzu +{% endblock %} + +{% block content %} +
+ {{ render_form(form) }} + +
+{% endblock %} diff --git a/templates/pages/constadd.mako b/templates/pages/constadd.mako deleted file mode 100644 index 2c16544..0000000 --- a/templates/pages/constadd.mako +++ /dev/null @@ -1,16 +0,0 @@ -<%inherit file="/page.mako" /> - -% if not form.valid: - FEHLER! -% endif - -
- ${form.render()} - <%block name="form_buttons"> - - -
- -<%block name="heading"> - Füge neue konstante Ausgabe hinzu - diff --git a/templates/pages/constedit.jinja b/templates/pages/constedit.jinja new file mode 100644 index 0000000..c440ecb --- /dev/null +++ b/templates/pages/constedit.jinja @@ -0,0 +1,13 @@ +{% extends "page.jinja" %} + +{% block heading %} + Konstante Ausgabe bearbeiten +{% endblock %} + +{% block content %} +
+ {{ render_form(form) }} + + +
+{% endblock %} diff --git a/templates/pages/constedit.mako b/templates/pages/constedit.mako deleted file mode 100644 index 7507bf9..0000000 --- a/templates/pages/constedit.mako +++ /dev/null @@ -1,10 +0,0 @@ -<%inherit file="constadd.mako" /> - -<%block name="heading"> - Konstante Ausgabe bearbeiten - - -<%block name="form_buttons"> - - - diff --git a/templates/pages/constlist.jinja b/templates/pages/constlist.jinja new file mode 100644 index 0000000..ffe121f --- /dev/null +++ b/templates/pages/constlist.jinja @@ -0,0 +1,23 @@ +{% extends "page.jinja" %} + +{% block heading %} + Konstante Kosten +{% endblock %} + +{% block content %} +

Neuen Eintrag hinzufügen

+ + {{ list(current, "Aktuell") }} + + {% if future %} {{ list(future, "Zukünftige") }} {% endif %} + {% if old %} {{ list(old, "Veraltet") }} {% endif %} +{% endblock %} + +{% macro list(list, h) %} +

{{ h }}

+ +{% endmacro %} diff --git a/templates/pages/constlist.mako b/templates/pages/constlist.mako deleted file mode 100644 index f870b80..0000000 --- a/templates/pages/constlist.mako +++ /dev/null @@ -1,32 +0,0 @@ -<%inherit file="/page.mako" /> - -

Neuen Eintrag hinzufügen

- -

Aktuell

- - -% if future: -

Zukünftige

- -% endif - -% if old: -

Veraltet

- -% endif - -<%block name="heading"> - Konstante Kosten - -- cgit v1.2.3