Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/batchprocessing.txt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/batchprocessing.txt	(revision 9022)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/batchprocessing.txt	(revision 9023)
@@ -619,4 +619,10 @@
     'users_zope.mgr.create.finished.csv', 'users_zope.mgr.csv']
 
+Processed (finished) Files
+==========================
+
+    >>> browser.open('http://localhost/app/datacenter/processed')
+    >>> '<a href="download?filename=finished/certificates_zope.mgr.csv">' in browser.contents
+    True
 
 Log Files
Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 9022)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 9023)
@@ -810,4 +810,15 @@
         return
 
+class DatacenterFinishedPage(KofaEditFormPage):
+    grok.context(IDataCenter)
+    grok.name('processed')
+    grok.require('waeup.manageDataCenter')
+    label = _(u'Processed Files')
+    pnav = 0
+
+    def update(self):
+        datatable.need()
+        return super(DatacenterFinishedPage, self).update()
+
 class DatacenterUploadPage(KofaPage):
     grok.context(IDataCenter)
@@ -898,5 +909,5 @@
 
     def getFiles(self):
-        files = self.context.getFiles(sort='date')
+        files = self.context.getPendingFiles(sort='date')
         for file in files:
             name = file.name
Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterfinishedpage.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterfinishedpage.pt	(revision 9023)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterfinishedpage.pt	(revision 9023)
@@ -0,0 +1,17 @@
+<table i18n:domain="waeup.kofa" class="display dataTable">
+  <thead>
+    <tr>
+      <th i18n:translate="">File</th>
+      <th i18n:translate="">Size</th>
+      <th i18n:translate="">Upload Date</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr tal:repeat="file context/getFinishedFiles" class="gradeC">
+      <td><a tal:attributes="href python: 'download?filename=' + file.rel_path"
+             tal:content="file/name">FILENAME</a></td>
+      <td tal:content="file/size">12 k</td>
+      <td tal:content="file/uploaddate">Mar 12, 2008</td>
+    </tr>
+  </tbody>
+</table>
Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterpage.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterpage.pt	(revision 9022)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterpage.pt	(revision 9023)
@@ -21,5 +21,5 @@
       </thead>
       <tbody>
-        <tr tal:repeat="file context/getFiles" class="gradeC">
+        <tr tal:repeat="file context/getPendingFiles" class="gradeC">
           <td>
             <input type="checkbox" name="val_id"
Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 9022)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 9023)
@@ -386,4 +386,5 @@
     grok.require('waeup.manageDataCenter')
     text = _('Edit settings')
+    grok.order(1)
 
 class ManageFacultiesContainerActionButton(ManageActionButton):
@@ -458,8 +459,4 @@
     text = _('Edit certificate course')
 
-#
-# Add actions...
-#
-
 class AddUserActionButton(AddActionButton):
     grok.require('waeup.manageUsers')
@@ -468,54 +465,48 @@
     text = _('Add user')
 
-#
-# Actions with a 'browse' icon...
-#
-class BrowseActionButton(ActionButton):
-    grok.baseclass()
-    grok.context(IKofaObject)
-    grok.template('actionbutton')
-    grok.viewletmanager(ActionBar)
+class BrowseDatacenterLogs(ActionButton):
+    grok.context(IDataCenter)
     grok.require('waeup.manageDataCenter')
-    icon = 'actionicon_manage.png' # File must exist in static/
-    target = '@@show' # link to this viewname.
-    text = _('Show logs') # Text to display on the button
-
-class BrowseDatacenterLogs(BrowseActionButton):
-    grok.context(IDataCenter)
     grok.view(DatacenterPage)
-    grok.order(4)
+    grok.order(2)
     icon = 'actionicon_info.png'
     target = '@@logs'
     text = _('Show logs')
 
-#
-# Misc. buttons...
-#
+class UploadCSVButton(ActionButton):
+    grok.context(IDataCenter)
+    grok.view(DatacenterPage)
+    grok.require('waeup.manageDataCenter')
+    grok.order(3)
+    icon = 'actionicon_up.png'
+    target = '@@upload'
+    text = _('Upload CSV file')
+
 class BatchOpButton(ActionButton):
     grok.context(IDataCenter)
     grok.view(DatacenterPage)
     grok.require('waeup.importData')
-    grok.order(6)
+    grok.order(4)
     icon = 'actionicon_gear.png'
     target = '@@import1'
     text = _('Batch processing')
 
