make client stateful; fix detail data listing: ignore read-only fields

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3706 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-02-01 14:07:51 +00:00
parent 5c8fd1c825
commit c6d80925eb
2 changed files with 51 additions and 3 deletions

View file

@ -33,6 +33,7 @@ from cybertools.composer.schema.browser.common import BaseView
from cybertools.composer.schema.client import eventTypes, getCheckoutRule from cybertools.composer.schema.client import eventTypes, getCheckoutRule
from cybertools.composer.schema.interfaces import IClientFactory, ISchema from cybertools.composer.schema.interfaces import IClientFactory, ISchema
from cybertools.composer.schema.schema import FormState from cybertools.composer.schema.schema import FormState
from cybertools.stateful.interfaces import IStateful
from cybertools.util.jeep import Jeep from cybertools.util.jeep import Jeep
@ -123,12 +124,16 @@ class FormManagerView(BaseView):
break break
return False return False
def overview(self): def overview(self, ignoreTemporary=True):
result = [] result = []
for c in self.context.getClients().values(): for c in self.context.getClients().values():
state = IStateful(c).state
if ignoreTemporary and state == 'temporary':
continue
instance = IInstance(c) instance = IInstance(c)
data = instance.applyTemplate() data = instance.applyTemplate()
data['id'] = data['__name__'] data['id'] = data['__name__']
data['state'] = state
result.append(data) result.append(data)
return result return result
@ -142,7 +147,8 @@ class FormManagerView(BaseView):
instance.template = s instance.template = s
data = instance.applyTemplate() data = instance.applyTemplate()
for f in s.fields: for f in s.fields:
result.append(dict(label=f.title, value=data[f.name])) if f.storeData:
result.append(dict(label=f.title, value=data.get(f.name)))
return result return result
@ -173,6 +179,10 @@ class CheckoutView(BaseView):
client = self.getClient() client = self.getClient()
if client is None: if client is None:
return True # TODO: error, redirect to overview return True # TODO: error, redirect to overview
# submit
stf = IStateful(client)
if stf.state == 'temporary':
stf.doTransition('submit')
# send mail # send mail
rm = IRuleManager(self.context) rm = IRuleManager(self.context)
rm.addRule(getCheckoutRule(self.context.senderEmail)) rm.addRule(getCheckoutRule(self.context.senderEmail))

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2007 Helmut Merz helmutm@cy55.de # Copyright (c) 2010 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -33,6 +33,10 @@ from cybertools.composer.rule.base import RuleManager, EventType
from cybertools.composer.rule.base import Rule, Action from cybertools.composer.rule.base import Rule, Action
from cybertools.composer.schema.interfaces import IClient from cybertools.composer.schema.interfaces import IClient
from cybertools.composer.schema.interfaces import IClientManager, IClientFactory from cybertools.composer.schema.interfaces import IClientManager, IClientFactory
from cybertools.stateful.base import StatefulAdapter
from cybertools.stateful.definition import registerStatesDefinition
from cybertools.stateful.definition import StatesDefinition
from cybertools.stateful.definition import State, Transition
from cybertools.util.jeep import Jeep from cybertools.util.jeep import Jeep
from cybertools.util.randomname import generateName from cybertools.util.randomname import generateName
@ -124,6 +128,40 @@ class RuleManagerAdapter(RuleManager):
self.context = context self.context = context
# registration states
clientStates = 'composer.schema.client'
registerStatesDefinition(
StatesDefinition(clientStates,
State('temporary', 'temporary', ('submit', 'cancel',)),
State('submitted', 'submitted',
('change', 'retract', 'confirm', 'reject',)),
State('cancelled', 'cancelled', ('activate',)),
State('retracted', 'retracted', ('activate', 'cancel',)),
State('confirmed', 'confirmed',
('change', 'retract', 'reject',)),
State('rejected', 'rejected',
('change', 'retract', 'confirm',)),
Transition('cancel', 'Cancel registration', 'cancelled'),
Transition('submit', 'Submit registration', 'submitted'),
Transition('change', 'Change registration', 'submitted'),
Transition('retract', 'Retract registration', 'retracted'),
Transition('activate', 'Activate cancelled registration',
'temporary'),
Transition('confirm', 'Confirm registration', 'confirmed'),
Transition('reject', 'Reject registration', 'rejected'),
initialState='temporary',
))
class StatefulClient(StatefulAdapter):
adapts(IClient)
statesDefinition = clientStates
eventTypes = Jeep(( eventTypes = Jeep((
EventType('client.checkout'), EventType('client.checkout'),
)) ))