Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/locales/en/LC_MESSAGES/waeup.kofa.po
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 16251)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 16252)
@@ -128,15 +128,18 @@
 
 msgid "Your personal data record is outdated. Please update."
-msgstr ""
+msgstr "Your personal/bio data record is outdated. Please update."
 
 msgid "${a}: Personal Data"
-msgstr "${a}: Personal/Bio Data"
+msgstr "${a}: Personal / Bio Data"
 
 msgid "Manage personal data"
-msgstr "Manage personal/bio data"
+msgstr "Manage personal / bio data"
 
 msgid "Edit personal data"
-msgstr "Edit personal/bio data"
+msgstr "Edit personal / bio data"
 
 msgid "Personal Data"
-msgstr "Personal/Bio Data"
+msgstr "Personal / Bio Data"
+
+msgid "Personal Data of"
+msgstr "Personal / Bio Data of"
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/browser.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/browser.py	(revision 16251)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/browser.py	(revision 16252)
@@ -33,5 +33,5 @@
     CourseTicketDisplayFormPage, StudentTriggerTransitionFormPage,
     StartClearancePage, BalancePaymentAddFormPage,
-    ExportPDFAdmissionSlip,
+    ExportPDFAdmissionSlip, ExportPDFPersonalDataSlip,
     msave, emit_lock_message)
 from waeup.kofa.students.interfaces import (
@@ -129,4 +129,17 @@
         'personal_updated'].custom_widget = FriendlyDatetimeDisplayWidget('le')
 
+class CustomExportPDFPersonalDataSlip(ExportPDFPersonalDataSlip):
+    """Deliver a PDF base and personal data slip.
+    """
+    omit_fields = (
+        'phone', 'email',
+        'suspended',
+        'adm_code', 'suspended_comment',
+        'current_level',
+        'flash_notice', 'entry_session',
+        'parents_email')
+
+    form_fields = grok.AutoFields(ICustomStudentPersonal)
+
 class CustomAccommodationDisplayFormPage(NigeriaAccommodationDisplayFormPage):
     """ Page to view bed tickets.
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/interfaces.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/interfaces.py	(revision 16251)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/interfaces.py	(revision 16252)
@@ -55,9 +55,36 @@
 
 class ICustomStudentPersonal(IStudentPersonal):
-    """Student bio data.
+    """Student personal/bio data.
 
     """
 
     is_foreigner = Attribute('True if student is non-Nigerian')
+
+    # Duplicated fields from the ICustomStudentBase
+
+    email = schema.ASCIILine(
+        title = _(u'Email'),
+        required = False,
+        constraint=validate_email,
+        )
+
+    email2 = schema.ASCIILine(
+        title = _(u'Second Email'),
+        required = False,
+        constraint=validate_email,
+        )
+
+    phone = PhoneNumber(
+        title = _(u'Phone'),
+        required = False,
+        )
+
+    parents_email = schema.ASCIILine(
+        title = _(u"Parents' Email"),
+        required = False,
+        constraint=validate_email,
+        )
+
+    # New fields
 
     perm_address = schema.Text(
@@ -145,5 +172,4 @@
     """
 
-
 class ICustomUGStudentClearance(INigeriaUGStudentClearance):
     """Representation of ug student clearance data.
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/tests/test_browser.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/tests/test_browser.py	(revision 16251)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/tests/test_browser.py	(revision 16252)
@@ -123,5 +123,5 @@
         self.assertFalse(self.student.library)
 
-    def test_student_basedata_slip(self):
+    def test_student_studycourse_slip(self):
         IWorkflowState(self.student).setState('school fee paid')
         self.browser.open(self.login_path)
@@ -131,11 +131,27 @@
         # Students can open base data slip
         # (no button available in base package)
-        pdf_url = '%s/basedata_slip.pdf' % self.studycourse_path
+        pdf_url = '%s/studycourse_slip.pdf' % self.studycourse_path
         self.browser.open(pdf_url)
         self.assertEqual(self.browser.headers['Status'], '200 Ok')
         self.assertEqual(self.browser.headers['Content-Type'], 'application/pdf')
-        path = os.path.join(samples_dir(), 'basedata_slip.pdf')
+        path = os.path.join(samples_dir(), 'studycourse_slip.pdf')
         open(path, 'wb').write(self.browser.contents)
-        print "Sample PDF basedata_slip.pdf written to %s" % path
+        print "Sample PDF studycourse_slip.pdf written to %s" % path
+
+    def test_student_personal_slip(self):
+        IWorkflowState(self.student).setState('school fee paid')
+        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()
+        # Students can open base data slip
+        # (no button available in base package)
+        pdf_url = '%s/personal_slip.pdf' % self.student_path
+        self.browser.open(pdf_url)
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.headers['Content-Type'], 'application/pdf')
+        path = os.path.join(samples_dir(), 'personal_slip.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample PDF personal_slip.pdf written to %s" % path
 
     def test_student_admission_letter(self):
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/viewlets.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/viewlets.py	(revision 16251)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/viewlets.py	(revision 16252)
@@ -31,7 +31,11 @@
     StudyLevelDisplayFormPage, StudentBaseDisplayFormPage)
 from waeup.kofa.students.viewlets import (
-    AddPreviousPaymentActionButton, AddBalancePaymentActionButton)
+    AddPreviousPaymentActionButton, AddBalancePaymentActionButton,
+    StudentPersonalEditActionButton)
 
 from kofacustom.nigeria.interfaces import MessageFactory as _
+
+class StudentPersonalEditActionButton(StudentPersonalEditActionButton):
+    text = _('Edit personal / bio data')
 
 class SwitchLibraryAccessActionButton(ManageActionButton):
@@ -53,11 +57,20 @@
     icon = 'actionicon_pay.png'
 
-class BaseDataSlipActionButton(ManageActionButton):
+class EditPersonalActionButton(ManageActionButton):
+    grok.order(9)
+    grok.context(ICustomStudent)
+    grok.view(StudentBaseDisplayFormPage)
+    grok.require('waeup.handleStudent')
+    text = _('Edit personal/bio data now')
+    target = 'edit_personal'
+    #icon = 'actionicon_edit.png'
+
+class PersonalDataSlipActionButton(ManageActionButton):
     grok.order(10)
-    grok.context(ICustomStudentStudyCourse)
-    grok.view(StudyCourseDisplayFormPage)
+    grok.context(ICustomStudent)
+    grok.view(StudentBaseDisplayFormPage)
     grok.require('waeup.viewStudent')
-    text = _('Download base data slip')
-    target = 'basedata_slip.pdf'
+    text = _('Download personal / bio data slip')
+    target = 'personal_slip.pdf'
     icon = 'actionicon_pdf.png'
 
@@ -67,5 +80,5 @@
 class GetMatricNumberActionButton(ManageActionButton):
     grok.order(10)
-    grok.context(IStudent)
+    grok.context(ICustomStudent)
     grok.view(StudentBaseDisplayFormPage)
     grok.require('waeup.manageStudent')
@@ -83,4 +96,13 @@
             return ''
         return self.view.url(self.view.context, 'get_matric_number')
+
+class StudyCourseDataSlipActionButton(ManageActionButton):
+    grok.order(10)
+    grok.context(ICustomStudentStudyCourse)
+    grok.view(StudyCourseDisplayFormPage)
+    grok.require('waeup.viewStudent')
+    text = _('Download study course slip')
+    target = 'studycourse_slip.pdf'
+    icon = 'actionicon_pdf.png'
 
 # Library
