Index: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscodes.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscodes.py	(revision 6424)
+++ main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/accesscodes.py	(revision 6425)
@@ -81,4 +81,5 @@
         self.num = num
         self.invalidated_num = 0
+        self.used_num = 0
         self.disabled_num = 0
 
@@ -134,27 +135,27 @@
         return
 
-    def invalidate(self, ac_id, student_id=None):
-        """Invalidate the AC with ID ``ac_id``.
-        """
-        self.invalidated_num += 1
-
-    def disable(self, ac_id, user_id=None):
-        """Disable the AC with ID ``ac_id``.
-
-        ``user_id`` is the user ID of the user triggering the
-        process. Already disabled ACs are left untouched.
-        """
-        num = self._acids[ac_id]
-        ac = self.getAccessCode(ac_id)
-        if ac._disabled == True:
-            return
-        self.disabled_num += 1
-
-    def enable(self, ac_id):
-        """(Re-)enable the AC with ID ``ac_id``.
-
-        This leaves the given AC in state ``unused``. Already enabled
-        ACs are left untouched.
-        """
+    #def invalidate(self, ac_id, student_id=None):
+    #    """Invalidate the AC with ID ``ac_id``.
+    #    """
+    #    self.invalidated_num += 1
+
+    #def disable(self, ac_id, user_id=None):
+    #    """Disable the AC with ID ``ac_id``.
+    #
+    #    ``user_id`` is the user ID of the user triggering the
+    #    process. Already disabled ACs are left untouched.
+    #    """
+    #    num = self._acids[ac_id]
+    #    ac = self.getAccessCode(ac_id)
+    #    if ac._disabled == True:
+    #        return
+    #    self.disabled_num += 1
+
+    #def enable(self, ac_id):
+    #    """(Re-)enable the AC with ID ``ac_id``.
+    #
+    #    This leaves the given AC in state ``unused``. Already enabled
+    #    ACs are left untouched.
+    #    """
 
     def createCSVLogFile(self):
Index: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/browser.txt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/browser.txt	(revision 6424)
+++ main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/browser.txt	(revision 6425)
@@ -140,9 +140,4 @@
     >>> browser.getControl('Create batch').click()
 
-We also invalidate one entry:
-
-    >>> batch = getRootFolder()['myuniversity']['accesscodes']['BLA-1']
-    >>> ac = list(batch.entries())[0]
-    >>> batch.invalidate(ac.representation)
 
 Creating Archive Files
Index: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/interfaces.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/interfaces.py	(revision 6424)
+++ main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/interfaces.py	(revision 6425)
@@ -67,4 +67,14 @@
         default = 0.0, min = 0.0,
         )
+    disabled_num = schema.Int(
+        title = u'Number of disabled access codes inside the batch',
+        default = 0,
+        readonly = True,
+        )
+    used_num = schema.Int(
+        title = u'Number of used access codes inside the batch',
+        default = 0,
+        readonly = True,
+        )
 
 class IAccessCodeBatchContainer(IWAeUPObject):
Index: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/workflow.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/workflow.py	(revision 6424)
+++ main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/workflow.py	(revision 6425)
@@ -39,14 +39,19 @@
     if batch is None:
         return
-    pin = context.representation
-    batch.invalidate(pin)
+    batch.used_num += 1
     return
 
-def disable_action(wf, context):
-    #batch = getattr(context, '__parent__', None)
-    #if batch is None:
-    #    return
-    #pin = context.representation
-    #batch.disable(pin)
+def disable_used_action(wf, context):
+    batch = getattr(context, '__parent__', None)
+    if batch is None:
+        return
+    batch.used_num -= 1
+    batch.disabled_num += 1
+
+def disable_unused_action(wf, context):
+    batch = getattr(context, '__parent__', None)
+    if batch is None:
+        return
+    batch.disabled_num += 1
     return
 
@@ -55,6 +60,5 @@
     if batch is None:
         return
-    pin = context.representation
-    batch.enable(pin)
+    batch.disabled_num -= 1
     return
 
@@ -79,5 +83,5 @@
         source = INITIALIZED,
         destination = DISABLED,
-        action = disable_action),
+        action = disable_unused_action),
 
     Transition(
@@ -86,5 +90,5 @@
         source = USED,
         destination = DISABLED,
-        action = disable_action),
+        action = disable_used_action),
 
     Transition(
