source: main/waeup.ikoba/trunk/src/waeup/ikoba/customers/workflow.py @ 11975

Last change on this file since 11975 was 11971, checked in by Henrik Bettermann, 10 years ago

Add file upload and display components.

Adjust workflow.

File size: 4.4 KB
Line 
1## $Id: batching.py 11891 2014-10-28 20:02:45Z henrik $
2##
3## Copyright (C) 2014 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##
18"""Workflow for customers.
19"""
20import grok
21from datetime import datetime
22from zope.component import getUtility
23from hurry.workflow.workflow import Transition, WorkflowState, NullCondition
24from hurry.workflow.interfaces import IWorkflowState, IWorkflowTransitionEvent
25from waeup.ikoba.interfaces import (
26    IObjectHistory, IIkobaWorkflowInfo, IIkobaUtils,
27    STARTED, CREATED, REQUESTED, APPROVED)
28from waeup.ikoba.interfaces import MessageFactory as _
29from waeup.ikoba.workflow import IkobaWorkflow, IkobaWorkflowInfo
30from waeup.ikoba.customers.interfaces import ICustomer, ICustomersUtils
31from waeup.ikoba.utils.helpers import get_current_principal
32
33
34IMPORTABLE_STATES = (STARTED, REQUESTED, APPROVED)
35
36REGISTRATION_TRANSITIONS = (
37    Transition(
38        transition_id = 'create',
39        title = _('Create customer'),
40        source = None,
41        condition = NullCondition,
42        msg = _('Customer record created'),
43        destination = CREATED),
44
45    Transition(
46        transition_id = 'start',
47        title = _('Start registration'),
48        source = CREATED,
49        condition = NullCondition,
50        msg = _('Customer registration started'),
51        destination = STARTED),
52
53    Transition(
54        transition_id = 'request',
55        title = _('Request registration'),
56        msg = _('Customer registration requested'),
57        source = STARTED,
58        destination = REQUESTED),
59
60    Transition(
61        transition_id = 'approve',
62        title = _('Approve customer'),
63        msg = _('Customer registration approved'),
64        source = REQUESTED,
65        destination = APPROVED),
66
67    Transition(
68        transition_id = 'reject',
69        title = _('Reject customer'),
70        msg = _('Customer registration rejected'),
71        source = REQUESTED,
72        destination = STARTED),
73
74    Transition(
75        transition_id = 'reset1',
76        title = _('Reset customer'),
77        msg = _('Reset to initial customer state'),
78        source = APPROVED,
79        destination = STARTED),
80
81    Transition(
82        transition_id = 'reset2',
83        title = _('Reset to requested'),
84        msg = _("Reset to 'requested'"),
85        source = APPROVED,
86        destination = REQUESTED),
87
88    Transition(
89        transition_id = 'reset3',
90        title = _('Reset customer'),
91        msg = _("Reset to initial state"),
92        source = REQUESTED,
93        destination = STARTED),
94
95    )
96
97
98IMPORTABLE_TRANSITIONS = [i.transition_id for i in REGISTRATION_TRANSITIONS]
99
100registration_workflow = IkobaWorkflow(REGISTRATION_TRANSITIONS)
101
102class RegistrationWorkflowState(WorkflowState, grok.Adapter):
103    """An adapter to adapt Customer objects to workflow states.
104    """
105    grok.context(ICustomer)
106    grok.provides(IWorkflowState)
107
108    state_key = 'wf.registration.state'
109    state_id = 'wf.registration.id'
110
111class RegistrationWorkflowInfo(IkobaWorkflowInfo, grok.Adapter):
112    """Adapter to adapt Customer objects to workflow info objects.
113    """
114    grok.context(ICustomer)
115    grok.provides(IIkobaWorkflowInfo)
116
117    def __init__(self, context):
118        self.context = context
119        self.wf = registration_workflow
120
121@grok.subscribe(ICustomer, IWorkflowTransitionEvent)
122def handle_customer_transition_event(obj, event):
123    """Append message to customer history and log file when transition happened.
124
125    Lock and unlock clearance form.
126    Trigger actions after school fee payment.
127    """
128
129    msg = event.transition.user_data['msg']
130    history = IObjectHistory(obj)
131    history.addMessage(msg)
132    try:
133        customers_container = grok.getSite()['customers']
134        customers_container.logger.info('%s - %s' % (obj.customer_id,msg))
135    except (TypeError, AttributeError):
136        pass
137    return
Note: See TracBrowser for help on using the repository browser.