Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser.py	(revision 16074)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser.py	(revision 16075)
@@ -20,5 +20,6 @@
 import grok
 import os
-from zope.component import getUtility
+from zope.component import getUtility, queryUtility
+from zope.catalog.interfaces import ICatalog
 from zope.formlib.textwidgets import BytesDisplayWidget
 from waeup.kofa.interfaces import (
@@ -67,5 +68,7 @@
     'special_application',
     #'jamb_subjects_list',
-    'programme_type')
+    'programme_type',
+    'course1',
+    'course2',)
 UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + OMIT_DISPLAY_FIELDS + (
     'student_id',
@@ -78,5 +81,6 @@
     #'jamb_score',
     #'jamb_reg_number',
-    'aggregate')
+    'aggregate',
+    )
 
 # PG has its own interface
@@ -106,4 +110,6 @@
     'emp2_end',
     'emp2_reason',
+    'course1',
+    'course2',
     )
 PG_OMIT_EDIT_FIELDS = PG_OMIT_MANAGE_FIELDS + PG_OMIT_DISPLAY_FIELDS + (
@@ -161,10 +167,35 @@
     """
 
-    @property
-    def certs(self):
+    def getCerts(self, coursex):
+        yield(dict(code='', title='--', selected=''))
         appcatcertificatesource = AppCatCertificateSource().factory
-        for code in appcatcertificatesource.getValues(self.context):
-            title = appcatcertificatesource.getTitle(self.context, code)
-            yield(code, title)
+        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))
+
+    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
 
     @property
@@ -192,10 +223,33 @@
     """
 
-    @property
-    def certs(self):
+    def getCerts(self, coursex):
+        yield(dict(code='', title='--', selected=''))
         appcatcertificatesource = AppCatCertificateSource().factory
-        for code in appcatcertificatesource.getValues(self.context):
-            title = appcatcertificatesource.getTitle(self.context, code)
-            yield(code, title)
+        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))
+
+    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
 
     def display_fileupload(self, filename):
@@ -219,6 +273,4 @@
             if not store.getFileByContext(self.context, attr=u'passport.jpg'):
                 return _('No passport picture uploaded.')
-            if not self.request.form.get('confirm_passport', False):
-                return _('Passport picture confirmation box not ticked.')
         if self.context.subtype == 'transfer' and \
             not store.getFileByContext(self.context, attr=u'res_stat.pdf'):
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 16074)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/browser_templates/applicanteditpage.pt	(revision 16075)
@@ -24,29 +24,49 @@
 
       <tr>
-        <td class="separator" colspan="2">For Demonstration Purposes Only!! <<<<</td>
+        <td class="separator" colspan="2">
+          Programmes/Courses Desired
+        </td>
       </tr>
       <tr>
         <td class="fieldname" i18n:translate="">
-          Certificate:
+          1st Choice Course of Study:
         </td>
         <td>
           <input id="filterbox" class="kofa-filterbox form-control half"
-                 placeholder="Enter search text, then select item below."
+                 placeholder="Enter search text, then select course below."
                  type="text" i18n:translate=""/>
           <br />
-          <select id="filteredselect" name="course1"
+          <select id="filteredselect" name="custom.course1"
                   class="form-control" size=5>
-              <span tal:repeat="item view/certs"
-                  tal:omit-tag="">
-              <option tal:attributes="value python:item[0]">
-                <span tal:replace="python:item[1]">TITLE</span>
-              </option>
-            </span>
+            <option tal:repeat="item python:view.getCerts('course1')"
+                    tal:attributes="value item/code; selected item/selected">
+              <span tal:replace="item/title">TITLE</span>
+            </option>
           </select>
         </td>
       </tr>
-
-      <tr>
-        <td class="separator" colspan="2">>>>></td>
+      <tr>
+        <td class="fieldname" i18n:translate="">
+          2nd Choice Course of Study:
+        </td>
+        <td>
+          <input id="filterbox" class="kofa-filterbox form-control half"
+                 placeholder="Enter search text, then select course below."
+                 type="text" i18n:translate=""/>
+          <br />
+          <select id="filteredselect" name="custom.course2"
+                  class="form-control" size=5>
+            <option tal:repeat="item python:view.getCerts('course2')"
+                    tal:attributes="value item/code; selected item/selected">
+              <span tal:replace="item/title">TITLE</span>
+            </option>
+          </select>
+        </td>
+      </tr>
+
+      <tr>
+        <td class="separator" colspan="2">
+          File Uploads
+        </td>
       </tr>
 
@@ -129,14 +149,16 @@
   </table>
 
-  <div tal:condition="python: not view.manage_applications
-                              and context.__parent__.with_picture">
-    <input id="confirm_passport" name="confirm_passport"
-           type="checkbox" value="True"/>&nbsp;&nbsp;
-    <span i18n:translate="">
-    I confirm that the Passport Photograph uploaded on this form is a
-    true picture of me.
-    </span>
-  </div>
+  <p style="color:red"
+      tal:condition="python: view.target in ('pg',)
+                     and not view.manage_applications">
   <br />
+  Note: Your admission will not be processed until at least 2 of your expected
+  3 referees have returned their assessment, while awaiting the 3rd referee, and
+  until your transcript has been sent to the address below:<br /><br />
+  The Office of the Secretary<br />
+  School of Post Graduate Studies & Research (Main Campus)<br />
+  Igbinedion University, Okada<br />
+  Edo State, Nigeria<br /><br />
+  </p>
 
   <div tal:condition="view/availableActions">
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/tests/test_browser.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/tests/test_browser.py	(revision 16074)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/applicants/tests/test_browser.py	(revision 16075)
@@ -85,5 +85,15 @@
     layer = FunctionalLayer
 
-    def test_application_slip(self):
+    def fill_correct_values(self):
+        # Fill the edit form with suitable values
+        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="custom.course1").value = ['CERT1']
+        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'
+
+    def test_manage_application(self):
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
         self.slip_path = self.view_path + '/application_slip.pdf'
@@ -92,4 +102,6 @@
         self.fill_correct_values()
         self.browser.getControl("Save").click()
+        self.assertEqual(self.applicant.course1, self.certificate)
+        self.assertEqual(self.applicant.course2, None)
         IWorkflowState(self.applicant).setState('submitted')
         self.browser.open(self.manage_path)
@@ -101,4 +113,14 @@
         open(path, 'wb').write(self.browser.contents)
         print "Sample application_slip.pdf written to %s" % path
+        # Log entries have been added
+        logfile = os.path.join(
+            self.app['datacenter'].storage, 'logs', 'applicants.log')
+        logcontent = open(logfile).read()
+        self.assertTrue(
+            'zope.mgr - kofacustom.iuokada.applicants.browser.CustomApplicantManageFormPage - '
+            '%s - saved: firstname + middlename + lastname + date_of_birth '
+            '+ sex + email + course1'
+            % (self.applicant.applicant_id)
+            in logcontent)
 
     def test_upload_res_stat_by_manager(self):
