Index: main/kofacustom.udss/trunk/src/kofacustom/udss/students/browser.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/students/browser.py	(revision 17733)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/students/browser.py	(revision 17737)
@@ -21,4 +21,5 @@
 from zope.component import getUtility
 from zope.security import checkPermission
+from zope.formlib.textwidgets import BytesDisplayWidget
 from hurry.workflow.interfaces import IWorkflowInfo
 from waeup.kofa.interfaces import REQUESTED, IExtFileStore, IKofaUtils
@@ -27,8 +28,19 @@
 from waeup.kofa.browser.layout import action, jsaction
 from waeup.kofa.students.browser import (
-    StudyLevelEditFormPage, StudyLevelDisplayFormPage,
-    StudentBasePDFFormPage, ExportPDFCourseRegistrationSlip,
-    CourseTicketDisplayFormPage, StudentTriggerTransitionFormPage,
-    PaymentsManageFormPage, msave, emit_lock_message)
+    StudentPersonalDisplayFormPage,
+    StudentPersonalManageFormPage,
+    StudentPersonalEditFormPage,
+    StudentClearanceDisplayFormPage,
+    StudentClearanceManageFormPage,
+    StudentClearanceEditFormPage,
+    ExportPDFClearanceSlip,
+    StudyLevelEditFormPage,
+    StudyLevelDisplayFormPage,
+    StudentBasePDFFormPage,
+    ExportPDFCourseRegistrationSlip,
+    CourseTicketDisplayFormPage,
+    StudentTriggerTransitionFormPage,
+    PaymentsManageFormPage,
+    msave, emit_lock_message)
 from waeup.kofa.students.interfaces import IStudentsUtils, ICourseTicket
 from waeup.kofa.students.workflow import FORBIDDEN_POSTGRAD_TRANS
@@ -39,10 +51,12 @@
     NigeriaOnlinePaymentAddFormPage,
     NigeriaExportPDFPaymentSlip,
-    NigeriaExportPDFClearanceSlip,
     )
 
 from kofacustom.udss.students.interfaces import (
-    ICustomStudentOnlinePayment, ICustomStudentStudyCourse,
-    ICustomStudentStudyLevel)
+    ICustomStudentOnlinePayment,
+    ICustomStudentStudyCourse,
+    ICustomStudentStudyLevel,
+    ICustomStudentPersonal,
+    ICustomStudentClearance)
 from kofacustom.udss.interfaces import MessageFactory as _
 
@@ -55,2 +69,76 @@
     def manage_payments_allowed(self):
         return checkPermission('waeup.manageStudent', self.context)
+
+class CustomStudentPersonalDisplayFormPage(StudentPersonalDisplayFormPage):
+    """ Page to display student personal data
+    """
+    form_fields = grok.AutoFields(ICustomStudentPersonal)
+    form_fields['perm_address'].custom_widget = BytesDisplayWidget
+    form_fields['mother_res_address'].custom_widget = BytesDisplayWidget
+    form_fields['father_res_address'].custom_widget = BytesDisplayWidget
+    form_fields['sponsor_res_address'].custom_widget = BytesDisplayWidget
+    form_fields[
+        'personal_updated'].custom_widget = FriendlyDatetimeDisplayWidget('le')
+
+class CustomStudentPersonalEditFormPage(StudentPersonalEditFormPage):
+    """ Page to edit personal data
+    """
+    form_fields = grok.AutoFields(ICustomStudentPersonal).omit('personal_updated')
+
+class CustomStudentPersonalManageFormPage(StudentPersonalManageFormPage):
+    """ Page to edit personal data
+    """
+    form_fields = grok.AutoFields(ICustomStudentPersonal)
+    form_fields['personal_updated'].for_display = True
+    form_fields[
+        'personal_updated'].custom_widget = FriendlyDatetimeDisplayWidget('le')
+
+class CustomStudentClearanceDisplayFormPage(StudentClearanceDisplayFormPage):
+    """ Page to display student clearance data
+    """
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(
+            ICustomStudentClearance).omit('clearance_locked')
+        if not getattr(self.context, 'officer_comment'):
+            form_fields = form_fields.omit('officer_comment')
+        else:
+            form_fields['officer_comment'].custom_widget = BytesDisplayWidget
+        return form_fields
+
+class CustomExportPDFClearanceSlip(ExportPDFClearanceSlip):
+    """Deliver a PDF slip of the context.
+    """
+    omit_fields = ('password', 'suspended', 'suspended_comment',
+        'phone', 'adm_code', 'email', 'date_of_birth', 'current_level',
+        'flash_notice')
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(
+            ICustomStudentClearance).omit('clearance_locked')
+        if not getattr(self.context, 'officer_comment'):
+            form_fields = form_fields.omit('officer_comment')
+        return form_fields
+
+class CustomStudentClearanceManageFormPage(StudentClearanceManageFormPage):
+    """ Page to edit student clearance data
+    """
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(
+            ICustomStudentClearance).omit('clr_code')
+        return form_fields
+
+class CustomStudentClearanceEditFormPage(StudentClearanceEditFormPage):
+    """ View to edit student clearance data by student
+    """
+
+    @property
+    def form_fields(self):
+        form_fields = grok.AutoFields(ICustomStudentClearance).omit(
+            'clearance_locked', 'clr_code', 'officer_comment',
+            'physical_clearance_date')
+        return form_fields
Index: main/kofacustom.udss/trunk/src/kofacustom/udss/students/interfaces.py
===================================================================
--- main/kofacustom.udss/trunk/src/kofacustom/udss/students/interfaces.py	(revision 17733)
+++ main/kofacustom.udss/trunk/src/kofacustom/udss/students/interfaces.py	(revision 17737)
@@ -18,5 +18,7 @@
 
 from zope import schema
