Index: WAeUP_SRP/trunk/profiles/default/vocabularies/payment_types.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/vocabularies/payment_types.xml	(revision 7900)
+++ WAeUP_SRP/trunk/profiles/default/vocabularies/payment_types.xml	(revision 7901)
@@ -10,4 +10,5 @@
     <item key="sc" msgid="">Scratch Card</item>
     <item key="online" msgid="">Online</item>
+    <item key="etranzact" msgid="">eTranzact</item>
     <item key="request" msgid="">Request</item>
 </object>
Index: WAeUP_SRP/trunk/skins/waeup_uniben/custom.css.dtml
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/custom.css.dtml	(revision 7900)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/custom.css.dtml	(revision 7901)
@@ -67,5 +67,4 @@
   white-space: nowrap;
   color: #333333;
-  text-decoration:line-through; 
   font-weight: bold;
 }
@@ -74,5 +73,4 @@
   white-space: nowrap;  
   color: #333333;
-  text-decoration:line-through; 
 }
 
@@ -80,5 +78,4 @@
   white-space: nowrap;  
   color: #333333;
-  text-decoration:line-through; 
 }
 
Index: WAeUP_SRP/trunk/skins/waeup_uniben/enter_tranzact_pin.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/enter_tranzact_pin.pt	(revision 7901)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/enter_tranzact_pin.pt	(revision 7901)
@@ -0,0 +1,28 @@
+<metal:html tal:define="redirect_url here/REQUEST/redirectURL;
+                        query_url here/REQUEST/query_url">
+  <metal:body use-macro="here/main_template/macros/master">
+    <metal:main fill-slot="main">
+      <h3>Re-query eTranzact payment!</h3>
+      <br />
+      <form id="form1" name="form1" method="post" tal:attributes= "action query_url">
+      <input type="hidden" name="TERMINAL_ID" type="text" value="0000000001"/>
+      <input type="hidden" name="RESPONSE_URL" type="text"
+             tal:attributes="value redirect_url"/>
+      <table width="70%" border="0" cellspacing="5" cellpadding="0">
+        <tr>
+          <td>
+             <strong>eTranzact PIN (Confirmation Number): </strong>
+          </td>
+          <td>
+             <input name="CONFIRMATION_NO" type="text"/>
+          </td>
+        </tr>
+        <tr>
+          <td>&nbsp;</td>
+          <td><input name="Submit" type="submit" class="standalone" value="Submit" /></td>
+        </tr>
+      </table>
+      </form>
+    </metal:main>
+  </metal:body>
+</metal:html>
Index: WAeUP_SRP/trunk/skins/waeup_uniben/etranzact_form.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/etranzact_form.pt	(revision 7901)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/etranzact_form.pt	(revision 7901)
@@ -0,0 +1,41 @@
+<metal:body use-macro="here/main_template/macros/master">
+  <metal:main fill-slot="main"
+              tal:define="info options/info">
+    <h3>Confirm Your Payment Data! </h3>
+    <br />
+    <span tal:condition="not: info/payment_possible">
+      No payment information for your course available.
+    </span>
+    <span tal:condition="info/payment_possible">
+      <form method="post" action="pay_etranzact">
+        <table>
+          <tr>
+            <td width="100px">
+            Payment:</td>
+            <td tal:content="info/type_description"></td>
+          </tr>
+          <tr>
+            <td>
+            Name:
+            </td>
+            <td tal:content="info/pay_bill_to" />
+          </tr>
+          <tr>
+            <td >
+            Amount:
+            </td>
+            <td> Naira <span tal:content="info/amount" /></td>
+          </tr>
+        </table>
+        <br />
+        <input type="submit" 
+               class="standalone" 
+               name="goto_bank" 
+               value="Confirm" 
+               />
+
+      </form>
+    </span>
+    </metal:main>
+</metal:body>
+
Index: WAeUP_SRP/trunk/skins/waeup_uniben/getPaymentInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/getPaymentInfo.py	(revision 7900)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/getPaymentInfo.py	(revision 7901)
@@ -36,9 +36,10 @@
 payment = context.getContent()
 info['payment_doc'] = payment
+info['is_etranzact_pmt'] = ie = payment.type == 'etranzact'
 info['is_online_pmt'] = io = payment.resp_code in ('0','00','AP','IP',)
 info['is_request_pmt'] = ir = payment.resp_code in ('RP',)
 info['is_scratchcard_pmt'] = isc =  payment.resp_code == 'SC'
-info['is_interrupted'] = ii = payment.resp_code == ''
-info['unknown_code'] = not (io or isc or ii or ir)
+info['is_interrupted'] = ii = payment.resp_code == '' and not ie
+info['unknown_code'] = not (io or isc or ii or ir or ie)
 info['resp_code'] = payment.resp_code
 info['resp_desc'] = payment.resp_desc
Index: WAeUP_SRP/trunk/skins/waeup_uniben/getPaymentsFolderInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/getPaymentsFolderInfo.py	(revision 7900)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/getPaymentsFolderInfo.py	(revision 7901)
@@ -42,4 +42,5 @@
 info['student_name'] = student_record.name
 info['query_url'] = "https://webpay.interswitchng.com/paydirect/services/TransactionQueryURL.aspx"
+info['query_url_tranzact'] = "http://demo.etranzact.com:8080/WebConnect/queryPayoutletTransaction.jsp"
 review_state = info['review_state'] = student_record.review_state
 parttime = student_record.mode and student_record.mode.endswith('_pt')
@@ -56,20 +57,8 @@
 # begin customization
 
-# special handling of 06 DPA students (ticket 658)
-if review_state == 'cleared_and_validated' and session in ('06') and student_record.course == 'DPA':
+if session in ('11','12','13'):
+    info['payment_method'] = "online_payment"
+else:
     info['payment_method'] = "sc_payment"
-# special handling of 06 payments for testing purposes     
-elif review_state == 'cleared_and_validated' and session in ('06'):
-    info['payment_method'] = "online_payment"
-elif review_state == 'returning' and info['next_session'] == '06':
-    info['payment_method'] = "both_payments"
-elif review_state == 'cleared_and_validated' and session not in ('07','08'):
-    info['payment_method'] = "both_payments"
-elif review_state == 'cleared_and_validated' and session in ('07','08'):
-    info['payment_method'] = "sc_payment"
-elif review_state == 'returning' and info['next_session'] != session:
-    info['payment_method'] = "sc_payment"
-
-
 
 info['prod_id'] = '61'
@@ -115,10 +104,11 @@
     row['sort_param'] = payment.date
     url = row['url'] = "%s/p%s" % (payments_path,oid[start_pos:])
-    row['is_requeryable'] = "%s_%s" % (payment.category,payment.session_id) not in paid_fees and payment.type == 'online' or str(member) in ('admin',)
-    row['is_approvable'] = is_so and row['is_requeryable'] and payment.category == 'schoolfee' # does not make sense for maitenance
+    row['is_requeryable_interswitch'] = "%s_%s" % (payment.category,payment.session_id) not in paid_fees and payment.type == 'online' #or str(member) in ('admin',)
+    row['is_requeryable_etranzact'] = "%s_%s" % (payment.category,payment.session_id) not in paid_fees and payment.type == 'etranzact' #or str(member) in ('admin',)
+    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
     row['resp_desc'] = payment.resp_desc or 'Payment Process Interrupted'
     row['trans_ref'] = payment.order_id
-    if row['is_requeryable']:
-        row['callback_url'] = "%(url)s/interswitch_cb" % row
+    if row['is_requeryable_interswitch']:
+        row['callback_url_inter'] = "%(url)s/interswitch_cb" % row
 #        if payment.category == 'schoolfee':
 #            row['callback_url'] = "%(url)s/interswitch_cb" % row
@@ -129,6 +119,20 @@
         href += '?transRef=%(trans_ref)s' % row
         href += '&prodID=%(prod_id)s' % info
-        href += '&redirectURL=%(callback_url)s' % row
-        row['href'] = href
+        href += '&redirectURL=%(callback_url_inter)s' % row
+        row['href_inter'] = href
+
+    if row['is_requeryable_etranzact']:
+        row['callback_url_tranzact'] = "%(url)s/tranzact_cb" % row
+#        if payment.category == 'schoolfee':
+#            row['callback_url'] = "%(url)s/interswitch_cb" % row
+#        elif payment.category == 'hostel_maintenance':
+#            row['callback_url'] = "%(url)s/interswitch_acco_cb" % row
+#        else:
+
+        href = 'enter_tranzact_pin'
+        href += '?query_url=%(query_url_tranzact)s' % info
+        href += '&redirectURL=%(callback_url_tranzact)s' % row
+        row['href_tranzact'] = href
+
     if payment.status == 'paid':
         row['confirmed'] = 'active'
