]> asedeno.scripts.mit.edu Git - bluechips.git/blobdiff - bluechips/controllers/transfer.py
added email notifications. requires schema change to add email column to users table.
[bluechips.git] / bluechips / controllers / transfer.py
index 79628ef3c18b0abb834e97ecbd12dd3ae377850e..016f508df07f7d379d468db895be23454dd2ec8e 100644 (file)
@@ -4,13 +4,17 @@ Handle transfers
 
 import logging
 
+from datetime import date
+
 from bluechips.lib.base import *
 
-from pylons import request
+from pylons import request, app_globals as g
 from pylons.decorators import validate
 
 from formencode import Schema, validators
 
+from mailer import Message
+
 log = logging.getLogger(__name__)
 
 
@@ -19,9 +23,9 @@ class TransferSchema(Schema):
     allow_extra_fields = False
     debtor_id = validators.Int(not_empty=True)
     creditor_id = validators.Int(not_empty=True)
-    amount = validators.Number(not_empty=True)
+    amount = model.types.CurrencyValidator(not_empty=True)
     description = validators.UnicodeString()
-    date = validators.String()
+    date = validators.DateConverter()
  
 
 class TransferController(BaseController):
@@ -34,6 +38,7 @@ class TransferController(BaseController):
             c.title = 'Add a New Transfer'
             c.transfer = model.Transfer()
             c.transfer.debtor_id = request.environ['user'].id
+            c.transfer.date = date.today()
         else:
             c.title = 'Edit a Transfer'
             c.transfer = meta.Session.query(model.Transfer).get(id)
@@ -44,13 +49,21 @@ class TransferController(BaseController):
         if id is None:
             t = model.Transfer()
             meta.Session.add(t)
+            op = 'created'
         else:
             t = meta.Session.query(model.Transfer).get(id)
+            op = 'updated'
         
-        t.amount = self.form_result.pop('amount') * 100
         update_sar(t, self.form_result)
         meta.Session.commit()
-        
-        h.flash('Transfer updated.')
-        
+       
+        show = ('Transfer of %s from %s to %s %s.' %
+                (t.amount, t.debtor, t.creditor, op))
+        h.flash(show)
+
+        # Send email notification to involved users if they have an email set.
+        body = render('/emails/transfer.txt', extra_vars={'transfer': t,
+                                                          'op': op})
+        g.handle_notification((t.debtor, t.creditor), show, body)
+
         return h.redirect_to('/')