diff options
| author | Arnaud Bos <arnaud.tlse@gmail.com> | 2011-09-18 23:38:12 +0200 |
|---|---|---|
| committer | Arnaud Bos <arnaud.tlse@gmail.com> | 2011-09-18 23:39:10 +0200 |
| commit | 681f22f3e47c3fb75fdb1d858b179e945c952596 (patch) | |
| tree | e83246b13d33f30083488b6913e96e261605f5e3 /budget/models.py | |
| parent | 89e1bbe134bc770d4a3f999a1329bd07522b07cf (diff) | |
| parent | 20ab40690d74befcd8fc75f24f301759840bf43a (diff) | |
| download | ihatemoney-mirror-681f22f3e47c3fb75fdb1d858b179e945c952596.zip ihatemoney-mirror-681f22f3e47c3fb75fdb1d858b179e945c952596.tar.gz ihatemoney-mirror-681f22f3e47c3fb75fdb1d858b179e945c952596.tar.bz2 | |
Merge branch 'master' into auth-forms-usability
Diffstat (limited to 'budget/models.py')
| -rw-r--r-- | budget/models.py | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/budget/models.py b/budget/models.py index 8feaccb..5ee7b07 100644 --- a/budget/models.py +++ b/budget/models.py @@ -1,12 +1,19 @@ from collections import defaultdict from datetime import datetime -from flaskext.sqlalchemy import SQLAlchemy +from flaskext.sqlalchemy import SQLAlchemy, BaseQuery +from flask import g + +from sqlalchemy import orm db = SQLAlchemy() # define models class Project(db.Model): + + _to_serialize = ("id", "name", "password", "contact_email", + "members", "active_members") + id = db.Column(db.String, primary_key=True) name = db.Column(db.UnicodeText) @@ -68,6 +75,23 @@ class Project(db.Model): class Person(db.Model): + + class PersonQuery(BaseQuery): + def get_by_name(self, name, project): + return Person.query.filter(Person.name == name)\ + .filter(Project.id == project.id).one() + + def get(self, id, project=None): + if not project: + project = g.project + return Person.query.filter(Person.id == id)\ + .filter(Project.id == project.id).one() + + + query_class = PersonQuery + + _to_serialize = ("id", "name", "activated") + id = db.Column(db.Integer, primary_key=True) project_id = db.Column(db.Integer, db.ForeignKey("project.id")) bills = db.relationship("Bill", backref="payer") @@ -96,6 +120,29 @@ billowers = db.Table('billowers', ) class Bill(db.Model): + + class BillQuery(BaseQuery): + + def get(self, project, id): + try: + return self.join(Person, Project)\ + .filter(Bill.payer_id == Person.id)\ + .filter(Person.project_id == Project.id)\ + .filter(Project.id == project.id)\ + .filter(Bill.id == id).one() + except orm.exc.NoResultFound: + return None + + def delete(self, project, id): + bill = self.get(project, id) + if bill: + db.session.delete(bill) + return bill + + query_class = BillQuery + + _to_serialize = ("id", "payer_id", "owers", "amount", "date", "what") + id = db.Column(db.Integer, primary_key=True) payer_id = db.Column(db.Integer, db.ForeignKey("person.id")) @@ -115,7 +162,6 @@ class Bill(db.Model): return "<Bill of %s from %s for %s>" % (self.amount, self.payer, ", ".join([o.name for o in self.owers])) - class Archive(db.Model): id = db.Column(db.Integer, primary_key=True) project_id = db.Column(db.Integer, db.ForeignKey("project.id")) @@ -131,3 +177,4 @@ class Archive(db.Model): def __repr__(self): return "<Archive>" + |