Index: WAeUP_SRP/trunk/skins/waeup_uniben/getSchoolFee.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/getSchoolFee.py	(revision 7901)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/getSchoolFee.py	(revision 7901)
@@ -0,0 +1,592 @@
+## Script (Python) "getSchoolFee"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=brain=None
+##title=
+##
+# $Id$
+"""
+return SchoolFee
+"""
+
+all_fees = {
+    'CPA': {'payment_item': 'CPA', 'new': '62500', 'returning': '26500'},
+    'PHDACHM': {'payment_item': 'PHDACHM', 'new': '91500', 'returning': '56200'},
+    'MSCGLY': {'payment_item': 'MSCGLY', 'new': '73500', 'returning': '42700'},
+    'MSCCHED': {'payment_item': 'MSCCHED', 'new': '73500', 'returning': '42700'},
+    'MSCEMCB': {'payment_item': 'MSCEMCB', 'new': '73500', 'returning': '42700'},
+    'BSCCSC': {'payment_item': 'BSCCSC', 'new': '39500', 'returning': '9700'},
+    'LLBPT': {'payment_item': 'LLBPT', 'new': '73500', 'returning': '32700'},
+    'BEMESW': {'payment_item': 'BEMESW', 'new': '63500', 'returning': '22700'},
+    'BAEDSS': {'payment_item': 'BAEDSS', 'new': '37500', 'returning': '7700'},
+    'BSCMBC': {'payment_item': 'BSCMBC', 'new': '39500', 'returning': '9700'},
+    'MBBSMED': {'payment_item': 'MBBSMED', 'new': '39500', 'returning': '9700'},
+    'BECV': {'payment_item': 'BECV', 'new': '74500', 'returning': '32700'},
+    'BSCACC': {'payment_item': 'BSCACC', 'new': '37500', 'returning': '7700'},
+    'BAGAEE': {'payment_item': 'BAGAEE', 'new': '39500', 'returning': '9700'},
+    'PHDCHE': {'payment_item': 'PHDCHE', 'new': '91500', 'returning': '56200'},
+    'BECO': {'payment_item': 'BECO', 'new': '74500', 'returning': '32700'},
+    'PHDCHM': {'payment_item': 'PHDCHM', 'new': '91500', 'returning': '56200'},
+    'BAEDSCP': {'payment_item': 'BAEDSCP', 'new': '37500', 'returning': '7700'},
+    'BECE': {'payment_item': 'BECE', 'new': '74500', 'returning': '32700'},
+    'PHDFIN': {'payment_item': 'PHDFIN', 'new': '91500', 'returning': '56200'},
+    'BAEDCRM': {'payment_item': 'BAEDCRM', 'new': '37500', 'returning': '7700'},
+    'MSCIAM': {'payment_item': 'MSCIAM', 'new': '73500', 'returning': '42700'},
+    'PHDUGRP': {'payment_item': 'PHDUGRP', 'new': '91500', 'returning': '56200'},
+    'BARTTHR': {'payment_item': 'BARTTHR', 'new': '37500', 'returning': '7700'},
+    'PHDMM': {'payment_item': 'PHDMM', 'new': '91500', 'returning': '56200'},
+    'MSCPSY': {'payment_item': 'MSCPSY', 'new': '73500', 'returning': '42700'},
+    'MSCCPHA': {'payment_item': 'MSCCPHA', 'new': '73500', 'returning': '42700'},
+    'BEL': {'payment_item': 'BEL', 'new': '68500', 'returning': '27700'},
+    'MALIT': {'payment_item': 'MALIT', 'new': '73500', 'returning': '42700'},
+    'DTA': {'payment_item': 'DTA', 'new': '60500', 'returning': '19700'},
+    'MSCPST': {'payment_item': 'MSCPST', 'new': '73500', 'returning': '42700'},
+    'PHDPT': {'payment_item': 'PHDPT', 'new': '91500', 'returning': '56200'},
+    'MSCCRM': {'payment_item': 'MSCCRM', 'new': '73500', 'returning': '42700'},
+    'PHDEPHM': {'payment_item': 'PHDEPHM', 'new': '91500', 'returning': '56200'},
+    'BES': {'payment_item': 'BES', 'new': '69500', 'returning': '27700'},
+    'MPHILAPM': {'payment_item': 'MPHILAPM', 'new': '73500', 'returning': '42700'},
+    'MPHILEAD': {'payment_item': 'MPHILEAD', 'new': '73500', 'returning': '42700'},
+    'MEDCURR': {'payment_item': 'MEDCURR', 'new': '73500', 'returning': '42700'},
+    'MSCPHAMCB': {'payment_item': 'MSCPHAMCB', 'new': '73500', 'returning': '42700'},
+    'BENGSTR': {'payment_item': 'BENGSTR', 'new': '39500', 'returning': '9700'},
+    'PHDEAF': {'payment_item': 'PHDEAF', 'new': '91500', 'returning': '56200'},
+    'MEDBIO': {'payment_item': 'MEDBIO', 'new': '73500', 'returning': '42700'},
+    'MENGGE': {'payment_item': 'MENGGE', 'new': '73500', 'returning': '42700'},
+    'PHDEPM': {'payment_item': 'PHDEPM', 'new': '91500', 'returning': '56200'},
+    'PHDOR': {'payment_item': 'PHDOR', 'new': '91500', 'returning': '56200'},
+    'MSCCELLB': {'payment_item': 'MSCCELLB', 'new': '73500', 'returning': '42700'},
+    'BAPHLSAS': {'payment_item': 'BAPHLSAS', 'new': '37500', 'returning': '7700'},
+    'PHARMD1': {'payment_item': 'PHARMD1', 'new': '84500', 'returning': '44700'},
+    'DSW': {'payment_item': 'DSW', 'new': '66500', 'returning': '25700'},
+    'PHDALAN': {'payment_item': 'PHDALAN', 'new': '91500', 'returning': '56200'},
+    'BENGGEP': {'payment_item': 'BENGGEP', 'new': '39500', 'returning': '9700'},
+    'BLG': {'payment_item': 'BLG', 'new': '63500', 'returning': '22700'},
+    'MEDVTE': {'payment_item': 'MEDVTE', 'new': '73500', 'returning': '42700'},
+    'DSLT': {'payment_item': 'DSLT', 'new': '67500', 'returning': '25700'},
+    'MFATEX': {'payment_item': 'MFATEX', 'new': '73500', 'returning': '42700'},
+    'PHDPEE': {'payment_item': 'PHDPEE', 'new': '91500', 'returning': '56200'},
+    'BSCBCH': {'payment_item': 'BSCBCH', 'new': '39500', 'returning': '9700'},
+    'DHAM': {'payment_item': 'DHAM', 'new': '68500', 'returning': '32500'},
+    'MPHILSAA': {'payment_item': 'MPHILSAA', 'new': '73500', 'returning': '42700'},
+    'BFRCSW': {'payment_item': 'BFRCSW', 'new': '63500', 'returning': '22700'},
+    'MEDHMEPT': {'payment_item': 'MEDHMEPT', 'new': '79500', 'returning': '37700'},
+    'PGDBM': {'payment_item': 'PGDBM', 'new': '73500', 'returning': '32700'},
+    'MSCIMIM': {'payment_item': 'MSCIMIM', 'new': '73500', 'returning': '42700'},
+    'MEDMEPT': {'payment_item': 'MEDMEPT', 'new': '78500', 'returning': '37700'},
+    'MSCANAM': {'payment_item': 'MSCANAM', 'new': '73500', 'returning': '42700'},
+    'MEDTWBT': {'payment_item': 'MEDTWBT', 'new': '73500', 'returning': '42700'},
+    'MSCMCB': {'payment_item': 'MSCMCB', 'new': '73500', 'returning': '42700'},
+    'BAS': {'payment_item': 'BAS', 'new': '68500', 'returning': '27700'},
+    'PHARMD': {'payment_item': 'PHARMD', 'new': '84500', 'returning': '44700'},
+    'MPCSC': {'payment_item': 'MPCSC', 'new': '73500', 'returning': '42700'},
+    'MENGCHEPT': {'payment_item': 'MENGCHEPT', 'new': '84500', 'returning': '42700'},
+    'BBIOSW': {'payment_item': 'BBIOSW', 'new': '64500', 'returning': '23700'},
+    'BSW': {'payment_item': 'BSW', 'new': '68500', 'returning': '27700'},
+    'MBFEPT': {'payment_item': 'MBFEPT', 'new': '113500', 'returning': '75200'},
+    'MSCTC': {'payment_item': 'MSCTC', 'new': '73500', 'returning': '42700'},
+    'BAGSOS': {'payment_item': 'BAGSOS', 'new': '39500', 'returning': '9700'},
+    'BARTENL': {'payment_item': 'BARTENL', 'new': '37500', 'returning': '7700'},
+    'PHDBUS': {'payment_item': 'PHDBUS', 'new': '91500', 'returning': '56200'},
+    'MPHILEPHM': {'payment_item': 'MPHILEPHM', 'new': '73500', 'returning': '42700'},
+    'BSCEVL': {'payment_item': 'BSCEVL', 'new': '39500', 'returning': '9700'},
+    'MAENL': {'payment_item': 'MAENL', 'new': '73500', 'returning': '42700'},
+    'BARTEDL': {'payment_item': 'BARTEDL', 'new': '37500', 'returning': '7700'},
+    'PHDAOL': {'payment_item': 'PHDAOL', 'new': '91500', 'returning': '56200'},
+    'DFS': {'payment_item': 'DFS', 'new': '64500', 'returning': '22700'},
+    'BAEDENG': {'payment_item': 'BAEDENG', 'new': '37500', 'returning': '7700'},
+    'MBFPT': {'payment_item': 'MBFPT', 'new': '113500', 'returning': '75200'},
+    'MPHFT': {'payment_item': 'MPHFT', 'new': '73500', 'returning': '42700'},
+    'MAHIS': {'payment_item': 'MAHIS', 'new': '73500', 'returning': '42700'},
+    'MPHILPHY': {'payment_item': 'MPHILPHY', 'new': '73500', 'returning': '42700'},
+    'DFA': {'payment_item': 'DFA', 'new': '60500', 'returning': '19700'},
+    'PGDPA': {'payment_item': 'PGDPA', 'new': '75500', 'returning': '39500'},
+    'PHDGEG': {'payment_item': 'PHDGEG', 'new': '91500', 'returning': '56200'},
+    'MPHILSD': {'payment_item': 'MPHILSD', 'new': '73500', 'returning': '42700'},
+    'MSCBMPB': {'payment_item': 'MSCBMPB', 'new': '73500', 'returning': '42700'},
+    'BSCME': {'payment_item': 'BSCME', 'new': '39500', 'returning': '9700'},
+    'BSCEDP': {'payment_item': 'BSCEDP', 'new': '39500', 'returning': '9700'},
+    'BBEDSW': {'payment_item': 'BBEDSW', 'new': '63500', 'returning': '22700'},
+    'BSCEDC': {'payment_item': 'BSCEDC', 'new': '39500', 'returning': '9700'},
+    'BSCEDB': {'payment_item': 'BSCEDB', 'new': '39500', 'returning': '9700'},
+    'BSCEDG': {'payment_item': 'BSCEDG', 'new': '39500', 'returning': '9700'},
+    'MENGEEE': {'payment_item': 'MENGEEE', 'new': '73500', 'returning': '42700'},
+    'BSCEDE': {'payment_item': 'BSCEDE', 'new': '39500', 'returning': '9700'},
+    'BSCGSP': {'payment_item': 'BSCGSP', 'new': '39500', 'returning': '9700'},
+    'PHDCPD': {'payment_item': 'PHDCPD', 'new': '91500', 'returning': '56200'},
+    'BSCEDM': {'payment_item': 'BSCEDM', 'new': '39500', 'returning': '9700'},
+    'BEDOSW': {'payment_item': 'BEDOSW', 'new': '63500', 'returning': '22700'},
+    'DPE': {'payment_item': 'DPE', 'new': '64500', 'returning': '28500'},
+    'BAE': {'payment_item': 'BAE', 'new': '68500', 'returning': '27700'},
+    'MENGEET': {'payment_item': 'MENGEET', 'new': '73500', 'returning': '42700'},
+    'BAC': {'payment_item': 'BAC', 'new': '68500', 'returning': '27700'},
+    'DPA': {'payment_item': 'DPA', 'new': '65500', 'returning': '29500'},
+    'BAN': {'payment_item': 'BAN', 'new': '68500', 'returning': '27700'},
+    'MENGMIMC': {'payment_item': 'MENGMIMC', 'new': '73500', 'returning': '42700'},
+    'MENGPME': {'payment_item': 'MENGPME', 'new': '73500', 'returning': '42700'},
+    'BSCEDHE': {'payment_item': 'BSCEDHE', 'new': '39500', 'returning': '9700'},
+    'MPCHM': {'payment_item': 'MPCHM', 'new': '73500', 'returning': '42700'},
+    'BSCEDHK': {'payment_item': 'BSCEDHK', 'new': '39500', 'returning': '9700'},
+    'BARTHIS': {'payment_item': 'BARTHIS', 'new': '37500', 'returning': '7700'},
+    'BSCEDHM': {'payment_item': 'BSCEDHM', 'new': '39500', 'returning': '9700'},
+    'MEDHED': {'payment_item': 'MEDHED', 'new': '73500', 'returning': '42700'},
+    'BEDADTP': {'payment_item': 'BEDADTP', 'new': '37500', 'returning': '7700'},
+    'BSCECO': {'payment_item': 'BSCECO', 'new': '37500', 'returning': '7700'},
+    'MEDCURRPT': {'payment_item': 'MEDCURRPT', 'new': '78500', 'returning': '37700'},
+    'MEDME': {'payment_item': 'MEDME', 'new': '73500', 'returning': '42700'},
+    'MFAADV': {'payment_item': 'MFAADV', 'new': '73500', 'returning': '42700'},
+    'MSCEMA': {'payment_item': 'MSCEMA', 'new': '73500', 'returning': '42700'},
+    'BSCBNK': {'payment_item': 'BSCBNK', 'new': '37500', 'returning': '7700'},
+    'BENLSW': {'payment_item': 'BENLSW', 'new': '63500', 'returning': '22700'},
+    'LLMFT': {'payment_item': 'LLMFT', 'new': '73500', 'returning': '42700'},
+    'BARTIBO': {'payment_item': 'BARTIBO', 'new': '37500', 'returning': '7700'},
+    'MSCCMMA': {'payment_item': 'MSCCMMA', 'new': '73500', 'returning': '42700'},
+    'MEDEMPT': {'payment_item': 'MEDEMPT', 'new': '78500', 'returning': '37700'},
+    'PHDPGLY': {'payment_item': 'PHDPGLY', 'new': '91500', 'returning': '56200'},
+    'MAFRC': {'payment_item': 'MAFRC', 'new': '73500', 'returning': '42700'},
+    'PHDEQM': {'payment_item': 'PHDEQM', 'new': '91500', 'returning': '56200'},
+    'MPHILMCB': {'payment_item': 'MPHILMCB', 'new': '73500', 'returning': '42700'},
+    'MEDBUSPT': {'payment_item': 'MEDBUSPT', 'new': '78500', 'returning': '37700'},
+    'BAP': {'payment_item': 'BAP', 'new': '37500', 'returning': '7700'},
+    'MSCAPM': {'payment_item': 'MSCAPM', 'new': '73500', 'returning': '42700'},
+    'MSCPBCH': {'payment_item': 'MSCPBCH', 'new': '73500', 'returning': '42700'},
+    'MSCGDS': {'payment_item': 'MSCGDS', 'new': '73500', 'returning': '42700'},
+    'PHDMCB': {'payment_item': 'PHDMCB', 'new': '91500', 'returning': '56200'},
+    'PHDIR': {'payment_item': 'PHDIR', 'new': '91500', 'returning': '56200'},
+    'BAEDFRC': {'payment_item': 'BAEDFRC', 'new': '37500', 'returning': '7700'},
+    'BAEDTXT': {'payment_item': 'BAEDTXT', 'new': '37500', 'returning': '7700'},
+    'PHDEP': {'payment_item': 'PHDEP', 'new': '91500', 'returning': '56200'},
+    'PHDPHYS': {'payment_item': 'PHDPHYS', 'new': '91500', 'returning': '56200'},
+    'MEDPE': {'payment_item': 'MEDPE', 'new': '73500', 'returning': '42700'},
+    'PHDISLR': {'payment_item': 'PHDISLR', 'new': '91500', 'returning': '56200'},
+    'MSCPDC': {'payment_item': 'MSCPDC', 'new': '73500', 'returning': '42700'},
+    'MSCSPMC': {'payment_item': 'MSCSPMC', 'new': '73500', 'returning': '42700'},
+    'BSCBUS': {'payment_item': 'BSCBUS', 'new': '37500', 'returning': '7700'},
+    'MENGTE': {'payment_item': 'MENGTE', 'new': '73500', 'returning': '42700'},
+    'MEDSE': {'payment_item': 'MEDSE', 'new': '73500', 'returning': '42700'},
+    'PHDSOC': {'payment_item': 'PHDSOC', 'new': '91500', 'returning': '56200'},
+    'PHDOCHM': {'payment_item': 'PHDOCHM', 'new': '91500', 'returning': '56200'},
+    'BFA': {'payment_item': 'BFA', 'new': '68500', 'returning': '27700'},
+    'BAEDGRH': {'payment_item': 'BAEDGRH', 'new': '37500', 'returning': '7700'},
+    'BEPE': {'payment_item': 'BEPE', 'new': '74500', 'returning': '32700'},
+    'BAGFOW': {'payment_item': 'BAGFOW', 'new': '39500', 'returning': '9700'},
+    'BFR': {'payment_item': 'BFR', 'new': '68500', 'returning': '27700'},
+    'MSCINC': {'payment_item': 'MSCINC', 'new': '73500', 'returning': '42700'},
+    'BFW': {'payment_item': 'BFW', 'new': '68500', 'returning': '27700'},
+    'PHDIDMO': {'payment_item': 'PHDIDMO', 'new': '91500', 'returning': '56200'},
+    'BSCEDCO': {'payment_item': 'BSCEDCO', 'new': '39500', 'returning': '9700'},
+    'PHDLA': {'payment_item': 'PHDLA', 'new': '91500', 'returning': '56200'},
+    'MSCINM': {'payment_item': 'MSCINM', 'new': '73500', 'returning': '42700'},
+    'BEMCH': {'payment_item': 'BEMCH', 'new': '74500', 'returning': '32700'},
+    'BARTREL': {'payment_item': 'BARTREL', 'new': '37500', 'returning': '7700'},
+    'BENGPEE': {'payment_item': 'BENGPEE', 'new': '39500', 'returning': '9700'},
+    'BAGRSW': {'payment_item': 'BAGRSW', 'new': '64500', 'returning': '23700'},
+    'DBF': {'payment_item': 'DBF', 'new': '68500', 'returning': '27700'},
+    'BSCMTH': {'payment_item': 'BSCMTH', 'new': '39500', 'returning': '9700'},
+    'MAIHDPT': {'payment_item': 'MAIHDPT', 'new': '83500', 'returning': '42700'},
+    'PHDANS': {'payment_item': 'PHDANS', 'new': '91500', 'returning': '56200'},
+    'CIECHD': {'payment_item': 'CIECHD', 'new': '62500', 'returning': '21700'},
+    'MSCFC': {'payment_item': 'MSCFC', 'new': '73500', 'returning': '42700'},
+    'MSCSOD': {'payment_item': 'MSCSOD', 'new': '73500', 'returning': '42700'},
+    'MPHPT': {'payment_item': 'MPHPT', 'new': '109500', 'returning': '67700'},
+    'MSCFM': {'payment_item': 'MSCFM', 'new': '73500', 'returning': '42700'},
+    'MPHILEMGT': {'payment_item': 'MPHILEMGT', 'new': '73500', 'returning': '42700'},
+    'PHDFIMCB': {'payment_item': 'PHDFIMCB', 'new': '91500', 'returning': '56200'},
+    'MENGPIE': {'payment_item': 'MENGPIE', 'new': '73500', 'returning': '42700'},
+    'MSCFMGT': {'payment_item': 'MSCFMGT', 'new': '73500', 'returning': '42700'},
+    'MPGEG': {'payment_item': 'MPGEG', 'new': '73500', 'returning': '42700'},
+    'PHDWP': {'payment_item': 'PHDWP', 'new': '91500', 'returning': '56200'},
+    'BENGPEP': {'payment_item': 'BENGPEP', 'new': '39500', 'returning': '9700'},
+    'PHDWR': {'payment_item': 'PHDWR', 'new': '91500', 'returning': '56200'},
+    'BSCEDTE': {'payment_item': 'BSCEDTE', 'new': '39500', 'returning': '9700'},
+    'LLMPT': {'payment_item': 'LLMPT', 'new': '114000', 'returning': '82700'},
+    'MIHD': {'payment_item': 'MIHD', 'new': '73500', 'returning': '42700'},
+    'MPLIT': {'payment_item': 'MPLIT', 'new': '73500', 'returning': '42700'},
+    'BSCEDGEO': {'payment_item': 'BSCEDGEO', 'new': '39500', 'returning': '9700'},
+    'DLS': {'payment_item': 'DLS', 'new': '65500', 'returning': '29500'},
+    'PHDPCHM': {'payment_item': 'PHDPCHM', 'new': '91500', 'returning': '56200'},
+    'MSCTG': {'payment_item': 'MSCTG', 'new': '73500', 'returning': '42700'},
+    'BSCGEO': {'payment_item': 'BSCGEO', 'new': '39500', 'returning': '9700'},
+    'BSCGLY': {'payment_item': 'BSCGLY', 'new': '39500', 'returning': '9700'},
+    'MENGEPM': {'payment_item': 'MENGEPM', 'new': '73500', 'returning': '42700'},
+    'BSCS': {'payment_item': 'BSCS', 'new': '71500', 'returning': '29700'},
+    'BSCMAP': {'payment_item': 'BSCMAP', 'new': '39500', 'returning': '9700'},
+    'MSCPHY': {'payment_item': 'MSCPHY', 'new': '73500', 'returning': '42700'},
+    'BTA': {'payment_item': 'BTA', 'new': '68500', 'returning': '27700'},
+    'BSCCRT': {'payment_item': 'BSCCRT', 'new': '39500', 'returning': '9700'},
+    'MENGPRE': {'payment_item': 'MENGPRE', 'new': '73500', 'returning': '42700'},
+    'BSCZOO': {'payment_item': 'BSCZOO', 'new': '39500', 'returning': '9700'},
+    'MSCFPM': {'payment_item': 'MSCFPM', 'new': '73500', 'returning': '42700'},
+    'PHDSOS': {'payment_item': 'PHDSOS', 'new': '91500', 'returning': '56200'},
+    'PHDENL': {'payment_item': 'PHDENL', 'new': '91500', 'returning': '56200'},
+    'MSCFE': {'payment_item': 'MSCFE', 'new': '73500', 'returning': '42700'},
+    'PGDEDUPT': {'payment_item': 'PGDEDUPT', 'new': '79500', 'returning': '37700'},
+    'MSCISLR': {'payment_item': 'MSCISLR', 'new': '73500', 'returning': '42700'},
+    'MSCBAE': {'payment_item': 'MSCBAE', 'new': '73500', 'returning': '42700'},
+    'BENGMCH': {'payment_item': 'BENGMCH', 'new': '39500', 'returning': '9700'},
+    'PHDAQ': {'payment_item': 'PHDAQ', 'new': '91500', 'returning': '56200'},
+    'BAEDFDC': {'payment_item': 'BAEDFDC', 'new': '37500', 'returning': '7700'},
+    'BSCEDAP': {'payment_item': 'BSCEDAP', 'new': '39500', 'returning': '9700'},
+    'DAED': {'payment_item': 'DAED', 'new': '79500', 'returning': '43500'},
+    'MSCIR': {'payment_item': 'MSCIR', 'new': '73500', 'returning': '42700'},
+    'PGDEDUP': {'payment_item': 'PGDEDUP', 'new': '68500', 'returning': '39700'},
+    'MPHILPS': {'payment_item': 'MPHILPS', 'new': '73500', 'returning': '42700'},
+    'ADHFM': {'payment_item': 'ADHFM', 'new': '65500', 'returning': '29500'},
+    'MSCEGLY': {'payment_item': 'MSCEGLY', 'new': '73500', 'returning': '42700'},
+    'DFBS': {'payment_item': 'DFBS', 'new': '64500', 'returning': '22700'},
+    'CEHD': {'payment_item': 'CEHD', 'new': '62500', 'returning': '21700'},
+    'BBF': {'payment_item': 'BBF', 'new': '73500', 'returning': '32700'},
+    'PHDHOM': {'payment_item': 'PHDHOM', 'new': '91500', 'returning': '56200'},
+    'BAEDHIS': {'payment_item': 'BAEDHIS', 'new': '37500', 'returning': '7700'},
+    'BSCPAM': {'payment_item': 'BSCPAM', 'new': '39500', 'returning': '9700'},
+    'PHDPOL': {'payment_item': 'PHDPOL', 'new': '91500', 'returning': '56200'},
+    'PGDPEE': {'payment_item': 'PGDPEE', 'new': '79501', 'returning': '37701'},
+    'MSCCSC': {'payment_item': 'MSCCSC', 'new': '73500', 'returning': '42700'},
+    'MSCDEM': {'payment_item': 'MSCDEM', 'new': '73500', 'returning': '42700'},
+    'PHDSTR': {'payment_item': 'PHDSTR', 'new': '91500', 'returning': '56200'},
+    'DACES': {'payment_item': 'DACES', 'new': '67500', 'returning': '25700'},
+    'MSCFIMCB': {'payment_item': 'MSCFIMCB', 'new': '73500', 'returning': '42700'},
+    'PHDPPT': {'payment_item': 'PHDPPT', 'new': '91500', 'returning': '56200'},
+    'MPHILPPT': {'payment_item': 'MPHILPPT', 'new': '73500', 'returning': '42700'},
+    'BPA': {'payment_item': 'BPA', 'new': '73500', 'returning': '32700'},
+    'PGDANAES': {'payment_item': 'PGDANAES', 'new': '68500', 'returning': '39700'},
+    'BSCBOT': {'payment_item': 'BSCBOT', 'new': '39500', 'returning': '9700'},
+    'PHDMECH': {'payment_item': 'PHDMECH', 'new': '91500', 'returning': '56200'},
+    'MENGMAFM': {'payment_item': 'MENGMAFM', 'new': '73500', 'returning': '42700'},
+    'MSCEMED': {'payment_item': 'MSCEMED', 'new': '73500', 'returning': '42700'},
+    'BSCMLS': {'payment_item': 'BSCMLS', 'new': '39500', 'returning': '9700'},
+    'BIL': {'payment_item': 'BIL', 'new': '68500', 'returning': '27700'},
+    'BIH': {'payment_item': 'BIH', 'new': '68500', 'returning': '27700'},
+    'BIF': {'payment_item': 'BIF', 'new': '68500', 'returning': '27700'},
+    'PHDHRM': {'payment_item': 'PHDHRM', 'new': '91500', 'returning': '56200'},
+    'BENGIEE': {'payment_item': 'BENGIEE', 'new': '39500', 'returning': '9700'},
+    'BSCEDPS': {'payment_item': 'BSCEDPS', 'new': '37500', 'returning': '7700'},
+    'BIA': {'payment_item': 'BIA', 'new': '73500', 'returning': '32700'},
+    'MSCTMP': {'payment_item': 'MSCTMP', 'new': '73500', 'returning': '42700'},
+    'BSCOPT': {'payment_item': 'BSCOPT', 'new': '39500', 'returning': '9700'},
+    'BSCEDPE': {'payment_item': 'BSCEDPE', 'new': '39500', 'returning': '9700'},
+    'BIP': {'payment_item': 'BIP', 'new': '69500', 'returning': '27700'},
+    'BENGIEP': {'payment_item': 'BENGIEP', 'new': '39500', 'returning': '9700'},
+    'MSCGIS': {'payment_item': 'MSCGIS', 'new': '73500', 'returning': '42700'},
+    'BENGEEP': {'payment_item': 'BENGEEP', 'new': '39500', 'returning': '9700'},
+    'BSCAEB': {'payment_item': 'BSCAEB', 'new': '39500', 'returning': '9700'},
+    'MSCCRPS': {'payment_item': 'MSCCRPS', 'new': '73500', 'returning': '42700'},
+    'PHDEEE': {'payment_item': 'PHDEEE', 'new': '91500', 'returning': '56200'},
+    'PHDGIS': {'payment_item': 'PHDGIS', 'new': '91500', 'returning': '56200'},
+    'BENGEEE': {'payment_item': 'BENGEEE', 'new': '39500', 'returning': '9700'},
+    'DHT': {'payment_item': 'DHT', 'new': '68500', 'returning': '27700'},
+    'DHS': {'payment_item': 'DHS', 'new': '68500', 'returning': '32500'},
+    'MSCPC': {'payment_item': 'MSCPC', 'new': '73500', 'returning': '42700'},
+    'MSCPA': {'payment_item': 'MSCPA', 'new': '73500', 'returning': '42700'},
+    'DICE': {'payment_item': 'DICE', 'new': '69500', 'returning': '27700'},
+    'MAIHD': {'payment_item': 'MAIHD', 'new': '73500', 'returning': '42700'},
+    'MSCPT': {'payment_item': 'MSCPT', 'new': '73500', 'returning': '42700'},
+    'BENGCPP': {'payment_item': 'BENGCPP', 'new': '39500', 'returning': '9700'},
+    'MSCHE': {'payment_item': 'MSCHE', 'new': '73500', 'returning': '42700'},
+    'PHDINC': {'payment_item': 'PHDINC', 'new': '91500', 'returning': '56200'},
+    'BARTTXT': {'payment_item': 'BARTTXT', 'new': '37500', 'returning': '7700'},
+    'BSCEDBC': {'payment_item': 'BSCEDBC', 'new': '39500', 'returning': '9700'},
+    'PHDCRP': {'payment_item': 'PHDCRP', 'new': '91500', 'returning': '56200'},
+    'MFAPNT': {'payment_item': 'MFAPNT', 'new': '73500', 'returning': '42700'},
+    'BSCEDBE': {'payment_item': 'BSCEDBE', 'new': '39500', 'returning': '9700'},
+    'BARTPHL': {'payment_item': 'BARTPHL', 'new': '37500', 'returning': '7700'},
+    'BITESW': {'payment_item': 'BITESW', 'new': '64500', 'returning': '23700'},
+    'PHDME': {'payment_item': 'PHDME', 'new': '91500', 'returning': '56200'},
+    'PHDHED': {'payment_item': 'PHDHED', 'new': '91500', 'returning': '56200'},
+    'BSCPOL': {'payment_item': 'BSCPOL', 'new': '37500', 'returning': '7700'},
+    'DCG': {'payment_item': 'DCG', 'new': '60500', 'returning': '19700'},
+    'PHDGDS': {'payment_item': 'PHDGDS', 'new': '91500', 'returning': '56200'},
+    'PHDHEK': {'payment_item': 'PHDHEK', 'new': '91500', 'returning': '56200'},
+    'MENGMEDM': {'payment_item': 'MENGMEDM', 'new': '73500', 'returning': '42700'},
+    'BHECSW': {'payment_item': 'BHECSW', 'new': '63500', 'returning': '22700'},
+    'DCS': {'payment_item': 'DCS', 'new': '69500', 'returning': '27700'},
+    'PHDEM': {'payment_item': 'PHDEM', 'new': '91500', 'returning': '56200'},
+    'PHDSE': {'payment_item': 'PHDSE', 'new': '91500', 'returning': '56200'},
+    'BSCCHM': {'payment_item': 'BSCCHM', 'new': '39500', 'returning': '9700'},
+    'BSCCHP': {'payment_item': 'BSCCHP', 'new': '39500', 'returning': '9700'},
+    'PHDCSC': {'payment_item': 'PHDCSC', 'new': '91500', 'returning': '56200'},
+    'MSCMMCB': {'payment_item': 'MSCMMCB', 'new': '73500', 'returning': '42700'},
+    'MSCANS': {'payment_item': 'MSCANS', 'new': '73500', 'returning': '42700'},
+    'PHDACC': {'payment_item': 'PHDACC', 'new': '91500', 'returning': '56200'},
+    'BENGPRE': {'payment_item': 'BENGPRE', 'new': '39500', 'returning': '9700'},
+    'MBBSNDU': {'payment_item': 'MBBSNDU', 'new': '39500', 'returning': '9700'},
+    'MFACER': {'payment_item': 'MFACER', 'new': '73500', 'returning': '42700'},
+    'BAEDPNT': {'payment_item': 'BAEDPNT', 'new': '37500', 'returning': '7700'},
+    'PHD': {'payment_item': 'PHD', 'new': '121500', 'returning': '86200'},
+    'MSCSOS': {'payment_item': 'MSCSOS', 'new': '73500', 'returning': '42700'},
+    'DME': {'payment_item': 'DME', 'new': '64500', 'returning': '28500'},
+    'DMI': {'payment_item': 'DMI', 'new': '69500', 'returning': '27700'},
+    'MEDHEESE': {'payment_item': 'MEDHEESE', 'new': '73500', 'returning': '42700'},
+    'PHDECHM': {'payment_item': 'PHDECHM', 'new': '91500', 'returning': '56200'},
+    'MIHDP': {'payment_item': 'MIHDP', 'new': '85500', 'returning': '49500'},
+    'PGDMCB': {'payment_item': 'PGDMCB', 'new': '74500', 'returning': '32700'},
+    'BSCPPP': {'payment_item': 'BSCPPP', 'new': '39500', 'returning': '9700'},
+    'PHDCURR': {'payment_item': 'PHDCURR', 'new': '91500', 'returning': '56200'},
+    'BAEDFAA': {'payment_item': 'BAEDFAA', 'new': '37500', 'returning': '7700'},
+    'PHDIMIM': {'payment_item': 'PHDIMIM', 'new': '91500', 'returning': '56200'},
+    'MAFOL': {'payment_item': 'MAFOL', 'new': '73500', 'returning': '42700'},
+    'BAEDMD': {'payment_item': 'BAEDMD', 'new': '37500', 'returning': '7700'},
+    'MEDSOC': {'payment_item': 'MEDSOC', 'new': '73500', 'returning': '42700'},
+    'PHDMPP': {'payment_item': 'PHDMPP', 'new': '91500', 'returning': '56200'},
+    'MSCEM': {'payment_item': 'MSCEM', 'new': '73500', 'returning': '42700'},
+    'BSCEDEE': {'payment_item': 'BSCEDEE', 'new': '39500', 'returning': '9700'},
+    'PHDAEX': {'payment_item': 'PHDAEX', 'new': '91500', 'returning': '56200'},
+    'BSCEDEM': {'payment_item': 'BSCEDEM', 'new': '39500', 'returning': '9700'},
+    'DDP': {'payment_item': 'DDP', 'new': '69500', 'returning': '27700'},
+    'PHDBMPB': {'payment_item': 'PHDBMPB', 'new': '91500', 'returning': '56200'},
+    'PHDFM': {'payment_item': 'PHDFM', 'new': '91500', 'returning': '56200'},
+    'MPISLR': {'payment_item': 'MPISLR', 'new': '73500', 'returning': '42700'},
+    'BSCEDEV': {'payment_item': 'BSCEDEV', 'new': '39500', 'returning': '9700'},
+    'BCSCSW': {'payment_item': 'BCSCSW', 'new': '64500', 'returning': '23700'},
+    'BSCEDES': {'payment_item': 'BSCEDES', 'new': '37500', 'returning': '7700'},
+    'BGEOSW': {'payment_item': 'BGEOSW', 'new': '63500', 'returning': '22700'},
+    'BAGFIS': {'payment_item': 'BAGFIS', 'new': '39500', 'returning': '9700'},
+    'MSCGEG': {'payment_item': 'MSCGEG', 'new': '73500', 'returning': '42700'},
+    'PHDECOL': {'payment_item': 'PHDECOL', 'new': '91500', 'returning': '56200'},
+    'MSCGEN': {'payment_item': 'MSCGEN', 'new': '73500', 'returning': '42700'},
+    'MENGWR': {'payment_item': 'MENGWR', 'new': '73500', 'returning': '42700'},
+    'BEEL': {'payment_item': 'BEEL', 'new': '74500', 'returning': '32700'},
+    'DPAII': {'payment_item': 'DPAII', 'new': '68500', 'returning': '32500'},
+    'MEDMTH': {'payment_item': 'MEDMTH', 'new': '73500', 'returning': '42700'},
+    'BAGCRS': {'payment_item': 'BAGCRS', 'new': '39500', 'returning': '9700'},
+    'PGDTHR': {'payment_item': 'PGDTHR', 'new': '61500', 'returning': '32700'},
+    'MSCLA': {'payment_item': 'MSCLA', 'new': '73500', 'returning': '42700'},
+    'MSCUGRP': {'payment_item': 'MSCUGRP', 'new': '73500', 'returning': '42700'},
+    'MSCACC': {'payment_item': 'MSCACC', 'new': '73500', 'returning': '42700'},
+    'MFAPRT': {'payment_item': 'MFAPRT', 'new': '73500', 'returning': '42700'},
+    'PHDPHY': {'payment_item': 'PHDPHY', 'new': '91500', 'returning': '56200'},
+    'MPHILCP': {'payment_item': 'MPHILCP', 'new': '73500', 'returning': '42700'},
+    'BHEDSW': {'payment_item': 'BHEDSW', 'new': '64500', 'returning': '23700'},
+    'PHDCVE': {'payment_item': 'PHDCVE', 'new': '91500', 'returning': '56200'},
+    'BSCPBB': {'payment_item': 'BSCPBB', 'new': '39500', 'returning': '9700'},
+    'BMLS': {'payment_item': 'BMLS', 'new': '39500', 'returning': '9700'},
+    'PHDCRPS': {'payment_item': 'PHDCRPS', 'new': '91500', 'returning': '56200'},
+    'MSCCPD': {'payment_item': 'MSCCPD', 'new': '73500', 'returning': '42700'},
+    'BCS': {'payment_item': 'BCS', 'new': '71500', 'returning': '29700'},
+    'MSCPOLSC': {'payment_item': 'MSCPOLSC', 'new': '73500', 'returning': '42700'},
+    'MSCEPP': {'payment_item': 'MSCEPP', 'new': '73500', 'returning': '42700'},
+    'PGDEDU': {'payment_item': 'PGDEDU', 'new': '79500', 'returning': '43500'},
+    'MSCSCFPN': {'payment_item': 'MSCSCFPN', 'new': '73500', 'returning': '42700'},
+    'MPHILECO': {'payment_item': 'MPHILECO', 'new': '73500', 'returning': '42700'},
+    'PHDPRE': {'payment_item': 'PHDPRE', 'new': '91500', 'returning': '56200'},
+    'BAEDREL': {'payment_item': 'BAEDREL', 'new': '37500', 'returning': '7700'},
+    'BSCEDECO': {'payment_item': 'BSCEDECO', 'new': '37500', 'returning': '7700'},
+    'MSCMM': {'payment_item': 'MSCMM', 'new': '73500', 'returning': '42700'},
+    'MPINM': {'payment_item': 'MPINM', 'new': '73500', 'returning': '42700'},
+    'MENGMTPE': {'payment_item': 'MENGMTPE', 'new': '73500', 'returning': '42700'},
+    'MBAPT': {'payment_item': 'MBAPT', 'new': '85500', 'returning': '85200'},
+    'BADTSW': {'payment_item': 'BADTSW', 'new': '63500', 'returning': '22700'},
+    'PHDPHAMCB': {'payment_item': 'PHDPHAMCB', 'new': '91500', 'returning': '56200'},
+    'BSCAPOL': {'payment_item': 'BSCAPOL', 'new': '37500', 'returning': '7700'},
+    'BEDADT': {'payment_item': 'BEDADT', 'new': '37500', 'returning': '7700'},
+    'BSCEDWB': {'payment_item': 'BSCEDWB', 'new': '39500', 'returning': '9700'},
+    'MSCBCH': {'payment_item': 'MSCBCH', 'new': '73500', 'returning': '42700'},
+    'MBFE': {'payment_item': 'MBFE', 'new': '73500', 'returning': '42700'},
+    'PGDCHE': {'payment_item': 'PGDCHE', 'new': '79500', 'returning': '37700'},
+    'MPHACPP': {'payment_item': 'MPHACPP', 'new': '73500', 'returning': '42700'},
+    'DIL': {'payment_item': 'DIL', 'new': '68500', 'returning': '27700'},
+    'MSCECOL': {'payment_item': 'MSCECOL', 'new': '73500', 'returning': '42700'},
+    'BENGCHE': {'payment_item': 'BENGCHE', 'new': '39500', 'returning': '9700'},
+    'DIE': {'payment_item': 'DIE', 'new': '68500', 'returning': '27700'},
+    'DIF': {'payment_item': 'DIF', 'new': '58500', 'returning': '17700'},
+    'DIG': {'payment_item': 'DIG', 'new': '67500', 'returning': '25700'},
+    'DIA': {'payment_item': 'DIA', 'new': '68500', 'returning': '27700'},
+    'PHDBIOS': {'payment_item': 'PHDBIOS', 'new': '91500', 'returning': '56200'},
+    'PHDMTH': {'payment_item': 'PHDMTH', 'new': '91500', 'returning': '56200'},
+    'MSCAEE': {'payment_item': 'MSCAEE', 'new': '73500', 'returning': '42700'},
+    'MBF': {'payment_item': 'MBF', 'new': '73500', 'returning': '42700'},
+    'BENGMEE': {'payment_item': 'BENGMEE', 'new': '39500', 'returning': '9700'},
+    'MSCSW': {'payment_item': 'MSCSW', 'new': '73500', 'returning': '42700'},
+    'BENGCOM': {'payment_item': 'BENGCOM', 'new': '39500', 'returning': '9700'},
+    'MEDTED': {'payment_item': 'MEDTED', 'new': '73500', 'returning': '42700'},
+    'MSCAQ': {'payment_item': 'MSCAQ', 'new': '73500', 'returning': '42700'},
+    'BSCEDAC': {'payment_item': 'BSCEDAC', 'new': '39500', 'returning': '9700'},
+    'BSCEDAG': {'payment_item': 'BSCEDAG', 'new': '39500', 'returning': '9700'},
+    'MSCPHE': {'payment_item': 'MSCPHE', 'new': '73500', 'returning': '42700'},
+    'MPTMP': {'payment_item': 'MPTMP', 'new': '73500', 'returning': '42700'},
+    'MSCAC': {'payment_item': 'MSCAC', 'new': '73500', 'returning': '42700'},
+    'BMTHSW': {'payment_item': 'BMTHSW', 'new': '64500', 'returning': '23700'},
+    'MENGCHE': {'payment_item': 'MENGCHE', 'new': '73500', 'returning': '42700'},
+    'BSCSAA': {'payment_item': 'BSCSAA', 'new': '37500', 'returning': '7700'},
+    'DNAM': {'payment_item': 'DNAM', 'new': '68500', 'returning': '32500'},
+    'PHDPBB': {'payment_item': 'PHDPBB', 'new': '91500', 'returning': '56200'},
+    'PHDEMA': {'payment_item': 'PHDEMA', 'new': '91500', 'returning': '56200'},
+    'BSCAMTH': {'payment_item': 'BSCAMTH', 'new': '39500', 'returning': '9700'},
+    'DADT': {'payment_item': 'DADT', 'new': '79500', 'returning': '43500'},
+    'BSCEDMECO': {'payment_item': 'BSCEDMECO', 'new': '39500', 'returning': '9700'},
+    'MPHILPOL': {'payment_item': 'MPHILPOL', 'new': '73500', 'returning': '42700'},
+    'BSCEDSE': {'payment_item': 'BSCEDSE', 'new': '39500', 'returning': '9700'},
+    'MPENL': {'payment_item': 'MPENL', 'new': '73500', 'returning': '42700'},
+    'BSLT': {'payment_item': 'BSLT', 'new': '69500', 'returning': '27700'},
+    'MSCEPHM': {'payment_item': 'MSCEPHM', 'new': '73500', 'returning': '42700'},
+    'MPLDEM': {'payment_item': 'MPLDEM', 'new': '73500', 'returning': '42700'},
+    'MBBS': {'payment_item': 'MBBS', 'new': '39500', 'returning': '9700'},
+    'ODPT': {'payment_item': 'ODPT', 'new': '84500', 'returning': '42700'},
+    'BSCEDSS': {'payment_item': 'BSCEDSS', 'new': '37500', 'returning': '7700'},
+    'BERELSW': {'payment_item': 'BERELSW', 'new': '63500', 'returning': '22700'},
+    'BARTCER': {'payment_item': 'BARTCER', 'new': '37500', 'returning': '7700'},
+    'PGDEPRE': {'payment_item': 'PGDEPRE', 'new': '79500', 'returning': '37700'},
+    'BSCNUR': {'payment_item': 'BSCNUR', 'new': '39500', 'returning': '9700'},
+    'BPHARM': {'payment_item': 'BPHARM', 'new': '39500', 'returning': '9700'},
+    'MSCPHYS': {'payment_item': 'MSCPHYS', 'new': '73500', 'returning': '42700'},
+    'MSCPHYT': {'payment_item': 'MSCPHYT', 'new': '73500', 'returning': '42700'},
+    'MPSW': {'payment_item': 'MPSW', 'new': '73500', 'returning': '42700'},
+    'BEMGTSW': {'payment_item': 'BEMGTSW', 'new': '63500', 'returning': '22700'},
+    'MSCMPP': {'payment_item': 'MSCMPP', 'new': '73500', 'returning': '42700'},
+    'BCHESW': {'payment_item': 'BCHESW', 'new': '64500', 'returning': '23700'},
+    'BISCSW': {'payment_item': 'BISCSW', 'new': '64500', 'returning': '23700'},
+    'BSCEDMPOL': {'payment_item': 'BSCEDMPOL', 'new': '37500', 'returning': '7700'},
+    'BARTAPG': {'payment_item': 'BARTAPG', 'new': '37500', 'returning': '7700'},
+    'BARTAPM': {'payment_item': 'BARTAPM', 'new': '37500', 'returning': '7700'},
+    'PHDECO': {'payment_item': 'PHDECO', 'new': '91500', 'returning': '56200'},
+    'BARTSCP': {'payment_item': 'BARTSCP', 'new': '37500', 'returning': '7700'},
+    'BARTLAL': {'payment_item': 'BARTLAL', 'new': '37500', 'returning': '7700'},
+    'BAGANS': {'payment_item': 'BAGANS', 'new': '39500', 'returning': '9700'},
+    'BENGCVE': {'payment_item': 'BENGCVE', 'new': '39500', 'returning': '9700'},
+    'PGDCSC': {'payment_item': 'PGDCSC', 'new': '74500', 'returning': '32700'},
+    'MEDTEDPT': {'payment_item': 'MEDTEDPT', 'new': '78500', 'returning': '37700'},
+    'OD': {'payment_item': 'OD', 'new': '39500', 'returning': '9700'},
+    'MPBCH': {'payment_item': 'MPBCH', 'new': '73500', 'returning': '42700'},
+    'BECOSW': {'payment_item': 'BECOSW', 'new': '63500', 'returning': '22700'},
+    'PGDNRM': {'payment_item': 'PGDNRM', 'new': '74500', 'returning': '32700'},
+    'BSCMCB': {'payment_item': 'BSCMCB', 'new': '39500', 'returning': '9700'},
+    'MEDBUS': {'payment_item': 'MEDBUS', 'new': '73500', 'returning': '42700'},
+    'MSCEQM': {'payment_item': 'MSCEQM', 'new': '73500', 'returning': '42700'},
+    'MEDADT': {'payment_item': 'MEDADT', 'new': '73500', 'returning': '42700'},
+    'BENGGSE': {'payment_item': 'BENGGSE', 'new': '39500', 'returning': '9700'},
+    'BSCMTP': {'payment_item': 'BSCMTP', 'new': '39500', 'returning': '9700'},
+    'DICHE': {'payment_item': 'DICHE', 'new': '69500', 'returning': '27700'},
+    'DES': {'payment_item': 'DES', 'new': '64500', 'returning': '22700'},
+    'PHDGLY': {'payment_item': 'PHDGLY', 'new': '91500', 'returning': '56200'},
+    'DEM': {'payment_item': 'DEM', 'new': '68500', 'returning': '27700'},
+    'MSCECSF': {'payment_item': 'MSCECSF', 'new': '73500', 'returning': '42700'},
+    'BESTR': {'payment_item': 'BESTR', 'new': '74500', 'returning': '32700'},
+    'DEC': {'payment_item': 'DEC', 'new': '61500', 'returning': '28500'},
+    'MSCOR': {'payment_item': 'MSCOR', 'new': '73500', 'returning': '42700'},
+    'MSCCPFS': {'payment_item': 'MSCCPFS', 'new': '73500', 'returning': '42700'},
+    'MAALIN': {'payment_item': 'MAALIN', 'new': '73500', 'returning': '42700'},
+    'MSCPBB': {'payment_item': 'MSCPBB', 'new': '73500', 'returning': '42700'},
+    'MPBMPB': {'payment_item': 'MPBMPB', 'new': '73500', 'returning': '42700'},
+    'MSCGBM': {'payment_item': 'MSCGBM', 'new': '73500', 'returning': '42700'},
+    'MAALIT': {'payment_item': 'MAALIT', 'new': '73500', 'returning': '42700'},
+    'LLB': {'payment_item': 'LLB', 'new': '37500', 'returning': '7700'},
+    'MSCELEC': {'payment_item': 'MSCELEC', 'new': '73500', 'returning': '42700'},
+    'DHE': {'payment_item': 'DHE', 'new': '64500', 'returning': '28500'},
+    'MSCEDHEK': {'payment_item': 'MSCEDHEK', 'new': '73500', 'returning': '42700'},
+    'PHDENGG': {'payment_item': 'PHDENGG', 'new': '91500', 'returning': '56200'},
+    'MPACHM': {'payment_item': 'MPACHM', 'new': '73500', 'returning': '42700'},
+    'PHDSCED': {'payment_item': 'PHDSCED', 'new': '91500', 'returning': '56200'},
+    'DAIC': {'payment_item': 'DAIC', 'new': '64500', 'returning': '22700'},
+    'BSCEDMP': {'payment_item': 'BSCEDMP', 'new': '37500', 'returning': '7700'},
+    'PHDALIT': {'payment_item': 'PHDALIT', 'new': '91500', 'returning': '56200'},
+    'BARTMAS': {'payment_item': 'BARTMAS', 'new': '37500', 'returning': '7700'},
+    'BDS': {'payment_item': 'BDS', 'new': '39500', 'returning': '9700'},
+    'BSCEDME': {'payment_item': 'BSCEDME', 'new': '39500', 'returning': '9700'},
+    'MEDRCD': {'payment_item': 'MEDRCD', 'new': '73500', 'returning': '42700'},
+    'PHDTMP': {'payment_item': 'PHDTMP', 'new': '91500', 'returning': '56200'},
+    'MATS': {'payment_item': 'MATS', 'new': '73500', 'returning': '42700'},
+    'MPA': {'payment_item': 'MPA', 'new': '83500', 'returning': '42700'},
+    'BARTFAA': {'payment_item': 'BARTFAA', 'new': '37500', 'returning': '7700'},
+    'BPRE': {'payment_item': 'BPRE', 'new': '74500', 'returning': '32700'},
+    'BSCPHY': {'payment_item': 'BSCPHY', 'new': '39500', 'returning': '9700'},
+    'BSCPHS': {'payment_item': 'BSCPHS', 'new': '39500', 'returning': '9700'},
+    'BISD': {'payment_item': 'BISD', 'new': '68500', 'returning': '27700'},
+    'BARTFAP': {'payment_item': 'BARTFAP', 'new': '37500', 'returning': '7700'},
+    'PHDGM': {'payment_item': 'PHDGM', 'new': '91500', 'returning': '56200'},
+    'MSCEMGT': {'payment_item': 'MSCEMGT', 'new': '73500', 'returning': '42700'},
+    'MENGMHMT': {'payment_item': 'MENGMHMT', 'new': '73500', 'returning': '42700'},
+    'PHDLAW': {'payment_item': 'PHDLAW', 'new': '91500', 'returning': '56200'},
+    'MHIS': {'payment_item': 'MHIS', 'new': '73500', 'returning': '42700'},
+    'MEDEM': {'payment_item': 'MEDEM', 'new': '73500', 'returning': '42700'},
+    'MSCMTH': {'payment_item': 'MSCMTH', 'new': '73500', 'returning': '42700'},
+    'PHDMMCB': {'payment_item': 'PHDMMCB', 'new': '91500', 'returning': '56200'},
+    'BSCEDSOC': {'payment_item': 'BSCEDSOC', 'new': '37500', 'returning': '7700'},
+    'BEHKTSW': {'payment_item': 'BEHKTSW', 'new': '64500', 'returning': '23700'},
+    'MEDEAF': {'payment_item': 'MEDEAF', 'new': '73500', 'returning': '42700'},
+    'MATHR': {'payment_item': 'MATHR', 'new': '73500', 'returning': '42700'},
+    'MSCCHM': {'payment_item': 'MSCCHM', 'new': '73500', 'returning': '42700'},
+    'MBAFT': {'payment_item': 'MBAFT', 'new': '139500', 'returning': '110200'},
+    'BAEDEL': {'payment_item': 'BAEDEL', 'new': '37500', 'returning': '7700'},
+    'PHDETEL': {'payment_item': 'PHDETEL', 'new': '91500', 'returning': '56200'},
+    'BEMPSW': {'payment_item': 'BEMPSW', 'new': '63500', 'returning': '22700'},
+    'MEDSEPT': {'payment_item': 'MEDSEPT', 'new': '78500', 'returning': '37700'},
+    'BARTFOL': {'payment_item': 'BARTFOL', 'new': '37500', 'returning': '7700'},
+    'MSCHRM': {'payment_item': 'MSCHRM', 'new': '73500', 'returning': '42700'},
+    'BSCEDPOL': {'payment_item': 'BSCEDPOL', 'new': '37500', 'returning': '7700'},
+    'PHDAPM': {'payment_item': 'PHDAPM', 'new': '91500', 'returning': '56200'},
+    'MSCPG': {'payment_item': 'MSCPG', 'new': '73500', 'returning': '42700'},
+    'PGDTED': {'payment_item': 'PGDTED', 'new': '84500', 'returning': '48500'},
+    'BEHKNSW': {'payment_item': 'BEHKNSW', 'new': '64500', 'returning': '23700'},
+    'MSCPCHM': {'payment_item': 'MSCPCHM', 'new': '73500', 'returning': '42700'},
+    'BPOLSW': {'payment_item': 'BPOLSW', 'new': '63500', 'returning': '22700'},
+    'MSCECO': {'payment_item': 'MSCECO', 'new': '73500', 'returning': '42700'},
+    'BEPOLSW': {'payment_item': 'BEPOLSW', 'new': '63500', 'returning': '22700'},
+    'MSCHYD': {'payment_item': 'MSCHYD', 'new': '73500', 'returning': '42700'},
+    'BSCANA': {'payment_item': 'BSCANA', 'new': '39500', 'returning': '9700'},
+    'BSSTSW': {'payment_item': 'BSSTSW', 'new': '63500', 'returning': '22700'},
+    'PGDTEDP': {'payment_item': 'PGDTEDP', 'new': '84500', 'returning': '48500'},
+    'PHDCP': {'payment_item': 'PHDCP', 'new': '91500', 'returning': '56200'},
+    'MFASCP': {'payment_item': 'MFASCP', 'new': '73500', 'returning': '42700'},
+    'MENGPEE': {'payment_item': 'MENGPEE', 'new': '73500', 'returning': '42700'},
+    'CIE': {'payment_item': 'CIE', 'new': '62500', 'returning': '21700'},
+    'MPMTH': {'payment_item': 'MPMTH', 'new': '73500', 'returning': '42700'},
+    'BENGMEP': {'payment_item': 'BENGMEP', 'new': '39500', 'returning': '9700'},
+    'DISD': {'payment_item': 'DISD', 'new': '68500', 'returning': '27700'},
+    'MEDHME': {'payment_item': 'MEDHME', 'new': '73500', 'returning': '42700'},
+    'PHDEHYD': {'payment_item': 'PHDEHYD', 'new': '91500', 'returning': '56200'},
+    'MHPM': {'payment_item': 'MHPM', 'new': '85500', 'returning': '49500'},
+    'DAE': {'payment_item': 'DAE', 'new': '67500', 'returning': '25700'},
+    'DAC': {'payment_item': 'DAC', 'new': '61500', 'returning': '19700'},
+    'DAM': {'payment_item': 'DAM', 'new': '64500', 'returning': '22700'},
+    'BAPSAS': {'payment_item': 'BAPSAS', 'new': '37500', 'returning': '7700'},
+    'CEDH': {'payment_item': 'CEDH', 'new': '62500', 'returning': '21700'},
+    'MEDWED': {'payment_item': 'MEDWED', 'new': '73500', 'returning': '42700'},
+    'PHDPHED': {'payment_item': 'PHDPHED', 'new': '91500', 'returning': '56200'},
+    'MSCPPT': {'payment_item': 'MSCPPT', 'new': '73500', 'returning': '42700'},
+    'MASTERS OTHERS': {'payment_item': 'MASTERS OTHERS', 'new': '96000', 'returning': '67700'},
+    'PHDHIS': {'payment_item': 'PHDHIS', 'new': '91500', 'returning': '56200'},
+    'MENGCEST': {'payment_item': 'MENGCEST', 'new': '73500', 'returning': '42700'},
+    'PHDAEB': {'payment_item': 'PHDAEB', 'new': '91500', 'returning': '56200'},
+    'MEDTEET': {'payment_item': 'MEDTEET', 'new': '73500', 'returning': '42700'},
+    'BEHKESW': {'payment_item': 'BEHKESW', 'new': '64500', 'returning': '23700'},
+    'PHDAEE': {'payment_item': 'PHDAEE', 'new': '91500', 'returning': '56200'},
+    'BSCINM': {'payment_item': 'BSCINM', 'new': '39500', 'returning': '9700'},
+    'MSCPPB': {'payment_item': 'MSCPPB', 'new': '73500', 'returning': '42700'},
+    'BARTISD': {'payment_item': 'BARTISD', 'new': '68500', 'returning': '7700'},
+    'BAEDEDO': {'payment_item': 'BAEDEDO', 'new': '37500', 'returning': '7700'},
+    'BHISSW': {'payment_item': 'BHISSW', 'new': '63500', 'returning': '22700'},
+    'MAISD': {'payment_item': 'MAISD', 'new': '73500', 'returning': '42700'},
+    'MSCAEX': {'payment_item': 'MSCAEX', 'new': '73500', 'returning': '42700'},
+    'BSCINC': {'payment_item': 'BSCINC', 'new': '39500', 'returning': '9700'},
+    'PHDBCH': {'payment_item': 'PHDBCH', 'new': '91500', 'returning': '56200'},
+    'BSCEDIS': {'payment_item': 'BSCEDIS', 'new': '39500', 'returning': '9700'},
+    'PHDCFPN': {'payment_item': 'PHDCFPN', 'new': '91500', 'returning': '56200'},
+    'BSCEDGR': {'payment_item': 'BSCEDGR', 'new': '39500', 'returning': '9700'},
+    'MSCAEB': {'payment_item': 'MSCAEB', 'new': '73500', 'returning': '42700'},
+    'BSCINP': {'payment_item': 'BSCINP', 'new': '39500', 'returning': '9700'}
+    }
+
+#import csv
+#from Globals import INSTANCE_HOME
+#fees_path = "%s/import/fees.csv" % (INSTANCE_HOME)
+#reader = csv.DictReader(open(fees_path, 'r'))
+#lst = [i for i in reader]
+#all_fees = dict([(i['payment_item'],i) for i in lst])
+
+next_info = context.getNextInfo(brain)
+next_session_str = next_info['next_session_str']
+description = "School Fee for Session %s" % next_session_str 
+
+d = {} 
+
+if all_fees.has_key(brain.course):
+    d = all_fees[brain.course]
+    d['description'] = "%s (%s)" % (description,brain.course)
+    
+d['next_session_id'] = next_info['next_session_id']
+                                                    
+return d
+
Index: WAeUP_SRP/trunk/skins/waeup_uniben/pay_etranzact.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/pay_etranzact.py	(revision 7901)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/pay_etranzact.py	(revision 7901)
@@ -0,0 +1,97 @@
+##Script (Python) "pay_online"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=
+##
+# $Id$
+"""
+pay online
+"""
+from urllib import urlencode
+import logging
+logger = logging.getLogger('Skins.pay_etranzact')
+import DateTime
+
+if context.portal_membership.isAnonymousUser():
+    return None
+
+try:
+    from Products.zdb import set_trace
+except:
+    def set_trace():
+        pass
+request = context.REQUEST
+wftool = context.portal_workflow
+students = context.portal_url.getPortalObject().campus.students
+
+
+student_id = context.getStudentId()
+student = getattr(students,student_id)
+
+student_record = context.students_catalog.getRecordByKey(student_id)
+#amount,description = context.getSchoolFee(student_record.faculty,student_record.session,student_record.course)
+info = {}
+info['student'] = student_record
+info['payment_possible'] = False
+info['amount'] = '0'
+info['bank'] = ''
+info['type_description'] = ''
+info['pay_bill_to'] = ''
+fee_dict = context.getSchoolFee(student_record)
+#fulltime = student_record.mode.endswith('_ft')
+new = student_record.review_state == 'cleared_and_validated'
+returning = student_record.review_state == 'returning'
+if not fee_dict or not (new or returning) or not fee_dict['next_session_id'] in ('11','12','13'):
+    return context.etranzact_form(info=info)
+if new:
+    amount = info['amount'] = fee_dict['new']
+elif returning:
+    amount = info['amount'] = fee_dict['returning']
+info['surcharge'] = '0'  # Uniben doesn't show the surcharge on the slip
+info['payment_possible'] = True
+info['type_description'] = fee_dict['description']
+info['pay_bill_to'] = student_record.name
+info['pay_ship_to'] = "University of Benin"
+info['student_id'] = student_id
+info['student_name'] = student_record.name
+info['student_email'] = student_record.email
+#info['session_id'] = student_record.session   # this holds only for new students und must be replaced when also previous session students will pay online !!!!!!
+info['session_id'] = fee_dict['next_session_id']
+info['type'] = 'etranzact'
+info['status'] = 'started'
+info['item'] = student_record.course
+info['category'] = 'schoolfee'
+now = DateTime.DateTime()
+info['date'] = now
+timestamp = "%d" % int(now.timeTime()*1000)
+info['order_id'] = "%s%s" % (student_id[1:],timestamp)
+p_id = "p%s" % timestamp
+
+if student_id is None:
+    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
+
+if "payments" not in student.objectIds():
+    student.invokeFactory('PaymentsFolder','payments')
+    payments = getattr(student,'payments')
+    d = {}
+    d['Title'] = 'Payments'
+    payments.getContent().edit(mapping=d)
+    wftool.doActionFor(payments,'open')
+else:
+    payments = getattr(student,'payments')
+if request.has_key('epayment'):
+    return context.etranzact_form(info=info)
+
+payments.invokeFactory('Payment', p_id)
+payment = getattr(payments,p_id)
+wftool.doActionFor(payment,'open')
+d = {}
+d.update(info)
+payment.getContent().edit(mapping=d)
+logger.info('%(student_id)s initiated eTranzact school fee payment with order_id %(order_id)s' % info)
+
+return context.payments_view()
Index: WAeUP_SRP/trunk/skins/waeup_uniben/pay_interswitch.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/pay_interswitch.py	(revision 7901)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/pay_interswitch.py	(revision 7901)
@@ -0,0 +1,169 @@
+##Script (Python) "pay_online"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=
+##
+# $Id$
+"""
+pay online
+"""
+from urllib import urlencode
+import logging
+logger = logging.getLogger('Skins.pay_interswitch')
+import DateTime
+
+if context.portal_membership.isAnonymousUser():
+    return None
+
+try:
+    from Products.zdb import set_trace
+except:
+    def set_trace():
+        pass
+request = context.REQUEST
+wftool = context.portal_workflow
+students = context.portal_url.getPortalObject().campus.students
+
+
+student_id = context.getStudentId()
+student = getattr(students,student_id)
+
+student_record = context.students_catalog.getRecordByKey(student_id)
+#amount,description = context.getSchoolFee(student_record.faculty,student_record.session,student_record.course)
+info = {}
+info['student'] = student_record
+info['payment_possible'] = False
+info['amount'] = '0'
+info['bank'] = ''
+info['type_description'] = ''
+info['pay_bill_to'] = ''
+fee_dict = context.getSchoolFee(student_record)
+fulltime = student_record.mode.endswith('_ft')
+new = student_record.review_state == 'cleared_and_validated'
+returning = student_record.review_state == 'returning'
+if not fee_dict or not (new or returning) or not fee_dict['next_session_id'] in ('11','12','13'):
+    return context.interswitch_form(info=info)
+info['site_id'] = '57'
+info['currency_id'] = '566'
+if new:
+    amount = info['amount'] = fee_dict['new']
+elif returning:
+    amount = info['amount'] = fee_dict['returning']
+if fulltime:
+    pay_item_id = "5700"
+    info['bank'] = ''
+else:
+    pay_item_id = "5701"
+    info['bank'] = ''
+info['surcharge'] = '0'  # Uniben doesn't show the surcharge on the slip
+info['payment_possible'] = True
+info['type_description'] = fee_dict['description']
+info['pay_bill_to'] = student_record.name
+info['pay_ship_to'] = "University of Benin"
+info['student_id'] = student_id
+info['student_name'] = student_record.name
+info['student_email'] = student_record.email
+#info['session_id'] = student_record.session   # this holds only for new students und must be replaced when also previous session students will pay online !!!!!!
+info['session_id'] = fee_dict['next_session_id']
+info['type'] = 'online'
+info['status'] = 'started'
+info['item'] = student_record.course
+info['category'] = 'schoolfee'
+now = DateTime.DateTime()
+info['date'] = now
+timestamp = "%d" % int(now.timeTime()*1000)
+info['order_id'] = "%s%s" % (student_id[1:],timestamp)
+p_id = "p%s" % timestamp
+
+if student_id is None:
+    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
+
+if True or context.portal_url().find('uniben-demo.waeup.org') >-1 or\
+   context.portal_url().find('uniben.waeup.org') >-1:
+    #info['action'] = "https://webpay.interswitchng.com/test_paydirect/webpay/pay.aspx"
+    info['action'] = "https://webpay.interswitchng.com/paydirect/webpay/pay.aspx"
+else:
+    info['action'] = "%s/payments/%s/simulate_callback" % (student.absolute_url(),p_id)
+
+
+if "payments" not in student.objectIds():
+    student.invokeFactory('PaymentsFolder','payments')
+    payments = getattr(student,'payments')
+    d = {}
+    d['Title'] = 'Payments'
+    payments.getContent().edit(mapping=d)
+    wftool.doActionFor(payments,'open')
+else:
+    payments = getattr(student,'payments')
+if request.has_key('epayment'):
+    return context.interswitch_form(info=info)
+
+
+payments.invokeFactory('Payment', p_id)
+payment = getattr(payments,p_id)
+wftool.doActionFor(payment,'open')
+d = {}
+d.update(info)
+payment.getContent().edit(mapping=d)
+info['callback_url'] = "%s/payments/%s/interswitch_cb?echo=%s" % (student.absolute_url(),
+                                                                  p_id,
+                                                                  p_id)
+
+logger.info('%(student_id)s initiated online school fee payment with order_id %(order_id)s and callback url %(callback_url)s' % info)
+payment_fields = (('product_id','site_id'),
+                  ('site_redirect_url','callback_url'),
+                  ('Currency','currency_id'),
+                  ('cust_id','student_id'),
+                  ('cust_id_desc','type_description'),
+                  ('cust_name','student_name'),
+                  ('txn_ref','order_id'),
+                  ('Amount','amount'),
+                  )
+args = {}
+for arg,field in payment_fields:
+    args[arg] = info[field]
+itotal = int(amount)*100
+fbn_amount = 10000
+bt_amount = 75000
+interswitch_amount = 15000
+uniben_amount = itotal - fbn_amount - bt_amount - interswitch_amount
+xmldict = {}
+xmldict['detail_ref'] = args['txn_ref']
+xmldict['department'] = student_record.department
+xmldict['faculty'] = student_record.faculty
+xmldict['fbn_amt'] = "%d" % fbn_amount
+xmldict['bt_amt'] = "%d" % bt_amount
+xmldict['uniben_amt'] = "%d" % uniben_amount
+#Full and Part-time students School Fees go into different Accounts 
+if student_record.mode.endswith('_ft'):
+  xmldict['uniben_acct'] = "6162030000198"
+  xmldict['bank_id'] = '8'
+else:
+    xmldict['uniben_acct'] = "6162030000277"
+    xmldict['bank_id'] = '8' 
+
+xmltext = """<payment_item_detail>
+<item_details detail_ref="%(detail_ref)s" college="UNIBEN" department="%(department)s" faculty="%(faculty)s">
+<item_detail item_id="1" item_name="UNIBEN School Fee" item_amt="%(uniben_amt)s" bank_id="%(bank_id)s" acct_num="%(uniben_acct)s" />
+<item_detail item_id="2" item_name="BT" item_amt="%(bt_amt)s" bank_id="89" acct_num="0061001000021095" />
+<item_detail item_id="3" item_name="FBN" item_amt="%(fbn_amt)s" bank_id="8" acct_num="6162030000286" />
+</item_details>
+</payment_item_detail>""" % xmldict
+
+info['xml_data'] = """<input type="hidden" name="xml_data" value='%s'  />""" % xmltext
+
+args['Amount'] = "%d" % (itotal)
+args['site_name'] = "uniben.waeup.org"
+args['cust_name_desc'] = "Student Name"
+args['pay_item_id'] = pay_item_id
+args['pay_item_name'] = "UNIBEN Tuition Payments"
+args['payment_params'] = 'college_split'
+#args['xml_data'] = ''
+#args['xml_data'] = xmltext   # info['xml_data']can be used instead
+info['args'] = args
+
+return context.goto_interswitch_form(info=info)
Index: WAeUP_SRP/trunk/skins/waeup_uniben/payment_receipt.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/payment_receipt.pt	(revision 7900)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/payment_receipt.pt	(revision 7901)
@@ -8,5 +8,5 @@
       <span tal:condition="python: info">
         <metal:block tal:condition="info/is_online_pmt">
