Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/browser.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/browser.py	(revision 10837)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/browser.py	(revision 10844)
@@ -23,4 +23,5 @@
 from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
 from zope.formlib.textwidgets import BytesDisplayWidget
+from waeup.kofa.applicants.interfaces import IApplicant, IApplicantEdit
 from waeup.kofa.applicants.browser import (ApplicantDisplayFormPage,
     ApplicantManageFormPage, ApplicantEditFormPage,
@@ -72,4 +73,9 @@
     @property
     def form_fields(self):
+        if self.context.special:
+            form_fields = grok.AutoFields(IApplicant).select(
+                'applicant_id', 'firstname', 'middlename', 'lastname',
+                'reg_number', 'date_of_birth', 'email', 'special_application')
+            return form_fields
         form_fields = grok.AutoFields(ICustomUGApplicant)
         if self.context.is_nd:
@@ -123,4 +129,10 @@
     @property
     def form_fields(self):
+        if self.context.special:
+            form_fields = grok.AutoFields(IApplicant).select(
+                'applicant_id', 'firstname', 'middlename', 'lastname',
+                'reg_number', 'date_of_birth', 'email', 'special_application',
+                'locked')
+            return form_fields
         form_fields = grok.AutoFields(ICustomUGApplicant)
         if self.context.is_nd:
@@ -140,4 +152,10 @@
     @property
     def form_fields(self):
+
+        if self.context.special:
+            form_fields = grok.AutoFields(IApplicantEdit).select(
+                'applicant_id', 'firstname', 'middlename', 'lastname',
+                'reg_number', 'date_of_birth', 'email', 'special_application')
+            return form_fields
         form_fields = grok.AutoFields(ICustomUGApplicantEdit)
         if self.context.is_nd:
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/interfaces.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/interfaces.py	(revision 10837)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/interfaces.py	(revision 10844)
@@ -50,5 +50,5 @@
     'hq_type')
 ND_OMIT_PDF_FIELDS = ND_OMIT_DISPLAY_FIELDS + ('phone',)
