Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/batching.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/batching.py	(revision 8572)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/batching.py	(revision 8584)
@@ -21,5 +21,6 @@
 from waeup.kofa.utils.batching import BatchProcessor
 from waeup.kofa.applicants.batching import ApplicantProcessor
-from waeup.fceokene.applicants.interfaces import ICustomApplicant
+from waeup.fceokene.applicants.interfaces import (
+    ICustomApplicant, ICustomApplicantUpdateByRegNo)
 
 class CustomApplicantProcessor(ApplicantProcessor):
@@ -36,2 +37,3 @@
     """
     iface = ICustomApplicant
+    iface_byregnumber = ICustomApplicantUpdateByRegNo
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py	(revision 8572)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/interfaces.py	(revision 8584)
@@ -38,5 +38,6 @@
 UG_OMIT_MANAGE_FIELDS = ()
 UG_OMIT_EDIT_FIELDS = UG_OMIT_MANAGE_FIELDS + ('locked', 'course_admitted',
-    'student_id', 'screening_score', 'screening_venue', 'notice')
+    'student_id', 'screening_score', 'screening_venue', 'notice',
+    'screening_date')
 PUTME_OMIT_EDIT_FIELDS = UG_OMIT_EDIT_FIELDS + (
     'firstname', 'middlename', 'lastname', 'sex',
@@ -48,5 +49,6 @@
 PG_OMIT_EDIT_FIELDS = PG_OMIT_MANAGE_FIELDS + (
     'locked', 'course_admitted',
-    'student_id', 'screening_score', 'screening_venue', 'notice')
+    'student_id', 'screening_score', 'screening_venue', 'notice',
+    'screening_date')
 
 class IUGApplicant(IApplicantBaseData):
@@ -96,4 +98,8 @@
     screening_venue = schema.TextLine(
         title = _(u'Screening Venue'),
+        required = False,
+        )
+    screening_date = schema.TextLine(
+        title = _(u'Screening Date'),
         required = False,
         )
@@ -271,4 +277,8 @@
         readonly = False,
         )
+    screening_date = schema.TextLine(
+        title = _(u'Screening Date'),
+        required = False,
+        )
     screening_score = schema.Int(
         title = _(u'Screening Score'),
@@ -361,2 +371,13 @@
 IPUTMEApplicantEdit[
     'email'].order =  IUGApplicant['email'].order
+
+class ICustomApplicantUpdateByRegNo(ICustomApplicant):
+    """Representation of an applicant.
+
+    Skip regular reg_number validation if reg_number is used for finding
+    the applicant object.
+    """
+    reg_number = schema.TextLine(
+        title = u'Registration Number',
+        required = False,
+        )
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/tests.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/tests.py	(revision 8572)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/applicants/tests.py	(revision 8584)
@@ -36,4 +36,5 @@
 from waeup.fceokene.testing import FunctionalLayer
 from waeup.fceokene.applicants.export import CustomApplicantsExporter
+from waeup.fceokene.applicants.batching import CustomApplicantProcessor
 
 
@@ -235,8 +236,9 @@
         applicant.screening_score = 98
         applicant.screening_venue = u'Exam Room'
+        applicant.screening_date = u'Saturday, 16th June 2012 2:00:00 PM'
         applicant.password = 'any password'
         return applicant
 
-    def test_export_all(self):
+    def test_export_reimport_all(self):
         # we can export all applicants in a portal
         # set values we can expect in export file
@@ -257,5 +259,6 @@
             'nationality,notice,nysc_lga,'
             'nysc_year,password,perm_address,phone,pp_school,presently_inst,'
-            'reg_number,screening_score,screening_venue,sex,state,student_id,'
+            'reg_number,screening_date,screening_score,screening_venue,sex,'
+            'state,student_id,'
             'container_code'
             in result)
@@ -263,4 +266,25 @@
             'Application initialized by system\'],,,,,,,,,Tester,,0,M.,,'
             '"Some notice\nin lines.",,,any password,,+234-123-12345,,,'
-            '123456,98,Exam Room,f,initialized,,dp2011' in result)
-        return
+            '123456,"Saturday, 16th June 2012 2:00:00 PM",98,Exam Room,f,'
+            'initialized,,dp2011' in result)
+        # We can import the same file with if we ignore some columns.
+        # Since the applicants_catalog hasn't been notified, the same
+        # record with same reg_number can be imported twice.
+        processor = CustomApplicantProcessor()
+        result = processor.doImport(
+            self.outfile,
+            ['ignore1','application_date','ignore2','course1','course2',''
+            'course_admitted','date_of_birth','ignore3','email','emp2_end',''
+            'emp2_position','emp2_reason','emp2_start','emp_end','emp_position',''
+            'emp_reason','emp_start','employer','employer2','firstname','ignore4',''
+            'hq_degree','hq_disc','hq_matric_no','hq_school','hq_session','hq_type',''
+            'jamb_score','jamb_subjects','lastname','lga','locked','middlename',''
+            'nationality','notice','nysc_lga',''
+            'nysc_year','password','perm_address','phone','pp_school','presently_inst',''
+            'reg_number','screening_date','screening_score','screening_venue','sex',''
+            'state','student_id','container_code'],
+            mode='create')
+        num_succ, num_fail, finished_path, failed_path = result
+        self.assertEqual(num_succ,1)
+        self.assertEqual(num_fail,0)
+        return
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/students/batching.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/students/batching.py	(revision 8572)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/students/batching.py	(revision 8584)
@@ -25,5 +25,6 @@
 """
 from waeup.fceokene.students.interfaces import (
-    ICustomStudent,
+    ICustomStudent, ICustomStudentUpdateByRegNo,
+    ICustomStudentUpdateByMatricNo
     )
 from waeup.kofa.students.batching import StudentProcessor
@@ -33,2 +34,4 @@
     """
     iface = ICustomStudent
+    iface_byregnumber = ICustomStudentUpdateByRegNo
+    iface_bymatricnumber = ICustomStudentUpdateByMatricNo
Index: main/waeup.fceokene/trunk/src/waeup/fceokene/students/interfaces.py
===================================================================
--- main/waeup.fceokene/trunk/src/waeup/fceokene/students/interfaces.py	(revision 8572)
+++ main/waeup.fceokene/trunk/src/waeup/fceokene/students/interfaces.py	(revision 8584)
@@ -382,2 +382,20 @@
 
     """
+
+class ICustomStudentUpdateByRegNo(ICustomStudent):
+    """Representation of a student. Skip regular reg_number validation.
+
+    """
+    reg_number = schema.TextLine(
+        title = _(u'Registration Number'),
+        required = False,
+        )
+
+class ICustomStudentUpdateByMatricNo(ICustomStudent):
+    """Representation of a student. Skip regular matric_number validation.
+
+    """
+    matric_number = schema.TextLine(
+        title = _(u'Matriculation Number'),
+        required = False,
+        )
