Index: main/waeup.imostate/src/waeup/imostate/applicants/applicant.py
===================================================================
--- main/waeup.imostate/src/waeup/imostate/applicants/applicant.py	(revision 10345)
+++ main/waeup.imostate/src/waeup/imostate/applicants/applicant.py	(revision 10350)
@@ -25,5 +25,5 @@
 from kofacustom.nigeria.applicants.applicant import NigeriaApplicant
 from waeup.imostate.applicants.interfaces import(
-    ICustomApplicant, ICustomUGApplicantEdit, ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    ICustomApplicant, ICustomUGApplicantEdit)
 
 @grok.subscribe(ICustomApplicant, grok.IObjectRemovedEvent)
@@ -39,18 +39,7 @@
 class CustomApplicant(NigeriaApplicant):
 
-    grok.implements(ICustomApplicant, ICustomUGApplicantEdit,
-        ICustomPGApplicantEdit, IPUTMEApplicantEdit)
+    grok.implements(ICustomApplicant, ICustomUGApplicantEdit)
     grok.provides(ICustomApplicant)
 
-    @property
-    def low_jamb_score(self):
-        jamb_score = getattr(self, 'jamb_score', None)
-        course1 = getattr(self, 'course1', None)
-        limit = getattr(course1, 'custom_float_1', None)
-        if None in (jamb_score, limit):
-            return False
-        if jamb_score < limit:
-            return True
-        return False
 
 # Set all attributes of CustomApplicant required in ICustomApplicant as field
Index: main/waeup.imostate/src/waeup/imostate/applicants/browser.py
===================================================================
--- main/waeup.imostate/src/waeup/imostate/applicants/browser.py	(revision 10345)
+++ main/waeup.imostate/src/waeup/imostate/applicants/browser.py	(revision 10350)
@@ -28,20 +28,5 @@
     ICustomApplicant,
     ICustomUGApplicant,
-    ICustomPGApplicant,
-    ICustomPGApplicantEdit,
     ICustomUGApplicantEdit,
-    UG_OMIT_DISPLAY_FIELDS,
-    UG_OMIT_PDF_FIELDS,
-    UG_OMIT_MANAGE_FIELDS,
-    UG_OMIT_EDIT_FIELDS,
-    PG_OMIT_DISPLAY_FIELDS,
-    PG_OMIT_PDF_FIELDS,
-    PG_OMIT_MANAGE_FIELDS,
-    PG_OMIT_EDIT_FIELDS,
-    PUTME_OMIT_EDIT_FIELDS,
-    PUTME_OMIT_DISPLAY_FIELDS,
-    PUTME_OMIT_PDF_FIELDS,
-    PUTME_OMIT_MANAGE_FIELDS,
-    PUTME_OMIT_EDIT_FIELDS,
     )
 from waeup.imostate.interfaces import MessageFactory as _
@@ -102,12 +87,5 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target.startswith('pg'):
-            form_fields = grok.AutoFields(ICustomPGApplicant)
-            for field in PG_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 = grok.AutoFields(ICustomUGApplicant)
         if form_fields.get('perm_address', None):
             form_fields['perm_address'].custom_widget = BytesDisplayWidget
@@ -121,6 +99,4 @@
         if not getattr(self.context, 'screening_date'):
             form_fields = form_fields.omit('screening_date')
-        if not self.context.low_jamb_score:
-            form_fields = form_fields.omit('course2')
         return form_fields
 
@@ -136,17 +112,5 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target.startswith('pg'):
-            form_fields = grok.AutoFields(ICustomPGApplicant)
-            for field in PG_OMIT_PDF_FIELDS:
-                form_fields = form_fields.omit(field)
-        elif 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:
-            form_fields = grok.AutoFields(ICustomUGApplicant)
-            for field in UG_OMIT_PDF_FIELDS:
-                form_fields = form_fields.omit(field)
+        form_fields = grok.AutoFields(ICustomUGApplicant)
         if not getattr(self.context, 'student_id'):
             form_fields = form_fields.omit('student_id')
@@ -157,6 +121,4 @@
         if not getattr(self.context, 'screening_date'):
             form_fields = form_fields.omit('screening_date')
