Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/etranzact/browser.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/etranzact/browser.py	(revision 16221)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/etranzact/browser.py	(revision 16222)
@@ -160,5 +160,6 @@
         # and add the gateway amount.
         provider_amt = 0.0
-        if self.context.p_category == 'registration':
+        if self.context.p_category == 'registration' or \
+            self.context.p_category == 'required_combi':
             provider_amt = 5000.0
         if not self.context.r_company:
@@ -222,5 +223,6 @@
         # and add the gateway amount.
         provider_amt = 0.0
-        if self.context.p_category == 'registration':
+        if self.context.p_category == 'registration'or \
+            self.context.p_category == 'required_combi':
             provider_amt = 5000.0
         if not self.context.r_company:
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/browser.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/browser.py	(revision 16221)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/browser.py	(revision 16222)
@@ -117,5 +117,6 @@
             xmldict['institution_bank_id'] = '117'
             self.pay_item_id = '102'
-        if self.context.p_category == 'registration':
+        if self.context.p_category == 'registration' or \
+            self.context.p_category == 'required_combi':
             provider_amt = 5000.0
         if self.context.p_category in (
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/tests/test_utils.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/tests/test_utils.py	(revision 16221)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/tests/test_utils.py	(revision 16222)
@@ -52,7 +52,9 @@
         self.assertEqual(error,
             'Registration Fee, Book Deposit, Development Fee, Municipal Fee, '
-            'Parents Consultative Forum (PCF) Fee must be paid before Tution Fee.')
+            'Parents Consultative Forum (PCF) Fee must be paid before Tution Fee. '
+            'Make either single payments or make a \'Required Combi Payment\'.')
+        # A 'Required Combi Payment' is sufficient.
         reg_payment = createObject('waeup.StudentOnlinePayment')
-        reg_payment.p_category = u'registration'
+        reg_payment.p_category = u'required_combi'
         reg_payment.p_id = u'anyid'
         reg_payment.p_state = u'paid'
@@ -60,7 +62,12 @@
         self.student['payments']['anykey'] = reg_payment
         error, payment = utils.setPaymentDetails('schoolfee',self.student)
+        self.assertEqual(error, None)
+        # Let's try with single payments.
+        reg_payment.p_category = u'registration'
+        error, payment = utils.setPaymentDetails('schoolfee',self.student)
         self.assertEqual(error,
             'Book Deposit, Development Fee, Municipal Fee, Parents Consultative '
-            'Forum (PCF) Fee must be paid before Tution Fee.')
+            'Forum (PCF) Fee must be paid before Tution Fee. '
+            'Make either single payments or make a \'Required Combi Payment\'.')
         IWorkflowState(self.student).setState('returning')
         configuration = createObject('waeup.SessionConfiguration')
@@ -71,10 +78,12 @@
         self.assertEqual(error,
             'Registration Fee, Book Deposit, Development Fee, Municipal Fee, '
-            'Parents Consultative Forum (PCF) Fee must be paid before Tution Fee.')
+            'Parents Consultative Forum (PCF) Fee must be paid before Tution Fee. '
+            'Make either single payments or make a \'Required Combi Payment\'.')
         reg_payment.p_session = 2005
         error, payment = utils.setPaymentDetails('schoolfee',self.student)
         self.assertEqual(error,
             'Book Deposit, Development Fee, Municipal Fee, Parents Consultative '
-            'Forum (PCF) Fee must be paid before Tution Fee.')
+            'Forum (PCF) Fee must be paid before Tution Fee. '
+            'Make either single payments or make a \'Required Combi Payment\'.')
         pcf_payment = createObject('waeup.StudentOnlinePayment')
         pcf_payment.p_category = u'parentsconsult'
@@ -85,5 +94,6 @@
         error, payment = utils.setPaymentDetails('schoolfee',self.student)
         self.assertEqual(error,
-            'Book Deposit, Development Fee, Municipal Fee must be paid before Tution Fee.')
+            'Book Deposit, Development Fee, Municipal Fee must be paid before Tution Fee. '
+            'Make either single payments or make a \'Required Combi Payment\'.')
         munic_payment = createObject('waeup.StudentOnlinePayment')
         munic_payment.p_category = u'municipal_fresh'
