Index: /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/applicant.py
===================================================================
--- /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/applicant.py	(revision 12886)
+++ /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/applicant.py	(revision 12887)
@@ -23,10 +23,14 @@
 from kofacustom.nigeria.applicants.applicant import NigeriaApplicant
 from kofacustom.wdu.applicants.interfaces import(
-    ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    ICustomApplicant,
+    ICustomUGApplicantEdit,
+    ICustomPGApplicantEdit,
+    ICustomPUTMEApplicantEdit
+    )
 
 class CustomApplicant(NigeriaApplicant):
 
     grok.implements(ICustomApplicant, ICustomUGApplicantEdit,
-        ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+        ICustomPGApplicantEdit, ICustomPUTMEApplicantEdit)
     grok.provides(ICustomApplicant)
 
Index: /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/browser.py
===================================================================
--- /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/browser.py	(revision 12886)
+++ /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/browser.py	(revision 12887)
@@ -31,18 +31,19 @@
 
 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,
+    OMIT_DISPLAY_FIELDS,
+    #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,
     )
 
@@ -54,4 +55,70 @@
 
 from kofacustom.wdu.interfaces import MessageFactory as _
+
+
+# UG students are all undergraduate students.
+UG_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS
+UG_OMIT_PDF_FIELDS = UG_OMIT_DISPLAY_FIELDS + ('phone',)
+UG_OMIT_MANAGE_FIELDS = ('special_application',)
+UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + OMIT_DISPLAY_FIELDS + (
+    'student_id', 'notice',
+    'screening_score',
+    'screening_venue',
+    'screening_date',
+    #'jamb_age',
+    #'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'
+    )
+PUTME_OMIT_PDF_FIELDS = PUTME_OMIT_DISPLAY_FIELDS + ('phone',)
+PUTME_OMIT_RESULT_SLIP_FIELDS = PUTME_OMIT_DISPLAY_FIELDS + (
+    'phone',
+    'date_of_birth', 'sex',
+    'nationality', 'lga', #'perm_address',
+    'course2', 'screening_venue',
+    'screening_date')
+
+# PUDE is a subgroup of UG with the same interface.
+PUDE_OMIT_FIELDS = (
+    'jamb_subjects',
+    'jamb_score',
+    'jamb_age',
+    'aggregate')
+PUDE_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS + PUDE_OMIT_FIELDS
+PUDE_OMIT_MANAGE_FIELDS = UG_OMIT_MANAGE_FIELDS + PUDE_OMIT_FIELDS
+PUDE_OMIT_EDIT_FIELDS = set(UG_OMIT_EDIT_FIELDS + PUDE_OMIT_FIELDS + (
+    #'firstname',
+    #'middlename',
+    #'lastname',
+    #'sex',
+    #'course1',
+    #'lga'
+    ))
+PUDE_OMIT_PDF_FIELDS = PUDE_OMIT_DISPLAY_FIELDS + ('phone',)
+PUDE_OMIT_RESULT_SLIP_FIELDS = PUDE_OMIT_DISPLAY_FIELDS + (
+    'phone',
+    'date_of_birth', 'sex',
+    'nationality', 'lga', #'perm_address',
+    'course2', 'screening_venue',
+    'screening_date')
 
 
Index: /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/interfaces.py
===================================================================
--- /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/interfaces.py	(revision 12886)
+++ /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/interfaces.py	(revision 12887)
@@ -40,5 +40,5 @@
 from kofacustom.wdu.payments.interfaces import ICustomOnlinePayment
 
-class ICustomUGApplicant(INigeriaUGApplicant):
+class ICustomUGApplicant(IApplicantBaseData):
     """An undergraduate applicant.
 
@@ -47,4 +47,252 @@
     adding them to the UG_OMIT* tuples.
     """
