Index: main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/applicants/browser.py
===================================================================
--- main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/applicants/browser.py	(revision 9046)
+++ main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/applicants/browser.py	(revision 9049)
@@ -38,10 +38,10 @@
     INigeriaPGApplicant, INigeriaUGApplicant,
     INigeriaPGApplicantEdit, INigeriaUGApplicantEdit,
-    INigeriaApplicantOnlinePayment, IPUTMEApplicantEdit,
-    UG_OMIT_DISPLAY_FIELDS, PG_OMIT_DISPLAY_FIELDS,
-    UG_OMIT_PDF_FIELDS, PG_OMIT_PDF_FIELDS,
-    UG_OMIT_MANAGE_FIELDS, PG_OMIT_MANAGE_FIELDS,
+    INigeriaApplicantOnlinePayment,IPUTMEApplicantEdit,
+    UG_OMIT_DISPLAY_FIELDS, PUTME_OMIT_DISPLAY_FIELDS, PG_OMIT_DISPLAY_FIELDS,
+    UG_OMIT_PDF_FIELDS, PUTME_OMIT_PDF_FIELDS, PG_OMIT_PDF_FIELDS,
+    UG_OMIT_MANAGE_FIELDS, PUTME_OMIT_MANAGE_FIELDS, PG_OMIT_MANAGE_FIELDS,
     UG_OMIT_EDIT_FIELDS, PG_OMIT_EDIT_FIELDS, PUTME_OMIT_EDIT_FIELDS,
-    UG_OMIT_RESULT_SLIP_FIELDS)
+    PUTME_OMIT_RESULT_SLIP_FIELDS)
 from kofacustom.nigeria.interfaces import MessageFactory as _
 
@@ -85,12 +85,16 @@
             for field in PG_OMIT_PDF_FIELDS:
                 form_fields = form_fields.omit(field)
+        elif target is not None and target.startswith('putme'):
+            form_fields = grok.AutoFields(INigeriaUGApplicant)
+            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)
         else:
             form_fields = grok.AutoFields(INigeriaUGApplicant)
-            if self._reduced_slip():
-                for field in UG_OMIT_RESULT_SLIP_FIELDS:
-                    form_fields = form_fields.omit(field)
-            else:
-                for field in UG_OMIT_PDF_FIELDS:
-                    form_fields = form_fields.omit(field)
+            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')
@@ -107,4 +111,8 @@
             form_fields = grok.AutoFields(INigeriaPGApplicant)
             for field in PG_OMIT_DISPLAY_FIELDS:
+                form_fields = form_fields.omit(field)
+        elif target is not None and target.startswith('putme'):
+            form_fields = grok.AutoFields(INigeriaUGApplicant)
+            for field in PUTME_OMIT_DISPLAY_FIELDS:
                 form_fields = form_fields.omit(field)
         else:
@@ -124,4 +132,8 @@
             form_fields = grok.AutoFields(INigeriaPGApplicant)
             for field in PG_OMIT_MANAGE_FIELDS:
+                form_fields = form_fields.omit(field)
+        elif target is not None and target.startswith('putme'):
+            form_fields = grok.AutoFields(INigeriaUGApplicant)
+            for field in PUTME_OMIT_MANAGE_FIELDS:
                 form_fields = form_fields.omit(field)
         else:
Index: main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/applicants/interfaces.py
===================================================================
--- main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/applicants/interfaces.py	(revision 9046)
+++ main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/applicants/interfaces.py	(revision 9049)
@@ -21,4 +21,5 @@
 from zope import schema
 from waeup.kofa.applicants.interfaces import (
+    contextual_reg_num_source,
     IApplicantBaseData,
     AppCatCertificateSource, CertificateSource)
@@ -28,5 +29,4 @@
 from waeup.kofa.schema import FormattedDate, TextLineChoice
 from waeup.kofa.students.vocabularies import nats_vocab, GenderSource
-from waeup.kofa.applicants.interfaces import contextual_reg_num_source
 from kofacustom.nigeria.interfaces import (
     LGASource, high_qual, high_grade, exam_types)
@@ -34,27 +34,44 @@
 from kofacustom.nigeria.payments.interfaces import INigeriaOnlinePayment
 