@@ -94,5 +104,6 @@
         error, payment = utils.setPaymentDetails('schoolfee',self.student)
         self.assertEqual(error,
-            'Book Deposit, Development Fee must be paid before Tution Fee.')
+            'Book Deposit, Development Fee must be paid before Tution Fee. '
+            'Make either single payments or make a \'Required Combi Payment\'.')
         book_payment = createObject('waeup.StudentOnlinePayment')
         book_payment.p_category = u'book'
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/utils.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/utils.py	(revision 16221)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/utils.py	(revision 16222)
@@ -68,12 +68,17 @@
             for category in self.REQUIRED_PAYMENTS.keys():
                 for ticket in student['payments'].values():
+                    if ticket.p_category == 'required_combi' and \
+                        ticket.p_session == session and \
+                        ticket.p_state == 'paid':
+                        cats_missing = None
+                        break
                     if ticket.p_state == 'paid' and \
                         ticket.p_category.startswith(category) and \
                         ticket.p_session == session:
                         del cats_missing[category]
-        if cats_missing:
-            return "%s must be paid before Tution Fee." % ', '.join(
-                cats_missing.values())
-        return
+                if not cats_missing:
+                    return
+        return "%s must be paid before Tution Fee. Make either single payments or make a 'Required Combi Payment'." % ', '.join(
+            cats_missing.values())
 
     def setPaymentDetails(self, category, student,
@@ -194,4 +199,14 @@
                 p_item += u'%s + ' % categories[cat]
             p_item = p_item.strip(' + ')
+        elif category == 'required_combi':
+            rp = deepcopy(self.REQUIRED_PAYMENTS)
+            for cat in rp:
+                fee_name = cat + '_fee'
+                cat_amount = getattr(academic_session, fee_name, 0.0)
+                if not cat_amount:
+                    return _('%s undefined.' % rp[cat]), None
+                amount += cat_amount
+                p_item += u'%s + ' % rp[cat]
+            p_item = p_item.strip(' + ')
         else:
             fee_name = category + '_fee'
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/utils/utils.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/utils/utils.py	(revision 16221)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/utils/utils.py	(revision 16222)
@@ -72,4 +72,5 @@
         'resit9': '9 Make-Up Examination Courses',
         'id_card': 'Student ID Card',
+        'required_combi': 'Required Combi Payment',
         }
 
@@ -119,4 +120,5 @@
         'resit9': '9 Make-Up Examination Courses',
         'id_card': 'Student ID Card',
+        'required_combi': 'Required Combi Payment',
         }
 
@@ -150,11 +152,12 @@
 
     COMBI_PAYMENT_CATEGORIES = {
+        #'registration': 'Registration Fee',
         'grad_clearance': 'Clearance Fee',
         'late_registration': 'Late Registration Fee',
         'science': 'Science Bench Fee',
         'clinical': 'Clinical Fee (Medical Students)',
-        'develop': 'Development Fee',
-        'municipal_fresh': 'Municipal Fee (Fresh Students)',
-        'municipal_returning': 'Municipal Fee (Returning Students)',
+        #'develop': 'Development Fee',
+        #'municipal_fresh': 'Municipal Fee (Fresh Students)',
+        #'municipal_returning': 'Municipal Fee (Returning Students)',
         'alumni': 'Alumni Fee',
         'conv': 'Convocation Fee',
@@ -162,6 +165,6 @@
         'waecneco': 'WAEC and NECO Verification',
         'jambver': 'JAMB Verification',
-        'book': 'Book Deposit',
-        'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
+        #'book': 'Book Deposit',
+        #'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
         'pharmlab': 'Pharmacy Lab Support Fee',
         'lo_ident': 'Letter of Identification Fee',
