Index: main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 12085)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 12121)
@@ -24,5 +24,5 @@
     REQUESTED, IExtFileStore, IKofaUtils, IObjectHistory)
 from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
-from waeup.kofa.browser.layout import action, KofaEditFormPage
+from waeup.kofa.browser.layout import action, KofaEditFormPage, UtilityView
 from waeup.kofa.students.browser import (
     StudyLevelEditFormPage, StudyLevelDisplayFormPage,
@@ -43,4 +43,5 @@
 
 from waeup.uniben.students.interfaces import (
+    ICustomStudent,
     ICustomStudentOnlinePayment, ICustomStudentStudyCourse,
     ICustomStudentStudyLevel,
@@ -125,4 +126,50 @@
             sigs_in_footer=self._sigsInFooter(), show_scans=False,
             omit_fields=self.omit_fields)
+
+
+class ExportClearanceInvitationSlipPage(UtilityView, grok.View):
+    """Deliver an invitation letter to physical clearance.
+
+    This form page is available only in Uniben.
+    """
+    grok.context(ICustomStudent)
+    grok.name('clearance_invitation_slip.pdf')
+    grok.require('waeup.viewStudent')
+    prefix = 'form'
+
+    label = u'Invitation Letter to Physical Clearance'
+
+    omit_fields = (
+        'suspended', 'phone', 'email',
+        'adm_code', 'suspended_comment',
+        'date_of_birth', 'current_level',
+        'faculty', 'department', 'current_mode',
+        'entry_session', 'matric_number', 'sex')
+
+    form_fields = []
+
+    @property
+    def note(self):
+        if self.context.physical_clearance_date:
+            return """
+<br /><br /><br /><br /><font size="12">
+You are kindly invited to physical clearance on %s
+
+<br /><br />
+Clearance Officer<br />
+</font>
+
+""" % self.context.physical_clearance_date
+        return
+
+    def render(self):
+        studentview = StudentBasePDFFormPage(self.context.student,
+            self.request, self.omit_fields)
+        students_utils = getUtility(IStudentsUtils)
+        return students_utils.renderPDF(
+            self, 'clearance_invitation_slip',
+            self.context.student, studentview,
+            omit_fields=self.omit_fields,
+            note=self.note)
 
 class StudyCourseCOEditFormPage(KofaEditFormPage):
Index: main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 12085)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 12121)
@@ -31,4 +31,5 @@
 from waeup.kofa.students.accommodation import BedTicket
 from waeup.kofa.testing import FunctionalTestCase
+from waeup.kofa.browser.tests.test_pdf import samples_dir
 from waeup.kofa.interfaces import (
     IExtFileStore, IFileStoreNameChooser)
@@ -175,4 +176,14 @@
         self.assertTrue('Clearance has been requested'
             in self.browser.contents)
+        # Student can export physical_clearance.slip
+        self.app['configuration'].name = u'University of Benin'
+        self.student.physical_clearance_date = u'January 5th, 2015'
+        self.browser.getLink("Clearance Data").click()
+        self.browser.getLink("Download clearance invitation slip").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.headers['Content-Type'], 'application/pdf')
+        path = os.path.join(samples_dir(), 'clearance_invitation_slip.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample PDF clearance_invitation_slip.pdf written to %s" % path
 
     def test_manage_payments(self):
Index: main/waeup.uniben/trunk/src/waeup/uniben/students/viewlets.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/viewlets.py	(revision 12085)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/viewlets.py	(revision 12121)
@@ -21,10 +21,11 @@
 from waeup.kofa.browser.viewlets import ManageActionButton
 from waeup.uniben.students.interfaces import (
-    ICustomStudentStudyCourse, ICustomStudentStudyLevel)
+    ICustomStudentStudyCourse, ICustomStudentStudyLevel,
+    ICustomStudent, )
 from waeup.kofa.students.viewlets import (
     FileDisplay, FileUpload, Image)
 from waeup.kofa.students.browser import (
     ExportPDFClearanceSlipPage, StudyCourseDisplayFormPage,
-    StudyLevelDisplayFormPage)
+    StudyLevelDisplayFormPage, StudentClearanceDisplayFormPage)
 
 from kofacustom.nigeria.interfaces import MessageFactory as _
@@ -56,4 +57,15 @@
     def target_url(self):
         return self.view.url(self.view.context, self.target)
+
+
+class ClearanceInvitationSlipActionButton(ManageActionButton):
+    grok.order(5)
+    grok.context(ICustomStudent)
+    grok.view(StudentClearanceDisplayFormPage)
+    grok.require('waeup.viewStudent')
+    icon = 'actionicon_pdf.png'
+    text = _('Download clearance invitation slip')
+    target = 'clearance_invitation_slip.pdf'
+
 
 # JAMB Letter
