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.decorators.secure import authenticate_form
14 from pylons.controllers.util import abort
16 from formencode import Schema, validators
18 from mailer import Message
20 log = logging.getLogger(__name__)
23 class TransferSchema(Schema):
24 "Validate a transfer."
25 allow_extra_fields = False
26 debtor_id = validators.Int(not_empty=True)
27 creditor_id = validators.Int(not_empty=True)
28 amount = model.types.CurrencyValidator(not_empty=True)
29 description = validators.UnicodeString()
30 date = validators.DateConverter()
33 class TransferController(BaseController):
37 def edit(self, id=None):
40 c.title = 'Add a New Transfer'
41 c.transfer = model.Transfer()
42 c.transfer.debtor_id = request.environ['user'].id
43 c.transfer.date = date.today()
45 c.title = 'Edit a Transfer'
46 c.transfer = meta.Session.query(model.Transfer).get(id)
47 if c.transfer is None:
49 return render('/transfer/index.mako')
51 @redirect_on_get('edit')
53 @validate(schema=TransferSchema(), form='edit')
54 def update(self, id=None):
60 t = meta.Session.query(model.Transfer).get(id)
65 update_sar(t, self.form_result)
68 show = ('Transfer of %s from %s to %s %s.' %
69 (t.amount, t.debtor, t.creditor, op))
72 # Send email notification to involved users if they have an email set.
73 body = render('/emails/transfer.txt', extra_vars={'transfer': t,
75 g.handle_notification((t.debtor, t.creditor), show, body)
77 return h.redirect_to('/')
80 c.title = 'Delete a Transfer'
81 c.transfer = meta.Session.query(model.Transfer).get(id)
82 if c.transfer is None:
85 return render('/transfer/delete.mako')
87 @redirect_on_get('delete')
89 def destroy(self, id):
90 t = meta.Session.query(model.Transfer).get(id)
94 if 'delete' in request.params:
95 meta.Session.delete(t)
98 show = ("Transfer of %s from %s to %s deleted." %
99 (t.amount, t.debtor, t.creditor))
102 body = render('/emails/transfer.txt',
103 extra_vars={'transfer': t,
105 g.handle_notification((t.debtor, t.creditor), show, body)
107 return h.redirect_to('/')