Index: main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser.py
===================================================================
--- main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser.py	(revision 10794)
+++ main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser.py	(revision 10800)
@@ -19,15 +19,19 @@
 """
 import grok
+from hurry.workflow.interfaces import IWorkflowState
 from zope.formlib.textwidgets import BytesDisplayWidget
 from waeup.kofa.applicants.browser import (
     ApplicantRegistrationPage, ApplicantsContainerPage)
+from waeup.kofa.applicants.pdf import PDFApplicationSlip
 from kofacustom.ekodisco.applicants.interfaces import (
     ICustomApplicant, ICustomApplicantEdit)
 from kofacustom.nigeria.applicants.browser import (
     NigeriaApplicantDisplayFormPage,
-    NigeriaPDFApplicationSlip,
     ApplicantDisplayFormPage,
     ApplicantManageFormPage,
     ApplicantEditFormPage)
+
+
+from kofacustom.ekodisco.applicants.workflow import STARTED
 
 from kofacustom.ekodisco.interfaces import MessageFactory as _
@@ -65,2 +69,16 @@
     form_fields['applicant_id'].for_display = True
     form_fields['reg_number'].for_display = True
+
+    submit_state = STARTED
+
+    @property
+    def display_actions(self):
+        state = IWorkflowState(self.context).getState()
+        actions = [[],[]]
+        if state == STARTED:
+            actions = [[_('Save'), _('Final Submit')], []]
+        return actions
+
+class CustomPDFApplicationSlip(PDFApplicationSlip):
+    """Bypass NigeriaPDFApplicationSlip
+    """
Index: main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser_templates/applicantdisplaypage.pt
===================================================================
--- main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser_templates/applicantdisplaypage.pt	(revision 10794)
+++ main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser_templates/applicantdisplaypage.pt	(revision 10800)
@@ -38,28 +38,2 @@
   </tbody>
 </table>
-<h3  i18n:domain="waeup.kofa" i18n:translate="">
-    Payment Tickets
-</h3>
-<table i18n:domain="waeup.kofa">
-  <thead>
-    <tr>
-      <th i18n:translate="">Payment Id</th>
-      <th i18n:translate="">Creation Date</th>
-      <th i18n:translate="">Payment Date</th>
-      <th i18n:translate="">Category</th>
-      <th i18n:translate="">Item</th>
-      <th i18n:translate="">State</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr tal:repeat="value context/values">
-      <td> <a tal:attributes="href value/__name__">
-      <span tal:content="value/p_id">PID</span></a></td>
-      <td tal:content="python: layout.formatDatetime(value.creation_date)">CREATION DATE</td>
-      <td tal:content="python: layout.formatDatetime(value.payment_date)">PAYMENT DATE</td>
-      <td tal:content ="value/category">CATEGORY</td>
-      <td tal:content ="value/display_item">ITEM</td>
-      <td tal:content ="value/p_state_title">STATE</td>
-    </tr>
-  </tbody>
-</table>
Index: main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser_templates/applicanteditpage.pt
===================================================================
--- main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser_templates/applicanteditpage.pt	(revision 10794)
+++ main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/browser_templates/applicanteditpage.pt	(revision 10800)
@@ -78,47 +78,3 @@
     </span>
   </div>
-
-  <br /><br />
-  <h3 i18n:translate="">
-      Payment Tickets
-  </h3>
-
-  <table>
-    <thead>
-    <tr>
-      <th>&nbsp;</th>
-      <th i18n:translate="">Payment Id</th>
-      <th i18n:translate="">Creation Date</th>
-      <th i18n:translate="">Payment Date</th>
-      <th i18n:translate="">Category</th>
-      <th i18n:translate="">Item</th>
-      <th i18n:translate="">State</th>
-    </tr>
-    </thead>
-    <tbody>
-      <tr tal:repeat="cl context/values">
-         <td>
-          <input type="checkbox"
-    		 name="val_id"
-    		 tal:attributes="value cl/__name__"
-         tal:condition="python: not view.unremovable(cl)" />
-        </td>
-        <td> <a tal:attributes="href cl/__name__">
-        <span tal:content="cl/p_id">PID</span></a></td>
-        <td tal:content="python: layout.formatDatetime(cl.creation_date)">CREATION DATE</td>
-        <td tal:content="python: layout.formatDatetime(cl.payment_date)">PAYMENT DATE</td>
-      <td tal:content ="cl/category">CATEGORY</td>
-      <td tal:content ="cl/display_item">ITEM</td>
-      <td tal:content ="cl/p_state_title">STATE</td>
-      </tr>
-    </tbody>
-  </table>
-
-  <div tal:condition="view/availableActions">
-    <span tal:repeat="action view/actions"
-          tal:omit-tag="">
-      <input tal:condition="python:action.label in view.display_actions[1]"
-             tal:replace="structure action/render"/>
-    </span>
-  </div>
 </form>
Index: main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/workflow.py
===================================================================
--- main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/workflow.py	(revision 10800)
+++ main/kofacustom.ekodisco/trunk/src/kofacustom/ekodisco/applicants/workflow.py	(revision 10800)
@@ -0,0 +1,125 @@
+## $Id$
+##
+## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+"""Customized workflow for applicants.
+"""
+import grok
+from hurry.workflow.workflow import Transition, WorkflowState, NullCondition
+from hurry.workflow.interfaces import IWorkflowState, IWorkflowTransitionEvent
+from waeup.kofa.applicants.interfaces import IApplicantBaseData
+from waeup.kofa.interfaces import IObjectHistory, IKofaWorkflowInfo, IKofaUtils
+from waeup.kofa.interfaces import MessageFactory as _
+from waeup.kofa.workflow import KofaWorkflow, KofaWorkflowInfo
+from waeup.kofa.applicants.workflow import ( ApplicationWorkflowInfo,
+    INITIALIZED, STARTED, SUBMITTED, ADMITTED, NOT_ADMITTED, CREATED)
+
+APPLICATION_TRANSITIONS = (
+    Transition(
+        transition_id = 'init',
+        title = _('Initialize application'),
+        source = None,
+        condition = NullCondition,
+        msg = _('Application initialized'),
+        destination = INITIALIZED),
+
+    Transition(
+        transition_id = 'start',
+        title = _('Start application'),
+        msg = _('Application started'),
+        source = INITIALIZED,
+        destination = STARTED),
+
+    Transition(
+        transition_id = 'submit',
+        title = _('Submit application'),
+        msg = _('Application submitted'),
+        source = STARTED,
+        destination = SUBMITTED),
+
+    Transition(
+        transition_id = 'admit',
+        title = _('Admit applicant'),
+        msg = _('Applicant admitted'),
+        source = SUBMITTED,
+        destination = ADMITTED),
+
+    Transition(
+        transition_id = 'refuse1',
+        title = _('Refuse application'),
+        msg = _('Application refused'),
+        source = SUBMITTED,
+        destination = NOT_ADMITTED),
+
+    Transition(
+        transition_id = 'refuse2',
+        title = _('Refuse application'),
+        msg = _('Application refused'),
+        source = ADMITTED,
+        destination = NOT_ADMITTED),
+
+    Transition(
+        transition_id = 'create',
+        title = _('Create student record'),
+        msg = _('Student record created'),
+        source = ADMITTED,
+        destination = CREATED),
+
+    Transition(
+        transition_id = 'reset1',
+        title = _('Reset application to started'),
+        msg = _('Application reset'),
+        source = SUBMITTED,
+        destination = STARTED),
+
+    Transition(
+        transition_id = 'reset2',
+        title = _('Reset application to started'),
+        msg = _('Application reset'),
+        source = ADMITTED,
+        destination = STARTED),
+
+    Transition(
+        transition_id = 'reset3',
+        title = _('Reset application to started'),
+        msg = _('Application reset'),
+        source = NOT_ADMITTED,
+        destination = STARTED),
+
+    Transition(
+        transition_id = 'reset4',
+        title = _('Reset application to started'),
+        msg = _('Application reset'),
+        source = CREATED,
+        destination = STARTED),
+
+    Transition(
+        transition_id = 'reset7',
+        title = _('Reset application to admitted'),
+        msg = _('Application reset to admitted'),
+        source = CREATED,
+        destination = ADMITTED),
+    )
+
+application_workflow = KofaWorkflow(APPLICATION_TRANSITIONS)
+
+class CustomApplicationWorkflowInfo(ApplicationWorkflowInfo):
+    """Adapter to adapt Applicant objects to workflow info objects.
+    """
+
+    def __init__(self, context):
+        self.context = context
+        self.wf = application_workflow
