Index: main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser.py
===================================================================
--- main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser.py	(revision 15076)
+++ main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser.py	(revision 15089)
@@ -29,4 +29,5 @@
     StudentBasePDFFormPage, ExportPDFCourseRegistrationSlip,
     CourseTicketDisplayFormPage, StudentTriggerTransitionFormPage,
+    ExportPDFTranscriptSlip,
     msave, emit_lock_message)
 from waeup.kofa.students.interfaces import IStudentsUtils, ICourseTicket
@@ -68,2 +69,93 @@
                 return _('No IT letter uploaded.')
         return False
+
+class CustomStudyLevelDisplayFormPage(StudyLevelDisplayFormPage):
+    """ Page to display student study levels
+    """
+    grok.template('studylevelpage')
+
+class CustomStudyLevelEditFormPage(StudyLevelEditFormPage):
+    """ Page to edit the student study level data by students.
+
+    """
+    grok.template('studyleveleditpage')
+
+class CustomCourseTicketDisplayFormPage(CourseTicketDisplayFormPage):
+    """ Page to display course tickets
+    """
+    form_fields = grok.AutoFields(ICourseTicket).omit('score')
+
+class CustomExportPDFCourseRegistrationSlip(ExportPDFCourseRegistrationSlip):
+    """Deliver a PDF slip of the context.
+    """
+
+    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,
+            omit_fields=self.omit_fields
+            )
+
+
+class CustomExportPDFTranscriptSlip(ExportPDFTranscriptSlip):
+    """Deliver a PDF slip of the context.
+    """
+
+    def render(self):
+        portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE
+        Term = translate(_('Term'), 'waeup.kofa', target_language=portal_language)
+        Code = translate(_('Code'), 'waeup.kofa', target_language=portal_language)
+        Title = translate(_('Title'), 'waeup.kofa', target_language=portal_language)
+        Cred = translate(_('Credits'), '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)
+
+        tableheader = [(Code,'code', 2.5),
+                         (Title,'title', 8.5),
+                         (Term, 'semester', 1.5),
+                         (Cred, 'credits', 1.5),
+                         #(Score, 'score', 1.5),
+                         (Grade, 'grade', 1.5),
+                         ]
+
+        return students_utils.renderPDFTranscript(
+            self, 'transcript.pdf',
+            self.context.student, studentview,
+            omit_fields=self.omit_fields,
+            tableheader=tableheader,
+            signatures=self._signatures(),
+            sigs_in_footer=self._sigsInFooter(),
+            )
Index: main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser_templates/studyleveleditpage.pt
===================================================================
--- main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser_templates/studyleveleditpage.pt	(revision 15089)
+++ main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser_templates/studyleveleditpage.pt	(revision 15089)
@@ -0,0 +1,71 @@
+<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/context/total_credits">TOTAL</span>)
+  </h3>
+  <table class="kofa-data-table dataTableManage">
+  <thead>
+    <tr>
+      <th>&nbsp;</th>
+      <th i18n:translate="">Term</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="">CO</th>
+      <th i18n:translate="">OS</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr tal:repeat="value view/translated_values">
+       <td>
+        <input type="checkbox" name="val_id"
+  		  tal:attributes="value value/__name__"
+        tal:condition="value/removable_by_student" />
+      </td>
+      <td tal:content="value/semester" nowrap>TERM</td>
+      <td> <a tal:attributes="href value/url">
+      <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/carry_over">CO</td>
+      <td tal:content="value/outstanding">OS</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>
+  <br /><br /><br />
+  <div class="form-inline">
+    <div class="form-group">
+        <input class="btn btn-primary" type="submit" name="ADD"
+               i18n:translate=""
+               value="Add course ticket" />
+    </div>
+    <div class="form-group">
+        <input type="text" name="course" class="form-control"
+               tal:attributes="placeholder view/placeholder" />
+    </div>
+  </div>
+  <br />
+  <p i18n:translate="">
+    You don't know the course code? Then select a course
+    <a href="ctadd">here</a>.
+  </p>
+</form>  
+
+
+
Index: main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser_templates/studylevelpage.pt
===================================================================
--- main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser_templates/studylevelpage.pt	(revision 15089)
+++ main/kofacustom.dspg/trunk/src/kofacustom/dspg/students/browser_templates/studylevelpage.pt	(revision 15089)
@@ -0,0 +1,65 @@
+<table class="form-table" i18n:domain="waeup.kofa">
+  <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>
+  </tbody>
+</table>
+
+<h3 i18n:domain="waeup.kofa" i18n:translate="">Course Tickets</h3>
+
+<table class="kofa-data-table dataTable" i18n:domain="waeup.kofa">
+  <thead>
+    <tr>
+      <th i18n:translate="">Term</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="">OS</th>
+      <th i18n:translate="">Auto</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr tal:repeat="value view/translated_values">
+      <td tal:content="value/semester" nowrap>TERM</td>
+      <td> <a tal:attributes="href value/url">
+      <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/outstanding">OS</td>
+      <td tal:content="value/automatic">AUTO</td>
+    </tr>
+  </tbody>
+</table>
+
+<p i18n:translate="">
+  CO: Carry-over course<br />
+  OS: Outstanding course<br />
+  Requ.: Required course<br />
+  Auto: Automatically created course ticket
+</p>
+
+<div i18n:domain="waeup.kofa"
+  tal:condition="python: not len(context.keys())" i18n:translate="">
+  The're no tickets added yet.
+</div>
