source: WAeUP_SRP/trunk/skins/waeup_epayment/pay_by_sc.py @ 5216

Last change on this file since 5216 was 5205, checked in by Henrik Bettermann, 15 years ago

avoid double payments

  • Property svn:keywords set to Id
File size: 4.7 KB
RevLine 
[1274]1## Script (Python) "pay_by_sc"
2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=
8##title=
9##
10# $Id: pay_by_sc.py 5205 2010-05-25 17:30:20Z henrik $
11"""
12pay online
13"""
14import logging
15from urllib import urlencode
[1568]16logger = logging.getLogger('Skins.pay_by_sc')
[1274]17import DateTime
[1758]18try:
19    from Products.zdb import set_trace
20except:
21    def set_trace():
22        pass
[1365]23
24if context.portal_membership.isAnonymousUser():
25    return None
[2454]26wftool = context.portal_workflow
[1274]27lt = context.portal_layouts
28request = context.REQUEST
29students = context.portal_url.getPortalObject().campus.students
30student_id = context.getStudentId()
31if student_id is None:
[1283]32    return request.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
[1274]33
34student = getattr(students,student_id)
[2881]35student_record = context.students_catalog.getRecordByKey(student_id)
[2454]36
[2881]37# session = student_record.session
[2454]38# next_session, next_session_str = context.getNextSessionId(session)
39
[2881]40next_info = context.getNextInfo(student_record)
[2454]41next_session_id = next_info['next_session_id']
[2451]42next_session_str = next_info['next_session_str']
[2454]43next_level_id = next_info['next_level_id']
44next_transition = next_info['next_transition']
[2475]45next_verdict = next_info['next_verdict']
[2678]46next_previous_verdict = next_info['next_previous_verdict']
[2451]47
[5205]48if not next_info['payment_allowed']:
49    logger.info('%s called pay_by_sc manually' % student_id)     
50    return 'Do not call this form manually!'
51
[2454]52validate = request.has_key("cpsdocument_create_button")
[1274]53res,psm,ds = lt.renderLayout(layout_id= 'student_schoolfee',
[1376]54                      schema_id= 'payment',
[1274]55                      context=context,
[1283]56                      mapping=validate and request,
[1274]57                      ob={},
58                      layout_mode="create",
59                      formaction = "pay_by_sc",
[1856]60                      button = 'Pay',
61                      commit = False,
[1274]62                      )
[5205]63                     
[1274]64if psm == 'invalid':
65    psm = 'Please correct your errors!'
66    return context.pay_by_sc_form(rendered = res,
67                                 psm = psm,
68                                 mode = 'edit',
[1758]69                                 next_session_str = next_session_str,
[1274]70                                 ds = ds,
71                                 )
72elif psm == '':
73    return context.pay_by_sc_form(rendered = res,
74                                 psm = None,
75                                 mode = 'edit',
[1758]76                                 next_session_str = next_session_str,
[1274]77                                 ds = ds,
78                                 )
79elif psm == 'valid':
80    pass
81if "payments" not in student.objectIds():
82    student.invokeFactory('PaymentsFolder','payments')
83    payments = getattr(student,'payments')
84    d = {}
85    d['Title'] = 'Payments'
86    payments.getContent().edit(mapping=d)
87    wftool.doActionFor(payments,'open')
88else:
89    payments = getattr(student,'payments')
[1283]90#from Products.zdb import set_trace; set_trace()
[1274]91info = {}
[2619]92p_id = "p%s" % ds.get('pin_n')
[2059]93pin = str(ds.get('pin'))
94try:
95    cost = context.portal_pins(pin="".join(pin.split('-')))[0].cost
96except:
97    cost = "n/a"
98try:
99    x = float(cost)
100except:
101    cost = "n/a"
[2153]102
[1390]103if not hasattr(payments,p_id):
104    now = DateTime.DateTime()
105    info['date'] = now
[2059]106    info['amount'] = cost
[2619]107    pin = info['order_id'] = "%s" % pin
[2877]108    #info['type_code'] = "%s" % pin  #type_code is redundant and will be removed soon
[1758]109    info['type_description'] = 'School Fee for Session %s' % next_session_str
[2877]110    info['type'] = 'sc'
[2859]111    info['status'] = 'paid'
[3256]112    info['session_id'] = next_session_id
[2891]113    info['item'] = student_record.course
114    info['category'] = 'schoolfee'
[1390]115    info['resp_code'] = "SC"
116    info['resp_desc'] = "SC Payment Successful"
117    payments.invokeFactory('Payment', p_id)
118    payment = getattr(payments,p_id)
119    wftool = context.portal_workflow
120    wftool.doActionFor(payment,'open')
121    payment.getContent().edit(mapping=info)
122    wftool.doActionFor(payment,'close')
[2454]123
124    study_course = getattr(student,'study_course')
[2459]125    try:
126        wftool.doActionFor(study_course,'open')
127    except:
[2475]128        pass
[2454]129    study_course.getContent().edit(mapping= {'current_level': next_level_id,
[2475]130                                             'current_session': next_session_id,
131                                             'current_verdict': next_verdict,
[2678]132                                             'previous_verdict': next_previous_verdict,
[2475]133                                             })
[2454]134    if next_transition:
[2459]135        wftool.doActionFor(student,next_transition)
136
[1568]137    logger.info('%s paid school fee by scratch card' % student_id)
[1390]138else:
[1568]139    logger.info('%s repeatedly paid school fee by scratch card' % student_id)
[1283]140url = "%s/payments" % (student.absolute_url())
[1274]141request.RESPONSE.redirect(url)
142
Note: See TracBrowser for help on using the repository browser.