Index: main/waeup.aaue/trunk/src/waeup/aaue/interswitch/browser.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/interswitch/browser.py	(revision 17429)
+++ main/waeup.aaue/trunk/src/waeup/aaue/interswitch/browser.py	(revision 17431)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
-## $Id$
+    # -*- coding: utf-8 -*-
+## $Id: browser.py 17429 2023-06-05 04:34:30Z henrik $
 ##
 ## Copyright (C) 2012 Uli Fouquet & Henrik Bettermann
@@ -9,5 +9,5 @@
 ##
 ## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## but WITHOUT ANY WARRANTY; without even the implied warranty ofself.context.amount_auth
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU General Public License for more details.
@@ -20,4 +20,6 @@
 import hashlib
 import grok
+import os
+import csv
 from xml.dom import minidom
 from zope.interface import Interface
@@ -30,4 +32,5 @@
     InterswitchPaymentVerifyWebservicePageStudent,
     InterswitchPageStudent, InterswitchPageApplicant,
+    module_activated,
     )
 from waeup.aaue.students.interfaces import ICustomStudentOnlinePayment
@@ -35,6 +38,5 @@
 from waeup.aaue.interfaces import MessageFactory as _
 
-PRODUCT_ID_PT = '5040'
-PRODUCT_ID_REGULAR = '5845'
+PRODUCT_ID = '5845'
 SITE_NAME = 'aaue.waeup.org'
 PROVIDER_ACCT = '0200244434'
@@ -49,39 +51,32 @@
 URL = '/paydirect/api/v1/gettransaction.json'
 HTTPS = True
-MAC_REGULAR = '9718FA00B0F5070B388A9896ADCED9B2FB02D30F71E12E68BDADC63F6852A3496FF97D8A0F9DA9F753B911A49BB09BB87B55FD02046BD325C74C46C0123CF023'
-MAC_PT = '74424F1DFECD6058F153148255CDD55E16724B4F380ADB2C63C5D1D7A5675759010C8153DCB930AAF2D38903CBF7CE32B8A6BA2C16BBC46721DF2E3F3E4548E3'
+MAC = '9718FA00B0F5070B388A9896ADCED9B2FB02D30F71E12E68BDADC63F6852A3496FF97D8A0F9DA9F753B911A49BB09BB87B55FD02046BD325C74C46C0123CF023'
 
 httplib.HTTPSConnection.debuglevel = 0
 
-
-def gateway_net_amt(fee):
-    if fee > GATEWAY_AMT:
-        return fee - GATEWAY_AMT
-    return 0.0
-
-def contr_agreement_applicant(applicant):
-    if applicant.__parent__.prefix in (
-        'fp',
-        'ptee',
-        'dsh',
-        'bridge',
-        'ijmbe',
-        ):
-        return 'first'
-    return 'second'
-
-def contr_agreement_student(student):
-    if student.current_mode in (
-        'found',
-        'bridge',
-        'ug_dsh',
-        'de_dsh',
-        'ug_pt',
-        'de_pt',
-        'dp_pt',
-        'ijmbe',
-        ):
-        return 'first'
-    return 'second'
+BANK_ACCOUNTS = {
+    'edohis':   ('1222577132', '117', 'Edo State Health Insurance'),
+    'union':    ('1019763348', '7', 'Student Union'),
+    'sport':    ('1021941220', '7', 'Sport Development'),
+    'access':   ('1012688013', '123', 'Access Card'),
+    'notebook': ('4011210501', '51', 'Branded Notebook'),
+    'library':  ('2000122995', '8', 'Library Development'),
+    'fac1':     ('1022438743', '7', 'Faculty Fee'),
+    'fac2':     ('2000249757', '8', 'Faculty Fee'),
+    'fac3':     ('1012678566', '123', 'Faculty Fee'),
+    'acceptance': ('2000249757', '8', 'Acceptance Fee'),
+    'matricgown': ('2000249757', '8', 'Matriculation Gown Fee'),
+    'lapel':      ('2000249757', '8', 'Lapel Fee'),
+    }
+
+schoolfees_path = os.path.join(
+    os.path.dirname(__file__), '../students/schoolfees.csv')
+reader = csv.DictReader(open(schoolfees_path, 'rb'))
+SCHOOLFEES = {item['code']:item for item in reader}
+
+acceptancefees_path = os.path.join(
+    os.path.dirname(__file__), '../students/acceptancefees.csv')
+reader = csv.DictReader(open(acceptancefees_path, 'rb'))
+ACCEPTANCEFEES = {item['code']:item for item in reader}
 
 class CustomInterswitchPageApplicant(InterswitchPageApplicant):
@@ -97,9 +92,12 @@
     provider_bank_id = PROVIDER_BANK_ID
     provider_acct = PROVIDER_ACCT
-    institution_acct = '1010835352'
-    institution_bank_id = '117'
+    pay_item_id = '101'
 
     def update(self):
-
+        if not module_activated(
+            self.context.__parent__.__parent__.year, self.context):
+            self.flash(_('Forbidden'), type='danger')
+            self.redirect(self.url(self.context, '@@index'))
+            return
         error = self.init_update()
         if error:
@@ -107,64 +105,28 @@
             self.redirect(self.url(self.context, '@@index'))
             return
-        self.context.r_company = u'interswitch'
+        # Already now it becomes an Interswitch payment. We set the net amount
+        # and add the gateway amount.
+        if not self.context.r_company:
+            self.context.net_amt = self.context.amount_auth
+            self.context.amount_auth += GATEWAY_AMT
+            self.context.gateway_amt = GATEWAY_AMT
+            self.context.r_company = u'interswitch'
+        xmldict = {}
         provider_amt = 2000.0