-UG_OMIT_DISPLAY_FIELDS = ('locked', 'course_admitted',
-    'password', 'result_uploaded', 'suspended')
+# Fields to be omitted in all display forms. course_admitted is
+# rendered seperately.
+
+OMIT_DISPLAY_FIELDS = ('locked', 'course_admitted',
+    'result_uploaded', 'suspended')
+
+# UG students are all undergraduate students.
+UG_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS
 UG_OMIT_PDF_FIELDS = UG_OMIT_DISPLAY_FIELDS + ('email', 'phone')
 UG_OMIT_MANAGE_FIELDS = ()
-UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + ('locked', 'course_admitted',
-    'student_id', 'screening_score', 'screening_venue', 'notice',
-    'screening_date', 'result_uploaded', 'suspended',
-    'jamb_subjects', 'jamb_score', 'aggregate')
-PUTME_OMIT_EDIT_FIELDS = UG_OMIT_EDIT_FIELDS + (
+UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + OMIT_DISPLAY_FIELDS + (
+    'student_id', 'notice',
+    'screening_score', 'screening_venue',
+    'screening_date', 'jamb_subjects',
+    'jamb_score', 'aggregate')
+
+# PUTME is a subgroup of UG with the same interface.
+PUTME_OMIT_FIELDS = (
+    'hq_type', 'hq_matric_no',
+    'hq_degree', 'hq_school',
+    'hq_session', 'hq_disc',)
+PUTME_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS + PUTME_OMIT_FIELDS
+PUTME_OMIT_MANAGE_FIELDS = UG_OMIT_MANAGE_FIELDS + PUTME_OMIT_FIELDS
+PUTME_OMIT_EDIT_FIELDS = UG_OMIT_EDIT_FIELDS + PUTME_OMIT_FIELDS + (
     'firstname', 'middlename', 'lastname', 'sex',
     'course1', 'lga')
-UG_OMIT_RESULT_SLIP_FIELDS = UG_OMIT_DISPLAY_FIELDS + ('email', 'phone',
+PUTME_OMIT_PDF_FIELDS = PUTME_OMIT_DISPLAY_FIELDS + ('email', 'phone')
+PUTME_OMIT_RESULT_SLIP_FIELDS = PUTME_OMIT_DISPLAY_FIELDS + (
+    'email', 'phone',
     'date_of_birth', 'sex',
-    'nationality', 'lga', 'perm_address', 'course2', 'screening_venue',
+    'nationality', 'lga', 'perm_address',
+    'course2', 'screening_venue',
     'screening_date')
 
-PG_OMIT_DISPLAY_FIELDS = ('locked', 'course_admitted', 'password', 'suspended')
-PG_OMIT_PDF_FIELDS = UG_OMIT_DISPLAY_FIELDS + ('email', 'phone')
+# PG has its own interface
+PG_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS
+PG_OMIT_PDF_FIELDS = PG_OMIT_DISPLAY_FIELDS + ('email', 'phone')
 PG_OMIT_MANAGE_FIELDS = ()
 PG_OMIT_EDIT_FIELDS = PG_OMIT_MANAGE_FIELDS + (
-    'locked', 'course_admitted', 'suspended',
-    'student_id', 'screening_score', 'screening_venue', 'notice',
-    'screening_date')
+    'student_id', 'notice')
 
 class INigeriaUGApplicant(IApplicantBaseData):
@@ -90,4 +107,36 @@
         required = False,
         )
+    hq_type = schema.Choice(
+        title = _(u'Qualification Obtained'),
+        required = False,
+        readonly = False,
+        vocabulary = high_qual,
+        )
+    hq_matric_no = schema.TextLine(
+        title = _(u'Former Matric Number'),
+        required = False,
+        readonly = False,
+        )
+    hq_degree = schema.Choice(
+        title = _(u'Class of Degree'),
+        required = False,
+        readonly = False,
+        vocabulary = high_grade,
+        )
+    hq_school = schema.TextLine(
+        title = _(u'Institution Attended'),
+        required = False,
+        readonly = False,
+        )
+    hq_session = schema.TextLine(
+        title = _(u'Years Attended'),
+        required = False,
+        readonly = False,
+        )
+    hq_disc = schema.TextLine(
+        title = _(u'Discipline'),
+        required = False,
+        readonly = False,
+        )
     jamb_subjects = schema.Text(
         title = _(u'Subjects and Scores'),
@@ -208,9 +257,4 @@
         vocabulary = exam_types,
         )
-    #presently = schema.Bool(
-    #    title = _(u'Attending'),
-    #    required = False,
-    #    readonly = False,
-    #    )
     presently_inst = schema.TextLine(
         title = _(u'If yes, name of institution'),
