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