-        if not self.context.low_jamb_score:
-            form_fields = form_fields.omit('course2')
         return form_fields
 
@@ -168,16 +130,5 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target.startswith('pg'):
-            form_fields = grok.AutoFields(ICustomPGApplicant)
-            for field in PG_OMIT_MANAGE_FIELDS:
-                form_fields = form_fields.omit(field)
-        elif 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)
-        else:
-            form_fields = grok.AutoFields(ICustomUGApplicant)
-            for field in UG_OMIT_MANAGE_FIELDS:
-                form_fields = form_fields.omit(field)
+        form_fields = grok.AutoFields(ICustomUGApplicant)
         form_fields['student_id'].for_display = True
         form_fields['applicant_id'].for_display = True
@@ -223,20 +174,7 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target.startswith('pg'):
-            form_fields = grok.AutoFields(ICustomPGApplicantEdit)
-            for field in PG_OMIT_EDIT_FIELDS:
-                form_fields = form_fields.omit(field)
-        elif self.target is not None and self.target.startswith('putme'):
-            form_fields = grok.AutoFields(ICustomUGApplicantEdit)
-            for field in PUTME_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 = grok.AutoFields(ICustomUGApplicantEdit)
         form_fields['applicant_id'].for_display = True
         form_fields['reg_number'].for_display = True
-        if not self.context.low_jamb_score:
-            form_fields = form_fields.omit('course2')
         return form_fields
 
Index: main/waeup.imostate/src/waeup/imostate/applicants/interfaces.py
===================================================================
--- main/waeup.imostate/src/waeup/imostate/applicants/interfaces.py	(revision 10345)
+++ main/waeup.imostate/src/waeup/imostate/applicants/interfaces.py	(revision 10350)
@@ -32,33 +32,9 @@
     INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
     INigeriaApplicantUpdateByRegNo,
-    IPUTMEApplicantEdit,
-    OMIT_DISPLAY_FIELDS,
-    UG_OMIT_DISPLAY_FIELDS,
-    UG_OMIT_PDF_FIELDS,
-    UG_OMIT_MANAGE_FIELDS,
-    UG_OMIT_EDIT_FIELDS,
-    PUTME_OMIT_EDIT_FIELDS,
-    PUTME_OMIT_DISPLAY_FIELDS,
-    PUTME_OMIT_PDF_FIELDS,
-    PUTME_OMIT_MANAGE_FIELDS,
-    PUTME_OMIT_FIELDS,
-    #PUTME_OMIT_EDIT_FIELDS,
     )
-
-PUTME_OMIT_EDIT_FIELDS = UG_OMIT_EDIT_FIELDS + PUTME_OMIT_FIELDS + (
-    'firstname', 'middlename', 'lastname', 'sex',
-    'lga')
-
-PG_OMIT_DISPLAY_FIELDS = OMIT_DISPLAY_FIELDS + ('course2',)
-PG_OMIT_PDF_FIELDS = PG_OMIT_DISPLAY_FIELDS + ('phone',)
-PG_OMIT_MANAGE_FIELDS = ('course2',)
-PG_OMIT_EDIT_FIELDS = PG_OMIT_MANAGE_FIELDS + PG_OMIT_DISPLAY_FIELDS + (
-    'student_id', 'notice',
-    'screening_score', 'screening_venue',
-    'screening_date',)
 
 from waeup.imostate.interfaces import MessageFactory as _
 
-class ICustomUGApplicant(IApplicantBaseData):
+class ICustomUGApplicant(INigeriaUGApplicant):
     """An undergraduate applicant.
 
@@ -68,212 +44,5 @@
     """
 
