diff options
Diffstat (limited to 'budget/models.py')
| -rw-r--r-- | budget/models.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/budget/models.py b/budget/models.py new file mode 100644 index 0000000..27e30b3 --- /dev/null +++ b/budget/models.py @@ -0,0 +1,54 @@ +from datetime import datetime +from flaskext.sqlalchemy import SQLAlchemy + +db = SQLAlchemy() + +# define models +class Project(db.Model): + id = db.Column(db.String, primary_key=True) + + name = db.Column(db.UnicodeText) + password = db.Column(db.String) + contact_email = db.Column(db.String) + members = db.relationship("Person", backref="project") + + def __repr__(self): + return "<Project %s>" % self.name + + +class Person(db.Model): + id = db.Column(db.Integer, primary_key=True) + project_id = db.Column(db.Integer, db.ForeignKey("project.id")) + bills = db.relationship("Bill", backref="payer") + + name = db.Column(db.UnicodeText) + status = db.Column(db.Boolean) + + def __repr__(self): + return "<Person %s for project %s>" % (self.name, self.project.name) + +# We need to manually define a join table for m2m relations +billowers = db.Table('billowers', + db.Column('bill_id', db.Integer, db.ForeignKey('bill.id')), + db.Column('person_id', db.Integer, db.ForeignKey('person.id')), +) + +class Bill(db.Model): + id = db.Column(db.Integer, primary_key=True) + + payer_id = db.Column(db.Integer, db.ForeignKey("person.id")) + owers = db.relationship(Person, secondary=billowers) + + amount = db.Column(db.Float) + date = db.Column(db.Date, default=datetime.now) + what = db.Column(db.UnicodeText) + + def pay_each(self): + """Compute what each person has to pay""" + return round(self.amount / len(self.owers), 2) + + def __repr__(self): + return "<Bill of %s from %s for %s>" % (self.amount, + self.payer, ", ".join([o.name for o in self.owers])) + + |
