Index: main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/browser.py
===================================================================
--- main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/browser.py	(revision 12086)
+++ main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/browser.py	(revision 12885)
@@ -19,10 +19,146 @@
 """
 import grok
-from waeup.kofa.applicants.browser import (
-    ApplicantRegistrationPage, ApplicantsContainerPage)
+from zope.component import getUtility
+from zope.i18n import translate
+from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
+from zope.formlib.textwidgets import BytesDisplayWidget
+from waeup.kofa.students.interfaces import IStudentsUtils
 from kofacustom.nigeria.applicants.browser import (
     NigeriaApplicantDisplayFormPage,
+    NigeriaApplicantManageFormPage,
+    NigeriaApplicantEditFormPage,
     NigeriaPDFApplicationSlip)
+
+from kofacustom.nigeria.applicants.interfaces import (
+    UG_OMIT_DISPLAY_FIELDS,
+    UG_OMIT_PDF_FIELDS,
+    UG_OMIT_MANAGE_FIELDS,
+    UG_OMIT_EDIT_FIELDS,
+    PUTME_OMIT_DISPLAY_FIELDS,
+    PUTME_OMIT_PDF_FIELDS,
+    PUTME_OMIT_MANAGE_FIELDS,
+    PUTME_OMIT_EDIT_FIELDS,
+    PUTME_OMIT_RESULT_SLIP_FIELDS,
+    PUDE_OMIT_DISPLAY_FIELDS,
+    PUDE_OMIT_PDF_FIELDS,
+    PUDE_OMIT_MANAGE_FIELDS,
+    PUDE_OMIT_EDIT_FIELDS,
+    PUDE_OMIT_RESULT_SLIP_FIELDS,
+    )
+
+from kofacustom.wdu.applicants.interfaces import (
+    ICustomUGApplicant,
+    ICustomUGApplicantEdit,
+    ICustomPUTMEApplicantEdit,
+    )
 
 from kofacustom.wdu.interfaces import MessageFactory as _
 
+
+class CustomApplicantDisplayFormPage(NigeriaApplicantDisplayFormPage):
+    """A display view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        if self.target is not None and self.target.startswith('putme'):
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            for field in PUTME_OMIT_DISPLAY_FIELDS:
+                form_fields = form_fields.omit(field)
+        elif self.target is not None and self.target.startswith('pude'):
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            for field in PUDE_OMIT_DISPLAY_FIELDS:
+                form_fields = form_fields.omit(field)
+        else:
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            for field in UG_OMIT_DISPLAY_FIELDS:
+                form_fields = form_fields.omit(field)
+        #form_fields['perm_address'].custom_widget = BytesDisplayWidget
+        form_fields['notice'].custom_widget = BytesDisplayWidget
+        if not getattr(self.context, 'student_id'):
+            form_fields = form_fields.omit('student_id')
+        if not getattr(self.context, 'screening_score'):
+            form_fields = form_fields.omit('screening_score')
+        if not getattr(self.context, 'screening_venue') or self._not_paid():
+            form_fields = form_fields.omit('screening_venue')
+        if not getattr(self.context, 'screening_date') or self._not_paid():
+            form_fields = form_fields.omit('screening_date')
+        return form_fields
+
+class CustomPDFApplicationSlip(NigeriaPDFApplicationSlip):
+
+    @property
+    def form_fields(self):
+        if self.target is not None and self.target.startswith('putme'):
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            if self._reduced_slip():
+                for field in PUTME_OMIT_RESULT_SLIP_FIELDS:
+                    form_fields = form_fields.omit(field)
+            else:
+                for field in PUTME_OMIT_PDF_FIELDS:
+                    form_fields = form_fields.omit(field)
+        elif self.target is not None and self.target.startswith('pude'):
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            if self._reduced_slip():
+                for field in PUDE_OMIT_RESULT_SLIP_FIELDS:
+                    form_fields = form_fields.omit(field)
+            else:
+                for field in PUDE_OMIT_PDF_FIELDS:
+                    form_fields = form_fields.omit(field)
+        else:
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            for field in UG_OMIT_PDF_FIELDS:
+                form_fields = form_fields.omit(field)
+        if not getattr(self.context, 'student_id'):
+            form_fields = form_fields.omit('student_id')
+        if not getattr(self.context, 'screening_score'):
+            form_fields = form_fields.omit('screening_score')
+        if not getattr(self.context, 'screening_venue'):
+            form_fields = form_fields.omit('screening_venue')
+        if not getattr(self.context, 'screening_date'):
+            form_fields = form_fields.omit('screening_date')
+        return form_fields
+
+class CustomApplicantManageFormPage(NigeriaApplicantManageFormPage):
+    """A full edit view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        if self.target is not None and self.target.startswith('putme'):
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            for field in PUTME_OMIT_MANAGE_FIELDS:
+                form_fields = form_fields.omit(field)
+        elif self.target is not None and self.target.startswith('pude'):
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            for field in PUDE_OMIT_MANAGE_FIELDS:
+                form_fields = form_fields.omit(field)
+        else:
+            form_fields = grok.AutoFields(ICustomUGApplicant)
+            for field in UG_OMIT_MANAGE_FIELDS:
+                form_fields = form_fields.omit(field)
+        form_fields['student_id'].for_display = True
+        form_fields['applicant_id'].for_display = True
+        return form_fields
+
+class CustomApplicantEditFormPage(NigeriaApplicantEditFormPage):
+    """An applicant-centered edit view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        if self.target is not None and self.target.startswith('putme'):
+            form_fields = grok.AutoFields(ICustomPUTMEApplicantEdit)
+            for field in PUTME_OMIT_EDIT_FIELDS:
+                form_fields = form_fields.omit(field)
+        elif self.target is not None and self.target.startswith('pude'):
+            form_fields = grok.AutoFields(ICustomUGApplicantEdit)
+            for field in PUDE_OMIT_EDIT_FIELDS:
+                form_fields = form_fields.omit(field)
+        else:
+            form_fields = grok.AutoFields(ICustomUGApplicantEdit)
+            for field in UG_OMIT_EDIT_FIELDS:
+                form_fields = form_fields.omit(field)
+        form_fields['applicant_id'].for_display = True
+        form_fields['reg_number'].for_display = True
+        return form_fields
Index: main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/interfaces.py
===================================================================
--- main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/interfaces.py	(revision 12086)
+++ main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/interfaces.py	(revision 12885)
@@ -105,5 +105,5 @@
     """
 
-class IPUTMEApplicantEdit(IPUTMEApplicantEdit):
+class ICustomPUTMEApplicantEdit(IPUTMEApplicantEdit):
     """An undergraduate applicant interface for editing.
 
