diff --git a/budget/forms.py b/budget/forms.py index d363ad5..367be94 100644 --- a/budget/forms.py +++ b/budget/forms.py @@ -1,5 +1,5 @@ from flaskext.wtf import * -from models import Project +from models import Project, Person # define forms class CreationForm(Form): @@ -33,3 +33,16 @@ class BillForm(Form): validators=[Required()]) submit = SubmitField("Add the bill") + +class MemberForm(Form): + def __init__(self, project, *args, **kwargs): + super(MemberForm, self).__init__(*args, **kwargs) + self.project = project + + name = TextField("Name", validators=[Required()]) + submit = SubmitField("Add a member") + + def validate_name(form, field): + if Person.query.filter( + Person.name == field.data and Person.project == self.project).all(): + raise ValidationError("This project already have this member") diff --git a/budget/models.py b/budget/models.py index 27e30b3..c0d6db2 100644 --- a/budget/models.py +++ b/budget/models.py @@ -22,7 +22,7 @@ class Person(db.Model): bills = db.relationship("Bill", backref="payer") name = db.Column(db.UnicodeText) - status = db.Column(db.Boolean) + # activated = db.Column(db.Boolean, default=True) def __repr__(self): return "" % (self.name, self.project.name) diff --git a/budget/templates/layout.html b/budget/templates/layout.html index 19c0e59..79240b3 100644 --- a/budget/templates/layout.html +++ b/budget/templates/layout.html @@ -16,16 +16,11 @@
-
- - {% for message in get_flashed_messages() %} -
{{ message }}
- {% endfor %} - - {% block content %} - {% endblock %} - -
+ {% for message in get_flashed_messages() %} +
{{ message }}
+ {% endfor %} + {% block content %} + {% endblock %} diff --git a/budget/templates/list_bills.html b/budget/templates/list_bills.html index d0f0c41..145f4f4 100644 --- a/budget/templates/list_bills.html +++ b/budget/templates/list_bills.html @@ -1,26 +1,37 @@ {% extends "layout.html" %} {% block content %} -{% if bills.count() > 0 %} - - - -{% for bill in bills %} - - - - - - - - -{% endfor %} - -
When ?Who paid?for what ?OwersHow much ?Actions
{{ bill.date }}{{ bill.payer }}{{ bill.what }}{% for ower in bill.owers %}{{ ower.name }} {% endfor %}{{ bill.amount }} ({{ bill.pay_each() }} each)delete
+
+ + {% set form=member_form %} + {% include "member_form.html" %} +
+
+ {% if bills.count() > 0 %} + + + + {% for bill in bills %} + + + + + + + + + {% endfor %} + +
When ?Who paid?for what ?OwersHow much ?Actions
{{ bill.date }}{{ bill.payer }}{{ bill.what }}{% for ower in bill.owers %}{{ ower.name }} {% endfor %}{{ bill.amount }} ({{ bill.pay_each() }} each)delete
-Compute bills -

Periodically (probably at the end of each month, you can compute the balance of each people, in order to reset all the debts. You can also let this "as-is" and try to find a good balance, that's up to you

+ Compute bills +

Periodically (probably at the end of each month, you can compute the balance of each people, in order to reset all the debts. You can also let this "as-is" and try to find a good balance, that's up to you

-{% else %} -

Nothing to list yet. You probably want to add a bill ?

-{% endif %} + {% else %} +

Nothing to list yet. You probably want to add a bill ?

+ {% endif %} +
{% endblock %} diff --git a/budget/web.py b/budget/web.py index d49280c..ddf0b1e 100644 --- a/budget/web.py +++ b/budget/web.py @@ -2,7 +2,7 @@ from flask import Flask, session, request, redirect, url_for, render_template # local modules from models import db, Project, Person, Bill -from forms import CreationForm, AuthenticationForm, BillForm +from forms import CreationForm, AuthenticationForm, BillForm, MemberForm from utils import get_billform_for, requires_auth # create the application, initialize stuff @@ -26,7 +26,6 @@ def authenticate(project_id, redirect_url=None): else: session[project_id] = form.password.data session.update() - from ipdb import set_trace; set_trace() return redirect(redirect_url) return render_template("authenticate.html", form=form, project=project) @@ -38,7 +37,6 @@ def home(): @app.route("/create", methods=["GET", "POST"]) def create_project(): - from ipdb import set_trace; set_trace() form = CreationForm() if request.method == "GET" and 'project_id' in request.values: form.name.data = request.values['project_id'] @@ -71,7 +69,19 @@ def list_bills(project): # FIXME filter to only get the bills for this particular project bills = Bill.query.order_by(Bill.id.asc()) return render_template("list_bills.html", - bills=bills, project=project) + bills=bills, project=project, member_form=MemberForm(project)) + +@app.route("//members/add", methods=["GET", "POST"]) +@requires_auth +def add_member(project): + # FIXME manage form errors on the list_bills page + form = MemberForm(project) + if request.method == "POST": + if form.validate(): + db.session.add(Person(name=form.name.data, project=project)) + db.session.commit() + return redirect(url_for("list_bills", project_id=project.id)) + return render_template("add_member.html", form=form, project=project) @app.route("//add", methods=["GET", "POST"]) @requires_auth