Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 10262)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser.py	(revision 10266)
@@ -166,4 +166,14 @@
     return True
 
+def level_dict(studycourse):
+    portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
+    level_dict = {}
+    studylevelsource = StudyLevelSource().factory
+    for code in studylevelsource.getValues(studycourse):
+        title = translate(studylevelsource.getTitle(studycourse, code),
+            'waeup.kofa', target_language=portal_language)
+        level_dict[code] = title
+    return level_dict
+
 class StudentsBreadcrumb(Breadcrumb):
     """A breadcrumb for the students container.
@@ -991,5 +1001,5 @@
 
     @property
-    def level_dict(self):
+    def level_dicts(self):
         studylevelsource = StudyLevelSource().factory
         for code in studylevelsource.getValues(self.context):
@@ -998,5 +1008,5 @@
 
     @property
-    def session_dict(self):
+    def session_dicts(self):
         yield(dict(code='', title='--'))
         for item in academic_sessions():
@@ -1058,9 +1068,13 @@
 
     def update(self):
+        if not self.context.student.transcript_enabled:
+            self.flash(_('You are not allowed to view the transcript.'))
+            self.redirect(self.url(self.context))
+            return
         super(StudyCourseTranscriptPage, self).update()
         self.semester_dict = getUtility(IKofaUtils).SEMESTER_DICT
+        self.level_dict = level_dict(self.context)
         self.session_dict = dict(
             [(item[1], item[0]) for item in academic_sessions()])
-        self.course_levels = course_levels
         self.studymode_dict = getUtility(IKofaUtils).STUDY_MODES_DICT
         return
@@ -1087,9 +1101,13 @@
 
     def update(self):
+        if not self.context.student.transcript_enabled:
+            self.flash(_('You are not allowed to download the transcript.'))
+            self.redirect(self.url(self.context))
+            return
         super(ExportPDFTranscriptPage, self).update()
         self.semester_dict = getUtility(IKofaUtils).SEMESTER_DICT
+        self.level_dict = level_dict(self.context)
         self.session_dict = dict(
             [(item[1], item[0]) for item in academic_sessions()])
-        self.course_levels = course_levels
         self.studymode_dict = getUtility(IKofaUtils).STUDY_MODES_DICT
         return
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/studycoursemanagepage.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/studycoursemanagepage.pt	(revision 10262)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/studycoursemanagepage.pt	(revision 10266)
@@ -71,5 +71,5 @@
         </span>
         <select id="addlevel" name="addlevel" class='span5'>
-          <option tal:attributes="value level/code" tal:repeat="level view/level_dict">
+          <option tal:attributes="value level/code" tal:repeat="level view/level_dicts">
             <span tal:replace="level/title">LEVELTITLE
           </span>
@@ -78,5 +78,5 @@
         &nbsp;&nbsp;<span i18n:translate="">in session</span>&nbsp;&nbsp;
         <select id="level_session" name="level_session" class='span3'>
-          <option tal:attributes="value session/code" tal:repeat="session view/session_dict">
+          <option tal:attributes="value session/code" tal:repeat="session view/session_dicts">
             <span tal:replace="session/title">LEVELSESSION
           </span>
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcript.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcript.pt	(revision 10262)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/browser_templates/transcript.pt	(revision 10266)
@@ -46,5 +46,5 @@
                                       level['tickets_2'], level['tickets_3'])">
       <tr tal:repeat="ticket semester_tickets" class="gradeC">
-        <td tal:content="python: view.course_levels.getTerm(ticket.level).title">LEVEL</td>
+        <td tal:content="python: view.level_dict[ticket.level]">LEVEL</td>
         <td tal:content="python: view.session_dict[ticket.level_session]">SESSION</td>
         <td tal:content="python: view.semester_dict[ticket.semester]">SEMESTER</td>
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/student.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/student.py	(revision 10262)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/student.py	(revision 10266)
@@ -232,4 +232,8 @@
         return False
 
+    @property
+    def transcript_enabled(self):
+        return True
+
     def transfer(self, certificate, current_session=None,
         current_level=None, current_verdict=None, previous_verdict=None):
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 10262)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 10266)
@@ -2205,6 +2205,8 @@
         self.assertTrue('Course list has been registered' in self.browser.contents)
         self.assertEqual(self.student.state, 'courses registered')
-        # Students can open the pdf transcript
-        self.browser.open(self.student_path + '/studycourse/transcript.pdf')
+        # Students can view the transcript
+        self.browser.open(self.studycourse_path)
+        self.browser.getLink("Transcript").click()
+        self.browser.getLink("Academic Transcript").click()
         self.assertEqual(self.browser.headers['Status'], '200 Ok')
         self.assertEqual(self.browser.headers['Content-Type'], 'application/pdf')
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 10262)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 10266)
@@ -216,5 +216,4 @@
     data = []
     style = getSampleStyleSheet()
-
     for level in levels_data:
         level_obj = level['level']
@@ -226,5 +225,5 @@
             view.session_dict[level_obj.level_session],
             trans(_('Level'), lang),
-            view.course_levels.getTerm(level_obj.level).title)
+            view.level_dict[level_obj.level])
         data.append(Paragraph(subheader, HEADING_STYLE))
         for element in tableheader:
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/viewlets.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/viewlets.py	(revision 10262)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/viewlets.py	(revision 10266)
@@ -45,5 +45,5 @@
     AccommodationManageFormPage, BedTicketDisplayFormPage,
     StudentClearanceEditFormPage, StudentPersonalEditFormPage,
-    PaymentsManageFormPage)
+    PaymentsManageFormPage, StudyCourseTranscriptPage)
 from waeup.kofa.students.interfaces import (
     IStudentsContainer, IStudent, IStudentStudyCourse, IStudentAccommodation,
@@ -341,4 +341,34 @@
     def target_url(self):
         if self.context.is_current:
+            return self.view.url(self.view.context, self.target)
+        return False
+
+class StudyCourseTranscriptActionButton(ManageActionButton):
+    grok.order(2)
+    grok.context(IStudentStudyCourse)
+    grok.view(StudyCourseDisplayFormPage)
+    grok.require('waeup.viewStudent')
+    text = _('Transcript')
+    target = 'transcript'
+    icon = 'actionicon_transcript.png'
+
+    @property
+    def target_url(self):
+        if self.context.student.transcript_enabled:
+            return self.view.url(self.view.context, self.target)
+        return False
+
+class TranscriptSlipActionButton(ManageActionButton):
+    grok.order(1)
+    grok.context(IStudentStudyCourse)
+    grok.view(StudyCourseTranscriptPage)
+    grok.require('waeup.viewStudent')
+    text = _('Academic Transcript')
+    target = 'transcript.pdf'
+    icon = 'actionicon_pdf.png'
+
+    @property
+    def target_url(self):
+        if self.context.student.transcript_enabled:
             return self.view.url(self.view.context, self.target)
         return False
