Index: main/kofacustom.coewarri/trunk/src/kofacustom/coewarri/students/browser.py
===================================================================
--- main/kofacustom.coewarri/trunk/src/kofacustom/coewarri/students/browser.py	(revision 14718)
+++ main/kofacustom.coewarri/trunk/src/kofacustom/coewarri/students/browser.py	(revision 14719)
@@ -39,4 +39,5 @@
     NigeriaExportPDFPaymentSlip,
     NigeriaExportPDFClearanceSlip,
+    NigeriaExportPDFCourseRegistrationSlip
     )
 
@@ -46,2 +47,56 @@
 from kofacustom.coewarri.interfaces import MessageFactory as _
 
+class CustomExportPDFCourseRegistrationSlip(
+    NigeriaExportPDFCourseRegistrationSlip):
+    """Deliver a PDF slip of the context.
+    """
+    grok.context(ICustomStudentStudyLevel)
+
+    def _signatures(self):
+        return (
+            [('I, ' + self.context.student.display_fullname +
+              ', do hereby declare that the above information is '
+              'true and correct. <br>', _('Student\'s Signature'), '<br>')],
+            [('', _('Course Adviser'), '<br>')],
+            [('', _('Head of Department'), '<br>')],
+            [('', _('Dean of School'))]
+            )
+
+    def render(self):
+        portal_language = getUtility(IKofaUtils).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)
+        Score = translate(_('Score'), '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)
+        students_utils = getUtility(IStudentsUtils)
+
+        tabledata = []
+        tableheader = []
+        for i in range(1,7):
+            tabledata.append(sorted(
+                [value for value in self.context.values() if value.semester == i],
+                key=lambda value: str(value.semester) + value.code))
+            tableheader.append([(Code,'code', 2.5),
+                             (Title,'title', 5),
+                             (Dept,'dcode', 1.5), (Faculty,'fcode', 1.5),
+                             (Cred, 'credits', 1.5),
+                             #(Mand, 'mandatory', 1.5),
+                             (Score, 'score', 1.5),
+                             (Grade, 'grade', 1.5),
+                             #('Auto', 'automatic', 1.5)
+                             ])
+        return students_utils.renderPDF(
+            self, 'course_registration_slip.pdf',
+            self.context.student, studentview,
+            tableheader=tableheader,
+            tabledata=tabledata,
+            signatures=self._signatures(),
+            omit_fields=self.omit_fields
+            )
+
Index: main/kofacustom.coewarri/trunk/src/kofacustom/coewarri/students/tests/test_browser.py
===================================================================
--- main/kofacustom.coewarri/trunk/src/kofacustom/coewarri/students/tests/test_browser.py	(revision 14718)
+++ main/kofacustom.coewarri/trunk/src/kofacustom/coewarri/students/tests/test_browser.py	(revision 14719)
@@ -30,4 +30,5 @@
 from waeup.kofa.students.tests.test_browser import StudentsFullSetup
 from waeup.kofa.students.accommodation import BedTicket
+from waeup.kofa.browser.tests.test_pdf import samples_dir
 from waeup.kofa.testing import FunctionalTestCase
 from waeup.kofa.interfaces import (
@@ -112,2 +113,24 @@
         self.assertEqual(self.student['payments'].values()[3].p_level, 200)
         return
+
+    def test_registration_pdf_slips(self):
+        # Student cant login if their password is not set
+        IWorkflowState(self.student).setState('school fee paid')
+        self.browser.open(self.login_path)
+        self.browser.getControl(name="form.login").value = self.student_id
+        self.browser.getControl(name="form.password").value = 'spwd'
+        self.browser.getControl("Login").click()
+        self.browser.getLink("Study Course").click()
+        self.browser.getLink("Add course list").click()
+        self.assertMatches('...Add current level 100 (Year 1)...',
+                           self.browser.contents)
+        self.browser.getControl("Create course list now").click()
+        # A level with one course ticket was created
+        self.browser.getLink("100").click()
+        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')
+        path = os.path.join(samples_dir(), 'course_registration_slip.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample PDF course_registration_slip.pdf written to %s" % path