+    sex = schema.Choice(
+        title = _(u'Sex'),
+        source = GenderSource(),
+        required = False,
+        )
+    marit_stat = schema.Choice(
+        title = u'Maritual Status',
+        required = False,
+        vocabulary = SimpleKofaVocabulary(
+            (_('Single'), 'single'),
+            (_('Married'), 'married'),
+            (_('Widowed'), 'widowed'),
+            (_('Divorced'), 'divorced'),
+            (_('Separated'), 'separated'),)
+        )
+    nationality = schema.Choice(
+        source = nats_vocab,
+        title = _(u'Nationality'),
+        required = False,
+        )
+    lga = schema.Choice(
+        source = LGASource(),
+        title = _(u'State/LGA (Nigerians only)'),
+        required = False,
+        )
+    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'),)
+        )
+    #perm_address = schema.Text(
+    #    title = _(u'Permanent Address'),
+    #    required = False,
+    #    )
+    next_kin_address = schema.Text(
+        title = _(u'Next of Kin Address'),
+        required = False,
+        )
+    course1 = schema.Choice(
+        title = _(u'1st Choice Course of Study'),
+        source = AppCatCertificateSource(),
+        required = False,
+        )
+    course2 = schema.Choice(
+        title = _(u'2nd Choice Course of Study'),
+        source = AppCatCertificateSource(),
+        required = False,
+        )
+    olevel_type = schema.Choice(
+        title = _(u'Qualification Obtained'),
+        required = False,
+        readonly = False,
+        vocabulary = exam_types,
+        )
+    olevel_school = schema.TextLine(
+        title = _(u'Institution Attended'),
+        required = False,
+        readonly = False,
+        )
+    olevel_exam_number = schema.TextLine(
+        title = _(u'Exam Number'),
+        required = False,
+        readonly = False,
+        )
+    olevel_exam_date = FormattedDate(
+        title = _(u'Exam Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+    olevel_results = schema.List(
+        title = _(u'Exam Results'),
+        value_type = ResultEntryField(),
+        required = False,
+        readonly = False,
+        default = [],
+        )
+    olevel_type2 = schema.Choice(
+        title = _(u'2nd Qualification Obtained'),
+        required = False,
+        readonly = False,
+        vocabulary = exam_types,
+        )
+    olevel_school2 = schema.TextLine(
+        title = _(u'2nd Institution Attended'),
+        required = False,
+        readonly = False,
+        )
+    olevel_exam_number2 = schema.TextLine(
+        title = _(u'2nd Exam Number'),
+        required = False,
+        readonly = False,
+        )
+    olevel_exam_date2 = FormattedDate(
+        title = _(u'2nd Exam Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+    olevel_results2 = schema.List(
+        title = _(u'2nd Exam Results'),
+        value_type = ResultEntryField(),
+        required = False,
+        readonly = False,
+        default = [],
+        )
+    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,
+        )
+    employer = schema.TextLine(
+        title = _(u'Employer'),
+        required = False,
+        readonly = False,
+        )
+    emp_position = schema.TextLine(
+        title = _(u'Employer Position'),
+        required = False,
+        readonly = False,
+        )
+    emp_start = FormattedDate(
+        title = _(u'Start Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+    emp_end = FormattedDate(
+        title = _(u'End Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+    employer2 = schema.TextLine(
+        title = _(u'2nd Employer'),
+        required = False,
+        readonly = False,
+        )
+    emp2_position = schema.TextLine(
+        title = _(u'2nd Employer Position'),
+        required = False,
+        readonly = False,
+        )
+    emp2_start = FormattedDate(
+        title = _(u'Start Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+    emp2_end = FormattedDate(
+        title = _(u'End Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+    jamb_subjects = schema.Text(
+        title = _(u'Subjects and Scores'),
+        description = _(u'(one subject with score per line)'),
+        required = False,
+        )
+    jamb_score = schema.Int(
+        title = _(u'Total JAMB Score'),
+        required = False,
+        )
+    jamb_reg_number = schema.TextLine(
+        title = _(u'JAMB Registration Number'),
+        required = False,
+        )
+    jamb_age = schema.Int(
+        title = _(u'Age (provided by JAMB)'),
+        required = False,
+        )
+    notice = schema.Text(
+        title = _(u'Notice'),
+        required = False,
+        )
+    screening_venue = schema.TextLine(
+        title = _(u'Screening Venue'),
+        required = False,
+        )
+    screening_date = schema.TextLine(
+        title = _(u'Screening Date'),
+        required = False,
+        )
+    screening_score = schema.Int(
+        title = _(u'Screening Score (%)'),
+        required = False,
+        )
+    aggregate = schema.Int(
+        title = _(u'Aggregate Score (%)'),
+        description = _(u'(average of relative JAMB and PUTME scores)'),
+        required = False,
+        )
+    result_uploaded = schema.Bool(
+        title = _(u'Result uploaded'),
+        default = False,
+        required = False,
+        )
+    student_id = schema.TextLine(
+        title = _(u'Student Id'),
+        required = False,
+        readonly = False,
+        )
+    course_admitted = schema.Choice(
+        title = _(u'Admitted Course of Study'),
+        source = CertificateSource(),
+        required = False,
+        )
+    locked = schema.Bool(
+        title = _(u'Form locked'),
+        default = False,
+        required = False,
+        )
+
+ICustomUGApplicant[
+    'sex'].order =  IApplicantBaseData['sex'].order
 
 class ICustomPGApplicant(INigeriaPGApplicant):
@@ -76,5 +324,5 @@
         """
 
-class ICustomUGApplicantEdit(INigeriaUGApplicantEdit):
+class ICustomUGApplicantEdit(ICustomUGApplicant):
     """An undergraduate applicant interface for edit forms.
 
@@ -105,5 +353,5 @@
     """
 
-class ICustomPUTMEApplicantEdit(IPUTMEApplicantEdit):
+class ICustomPUTMEApplicantEdit(ICustomUGApplicant):
     """An undergraduate applicant interface for editing.
 
Index: /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/utils.py
===================================================================
--- /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/utils.py	(revision 12886)
+++ /main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/utils.py	(revision 12887)
@@ -29,2 +29,17 @@
     """A collection of parameters and methods subject to customization.
     """
+
+    SEPARATORS_DICT = {
+        'form.applicant_id': _(u'Base Data'),
+        'form.course1': _(u'Programmes/Courses Desired'),
+        'form.olevel_type': _(u'Examinations'),
+        #'form.olevel_type2': _(u'Second Examination'),
+        'form.hq_type': _(u'Higher Education Record'),
+        'form.presently': _(u'Course or Programme Presently Attending'),
+        'form.nysc_year': _(u'NYSC Information'),
+        'form.employer': _(u'Employment History'),
+        'form.jamb_subjects': _(u'JAMB Data'),
+        'form.notice': _(u'Application Process Information'),
+        'form.pp_school': _(u'Post Primary School Qualification'),
+        'form.presently_inst': _(u'Presently attending a course or programme'),
+        }
Index: /main/kofacustom.wdu/trunk/src/kofacustom/wdu/locales/en/LC_MESSAGES/waeup.kofa.po
===================================================================
--- /main/kofacustom.wdu/trunk/src/kofacustom/wdu/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 12886)
+++ /main/kofacustom.wdu/trunk/src/kofacustom/wdu/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 12887)
@@ -9,6 +9,17 @@
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+"X-Generator: Poedit 1.6.5\n"
 
 msgid "Academics"
 msgstr "Institutions"
 
+#: waeup/kofa/applicants/browser_templates/applicanteditpage.pt:74
+msgid ""
+"I confirm that the Passport Photograph uploaded on this form is a true "
+"picture of me."
+msgstr ""
+"I confirm that the Passport Photograph uploaded on this form is a true "
+"picture of me. I also declare that I wish to to enter Wester Delta "
+"University, Oghara, that the particulars given in this form are to the best "
+"of my knowledge ..."
