source: main/waeup.sirp/trunk/src/waeup/sirp/students/workflow.py @ 7617

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

Convert function set_returning_data into utility method. This method is for demonstration purposes only. It has to be customized.

  • Property svn:keywords set to Id
File size: 6.2 KB
Line 
1"""Workflow for students.
2"""
3import grok
4from zope.component import getUtility
5from hurry.workflow.workflow import Transition, WorkflowState, NullCondition
6from hurry.workflow.interfaces import IWorkflowState, IWorkflowTransitionEvent
7from waeup.sirp.interfaces import (
8    IObjectHistory, ISIRPWorkflowInfo,
9    CREATED, ADMITTED, CLEARANCE, REQUESTED, CLEARED, PAID, RETURNING,
10    REGISTERED, VALIDATED)
11from waeup.sirp.workflow import SIRPWorkflow, SIRPWorkflowInfo
12from waeup.sirp.utils.helpers import get_current_principal
13from waeup.sirp.students.interfaces import IStudent, IStudentsUtils
14
15
16IMPORTABLE_STATES = (ADMITTED, CLEARANCE, REQUESTED, CLEARED, PAID, RETURNING,
17    REGISTERED, VALIDATED)
18
19REGISTRATION_TRANSITIONS = (
20    Transition(
21        transition_id = 'create',
22        title = 'Create student',
23        source = None,
24        condition = NullCondition,
25        msg = 'Student record created',
26        destination = CREATED),
27
28    Transition(
29        transition_id = 'admit',
30        title = 'Admit student',
31        msg = 'Student admitted',
32        source = CREATED,
33        destination = ADMITTED),
34
35    Transition(
36        transition_id = 'reset1',
37        title = 'Reset student',
38        msg = 'Student record reset',
39        source = ADMITTED,
40        destination = CREATED),
41
42    Transition(
43        transition_id = 'start_clearance',
44        title = 'Start clearance',
45        msg = 'Clearance started',
46        source = ADMITTED,
47        destination = CLEARANCE),
48
49    Transition(
50        transition_id = 'reset2',
51        title = 'Reset to admitted',
52        msg = "Student record reset to 'admitted'",
53        source = CLEARANCE,
54        destination = ADMITTED),
55
56    Transition(
57        transition_id = 'request_clearance',
58        title = 'Request clearance',
59        msg = 'Clearance requested',
60        source = CLEARANCE,
61        destination = REQUESTED),
62
63    Transition(
64        transition_id = 'reset3',
65        title = 'Reset to clearance',
66        msg = "Student record reset to 'clearance'",
67        source = REQUESTED,
68        destination = CLEARANCE),
69
70    Transition(
71        transition_id = 'clear',
72        title = 'Clear student',
73        msg = 'Cleared',
74        source = REQUESTED,
75        destination = CLEARED),
76
77    Transition(
78        transition_id = 'reset4',
79        title = 'Reset to clearance',
80        msg = "Student record reset to 'clearance'",
81        source = CLEARED,
82        destination = CLEARANCE),
83
84    Transition(
85        transition_id = 'pay_first_school_fee',
86        title = 'Pay school fee',
87        msg = 'School fee paid',
88        source = CLEARED,
89        destination = PAID),
90
91    Transition(
92        transition_id = 'reset5',
93        title = 'Reset to cleared',
94        msg = "Student record reset to 'cleared'",
95        source = PAID,
96        destination = CLEARED),
97
98    Transition(
99        transition_id = 'pay_school_fee',
100        title = 'Pay school fee',
101        msg = 'School fee paid',
102        source = RETURNING,
103        destination = PAID),
104
105    Transition(
106        transition_id = 'reset6',
107        title = 'Reset to returning',
108        msg = "Student record reset to 'returning'",
109        source = PAID,
110        destination = RETURNING),
111
112    Transition(
113        transition_id = 'register_courses',
114        title = 'Register courses',
115        msg = 'Courses registered',
116        source = PAID,
117        destination = REGISTERED),
118
119    Transition(
120        transition_id = 'reset7',
121        title = 'Reset to paid',
122        msg = "Student record reset to 'paid'",
123        source = REGISTERED,
124        destination = PAID),
125
126    Transition(
127        transition_id = 'validate_courses',
128        title = 'Validate courses',
129        msg = 'Courses validated',
130        source = REGISTERED,
131        destination = VALIDATED),
132
133    Transition(
134        transition_id = 'reset8',
135        title = 'Reset to paid',
136        msg = "Student record reset to 'paid'",
137        source = VALIDATED,
138        destination = PAID),
139
140    Transition(
141        transition_id = 'return',
142        title = 'Return',
143        msg = 'Returned',
144        source = VALIDATED,
145        destination = RETURNING),
146
147    Transition(
148        transition_id = 'reset9',
149        title = 'Reset to validated',
150        msg = "Student record reset to 'validated'",
151        source = RETURNING,
152        destination = VALIDATED),
153    )
154
155LOCK_CLEARANCE_TRANS = ('reset2', 'request_clearance')
156UNLOCK_CLEARANCE_TRANS = ('reset3', 'reset4', 'start_clearance')
157
158registration_workflow = SIRPWorkflow(REGISTRATION_TRANSITIONS)
159
160class RegistrationWorkflowState(WorkflowState, grok.Adapter):
161    """An adapter to adapt Student objects to workflow states.
162    """
163    grok.context(IStudent)
164    grok.provides(IWorkflowState)
165
166    state_key = 'wf.registration.state'
167    state_id = 'wf.registration.id'
168
169class RegistrationWorkflowInfo(SIRPWorkflowInfo, grok.Adapter):
170    """Adapter to adapt Student objects to workflow info objects.
171    """
172    grok.context(IStudent)
173    grok.provides(ISIRPWorkflowInfo)
174
175    def __init__(self, context):
176        self.context = context
177        self.wf = registration_workflow
178
179@grok.subscribe(IStudent, IWorkflowTransitionEvent)
180def handle_student_transition_event(obj, event):
181    """Append message to student history and log file when transition happened.
182
183      Lock and unlock clearance form.
184    """
185    msg = '%s' % event.transition.user_data['msg']
186    history = IObjectHistory(obj)
187    history.addMessage(msg)
188    if event.transition.transition_id in LOCK_CLEARANCE_TRANS:
189        obj.clearance_locked = True
190    if event.transition.transition_id in UNLOCK_CLEARANCE_TRANS:
191        obj.clearance_locked = False
192    # Student data don't change after first-time payment
193    if event.transition.transition_id == 'pay_first_school_fee':
194        pass
195    # School fee payment of returning students triggers the change of
196    # current session, current level, and current verdict
197    if event.transition.transition_id == 'pay_school_fee':
198        getUtility(IStudentsUtils).setReturningData(obj)
199    # In some tests we don't have a students container or a user
200    try:
201        user = get_current_principal()
202        students_container = grok.getSite()['students']
203        students_container.logger.info('%s - %s - %s' % (user.id,obj.student_id,msg))
204    except (TypeError, AttributeError):
205        pass
206    return
Note: See TracBrowser for help on using the repository browser.