7 from datetime import date
9 from bluechips.lib.base import *
11 from pylons import request, app_globals as g
12 from pylons.decorators import validate
13 from pylons.controllers.util import abort
15 from formencode import Schema, validators
17 from mailer import Message
19 log = logging.getLogger(__name__)
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()
32 class TransferController(BaseController):
36 def edit(self, id=None):
37 c.users = meta.Session.query(model.User.id, model.User.name)
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()
44 c.title = 'Edit a Transfer'
45 c.transfer = meta.Session.query(model.Transfer).get(id)
46 if c.transfer is None:
48 return render('/transfer/index.mako')
50 @validate(schema=TransferSchema(), form='edit')
51 def update(self, id=None):
57 t = meta.Session.query(model.Transfer).get(id)
62 update_sar(t, self.form_result)
65 show = ('Transfer of %s from %s to %s %s.' %
66 (t.amount, t.debtor, t.creditor, op))
69 # Send email notification to involved users if they have an email set.
70 body = render('/emails/transfer.txt', extra_vars={'transfer': t,
72 g.handle_notification((t.debtor, t.creditor), show, body)
74 return h.redirect_to('/')