Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/browser.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/browser.py	(revision 9463)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/browser.py	(revision 9463)
@@ -0,0 +1,132 @@
+## $Id$
+##
+## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+"""UI components for basic applicants and related components.
+"""
+import grok
+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.applicants.browser import (ApplicantDisplayFormPage,
+    ApplicantManageFormPage, ApplicantEditFormPage)
+from waeup.kofa.applicants.viewlets import (
+    PaymentReceiptActionButton, PDFActionButton)
+from waeup.kofa.applicants.pdf import PDFApplicationSlip
+from kofacustom.nigeria.applicants.interfaces import (
+    UG_OMIT_DISPLAY_FIELDS,
+    UG_OMIT_PDF_FIELDS,
+    UG_OMIT_MANAGE_FIELDS,
+    UG_OMIT_EDIT_FIELDS
+    )
+from waeup.fceokene.applicants.interfaces import (
+    ICustomUGApplicant,
+    BEC_OMIT_DISPLAY_FIELDS,
+    BEC_OMIT_PDF_FIELDS,
+    BEC_OMIT_MANAGE_FIELDS,
+    BEC_OMIT_EDIT_FIELDS
+    )
+
+class CustomApplicantDisplayFormPage(ApplicantDisplayFormPage):
+    """A display view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        form_fields = grok.AutoFields(ICustomUGApplicant)
+        if target is not None and target.startswith('bec'):
+            for field in BEC_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['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'):
+            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 CustomPDFApplicationSlip(PDFApplicationSlip):
+
+    def _reduced_slip(self):
+        return getattr(self.context, 'result_uploaded', False)
+
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        form_fields = grok.AutoFields(ICustomUGApplicant)
+        if target is not None and target.startswith('bec'):
+            for field in BEC_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(ApplicantManageFormPage):
+    """A full edit view for applicant data.
+    """
+    
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        form_fields = grok.AutoFields(ICustomUGApplicant)
+        if target is not None and target.startswith('bec'):
+            for field in BEC_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(ApplicantEditFormPage):
+    """An applicant-centered edit view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        form_fields = grok.AutoFields(ICustomUGApplicant)
+        if target is not None and target.startswith('bec'):
+            for field in BEC_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/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py	(revision 9461)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py	(revision 9463)
@@ -36,7 +36,19 @@
     INigeriaApplicantUpdateByRegNo,
     IPUTMEApplicantEdit,
+    OMIT_DISPLAY_FIELDS
     )
 from waeup.fceokene.interfaces import MessageFactory as _
-from waeup.fceokene.payments.interfaces import ICustomOnlinePayment
+
+BEC_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS
+BEC_OMIT_PDF_FIELDS = BEC_OMIT_DISPLAY_FIELDS + ('phone',)
+BEC_OMIT_MANAGE_FIELDS = ()
+BEC_OMIT_EDIT_FIELDS = BEC_OMIT_MANAGE_FIELDS + OMIT_DISPLAY_FIELDS + (
+    'student_id', 'notice',
+    'screening_score',
+    'screening_venue',
+    'screening_date',
+    #'jamb_subjects',
+    #'jamb_score',
+    'aggregate')
 
 class ICustomUGApplicant(INigeriaUGApplicant):
@@ -45,6 +57,40 @@
     This interface defines the least common multiple of all fields
     in ug application forms. In customized forms, fields can be excluded by
-    adding them to the UG_OMIT* tuples.
+    adding them to the OMIT* tuples.
     """
+
+    olevel_type = schema.Choice(
+        title = _(u'Qualification Obtained'),
+        required = False,
+        readonly = False,
+        vocabulary = high_qual,
+        )
+    olevel_matric_no = schema.TextLine(
+        title = _(u'Former Matric Number'),
+        required = False,
+        readonly = False,
+        )
+    olevel_degree = schema.Choice(
+        title = _(u'Class of Degree'),
+        required = False,
+        readonly = False,
+        vocabulary = high_grade,
+        )
+    olevel_school = schema.TextLine(
+        title = _(u'Institution Attended'),
+        required = False,
+        readonly = False,
+        )
+    olevel_session = schema.TextLine(
+        title = _(u'Years Attended'),
+        required = False,
+        readonly = False,
+        )
+    olevel_disc = schema.TextLine(
+        title = _(u'Discipline'),
+        required = False,
+        readonly = False,
+        )
+
 
 class ICustomPGApplicant(INigeriaPGApplicant):
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/utils.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/utils.py	(revision 9461)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/utils.py	(revision 9463)
@@ -24,5 +24,5 @@
 from kofacustom.nigeria.applicants.utils import NigeriaApplicantsUtils
 
-
+from waeup.fceokene.interfaces import MessageFactory as _
 
 class ApplicantsUtils(NigeriaApplicantsUtils):
@@ -31,4 +31,5 @@
 
     APP_TYPES_DICT = {
+        'app': ['General Studies', 'APP'],
         'prence': ['Pre-NCE Programme', 'PRE'],
         'sandwich': ['NCE Sandwich Programme', 'SAND'],
@@ -39,2 +40,16 @@
         'bec': ['Bachelor of Education Certificate Programmes', 'BEC']
         }
+
+    SEPARATORS_DICT = {
+        'form.applicant_id': _(u'Base Data'),
+        'form.course1': _(u'Programmes/Courses Desired'),
+        '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'),
+        'form.olevel_type': _(u"'O' Level Record"),
+        }
