Index: /main/kofacustom.dspg/trunk/src/kofacustom/dspg/interfaces.py
===================================================================
--- /main/kofacustom.dspg/trunk/src/kofacustom/dspg/interfaces.py	(revision 14858)
+++ /main/kofacustom.dspg/trunk/src/kofacustom/dspg/interfaces.py	(revision 14859)
@@ -68,5 +68,176 @@
 
 
-    # Additional fees in custom package add here
+    # Additional fees in custom package
+
+    certificate_fee = schema.Float(
+        title = _(u'ND Certificate Fee'),
+        default = 0.0,
+        required = True,
+        )
+    hnd_certificate_fee = schema.Float(
+        title = _(u'HND Certificate Fee'),
+        default = 0.0,
+        required = True,
+        )
+    pgd_certificate_fee = schema.Float(
+        title = _(u'PGD Certificate Fee'),
+        default = 0.0,
+        required = True,
+        )
+    state_result_fee = schema.Float(
+        title = _(u'ND Statement of Result Fee'),
+        default = 0.0,
+        required = True,
+        )
+    hnd_state_result_fee = schema.Float(
+        title = _(u'HND Statement of Result Fee'),
+        default = 0.0,
+        required = True,
+        )
+    pgd_state_result_fee = schema.Float(
+        title = _(u'PGD Statement of Result Fee'),
+        default = 0.0,
+        required = True,
+        )
+    transcript_local_fee = schema.Float(
+        title = _(u'ND Transcript (local) Fee'),
+        default = 0.0,
+        required = True,
+        )
+    hnd_transcript_local_fee = schema.Float(
+        title = _(u'HND Transcript (local) Fee'),
+        default = 0.0,
+        required = True,
+        )
+    pgd_transcript_local_fee = schema.Float(
+        title = _(u'PGD Transcript (local) Fee'),
+        default = 0.0,
+        required = True,
+        )
+    transcript_foreign_fee = schema.Float(
+        title = _(u'ND Transcript (foreign) Fee'),
+        default = 0.0,
+        required = True,
+        )
+    hnd_transcript_foreign_fee = schema.Float(
+        title = _(u'HND Transcript (foreign) Fee'),
+        default = 0.0,
+        required = True,
+        )
+    pgd_transcript_foreign_fee = schema.Float(
+        title = _(u'PGD Transcript (foreign) Fee'),
+        default = 0.0,
+        required = True,
+        )
+    ver_result_fee = schema.Float(
+        title = _(u'Verification of Result Fee'),
+        default = 0.0,
+        required = True,
+        )
+    change_course_fee = schema.Float(
+        title = _(u'Change of Course Fee'),
+        default = 0.0,
+        required = True,
+        )
+    change_inst_fee = schema.Float(
+        title = _(u'Change of Institute Fee'),
+        default = 0.0,
+        required = True,
+        )
+    jamb_reject_fee = schema.Float(
+        title = _(u'JAMB Rejection Form Fee'),
+        default = 0.0,
+        required = True,
+        )
+    cert_of_cert_fee = schema.Float(
+        title = _(u'Certification of Certificate Fee'),
+        default = 0.0,
+        required = True,
+        )
+    ref_let_fee = schema.Float(
+        title = _(u'Recommendation/Reference Letter Fee'),
+        default = 0.0,
+        required = True,
+        )
+    proc_cert_fee = schema.Float(
+        title = _(u'Processing of Certificate by Proxy Fee'),
+        default = 0.0,
+        required = True,
+        )
+    loss_idcard_fee = schema.Float(
+        title = _(u'Loss of ID Card Fee (student)'),
+        default = 0.0,
+        required = True,
+        )
+    staff_loss_idcard_fee = schema.Float(
+        title = _(u'Loss of ID Card Fee (staff)'),
+        default = 0.0,
+        required = True,
+        )
+    loss_examcard_fee = schema.Float(
+        title = _(u'Loss of Exam Card Fee'),
+        default = 0.0,
+        required = True,
+        )
+    loss_result_fee = schema.Float(
+        title = _(u'Loss of Result Fee'),
+        default = 0.0,
+        required = True,
+        )
+    loss_receipt_fee = schema.Float(
+        title = _(u'Loss of Receipt Fee'),
+        default = 0.0,
+        required = True,
+        )
+    loss_clearance_fee = schema.Float(
+        title = _(u'Loss of Clearance Fee'),
+        default = 0.0,
+        required = True,
+        )
+    conv_brochure_fee = schema.Float(
+        title = _(u'ND Convocation Brochure Fee'),
+        default = 0.0,
+        required = True,
+        )
+    hnd_conv_brochure_fee = schema.Float(
+        title = _(u'HND Convocation Brochure Fee'),
+        default = 0.0,
+        required = True,
+        )
+    pgd_conv_brochure_fee = schema.Float(
+        title = _(u'PGD Convocation Brochure Fee'),
+        default = 0.0,
+        required = True,
+        )
+    log_book_fee = schema.Float(
+        title = _(u'Log Book Fees'),
+        default = 0.0,
+        required = True,
+        )
+    jamb_regularization_fee = schema.Float(
+        title = _(u'Jamb Regularization Fee'),
+        default = 0.0,
+        required = True,
+        )
+    utme_registration_fee = schema.Float(
+        title = _(u'UTME Registration Fee'),
+        default = 0.0,
+        required = True,
+        )
+    utme_cbt_fee = schema.Float(
+        title = _(u'UTME CBT Fee'),
+        default = 0.0,
+        required = True,
+        )
+    nysc_id_card_fee = schema.Float(
+        title = _(u'NYSC ID Card Fee'),
+        default = 0.0,
+        required = True,
+        )
+    ijmb_result_fee = schema.Float(
+        title = _(u'IJMB Result Fee'),
+        default = 0.0,
+        required = True,
+        )
 
 
Index: /main/kofacustom.dspg/trunk/src/kofacustom/dspg/interswitch/browser.py
===================================================================
--- /main/kofacustom.dspg/trunk/src/kofacustom/dspg/interswitch/browser.py	(revision 14858)
+++ /main/kofacustom.dspg/trunk/src/kofacustom/dspg/interswitch/browser.py	(revision 14859)
@@ -48,4 +48,41 @@
 httplib.HTTPSConnection.debuglevel = 0
 HTTPS = True
