Index: main/waeup.futminna/trunk/src/waeup/futminna/applicants/browser.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/applicants/browser.py	(revision 10088)
+++ main/waeup.futminna/trunk/src/waeup/futminna/applicants/browser.py	(revision 10088)
@@ -0,0 +1,131 @@
+## $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.formlib.textwidgets import BytesDisplayWidget
+from waeup.futminna.applicants.interfaces import (
+    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,
+    )
+from kofacustom.nigeria.applicants.browser import (
+    NigeriaApplicantDisplayFormPage,
+    NigeriaApplicantManageFormPage,
+    NigeriaApplicantEditFormPage,
+    NigeriaPDFApplicationSlip)
+
+
+class CustomApplicantDisplayFormPage(NigeriaApplicantDisplayFormPage):
+    """A display view for applicant data.
+    """
+
+    grok.template('applicantdisplaypage')
+
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        if target is not None and 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['perm_address'].custom_widget = BytesDisplayWidget
+        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(NigeriaPDFApplicationSlip):
+
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        if target is not None and target.startswith('pg'):
+            form_fields = grok.AutoFields(ICustomPGApplicant)
+            for field in PG_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(NigeriaApplicantManageFormPage):
+    """A full edit view for applicant data.
+    """
+    
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        if target is not None and target.startswith('pg'):
+            form_fields = grok.AutoFields(ICustomPGApplicant)
+            for field in PG_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(NigeriaApplicantEditFormPage):
+    """An applicant-centered edit view for applicant data.
+    """
+
+    @property
+    def form_fields(self):
+        target = getattr(self.context.__parent__, 'prefix', None)
+        if target is not None and target.startswith('pg'):
+            form_fields = grok.AutoFields(ICustomPGApplicantEdit)
+            for field in PG_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.futminna/trunk/src/waeup/futminna/applicants/browser_templates/applicantdisplaypage.pt
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/applicants/browser_templates/applicantdisplaypage.pt	(revision 10088)
+++ main/waeup.futminna/trunk/src/waeup/futminna/applicants/browser_templates/applicantdisplaypage.pt	(revision 10088)
@@ -0,0 +1,65 @@
+<h2 i18n:domain="waeup.kofa">
+  ...
+  <span tal:replace="context/translated_state">APPLICATIONSTATE
+  </span>
+  <span tal:omit-tag=""
+    i18n:translate="" tal:condition="context/suspended">(account suspended)
+  </span>
+  ...
+</h2>
+
+<div class="workflow">
+  <div tal:repeat="msg context/history/messages">
+    <span tal:replace="msg">MESSAGE</span><br />
+  </div>
+</div>
+
+<img src="" height="180px" tal:attributes="src view/passport_url" />
+
+<table i18n:domain="waeup.kofa" class="form-table">
+  <tbody>
+    <tal:widgets content="structure provider:widgets" />
+    <tr tal:condition="view/getCourseAdmitted">
+      <td class="fieldname" i18n:translate="">
+          Admitted Course of Study:
+      </td>
+      <td>
+        <span tal:replace="structure view/getCourseAdmitted" />
+      </td>
+    </tr>
+    <tr>
+      <td class="fieldname" i18n:translate="">
+          Password:
+      </td>
+      <td>
+          <tal:password replace="view/hasPassword" />
+      </td>
+    <tr>
+  </tbody>
+</table>
+<h3  i18n:domain="waeup.kofa" i18n:translate="">
+    Acceptance Fee Payment Tickets
+</h3>
+<table i18n:domain="waeup.kofa">
+  <thead>
+    <tr>
+      <th i18n:translate="">Payment Id</th>
+      <th i18n:translate="">Creation Date</th>
+      <th i18n:translate="">Payment Date</th>
+      <th i18n:translate="">Category</th>
+      <th i18n:translate="">Item</th>
+      <th i18n:translate="">State</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr tal:repeat="value context/values">
+      <td> <a tal:attributes="href value/__name__">
+      <span tal:content="value/p_id">PID</span></a></td>
+      <td tal:content="python: layout.formatDatetime(value.creation_date)">CREATION DATE</td>
+      <td tal:content="python: layout.formatDatetime(value.payment_date)">PAYMENT DATE</td>
+      <td tal:content ="value/category">CATEGORY</td>
+      <td tal:content ="value/display_item">ITEM</td>
+      <td tal:content ="value/state">STATE</td>
+    </tr>
+  </tbody>
+</table>
Index: main/waeup.futminna/trunk/src/waeup/futminna/applicants/interfaces.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/applicants/interfaces.py	(revision 10087)
+++ main/waeup.futminna/trunk/src/waeup/futminna/applicants/interfaces.py	(revision 10088)
@@ -23,20 +23,29 @@
     IApplicantBaseData,
     AppCatCertificateSource, CertificateSource)
-from waeup.kofa.schoolgrades import ResultEntryField
-from waeup.kofa.interfaces import (
-    SimpleKofaVocabulary, academic_sessions_vocab, validate_email)
-from waeup.kofa.schema import FormattedDate, TextLineChoice
-from waeup.kofa.students.vocabularies import nats_vocab, GenderSource
-from waeup.kofa.applicants.interfaces import contextual_reg_num_source
+from waeup.kofa.students.vocabularies import nats_vocab
 from kofacustom.nigeria.applicants.interfaces import (
-    LGASource, high_qual, high_grade, exam_types,
-    INigeriaUGApplicant, INigeriaPGApplicant,
+    LGASource,
+    INigeriaUGApplicant,
     INigeriaApplicantOnlinePayment,
     INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
     INigeriaApplicantUpdateByRegNo,
     IPUTMEApplicantEdit,
+    OMIT_DISPLAY_FIELDS,
+    UG_OMIT_DISPLAY_FIELDS,
+    UG_OMIT_PDF_FIELDS,
+    UG_OMIT_MANAGE_FIELDS,
+    UG_OMIT_EDIT_FIELDS,
     )
+
+
+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.futminna.interfaces import MessageFactory as _
-from waeup.futminna.payments.interfaces import ICustomOnlinePayment
 
 class ICustomUGApplicant(INigeriaUGApplicant):
@@ -48,5 +57,5 @@
     """
 
-class ICustomPGApplicant(INigeriaPGApplicant):
+class ICustomPGApplicant(IApplicantBaseData):
     """A postgraduate applicant.
 
@@ -55,4 +64,56 @@
     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,
+        )
+    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):
Index: main/waeup.futminna/trunk/src/waeup/futminna/applicants/utils.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/applicants/utils.py	(revision 10087)
+++ main/waeup.futminna/trunk/src/waeup/futminna/applicants/utils.py	(revision 10088)
@@ -23,5 +23,5 @@
 import grok
 from kofacustom.nigeria.applicants.utils import NigeriaApplicantsUtils
-
+from waeup.futminna.interfaces import MessageFactory as _
 
 
@@ -29,2 +29,6 @@
     """A collection of parameters and methods subject to customization.
     """
+
+    SEPARATORS_DICT = {
+      'form.student_id': _(u'Process Data'),
+      }
