Index: main/waeup.custom/trunk/src/waeup/custom/students/browser.py
===================================================================
--- main/waeup.custom/trunk/src/waeup/custom/students/browser.py	(revision 7866)
+++ main/waeup.custom/trunk/src/waeup/custom/students/browser.py	(revision 7879)
@@ -21,7 +21,6 @@
     FriendlyDateWidget, FriendlyDateDisplayWidget
     )
-from waeup.custom.students.interfaces import (
-    IStudent, IStudentPersonal, IStudentClearance, IStudentClearanceEdit
-    )
+from waeup.kofa.browser.layout import KofaPage
+from waeup.kofa.students.interfaces import IStudentOnlinePayment
 from waeup.kofa.students.browser import (
     StudentPersonalDisplayFormPage, StudentPersonalManageFormPage,
@@ -29,4 +28,9 @@
     StudentClearanceDisplayFormPage
     )
+from waeup.kofa.students.viewlets import RequestCallbackActionButton
+from waeup.custom.students.interfaces import (
+    IStudent, IStudentPersonal, IStudentClearance, IStudentClearanceEdit
+    )
+from waeup.custom.interfaces import MessageFactory as _
 
 class StudentPersonalDisplayFormPage(StudentPersonalDisplayFormPage):
@@ -65,3 +69,76 @@
     form_fields['date_of_birth'].custom_widget = FriendlyDateWidget('le-year')
 
+class InterswitchActionButton(RequestCallbackActionButton):
+    grok.order(2)
+    icon = 'actionicon_pay.png'
+    text = _('CollegePAY')
+    target = 'goto_interswitch'
 
