Index: main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/browser.py
===================================================================
--- main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/browser.py	(revision 9554)
+++ main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/browser.py	(revision 9562)
@@ -74,7 +74,9 @@
     """ Page to display student personal data
     """
-    form_fields = grok.AutoFields(INigeriaStudentPersonal).omit('personal_updated')
+    form_fields = grok.AutoFields(INigeriaStudentPersonal)
     form_fields['perm_address'].custom_widget = BytesDisplayWidget
     form_fields['next_kin_address'].custom_widget = BytesDisplayWidget
+    form_fields[
+        'personal_updated'].custom_widget = FriendlyDatetimeDisplayWidget('le')
 
 class NigeriaStudentPersonalEditFormPage(StudentPersonalEditFormPage):
Index: main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/tests/test_browser.py
===================================================================
--- main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/tests/test_browser.py	(revision 9554)
+++ main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/tests/test_browser.py	(revision 9562)
@@ -19,4 +19,5 @@
 import shutil
 import tempfile
+from datetime import datetime, timedelta
 from StringIO import StringIO
 from hurry.workflow.interfaces import IWorkflowState, IWorkflowInfo
@@ -258,2 +259,29 @@
             'acc_let deleted'
             in self.browser.contents)
+
+    def test_student_expired_personal_data(self):
+        # Login
+        delta = timedelta(days=180)
+        self.student.personal_updated = datetime.utcnow() - delta
+        self.browser.open(self.login_path)
+        self.browser.getControl(name="form.login").value = self.student_id
+        self.browser.getControl(name="form.password").value = 'spwd'
+        self.browser.getControl("Login").click()
+        self.assertEqual(self.browser.url, self.student_path)
+        self.assertTrue(
+            'You logged in' in self.browser.contents)
+        # Students don't see personal_updated field in edit form
+        self.browser.open(self.edit_personal_path)
+        self.assertFalse('Updated' in self.browser.contents)
+        self.browser.open(self.personal_path)
+        self.assertTrue('Updated' in self.browser.contents)
+        self.browser.getLink("Logout").click()
+        delta = timedelta(days=181)
+        self.student.personal_updated = datetime.utcnow() - delta
+        self.browser.open(self.login_path)
+        self.browser.getControl(name="form.login").value = self.student_id
+        self.browser.getControl(name="form.password").value = 'spwd'
+        self.browser.getControl("Login").click()
+        self.assertEqual(self.browser.url, self.edit_personal_path)
+        self.assertTrue(
+            'Your personal data record expired' in self.browser.contents)
Index: main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/tests/test_export.py
===================================================================
--- main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/tests/test_export.py	(revision 9554)
+++ main/kofacustom.nigeria/trunk/src/kofacustom/nigeria/students/tests/test_export.py	(revision 9562)
@@ -45,5 +45,5 @@
         exporter.export_all(self.app, self.outfile)
         result = open(self.outfile, 'rb').read()
-        self.assertTrue(
+        self.assertMatches(
             'adm_code,alr_date,alr_fname,alr_no,alr_results,clearance_locked,'
             'clr_code,date_of_birth,def_adm,disabled,email,emp2_end,'
@@ -52,20 +52,22 @@
             'fst_sit_date,fst_sit_fname,fst_sit_no,fst_sit_results,'
             'fst_sit_type,hq2_degree,hq2_disc,hq2_matric_no,hq2_school,'
-            'hq2_session,hq2_type,hq_degree,hq_disc,hq_matric_no,hq_school,'
-            'hq_session,hq_type,is_staff,lastname,lga,marit_stat,'
-            'matric_number,middlename,nationality,next_kin_address,'
-            'next_kin_name,next_kin_relation,nysc_lga,nysc_location,'
-            'nysc_year,officer_comment,'
-            'perm_address,phone,reg_number,religion,scd_sit_date,'
-            'scd_sit_fname,scd_sit_no,scd_sit_results,scd_sit_type,sex,'
-            'student_id,suspended,password,state,history,certcode,'
-            'is_postgrad,current_level,current_session\r\n'
-
-            'my adm code,,,,"[(\'visual_art\', \'A1\')]",0,my clr code,'
-            '1981-02-04#,,,anna@sample.com,,,,,,,,,,,Anna,,,,,'
-            '"[(\'visual_art\', \'A1\')]",,,,,,,,,,,,,,,Tester,,,234,M.,NG'
-            ',,,,,,,,"Studentroad 21\nLagos 123456\n",+234-123-12345#,123'
-            ',,,,,"[(\'visual_art\', \'A1\')]",,f,A111111,0,,created,'
-            in result
+            'hq2_session,hq2_type,hq_degree,hq_disc,hq_fname,hq_matric_no,'
+            'hq_school,hq_session,hq_type,is_staff,lastname,lga,'
+            'marit_stat,matric_number,middlename,nationality,'
+            'next_kin_address,next_kin_name,next_kin_relation,'
+            'nysc_lga,nysc_location,nysc_year,officer_comment,'
+            'perm_address,personal_updated,phone,reg_number,'
+            'religion,scd_sit_date,scd_sit_fname,scd_sit_no,'
+            'scd_sit_results,scd_sit_type,sex,student_id,'
+            'suspended,password,state,history,certcode,is_postgrad,'
+            'current_level,current_session\r\nmy adm code,,,,'
+            '"[(\'visual_art\', \'A1\')]",0,my clr code,1981-02-04#,,,'
+            'anna@sample.com,,,,,,,,,,,Anna,,,,,"[(\'visual_art\', \'A1\')]"'
+            ',,,,,,,,,,,,,,,,Tester,,,234,M.,NG,,,,,,,,'
+            '"Studentroad 21\nLagos 123456\n",,+234-123-12345#,123,,,,,'
+            '"[(\'visual_art\', \'A1\')]",,f,A111111,0,,created,'
+            '[u\'2012-11-06 13:16:41 WAT - Record created by system\'],'
+            'CERT1,0,200,2012\r\n',
+            result
             )
         return
