From 16ee8070682ceebba92ba6887af8ddae47312560 Mon Sep 17 00:00:00 2001 From: Wenjie Zheng <wenjie.zheng@tiolive.com> Date: Mon, 15 Dec 2014 15:24:09 +0000 Subject: [PATCH] Workflow.py: isWorkflow5MethodSupport can accept variable from base category value. --- product/ERP5Workflow/Document/Workflow.py | 35 +++++++++++++++++++---- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/product/ERP5Workflow/Document/Workflow.py b/product/ERP5Workflow/Document/Workflow.py index a08b084e8c..8f911bf76c 100644 --- a/product/ERP5Workflow/Document/Workflow.py +++ b/product/ERP5Workflow/Document/Workflow.py @@ -31,12 +31,13 @@ from AccessControl import ClassSecurityInfo from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type.XMLObject import XMLObject from Products.ERP5Type.Globals import PersistentMapping - +from Products.ERP5Type.Accessor import WorkflowState +from Products.ERP5Type import Permissions from tempfile import mktemp import os from Products.DCWorkflowGraph.config import DOT_EXE from Products.DCWorkflowGraph.DCWorkflowGraph import bin_search, getGraph - +from Products.ERP5Type.Utils import UpperCase from Acquisition import aq_base from DateTime import DateTime @@ -51,6 +52,9 @@ class Workflow(XMLObject): add_permission = Permissions.AddPortalContent isPortalContent = 1 isRADContent = 1 + ### register the variable given by "base category value" + #state_var = 'state' + ### In DCworkflow; state/transition can be registered inside workflow # Declarative security security = ClassSecurityInfo() @@ -138,14 +142,35 @@ class Workflow(XMLObject): transition=transition, transition_url=transition_url, state=state) - - def isWorkflow5MethodSupported(self, document, transition): - state = document.getCategoryStateValue() +# ========== Workflow5 Project, Wenjie, Dec 2014 =============================== + def isWorkflow5MethodSupported(self, document, transition, wf_id): + state = self._getWorkflow5StateOf(document, wf_id) + #state = document.getCategoryStateValue() if state is None: return 0 if transition in state.getDestinationValueList(): return 1 return 0 + +### get workflow state from base category value: + def _getWorkflow5StateOf(self, ob, wf_id): + ### the problem is that: How to pass state_id from base_category + getter = WorkflowState.Getter + #ptype_klass = self.getPortalObject().portal_types.getPortalTypeClass(ob.getTypeInfo().getId()) + ptype_klass = ob.getTypeInfo().__class__ + #raise NotImplementedError (ptype_klass)#class 'erp5.portal_type.Base Type' + StateGetter = getter('get%s'%UpperCase(self.getStateBaseCategory()), wf_id) + ptype_klass.registerAccessor(StateGetter) + # raise NotImplementedError (StateGetter._id)# getCategoryState + state_path = ob.getCategoryState() + ### + if state_path is not None: + state = self.restrictedTraverse(state_path) + #state = self._getOb(state_id) + else: state = None + return state + +# =========== WF5 ============================================================== ########### ## Graph ## ############ -- 2.30.9