-    nationality = schema.Choice(
-        source = nats_vocab,
-        title = _(u'Nationality'),
-        required = True,
-        )
-    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'Change of Course'),
-        source = AppCatCertificateSource(),
-        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_score = schema.Int(
-        title = _(u'Total JAMB Score'),
-        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,
-        )
-    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,
-        )
-
-    @invariant
-    def second_choice(applicant):
-        if applicant.course1 == applicant.course2:
-            raise Invalid(_("2nd choice course must differ from 1st choice course."))
-
-class ICustomPGApplicant(IApplicantBaseData):
-    """A postgraduate applicant.
-
-    This interface defines the least common multiple of all fields
-    in pg application forms. In customized forms, fields can be excluded by
-    adding them to the PG_OMIT* tuples.
-    """
-
-    nationality = schema.Choice(
-        source = nats_vocab,
-        title = _(u'Nationality'),
-        required = True,
-        )
-    lga = schema.Choice(
-        source = LGASource(),
-        title = _(u'State/LGA (Nigerians only)'),
-        required = False,
-        )
-    perm_address = schema.Text(
-        title = _(u'Permanent Address'),
-        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,
-        )
-    pp_school = schema.Choice(
-        title = _(u'Qualification Obtained'),
-        required = False,
-        readonly = False,
-        vocabulary = exam_types,
-        )
-    course1 = schema.Choice(
-        title = _(u'Programme desired'),
-        source = AppCatCertificateSource(),
-        required = True,
-        )
-    notice = schema.Text(
-        title = _(u'Notice'),
-        required = False,
-        readonly = 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,
-    #    )
-    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,
-        readonly = False,
-        )
-    locked = schema.Bool(
-        title = _(u'Form locked'),
-        default = False,
-        )
-
-class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant):
+class ICustomApplicant(ICustomUGApplicant):
     """An interface for both types of applicants.
 
@@ -306,32 +75,4 @@
     """
 
-    course1 = schema.Choice(
-        title = _(u'1st Choice Course of Study'),
-        source = AppCatCertificateSource(),
-        required = True,
-        readonly = True,
-        )
-
-    course2 = schema.Choice(
-        title = _(u'Change of Course'),
-        description = _(
-            u'Your JAMB score is lower than the requirement for your '
-            '1st choice course of study, chose another course here.'),
-        source = AppCatCertificateSource(),
-        required = True,
-        )
-
-class ICustomPGApplicantEdit(ICustomPGApplicant):
-    """A postgraduate applicant interface for editing.
-
-    Here we can repeat the fields from base data and set the
-    `required` and `readonly` attributes to True to further restrict
-    the data access. Or we can allow only certain certificates to be
-    selected by choosing the appropriate source.
-
-    We cannot omit fields here. This has to be done in the
-    respective form page.
-    """
-
 
 class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
Index: main/waeup.imostate/src/waeup/imostate/applicants/tests/test_browser.py
===================================================================
--- main/waeup.imostate/src/waeup/imostate/applicants/tests/test_browser.py	(revision 10345)
+++ main/waeup.imostate/src/waeup/imostate/applicants/tests/test_browser.py	(revision 10350)
@@ -328,47 +328,2 @@
         fd = storage.getFile(file_id)
         self.assertTrue(fd is None)
-
-    def test_certificate_source(self):
-        # We add a second 'alternative' certificate
-        certificate = createObject('waeup.Certificate')
-        certificate.code = 'CERT2'
-        certificate.title = 'New Certificate'
-        certificate.application_category = 'basic'
-        self.app['faculties']['fac1']['dep1'].certificates.addCertificate(
-            certificate)
-        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-        self.browser.open(self.edit_path)
-        self.assertFalse('course2' in self.browser.contents)
-        self.certificate.custom_textline_1 = u'Maths, Physics'
-        self.certificate.custom_float_1 = 50.0
-        certificate.custom_textline_1 = u'German, Physics'
-        certificate.custom_float_1 = 30.0
-        notify(grok.ObjectModifiedEvent(certificate))
-        self.browser.open(self.edit_path)
-        # Score must be set and below the limit
-        # of course1 to see course2 field
-        self.applicant.jamb_score = 20
-        self.browser.open(self.edit_path)
-        self.assertTrue('course2' in self.browser.contents)
-        # But 20 is not enough to select the alternative CERT2
-        self.assertFalse(
-            'value="CERT2">CERT2 - New Certificate'
-            in self.browser.contents)
-        self.applicant.jamb_score = 30
-        self.browser.open(self.edit_path)
-        # 30 is enough
-        self.assertTrue('course2' in self.browser.contents)
-        self.assertTrue(
-            'value="CERT2">CERT2 - New Certificate [German, Physics, 30]</option>'
-            in self.browser.contents)
-
-    def test_low_jamb_score(self):
-        self.login()
-        self.assertFalse('<select id="form.course2" name="form.course2" size="1" >'
-            in self.browser.contents)
-        self.certificate.custom_textline_1 = u'Maths, Physics'
-        self.certificate.custom_float_1 = 50.0
-        self.applicant.jamb_score = 40
-        self.browser.open(self.edit_path)
-        self.assertTrue('<select id="form.course2" name="form.course2" size="1" >'
-            in self.browser.contents)
Index: main/waeup.imostate/src/waeup/imostate/applicants/utils.py
===================================================================
--- main/waeup.imostate/src/waeup/imostate/applicants/utils.py	(revision 10345)
+++ main/waeup.imostate/src/waeup/imostate/applicants/utils.py	(revision 10350)
@@ -33,35 +33,3 @@
         'form.applicant_id': _(u'Base Data'),
         'form.course1': _(u'Programmes/Courses Desired'),
