aboutsummaryrefslogtreecommitdiff
path: root/budget/forms.py
diff options
context:
space:
mode:
authorArnaud Bos <arnaud.tlse@gmail.com>2011-09-11 05:25:42 +0200
committerArnaud Bos <arnaud.tlse@gmail.com>2011-09-11 05:30:28 +0200
commit88cd2f86751621d73574ac56a9d6c4bedcbdd3d5 (patch)
tree14a232f3be23e5785c3b9b37e6d05fbed8d0907f /budget/forms.py
parentf48fc22335f1011bcf376a4f266a35a888f47b2e (diff)
downloadihatemoney-mirror-88cd2f86751621d73574ac56a9d6c4bedcbdd3d5.zip
ihatemoney-mirror-88cd2f86751621d73574ac56a9d6c4bedcbdd3d5.tar.gz
ihatemoney-mirror-88cd2f86751621d73574ac56a9d6c4bedcbdd3d5.tar.bz2
Fix #24 on Authentication and New project forms usability.
- Do not display anymore the identifier field in home. - Let the user enter the id if the slug generated from project name already exists as a project id. - Moved get_billform_for from 'utils' to 'forms', to avoid issue (was 'from forms import ...' into utils, and 'from utils import ...' into forms, which causeed an error).
Diffstat (limited to 'budget/forms.py')
-rw-r--r--budget/forms.py35
1 files changed, 31 insertions, 4 deletions
diff --git a/budget/forms.py b/budget/forms.py
index 7ac48cc..3ab5f45 100644
--- a/budget/forms.py
+++ b/budget/forms.py
@@ -2,6 +2,8 @@ from flaskext.wtf import *
from wtforms.widgets import html_params
from models import Project, Person, Bill
from datetime import datetime
+from jinja2 import Markup
+from utils import slugify
def select_multi_checkbox(field, ul_class='', **kwargs):
@@ -18,16 +20,41 @@ def select_multi_checkbox(field, ul_class='', **kwargs):
return u''.join(html)
+def get_billform_for(request, project, set_default=True):
+ """Return an instance of BillForm configured for a particular project.
+
+ :set_default: if set to True, on GET methods (usually when we want to
+ display the default form, it will call set_default on it.
+
+ """
+ form = BillForm()
+ form.payed_for.choices = form.payer.choices = [(str(m.id), m.name) for m in project.active_members]
+ form.payed_for.default = [str(m.id) for m in project.active_members]
+
+ if set_default and request.method == "GET":
+ form.set_default()
+ return form
+
+
class ProjectForm(Form):
name = TextField("Project name", validators=[Required()])
id = TextField("Project identifier", validators=[Required()])
- password = PasswordField("Password", validators=[Required()])
+ password = PasswordField("Private code", validators=[Required()])
contact_email = TextField("Email", validators=[Required(), Email()])
submit = SubmitField("Create the project")
def validate_id(form, field):
- if Project.query.get(field.data):
- raise ValidationError("This project id is already used")
+ form.id.data = slugify(field.data)
+ if Project.query.get(form.id.data):
+ raise ValidationError(Markup("""The project identifier is used
+ to log in and for the URL of the project.
+ <br />
+ We tried to generate an identifier for you but
+ a projet with this identifier already exists.
+ <br />
+ Please create a new identifier you will be able
+ to remember.
+ """))
def save(self):
"""Create a new project with the information given by this form.
@@ -42,7 +69,7 @@ class ProjectForm(Form):
class AuthenticationForm(Form):
id = TextField("Project identifier", validators=[Required()])
- password = PasswordField("Password", validators=[Required()])
+ password = PasswordField("Private code", validators=[Required()])
submit = SubmitField("Get in")