Index: main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser.py
===================================================================
--- main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser.py	(revision 16147)
+++ main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser.py	(revision 16165)
@@ -124,13 +124,13 @@
 
 TRANS_SHORT_OMIT_FIELDS = TRANS_OMIT_FIELDS + (
-    'date_of_birth',
+    #'date_of_birth',
     'sex',
     'nationality',
-    'entry_mode',
-    'entry_session',
+    #'entry_mode',
+    #'entry_session',
     'end_session',
-    'course_studied',
-    'course_changed',
-    'change_level',
+    #'course_studied',
+    #'course_changed',
+    #'change_level',
     )
 
@@ -158,17 +158,17 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target == 'transfull':
+        if self.target is not None and self.target == 'tscf':
             form_fields = grok.AutoFields(ITranscriptApplicant)
             for field in TRANS_OMIT_FIELDS:
                 form_fields = form_fields.omit(field)
             form_fields['dispatch_address'].custom_widget = BytesDisplayWidget
-            form_fields['perm_address'].custom_widget = BytesDisplayWidget
-            return form_fields
-        if self.target is not None and self.target == 'transshort':
+            #form_fields['perm_address'].custom_widget = BytesDisplayWidget
+            return form_fields
+        if self.target is not None and self.target == 'tscs':
             form_fields = grok.AutoFields(ITranscriptApplicant)
             for field in TRANS_SHORT_OMIT_FIELDS:
                 form_fields = form_fields.omit(field)
             form_fields['dispatch_address'].custom_widget = BytesDisplayWidget
-            form_fields['perm_address'].custom_widget = BytesDisplayWidget
+            #form_fields['perm_address'].custom_widget = BytesDisplayWidget
             return form_fields
         if self.target is not None and self.target.startswith('pg'):
@@ -192,4 +192,52 @@
         return form_fields
 
