source: WAeUP_SRP/trunk/skins/waeup_uniben/getPaymentsFolderInfo.py @ 8315

Last change on this file since 8315 was 8315, checked in by Henrik Bettermann, 13 years ago

We imported empty date fields which caused an exception when accessing payment objects.

With his revision we are catching these exceptions.

Uniben only!

  • Property svn:keywords set to Id
File size: 6.1 KB
Line 
1## Script (Python) "getPaymentsFolderInfo"
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: getPaymentsFolderInfo.py 8315 2012-04-30 12:15:36Z henrik $
11"""
12Info for the PaymentsFolder
13"""
14from Products.AdvancedQuery import Eq, Between, Le,In
15
16mtool = context.portal_membership
17wftool = context.portal_workflow
18member = mtool.getAuthenticatedMember()
19payments_catalog = context.payments_catalog
20aq_payments = payments_catalog.evalAdvancedQuery
21if mtool.isAnonymousUser():
22    return None
23try:
24    from Products.zdb import set_trace
25except:
26    def set_trace():
27        pass
28
29import DateTime
30request = context.REQUEST
31#students = context.portal_url.getPortalObject().campus.students
32student_id = context.getStudentId()
33if student_id is None:
34    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
35#student = getattr(students,student_id)
36student_record = context.students_catalog.getRecordByKey(student_id)
37
38
39info = {}
40is_so = info['is_so'] = context.isSectionOfficer()
41is_student = info['is_student'] = context.isStudent()
42info['student_name'] = student_record.name
43info['query_url'] = "https://webpay.interswitchng.com/paydirect/services/TransactionQueryURL.aspx"
44info['query_url_tranzact'] = "https://www.etranzact.net/Query/queryPayoutletTransaction.jsp"
45review_state = info['review_state'] = student_record.review_state
46parttime = student_record.mode and student_record.mode.endswith('_pt')
47fulltime = student_record.mode and student_record.mode.endswith('_ft')
48
49
50session = student_record.session
51next_info = context.getNextInfo(student_record)
52info['next_session'] = next_info['next_session_id']
53info['next_session_str'] = next_info['next_session_str']
54info['payment_method'] = ""
55info['reasons'] = next_info['reasons']
56
57# begin customization
58
59info['payment_method'] = ""
60
61if not next_info['payment_allowed']:
62    pass
63elif review_state == 'cleared_and_validated' and session in ('11','12','13'):
64    info['payment_method'] = "online_payment"
65elif review_state == 'returning' and session in ('11','12','13'):
66    info['payment_method'] = "online_payment"
67elif review_state == 'returning' or review_state == 'cleared_and_validated':
68    info['payment_method'] = "both_payments"
69else:
70    info['payment_method'] = ""
71
72info['prod_id'] = '61'
73
74gown_records = aq_payments(Eq('student_id',student_id)  & Eq('category','gown'))
75try:
76    level = int(student_record.level)
77    end_level = int(student_record.end_level)
78    if level >= end_level and not gown_records:
79        info['gown'] = True
80except:
81    pass
82
83if review_state == 'admitted':
84    info['acceptance'] = True
85else:
86    info['acceptance'] = False
87
88# end customization
89
90info['student_name'] = student_record.name
91payments_path = "%s/campus/students/%s/payments" % (context.portal_url(),student_id)
92payments = []
93payment_records = aq_payments(Eq('student_id',student_id)) # & Eq('session_id',student_record.session))
94vocabularies = context.portal_vocabularies
95paid_fees = []
96for payment in payment_records:
97    if payment.status == "paid":
98        paid_fees += "%s_%s" % (payment.category,payment.session_id),
99#info['pf'] = paid_fees
100for payment in payment_records:
101    row = {}
102    row['id'] = payment.key
103    try:
104        p_date = payment.date.strftime("%d/%m/%y %H:%M:%S")
105    except:
106        p_date = '(no payment date provided)'
107    if payment.status == 'invalid':
108        row['title'] = "Invalid Payment, Naira %s, %s" % (payment.amount,
109                                                          p_date)
110    else:
111        row['title'] = "%s for Session %s, Naira %s, %s" % (vocabularies.payment_categories.get(payment.category),
112                                                            vocabularies.sessions.get(payment.session_id),
113                                                            payment.amount,
114                                                            p_date)
115    oid = payment.order_id
116    onr = oid.rfind('-')+1
117    if onr > 0:
118        start_pos = onr
119    else:
120        start_pos = 6
121    row['sort_param'] = payment.date
122    url = row['url'] = "%s/p%s" % (payments_path,oid[start_pos:])
123    row['is_requeryable_interswitch'] = "%s_%s" % (payment.category,payment.session_id) not in paid_fees and payment.type == 'online' #or str(member) in ('admin',)
124    row['is_requeryable_etranzact'] = "%s_%s" % (payment.category,payment.session_id) not in paid_fees and payment.type == 'etranzact' #or str(member) in ('admin',)
125    row['is_approvable'] = is_so and (row['is_requeryable_interswitch'] or row['is_requeryable_etranzact'])and payment.category == 'schoolfee' # does not make sense for maitenance
126    row['resp_desc'] = payment.resp_desc or 'Payment Process Interrupted'
127    row['trans_ref'] = payment.order_id
128    if row['is_requeryable_interswitch']:
129        row['callback_url_inter'] = "%(url)s/interswitch_cb" % row
130#        if payment.category == 'schoolfee':
131#            row['callback_url'] = "%(url)s/interswitch_cb" % row
132#        elif payment.category == 'hostel_maintenance':
133#            row['callback_url'] = "%(url)s/interswitch_acco_cb" % row
134#        else:
135        href = '%(query_url)s' % info
136        href += '?transRef=%(trans_ref)s' % row
137        href += '&prodID=%(prod_id)s' % info
138        href += '&redirectURL=%(callback_url_inter)s' % row
139        row['href_inter'] = href
140
141    if row['is_requeryable_etranzact']:
142        row['callback_url_tranzact'] = "%(url)s/etranzact_cb" % row
143#        if payment.category == 'schoolfee':
144#            row['callback_url'] = "%(url)s/interswitch_cb" % row
145#        elif payment.category == 'hostel_maintenance':
146#            row['callback_url'] = "%(url)s/interswitch_acco_cb" % row
147#        else:
148
149        href = 'enter_tranzact_pin'
150        href += '?query_url=%(query_url_tranzact)s' % info
151        href += '&redirectURL=%(callback_url_tranzact)s' % row
152        row['href_tranzact'] = href
153
154    if payment.status == 'paid':
155        row['confirmed'] = 'active'
156    else:
157        row['confirmed'] = 'unsuccessful'
158    row['is_editable'] = is_so and (row['confirmed'] == 'active')
159    payments.append(row)
160
161payments.sort(cmp=lambda x,y: cmp(x['sort_param'],y['sort_param']))
162info['payments'] = payments
163return info
Note: See TracBrowser for help on using the repository browser.