+
+SPECIAL_PAYMENT_PARAMS = {
+    'certificate': ('111', 500.0, '1012808851', '117'),
+    'state_result': ('112', 500.0, '1012808851', '117'),
+    'transcript_local': ('113', 500.0, '1012808851', '117'),
+    'transcript_foreign': ('114', 500.0, '1012808851', '117'),
+    'ver_result': ('115', 500.0, '1012808851', '117'),
+    'change_course': ('116', 500.0, '1012808851', '117'),
+    'change_inst': ('117', 500.0, '1012808851', '117'),
+    'jamb_reject': ('118', 500.0, '1012808851', '117'),
+    'cert_of_cert': ('119', 500.0, '1012808851', '117'),
+    'ref_let': ('120', 500.0, '1012808851', '117'),
+    'proc_cert': ('121', 500.0, '1012808851', '117'),
+    'loss_idcard': ('122', 9.0, '1012808851', '117'),
+    'loss_examcard': ('123', 4.5, '1012808851', '117'),
+    'loss_result': ('124', 500.0, '1012808851', '117'),
+    'loss_receipt': ('125', 500.0, '1012808851', '117'),
+    'loss_clearance': ('126', 500.0, '1012808851', '117'),
+    'conv_brochure': ('127', 500.0, '1012808851', '117'),
+    'hnd_certificate': ('128', 500.0, '1012808851', '117'),
+    'hnd_state_result': ('129', 500.0, '1012808851', '117'),
+    'hnd_transcript_local': ('130', 500.0, '1012808851', '117'),
+    'hnd_transcript_foreign': ('131', 500.0, '1012808851', '117'),
+    'staff_loss_idcard': ('132', 9.0, '1012808851', '117'),
+    'hnd_conv_brochure': ('133', 500.0, '1012808851', '117'),
+    'pgd_state_result': ('134', 500.0, '1012808851', '117'),
+    'pgd_conv_brochure': ('135', 500.0, '1012808851', '117'),
+    'pgd_certificate': ('136', 500.0, '1012808851', '117'),
+    'log_book': ('137', 4.5, '1012808851', '117'),
+    'pgd_transcript_foreign': ('138', 500.0, '1012808851', '117'),
+    'pgd_transcript_local': ('139', 500.0, '1012808851', '117'),
+    'jamb_regularization': ('140', 500.0, '1012808851', '117'),
+    'utme_registration': ('142', 9.0, '1012808851', '117'),
+    'utme_cbt': ('143', 9.0, '1012808851', '117'),
+    'nysc_id_card': ('144', 9.0, '1012808851', '117'),
+    'ijmb_result': ('147', 500.0, '1012808851', '117'),
+    }
 
 class CustomInterswitchPageStudent(InterswitchPageStudent):