+def getCerts(view, coursex):
+    yield(dict(code='', title='--', selected=''))
+    appcatcertificatesource = AppCatCertificateSource().factory
+    for cert in appcatcertificatesource.getValues(view.context):
+        selected = ''
+        course = getattr(view.context, coursex)
+        if course is not None and course.code == cert.code:
+            selected = 'selected'
+        title = appcatcertificatesource.getTitle(view.context, cert)
+        yield(dict(code=cert.code, title=title, selected=selected))
+
+def saveCourses(view, changed_fields=[]):
+    """In custom packages we needed to customize the certificate
+    select widget. We just save course1 and course2 if these customized
+    fields appear in the form.
+    """
+    form = view.request.form
+    course1 = form.get('custom.course1', None)
+    course2 = form.get('custom.course2', None)
+    cat = queryUtility(ICatalog, name='certificates_catalog')
+    if course1:
+        results = list(
+            cat.searchResults(code=(course1, course1)))
+        view.context.course1 = results[0]
+        changed_fields.append('course1')
+    if course2:
+        results = list(
+            cat.searchResults(code=(course2, course2)))
+        view.context.course2 = results[0]
+        changed_fields.append('course2')
+    return changed_fields
+
+def display_fileupload(view, filename):
+    if view.target.startswith('tsc'):
+        return False
+    if filename[1] == 'res_stat.pdf':
+        if view.context.subtype != 'transfer':
+            return False
+    if filename[1] == 'jamb.pdf' \
+        and view.target is not None \
+        and view.target.startswith('pg'):
+        return False
+    if filename[1] == 'nysc.pdf' \
+        and view.target is not None \
+        and not view.target.startswith('pg'):
+        return False
+    return True
+
 class CustomApplicantManageFormPage(NigeriaApplicantManageFormPage):
     """A full edit view for applicant data.
@@ -197,34 +245,11 @@
 
     def getCerts(self, coursex):
-        yield(dict(code='', title='--', selected=''))
-        appcatcertificatesource = AppCatCertificateSource().factory
-        for cert in appcatcertificatesource.getValues(self.context):
-            selected = ''
-            course = getattr(self.context, coursex)
-            if course is not None and course.code == cert.code:
-                selected = 'selected'
-            title = appcatcertificatesource.getTitle(self.context, cert)
-            yield(dict(code=cert.code, title=title, selected=selected))
+        return getCerts(self, coursex)
 
     def saveCourses(self, changed_fields):
-        """In custom packages we needed to customize the certificate
-        select widget. We just save course1 and course2 if these customized
-        fields appear in the form.
-        """
-        form = self.request.form
-        course1 = form.get('custom.course1', None)
-        course2 = form.get('custom.course2', None)
-        cat = queryUtility(ICatalog, name='certificates_catalog')
-        if course1:
-            results = list(
-                cat.searchResults(code=(course1, course1)))
-            self.context.course1 = results[0]
-            changed_fields.append('course1')
-        if course2:
-            results = list(
-                cat.searchResults(code=(course2, course2)))
-            self.context.course2 = results[0]
-            changed_fields.append('course2')
-        return changed_fields
+        return saveCourses(self, changed_fields)
+
+    def display_fileupload(self, filename):
+        return display_fileupload(self, filename)
 
     @property
@@ -236,14 +261,16 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target == 'transfull':
+        self.course_selector = False
+        if self.target is not None and self.target == 'tscf':
             form_fields = grok.AutoFields(ITranscriptApplicant)
             for field in TRANS_OMIT_FIELDS:
                 form_fields = form_fields.omit(field)
             return form_fields
-        if self.target is not None and self.target == 'transshort':
+        if self.target is not None and self.target == 'tscs':
             form_fields = grok.AutoFields(ITranscriptApplicant)
             for field in TRANS_SHORT_OMIT_FIELDS:
                 form_fields = form_fields.omit(field)
             return form_fields
+        self.course_selector = True
         if self.target is not None and self.target.startswith('pg'):
             form_fields = grok.AutoFields(ICustomPGApplicant)
@@ -263,46 +290,11 @@
 
     def getCerts(self, coursex):
-        yield(dict(code='', title='--', selected=''))
-        appcatcertificatesource = AppCatCertificateSource().factory
-        for cert in appcatcertificatesource.getValues(self.context):
-            selected = ''
-            course = getattr(self.context, coursex)
-            if course is not None and course.code == cert.code:
-                selected = 'selected'
-            title = appcatcertificatesource.getTitle(self.context, cert)
-            yield(dict(code=cert.code, title=title, selected=selected))
+        return getCerts(self, coursex)
 
     def saveCourses(self):
-        """In custom packages we needed to customize the certificate
-        select widget. We just save course1 and course2 if these customized
-        fields appear in the form.
-        """
-        form = self.request.form
-        course1 = form.get('custom.course1', None)
-        course2 = form.get('custom.course2', None)
-        cat = queryUtility(ICatalog, name='certificates_catalog')
-        if course1:
-            results = list(
-                cat.searchResults(code=(course1, course1)))
-            self.context.course1 = results[0]
-        if course2:
-            results = list(
-                cat.searchResults(code=(course2, course2)))
-            self.context.course2 = results[0]
-        return
+        return saveCourses(self)
 
     def display_fileupload(self, filename):
-        if filename[1] == 'res_stat.pdf':
-            if self.context.subtype != 'transfer':
-                return False
-        if filename[1] == 'jamb.pdf' \
-            and self.target is not None \
-            and self.target.startswith('pg'):
-            return False
-        if filename[1] == 'nysc.pdf' \
-            and self.target is not None \
-            and not self.target.startswith('pg'):
-            return False
-        return True
+        return display_fileupload(self, filename)
 
     def dataNotComplete(self, data):
@@ -320,14 +312,16 @@
     @property
     def form_fields(self):
-        if self.target is not None and self.target == 'transfull':
+        self.course_selector = False
+        if self.target is not None and self.target == 'tscf':
             form_fields = grok.AutoFields(ITranscriptApplicant)
             for field in TRANS_OMIT_FIELDS:
                 form_fields = form_fields.omit(field)
             return form_fields
-        if self.target is not None and self.target == 'transshort':
+        if self.target is not None and self.target == 'tscs':
             form_fields = grok.AutoFields(ITranscriptApplicant)
             for field in TRANS_SHORT_OMIT_FIELDS:
                 form_fields = form_fields.omit(field)
             return form_fields
+        self.course_selector = True
         if self.target is not None and self.target.startswith('pg'):
             form_fields = grok.AutoFields(ICustomPGApplicantEdit)
Index: main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser_templates/applicanteditpage.pt
===================================================================
--- main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser_templates/applicanteditpage.pt	(revision 16147)
+++ main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser_templates/applicanteditpage.pt	(revision 16165)
@@ -22,5 +22,5 @@
     <tbody>
       <tal:widgets content="structure provider:widgets" />
-
+      <tal:course_selector condition="view/course_selector">
       <tr>
         <td class="separator" colspan="2">
@@ -73,11 +73,12 @@
       </tr>
       <tr>
-
-      <tr>
-        <td class="separator" colspan="2">
+      </tal:course_selector>
+
+      <tr>
+        <td class="separator" colspan="2"
+          tal:condition="python: not view.target.startswith('tsc')">
           File Uploads
         </td>
       </tr>
-
       <tr tal:condition="python: context.__parent__.with_picture">
         <td class="fieldname" i18n:translate="">
Index: main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/interfaces.py
===================================================================
--- main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/interfaces.py	(revision 16147)
+++ main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/interfaces.py	(revision 16165)
@@ -21,4 +21,6 @@
 
 from zope import schema
+from zope.component import getUtility
+from zope.catalog.interfaces import ICatalog
 from zc.sourcefactory.basic import BasicSourceFactory
 from waeup.kofa.applicants.interfaces import (
@@ -111,4 +113,27 @@
             DESTINATION_COST[value][1])
 
+class TranscriptCertificateSource(CertificateSource):
+    """Include Department and Faculty in Title.
+    """
+    def getValues(self, context):
+        catalog = getUtility(ICatalog, name='certificates_catalog')
+        resultset = catalog.searchResults(code=(None, None))
+        resultlist = sorted(resultset, key=lambda
+            value: value.__parent__.__parent__.__parent__.code +
+            value.__parent__.__parent__.code +
+            value.code)
+        return resultlist
+
+    def getTitle(self, context, value):
+        """
+        """
+        try: title = "%s / %s / %s (%s)" % (
+            value.__parent__.__parent__.__parent__.title,
+            value.__parent__.__parent__.title,
+            value.title, value.code)
+        except AttributeError:
+            title = "NA / %s (%s)" % (value.title, value.code)
+        return title
+
 class ICustomUGApplicant(IApplicantBaseData):
     """An undergraduate applicant.