+class RequestCallbackActionButton(RequestCallbackActionButton):
+    grok.order(3)
+    icon = 'actionicon_call.png'
+    text = _('Request CollegePAY callback')
+    target = 'callback'
+
+class InterswitchPage(KofaPage):
+    """ View which sends a POST request to the Interswitch
+    CollegePAY payment gateway.
+    """
+    grok.context(IStudentOnlinePayment)
+    grok.name('goto_interswitch')
+    grok.template('goto_interswitch')
+    grok.require('waeup.payStudent')
+
+    label = _('Submit data to CollegePAY (Interswitch Payment Gateway)')
+    submit_button = _('Submit')
+
+    # Uniben product data (to be removed later)
+    product_id = '57'
+    currency = '566'
+    pay_item_id = '5700'
+
+    action = 'https://testwebpay.interswitchng.com/test_paydirect/webpay/pay.aspx'
+    site_redirect_url = 'http://localhost?echo='
+    site_name = 'xyz.waeup.org'
+    provider_acct = '2345'
+    provider_bank_id = '8'
+    provider_item_name = 'Kofa Provider Fee'
+    institution_acct = '1234'
+    institution_bank_id = '9'
+    institution_name = 'Sample University'
+
+    def update(self):
+        if self.context.p_state != 'unpaid':
+            self.flash(_("Payment ticket can't be re-send to CollegePAY."))
+            self.redirect(self.url(self.context, '@@index'))
+            return
+        xmldict = {}
+        self.student = self.context.getStudent()
+        self.amount = (self.context.amount_auth + self.context.surcharge_1 +
+            self.context.surcharge_2 + self.context.surcharge_3)
+        self.local_date_time = str(self.context.creation_date)
+        certificate = getattr(self.student['studycourse'],'certificate',None)
+        if certificate is not None:
+            xmldict['department'] = certificate.__parent__.__parent__.code
+            xmldict['faculty'] = certificate.__parent__.__parent__.__parent__.code
+        else:
+            xmldict['department'] = None
+            xmldict['faculty'] = None
+        xmldict['detail_ref'] = self.context.p_id
+        xmldict['provider_amt'] = self.context.surcharge_1
+        xmldict['provider_acct'] = self.provider_acct
+        xmldict['provider_bank_id'] = self.provider_bank_id
+        xmldict['provider_item_name'] = self.provider_item_name
+        xmldict['institution_amt'] = self.amount
+        xmldict['institution_acct'] = self.institution_acct
+        xmldict['institution_bank_id'] = self.institution_bank_id
+        xmldict['institution_item_name'] = self.context.p_category
+        xmldict['institution_name'] = self.institution_name
+        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
+        self.xml_data = """<input type="hidden" name="xml_data" value='%s'  />""" % xmltext
+        return
Index: main/waeup.custom/trunk/src/waeup/custom/students/browser_templates/goto_interswitch.pt
===================================================================
--- main/waeup.custom/trunk/src/waeup/custom/students/browser_templates/goto_interswitch.pt	(revision 7879)
+++ main/waeup.custom/trunk/src/waeup/custom/students/browser_templates/goto_interswitch.pt	(revision 7879)
@@ -0,0 +1,79 @@
+<form i18n:domain="waeup.kofa"
+  tal:attributes="action view/action" method="POST">
+
+  <p i18n:translate="">
+    These data will be submitted to the CollegePAY payment gateway,
+    please check:
+  </p>
+
+  <table class="form-table" i18n:domain="waeup.kofa">
+    <thead>
+    </thead>
+    <tbody>
+      <tr>
+        <td i18n:translate="" class="fieldname">
+          Total Amount Authorized:</td>
+        <td>
+          <span tal:replace="view/amount">AMOUNT</span>
+        </td>
+      </tr>
+      <tr>
+        <td i18n:translate="" class="fieldname">
+          Transaction Reference:</td>
+        <td>
+          <span tal:replace="view/context/p_id">TXNREF</span>
+        </td>
+      </tr>
+      <tr>
+        <td i18n:translate="" class="fieldname">
+          Customer Id:</td>
+        <td>
+          <span tal:replace="view/student/student_id">CUSTID</span>
+        </td>
+      </tr>
+      <tr>
+        <td i18n:translate="" class="fieldname">
+          Customer Name:</td>
+        <td>
+          <span tal:replace="view/student/display_fullname">CUSTNAME</span>
+        </td>
+      </tr>
+      <tr>
+        <td i18n:translate="" class="fieldname">
+          Payment Item:</td>
+        <td>
+          <span tal:replace="view/context/p_item">PAYMENTITEM</span>
+        </td>
+      </tr>
+      <tr>
+        <td i18n:translate="" class="fieldname">
+          Payment Category:</td>
+        <td>
+          <span tal:replace="view/context/p_category">PAYMENTCATEGORY</span>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+  <input type="hidden" name="product_id" tal:attributes="value view/product_id" />
+  <input type="hidden" name="currency" tal:attributes="value view/currency" />
+  <input type="hidden" name="pay_item_id" tal:attributes="value view/pay_item_id" />
+  <input type="hidden" name="site_redirect_url" tal:attributes="value view/site_redirect_url" />
+  <input type="hidden" name="site_name" tal:attributes="value view/site_name" />
+  <input type="hidden" name="local_date_time" tal:attributes="value view/local_date_time" />
+  <input type="hidden" name="amount" tal:attributes="value view/amount" />
+
+  <input type="hidden" name="txn_ref" tal:attributes="value view/context/p_id" />
+  <input type="hidden" name="cust_id_desc" tal:attributes="value view/context/p_item" />
+  <input type="hidden" name="pay_item_name" tal:attributes="value view/context/p_category" />
+
+  <input type="hidden" name="cust_id" tal:attributes="value view/student/student_id" />
+  <input type="hidden" name="cust_name" tal:attributes="value view/student/display_fullname" />
+
+
+  <input type="hidden" name="payment_params" value="college_split" />
+  <span tal:replace="structure view/xml_data"></span>
+
+  <input type="submit" class="btn" tal:attributes="value view/submit_button"/>
+
+</form>
Index: main/waeup.custom/trunk/src/waeup/custom/students/tests.py
===================================================================
--- main/waeup.custom/trunk/src/waeup/custom/students/tests.py	(revision 7866)
+++ main/waeup.custom/trunk/src/waeup/custom/students/tests.py	(revision 7879)
@@ -128,5 +128,5 @@
         #payment_url = self.browser.url
         #self.browser.open(payment_url)
-        self.browser.getLink("Request callback").click()
+        self.browser.getLink("Request CollegePAY callback").click()
         self.assertMatches('...Valid callback received...',
                           self.browser.contents)
Index: main/waeup.custom/trunk/src/waeup/custom/students/utils.py
===================================================================
--- main/waeup.custom/trunk/src/waeup/custom/students/utils.py	(revision 7866)
+++ main/waeup.custom/trunk/src/waeup/custom/students/utils.py	(revision 7879)
@@ -20,4 +20,5 @@
 from waeup.kofa.students.utils import StudentsUtils
 from waeup.kofa.students.interfaces import IStudentsUtils
+from waeup.custom.interfaces import MessageFactory as _
 
 def get_school_fee(student, surcharge):
@@ -67,5 +68,5 @@
             academic_session = grok.getSite()['configuration'][session]
         except KeyError:
-            d['error'] = u'Session configuration object is not available.'
+            d['error'] = _(u'Session configuration object is not available.')
             return d
         if category == 'transfer':
@@ -88,5 +89,5 @@
             d['p_session'] += 1
         if d['amount'] == 0:
-            d['error'] = u'Amount could not be determined.'
+            d['error'] = _(u'Amount could not be determined.')
         return d
 