-        fedex_amt = 0.0
-        if contr_agreement_applicant(self.applicant) == 'first':
-            self.product_id = PRODUCT_ID_PT
-            self.pay_item_id = '101'
-            self.mac = MAC_PT
-            if self.applicant.__parent__.prefix == 'ijmbe':
-                self.institution_bank_id = '123'
-                self.institution_acct = '1012278272'
-        else:
-            self.product_id = PRODUCT_ID_REGULAR
-            self.pay_item_id = '109'
-            self.mac = MAC_REGULAR
-            if self.applicant.__parent__.prefix in ('utme', 'ude'):
-                provider_amt = 1000.0
-            elif self.applicant.__parent__.prefix in ('trans', 'cert'):
-                self.institution_acct = '1010827641'
-                self.institution_bank_id = '117'
-                self.provider_bank_id = '10'
-                self.provider_acct = '0427773399'
-                if self.applicant.applicant_id[:5] in ('cert7', 'cert8'):
-                    provider_amt = 0.0
-                if self.applicant.applicant_id[:6] in ('trans5', 'trans6'):
-                    self.institution_acct = '5210006575'
-                    self.institution_bank_id = '51'
-                #if self.applicant.applicant_id[:6] in ('trans1', 'trans6'):
-                #    fedex_amt = 10500.0
-                if self.context.p_category == 'app_balance':
-                    provider_amt = 0.0
-            elif self.applicant.applicant_id.startswith('bridge'): # easier to test
-                self.institution_acct = '1014847058'
-                self.institution_bank_id = '7'
-            elif self.applicant.applicant_id.startswith('dsh'): # easier to test
-                self.institution_acct = '1014847058'
-                self.institution_bank_id = '7'
-            elif self.applicant.__parent__.prefix in ('ver', 'send'):
-                provider_amt = 0.0
-            elif self.applicant.__parent__.prefix == 'fedex':
-                provider_amt = 0.0
-                self.institution_acct = '0001115694'
-                self.institution_bank_id = '10'
-            elif self.applicant.applicant_id.startswith('pg'):
-                self.institution_acct = '5210006575'
-                self.institution_bank_id = '51'
-
-        xmldict = {}
+        if self.applicant.applicant_id.startswith('trans'):
+            provider_amt = 3000.0
+        xmldict['institution_acct'] = '00000000'
+        xmldict['institution_bank_id'] = '00'
         xmldict['detail_ref'] = self.context.p_id
         xmldict['provider_amt'] = 100 * provider_amt
-        xmldict['provider_acct'] = self.provider_acct
-        xmldict['provider_bank_id'] = self.provider_bank_id
+        xmldict['provider_acct'] = PROVIDER_ACCT
+        xmldict['provider_bank_id'] = PROVIDER_BANK_ID
         xmldict['provider_item_name'] = PROVIDER_ITEM_NAME
-        xmldict['institution_acct'] = self.institution_acct
-        xmldict['institution_bank_id'] = self.institution_bank_id
-        xmldict['institution_item_name'] = self.category
+        xmldict['institution_item_name'] = self.context.category
         xmldict['institution_name'] = INSTITUTION_NAME
-        xmldict['fedex_amt'] = 100 * fedex_amt
-        xmldict['institution_amt'] = 100 * (
-            self.context.amount_auth - provider_amt - fedex_amt - GATEWAY_AMT)
-
+        xmldict['institution_amt'] = 100 * self.context.net_amt
+        if not self.context.provider_amt:
+            self.context.provider_amt = provider_amt
+            self.context.amount_auth += provider_amt
         xmltext = """<payment_item_detail>
 <item_details detail_ref="%(detail_ref)s" college="%(institution_name)s">
@@ -173,37 +135,5 @@
 </item_details>
 </payment_item_detail>""" % xmldict
-
-        if provider_amt == 0.0:
-            xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-        if fedex_amt:
-            xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="FedEx" item_amt="%(fedex_amt)d" bank_id="10" acct_num="0001115694" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-        if self.applicant.applicant_id.startswith('pg'):
-            handbook_amount = 2000.0
-            xmldict['handbook_amount'] = 100 * handbook_amount
-            xmldict['institution_amt'] = 100 * (
-                self.context.amount_auth - provider_amt - handbook_amount -GATEWAY_AMT)
-            xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="PG Handbook" item_amt="%(handbook_amount)d" bank_id="51" acct_num="5210006575" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
         self.xml_data = """<input type="hidden" name="xml_data" value='%s'  />""" % xmltext
-        self.context.provider_amt = provider_amt
-        self.context.gateway_amt = GATEWAY_AMT
         xmlitems = ''
         xmldoc = minidom.parseString(xmltext)
@@ -221,11 +151,10 @@
         hashargs = (
             self.context.p_id +
-            self.product_id +
+            PRODUCT_ID +
             self.pay_item_id +
             str(int(self.amount_auth)) +
             self.site_redirect_url +
-            self.mac)
+            MAC)
         self.hashvalue = hashlib.sha512(hashargs).hexdigest()
-
         return
 
@@ -238,7 +167,12 @@
     site_name = SITE_NAME
     currency = CURRENCY
-    pay_item_id = '000'
+    pay_item_id = '101'
 
     def update(self):
+        if not module_activated(
+            self.context.student.current_session, self.context):
+            self.flash(_('Forbidden'), type='danger')
+            self.redirect(self.url(self.context, '@@index'))
+            return
         error = self.init_update()
         if error:
@@ -246,410 +180,129 @@
             self.redirect(self.url(self.context, '@@index'))
             return
-        self.context.r_company = u'interswitch'
+        category = self.context.p_category
+        # Already now it becomes an Interswitch payment. We set the net amount
+        # and add the gateway amount.
+        if not self.context.r_company:
+            self.context.net_amt = self.context.amount_auth
+            self.context.amount_auth += GATEWAY_AMT
+            self.context.gateway_amt = GATEWAY_AMT
+            self.context.r_company = u'interswitch'
         student = self.student
-        p_session = self.context.p_session
-        try:
-            academic_session = grok.getSite()['configuration'][str(p_session)]
-        except KeyError:
-            self.flash(_(u'Session configuration object is not available.'),
-                       type='danger')
-            self.redirect(self.url(self.context, '@@index'))
-            return
-        if contr_agreement_student(student) == 'first':
-            self.product_id = PRODUCT_ID_PT
-            self.mac = MAC_PT
-        else:
-            self.product_id = PRODUCT_ID_REGULAR
-            self.mac = MAC_REGULAR
-
-        # To guarantee that cleared students pay both acceptance fee
-        # and school fees, the page can only be accessed
-        # for school fee payments if acceptance/clearance fee has
-        # been successfully queried/paid beforehand. This
-        # requirement applies to students in state 'cleared' and
-        # entry_session greater than 2012 only.
-        if self.context.p_category.startswith('schoolfee') and \
-            student.state == CLEARED and \
-            student.entry_session > 2012:
-            acceptance_fee_paid = False
-            for ticket in student['payments'].values():
-                if ticket.p_state == 'paid' and \
-                    ticket.p_category.startswith('clearance'):
-                    acceptance_fee_paid = True
-                    break
-            if not acceptance_fee_paid:
-                self.flash(
-                    _('Please pay acceptance fee first.'), type="danger")
-                self.redirect(self.url(self.context, '@@index'))
-                return
-
         xmldict = self.xmldict
