Index: main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py	(revision 13796)
+++ main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py	(revision 13814)
@@ -40,5 +40,5 @@
     NigeriaPDFApplicationSlip)
 from waeup.uniben.applicants.interfaces import (
-    ICustomApplicant)
+    ICustomApplicant, IUnibenRegistration)
 from waeup.kofa.applicants.workflow import ADMITTED, PAID
 
@@ -61,24 +61,24 @@
 PASTQ_MSS = ['ACC','BNK','BUS','ECO','GEO','POL','SAA','SWK'] + PASTQ_ALL
 
-ICT_WEEK_FIELDS = (
-    'course1',
-    'course2',
-    'aggregate',
-    'screening_score',
-    'screening_venue',
-    'screening_date',
-    'jamb_subjects',
-    'jamb_score',
-    'jamb_reg_number',
-    'hq_type',
-    'hq_matric_no',
-    'hq_degree',
-    'hq_school',
-    'hq_session',
-    'hq_disc',
-    'student_id',
-    'course_admitted',
+REGISTRATION_OMIT_DISPLAY_FIELDS = (
+    'locked',
+    'suspended',
     )
 
+REGISTRATION_OMIT_EDIT_FIELDS = (
+    'locked',
+    'suspended',
+    'applicant_id',
+    )
+
+REGISTRATION_OMIT_MANAGE_FIELDS = (
+    'applicant_id',
+    )
+
+
+REGISTRATION_OMIT_PDF_FIELDS = (
+    'locked',
+    'suspended',
+    )
 class CustomApplicantsContainerPage(ApplicantsContainerPage):
     """The standard view for regular applicant containers.
@@ -140,13 +140,20 @@
                and self.context.state in ('paid', 'submitted') 
 
-    # Customizations for admission checking payments
-
-    @property
-    def form_fields(self):
-        form_fields = super(CustomApplicantDisplayFormPage, self).form_fields
-        if self.target == 'ictwk':
-            for field in ICT_WEEK_FIELDS:
+    @property
+    def label(self):
+        if self.target == 'ictwk':
+            container_title = self.context.__parent__.title
+            return _('${a} <br /> Registration Record ${b}', mapping = {
+                'a':container_title, 'b':self.context.application_number})
+        return super(CustomApplicantDisplayFormPage, self).label
+
+    @property
+    def form_fields(self):
+        if self.target == 'ictwk':
+            form_fields = grok.AutoFields(IUnibenRegistration)
+            for field in REGISTRATION_OMIT_DISPLAY_FIELDS:
                 form_fields = form_fields.omit(field)
             return form_fields
+        form_fields = super(CustomApplicantDisplayFormPage, self).form_fields
         if not self.context.admchecking_fee_paid():
             form_fields = form_fields.omit(
@@ -256,9 +263,19 @@
 
     @property
-    def form_fields(self):
+    def label(self):
+        if self.target == 'ictwk':
+            container_title = self.context.__parent__.title
+            return _('${a} <br /> Registration Record ${b}', mapping = {
+                'a':container_title, 'b':self.context.application_number})
+        return super(CustomApplicantManageFormPage, self).label
+
+    @property
+    def form_fields(self):
+        if self.target == 'ictwk':
+            form_fields = grok.AutoFields(IUnibenRegistration)
+            for field in REGISTRATION_OMIT_MANAGE_FIELDS:
+                form_fields = form_fields.omit(field)
+            return form_fields
         form_fields = super(CustomApplicantManageFormPage, self).form_fields
-        if self.target == 'ictwk':
-            for field in ICT_WEEK_FIELDS:
-                form_fields = form_fields.omit(field)
         return form_fields
 
@@ -270,9 +287,19 @@
     @property
     def form_fields(self):
+        if self.target == 'ictwk':
+            form_fields = grok.AutoFields(IUnibenRegistration)
+            for field in REGISTRATION_OMIT_EDIT_FIELDS:
+                form_fields = form_fields.omit(field)
+            return form_fields
         form_fields = super(CustomApplicantEditFormPage, self).form_fields
-        if self.target == 'ictwk':
-            for field in ICT_WEEK_FIELDS:
-                form_fields = form_fields.omit(field)
-        return form_fields
+        return form_fields
+
+    @property
+    def label(self):
+        if self.target == 'ictwk':
+            container_title = self.context.__parent__.title
+            return _('${a} <br /> Registration Record ${b}', mapping = {
+                'a':container_title, 'b':self.context.application_number})
+        return super(CustomApplicantEditFormPage, self).label
 
 class CustomOnlinePaymentApprovePage(OnlinePaymentApprovePage):
@@ -328,4 +355,14 @@
 
     @property
+    def form_fields(self):
+        if self.target == 'ictwk':
+            form_fields = grok.AutoFields(IUnibenRegistration)
+            for field in REGISTRATION_OMIT_PDF_FIELDS:
+                form_fields = form_fields.omit(field)
+            return form_fields
+        form_fields = super(CustomPDFApplicationSlip, self).form_fields
+        return form_fields
+
+    @property
     def title(self):
         container_title = self.context.__parent__.title
@@ -333,5 +370,8 @@
         ar_translation = translate(_('Application Record'),
             'waeup.kofa', target_language=portal_language)
-        if 'afas' in self.target:
+        if self.target == 'ictwk':
+            return '%s - Registration Record %s' % (container_title,
+            self.context.application_number)
+        elif 'afas' in self.target:
             return 'Federal College of Education (Technical) Asaba - %s %s %s' % (
                 container_title, ar_translation,
Index: main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py	(revision 13796)
+++ main/waeup.uniben/trunk/src/waeup/uniben/applicants/interfaces.py	(revision 13814)
@@ -1,2 +1,3 @@
+# -*- coding: utf-8 -*-
 ## $Id$
 ##
@@ -20,4 +21,5 @@
 
 from zope import schema
+from zc.sourcefactory.basic import BasicSourceFactory
 from waeup.kofa.applicants.interfaces import (
     IApplicantBaseData,
@@ -25,6 +27,7 @@
 from waeup.kofa.schoolgrades import ResultEntryField
 from waeup.kofa.interfaces import (
-    SimpleKofaVocabulary, academic_sessions_vocab, validate_email)
-from waeup.kofa.schema import FormattedDate, TextLineChoice
+    SimpleKofaVocabulary, academic_sessions_vocab, validate_email,
+    IKofaObject, ContextualDictSourceFactoryBase)
+from waeup.kofa.schema import FormattedDate, TextLineChoice, PhoneNumber
 from waeup.kofa.students.vocabularies import nats_vocab, GenderSource
 from waeup.kofa.applicants.interfaces import contextual_reg_num_source
@@ -40,4 +43,117 @@
 from waeup.uniben.payments.interfaces import ICustomOnlinePayment
 
+
+REGISTRATION_CATS = {
+    'corporate': ('Corporate Registration', 250000, 1),
+    'group': ('Group Registration', 200000, 2),
+    'individual': ('Individual Registration', 45000, 3),
+    'student': ('Student Registration', 5000, 4),
+    'fullpage': ('Full Page', 250000, 5),
+    'halfpage': ('Half Page', 150000, 6),
+    'quarterpage': ('Quarter Page', 100000, 7),
+    }
+
+class RegTypesSource(BasicSourceFactory):
+    """A source that delivers all kinds of registrations.
+    """
+    def getValues(self):
+        sorted_items = sorted(REGISTRATION_CATS.items(),
+                              key=lambda element: element[1][2])
+        return [item[0] for item in sorted_items]
+
+    def getTitle(self, value):
+        return u"%s @ ₦ %s" % (
+            REGISTRATION_CATS[value][0],
+            REGISTRATION_CATS[value][1])
+
+class IUnibenRegistration(IKofaObject):
+    """A Uniben registrant.
+    """
+
+    suspended = schema.Bool(
+        title = _(u'Account suspended'),
+        default = False,
+        required = False,
+        )
+
+    locked = schema.Bool(
+        title = _(u'Form locked'),
+        default = False,
+        required = False,
+        )
+
+    applicant_id = schema.TextLine(
+        title = _(u'Registrant Id'),
+        required = False,
+        readonly = False,
+        )
+
+    firstname = schema.TextLine(
+        title = _(u'First Name'),
+        required = True,
+        )
+
+    middlename = schema.TextLine(
+        title = _(u'Middle Name'),
+        required = False,
+        )
+
+    lastname = schema.TextLine(
+        title = _(u'Last Name (Surname)'),
+        required = True,
+        )
+
+    #matric_number = schema.TextLine(
+    #    title = _(u'Matriculation Number'),
+    #    readonly = False,
+    #    required = False,
+    #    )
+
+    date_of_birth = FormattedDate(
+        title = _(u'Date of Birth'),
+        required = False,
+        #date_format = u'%d/%m/%Y', # Use grok-instance-wide default
+        show_year = True,
+        )
+
+    place_of_birth = schema.TextLine(
+        title = _(u'Place of Birth'),
+        readonly = False,
+        required = False,
+        )
+
+    nationality = schema.Choice(
+        vocabulary = nats_vocab,
+        title = _(u'Nationality'),
+        required = False,
+        )
+
+    email = schema.ASCIILine(
+        title = _(u'Email Address'),
+        required = True,
+        constraint=validate_email,
+        )
+
+    phone = PhoneNumber(
+        title = _(u'Phone'),
+        description = u'',
+        required = False,
+        )
+
+    perm_address = schema.Text(
+        title = _(u'Current Local Address'),
+        required = False,
+        readonly = False,
+        )
+
+    registration_cats = schema.List(
+        title = _(u'Registration Categories'),
+        value_type = schema.Choice(source=RegTypesSource()),
+        required = True,
+        default = [],
+        )
+
+
+
 class ICustomUGApplicant(INigeriaUGApplicant):
     """An undergraduate applicant.
@@ -57,5 +173,6 @@
 
 
-class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant):
+class ICustomApplicant(ICustomUGApplicant, ICustomPGApplicant,
+    IUnibenRegistration):
     """An interface for both types of applicants.
 
@@ -100,4 +217,5 @@
     """
 
