from bluechips.lib.totals import *
import sqlalchemy
+from sqlalchemy import orm
log = logging.getLogger(__name__)
def index(self):
c.title = 'History'
- c.expenditures = meta.Session.query(model.Expenditure).all()
+ c.expenditures = meta.Session.query(model.Expenditure).\
+ options(orm.eagerload('splits')).all()
c.transfers = meta.Session.query(model.Transfer).all()
-
+
return render('/history/index.mako')
from bluechips.lib.totals import *
import sqlalchemy
+from sqlalchemy import orm
from datetime import date, timedelta
sqlalchemy.and_(
model.Split.user == request.environ['user'],
model.Split.share != 0)))).\
+ options(orm.eagerload('splits')).\
limit(10).all()
c.transfers = meta.Session.query(model.Transfer).\
filter(sqlalchemy.or_(
def involves(self, user):
"Returns True if ``user`` is involved in this expenditure."
- return (meta.Session.query(Split.id).\
- filter(Split.expenditure == self).\
- filter(Split.user == user).\
- filter(Split.share != 0).first() is not None)
+ return any((split.user == user) and (split.share != 0)
+ for split in self.splits)
def share(self, user):
"Return the share corresponding to ``user``."
- share = meta.Session.query(Split.share).\
- filter(Split.expenditure == self).\
- filter(Split.user == user).scalar()
- if share is None:
- return Currency(0)
- else:
- return share
+ shares = dict((split.user, split.share)
+ for split in self.splits)
+ return shares.get(user, Currency(0))
__all__ = ['Expenditure']