@@ -132,4 +169,5 @@
         xmldict = {}
         provider_amt = 500.0
+        gateway_amt = GATEWAY_AMT
         xmldict['institution_acct'] = '00000000'
         xmldict['institution_bank_id'] = '00'
@@ -141,4 +179,13 @@
             xmldict['institution_acct'] = '1015220292'
             xmldict['institution_bank_id'] = '117'
+        elif self.applicant.applicant_id.startswith('special'):
+            if self.context.p_category in SPECIAL_PAYMENT_PARAMS.keys():
+                self.pay_item_id = SPECIAL_PAYMENT_PARAMS[self.context.p_category][0]
+                provider_amt = SPECIAL_PAYMENT_PARAMS[self.context.p_category][1]
+                xmldict['institution_acct'] = SPECIAL_PAYMENT_PARAMS[self.context.p_category][2]
+                xmldict['institution_bank_id'] = SPECIAL_PAYMENT_PARAMS[self.context.p_category][3]
+        if self.pay_item_id in ('122', '123', '132', '137', '141',
+                                '142', '143', '144', '146', '147',):
+                gateway_amt = round(0.015 * self.context.amount_auth, 2)
         xmldict['detail_ref'] = self.context.p_id
         xmldict['provider_amt'] = 100 * provider_amt
@@ -146,5 +193,5 @@
         xmldict['provider_bank_id'] = PROVIDER_BANK_ID
         xmldict['provider_item_name'] = PROVIDER_ITEM_NAME
-        xmldict['institution_amt'] = 100 * (self.context.amount_auth - provider_amt - GATEWAY_AMT)
+        xmldict['institution_amt'] = 100 * (self.context.amount_auth - provider_amt - gateway_amt)
         xmldict['institution_item_name'] = self.context.category
         xmldict['institution_name'] = INSTITUTION_NAME
Index: /main/kofacustom.dspg/trunk/src/kofacustom/dspg/utils/utils.py
===================================================================
--- /main/kofacustom.dspg/trunk/src/kofacustom/dspg/utils/utils.py	(revision 14858)
+++ /main/kofacustom.dspg/trunk/src/kofacustom/dspg/utils/utils.py	(revision 14859)
@@ -51,2 +51,127 @@
         'rmd': 'Remedial',
         }