-        <h3>Online Payment Receipt</h3>
+        <h3>Interswitch Payment Receipt</h3>
         <br />
         <table tal:define="student info/student">
@@ -50,4 +50,87 @@
         
         
+        <metal:block tal:condition="info/is_etranzact_pmt">
+        <h3>eTranzact Payment Slip</h3>
+        <br />
+        <table tal:define="student info/student;
+                           pm nocall: info/payment_doc">
+        <tr>
+          <td width="220px">Name:</td>
+          <td><span tal:content="student/name" /></td>
+        </tr>
+        <tr>
+          <td>Student Id:</td>
+          <td tal:content="student/id" />
+        </tr>
+        <tr>
+          <td>Registration Number:</td>
+          <td tal:content="student/jamb_reg_no" />
+        </tr>
+        <tr>
+          <td>Matriculation Number:</td>
+          <td tal:content="student/matric_no" />
+        </tr>
+        <tr>
+          <td>Current Study Level:</td>
+          <td tal:content="python:context.portal_vocabularies.student_levels.get(student['level'])" />
+        </tr>
+        <tr>
+          <td>Certificate Id:</td>
+          <td tal:content="student/course" />
+        </tr>
+        <tr>
+          <td>Faculty:</td>
+          <td tal:content="student/faculty" />
+        </tr>
+        <tr>
+          <td>Department:</td>
+          <td tal:content="student/department" />
+        </tr>
+
+       <tr>
+          <td width="220px">Payment Status:</td>
+          <td><span tal:content="python:context.portal_vocabularies.payment_status.get(pm.status)" /></td>
+        </tr>
+        <tr>
+          <td width="220px">Payment Type:</td>
+
+          <td><span tal:content="python:context.portal_vocabularies.payment_types.get(pm.type)" /></td>
+        </tr>
+        <tr>
+          <td width="220px">Payment Category:</td>
+          <td><span tal:content="python:context.portal_vocabularies.payment_categories.get(pm.category)" /></td>
+        </tr>
+        <tr>
+          <td width="220px">Payment Item:</td>
+          <td><span tal:content="pm/item" /></td>
+        </tr>
+        <tr>
+          <td width="220px">Session:</td>
+          <td><span tal:content="python:context.portal_vocabularies.sessions.get(pm.session_id)" /></td>
+        </tr>
+
+        <tr>
+          <td width="220px">Slip Creation Date:</td>
+          <td><span tal:content='python:pm.date.strftime("%d/%m/%y %H:%M:%S")' /></td>
+        </tr>
+        <tr>
+          <td width="220px">Amount (Naira):</td>
+          <td><strong><span tal:content="pm/amount" /></strong></td>
+        </tr>
+        <tr>
+          <td width="220px">Transaction Id:</td>
+          <td><strong><span tal:content="pm/order_id" /></strong></td>
+        </tr>
+        <tr>
+          <td width="220px">Response Code:</td>
+          <td><span tal:content="pm/resp_code" /></td>
+        </tr>
+        <tr>
+          <td width="220px">Response Description:</td>
+          <td><span tal:content="pm/resp_desc" /></td>
+        </tr>
+        </table>
+
+        </metal:block>
         
         
@@ -86,5 +169,4 @@
           <td tal:content="student/department" />
         </tr>             