-        'form.hq_type': _(u'Higher Education Record'),
-        #'form.notice': _(u'Application Process Information'),
-        'form.pp_school': _(u'Post Primary School Qualification'),
-        'form.notice': _(u'Process Data'),
-        'form.jamb_subjects': _(u'JAMB Data'),
       }
-
-    def filterCertificates(self, context, resultset):
-        """Filter and sort certificates in AppCatCertificateSource.
-        """
-        certs = sorted(resultset, key=lambda value: value.code)
-        if context.jamb_score is not None:
-            resultlist = [cert for cert in certs
-                if cert.custom_float_1 is None
-                  or context.jamb_score >= cert.custom_float_1]
-        else:
-            resultlist = certs
-        curr_course = context.course1
-        if curr_course is not None and curr_course not in resultlist:
-            # display also current course even if certificate has been removed
-            # or does not meet requirement
-            resultlist = [curr_course,] + resultlist
-        return resultlist
-
-    def getCertTitle(self, context, value):
-        """Compose the titles in AppCatCertificateSource.
-        """
-        if None not in (getattr(value, 'custom_textline_1'),
-            getattr(value, 'custom_float_1')):
-            return "%s - %s [%s, %d]" % (
-                value.code, value.title,
-                value.custom_textline_1, value.custom_float_1)
-        return "%s - %s" % (value.code, value.title)
Index: main/waeup.imostate/src/waeup/imostate/utils/tests.py
===================================================================
--- main/waeup.imostate/src/waeup/imostate/utils/tests.py	(revision 10345)
+++ 	(revision )
@@ -1,29 +1,0 @@
-## $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
-##
-from waeup.kofa.testing import FunctionalTestCase
-from waeup.imostate.testing import FunctionalLayer
-
-
-class CustomPackageUtilsTests(FunctionalTestCase):
-
-    layer = FunctionalLayer
-
-    def test_foo(self):
-        '''Test method foo.
-        '''
-        return
Index: main/waeup.imostate/src/waeup/imostate/utils/utils.py
===================================================================
--- main/waeup.imostate/src/waeup/imostate/utils/utils.py	(revision 10345)
+++ main/waeup.imostate/src/waeup/imostate/utils/utils.py	(revision 10350)
@@ -27,22 +27,9 @@
         }
 
-    SPECIAL_HANDLING_DICT = {
-        'regular': 'Regular Hostel',
-        'blocked': 'Blocked Hostel',
-        'sse': 'SSE Hostel'
-        }
+
 
     PAYMENT_CATEGORIES = {
-        'schoolfee': 'School Fee',
-        'clearance': 'Acceptance Fee',
-        'hostel_maintenance': 'Hostel Maintenance Fee',
-        'block_h_maintenance': 'Block H Maintenance Fee (deprecated category)',
-        'application': 'Application Fee'
         }
 
     SELECTABLE_PAYMENT_CATEGORIES = {
-        'schoolfee': 'School Fee',
-        'clearance': 'Acceptance Fee',
-        'hostel_maintenance': 'Hostel Maintenance Fee',
-        'application': 'Application Fee'
         }
