# -*- 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