Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/browser.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/browser.py	(revision 10694)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/browser.py	(revision 10695)
@@ -206,2 +206,29 @@
             omit_fields=self.omit_fields
             )
+
+class ExportPDFRegistrationSlipPage(grok.View):
+    """Deliver a PDF slip of the context.
+    """
+    grok.context(ICustomStudent)
+    grok.name('registration_form.pdf')
+    grok.require('waeup.viewStudent')
+    prefix = 'form'
+    omit_fields = (
+        'suspended', 'phone',
+        'adm_code', 'suspended_comment', 'email', 'sex',
+        'current_mode', 'matric_number')
+    title = ''
+    label = 'Registration Form'
+
+    form_fields = grok.AutoFields(ICustomStudent).select(
+        'marit_stat', 'lga', 'nationality',
+        'perm_address',)
+
+    def render(self):
+        studentview = StudentBasePDFFormPage(self.context.student,
+            self.request, self.omit_fields)
+        students_utils = getUtility(IStudentsUtils)
+        return students_utils.renderPDF(
+            self, 'registration_form.pdf',
+            self.context.student, studentview, signatures=([_('Bursar')],),
+            omit_fields=self.omit_fields)
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/tests/test_browser.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/tests/test_browser.py	(revision 10694)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/tests/test_browser.py	(revision 10695)
@@ -348,5 +348,5 @@
         return
 
-    def test_pdf_slips(self):
+    def test_admission_pdf_slips(self):
         # Login
         self.browser.open(self.login_path)
@@ -367,6 +367,6 @@
         self.assertRaises(
             LinkNotFoundError, self.browser.getLink, 'Download admission notification')
-        self.browser.open(self.student_path, 'admission_notification.pdf')
-        self.assertFalse('Not allowed' in self.browser.contents)
+        self.browser.open(self.student_path + '/admission_notification.pdf')
+        self.assertTrue('Not allowed' in self.browser.contents)
         # admission notification
         IWorkflowState(self.student).setState('cleared')
@@ -382,9 +382,9 @@
         self.assertRaises(
             LinkNotFoundError, self.browser.getLink, 'Download admission letter')
-        self.browser.open(self.student_path, 'admission_slip.pdf')
-        self.assertFalse('Not allowed' in self.browser.contents)
-        return
-
-    def test_course_registration_pdf_slip(self):
+        self.browser.open(self.student_path + '/admission_slip.pdf')
+        self.assertTrue('Not allowed' in self.browser.contents)
+        return
+
+    def test_registration_pdf_slips(self):
         # Student cant login if their password is not set
         IWorkflowState(self.student).setState('school fee paid')
@@ -407,3 +407,13 @@
         open(path, 'wb').write(self.browser.contents)
         print "Sample PDF course_registration_slip.pdf written to %s" % path
-        return
+
+        self.browser.open(self.student_path)
+        self.browser.getLink("Download registration form").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.headers['Content-Type'],
+                         'application/pdf')
+        path = os.path.join(samples_dir(), 'registration_form.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample PDF registration_form.pdf written to %s" % path
+
+        return
Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/viewlets.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/viewlets.py	(revision 10694)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/students/viewlets.py	(revision 10695)
@@ -70,2 +70,17 @@
             return ''
         return self.view.url(self.view.context, self.target)
+
+class RegistrationFormActionButton(ManageActionButton):
+    grok.order(4)
+    grok.context(IStudent)
+    grok.view(StudentBaseDisplayFormPage)
+    grok.require('waeup.viewStudent')
+    icon = 'actionicon_pdf.png'
+    text = _('Download registration form')
+    target = 'registration_form.pdf'
+
+    @property
+    def target_url(self):
+        if self.context.state in (CREATED,):
+            return ''
+        return self.view.url(self.view.context, self.target)
