Index: /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/export.rst
===================================================================
--- /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/export.rst	(revision 12882)
+++ /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/export.rst	(revision 12883)
@@ -24,8 +24,8 @@
 .. note::
 
-The list of exported columns usually underlies heavy customizations.
-In the Kofa base package only very few columns are being exported. In
-some Kofa custom packages tons of data are being gathered from
-applicants and students and the number of columns increase accordingly.
+  The list of exported columns usually underlies heavy customizations.
+  In the Kofa base package only very few columns are being exported. In
+  some Kofa custom packages tons of data are being gathered from
+  applicants and students and the number of columns increase accordingly.
 
 The `title` attribute unveils the name of the exporter under which
@@ -173,5 +173,5 @@
 Student Data Exporter can be further configured through a
 configuration page. Search parameters like the student's current level,
- current session and current study mode can be set to filter sets of
+current session and current study mode can be set to filter sets of
 students in order to decrease the size of the export file. The set of
 filter parameters varies and depends on the 'locatation' from where
Index: /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/import_processors.rst
===================================================================
--- /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/import_processors.rst	(revision 12882)
+++ /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/import_processors.rst	(revision 12883)
@@ -4,7 +4,23 @@
 ****************
 
-All batch processors inherit from the :py:class:`waeup.kofa.utils.batching.BatchProcessor` base class. The `doImport` method, described above, always remains unchanged. All processors have a property `available_fields` which defines the set of importable data. They correspond with the column titles of the import file. Available fields are usually composed of location fields, interface fields and additional fields. Overlaps are possible. Location fields define the minumum set of fields which are necessary to locate an existing object in order to update or remove it. Interface fields (schema fields) are the fields defined in the interface of the data entity. Additional fields are additionally needed for data processing. We further distinguish between required and optional fields or between schema and non-schema fields.
+All batch processors inherit from the
+:py:class:`waeup.kofa.utils.batching.BatchProcessor` base class. The
+`doImport` method, described above, always remains unchanged. All
+processors have a property `available_fields` which defines the set
+of importable data. They correspond with the column titles of the
+import file. Available fields are usually composed of location fields,
+ interface fields and additional fields. Overlaps are possible.
+Location fields define the minumum set of fields which are necessary
+to locate an existing object in order to update or remove it.
+Interface fields (schema fields) are the fields defined in the
+interface of the data entity. Additional fields are additionally
+needed for data processing. We further distinguish between required
+and optional fields or between schema and non-schema fields.
 
-In the following we list all available processors of the Kofa base package including some important methods which describe them best. We do not list available fields of each processor here. Available fields are shown in the browser user interface on the upload page of the portal.
+In the following we list all available processors of the Kofa base
+package including some important methods which describe them best. We
+do not list available fields of each processor here. Available fields
+are shown in the browser user interface on the upload page of the
+portal.
 
 Regular Processors
@@ -41,9 +57,26 @@
   :noindex:
 
-
 Certificate Course Processor
 ----------------------------
 
 .. autoclass:: waeup.kofa.university.batching.CertificateCourseProcessor()
+  :noindex:
+
+Access Code Batch Processor
+---------------------------
+
+.. autoclass:: waeup.kofa.accesscodes.batching.AccessCodeBatchProcessor()
+  :noindex:
+
+Access Code Processor
+---------------------
+
+.. autoclass:: waeup.kofa.accesscodes.batching.AccessCodeProcessor()
+  :noindex:
+
+Hostel Processor
+----------------
+
+.. autoclass:: waeup.kofa.hostels.batching.HostelProcessor()
   :noindex:
 
@@ -86,5 +119,13 @@
 .. note::
 
-  The student data processors described so far are mainly intended for restoring data. If the portal is operated correctly and without interruption and students follow the workflow from their first to the final study year, there is no need to use the above batch processors to maintain the data. The processors are not part of the student registration management. The following processors can or sometimes even must be integrated into the regular management of student data. Scores have to be imported, new payment tickets have to created, the verdicts have to be set or workflow transitions have to be triggered.
+  The student data processors described so far are mainly intended for
+  restoring data. If the portal is operated correctly and without
+  interruption and students follow the workflow from their first to the
+  final study year, there is no need to use the above batch processors
+  to maintain the data. The processors are not part of the student
+  registration management. The following processors can or sometimes
+  even must be integrated into the regular management of student data.
+  Scores have to be imported, new payment tickets have to created, the
+  verdicts have to be set or workflow transitions have to be triggered.
 
 Course Ticket Processor
Index: /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/import_stages.rst
===================================================================
--- /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/import_stages.rst	(revision 12882)
+++ /main/waeup.kofa/trunk/docs/source/userdocs/datacenter/import_stages.rst	(revision 12883)
@@ -77,4 +77,11 @@
 the next step (**import step 4**).
 
+.. important::
+
+  Data center managers, who are only charged with uploading files but
+  not with the import of files, are requested to proceed up to import step 3
+  and verify that the data format meets all the import criteria and
+  requirements of the batch processor.
+
 Stage 3: Data Validation and Import
 ===================================
Index: /main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/batching.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/batching.py	(revision 12882)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/accesscodes/batching.py	(revision 12883)
@@ -34,5 +34,7 @@
 
 class AccessCodeBatchProcessor(BatchProcessor):
-    """A batch processor for IAccessCodeBatch objects.
+    """The Access Code Batch Processor imports containers for access codes.
+    It does not import their content. There is nothing special about this
+    processor.
     """
     grok.implements(IBatchProcessor)
@@ -85,5 +87,12 @@
 
 class AccessCodeProcessor(BatchProcessor):
-    """A batch processor for IAccessCode objects.
+    """The Access Code Processor imports access codes (ac) into their
+    batches. Localization requires the `representation` of the ac
+    (object id) as well as  `batch_prefix` and `batch_num` to find
+    the parent container (the batch).
+
+    Access codes follow a workflow. The `checkConversion` method validates
+    the workflow `state` and `transition` in row. `checkUpdateRequirements`
+    checks if the transition is allowed. This depends on the context.
     """
     grok.implements(IBatchProcessor)
@@ -136,6 +145,4 @@
     def addEntry(self, obj, row, site):
         parent = self.getParent(row, site)
-        obj.batch_serial = row['batch_serial']
-        obj.random_num = row['random_num']
         parent[row['representation']] = obj
         return
Index: /main/waeup.kofa/trunk/src/waeup/kofa/hostels/batching.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/hostels/batching.py	(revision 12882)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/hostels/batching.py	(revision 12883)
@@ -27,5 +27,7 @@
 
 class HostelProcessor(BatchProcessor):
-    """A batch processor for IHostel objects.
+    """The Hostel Procesor imports hostels, i.e. the container objects of
+    beds. It does not import beds. There is nothing special about this
+    processor.
     """
     grok.implements(IBatchProcessor)
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 12882)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/batching.py	(revision 12883)
@@ -296,4 +296,10 @@
         errs, inv_errs, conv_dict =  converter.fromStringDict(
             row, self.factory_name, mode=mode)
+        # We cannot import both state and transition.
+        if 'transition' in row and 'state' in row:
+            if row['transition'] not in (IGNORE_MARKER, '') and \
+                row['state'] not in (IGNORE_MARKER, ''):
+                errs.append(('workflow','not allowed'))
+                return errs, inv_errs, conv_dict
         if 'transition' in row:
             if row['transition'] not in IMPORTABLE_TRANSITIONS:
