Index: /main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 9847)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 9848)
@@ -94,5 +94,5 @@
         #    return _('No second sitting result uploaded.')
         if not store.getFileByContext(self.context, attr=u'secr_cults.jpg'):
-            return _('No affidavit of non-menbership of secret cults uploaded.')
+            return _('No affidavit of non-membership of secret cults uploaded.')
         return False
 
@@ -112,22 +112,4 @@
     form_fields['payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
 
-
-## In case we need to deactivate clearance
-#class CustomStudentClearPage(StudentClearPage):
-#    """ Clear student by clearance officer
-#    """
-#    def update(self):
-#        self.flash('Clearance temporarily disabled!')
-#        self.redirect(self.url(self.context,'view_clearance'))
-#        return
-
-#class CustomStudentRejectClearancePage(StudentRejectClearancePage):
-#    """ Reject clearance by clearance officers
-#    """
-
-#    def update(self):
-#        self.flash('Clearance temporarily disabled!')
-#        self.redirect(self.url(self.context,'view_clearance'))
-#        return
 
 class CustomExportPDFClearanceSlipPage(NigeriaExportPDFClearanceSlipPage):
@@ -217,12 +199,53 @@
     def render(self):
         portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
-        Sem = translate(_('Sem.'), 'waeup.kofa', target_language=portal_language)
-        Code = translate(_('Code'), 'waeup.kofa', target_language=portal_language)
-        Title = translate(_('Title'), 'waeup.kofa', target_language=portal_language)
-        Dept = translate(_('Dept.'), 'waeup.kofa', target_language=portal_language)
-        Faculty = translate(_('Faculty'), 'waeup.kofa', target_language=portal_language)
-        Cred = translate(_('Cred.'), 'waeup.kofa', target_language=portal_language)
-        Mand = translate(_('Requ.'), 'waeup.kofa', target_language=portal_language)
-        Grade = translate(_('Grade'), 'waeup.kofa', target_language=portal_language)
+        Sem = translate('Sem.', 'waeup.kofa', target_language=portal_language)
+        Code = translate('Code', 'waeup.kofa', target_language=portal_language)
+        Title = translate('Title', 'waeup.kofa', target_language=portal_language)
+        Dept = translate('Dept.', 'waeup.kofa', target_language=portal_language)
+        Faculty = translate('Faculty', 'waeup.kofa', target_language=portal_language)
+        Cred = translate('Cred.', 'waeup.kofa', target_language=portal_language)
+        Mand = translate('Requ.', 'waeup.kofa', target_language=portal_language)
+        studentview = StudentBasePDFFormPage(self.context.student,
+            self.request, self.omit_fields)
+        students_utils = getUtility(IStudentsUtils)
+        tabledata = sorted(self.context.values(),
+            key=lambda value: str(value.semester) + value.code)
+        return students_utils.renderPDF(
+            self, 'course_registration_slip.pdf',
+            self.context.student, studentview,
+            tableheader=[(Sem,'semester', 1.5),(Code,'code', 2.5),
+                         (Title,'title', 5),
+                         (Dept,'dcode', 1.5), (Faculty,'fcode', 1.5),
+                         (Cred, 'credits', 1.5),
+                         (Mand, 'mandatory', 1.5),
+                         ],
+            tabledata=tabledata)
+
+class UnibenExportPDFCourseResultSlipPage(ExportPDFCourseRegistrationSlipPage):
+    """Deliver a PDF slip of the context.
+    """
+
+    grok.name('course_result_slip.pdf')
+
+    @property
+    def label(self):
+        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
+        lang = self.request.cookies.get('kofa.language', portal_language)
+        level_title = translate(self.context.level_title, 'waeup.kofa',
+            target_language=lang)
+        return translate(_('Course Result Slip'),
+            'waeup.uniben', target_language=portal_language) \
+            + ' %s' % level_title
+
+    def render(self):
+        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
+        Sem = translate('Sem.', 'waeup.kofa', target_language=portal_language)
+        Code = translate('Code', 'waeup.kofa', target_language=portal_language)
+        Title = translate('Title', 'waeup.kofa', target_language=portal_language)
+        Dept = translate('Dept.', 'waeup.kofa', target_language=portal_language)
+        Faculty = translate('Faculty', 'waeup.kofa', target_language=portal_language)
+        Cred = translate('Cred.', 'waeup.kofa', target_language=portal_language)
+        Mand = translate('Requ.', 'waeup.kofa', target_language=portal_language)
+        Grade = translate('Grade', 'waeup.kofa', target_language=portal_language)
         studentview = StudentBasePDFFormPage(self.context.student,
             self.request, self.omit_fields)
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 9847)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 9848)
@@ -191,5 +191,5 @@
         #self.browser.getControl("Save and request clearance").click()
 
-        self.assertTrue('No affidavit of non-menbership of secret cults uploaded'
+        self.assertTrue('No affidavit of non-membership of secret cults uploaded'
             in self.browser.contents)
         secr_cults = 'My non-membership scan'
@@ -362,4 +362,9 @@
         self.browser.open(self.student_path + '/studycourse/100')
         self.browser.getLink("Download course registration slip").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.headers['Content-Type'], 'application/pdf')
+        # Students can open the special Uniben pdf course result slip
+        self.browser.open(self.student_path + '/studycourse/100')
+        self.browser.getLink("Download course result slip").click()
         self.assertEqual(self.browser.headers['Status'], '200 Ok')
         self.assertEqual(self.browser.headers['Content-Type'], 'application/pdf')
Index: /main/waeup.uniben/trunk/src/waeup/uniben/students/viewlets.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/students/viewlets.py	(revision 9847)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/students/viewlets.py	(revision 9848)
@@ -20,9 +20,11 @@
 from waeup.kofa.interfaces import REQUESTED
 from waeup.kofa.browser.viewlets import ManageActionButton
-from waeup.uniben.students.interfaces import ICustomStudentStudyCourse
+from waeup.uniben.students.interfaces import (
+    ICustomStudentStudyCourse, ICustomStudentStudyLevel)
 from waeup.kofa.students.viewlets import (
     FileDisplay, FileUpload, Image)
 from waeup.kofa.students.browser import (
-    ExportPDFClearanceSlipPage, StudyCourseDisplayFormPage)
+    ExportPDFClearanceSlipPage, StudyCourseDisplayFormPage,
+    StudyLevelDisplayFormPage)
 
 from kofacustom.nigeria.interfaces import MessageFactory as _
@@ -41,4 +43,20 @@
             return self.view.url(self.view.context, self.target)
         return False
+
+class CourseResultSlipActionButton(ManageActionButton):
+    grok.order(6)
+    grok.context(ICustomStudentStudyLevel)
+    grok.view(StudyLevelDisplayFormPage)
+    grok.require('waeup.viewStudent')
+    icon = 'actionicon_pdf.png'
+    text = _('Download course result slip')
+    target = 'course_result_slip.pdf'
+
+    @property
+    def target_url(self):
+        is_current = self.context.__parent__.is_current
+        if not is_current:
+            return ''
+        return self.view.url(self.view.context, self.target)
 
 # JAMB Letter