+from waeup.kofa.interfaces import SimpleKofaVocabulary, academic_sessions_vocab
 from waeup.kofa.students.vocabularies import StudyLevelSource
+from waeup.kofa.students.interfaces import IStudentPersonal, IUGStudentClearance
 from kofacustom.nigeria.students.interfaces import (
     INigeriaStudentBase, INigeriaUGStudentClearance, INigeriaPGStudentClearance,
@@ -33,22 +35,118 @@
     """
 
-class ICustomStudentPersonal(INigeriaStudentPersonal):
+class ICustomStudentPersonal(IStudentPersonal):
     """Student personal data.
 
     """
 
-class ICustomUGStudentClearance(INigeriaUGStudentClearance):
+    religion = schema.Choice(
+        title = u'Religion',
+        default = 'no_say',
+        required = False,
+        vocabulary = SimpleKofaVocabulary(
+            (_('Muslim'), 'muslim'),
+            (_('Christian'), 'christian'),
+            (_('Others'), 'others'),
+            (_('Prefer not to say'), 'no_say'),)
+        )
+
+    disabled = schema.Bool(
+        title = u'Disabled',
+        default = False,
+        required = False,
+        )
+
+    father_firstname = schema.TextLine(
+        title = _(u'First Name of Father'),
+        required = False,
+        )
+    father_middlename = schema.TextLine(
+        title = _(u'Middle Name of Father'),
+        required = False,
+        )
+    father_lastname = schema.TextLine(
+        title = _(u'Last Name (Surname) of Father'),
+        required = False,
+        )
+    father_status = schema.TextLine(
+        title = _(u'Father\'s Status and Rank'),
+        required = False,
+        )
+    father_employer = schema.TextLine(
+        title = _(u'Father\'s Employer'),
+        required = False,
+        )
+    father_res_address = schema.Text(
+        title = _(u'Father\'s Residential Address'),
+        required = False,
+        )
+    father_contact_address = schema.Text(
+        title = _(u'Father\'s Contact Address (incl. P.O. Box)'),
+        required = False,
+        )
+    mother_firstname = schema.TextLine(
+        title = _(u'First Name of Mother'),
+        required = False,
+        )
+    mother_middlename = schema.TextLine(
+        title = _(u'Middle Name of Mother'),
+        required = False,
+        )
+    mother_lastname = schema.TextLine(
+        title = _(u'Last Name (Surname) of Mother'),
+        required = False,
+        )
+    mother_status = schema.TextLine(
+        title = _(u'Mother\'s Status and Rank'),
+        required = False,
+        )
+    mother_employer = schema.TextLine(
+        title = _(u'Mother\'s Employer'),
+        required = False,
+        )
+    mother_res_address = schema.Text(
+        title = _(u'Mother\'s Residential Address'),
+        required = False,
+        )
+    mother_contact_address = schema.Text(
+        title = _(u'Mother\'s Contact Address (incl. P.O. Box)'),
+        required = False,
+        )
+    sponsor_firstname = schema.TextLine(
+        title = _(u'First Name of sponsor'),
+        required = False,
+        )
+    sponsor_middlename = schema.TextLine(
+        title = _(u'Middle Name of Sponsor'),
+        required = False,
+        )
+    sponsor_lastname = schema.TextLine(
+        title = _(u'Last Name (Surname) of Sponsor'),
+        required = False,
+        )
+    sponsor_status = schema.TextLine(
+        title = _(u'Sponsor\'s Status and Rank'),
+        required = False,
+        )
+    sponsor_employer = schema.TextLine(
+        title = _(u'Sponsor\'s Employer'),
+        required = False,
+        )
+    sponsor_res_address = schema.Text(
+        title = _(u'Sponsor\'s Residential Address'),
+        required = False,
+        )
+    sponsor_contact_address = schema.Text(
+        title = _(u'Sponsor\'s Contact Address (incl. P.O. Box)'),
+        required = False,
+        )
+
+class ICustomStudentClearance(IUGStudentClearance):
     """Representation of ug student clearance data.
 
     """
 
-class ICustomPGStudentClearance(INigeriaPGStudentClearance):
-    """Representation of pg student clearance data.
-
-    """
-
-
-class ICustomStudent(ICustomStudentBase,ICustomUGStudentClearance,
-    ICustomPGStudentClearance,ICustomStudentPersonal):
+class ICustomStudent(ICustomStudentBase,ICustomStudentClearance,
+    ICustomStudentPersonal):
     """Representation of a student.
 
