Index: main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 9655)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 9686)
@@ -21,5 +21,5 @@
 from zope.component import getUtility
 from hurry.workflow.interfaces import IWorkflowInfo
-from waeup.kofa.interfaces import REQUESTED, IExtFileStore
+from waeup.kofa.interfaces import REQUESTED, IExtFileStore, IKofaUtils
 from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
 from waeup.kofa.browser.layout import KofaEditFormPage
@@ -27,7 +27,9 @@
 from waeup.kofa.students.browser import (
     StudentClearPage, StudentRejectClearancePage,
-    StudyLevelEditFormPage, StudentBasePDFFormPage,
+    StudyLevelEditFormPage, StudyLevelDisplayFormPage,
+    StudentBasePDFFormPage, ExportPDFCourseRegistrationSlipPage,
+    CourseTicketDisplayFormPage,
     msave, emit_lock_message)
-from waeup.kofa.students.interfaces import IStudentsUtils
+from waeup.kofa.students.interfaces import IStudentsUtils, ICourseTicket
 from waeup.kofa.students.workflow import FORBIDDEN_POSTGRAD_TRANS
 from kofacustom.nigeria.students.browser import (
@@ -176,4 +178,5 @@
 
     """
+    grok.template('studyleveleditpage')
 
     def _registerCourses(self, **data):
@@ -197,2 +200,45 @@
         self.redirect(self.url(self.context))
         return
+
+class CustomStudyLevelDisplayFormPage(StudyLevelDisplayFormPage):
+    """ Page to display student study levels
+    """
+    grok.template('studylevelpage')
+
+class CustomExportPDFCourseRegistrationSlipPage(
+    ExportPDFCourseRegistrationSlipPage):
+    """Deliver a PDF slip of the context.
+    """
+
+    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)
+        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),
+                         (Grade, 'grade', 1.5),
+                         #('Auto', 'automatic', 1.5)
+                         ],
+            tabledata=tabledata)
+
+class CustomCourseTicketDisplayFormPage(CourseTicketDisplayFormPage):
+    """ Page to display course tickets
+    """
+    form_fields = grok.AutoFields(ICourseTicket).omit('score')
Index: main/waeup.uniben/trunk/src/waeup/uniben/students/browser_templates/studyleveleditpage.pt
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/browser_templates/studyleveleditpage.pt	(revision 9686)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/browser_templates/studyleveleditpage.pt	(revision 9686)
@@ -0,0 +1,54 @@
+<form action="." tal:attributes="action request/URL" method="POST"
+      i18n:domain="waeup.kofa" enctype="multipart/form-data">
+
+  <h3 i18n:translate="">
+    Course Tickets
+    (Total Credits:
+    <span i18n:name="total_credits" tal:replace="view/total_credits">TOTAL</span>)
+  </h3>
+  <table class="display dataTableManage">
+  <thead>
+    <tr>
+      <th>&nbsp;</th>
+      <th i18n:translate="">Sem.</th>
+      <th i18n:translate="">Code</th>
+      <th i18n:translate="">Title</th>
+      <th i18n:translate="">Department</th>
+      <th i18n:translate="">Faculty</th>
+      <th i18n:translate="">Credits</th>
+      <th i18n:translate="">Grade</th>
+      <th i18n:translate="">CO</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr tal:repeat="value view/translated_values" class="gradeC">
+       <td>
+        <input type="checkbox" name="val_id"
+  		  tal:attributes="value value/__name__"
+        tal:condition="not: value/mandatory_bool" />
+      </td>
+      <td tal:content="value/semester">SEMESTER</td>
+      <td> <a tal:attributes="href value/__name__">
+      <span tal:content="value/code">CODE</span>
+      </a></td>
+      <td tal:content="value/title">TITLE</td>
+      <td tal:content="value/dcode">DEPARTMENT</td>
+      <td tal:content="value/fcode">FACULTY</td>
+      <td tal:content="value/credits">CREDITS</td>
+      <td tal:content="value/grade|nothing">GRADE</td>
+      <td tal:content="value/carry_over">CO</td>
+    </tr>
+  </tbody>
+  </table>
+
+  <div tal:condition="view/availableActions">
+    <span tal:repeat="action view/actions"
+          tal:omit-tag="">
+      <input tal:replace="structure action/render"/>
+    </span>
+  </div>
+
+</form>  
+
+
+
Index: main/waeup.uniben/trunk/src/waeup/uniben/students/browser_templates/studylevelpage.pt
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/browser_templates/studylevelpage.pt	(revision 9686)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/browser_templates/studylevelpage.pt	(revision 9686)
@@ -0,0 +1,67 @@
+<table class="form-table" i18n:domain="waeup.kofa">
+  <thead>
+  </thead>
+  <tbody>
+    <tal:block repeat="widget view/widgets">
+      <tr>
+        <td class="fieldname">
+          <span tal:content="widget/label">label</span>:
+        </td>
+        <td tal:on-error="default">
+          <div tal:content="structure widget">
+            <input type="text" />
+          </div>
+        </td>
+      </tr>
+    </tal:block>
+    <tr>
+      <td i18n:translate="">
+        Total Credits:
+      </td>
+      <td>
+        <span tal:replace="view/total_credits">TOTAL</span>
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 i18n:domain="waeup.kofa" i18n:translate="">Course Tickets</h3>
+
+<table class="display dataTable" i18n:domain="waeup.kofa">
+  <thead>
+    <tr>
+      <th i18n:translate="">Sem.</th>
+      <th i18n:translate="">Code</th>
+      <th i18n:translate="">Title</th>
+      <th i18n:translate="">Dep.</th>
+      <th i18n:translate="">Fac.</th>
+      <th i18n:translate="">Cred.</th>
+      <th i18n:translate="">Requ.</th>
+      <th i18n:translate="">Grade</th>
+      <th i18n:translate="">CO</th>
+      <th i18n:translate="">Auto</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr tal:repeat="value view/translated_values" class="gradeC">
+      <td tal:content="value/semester">SEMESTER</td>
+      <td> <a tal:attributes="href value/__name__">
+      <span tal:content="value/code">CODE</span>
+      </a></td>
+      <td tal:content="value/title">TITLE</td>
+      <td tal:content="value/dcode">DEPARTMENT</td>
+      <td tal:content="value/fcode">FACULTY</td>
+      <td tal:content="value/credits">CREDITS</td>
+      <td tal:content="value/mandatory">MANDATORY</td>
+      <td tal:content="value/grade|nothing">GRADE</td>
+      <td tal:content="value/carry_over">CO</td>
+      <td tal:content="value/automatic">AUTO</td>
+    </tr>
+  </tbody>
+</table>
+
+
+<div i18n:domain="waeup.kofa"
+  tal:condition="python: not len(context.keys())" i18n:translate="">
+  The're no tickets added yet.
+</div>
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 9655)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 9686)
@@ -326,4 +326,34 @@
                            self.browser.contents)
 
+    def test_student_course_registration(self):
+        # Uniben students see grade instead of score on all level pages
+        # and on course ticket page.
+        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()
+        # Now students can add the current study level
+        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.assertEqual(self.student['studycourse']['100'].number_of_tickets, 1)
+        self.browser.getLink("100").click()
+        self.assertTrue('<th>Grade</th>' in self.browser.contents)
+        self.assertFalse('<th>Score</th>' in self.browser.contents)
+        self.browser.getLink("Edit course list").click()
+        self.assertTrue('<th>Grade</th>' in self.browser.contents)
+        self.assertFalse('<th>Score</th>' in self.browser.contents)
+        self.browser.getLink("COURSE1").click()
+        self.assertFalse('Score' in self.browser.contents)
+        # Students can open the customized pdf course registration slip
+        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')
+
     def test_get_returning_data(self):
         # Student is in level 100, session 2004 with verdict A
