summaryrefslogtreecommitdiff
path: root/app/forms.py
blob: a4358a955d88e926a068a0bf7312dfab04be14bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# -*- encoding: utf-8 -*-
import flask
from flask.ext.wtf import Form as _Form
from wtforms.fields import DateField, IntegerField, StringField, HiddenField, PasswordField
from wtforms import validators as v
from wtforms import fields

from wtforms.ext.sqlalchemy.fields import QuerySelectField

import datetime

from . import app
from . import login

today = datetime.date.today

@app.template_test('hidden')
def is_hidden_field(f):
    return isinstance(f, HiddenField)

class DecimalField(fields.DecimalField):
    def process_formdata(self, valuelist):
        if valuelist:
            value = valuelist[0].replace(',','.')
            super(DecimalField, self).process_formdata([value])

req = [v.input_required()]

class Form(_Form):
    def __init__ (self, *args, **kwargs):
        self._msg = kwargs.pop('flash', u"Fehler im Formular!")
        _Form.__init__(self, *args, **kwargs)

    def flash(self):
        flask.flash(self._msg, u'error')

    def flash_validate (self):
        if not self.validate():
            self.flash()
            return False

        return True

    def validate_on_submit (self):
        return self.is_submitted() and self.flash_validate()

class ExpenseForm(Form):
    date = DateField(u'Datum', req,
            format="%d.%m.%Y",
            default=lambda: today())

    expense = DecimalField(u'Betrag', req,
            description=u'EUR',
            places=2)

    description = StringField(u'Beschreibung', req)

    category = QuerySelectField(u'Kategorie',
            get_label='name')

class ConstForm(Form):
    start = DateField(u'Beginn', req,
            format='%m.%Y',
            default=lambda: today())

    end = DateField(u'Ende', req,
            format='%m.%Y',
            default=lambda: today().replace(year = today().year + 1),
            description=u'(einschließlich)')

    months = IntegerField(u'Zahlungsrythmus', req,
            description='Monate')

    expense = DecimalField(u'Betrag', req,
            description=u'EUR',
            places=2)

    description = StringField(u'Beschreibung', req)

    category = QuerySelectField(u'Kategorie',
            get_label='name')

    prev = QuerySelectField(u'Vorgänger',
            get_label='description',
            allow_blank=True)

class LoginForm(Form):
    username = StringField(u'Username', req)
    pwd = PasswordField(u'Passwort', req)

    def __init__(self, *args, **kwargs):
        Form.__init__(self,*args, **kwargs)
        self.user = None

    def validate(self):
        rv = Form.validate(self)
        if not rv:
            return False

        user = login.User.get_by(name = self.username.data)
        if user is None or not user.check_password(self.pwd.data):
            return False

        self.user = user
        return True