From 18f794bfe7978771ca64af0250bc9021d42993e9 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 20 Jun 2013 13:32:48 +0200 Subject: [PATCH] work in progress: form and processing for state transitions --- locales/de/LC_MESSAGES/loops.mo | Bin 24237 -> 24577 bytes locales/de/LC_MESSAGES/loops.po | 22 ++++++++++++++++++++-- organize/stateful/browser.py | 26 +++++++++++++++++--------- organize/stateful/task.py | 1 + organize/stateful/view_macros.pt | 24 ++++++++++++++++++------ 5 files changed, 56 insertions(+), 17 deletions(-) diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 89e7e8c8dd3ffa2fd069020eeb9f787eaca30e35..454e658170da1b4c2b00c65e24c62f9b9deacdba 100644 GIT binary patch delta 9216 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�$Bc zzg951ueNCqj4LkvB<80Ip zEJf|$OL^?SwrnRA8hAfy=0`CIk7I2-jhbjBYJeN4uO#FScf~Qt`{*R%T{so>u6%;p z>Ppl&;r-l+H^vs^Ej<*pf}yA_oq`&;7;E7ov&8O~A$>WUP#yk?+R|%S7whM{D{O}C z$$KMnb>?Cs9>!$+4P((0+uuFo9MnVxqPAutYU`$<23m;fU^!}HyKp3yqmC+SfO~{l z7)(A0_54_?FGekF1=hwgWIT_voq}Gfa#Y8MFc42*D?E*wK=44fT?5o-8iSf>I;wp( z*1=rVP7X)48-wb17OLGs48;=6WPIm&3i?6$4)u~<#Wol^$UVdEs2PvLwpfIk&{ot0 zUa|YTEq~Yi81(~n3^i~i>g%|M`i%Vsll#7Z3hJ;H*27TCo0+XpE9zi*Hmai>Ov60X ziWZ?dUW@Iq4E49=C}vbxs`&p=o8dHU!n#$joOKGsI85>)2&ZL zwQq$X*b#kOkD9=6R6hl%uW20WbDW5JNf)Dze9fKgzZ!0^8{1JY(_ZY2Cs8{SJ=FaP zO+p<-7OI23sQW`u1K*A6Zxr%DI1{lO?n5o;FVsW>hPgjbc#hjt`=a?gP|We{G&ay(7P(CVbWEs|K7khLc}JtvrCAH%%Z2wX#@Lhs{yiIIO-;UY|FKR;jQ3D=9eN7b@hQW7p)cXG8 zDd;TPqdFRc>UbLJ!C9z@EJ1DMYShX%q95K*@P#^aNsi&;_#do_ebnHV>pJBJZ^<>j z^EW|X&KY7pkw&EOAV==|E0s_ADat*pvusoEg|6mA1~Hg=y}UQC67sRuHkZn8iABWN zn+_PI}ol>M7(!it97No_ zI#L%*=nBISBFjykg_OUsvbdN0H5Kqt;t@Z0e5VnKu9oKOlpiAAA^KAHFzUMB?oY!1 zlK<(eJ`Xi!i zvOTno@>yaX(aq`}!vo~q3H|NR|BBv__=@rdVhvH1&{ayLbMG-sC3X{SbpBnaY(ZpG zj=*sI~$-!CZ*r~Ykxz-m`xed0mtCt^$DIC1Oc`Gsr@4fOvS zyPfDm-W1ysT`33PRAL-)5Al~h{WIo~>-q<=pZJ>SOx+Z`3!{kklyAN6BH2L%a<8?1 ze>RewCmIqB2wjV~xz8;+_u$J!DRn2XE@B8FCi zh$X~l#O=g%+BL$VsB69cVSMKlF^9@as<7)m>`C2J%OkO`mGg1Fb)u?&6WvtcT4DA6 zZt7HGI+0-YC$0VsY(?F$M<`q%zPB46O7r-nK*X u{k=_jp0F|Nj8yoQJ*u diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 1885c16..32535c4 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 0.13.0\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n" -"PO-Revision-Date: 2013-06-05 12:00 CET\n" +"PO-Revision-Date: 2013-06-20 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -1025,14 +1025,26 @@ msgid "Restrict to objects with certain states" msgstr "Auf Objekte mit bestimmtem Status beschränken" msgid "Workflow" -msgstr "Statusdefinition/Workflow" +msgstr "Workflow" msgid "States" msgstr "Statuswerte" +msgid "States Definition" +msgstr "Workflowdefinition" + +msgid "State Transition" +msgstr "Workflow-Statusänderung" + +msgid "Transition" +msgstr "Aktion" + msgid "State information for $definition: $title" msgstr "Status ($definition): $title" +msgid "Available Transitions" +msgstr "Übergänge" + msgid "classification_quality" msgstr "Klassifizierung" @@ -1045,6 +1057,12 @@ msgstr "Aufgabe" msgid "publishable_task" msgstr "Aufgabe/Zugriff" +msgid "label_transition_comments" +msgstr "Bemerkung" + +msgid "desc_transition_comments" +msgstr "Notizen zum Statusübergang." + # state names msgid "accepted" diff --git a/organize/stateful/browser.py b/organize/stateful/browser.py index 98dc3a9..130daf4 100644 --- a/organize/stateful/browser.py +++ b/organize/stateful/browser.py @@ -52,7 +52,7 @@ def registerStatesPortlet(controller, view, statesDefs, cm = controller.macros stfs = [component.getAdapter(view.context, IStateful, name=std) for std in statesDefs] - cm.register(region, 'states', title=_(u'States'), + cm.register(region, 'states', title=_(u'Workflow'), subMacro=template.macros['portlet_states'], priority=priority, info=view, stfs=stfs) @@ -81,8 +81,9 @@ class StateAction(Action): @Lazy def icon(self): - icon = self.stateObject.icon or 'led%s.png' % self.stateObject.color - return 'cybertools.icons/' + icon + return self.stateObject.stateIcon + #icon = self.stateObject.icon or 'led%s.png' % self.stateObject.color + #return 'cybertools.icons/' + icon for std in statefulActions: @@ -96,7 +97,7 @@ class ChangeStateBase(object): @Lazy def stateful(self): - return component.getAdapter(self.view.context, IStateful, + return component.getAdapter(self.view.virtualTargetObject, IStateful, name=self.definition) @Lazy @@ -107,6 +108,10 @@ class ChangeStateBase(object): def action(self): return self.request.form.get('action') or u'' + @Lazy + def transition(self): + return self.stateful.getStatesDefinition().transitions[self.action] + @Lazy def stateObject(self): return self.stateful.getStateObject() @@ -121,24 +126,27 @@ class ChangeStateForm(ObjectForm, ChangeStateBase): def macro(self): return template.macros['change_state'] + @Lazy + def title(self): + return self.virtualTargetObject.title + @Lazy def schema(self): # TODO: create schema directly, use field information specified # in transition - commentsField = Field('comments', u'Comments', 'textarea', - description=u'Enter comments.') + commentsField = Field('comments', _(u'label_transition_comments'), + 'textarea', + description=_(u'desc_transition_comments')) fields = [commentsField] return Schema(name='change_state', request=self.request, manager=self, *fields) - #schemaFactory = ISchemaFactory(self.adapted) - #return schemaFactory(self.typeInterface, manager=self, - # request=self.request) class ChangeState(EditObject, ChangeStateBase): def update(self): print '***', self.request.form + self.stateful.doTransition(self.action) return True diff --git a/organize/stateful/task.py b/organize/stateful/task.py index 0721bc4..5e60ee5 100644 --- a/organize/stateful/task.py +++ b/organize/stateful/task.py @@ -59,6 +59,7 @@ def taskStates(): Transition('finish', 'finish', 'finished'), Transition('cancel', 'cancel', 'cancelled'), Transition('reopen', 're-open', 'draft'), + Transition('archive', 'archive', 'archived'), initialState='draft') diff --git a/organize/stateful/view_macros.pt b/organize/stateful/view_macros.pt index e6ce00b..1d30d3d 100644 --- a/organize/stateful/view_macros.pt +++ b/organize/stateful/view_macros.pt @@ -71,7 +71,7 @@
- Workflow + States Definition
@@ -79,9 +79,10 @@ State: +
-
-
Available Transitions:
+