Index: /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/batching.py
===================================================================
--- /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/batching.py	(revision 16948)
+++ /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/batching.py	(revision 16949)
@@ -19,10 +19,12 @@
 """
 from kofacustom.nigeria.students.batching import NigeriaStudentProcessor
-from waeup.kofa.students.batching import StudentOnlinePaymentProcessor
+from waeup.kofa.students.batching import (
+    StudentOnlinePaymentProcessor, StudentStudyLevelProcessor)
 from kofacustom.unidel.students.interfaces import (
     ICustomStudent,
     ICustomStudentUpdateByRegNo,
     ICustomStudentUpdateByMatricNo,
-    ICustomStudentOnlinePayment
+    ICustomStudentOnlinePayment,
+    ICustomStudentStudyLevel
     )
 
@@ -38,2 +40,15 @@
     """
     iface = ICustomStudentOnlinePayment
+
+class CustomStudentStudyLevelProcessor(StudentStudyLevelProcessor):
+    """
+    """
+    iface = ICustomStudentStudyLevel
+
+    @property
+    def available_fields(self):
+        fields = super(
+            CustomStudentStudyLevelProcessor, self).available_fields + ['previous',]
+        fields.remove('total_credits_s1')
+        fields.remove('total_credits_s2')
+        return  fields
Index: /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/browser.py
===================================================================
--- /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/browser.py	(revision 16948)
+++ /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/browser.py	(revision 16949)
@@ -27,5 +27,5 @@
 from waeup.kofa.browser.layout import action, jsaction
 from waeup.kofa.students.browser import (
-    StudyLevelEditFormPage, StudyLevelDisplayFormPage,
+    StudyLevelEditFormPage, StudyLevelDisplayFormPage, StudyLevelManageFormPage,
     StudentBasePDFFormPage, ExportPDFCourseRegistrationSlip,
     CourseTicketDisplayFormPage, StudentTriggerTransitionFormPage,
@@ -113,2 +113,35 @@
     form_fields['payment_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
 
+class CustomStudyLevelDisplayFormPage(StudyLevelDisplayFormPage):
+    """ Page to display student study levels
+    """
+    #grok.template('studylevelpage')
+    grok.context(ICustomStudentStudyLevel)
+
+    form_fields = grok.AutoFields(ICustomStudentStudyLevel).omit(
+        'level',)
+    form_fields[
+        'validation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
+
+class CustomStudyLevelManageFormPage(StudyLevelManageFormPage):
+    """ Page to edit the student study level data
+    """
+    grok.context(ICustomStudentStudyLevel)
+
+    form_fields = grok.AutoFields(ICustomStudentStudyLevel).omit(
+        'validation_date', 'validated_by', 'total_credits', 'gpa', 'level',
+        'total_credits_s1', 'total_credits_s2')
+
+class CustomExportPDFCourseRegistrationSlip(ExportPDFCourseRegistrationSlip):
+    """Deliver a PDF slip of the context.
+    """
+    grok.context(ICustomStudentStudyLevel)
+    form_fields = grok.AutoFields(ICustomStudentStudyLevel).omit(
+        'level', 'gpa', 'transcript_remark')
+    form_fields[
+        'validation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le')
+    #prefix = 'form'
+    omit_fields = (
+        'password', 'suspended', 'phone', 'date_of_birth',
+        'adm_code', 'sex', 'suspended_comment', 'current_level',
+        'flash_notice')
Index: /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/interfaces.py
===================================================================
--- /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/interfaces.py	(revision 16948)
+++ /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/interfaces.py	(revision 16949)
@@ -65,4 +65,19 @@
     """
 
+    total_credits_s1 = schema.Int(
+        title = _(u'1st Semester Credits'),
+        required = False,
+        )
+
+    total_credits_s2 = schema.Int(
+        title = _(u'2nd Semester Credits'),
+        required = False,
+        )
+
+    total_credits = schema.Int(
+        title = _(u'Total Credits'),
+        required = False,
+        )
+
 class ICustomStudentOnlinePayment(ICustomOnlinePayment):
     """A student payment via payment gateways.
Index: /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/studylevel.py
===================================================================
--- /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/studylevel.py	(revision 16948)
+++ /main/kofacustom.unidel/trunk/src/kofacustom/unidel/students/studylevel.py	(revision 16949)
@@ -38,6 +38,23 @@
     grok.provides(ICustomStudentStudyLevel)
 
+    @property
+    def total_credits_s1(self):
+        total = 0
+        for ticket in self.values():
+            if ticket.semester == 1 and not ticket.outstanding:
+                total += ticket.credits
+        return total
+
+    @property
+    def total_credits_s2(self):
+        total = 0
+        for ticket in self.values():
+            if ticket.semester == 2 and not ticket.outstanding:
+                total += ticket.credits
+        return total
+
 CustomStudentStudyLevel = attrs_to_fields(
-    CustomStudentStudyLevel, omit=['total_credits', 'gpa'])
+    CustomStudentStudyLevel, omit=['total_credits', 'gpa',
+        'total_credits_s1', 'total_credits_s2'])
 
 class CustomStudentStudyLevelFactory(StudentStudyLevelFactory):
