source: main/waeup.kofa/trunk/src/waeup/kofa/applicants/workflow.py @ 10956

Last change on this file since 10956 was 10358, checked in by Henrik Bettermann, 11 years ago

For imostate we have to customize the workflow. Applicants do not pay.

  • Property svn:keywords set to Id
File size: 6.2 KB
RevLine 
[7192]1## $Id: workflow.py 10358 2013-06-23 06:03:07Z henrik $
2##
3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
[6295]18"""Workflow for applicants.
19"""
20import grok
[6353]21from hurry.workflow.workflow import Transition, WorkflowState, NullCondition
22from hurry.workflow.interfaces import IWorkflowState, IWorkflowTransitionEvent
[7811]23from waeup.kofa.applicants.interfaces import IApplicantBaseData
[7819]24from waeup.kofa.interfaces import IObjectHistory, IKofaWorkflowInfo, IKofaUtils
[7811]25from waeup.kofa.interfaces import MessageFactory as _
[7819]26from waeup.kofa.workflow import KofaWorkflow, KofaWorkflowInfo
[6295]27
28INITIALIZED = 'initialized'
29STARTED = 'started'
[7250]30PAID = 'paid'
[6295]31SUBMITTED = 'submitted'
32ADMITTED = 'admitted'
33NOT_ADMITTED = 'not admitted'
34CREATED = 'created'
35
[8373]36IMPORTABLE_STATES = (INITIALIZED, STARTED, PAID, SUBMITTED, ADMITTED, NOT_ADMITTED)
[8290]37
[7686]38application_states_dict = {
39    INITIALIZED: _('initialized'),
40    STARTED: _('started'),
41    PAID: _('paid'),
42    SUBMITTED: _('submitted'),
43    ADMITTED: _('admitted'),
44    NOT_ADMITTED: _('not admitted'),
45    CREATED: _('created'),
46    }
47
[6354]48APPLICATION_TRANSITIONS = (
[6353]49    Transition(
[6295]50        transition_id = 'init',
[7687]51        title = _('Initialize application'),
[6295]52        source = None,
53        condition = NullCondition,
[7687]54        msg = _('Application initialized'),
[6353]55        destination = INITIALIZED),
[6295]56
[6353]57    Transition(
[6295]58        transition_id = 'start',
[7687]59        title = _('Start application'),
60        msg = _('Application started'),
[6295]61        source = INITIALIZED,
[6353]62        destination = STARTED),
[6295]63
[6353]64    Transition(
[7250]65        transition_id = 'pay',
[8260]66        title = _('Pay application fee'),
[8434]67        msg = _('Payment made'),
[7250]68        source = STARTED,
69        destination = PAID),
70
71    Transition(
[8434]72        transition_id = 'approve',
73        title = _('Approve payment'),
74        msg = _('Payment approved'),
75        source = STARTED,
76        destination = PAID),
77
78    Transition(
[6295]79        transition_id = 'submit',
[7687]80        title = _('Submit application'),
81        msg = _('Application submitted'),
[7250]82        source = PAID,
[6353]83        destination = SUBMITTED),
[6295]84
[6353]85    Transition(
[6295]86        transition_id = 'admit',
[7687]87        title = _('Admit applicant'),
88        msg = _('Applicant admitted'),
[6295]89        source = SUBMITTED,
[6353]90        destination = ADMITTED),
[6295]91
[6353]92    Transition(
[6300]93        transition_id = 'refuse1',
[7687]94        title = _('Refuse application'),
95        msg = _('Application refused'),
[6295]96        source = SUBMITTED,
[6353]97        destination = NOT_ADMITTED),
[6295]98
[6353]99    Transition(
[6300]100        transition_id = 'refuse2',
[7687]101        title = _('Refuse application'),
102        msg = _('Application refused'),
[6300]103        source = ADMITTED,
[6353]104        destination = NOT_ADMITTED),
[6300]105
[6353]106    Transition(
[6295]107        transition_id = 'create',
[7687]108        title = _('Create student record'),
109        msg = _('Student record created'),
[6295]110        source = ADMITTED,
[6353]111        destination = CREATED),
[6295]112
[6353]113    Transition(
[6300]114        transition_id = 'reset1',
[7687]115        title = _('Reset application to started'),
116        msg = _('Application reset'),
[6300]117        source = SUBMITTED,
[6353]118        destination = STARTED),
[6295]119
[6353]120    Transition(
[6300]121        transition_id = 'reset2',
[7687]122        title = _('Reset application to started'),
123        msg = _('Application reset'),
[6300]124        source = ADMITTED,
[6353]125        destination = STARTED),
[6300]126
[6353]127    Transition(
[6300]128        transition_id = 'reset3',
[7687]129        title = _('Reset application to started'),
130        msg = _('Application reset'),
[6300]131        source = NOT_ADMITTED,
[6353]132        destination = STARTED),
[6300]133
[6353]134    Transition(
[6300]135        transition_id = 'reset4',
[7687]136        title = _('Reset application to started'),
137        msg = _('Application reset'),
[6300]138        source = CREATED,
[6353]139        destination = STARTED),
[10358]140
[7250]141    Transition(
142        transition_id = 'reset5',
[7687]143        title = _('Reset application to paid'),
[8752]144        msg = _('Application reset to paid'),
[7250]145        source = SUBMITTED,
146        destination = PAID),
[10358]147
[8752]148    Transition(
149        transition_id = 'reset6',
150        title = _('Reset application to started'),
151        msg = _('Application reset'),
152        source = PAID,
153        destination = STARTED),
[10358]154
[9120]155    Transition(
156        transition_id = 'reset7',
157        title = _('Reset application to admitted'),
158        msg = _('Application reset to admitted'),
159        source = CREATED,
160        destination = ADMITTED),
[6353]161    )
[6300]162
[7819]163application_workflow = KofaWorkflow(APPLICATION_TRANSITIONS)
[6295]164
[6349]165class ApplicationWorkflowState(WorkflowState, grok.Adapter):
[6295]166    """An adapter to adapt Applicant objects to workflow states.
167    """
168    grok.context(IApplicantBaseData)
169    grok.provides(IWorkflowState)
[6316]170
[6349]171    state_key = 'wf.application.state'
172    state_id = 'wf.application.id'
173
[7819]174class ApplicationWorkflowInfo(KofaWorkflowInfo, grok.Adapter):
[6295]175    """Adapter to adapt Applicant objects to workflow info objects.
176    """
177    grok.context(IApplicantBaseData)
[7819]178    grok.provides(IKofaWorkflowInfo)
[6318]179
[6349]180    def __init__(self, context):
181        self.context = context
182        self.wf = application_workflow
[6318]183
184@grok.subscribe(IApplicantBaseData, IWorkflowTransitionEvent)
185def handle_applicant_transition_event(obj, event):
[6471]186    """Append message to applicant history when transition happened.
[6318]187    """
[7687]188    msg = event.transition.user_data['msg']
[8312]189    if event.transition.transition_id == 'create':
190        msg += ' (%s)' % obj.student_id
[9398]191        obj.locked = True
192    if event.transition.transition_id == 'submit':
193        obj.locked = True
[6339]194    history = IObjectHistory(obj)
195    history.addMessage(msg)
[6644]196    # In some tests we don't have a an applicants root or a user
[8335]197    try:
198        applicants_root = grok.getSite()['applicants']
199        applicants_root.logger.info('%s - %s' % (obj.applicant_id,msg))
200    except (TypeError, AttributeError):
201        pass
[6318]202    return
Note: See TracBrowser for help on using the repository browser.