Commit 3d838a2c authored by wenjie.zheng's avatar wenjie.zheng Committed by Sebastien Robin

ERP5WorkflowTool.py: deploy universal methods; clean codes.

parent 7963c390
...@@ -134,14 +134,16 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool): ...@@ -134,14 +134,16 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool):
any state to another in same workflow) any state to another in same workflow)
""" """
from Products.ERP5.InteractionWorkflow import InteractionWorkflowDefinition from Products.ERP5.InteractionWorkflow import InteractionWorkflowDefinition
workflow_list = self.getWorkflowsFor(ob) from Products.ERP5Workflow.Document.InteractionWorkflow import InteractionWorkflow
workflow_list = self.getWorkflowValueListFor(ob.getPortalType())
if wf_id is None: if wf_id is None:
if not workflow_list: if not workflow_list:
raise WorkflowException('No workflows found.') raise WorkflowException('No workflows found.')
found = False found = False
for workflow in workflow_list: for workflow in workflow_list:
if not isinstance(workflow, InteractionWorkflowDefinition) and\ if not isinstance(workflow, InteractionWorkflowDefinition) or \
state_id in workflow.states._mapping: not isinstance(workflow, InteractionWorkflow):
if state_id in workflow.states._mapping:
found = True found = True
break break
if not found: if not found:
...@@ -159,32 +161,21 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool): ...@@ -159,32 +161,21 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool):
in at least one associated workflow in at least one associated workflow
""" """
from Products.ERP5.InteractionWorkflow import InteractionWorkflowDefinition from Products.ERP5.InteractionWorkflow import InteractionWorkflowDefinition
for workflow in (wf_id and (self[wf_id],) or self.getWorkflowsFor(ob)): from Products.ERP5Workflow.Document.InteractionWorkflow import InteractionWorkflow
if not isinstance(workflow, InteractionWorkflowDefinition) and\ for workflow in (wf_id and (self[wf_id],) or self.getWorkflowValueListFor(ob.getPortalType())):
state_id in workflow.states._mapping: if not isinstance(workflow, InteractionWorkflowDefinition) or \
not isinstance(workflow, InteractionWorkflow):
if state_id in workflow.states._mapping:
return True return True
return False return False
def doActionFor(self, ob, action, wf_id=None, *args, **kw): def doActionFor(self, ob, action, wf_id=None, *args, **kw):
wfs = self.getWorkflowsFor(ob)# dc workflow workflow_list = self.getWorkflowValueListFor(ob.getPortalType())
workflow_list = ob.getTypeInfo().getTypeERP5WorkflowList() # workflow
case = 1
LOG(" 173 do action '%s' for object '%s'"%(action, ob.getId()),WARNING," in ERP5 Workflow Tool.py")
if wfs is None or wf_id in workflow_list:
wfs = ()
case = 2
if wf_id is None: if wf_id is None:
if wfs == () and workflow_list == []: if workflow_list == []:
raise WorkflowException(_(u'No workflows found.')) raise WorkflowException(_(u'No workflows found.'))
found = 0 found = 0
for wf in wfs: for wf in workflow_list:
if wf.isActionSupported(ob, action, **kw):
found = 1
case = 1
break
for workflow_id in workflow_list:
wf = self.getPortalObject().portal_workflow._getOb(workflow_id)
if wf.isActionSupported(ob, action, **kw): if wf.isActionSupported(ob, action, **kw):
found = 1 found = 1
case = 2 case = 2
...@@ -192,41 +183,23 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool): ...@@ -192,41 +183,23 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool):
if not found: if not found:
msg = _(u"No workflow provides the '${action_id}' action.",mapping={'action_id': action}) msg = _(u"No workflow provides the '${action_id}' action.",mapping={'action_id': action})
raise WorkflowException(msg) raise WorkflowException(msg)
else: else:
if case == 1:
wf = self.getWorkflowById(wf_id) wf = self.getWorkflowById(wf_id)
else:
wf = self.getPortalObject().portal_workflow._getOb(wf_id, None)
if wf is None: if wf is None:
raise WorkflowException(_(u'Requested workflow definition not found.')) raise WorkflowException(_(u'Requested workflow definition not found.'))
return self._invokeWithNotification(
if case == 1: workflow_list, ob, action, wf.doActionFor, (ob, action) + args, kw)
return self._invokeWithNotification(wfs, ob, action, wf.doActionFor, (ob, action) + args, kw)
else:
return wf.doActionFor(ob, action)
def _getInfoFor(self, ob, name, default=_marker, wf_id=None, *args, **kw): def _getInfoFor(self, ob, name, default=_marker, wf_id=None, *args, **kw):
wfs = self.getWorkflowsFor(ob) workflow_list = self.getWorkflowValueListFor(ob.getPortalType())
workflow_list = ob.getTypeInfo().getTypeERP5WorkflowList()
case = 1
if wfs is None or wf_id in workflow_list:
case = 2
if wf_id is None: if wf_id is None:
if wfs is None and workflow_list == []: if workflow_list == []:
if default is _marker: if default is _marker:
raise WorkflowException(_(u'No workflows found.')) raise WorkflowException(_(u'No workflows found.'))
else: else:
return default return default
found = 0 found = 0
for wf in wfs: for workflow in workflow_list:
if wf.isInfoSupported(ob, name):
found = 1
case = 1
break
for workflow_id in workflow_list:
workflow = self.getPortalObject().portal_workflow._getOb(workflow_id)
if workflow.isInfoSuported(ob, name): if workflow.isInfoSuported(ob, name):
found = 1 found = 1
case = 2 case = 2
...@@ -239,10 +212,7 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool): ...@@ -239,10 +212,7 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool):
else: else:
return default return default
else: else:
if case == 1:
wf = self.getWorkflowById(wf_id) wf = self.getWorkflowById(wf_id)
else:
wf = self.getPortalObject().portal_workflow._getOb(wf_id)
if wf is None: if wf is None:
if default is _marker: if default is _marker:
raise WorkflowException( raise WorkflowException(
...@@ -423,12 +393,12 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool): ...@@ -423,12 +393,12 @@ class ERP5WorkflowTool(BaseTool, OriginalWorkflowTool):
def isTransitionPossible(self, ob, transition_id, wf_id=None): def isTransitionPossible(self, ob, transition_id, wf_id=None):
"""Test if the given transition exist from the current state. """Test if the given transition exist from the current state.
""" """
for workflow in (wf_id and (self[wf_id],) or self.getWorkflowsFor(ob)): for workflow in (wf_id and (self[wf_id],) or self.getWorkflowValueListFor(ob.getPortalType())):
state = workflow._getWorkflowStateOf(ob) state = workflow._getWorkflowStateOf(ob)
if state and transition_id in state.transitions: if state and transition_id in state.transitions:
return 1 return 1
for workflow_id in ob.getTypeInfo().getTypeERP5WorkflowList(): for workflow_id in ob.getTypeInfo().getTypeERP5WorkflowList():
workflow = self.getPortalObject().portal_workflow._getOb(workflow_id) ### _getObjectByRef workflow = self.getPortalObject().portal_workflow._getOb(workflow_id)
state = workflow._getWorkflowStateOf(ob) state = workflow._getWorkflowStateOf(ob)
if state and transition_id in state.getDestinationIdList(): if state and transition_id in state.getDestinationIdList():
return 1 return 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment