Index: main/waeup.kofa/trunk/CHANGES.txt
===================================================================
--- main/waeup.kofa/trunk/CHANGES.txt	(revision 11450)
+++ main/waeup.kofa/trunk/CHANGES.txt	(revision 11451)
@@ -4,4 +4,6 @@
 1.0.1dev (unreleased)
 =====================
+
+* Provide customizable method for disabling student payments.
 
 * After login and logout regular users (officers) are redirected
Index: main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 11450)
+++ main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 11451)
@@ -143,4 +143,10 @@
         return dict(getUtility(IKofaUtils).EXAM_GRADES)[value]
 
+class DisablePaymentGroupSource(ContextualDictSourceFactoryBase):
+    """A source for filtering groups of students
+    """
+    #: name of dict to deliver from kofa utils.
+    DICT_NAME = 'DISABLE_PAYMENT_GROUP_DICT'
+
 # Define a validation method for email addresses
 class NotAnEmailAddress(schema.ValidationError):
@@ -709,4 +715,13 @@
         )
 
+    payment_disabled = schema.List(
+        title = _(u'Payment disabled'),
+        value_type = schema.Choice(
+            source = DisablePaymentGroupSource(),
+            ),
+        required = False,
+        default = [],
+        )
+
     def getSessionString():
         """Returns the session string from the vocabulary.
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 11450)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 11451)
@@ -1028,4 +1028,21 @@
         self.assertEqual(ac.owner, self.student_id)
         self.assertEqual(ac.cost, 4567.0)
+        return
+
+    def test_payment_disabled(self):
+        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+        self.browser.open(self.payments_path)
+        IWorkflowState(self.student).setState('cleared')
+        self.browser.getLink("Add current session payment ticket").click()
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
+        self.browser.getControl("Create ticket").click()
+        self.assertMatches('...ticket created...',
+                           self.browser.contents)
+        self.app['configuration']['2004'].payment_disabled = ['sf_all']
+        self.browser.getLink("Add current session payment ticket").click()
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
+        self.browser.getControl("Create ticket").click()
+        self.assertMatches('...Payment temporarily disabled...',
+                           self.browser.contents)
         return
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 11450)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py	(revision 11451)
@@ -335,4 +335,10 @@
         except KeyError:
             return None
+
+    def _isPaymentDisabled(self, p_session, category, student):
+        academic_session = self._getSessionConfiguration(p_session)
+        if 'sf_all' in academic_session.payment_disabled:
+            return True
+        return False
 
     def setPaymentDetails(self, category, student,
@@ -442,4 +448,6 @@
                ticket.p_session == p_session:
                   return _('This type of payment has already been made.'), None
+        if self._isPaymentDisabled(p_session, category, student):
+            return _('Payment temporarily disabled.'), None
         payment = createObject(u'waeup.StudentOnlinePayment')
         timestamp = ("%d" % int(time()*10000))[1:]
Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/utils.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/utils.py	(revision 11450)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/utils.py	(revision 11451)
@@ -132,4 +132,8 @@
         }
 
+    DISABLE_PAYMENT_GROUP_DICT = {
+        'sf_all': 'School Fee - All Students',
+        }
+
     APP_CATS_DICT = {
         'basic': 'Basic Application',
