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
14 from formencode import Schema, validators
16 from mailer import Message
18 log = logging.getLogger(__name__)
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()
31 class TransferController(BaseController):
35 def edit(self, id=None):
36 c.users = meta.Session.query(model.User.id, model.User.name)
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()
43 c.title = 'Edit a Transfer'
44 c.transfer = meta.Session.query(model.Transfer).get(id)
45 return render('/transfer/index.mako')
47 @validate(schema=TransferSchema(), form='edit')
48 def update(self, id=None):
54 t = meta.Session.query(model.Transfer).get(id)
57 update_sar(t, self.form_result)
60 show = ('Transfer of %s from %s to %s %s.' %
61 (t.amount, t.debtor, t.creditor, op))
64 # Send email notification to involved users if they have an email set.
65 body = render('/emails/transfer.txt', extra_vars={'transfer': t,
67 g.handle_notification((t.debtor, t.creditor), show, body)
69 return h.redirect_to('/')