-        xmltext = ""
-        xmldict['institution_acct'] = '1010827641'
-        xmldict['institution_bank_id'] = '117'
+        # Provider data
         xmldict['detail_ref'] = self.context.p_id
         xmldict['provider_acct'] = PROVIDER_ACCT
         xmldict['provider_bank_id'] = PROVIDER_BANK_ID
         xmldict['provider_item_name'] = PROVIDER_ITEM_NAME
-        xmldict['institution_item_name'] = self.category
+        # Institution data
+        xmldict['institution_acct'] = '00000000'
+        xmldict['institution_bank_id'] = '00'
+        provider_amt = 0.0
+        if category.startswith('clearance'):
+            provider_amt = 1500.0
+        elif category.startswith('hostel_maintenance'):
+            provider_amt = 1000.0
+        elif category in ('schoolfee', 'schoolfee_1', 'schoolfee_incl'):
+            provider_amt = 2500.0
+        xmldict['provider_amt'] = 100 * provider_amt
+        xmldict['institution_item_name'] = self.context.category
         xmldict['institution_name'] = INSTITUTION_NAME
-        provider_amt = 0.0
-        xmldict['institution_amt'] = 100 * (
-            gateway_net_amt(self.context.amount_auth))
-
-        # Schoolfee
-        if self.context.p_category.startswith('schoolfee'):
-            if contr_agreement_student(student) == 'first':
-                # First agreement
-                provider_amt = 1900.0
-                joint_venture_amt = 0.0
-                aaue_share_amt = 0.0
-                student_union_due_amt = gateway_net_amt(
-                    academic_session.union_fee)
-                student_welfare_assurance_amt = gateway_net_amt(
-                    academic_session.welfare_fee)
-                sports_amt = gateway_net_amt(
-                    academic_session.sports_fee)
-                library_amt = gateway_net_amt(
-                    academic_session.library_fee)
-                library_amt_pg = gateway_net_amt(
-                    academic_session.library_pg_fee)
-                lms_sund_amt = gateway_net_amt(
-                    academic_session.lms_sund_fee)
-                xmldict['student_union_bank_id'] = '31'
-                xmldict['student_union_acct'] = '0051005007'
-                xmldict['aaue_share_bank_id'] = '117'
-                xmldict['aaue_share_acct'] = '1010827641'
-                xmldict['joint_venture_bank_id'] = '117'
-                xmldict['joint_venture_acct'] = '1010827641'
-                xmldict['institution_acct'] = '1014847058'
-                xmldict['institution_bank_id'] = '7'
-                self.pay_item_id = '105'
-                if student.current_mode == 'found':
-                    self.pay_item_id = '103'
-                elif student.current_mode == 'ijmbe':
-                    self.pay_item_id = '103'
-                    xmldict['institution_bank_id'] = '123'
-                    xmldict['institution_acct'] = '1012278272'
+        xmldict['institution_amt'] = 100 * self.context.net_amt
+        if not self.context.provider_amt:
+            self.context.provider_amt = provider_amt
+            self.context.amount_auth += provider_amt
+        xmltext = ''
+
+        # School fee
+        if category.startswith('schoolfee'):
+            # collect additional fees
+            if self.context.p_category in ('schoolfee_1', 'schoolfee_incl'):
+                xmltext = """<payment_item_detail>
+<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">""" % xmldict
+                item_id = 1
+                for item in SCHOOLFEES[student.certcode].items():
+                    try:
+                        item_amt = 100 * int(item[1])
+                        if self.context.p_category == 'schoolfee_1' and item[0] == 'tuition':
+                            item_amt /= 2
+                        acct_num = ''
+                        bank_id = ''
+                        item_name = ''
+                        # Find appropriate bank
+                        try:
+                            bank = BANK_ACCOUNTS[item[0]]
+                        except: # transfer to faculty account
+                            if student.faccode in ('FAG', 'FAT', 'FBM', 'FMLS', 'fac1'):
+                                bank = BANK_ACCOUNTS['fac1']
+                            elif student.faccode in ('FCS', 'FED', 'FES', 'FET'):
+                                bank = BANK_ACCOUNTS['fac2']
+                            elif student.faccode in ('FLS', 'FLW', 'FMS', 'FPS', 'FSS'):
+                                bank = BANK_ACCOUNTS['fac3']
+                        acct_num = bank[0]
+                        bank_id = bank[1]
+                        item_name = "%s (%s)" % (bank[2], item[0])
+                        xmltext += """
+<item_detail item_id="%s" item_name="%s" item_amt="%d" bank_id="%s" acct_num="%s" />""" % (item_id, item_name, item_amt, bank_id, acct_num)
+                        item_id += 1
+                    except:
+                        pass
+                xmldict['item_id'] = item_id
+                xmltext += """
+<item_detail item_id="%(item_id)d" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
+</item_details>
+</payment_item_detail>""" % xmldict
+            # no additional charges, determine faculty bank only
             else:
