]> asedeno.scripts.mit.edu Git - bluechips.git/blobdiff - bluechips/controllers/spend.py
Add a form to change an expenditure's split
[bluechips.git] / bluechips / controllers / spend.py
index a3f502d9dbd9325465153b0bdb1932f3ec364cbb..fd884536b1d02811ce0977c40bbbe8c9c9956831 100644 (file)
@@ -8,6 +8,9 @@ from bluechips.lib.base import *
 from bluechips.widgets import spend
 
 from pylons import request
+from pylons.decorators.rest import dispatch_on
+
+from decimal import Decimal, InvalidOperation
 
 log = logging.getLogger(__name__)
 
@@ -67,3 +70,41 @@ class SpendController(BaseController):
                                                      id=e.id))))
         
         return h.redirect_to('/')
+    
+    @dispatch_on(POST='_post_split',
+                 GET='_get_split')
+    def split(self, id):
+        abort(500)
+    
+    def _get_split(self, id):
+        c.title = 'Change Expenditure Split'
+        
+        c.expenditure = meta.Session.query(model.Expenditure).get(id)
+        c.users = meta.Session.query(model.User)
+        
+        return render('/spend/split.mako')
+    
+    def _post_split(self, id):
+        c.values = request.params
+        c.errors = dict()
+        
+        split_dict = dict()
+        
+        for username, percent in c.values.iteritems():
+            try:
+                user = meta.Session.query(model.User).\
+                    filter(model.User.username==username).one()
+                split_dict[user] = Decimal(percent)
+            except InvalidOperation:
+                c.errors[username] = 'Please enter a number'
+        if c.errors != dict():
+            return self._get_split(id)
+        
+        e = meta.Session.query(model.Expenditure).get(id)
+        e.split(split_dict)
+        
+        meta.Session.commit()
+        
+        h.flash('Expenditure redivided')
+        
+        return h.redirect_to('/')