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

Last change on this file since 8486 was 8434, checked in by Henrik Bettermann, 13 years ago

Managers do not 'pay' fees for applicants and students, they approve payments made.

Add respective transitions.

  • Property svn:keywords set to Id
File size: 5.7 KB
RevLine 
[7192]1## $Id: workflow.py 8434 2012-05-12 16:27:14Z 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),
[7250]140    Transition(
141        transition_id = 'reset5',
[7687]142        title = _('Reset application to paid'),
143        msg = _('Application reset'),
[7250]144        source = SUBMITTED,
145        destination = PAID),
[6353]146    )
[6300]147
[7819]148application_workflow = KofaWorkflow(APPLICATION_TRANSITIONS)
[6295]149
[6349]150class ApplicationWorkflowState(WorkflowState, grok.Adapter):
[6295]151    """An adapter to adapt Applicant objects to workflow states.
152    """
153    grok.context(IApplicantBaseData)
154    grok.provides(IWorkflowState)
[6316]155
[6349]156    state_key = 'wf.application.state'
157    state_id = 'wf.application.id'
158
[7819]159class ApplicationWorkflowInfo(KofaWorkflowInfo, grok.Adapter):
[6295]160    """Adapter to adapt Applicant objects to workflow info objects.
161    """
162    grok.context(IApplicantBaseData)
[7819]163    grok.provides(IKofaWorkflowInfo)
[6318]164
[6349]165    def __init__(self, context):
166        self.context = context
167        self.wf = application_workflow
[6318]168
169@grok.subscribe(IApplicantBaseData, IWorkflowTransitionEvent)
170def handle_applicant_transition_event(obj, event):
[6471]171    """Append message to applicant history when transition happened.
[6318]172    """
[7687]173    msg = event.transition.user_data['msg']
[8312]174    if event.transition.transition_id == 'create':
175        msg += ' (%s)' % obj.student_id
[6339]176    history = IObjectHistory(obj)
177    history.addMessage(msg)
[6644]178    # In some tests we don't have a an applicants root or a user
[8335]179    try:
180        applicants_root = grok.getSite()['applicants']
181        applicants_root.logger.info('%s - %s' % (obj.applicant_id,msg))
182    except (TypeError, AttributeError):
183        pass
[6318]184    return
Note: See TracBrowser for help on using the repository browser.