-                # Second agreement
-                joint_venture_amt = 1000.0
-                aaue_share_amt = 1500.0
-                provider_amt = 1500.0
-                student_union_due_amt = gateway_net_amt(
-                    academic_session.union_fee)
-                student_welfare_assurance_amt = gateway_net_amt(
-                    academic_session.welfare_fee)
-                sports_amt = gateway_net_amt(
-                    academic_session.sports_fee)
-                library_amt = gateway_net_amt(
-                    academic_session.library_fee)
-                library_amt_pg = gateway_net_amt(
-                    academic_session.library_pg_fee)
-                lms_sund_amt = gateway_net_amt(
-                    academic_session.lms_sund_fee)
-                xmldict['student_union_bank_id'] = '7'
-                xmldict['student_union_acct'] = '1019763348'
-                xmldict['aaue_share_bank_id'] = '117'
-                xmldict['aaue_share_acct'] = '1010827641'
-                xmldict['joint_venture_bank_id'] = '117'
-                xmldict['joint_venture_acct'] = '1010827641'
-                self.pay_item_id = '107'
-                if student.is_postgrad:
-                    self.pay_item_id = '111'
-                    xmldict['institution_acct'] = '5210006575'
-                    xmldict['institution_bank_id'] = '51'
-
-            xmldict['provider_amt'] = 100 * provider_amt
-            xmldict['joint_venture_amt'] = 100 * joint_venture_amt
-            xmldict['aaue_share_amt'] = 100 * aaue_share_amt
-            xmldict['lms_sund_amt'] = 100 * lms_sund_amt
-            if self.context.p_item == 'Balance':
-                xmldict['institution_amt'] = 100 * (
-                    gateway_net_amt(self.context.amount_auth))
-            elif self.context.p_category == 'schoolfee_2':
-                xmldict['institution_amt'] = 100 * gateway_net_amt(
-                    self.context.amount_auth)
+                if student.faccode in ('FAG', 'FAT', 'FBM', 'FMLS', 'fac1'):
+                    bank = BANK_ACCOUNTS['fac1']
+                elif student.faccode in ('FCS', 'FED', 'FES', 'FET'):
+                    bank = BANK_ACCOUNTS['fac2']
+                elif student.faccode in ('FLS', 'FLW', 'FMS', 'FPS', 'FSS'):
+                    bank = BANK_ACCOUNTS['fac3']
+                xmldict['institution_acct'] = bank[0]
+                xmldict['institution_bank_id'] = bank[1]
+
+
+        # Clearance (acceptance) fee
+
+        if category.startswith('clearance'):
+            # collect additional fees
+            if self.context.p_category == 'clearance_incl':
                 xmltext = """<payment_item_detail>
+<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">""" % xmldict
+                item_id = 1
+                for item in ACCEPTANCEFEES[student.certcode].items():
+                    try:
+                        item_amt = 100 * int(item[1])
+                        bank = BANK_ACCOUNTS[item[0]]
+                        acct_num = bank[0]
+                        bank_id = bank[1]
+                        item_name = "%s (%s)" % (bank[2], item[0])
+                        xmltext += """
+<item_detail item_id="%s" item_name="%s" item_amt="%d" bank_id="%s" acct_num="%s" />""" % (item_id, item_name, item_amt, bank_id, acct_num)
+                        item_id += 1
+                    except:
+                        pass
+                xmldict['item_id'] = item_id
+                xmltext += """
+<item_detail item_id="%(item_id)d" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
+</item_details>
+</payment_item_detail>""" % xmldict
+            # no additional charges, determine faculty bank only
+            else:
+                bank = BANK_ACCOUNTS['acceptance']
+                xmldict['institution_acct'] = bank[0]
+                xmldict['institution_bank_id'] = bank[1]
+
+        # Other fees
+
+
+        if not xmltext and provider_amt == 0:
+            xmltext = """<payment_item_detail>
 <item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
 <item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
 </item_details>
 </payment_item_detail>""" % xmldict