-
 
         <tr>
Index: WAeUP_SRP/trunk/skins/waeup_uniben/payments_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/payments_view.pt	(revision 7900)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/payments_view.pt	(revision 7901)
@@ -47,10 +47,17 @@
             </td>
             <td>
-              <a tal:condition="row/is_requeryable"
-                 tal:attributes="href row/href;
+              <a tal:condition="row/is_requeryable_interswitch"
+                 tal:attributes="href row/href_inter;
                  onclick python:'return window.confirm(\'%s\')' %(cpsmcat('Are you sure?'), );"
                  >
-                [requery]
+                [query Interswitch]
               </a>             
+            </td>
+            <td>
+              <a tal:condition="row/is_requeryable_etranzact"
+                 tal:attributes="href row/href_tranzact;"
+                 >
+                [query eTranzact]
+              </a>
             </td>
             <td>
@@ -72,23 +79,17 @@
                    class="context" 
                    value="Pay"
-                   tal:attributes="value string:Initiate ${info/next_session_str} School Fee Payment by Cash Card"
+                   tal:attributes="value string:Initiate ${info/next_session_str} School Fee Payment (Interswitch)"
                    />
           </form>  
-          <form tal:condition="python: info.get('payment_method') in ('first_instalment',)" 
-                tal:attributes="action string: ${context/absolute_url}/pay_interswitch" method="post" class="group">
-            <input type="submit" name="epayment" 
-                   class="context" 
+
+          <form tal:condition="python: info.get('payment_method') in ('online_payment','both_payments')"
+                tal:attributes="action string: ${context/absolute_url}/pay_etranzact" method="post" class="group">
+            <input type="submit" name="epayment"
+                   class="context"
                    value="Pay"
