]> asedeno.scripts.mit.edu Git - bluechips.git/blobdiff - bluechips/controllers/spend.py
fixed split display so that it works with zero-value expenditures
[bluechips.git] / bluechips / controllers / spend.py
index e3ea675db2309d95399cba2582599654b6028a4f..c99d325ba10984b2fd1da0a508cf9479668ca8b3 100644 (file)
@@ -11,6 +11,7 @@ from bluechips.lib.base import *
 from pylons import request, app_globals as g
 from pylons.decorators.rest import dispatch_on
 from pylons.decorators import validate
+from pylons.controllers.util import abort
 
 from formencode import validators, Schema
 from formencode.foreach import ForEach
@@ -64,6 +65,21 @@ class SpendController(BaseController):
         else:
             c.title = 'Edit an Expenditure'
             c.expenditure = meta.Session.query(model.Expenditure).get(id)
+            if c.expenditure is None:
+                abort(404)
+            c.values = {}
+            for ii, user_row in enumerate(c.users):
+                user_id, user = user_row
+                try:
+                    share = [s.share for s in c.expenditure.splits
+                             if s.user == user][0]
+                    percent = (Decimal(100) * Decimal(int(share)) /
+                               Decimal(int(c.expenditure.amount))).\
+                            quantize(Decimal("0.001"))
+                except IndexError:
+                    percent = 0
+                c.values['shares-%d.amount' % ii] = percent
+
         return render('/spend/index.mako')
 
     @validate(schema=ExpenditureSchema(), form='edit', variable_decode=True)
@@ -76,6 +92,8 @@ class SpendController(BaseController):
             op = 'created'
         else:
             e = meta.Session.query(model.Expenditure).get(id)
+            if e is None:
+                abort(404)
             op = 'updated'
         
         # Set the fields that were submitted