-            elif self.context.p_category in ('schoolfee_incl', 'schoolfee_1') \
-                and student.current_mode != 'ijmbe':
-                # Schoolfee including additional fees
-                xmldict['student_union_due_amt'] = 100 * student_union_due_amt
-                xmldict['student_welfare_assurance_amt'] = 100 * student_welfare_assurance_amt
-
-                if student.entry_session >= 2018 and student.is_fresh:
-                    xmldict['sports_amt'] = 100 * sports_amt
-                    if student.is_postgrad:
-                        xmldict['library_amt'] = 100 * library_amt_pg
-                    else:
-                        xmldict['library_amt'] = 100 * library_amt
-                    xmldict['institution_amt'] = 100 * (
-                        gateway_net_amt(self.context.amount_auth)
-                        - provider_amt
-                        - student_union_due_amt
-                        - student_welfare_assurance_amt
-                        - sports_amt
-                        - library_amt
-                        - lms_sund_amt)
-                    xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="Student Union" item_amt="%(student_union_due_amt)d" bank_id="%(student_union_bank_id)s" acct_num="%(student_union_acct)s" />
-<item_detail item_id="4" item_name="Student Welfare Assurance" item_amt="%(student_welfare_assurance_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="5" item_name="Sports Development Fee" item_amt="%(sports_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="6" item_name="Library Development Fee" item_amt="%(library_amt)d" bank_id="8" acct_num="2000122995" />
-</item_details>
-</payment_item_detail>""" % xmldict
-                    if contr_agreement_student(student) == 'second':
-                        xmldict['institution_amt'] = 100 * (
-                            gateway_net_amt(self.context.amount_auth)
-                            - provider_amt
-                            - joint_venture_amt
-                            - aaue_share_amt
-                            - student_union_due_amt
-                            - student_welfare_assurance_amt
-                            - sports_amt
-                            - library_amt) 
-                        xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="Student Union" item_amt="%(student_union_due_amt)d" bank_id="%(student_union_bank_id)s" acct_num="%(student_union_acct)s" />
-<item_detail item_id="4" item_name="Student Welfare Assurance" item_amt="%(student_welfare_assurance_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="5" item_name="Sports Development Fee" item_amt="%(sports_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="6" item_name="Library Development Fee" item_amt="%(library_amt)d" bank_id="8" acct_num="2000122995" />
-<item_detail item_id="7" item_name="Joint Venture" item_amt="%(joint_venture_amt)d" bank_id="%(joint_venture_bank_id)s" acct_num="%(joint_venture_acct)s" />
-<item_detail item_id="8" item_name="AAUE Share" item_amt="%(aaue_share_amt)d" bank_id="%(aaue_share_bank_id)s" acct_num="%(aaue_share_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-                    if student.entry_session >= 2021 and student.current_mode == 'ug_ft':
-                        xmldict['institution_amt'] = 100 * (
-                            gateway_net_amt(self.context.amount_auth)
-                            - provider_amt
-                            - joint_venture_amt
-                            - aaue_share_amt
-                            - student_union_due_amt
-                            - student_welfare_assurance_amt
-                            - sports_amt
-                            - library_amt
-                            - lms_sund_amt)  
-                        xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="Student Union" item_amt="%(student_union_due_amt)d" bank_id="%(student_union_bank_id)s" acct_num="%(student_union_acct)s" />
-<item_detail item_id="4" item_name="Student Welfare Assurance" item_amt="%(student_welfare_assurance_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="5" item_name="Sports Development Fee" item_amt="%(sports_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="6" item_name="Library Development Fee" item_amt="%(library_amt)d" bank_id="8" acct_num="2000122995" />
-<item_detail item_id="7" item_name="Joint Venture" item_amt="%(joint_venture_amt)d" bank_id="%(joint_venture_bank_id)s" acct_num="%(joint_venture_acct)s" />
-<item_detail item_id="8" item_name="AAUE Share" item_amt="%(aaue_share_amt)d" bank_id="%(aaue_share_bank_id)s" acct_num="%(aaue_share_acct)s" />
-<item_detail item_id="9" item_name="LMS plus Sundry Fees" item_amt="%(lms_sund_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-                else:
-                    xmldict['institution_amt'] = 100 * (
-                        gateway_net_amt(self.context.amount_auth)
-                        - provider_amt
-                        - student_union_due_amt
-                        - student_welfare_assurance_amt)
-                    xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="Student Union" item_amt="%(student_union_due_amt)d" bank_id="%(student_union_bank_id)s" acct_num="%(student_union_acct)s" />
-<item_detail item_id="4" item_name="Student Welfare Assurance" item_amt="%(student_welfare_assurance_amt)d" bank_id="123" acct_num="1006407792" />
-</item_details>
-</payment_item_detail>""" % xmldict
-                    if contr_agreement_student(student) == 'second':
-                        xmldict['institution_amt'] = 100 * (
-                            gateway_net_amt(self.context.amount_auth)
-                            - provider_amt
-                            - joint_venture_amt
-                            - aaue_share_amt
-                            - student_union_due_amt
-                            - student_welfare_assurance_amt)                    
-                        xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="Student Union" item_amt="%(student_union_due_amt)d" bank_id="%(student_union_bank_id)s" acct_num="%(student_union_acct)s" />
-<item_detail item_id="4" item_name="Student Welfare Assurance" item_amt="%(student_welfare_assurance_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="5" item_name="Joint Venture" item_amt="%(joint_venture_amt)d" bank_id="%(joint_venture_bank_id)s" acct_num="%(joint_venture_acct)s" />
-<item_detail item_id="6" item_name="AAUE Share" item_amt="%(aaue_share_amt)d" bank_id="%(aaue_share_bank_id)s" acct_num="%(aaue_share_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-            elif contr_agreement_student(student) == 'second':
-                # Schoolfee without Student Union Fee ands Student Welfare Assurance
-                xmldict['institution_amt'] = 100 * (
-                    gateway_net_amt(self.context.amount_auth)
-                    - provider_amt
-                    - joint_venture_amt
-                    - aaue_share_amt)
-                xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-<item_detail item_id="3" item_name="Joint Venture" item_amt="%(joint_venture_amt)d" bank_id="%(joint_venture_bank_id)s" acct_num="%(joint_venture_acct)s" />
-<item_detail item_id="4" item_name="AAUE Share" item_amt="%(aaue_share_amt)d" bank_id="%(aaue_share_bank_id)s" acct_num="%(aaue_share_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-            else:
-                xmldict['institution_amt'] = 100 * (
-                    gateway_net_amt(self.context.amount_auth)
-                    - provider_amt)
-                xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-        # Clearance
-        elif self.context.p_category.startswith('clearance'):
-            xmldict['institution_acct'] = '1010835352'
-            provider_amt = 0.0
-            if contr_agreement_student(student) == 'first':
-                # First agreement
-                xmldict['institution_acct'] = '1014847058'
-                xmldict['institution_bank_id'] = '7'
-                self.pay_item_id = '104'
-                if student.current_mode == 'found':
-                    self.pay_item_id = '102'
-                elif student.current_mode == 'ijmbe':
-                    self.pay_item_id = '102'
-                    xmldict['institution_bank_id'] = '123'
-                    xmldict['institution_acct'] = '1012278272'
-            else:
-                # Second agreement
-                self.pay_item_id = '102'
-                if student.is_postgrad:
-                    self.pay_item_id = '110'
-                    xmldict['institution_acct'] = '5210006575'
-                    xmldict['institution_bank_id'] = '51'
-                # ivama: Acceptance fee split is unique to "ug_ft"
-                # The reason for split is perculiar to them only...
-                # That amount was deducted from UTME application fee because
-                # some regulatory body have pegged the application fee which
-                # didn't affect another programmes.
-                if student.current_mode == 'ug_ft':
-                    provider_amt = 1500.0
-            xmldict['provider_amt'] = 100 * provider_amt
-            if self.context.p_category.endswith('_incl'):
-                # Clearance including additional fees
-                gown_fee_amt = gateway_net_amt(academic_session.matric_gown_fee)
-                aaue_lf_fee_amt = gateway_net_amt(academic_session.lapel_fee)
-                xmldict['gown_fee_amt'] = 100 * gown_fee_amt
-                xmldict['aaue_lf_fee_amt'] = 100 * aaue_lf_fee_amt
-                xmldict['institution_amt'] = 100 * (
-                    gateway_net_amt(self.context.amount_auth)
-                    - gown_fee_amt
-                    - aaue_lf_fee_amt
-                    - provider_amt)
-                xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-<item_detail item_id="2" item_name="Matriculation Gown Fee" item_amt="%(gown_fee_amt)d" bank_id="117" acct_num="1010835352" />
-<item_detail item_id="3" item_name="AAU File-Lapel Fee" item_amt="%(aaue_lf_fee_amt)d" bank_id="117" acct_num="1010835352" />""" % xmldict
-                if provider_amt:
-                    xmltext += """"
-<item_detail item_id="4" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-                else:
-                    xmltext += """"
-</item_details>
-</payment_item_detail>"""
-
-            elif student.current_mode == 'bridge':
-                # Clearance without any surcharge
-                xmldict['institution_amt'] = 100 * gateway_net_amt(
-                    self.context.amount_auth)
-                xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-            else:
-                # Clearance without additional fees
-                xmldict['institution_amt'] = 100 * (
-                    gateway_net_amt(self.context.amount_auth)
-                    - provider_amt)
-                xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />""" % xmldict
-                if provider_amt:
-                        xmltext += """"
-<item_detail item_id="2" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
-                else:
-                        xmltext += """"
-</item_details>
-</payment_item_detail>""" 
-
-        # Union Dues
-        elif self.context.p_category == 'union':
-            self.pay_item_id = '103'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-            if contr_agreement_student(student) == 'first':
-                # First agreement
-                xmldict['institution_acct'] = '0051005007'
-                xmldict['institution_bank_id'] = '31'
-            else:
-                # Second agreement
-                xmldict['institution_bank_id'] = '7'
-                xmldict['institution_acct'] = '1019763348'
-
-        # Lapel/File
-        elif self.context.p_category == 'lapel':
-            self.pay_item_id = '104'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Welfare Assurance
-        elif self.context.p_category == 'welfare':
-            self.pay_item_id = '105'
-            xmldict['institution_acct'] = '1006407792'
-            xmldict['institution_bank_id'] = '123'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # ID Card
-        elif self.context.p_category == 'id_card':
-            self.pay_item_id = '000'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Matric Gown
-        elif self.context.p_category == 'matric_gown':
-            self.pay_item_id = '106'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Concessional
-        elif self.context.p_category == 'concessional':
-            self.pay_item_id = '107'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Hostel Maintenance
-        elif self.context.p_category == 'hostel_maintenance':
-            provider_amt = 500.0
-            self.pay_item_id = '109'
-            xmldict['institution_acct'] = '1006406795'
-            xmldict['institution_bank_id'] = '123'
-            xmldict['provider_amt'] = 100 * provider_amt
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth) - provider_amt)
+        elif not xmltext:
             xmltext = """<payment_item_detail>
 <item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
@@ -658,122 +311,5 @@
 </item_details>
 </payment_item_detail>""" % xmldict