-class UploadCSVButton(ActionButton):
+class ExportCSVButton(ActionButton):
     grok.context(IDataCenter)
     grok.view(DatacenterPage)
     grok.require('waeup.manageDataCenter')
     grok.order(5)
-    icon = 'actionicon_up.png'
-    target = '@@upload'
-    text = _('Upload CSV file')
-
-class ExportCSVButton(ActionButton):
-    grok.context(IDataCenter)
-    grok.view(DatacenterPage)
-    grok.require('waeup.manageDataCenter')
-    grok.order(7)
     icon = 'actionicon_down.png'
     target = '@@export'
     text = _('Export CSV file')
+
+class BrowseFinishedFiles(ActionButton):
+    grok.context(IDataCenter)
+    grok.require('waeup.manageDataCenter')
+    grok.view(DatacenterPage)
+    grok.order(6)
+    icon = 'actionicon_finished.png'
+    target = '@@processed'
+    text = _('Processed Files')
 
 #
Index: /main/waeup.kofa/trunk/src/waeup/kofa/datacenter.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/datacenter.py	(revision 9022)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/datacenter.py	(revision 9023)
@@ -66,5 +66,5 @@
         return os.path.join(self.storage, 'deleted')
 
-    def getFiles(self, sort='name'):
+    def getPendingFiles(self, sort='name'):
         """Get a list of files stored in `storage`.
 
@@ -81,4 +81,26 @@
                 continue
             result.append(DataCenterFile(fullpath))
+        if sort == 'date':
+            # sort results in newest-first order...
+            result = sorted(result, key=lambda x: x.getTimeStamp(),
+                            reverse=True)
+        return result
+
+    def getFinishedFiles(self, sort='name'):
+        """Get a list of files stored in `finished` subfolder of `storage`.
+
+        Files are sorted by basename.
+        """
+        result = []
+        finished_dir = os.path.join(self.storage, 'finished')
+        if not os.path.exists(finished_dir):
+            return result
+        for filename in sorted(os.listdir(finished_dir)):
+            fullpath = os.path.join(finished_dir, filename)
+            if not os.path.isfile(fullpath):
+                continue
+            if not filename.endswith('.csv'):
+                continue
+            result.append(DataCenterFile(fullpath, 'finished'))
         if sort == 'date':
             # sort results in newest-first order...
@@ -300,7 +322,8 @@
     grok.implements(IDataCenterFile)
 
-    def __init__(self, context):
+    def __init__(self, context, folder_name=''):
         self.context = context
         self.name = os.path.basename(self.context)
+        self.rel_path = os.path.join(folder_name, self.name)
         self.size = self.getSize()
         self.uploaddate = self.getDate()
Index: /main/waeup.kofa/trunk/src/waeup/kofa/datacenter.txt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/datacenter.txt	(revision 9022)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/datacenter.txt	(revision 9023)
@@ -83,5 +83,5 @@
 We can get a list of files stored in that location:
 
-    >>> mydatacenter.getFiles()
+    >>> mydatacenter.getPendingFiles()
     []
 
@@ -94,5 +94,5 @@
 Now we can find a file:
 
-    >>> mydatacenter.getFiles()
+    >>> mydatacenter.getPendingFiles()
     [<waeup.kofa.datacenter.DataCenterFile object at 0x...>]
 
@@ -102,5 +102,5 @@
 pages:
 
-    >>> datafile = mydatacenter.getFiles()[0]
+    >>> datafile = mydatacenter.getPendingFiles()[0]
     >>> datafile.getSize()
     '13 bytes'
@@ -272,4 +272,18 @@
 finished-subdirectory remain.
 
+
+We can get a list of imported files stored in the finished subfolder:
+
+    >>> mydatacenter.getFinishedFiles()
+    [<waeup.kofa.datacenter.DataCenterFile object at ...>, <waeup.kofa.datacenter.DataCenterFile object at ...>]
+
+    >>> datafile = mydatacenter.getFinishedFiles()[0]
+    >>> datafile.getSize()
+    '2 bytes'
+
+    >>> datafile.getDate() # Nearly current datetime...
+    '...'
+
+
 Clean up:
 
Index: /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 9022)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 9023)
@@ -641,7 +641,13 @@
         )
 
-    def getFiles(sort='name'):
+    def getPendingFiles(sort='name'):
         """Get a list of files stored in `storage` sorted by basename.
         """
+
+    def getFinishedFiles(sort='name'):
+        """Get a list of files stored in `finished` subfolder of `storage`
+        sorted by basename.
+        """
+
     def setStoragePath(path, move=False, overwrite=False):
         """Set the path where to store files.
