]> asedeno.scripts.mit.edu Git - bluechips.git/blob - bluechips/controllers/transfer.py
added email notifications. requires schema change to add email column to users table.
[bluechips.git] / bluechips / controllers / transfer.py
1 """
2 Handle transfers
3 """
4
5 import logging
6
7 from datetime import date
8
9 from bluechips.lib.base import *
10
11 from pylons import request, app_globals as g
12 from pylons.decorators import validate
13
14 from formencode import Schema, validators
15
16 from mailer import Message
17
18 log = logging.getLogger(__name__)
19
20
21 class TransferSchema(Schema):
22     "Validate a transfer."
23     allow_extra_fields = False
24     debtor_id = validators.Int(not_empty=True)
25     creditor_id = validators.Int(not_empty=True)
26     amount = model.types.CurrencyValidator(not_empty=True)
27     description = validators.UnicodeString()
28     date = validators.DateConverter()
29  
30
31 class TransferController(BaseController):
32     def index(self):
33        return self.edit()
34     
35     def edit(self, id=None):
36         c.users = meta.Session.query(model.User.id, model.User.name)
37         if id is None:
38             c.title = 'Add a New Transfer'
39             c.transfer = model.Transfer()
40             c.transfer.debtor_id = request.environ['user'].id
41             c.transfer.date = date.today()
42         else:
43             c.title = 'Edit a Transfer'
44             c.transfer = meta.Session.query(model.Transfer).get(id)
45         return render('/transfer/index.mako')
46     
47     @validate(schema=TransferSchema(), form='edit')
48     def update(self, id=None):
49         if id is None:
50             t = model.Transfer()
51             meta.Session.add(t)
52             op = 'created'
53         else:
54             t = meta.Session.query(model.Transfer).get(id)
55             op = 'updated'
56         
57         update_sar(t, self.form_result)
58         meta.Session.commit()
59        
60         show = ('Transfer of %s from %s to %s %s.' %
61                 (t.amount, t.debtor, t.creditor, op))
62         h.flash(show)
63
64         # Send email notification to involved users if they have an email set.
65         body = render('/emails/transfer.txt', extra_vars={'transfer': t,
66                                                           'op': op})
67         g.handle_notification((t.debtor, t.creditor), show, body)
68
69         return h.redirect_to('/')