-
-        # GST Fees
-        elif self.context.p_category.startswith('gst_'):
-            if contr_agreement_student(student) == 'first':
-                self.pay_item_id = '115'
-            else:
-                self.pay_item_id = '116'
-            xmldict['institution_acct'] = '1010893123'
-            xmldict['institution_bank_id'] = '117'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # ENT Fees
-        elif self.context.p_category.startswith('ent_'):
-            if contr_agreement_student(student) == 'first':
-                self.pay_item_id = '114'
-            else:
-                self.pay_item_id = '118'
-            xmldict['institution_acct'] = '6220029828'
-            xmldict['institution_bank_id'] = '51'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Faculty and Departmental Dues
-        elif self.context.p_category == 'fac_dep':
-            xmldict['institution_acct'] = '1016425386'
-            xmldict['institution_bank_id'] = '117'
-            self.pay_item_id = '117'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Restitution Fee
-        elif self.context.p_category == 'restitution':
-            self.pay_item_id = '117'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Faculty Laboratory Due
-        elif self.context.p_category in ('lab_1', 'lab_2'):
-            xmldict['institution_acct'] = '1016425386'
-            xmldict['institution_bank_id'] = '117'
-            self.pay_item_id = '117'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Sports Fee
-        #elif self.context.p_category == 'sports':
-        #    self.pay_item_id = '105'
-        #    xmldict['institution_amt'] = 100 * (
-        #        gateway_net_amt(self.context.amount_auth))
-
-        # Library Fee
-        #elif self.context.p_category == 'library':
-        #    self.pay_item_id = '105'
-        #    xmldict['institution_amt'] = 100 * (
-        #        gateway_net_amt(self.context.amount_auth))
-
-        # Library PG Fee
-        #elif self.context.p_category == 'library_pg':
-        #    self.pay_item_id = '105'
-        #    xmldict['institution_amt'] = 100 * (
-        #        gateway_net_amt(self.context.amount_auth))
-
-        # Exam Fee
-        elif self.context.p_category == 'exam':
-            self.pay_item_id = '103'
-            xmldict['institution_acct'] = '1012278272'
-            xmldict['institution_bank_id'] = '123'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Access Card Fee
-        elif self.context.p_category == 'access_card':
-            self.pay_item_id = '103'
-            xmldict['institution_acct'] = '1012688013'
-            xmldict['institution_bank_id'] = '123'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # LMS + Sundry Fees
-        elif self.context.p_category == 'lms_sund':
-            self.pay_item_id = '103'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-
-        # Sports & Library Fee    temporarily in 2020
-        elif self.context.p_category == 'sports_library':
-            self.pay_item_id = '105'
-            xmldict['sports_amt'] = 100 * 3000.0
-            xmldict['library_amt'] = 100 * 1000.0
-            xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="Sports Development Fee" item_amt="%(sports_amt)d" bank_id="123" acct_num="1006407792" />
-<item_detail item_id="2" item_name="Library Development Fee" item_amt="%(library_amt)d" bank_id="8" acct_num="2000122995" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-        # Late Registration Fee
-        elif self.context.p_category == 'late_registration':
-            if contr_agreement_student(student) == 'first':
-                self.pay_item_id = '113'
-            else:
-                self.pay_item_id = '123'
-            xmldict['institution_amt'] = 100 * (
-                gateway_net_amt(self.context.amount_auth))
-            if student.is_postgrad:
-                xmldict['institution_acct'] = '5210006575'
-                xmldict['institution_bank_id'] = '51'
-        if not xmltext:
-            xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="%(institution_item_name)s" item_amt="%(institution_amt)d" bank_id="%(institution_bank_id)s" acct_num="%(institution_acct)s" />
-</item_details>
-</payment_item_detail>""" % xmldict
         self.xml_data = """<input type="hidden" name="xml_data" value='%s'  />""" % xmltext
-        self.context.provider_amt = provider_amt
-        self.context.gateway_amt = self.context.amount_auth - gateway_net_amt(
-            self.context.amount_auth)
         xmlitems = ''
         xmldoc = minidom.parseString(xmltext)
@@ -789,12 +325,13 @@
                 )
         self.context.p_split_data = xmlitems
+        self.context.provider_amt = provider_amt
         self.amount_auth = int(100 * self.context.amount_auth)
         hashargs = (
             self.context.p_id +
-            self.product_id +
+            PRODUCT_ID +
             self.pay_item_id +
             str(int(self.amount_auth)) +
             self.site_redirect_url +
-            self.mac)
+            MAC)
         self.hashvalue = hashlib.sha512(hashargs).hexdigest()
         return
@@ -810,16 +347,4 @@
     https = HTTPS
 
-    @property
-    def mac(self):
-        if contr_agreement_applicant(self.context.__parent__) == 'first':
-            return MAC_PT
-        return MAC_REGULAR
-
-    @property
-    def product_id(self):
-        if contr_agreement_applicant(self.context.__parent__) == 'first':
-            return PRODUCT_ID_PT
-        return PRODUCT_ID_REGULAR
-
 class CustomInterswitchPaymentVerifyWebservicePageApplicant(
     InterswitchPaymentVerifyWebservicePageApplicant):
@@ -830,16 +355,6 @@
     gateway_url = URL
     https = HTTPS
-
-    @property
-    def mac(self):
-        if contr_agreement_applicant(self.context.__parent__) == 'first':
-            return MAC_PT
-        return MAC_REGULAR
-
-    @property
-    def product_id(self):
-        if contr_agreement_applicant(self.context.__parent__) == 'first':
-            return PRODUCT_ID_PT
-        return PRODUCT_ID_REGULAR
+    mac = MAC
+    product_id = PRODUCT_ID
 
 class CustomInterswitchPaymentRequestWebservicePageStudent(
@@ -851,16 +366,6 @@
     gateway_url = URL
     https = HTTPS
-
-    @property
-    def mac(self):
-        if contr_agreement_student(self.context.student) == 'first':
-            return MAC_PT
-        return MAC_REGULAR
-
-    @property
-    def product_id(self):
-        if contr_agreement_student(self.context.student) == 'first':
-            return PRODUCT_ID_PT
-        return PRODUCT_ID_REGULAR
+    mac = MAC
+    product_id = PRODUCT_ID
 
 class CustomInterswitchPaymentVerifyWebservicePageStudent(
@@ -872,14 +377,4 @@
     gateway_url = URL
     https = HTTPS
-
-    @property
-    def mac(self):
-        if contr_agreement_student(self.context.student) == 'first':
-            return MAC_PT
-        return MAC_REGULAR
-
-    @property
-    def product_id(self):
-        if contr_agreement_student(self.context.student) == 'first':
-            return PRODUCT_ID_PT
-        return PRODUCT_ID_REGULAR
+    mac = MAC
+    product_id = PRODUCT_ID
Index: main/waeup.aaue/trunk/src/waeup/aaue/interswitch/tests.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/interswitch/tests.py	(revision 17429)
+++ main/waeup.aaue/trunk/src/waeup/aaue/interswitch/tests.py	(revision 17431)
@@ -71,5 +71,5 @@
         self.browser.getControl("Save").click()
 
-    def test_interswitch_form_regular(self):
+    def deactivated_test_interswitch_form_regular(self):
         self.browser.getControl("Add online").click()
         self.assertTrue('ticket created' in self.browser.contents)
@@ -101,5 +101,5 @@
             in self.browser.contents)
 
-    def test_interswitch_form_pg(self):
+    def deactivated_test_interswitch_form_pg(self):
         self.applicant.applicant_id = u'pg_anything'
         self.browser.getControl("Add online").click()
@@ -135,5 +135,5 @@
             in self.browser.contents)
 
-    def test_interswitch_form_utme(self):
+    def deactivated_test_interswitch_form_utme(self):
         self.applicant.applicant_id = u'utme_anything'
         self.browser.getControl("Add online").click()
@@ -166,5 +166,5 @@
             in self.browser.contents)
 
-    def test_interswitch_form_bridge(self):
+    def deactivated_test_interswitch_form_bridge(self):
         self.applicant.applicant_id = u'bridge_xyz'
         self.browser.getControl("Add online").click()
@@ -205,5 +205,5 @@
         self.app['configuration']['2004'].interswitch_enabled = True
 
-    def test_interswitch_form_pt_school_fees(self):
+    def disabled_test_interswitch_form_pt_school_fees(self):
         self.certificate.study_mode = 'ug_pt'
         self.student['studycourse'].entry_session = 2013
@@ -232,6 +232,4 @@
         self.student['payments']['xyz'] = acc_payment
         self.browser.getLink("Pay via Interswitch", index=0).click()
-        self.assertTrue('<input type="hidden" name="pay_item_id" value="105" />'
-                        in self.browser.contents)
         self.assertTrue('Total Amount Authorized:' in self.browser.contents)
         self.assertEqual(self.student.current_mode, 'ug_pt')
@@ -246,6 +244,6 @@
     def test_interswitch_form_regular_school_fees(self):
         self.certificate.study_mode = 'ug_ft'
-        self.student['studycourse'].entry_session = 2013
-        self.student['studycourse'].certificate.school_fee_3 = 51750.0
+        #self.student['studycourse'].entry_session = 2013
+        #self.student['studycourse'].certificate.school_fee_3 = 51750.0
         # Manager can access InterswitchForm
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
@@ -260,27 +258,70 @@
         self.assertTrue('Amount Authorized' in
                            self.browser.contents)
-        self.assertTrue('<span>51750.0</span>' in self.browser.contents)
-        self.payment_url = self.browser.url
-        self.browser.getLink("Pay via Interswitch", index=0).click()
-        self.assertTrue(
-            'Please pay acceptance fee first' in self.browser.contents)
-        acc_payment = createObject('waeup.StudentOnlinePayment')
-        acc_payment.p_state = 'paid'
-        acc_payment.p_category = 'clearance'
-        self.student['payments']['xyz'] = acc_payment
-        self.browser.getLink("Pay via Interswitch", index=0).click()
-        self.assertTrue('<input type="hidden" name="pay_item_id" value="107" />'
-                        in self.browser.contents)
+        self.assertTrue('<span>239500.0</span>' in self.browser.contents)
+        self.payment_url = self.browser.url
+        self.browser.getLink("Pay via Interswitch", index=0).click()
+        #self.assertTrue(
+        #    'Please pay acceptance fee first' in self.browser.contents)
+        #acc_payment = createObject('waeup.StudentOnlinePayment')
+        #acc_payment.p_state = 'paid'
+        #acc_payment.p_category = 'clearance'
+        #self.student['payments']['xyz'] = acc_payment
+        #self.browser.getLink("Pay via Interswitch", index=0).click()
         self.assertTrue('Total Amount Authorized:'
                         in self.browser.contents)
         self.assertEqual(self.student.current_mode, 'ug_ft')
         self.assertTrue(
-            '<input type="hidden" name="amount" value="5175000" />'
-            in self.browser.contents)
-        self.assertTrue(
-            'item_name="School Fee Plus" item_amt="4755000" bank_id="117" '
-            'acct_num="1010827641"' in self.browser.contents)
-
-    def test_interswitch_form_pt_acceptance_fees(self):
+            '<input type="hidden" name="amount" value="24220000" />'
+            in self.browser.contents)
+        self.assertTrue(
+            'item_name="Faculty Fee (tuition)" item_amt="18400000" bank_id="7" '
+            'acct_num="1022438743"' in self.browser.contents)
+
+        self.student['studycourse'].entry_session = 2015
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee_2']
+        self.browser.getControl("Create ticket").click()
+        self.assertTrue('ticket created' in
+                           self.browser.contents)
+        self.assertTrue('<span>92000.0</span>' in self.browser.contents)
+        self.payment_url = self.browser.url
+        self.browser.getLink("Pay via Interswitch", index=0).click()
+        self.assertTrue(
+            '<input type="hidden" name="amount" value="9220000" />'
+            in self.browser.contents)
+        self.assertTrue(
+            'item_name="School Fee (2nd instalment)" item_amt="9200000" bank_id="7" acct_num="1022438743"' in self.browser.contents)
+
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee_1']
+        self.browser.getControl("Create ticket").click()
+        self.assertTrue('ticket created' in
+                           self.browser.contents)
+        self.assertTrue('<span>147500.0</span>' in self.browser.contents)
+        self.payment_url = self.browser.url
+        self.browser.getLink("Pay via Interswitch", index=0).click()
+        self.assertTrue(
+            '<input type="hidden" name="amount" value="15020000" />'
+            in self.browser.contents)
+        self.assertTrue(
+            'item_name="Faculty Fee (lmsplus)" item_amt="2000000" bank_id="7" acct_num="1022438743"' in self.browser.contents)
+        self.assertTrue(
+            'item_name="Faculty Fee (tuition)" item_amt="9200000" bank_id="7" acct_num="1022438743"' in self.browser.contents)
+
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee_2']
+        self.browser.getControl("Create ticket").click()
+        self.assertTrue('ticket created' in
+                           self.browser.contents)
+        self.assertTrue('<span>92000.0</span>' in self.browser.contents)
+        self.payment_url = self.browser.url
+        self.browser.getLink("Pay via Interswitch", index=0).click()
+        self.assertTrue(
+            '<input type="hidden" name="amount" value="9220000" />'
+            in self.browser.contents)
+        self.assertTrue(
+            'item_name="School Fee (2nd instalment)" item_amt="9200000" bank_id="7" acct_num="1022438743"' in self.browser.contents)
+
+    def disabled_test_interswitch_form_pt_acceptance_fees(self):
         self.certificate.study_mode = 'ug_pt'
         self.app['configuration']['2004'].clearance_fee_ug_pt = 40200.0
@@ -301,6 +342,4 @@
         self.payment_url = self.browser.url
         self.browser.getLink("Pay via Interswitch", index=0).click()
-        self.assertTrue('<input type="hidden" name="pay_item_id" value="104" />' in
-                           self.browser.contents)
         self.assertTrue('Total Amount Authorized:' in self.browser.contents)
         self.assertTrue(
@@ -314,5 +353,5 @@
     def test_interswitch_form_regular_acceptance_fees(self):
         self.certificate.study_mode = 'ug_ft'
-        self.app['configuration']['2004'].clearance_fee = 43050.0
+        #self.app['configuration']['2004'].clearance_fee = 43050.0
         # Manager can access InterswitchForm
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
@@ -325,18 +364,33 @@
         self.assertTrue('ticket created' in self.browser.contents)
         self.assertTrue('Amount Authorized' in self.browser.contents)
-        self.assertTrue('<span>43050.0</span>' in self.browser.contents)
-        self.payment_url = self.browser.url
-        self.browser.getLink("Pay via Interswitch", index=0).click()
-        self.assertTrue('<input type="hidden" name="pay_item_id" value="102" />'
-                        in self.browser.contents)
-        self.assertTrue('Total Amount Authorized:' in self.browser.contents)
-        self.assertTrue(
-            '<input type="hidden" name="amount" value="4305000" />'
-            in self.browser.contents)
-        self.assertTrue(
-            'item_name="Acceptance Fee Plus" item_amt="4135000" bank_id="117" '
-            'acct_num="1010835352"' in self.browser.contents)
-
-    def test_interswitch_form_concessional_fees(self):
+        self.assertTrue('<span>16800.0</span>' in self.browser.contents)
+        self.browser.getLink("Pay via Interswitch", index=0).click()
+        self.assertTrue('Total Amount Authorized:' in self.browser.contents)
+        self.assertTrue(
+            '<input type="hidden" name="amount" value="1850000" />'
+            in self.browser.contents)
+        self.assertTrue(self.student['payments'].values()[0].net_amt == 16800)
+        self.assertTrue(
+            'item_name="Acceptance Fee (acceptance)" item_amt="1400000" bank_id="8" '
+            'acct_num="2000249757"' in self.browser.contents)
+
+        self.certificate.study_mode = 'bridge'
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['clearance']
+        self.browser.getControl("Create ticket").click()
+        self.assertTrue('ticket created' in self.browser.contents)
+        self.assertTrue('Amount Authorized' in self.browser.contents)
+        self.assertTrue('<span>14000.0</span>' in self.browser.contents)
+        self.browser.getLink("Pay via Interswitch", index=0).click()
+        self.assertTrue('Total Amount Authorized:' in self.browser.contents)
+        self.assertTrue(
+            '<input type="hidden" name="amount" value="1570000" />'
+            in self.browser.contents)
+        self.assertTrue(self.student['payments'].values()[1].net_amt == 14000)
+        self.assertTrue(
+            'item_name="Acceptance Fee" item_amt="1400000" bank_id="8" '
+            'acct_num="2000249757"' in self.browser.contents)
+
+    def deactivated_test_interswitch_form_concessional_fees(self):
         self.certificate.study_mode = 'ug_ft'
         self.app['configuration']['2004'].concessional_fee = 1567.0
@@ -356,6 +410,4 @@
         self.certificate.study_mode = 'ug_ft'
         self.browser.getLink("Pay via Interswitch", index=0).click()
-        self.assertTrue('<input type="hidden" name="pay_item_id" value="107" />'
-                           in self.browser.contents)
         self.assertTrue('Total Amount Authorized:' in self.browser.contents)
         self.assertTrue(
@@ -367,5 +419,5 @@
             in self.browser.contents)
 
-    def test_interswitch_form_ticket_expired(self):
+    def deactivated_test_interswitch_form_ticket_expired(self):
         self.certificate.study_mode = 'ug_pt'
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
@@ -380,6 +432,4 @@
         self.browser.open(self.payments_path + '/xyz')
         self.browser.getLink("Pay via Interswitch", index=0).click()
-        self.assertTrue('<input type="hidden" name="pay_item_id" value="104" />'
-                        in self.browser.contents)
         self.assertTrue('Total Amount Authorized:' in self.browser.contents)
         self.assertEqual(self.student.current_mode, 'ug_pt')