+
 class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
     """An applicant payment via payment gateways.
Index: main/waeup.uniben/trunk/src/waeup/uniben/applicants/tests/test_browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/applicants/tests/test_browser.py	(revision 13796)
+++ main/waeup.uniben/trunk/src/waeup/uniben/applicants/tests/test_browser.py	(revision 13814)
@@ -1,2 +1,3 @@
+# -*- coding: utf-8 -*-
 ## $Id$
 ##
@@ -225,2 +226,32 @@
         open(path, 'wb').write(self.browser.contents)
         print "Sample nils_application_slip.pdf written to %s" % path
+
+    def test_ictwk_application_slip(self):
+
+        # Remove required FieldProperty attribute first ...
+        #delattr(ApplicantsContainer, 'prefix')
+        # ... and replace by ictw
+        self.applicantscontainer.prefix = 'ictwk'
+        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+        self.slip_path = self.view_path + '/application_slip.pdf'
+        self.browser.open(self.manage_path)
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.browser.getControl(name="form.firstname").value = 'John'
+        self.browser.getControl(name="form.middlename").value = 'Anthony'
+        self.browser.getControl(name="form.lastname").value = 'Tester'
+        self.browser.getControl(name="form.date_of_birth").value = '09/09/1988'
+        #self.browser.getControl(name="form.sex").value = ['m']
+        self.browser.getControl(name="form.email").value = 'xx@yy.zz'
+        self.browser.getControl("Save").click()
+        self.applicant.registration_cats = ['group', 'corporate']
+        IWorkflowState(self.applicant).setState('submitted')
+        self.browser.open(self.view_path)
+        self.assertTrue('Group Registration @ ₦ 200000' in self.browser.contents)
+        self.browser.open(self.manage_path)
+        self.browser.getLink("Download application slip").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.headers['Content-Type'],
+                         'application/pdf')
+        path = os.path.join(samples_dir(), 'ictwk_application_slip.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample ictwk_application_slip.pdf written to %s" % path
Index: main/waeup.uniben/trunk/src/waeup/uniben/students/utils.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/utils.py	(revision 13796)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/utils.py	(revision 13814)
@@ -350,5 +350,5 @@
             return _('This type of payment has already been made.'), None
         if self._isPaymentDisabled(p_session, category, student):
-            return _('Payment temporarily disabled.'), None
+            return _('This category of payments has been disabled.'), None
         payment = createObject(u'waeup.StudentOnlinePayment')
         timestamp = ("%d" % int(time()*10000))[1:]
