Index: /main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py	(revision 14139)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py	(revision 14140)
@@ -39,4 +39,5 @@
 from kofacustom.nigeria.applicants.interfaces import (
     LGASource, high_qual, high_grade, exam_types,
+    programme_types_vocab, jambsubjects,
     INigeriaUGApplicant, INigeriaPGApplicant,
     INigeriaApplicantOnlinePayment,
@@ -44,4 +45,5 @@
     INigeriaApplicantUpdateByRegNo,
     IPUTMEApplicantEdit,
+    IBankAccount,
     )
 from waeup.uniben.interfaces import MessageFactory as _
@@ -180,5 +182,5 @@
 #                raise Invalid(_("Matriculation number not found."))
 
-class ICustomUGApplicant(INigeriaUGApplicant):
+class ICustomUGApplicant(IApplicantBaseData, IBankAccount):
     """An undergraduate applicant.
 
@@ -187,4 +189,139 @@
     adding them to the UG_OMIT* tuples.
     """
+
+    nationality = schema.Choice(
+        source = nats_vocab,
+        title = _(u'Nationality'),
+        required = False,
+        )
+    lga = schema.Choice(
+        source = LGASource(),
+        title = _(u'State/LGA (Nigerians only)'),
+        required = False,
+        )
+    #perm_address = schema.Text(
+    #    title = _(u'Permanent Address'),
+    #    required = False,
+    #    )
+    course1 = schema.Choice(
+        title = _(u'1st Choice Course of Study'),
+        source = AppCatCertificateSource(),
+        required = True,
+        )
+    course2 = schema.Choice(
+        title = _(u'2nd Choice Course of Study'),
+        source = AppCatCertificateSource(),
+        required = False,
+        )
+
+    programme_type = schema.Choice(
+        title = _(u'Programme Type'),
+        vocabulary = programme_types_vocab,
+        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'),
+        required = False,
+        )
+    jamb_subjects_list = schema.List(
+        title = _(u'JAMB Subjects'),
+        required = False,
+        defaultFactory=list,
+        value_type = schema.Choice(
+            vocabulary = jambsubjects
+            #source = JAMBSubjectSource(),
+            ),
+        )
+    jamb_score = schema.Int(
+        title = _(u'Total JAMB Score'),
+        required = False,
+        )
+    #jamb_age = schema.Int(
+    #    title = _(u'Age (provided by JAMB)'),
+    #    required = False,
+    #    )
+    jamb_reg_number = schema.TextLine(
+        title = _(u'JAMB Registration Number'),
+        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[
+    'locked'].order =  IApplicantBaseData['suspended'].order
+ICustomUGApplicant[
+    'result_uploaded'].order =  ICustomUGApplicant['suspended'].order
 
 class ICustomPGApplicant(INigeriaPGApplicant):
