haldis/app/forms.py

68 lines
2.4 KiB
Python
Raw Normal View History

2015-03-31 20:15:22 +02:00
from datetime import datetime, timedelta
2015-03-31 20:15:22 +02:00
from flask import session
2017-01-06 12:05:31 +01:00
from flask_login import current_user
from flask_wtf import FlaskForm as Form
from wtforms import (DateTimeField, SelectField, StringField, SubmitField,
validators)
2017-01-06 12:05:31 +01:00
from models import Location, User
from utils import euro_string
2015-03-31 20:15:22 +02:00
class OrderForm(Form):
courrier_id = SelectField('Courrier', coerce=int)
location_id = SelectField('Location',
coerce=int,
validators=[validators.required()])
starttime = DateTimeField('Starttime',
default=datetime.now,
format='%d-%m-%Y %H:%M')
2015-03-31 20:15:22 +02:00
stoptime = DateTimeField('Stoptime', format='%d-%m-%Y %H:%M')
submit_button = SubmitField('Submit')
def populate(self):
if current_user.is_admin():
self.courrier_id.choices = [(0, None)] + \
[(u.id, u.username) for u in User.query.order_by('username')]
else:
self.courrier_id.choices = [(0, None),
(current_user.id,
current_user.username)]
2015-03-31 20:15:22 +02:00
self.location_id.choices = [(l.id, l.name)
for l in Location.query.order_by('name')]
if self.stoptime.data is None:
self.stoptime.data = datetime.now() + timedelta(hours=1)
class OrderItemForm(Form):
product_id = SelectField('Item', coerce=int)
2015-06-24 22:10:26 +02:00
extra = StringField('Extra')
2015-03-31 20:15:22 +02:00
submit_button = SubmitField('Submit')
def populate(self, location):
self.product_id.choices = [(i.id,
(i.name + ": " + euro_string(i.price)))
for i in location.products]
2015-03-31 20:15:22 +02:00
class AnonOrderItemForm(OrderItemForm):
name = StringField('Name', validators=[validators.required()])
def populate(self, location):
OrderItemForm.populate(self, location)
if self.name.data is None:
self.name.data = session.get('anon_name', None)
def validate(self):
rv = OrderForm.validate(self)
if not rv:
return False
# check if we have a user with this name
user = User.query.filter_by(username=self.name.data).first()
if user is not None:
self.name.errors.append('Name already in use')
return False
return True