+
+    PAYMENT_CATEGORIES = {
+        'clearance': 'Acceptance',
+        'schoolfee': 'School Fee',
+        'carryover1': 'One Carry-Over',
+        'carryover2': 'Two Carry-Overs',
+        'carryover3': 'Three Carry-Overs',
+        'bed_allocation': 'Bed Allocation',
+        'hostel_maintenance': 'Hostel Maintenance',
+        'application': 'Application',
+        'certificate': 'ND Certificate',
+        'hnd_certificate': 'HND Certificate',
+        'pgd_certificate': 'PGD Certificate',
+        'state_result': 'ND Statement of Result',
+        'hnd_state_result': 'HND Statement of Result',
+        'pgd_state_result': 'PGD Statement of Result',
+        'transcript_local': 'ND Transcript (local)',
+        'hnd_transcript_local': 'HND Transcript (local)',
+        'pgd_transcript_local': 'PGD Transcript (local)',
+        'transcript_foreign': 'ND Transcript (foreign)',
+        'hnd_transcript_foreign': 'HND Transcript (foreign)',
+        'pgd_transcript_foreign': 'PGD Transcript (foreign)',
+        'ver_result': 'Verification of Result',
+        'change_course': 'Change of Course',
+        'change_inst': 'Change of Institute',
+        'jamb_reject': 'JAMB Rejection Form',
+        'cert_of_cert': 'Certification of Certificate',
+        'ref_let': 'Recommendation/Reference Letter',
+        'proc_cert': 'Processing of Certificate by Proxy',
+        'loss_idcard': 'Loss of ID Card (student)',
+        'staff_loss_idcard': 'Loss of ID Card (staff)',
+        'loss_examcard': 'Loss of Exam Card',
+        'loss_result': 'Loss of Result',
+        'loss_receipt': 'Loss of Receipt',
+        'loss_clearance': 'Loss of Clearance',
+        'conv_brochure': 'ND Convocation Brochure',
+        'hnd_conv_brochure': 'HND Convocation Brochure',
+        'pgd_conv_brochure': 'PGD Convocation Brochure',
+        'log_book': 'Log Book',
+        'jamb_regularization': 'Jamb Regularization',
+        'utme_registration': 'UTME Registration',
+        'utme_cbt': 'UTME CBT',
+        'nysc_id_card': 'NYSC ID Card',
+        'ijmb_result':'IJMB Result',
+        }
+
+    SELECTABLE_PAYMENT_CATEGORIES = {
+        'clearance': 'Acceptance',
+        'schoolfee': 'School Fee',
+        'carryover1': 'One Carry-Over',
+        'carryover2': 'Two Carry-Overs',
+        'carryover3': 'Three Carry-Overs',
+        'hostel_maintenance': 'Hostel Maintenance',
+        'certificate': 'ND Certificate',
+        'hnd_certificate': 'HND Certificate',
+        'pgd_certificate': 'PGD Certificate',
+        'state_result': 'ND Statement of Result',
+        'hnd_state_result': 'HND Statement of Result',
+        'pgd_state_result': 'PGD Statement of Result',
+        'transcript_local': 'ND Transcript (local)',
+        'hnd_transcript_local': 'HND Transcript (local)',
+        'pgd_transcript_local': 'PGD Transcript (local)',
+        'transcript_foreign': 'ND Transcript (foreign)',
+        'hnd_transcript_foreign': 'HND Transcript (foreign)',
+        'pgd_transcript_foreign': 'PGD Transcript (foreign)',
+        'ver_result': 'Verification of Result',
+        'change_course': 'Change of Course',
+        'change_inst': 'Change of Institute',
+        'jamb_reject': 'JAMB Rejection Form',
+        'cert_of_cert': 'Certification of Certificate',
+        'ref_let': 'Recommendation/Reference Letter',
+        'proc_cert': 'Processing of Certificate by Proxy',
+        'loss_idcard': 'Loss of ID Card (student)',
+        'staff_loss_idcard': 'Loss of ID Card (staff)',
+        'loss_examcard': 'Loss of Exam Card',
+        'loss_result': 'Loss of Result',
+        'loss_receipt': 'Loss of Receipt',
+        'loss_clearance': 'Loss of Clearance',
+        'conv_brochure': 'ND Convocation Brochure',
+        'hnd_conv_brochure': 'HND Convocation Brochure',
+        'pgd_conv_brochure': 'PGD Convocation Brochure',
+        'log_book': 'Log Book',
+        'jamb_regularization': 'Jamb Regularization',
+        'utme_registration': 'UTME Registration',
+        'utme_cbt': 'UTME CBT',
+        'nysc_id_card': 'NYSC ID Card',
+        'ijmb_result':'IJMB Result',
+        }
+
+    SPECIAL_APP_DICT = {
+        'certificate': 'ND Certificate',
+        'hnd_certificate': 'HND Certificate',
+        'pgd_certificate': 'PGD Certificate',
+        'state_result': 'ND Statement of Result',
+        'hnd_state_result': 'HND Statement of Result',
+        'pgd_state_result': 'PGD Statement of Result',
+        'transcript_local': 'ND Transcript (local)',
+        'hnd_transcript_local': 'HND Transcript (local)',
+        'pgd_transcript_local': 'PGD Transcript (local)',
+        'transcript_foreign': 'ND Transcript (foreign)',
+        'hnd_transcript_foreign': 'HND Transcript (foreign)',
+        'pgd_transcript_foreign': 'PGD Transcript (foreign)',
+        'ver_result': 'Verification of Result Payment',
+        'change_course': 'Change of Course Payment',
+        'change_inst': 'Change of Institute Payment',
+        'jamb_reject': 'JAMB Rejection Form Payment',
+        'cert_of_cert': 'Certification of Certificate Payment',
+        'ref_let': 'Recommendation/Reference Letter Payment',
+        'proc_cert': 'Processing of Certificate by Proxy Payment',
+        'loss_idcard': 'Loss of ID Card (student)',
+        'staff_loss_idcard': 'Loss of ID Card (staff)',
+        'loss_examcard': 'Loss of Exam Card Payment',
+        'loss_result': 'Loss of Result Payment',
+        'loss_receipt': 'Loss of Receipt Payment',
+        'loss_clearance': 'Loss of Clearance Payment',
+        'conv_brochure': 'ND Convocation Brochure',
+        'hnd_conv_brochure': 'HND Convocation Brochure',
+        'pgd_conv_brochure': 'PGD Convocation Brochure',
+        'log_book': 'Log Book',
+        'jamb_regularization': 'Jamb Regularization',
+        'utme_registration': 'UTME Registration',
+        'utme_cbt': 'UTME CBT',
+        'nysc_id_card': 'NYSC ID Card',
+        'ijmb_result':'IJMB Result',
+        }