@@ -415,16 +440,4 @@
         )
 
-    #student_id = schema.TextLine(
-    #    title = _(u'Kofa Student Id'),
-    #    required = False,
-    #    readonly = False,
-    #    )
-
-    #reg_number = schema.TextLine(
-    #    title = _(u'Registration Number'),
-    #    readonly = False,
-    #    required = False,
-    #    )
-
     matric_number = schema.TextLine(
         title = _(u'Matriculation Number'),
@@ -448,10 +461,10 @@
         )
 
-    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,
-        )
+    #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,
+    #    )
 
     sex = schema.Choice(
@@ -461,9 +474,9 @@
         )
 
-    nationality = schema.Choice(
-        vocabulary = nats_vocab,
-        title = _(u'Nationality'),
-        required = False,
-        )
+    #nationality = schema.Choice(
+    #    vocabulary = nats_vocab,
+    #    title = _(u'Nationality'),
+    #    required = False,
+    #    )
 
     email = schema.ASCIILine(
@@ -473,15 +486,15 @@
         )
 
-    phone = PhoneNumber(
-        title = _(u'Phone'),
-        description = u'',
-        required = False,
-        )
-
-    perm_address = schema.Text(
-        title = _(u'Current Local Address'),
-        required = False,
-        readonly = False,
-        )
+    #phone = PhoneNumber(
+    #    title = _(u'Phone'),
+    #    description = u'',
+    #    required = False,
+    #    )
+
+    #perm_address = schema.Text(
+    #    title = _(u'Current Local Address'),
+    #    required = False,
+    #    readonly = False,
+    #    )
 
     dispatch_address = schema.Text(
@@ -499,13 +512,20 @@
         )
 
-    entry_mode = schema.Choice(
-        title = _(u'Entry Mode'),
-        source = StudyModeSource(),
-        required = False,
-        readonly = False,
-        )
-
-    entry_session = schema.Choice(
-        title = _(u'Entry Session'),
+    #entry_mode = schema.Choice(
+    #    title = _(u'Entry Mode'),
+    #    source = StudyModeSource(),
+    #    required = False,
+    #    readonly = False,
+    #    )
+
+    #entry_session = schema.Choice(
+    #    title = _(u'Entry Session'),
+    #    source = academic_sessions_vocab,
+    #    required = False,
+    #    readonly = False,
+    #    )
+
+    end_session = schema.Choice(
+        title = _(u'Academic Session of Graduation'),
         source = academic_sessions_vocab,
         required = False,
@@ -513,33 +533,27 @@
         )
 
-    end_session = schema.Choice(
-        title = _(u'End Session'),
-        source = academic_sessions_vocab,
-        required = False,
-        readonly = False,
-        )
-
     course_studied = schema.Choice(
-        title = _(u'Course of Study / Degree'),
-        source = CertificateSource(),
-        required = False,
-        readonly = False,
-        )
-
-    course_changed = schema.Choice(
-        title = _(u'Change of Study Course'),
-        description = u'If yes, select previous course of study.',
-        source = CertificateSource(),
-        readonly = False,
-        required = False,
-        )
-
-    change_level = schema.Choice(
-        title = _(u'Change Level'),
-        description = u'If yes, select level at which you changed course of study.',
-        source = StudyLevelSource(),
-        required = False,
-        readonly = False,
-        )
+        title = _(u'Course of Study'),
+        source = TranscriptCertificateSource(),
+        description = u'Faculty / Department / Course',
+        required = False,
+        readonly = False,
+        )
+
+    #course_changed = schema.Choice(
+    #    title = _(u'Change of Study Course'),
+    #    description = u'If yes, select previous course of study.',
+    #    source = CertificateSource(),
+    #    readonly = False,
+    #    required = False,
+    #    )
+
+    #change_level = schema.Choice(
+    #    title = _(u'Change Level'),
+    #    description = u'If yes, select level at which you changed course of study.',
+    #    source = StudyLevelSource(),
+    #    required = False,
+    #    readonly = False,
+    #    )
 
     no_copies = schema.Choice(
Index: main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/utils.py
===================================================================
--- main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/utils.py	(revision 16147)
+++ main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/utils.py	(revision 16165)
@@ -58,6 +58,6 @@
         'pg': ['Postgraduate Programmes', 'PG'],
         'ug': ['Undergraduate Programmes', 'UG'],
-        'transfull': ['Transcript Application (without student record)', 'TRF'],
-        'transshort': ['Transcript Application (with student record)', 'TRS'],
+        'tscf': ['Transcript Application (without student record)', 'TRF'],
+        'tscs': ['Transcript Application (with student record)', 'TRS'],
         }
 
