Index: main/waeup.futminna/trunk/src/waeup/futminna/applicants/interfaces.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/applicants/interfaces.py	(revision 8957)
+++ main/waeup.futminna/trunk/src/waeup/futminna/applicants/interfaces.py	(revision 8981)
@@ -33,4 +33,7 @@
     INigeriaUGApplicant, INigeriaPGApplicant,
     INigeriaApplicantOnlinePayment,
+    INigeriaUGApplicantEdit, INigeriaPGApplicantEdit,
+    INigeriaApplicantUpdateByRegNo,
+    IPUTMEApplicantEdit,
     UG_OMIT_DISPLAY_FIELDS,
     UG_OMIT_PDF_FIELDS,
@@ -82,5 +85,5 @@
         """
 
-class ICustomUGApplicantEdit(ICustomUGApplicant):
+class ICustomUGApplicantEdit(INigeriaUGApplicantEdit):
     """An undergraduate applicant interface for edit forms.
 
@@ -94,21 +97,5 @@
     """
 
-    email = schema.ASCIILine(
-        title = _(u'Email Address'),
-        required = True,
-        constraint=validate_email,
-        )
-    date_of_birth = FormattedDate(
-        title = _(u'Date of Birth'),
-        required = True,
-        show_year = True,
-        )
-
-ICustomUGApplicantEdit[
-    'date_of_birth'].order =  ICustomUGApplicant['date_of_birth'].order
-ICustomUGApplicantEdit[
-    'email'].order =  ICustomUGApplicant['email'].order
-
-class ICustomPGApplicantEdit(ICustomPGApplicant):
+class ICustomPGApplicantEdit(INigeriaPGApplicantEdit):
     """A postgraduate applicant interface for editing.
 
@@ -122,20 +109,4 @@
     """
 
-    email = schema.ASCIILine(
-        title = _(u'Email Address'),
-        required = True,
-        constraint=validate_email,
-        )
-    date_of_birth = FormattedDate(
-        title = _(u'Date of Birth'),
-        required = True,
-        show_year = True,
-        )
-
-ICustomPGApplicantEdit[
-    'date_of_birth'].order =  ICustomPGApplicant['date_of_birth'].order
-ICustomPGApplicantEdit[
-    'email'].order =  ICustomPGApplicant['email'].order
-
 class ICustomApplicantOnlinePayment(INigeriaApplicantOnlinePayment):
     """An applicant payment via payment gateways.
@@ -143,5 +114,5 @@
     """
 
-class IPUTMEApplicantEdit(ICustomUGApplicant):
+class IPUTMEApplicantEdit(IPUTMEApplicantEdit):
     """An undergraduate applicant interface for editing.
 
@@ -154,21 +125,6 @@
     respective form page.
     """
-    email = schema.ASCIILine(
-        title = _(u'Email Address'),
-        required = True,
-        constraint=validate_email,
-        )
-    date_of_birth = FormattedDate(
-        title = _(u'Date of Birth'),
-        required = True,
-        show_year = True,
-        )
 
-IPUTMEApplicantEdit[
-    'date_of_birth'].order =  ICustomUGApplicant['date_of_birth'].order
-IPUTMEApplicantEdit[
-    'email'].order =  ICustomUGApplicant['email'].order
-
-class ICustomApplicantUpdateByRegNo(ICustomApplicant):
+class ICustomApplicantUpdateByRegNo(INigeriaApplicantUpdateByRegNo):
     """Representation of an applicant.
 
@@ -176,6 +132,3 @@
     the applicant object.
     """
-    reg_number = schema.TextLine(
-        title = u'Registration Number',
-        required = False,
-        )
+
Index: main/waeup.futminna/trunk/src/waeup/futminna/students/tests/test_browser.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/students/tests/test_browser.py	(revision 8957)
+++ main/waeup.futminna/trunk/src/waeup/futminna/students/tests/test_browser.py	(revision 8981)
@@ -152,4 +152,13 @@
         self.browser.getControl(name="form.p_category").value = ['schoolfee']
         self.browser.getControl("Create ticket").click()
+        self.assertMatches('...Session configuration object is not...',
+                           self.browser.contents)
+        # Uups, we forgot to add a session configuration for next session
+        configuration = createObject('waeup.SessionConfiguration')
+        configuration.academic_session = 2005
+        self.app['configuration'].addSessionConfiguration(configuration)
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
+        self.browser.getControl("Create ticket").click()
         self.assertMatches('...ticket created...',
                            self.browser.contents)
@@ -188,4 +197,8 @@
         utils = getUtility(IStudentsUtils)
 
+        configuration = createObject('waeup.SessionConfiguration')
+        configuration.academic_session = 2005
+        self.app['configuration'].addSessionConfiguration(configuration)
+
         error, payment = utils.setPaymentDetails('schoolfee',self.student)
         self.assertEqual(payment, None)
@@ -200,6 +213,9 @@
         self.assertEqual(error, None)
 
-        # Add penalty fee.
+        # Add penalty fee ...
+        # ... for cleared
         self.app['configuration']['2004'].penalty_ug = 99.0
+        # ... for returning
+        self.app['configuration']['2005'].penalty_ug = 88.0
         error, payment = utils.setPaymentDetails('schoolfee',self.student)
         self.assertEqual(payment.amount_auth, 40099.0)
@@ -209,5 +225,5 @@
         self.assertEqual(payment.p_level, 200)
         self.assertEqual(payment.p_session, 2005)
-        self.assertEqual(payment.amount_auth, 20099.0)
+        self.assertEqual(payment.amount_auth, 20088.0)
         self.assertEqual(payment.p_item, u'CERT1')
         self.assertEqual(error, None)
Index: main/waeup.futminna/trunk/src/waeup/futminna/students/utils.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/students/utils.py	(revision 8957)
+++ main/waeup.futminna/trunk/src/waeup/futminna/students/utils.py	(revision 8981)
@@ -97,4 +97,9 @@
                 p_session, p_level = self.getReturningData(student)
                 amount = getattr(certificate, 'school_fee_2', 0.0)
+                try:
+                    academic_session = grok.getSite()[
+                        'configuration'][str(p_session)]
+                except KeyError:
+                    return _(u'Session configuration object is not available.'), None
             elif student.is_postgrad and student.state == PAID:
                 # Returning postgraduate students also pay for the next session
@@ -102,4 +107,9 @@
                 p_session += 1
                 amount = getattr(certificate, 'school_fee_2', 0.0)
+                try:
+                    academic_session = grok.getSite()[
+                        'configuration'][str(p_session)]
+                except KeyError:
+                    return _(u'Session configuration object is not available.'), None
         if amount in (0.0, None):
             return _(u'Amount could not be determined.'), None