-ND_OMIT_MANAGE_FIELDS = ()
+ND_OMIT_MANAGE_FIELDS = ('special_application',)
 ND_OMIT_EDIT_FIELDS = ND_OMIT_MANAGE_FIELDS + ND_OMIT_DISPLAY_FIELDS + (
     'student_id', 'notice',
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/utils.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/utils.py	(revision 10837)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/utils.py	(revision 10844)
@@ -49,4 +49,5 @@
         'prendpt': ['Pre-Admission Screening: ND Part-Time Forms', 'NDPT'],
         'prejambites': ['Pre-Admission Screening: JAMBITES', 'JMB'],
+        'special': ['Supplementary Payment', 'SP'],
         }
 
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interfaces.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interfaces.py	(revision 10837)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interfaces.py	(revision 10844)
@@ -97,5 +97,5 @@
         )
     ver_result_fee = schema.Float(
-        title = _(u'erification of Result Fee'),
+        title = _(u'Verification of Result Fee'),
         default = 0.0,
         required = False,
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/browser.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/browser.py	(revision 10837)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/browser.py	(revision 10844)
@@ -330,4 +330,84 @@
             provider_amt = 0.0
             dalash_amt = 0.0
+        elif self.applicant.applicant_id.startswith('special'):
+            if self.applicant.special_application == 'certificate':
+                self.pay_item_id = '111'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'state_result':
+                self.pay_item_id = '112'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'transcript_local':
+                self.pay_item_id = '113'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'transcript_foreign':
+                self.pay_item_id = '114'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'ver_result':
+                self.pay_item_id = '115'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'change_course':
+                self.pay_item_id = '116'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'change_inst':
+                self.pay_item_id = '117'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'jamb_reject':
+                self.pay_item_id = '118'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'cert_of_cert':
+                self.pay_item_id = '119'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'ref_let':
+                self.pay_item_id = '120'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'proc_cert':
+                self.pay_item_id = '121'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'loss_idcard':
+                self.pay_item_id = '122'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+                dalash_amt = 6.0
+                xmldict['dalash_amt'] = 100 * dalash_amt
+                provider_amt = 9.0
+                gateway_amt = 15.0
+            elif self.applicant.special_application == 'loss_examcard':
+                self.pay_item_id = '123'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+                dalash_amt = 3.0
+                xmldict['dalash_amt'] = 100 * dalash_amt
+                provider_amt = 4.5
+                gateway_amt = 7.5
+            elif self.applicant.special_application == 'loss_result':
+                self.pay_item_id = '124'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'loss_receipt':
+                self.pay_item_id = '125'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'loss_clearance':
+                self.pay_item_id = '126'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            elif self.applicant.special_application == 'conv_brochure':
+                self.pay_item_id = '127'
+                xmldict['institution_acct'] = "0131959715"
+                xmldict['institution_bank_id'] = '10'
+            else:
+                xmldict['institution_acct'] = '00000000000'
+                xmldict['institution_bank_id'] = '00'
         else:
             xmldict['institution_acct'] = '00000000000'
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/tests.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/tests.py	(revision 10837)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/interswitch/tests.py	(revision 10844)
@@ -18,9 +18,11 @@
 import os
 import grok
-from datetime import datetime
+import pytz
+from datetime import datetime, date, timedelta
 from hurry.workflow.interfaces import IWorkflowState
 from zope.component import createObject, getUtility
 from zope.catalog.interfaces import ICatalog
 from zope.event import notify
+from waeup.kofa.applicants.container import ApplicantsContainer
 from waeup.kofa.university.faculty import Faculty
 from waeup.kofa.university.department import Department
@@ -446,4 +448,5 @@
         configuration.academic_session = datetime.now().year - 2
         self.app['configuration'].addSessionConfiguration(configuration)
+        self.configuration = configuration
         # Create at least one Kwarapoly faculty
         self.app['faculties']['CPGS'] = Faculty(code='CPGS')
@@ -547,2 +550,45 @@
         self.assertFalse('Dalash' in self.browser.contents)
         self.assertFalse('BT Education' in self.browser.contents)
+
+
+    def prepare_special_container(self):
+        # Add special application container
+        container_name = u'special%s' % (datetime.now().year - 2)
+        applicantscontainer = ApplicantsContainer()
+        applicantscontainer.code = container_name
+        applicantscontainer.prefix = 'special'
+        applicantscontainer.year = datetime.now().year - 2
+        applicantscontainer.title = u'This is a special app container'
+        applicantscontainer.application_category = 'no'
+        applicantscontainer.mode = 'create'
+        delta = timedelta(days=10)
+        applicantscontainer.startdate = datetime.now(pytz.utc) - delta
+        applicantscontainer.enddate = datetime.now(pytz.utc) + delta
+        applicantscontainer.strict_deadline = True
+        self.app['applicants'][container_name] = applicantscontainer
+        # Add an applicant
+        applicant = createObject('waeup.Applicant')
+        # reg_number is the only field which has to be preset here
+        # because managers are allowed to edit this required field
+        applicant.reg_number = u'12345'
+        applicant.firstname = u'Vorname'
+        applicant.lastname = u'Nachname'
+        applicant.special_application = u'transcript_local'
+        applicant.applicant_id = u'special_anything'
+        self.app['applicants'][container_name].addApplicant(applicant)
+        self.special_applicant = applicant
+        self.configuration.transcript_local_fee = 5300.0
+        self.special_manage_path = 'http://localhost/app/applicants/%s/%s/%s' % (
+            container_name, applicant.application_number, 'manage')
+
+    def test_interswitch_form_special(self):
+        self.prepare_special_container()
+        self.browser.open(self.special_manage_path)
+        self.browser.getControl("Add online").click()
+        self.assertMatches('...ticket created...',
+                           self.browser.contents)
+        self.browser.getLink("CollegePAY", index=0).click()
+        self.assertTrue(
+            '<item_detail item_id="1" item_name="transcript_local" '
+            'item_amt="450000" bank_id="10" acct_num="0131959715" />'
+            in self.browser.contents)
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/utils/utils.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/utils/utils.py	(revision 10837)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/utils/utils.py	(revision 10844)
@@ -35,4 +35,5 @@
         'pgd': 'Postgraduate Diploma Programmes',
         'rmd': 'Remedial Programmes',
+        'no': 'no application',
         }
 
@@ -107,2 +108,22 @@
         'itch': 'ITCH Hostel'
         }
+
+    SPECIAL_APP_DICT = {
+        'certificate': 'Certificate Payment',
+        'state_result': 'Statement of Result Payment',
+        'transcript_local': 'Transcript (local) Payment',
+        'transcript_foreign': 'Transcript (foreign) Payment',
+        '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 Payment',
+        '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': 'Convocation Brochure Payment',
+        }