-                   tal:attributes="value string:Initiate ${info/next_session_str} School Fee Payment by Cash Card (First Instalment)"
+                   tal:attributes="value string:Initiate ${info/next_session_str} School Fee Payment (eTranzact)"
                    />
-          </form>  
-          <form tal:condition="python: info.get('payment_method') in ('second_instalment',)" 
-                tal:attributes="action string: ${context/absolute_url}/pay_interswitch2" method="post" class="group">
-            <input type="submit" name="epayment" 
-                   class="context" 
-                   value="Pay"
-                   tal:attributes="value string:Initiate School Fee Payment by Cash Card (Second Instalment)"
-                   />
-          </form>                       
+          </form>
+
           <form tal:condition="python: info.get('payment_method') in ('sc_payment','both_payments')" 
                 tal:attributes="action string: ${context/absolute_url}/pay_by_sc" method="post" class="group">
@@ -99,5 +100,5 @@
                    class="context" 
                    value="Pay"
-                   tal:attributes="value string:Initiate ${info/next_session_str} School Fee Payment by Scratch Card"
+                   tal:attributes="value string:Initiate ${info/next_session_str} School Fee Payment (Scratch Card)"
                    />
           </form>    
Index: WAeUP_SRP/trunk/skins/waeup_uniben/tranzact_cb.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_uniben/tranzact_cb.py	(revision 7901)
+++ WAeUP_SRP/trunk/skins/waeup_uniben/tranzact_cb.py	(revision 7901)
@@ -0,0 +1,195 @@
+## Script (Python) "tranzact_cb"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=
+##
+# $Id$
+"""
+payment callback
+"""
+import logging
+logger = logging.getLogger('Skins.etranzact_cb')
+from AccessControl import Unauthorized
+import DateTime
+
+if context.portal_membership.isAnonymousUser():
+    return None
+
+request = context.REQUEST
+students = context.portal_url.getPortalObject().campus.students
+wftool = context.portal_workflow
+mtool = context.portal_membership
+member = mtool.getAuthenticatedMember()
+member_id = str(member)
+#student_id = context.getStudentId()
+access_info = context.waeup_tool.getAccessInfo(context)
+student_id = access_info['student_id']
+if not context.isSectionOfficer() and (student_id is None or student_id != member_id):
+    logger.info('%s tried to access payment object of %s' % (member_id,student_id))
+    referer = request.get('HTTP_REFERER','none')
+    logger.info('%s:%s illegal access, referer = %s' % (member_id,student_id,referer))
+    real_ip = request.get('HTTP_X_REAL_IP',"none")
+    logger.info('%s:%s illegal access, real_x_ip = %s' % (member_id,student_id,real_ip))
+    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
+
+referer = request.get('HTTP_REFERER','none')
+real_ip = request.get('HTTP_X_REAL_IP',"none")
+logger.info('%s, callback referer = %s, IP = %s' % (student_id,referer,real_ip))
+
+ontest = True
+
+if not ontest and not 'webpay.interswitchng.com' in referer and not 'waeup.org' in referer:
+    logger.info('%s, wrong callback referer %s, callback rejected, IP = %s' % (student_id,referer,real_ip))
+    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
+
+student = getattr(students,student_id)
+
+success = request.get('SUCCESS')
+
+logger.info('SUCCESS: %s' % success)
+
+if success == '-1':
+    logger.info('%s requeried payment %s for %s without success' % (member,context.getId(),student_id))
+    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
+
+
+# Example:
+#'RECEIPT_NO=5001109085339
+#&PAYMENT_CODE=500856521315472785095
+#&MERCHANT_CODE=0570019903
+#&TRANS_AMOUNT=5000.0
+#&TRANS_DATE=2011/09/08 10:06:31
+#&TRANS_DESCR=Trade%20-%20Tel%20line%20installation%20EO20474-Obinna%20Mbagwu
+#&CUSTOMER_ID=EO20474
+#&BANK_CODE=500
+#&BRANCH_CODE=001
+#&SERVICE_ID=EO20474
+#&CUSTOMER_NAME=Obinna%20Mbagwu
+#&CUSTOMER_ADDRESS=No%207%20Park%20View%20Estate%20Ikoyi
+#&TELLER_ID=etzbankteller
+#&USERNAME=N/A
+#&PASSWORD=N/A
+#&BANK_NAME=eTranzact%20Test%20Bank
+#&BRANCH_NAME=ETZ%20BANK%20HEAD%20OFFICE
+#&CHANNEL_NAME=Bank
+#&PAYMENT_METHOD_NAME=Cash
+#&PAYMENT_CURRENCY=566
+#&TRANS_TYPE=002
+#&TRANS_FEE=0.0
+#&TYPE_NAME=Trade%20-%20Tel%20line%20installation
+#&LEAD_BANK_CODE=057
+#&LEAD_BANK_NAME=eTranzact%20Test%20Bank'
+
+
+success = request.get('SUCCESS').split('&')
+success_dict = dict([tuple(i.split('=')) for i in success])
+
+pay_doc = context.getContent()
+
+if pay_doc['order_id'] != success_dict['PAYMENT_CODE']:
+    logger.info('%s requeried payment %s for %s but wrong payment code %s returned' % (member,context.getId(),student_id,success_dict['PAYMENT_CODE']))
+    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
+
+if pay_doc['amount'] != success_dict['TRANS_AMOUNT']:
+    logger.info('%s requeried payment %s for %s but wrong amount %s returned' % (member,context.getId(),student_id,success_dict['TRANS_AMOUNT']))
+    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
+
+pd['resp_desc'] = success_dict['TRANS_DESCR']
+pd['resp_pay_reference'] = success_dict['RECEIPT_NO']
+pd['resp_code'] = '00'
+pd['resp_approved_amount'] = success_dict['TRANS_AMOUNT']
+
+pay_doc.edit(mapping = pd)
+
+s_brain = context.students_catalog(id=student_id)[0]
+session = s_brain.session
+
+next_info = context.getNextInfo(s_brain)
+next_session_id = next_info['next_session_id']
+next_session_str = next_info['next_session_str']
+next_level_id = next_info['next_level_id']
+next_transition = next_info['next_transition']
+next_verdict = next_info['next_verdict']
+next_previous_verdict = next_info['next_previous_verdict']
+if  resp == '00':
+    if pay_doc.category == 'schoolfee':
+        if context.getStudentReviewState() == "school_fee_paid":
+            logger.info('%s paid school_fee in state school_fee_paid' % (student_id))
+        else:
+            study_course = getattr(student,'study_course')
+            try:
+                wftool.doActionFor(study_course,'open')
+            except:
+                pass
+            verdict = s_brain.verdict
+            if next_previous_verdict == 'N/A':
+                next_previous_verdict = ''
+            study_course.getContent().edit(mapping= {'current_level': next_level_id,
+                                                     'current_session': next_session_id,
+                                                     'current_verdict': next_verdict,
+                                                     'previous_verdict': next_previous_verdict,
+                                                     })
+            if next_transition:
+                wftool.doActionFor(student,next_transition)
+
+
+    elif pay_doc.category == 'hostel_maintenance':
+
+        ## callback function for accommodation_catalog method
+        data={}
+        data['acco_maint_date'] = pay_doc.date
+        data['catkey'] =student_id + '|' + pay_doc.session_id
+        data['acco_maint_fee'] = pay_doc.amount
+        data['acco_maint_pay_id'] = context.getId()
+        data['reservation_status'] = 'maintenance_fee_paid'
+        context.accommodation_catalog.modifyRecord(**data)
+
+        ## callback function for accommodation object method (deactivated since March 2011)
+        #acco_info = context.getAccommodationInfo()
+        #d = {}
+        #d['acco_maint_date'] = pay_doc.date
+        #d['acco_maint_fee'] = pay_doc.amount
+        #d['acco_maint_pay_id'] = context.getId()
+        #try:
+        #    acco_info['acco_doc'].edit(mapping=d)
+        #except:
+        #    logger.info('%s requeried payment though maintenance already paid' % student_id)
+        #try:
+        #    wftool.doActionFor(acco_info['acco'],'pay_maintenance_fee',dest_container=acco_info['acco'])
+        #except:
+        #    logger.info('%s no workflow action pay_maintenance_fee' % student_id)
+
+    elif pay_doc.category == 'acceptance':
+        if context.getStudentReviewState() in ('admitted', 'objection_raised'):
+            logger.info('%s paid acceptance fee' % (student_id))
+            current = DateTime.DateTime()
+            wf = context.portal_workflow
+            info = context.getClearanceInfo()
+            wftool.doActionFor(student,'enter_clearance_pin')
+            context.waeup_tool.changeWorkflowState(info['clear'], 'opened')
+            context.waeup_tool.changeWorkflowState(info['app'], 'closed')
+            dc = {}
+            app_doc = info['app_doc']
+            #dc['clr_ac_pin'] = pay_doc.order_id
+            dc['clr_ac_date'] = current
+            dc['entry_date'] = current
+            info['clear_doc'].edit(mapping = dc)
+            if info['penalty']:
+                logger.info('%s started late clearance' % (info['id']))
+            #return redirect("%s/clearance_edit_form" % info['clear'].absolute_url())
+
+    logger.info('%s received valid callback' % student_id)
+
+else:
+    logger.info('%s received unsuccessful callback: %s' % (student_id,pd['resp_desc']))
+
+#review_state = wftool.getInfoFor(context,'review_state',None)
+#if review_state == 'opened':
+#    wftool.doActionFor(context,'close')
+context.waeup_tool.changeWorkflowState(context, 'closed')
+
+return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
