Commit b5e8f8c4 authored by wenjie.zheng's avatar wenjie.zheng

Transition.py: Add erp5 variables compatibility.

parent 79b666bd
...@@ -32,7 +32,7 @@ from Products.ERP5Type import Permissions, PropertySheet ...@@ -32,7 +32,7 @@ from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5Type.XMLObject import XMLObject from Products.ERP5Type.XMLObject import XMLObject
from Products.ERP5Type.Accessor.Base import _evaluateTales from Products.ERP5Type.Accessor.Base import _evaluateTales
from Products.ERP5Type.Globals import PersistentMapping from Products.ERP5Type.Globals import PersistentMapping
from Products.DCWorkflow.Expression import StateChangeInfo, createExprContext from Products.DCWorkflow.Expression import StateChangeInfo
from zLOG import LOG, ERROR, DEBUG, WARNING from zLOG import LOG, ERROR, DEBUG, WARNING
from Products.ERP5Type.Utils import convertToUpperCase, convertToMixedCase from Products.ERP5Type.Utils import convertToUpperCase, convertToMixedCase
from Products.DCWorkflow.DCWorkflow import ObjectDeleted, ObjectMoved from Products.DCWorkflow.DCWorkflow import ObjectDeleted, ObjectMoved
...@@ -40,7 +40,9 @@ from Products.ERP5Type.patches.DCWorkflow import ValidationFailed ...@@ -40,7 +40,9 @@ from Products.ERP5Type.patches.DCWorkflow import ValidationFailed
from copy import deepcopy from copy import deepcopy
import sys import sys
from Products.ERP5Type.patches.WorkflowTool import WorkflowHistoryList from Products.ERP5Type.patches.WorkflowTool import WorkflowHistoryList
from Products.ERP5Type.patches.Expression import Expression_createExprContext
from Products.DCWorkflow.Guard import Guard from Products.DCWorkflow.Guard import Guard
from Products.CMFCore.Expression import Expression
TRIGGER_AUTOMATIC = 0 TRIGGER_AUTOMATIC = 0
TRIGGER_USER_ACTION = 1 TRIGGER_USER_ACTION = 1
...@@ -211,45 +213,54 @@ class Transition(XMLObject): ...@@ -211,45 +213,54 @@ class Transition(XMLObject):
status_dict[state_bc_id] = new_state status_dict[state_bc_id] = new_state
object = workflow.getStateChangeInformation(document, state_object, transition=self) object = workflow.getStateChangeInformation(document, state_object, transition=self)
""" # update variables =========================================================
# Update all variables
state_values = None state_values = None
if new_sdef is not None: if new_sdef is not None:
state_values = new_sdef.objectValues(portal_type="Variable") state_values = new_sdef.objectValues(portal_type='Variable')
if state_values is None: state_values = {} if state_values is None:
tdef_exprs = self.getGuardExpression() state_values = {}
if tdef_exprs is None or 'python: True': tdef_exprs = {}
#status = {} tdef_exprs = self.objectValues(portal_type='Variable')
for variable in workflow.objectValues(portal_type="Variable"): if tdef_exprs is None:
if not variable.for_status: tdef_exprs = {}
continue
expr = None #status = {} ### zwj: here replace by status_dict
if state_values.has_key(id):
value = state_values[id] #for id, vdef in workflow.objectValues(portal_type='Variable').items():
elif tdef_exprs.has_key(id): for vdef in workflow.objectValues(portal_type='Variable'):
expr = tdef_exprs[id] id = vdef.getId()
elif not variable.update_always and former_status.has_key(id): if not vdef.for_status:
# Preserve former value continue
value = former_status[id] expr = None
if id in state_values:
value = state_values[id]
elif id in tdef_exprs:
expr = tdef_exprs[id]
elif not vdef.update_always and id in former_status:
# Preserve former value
value = former_status[id]
else:
if vdef.default_expr is not None:
expr = vdef.default_expr
else: else:
if variable.default_expr is not None: value = vdef.default_value
expr = variable.default_expr if expr is not None:
else: # Evaluate an expression.
value = variable.default_value if econtext is None:
if expr is not None: # Lazily create the expression context.
# Evaluate an expression. if sci is None:
if econtext is None: kwargs = form_kw
# Lazily create the expression context. sci = StateChangeInfo(
if sci is None: document, workflow, former_status, self,
kwargs = form_kw old_sdef, new_sdef, kwargs)
sci = StateChangeInfo( econtext = Expression_createExprContext(sci)
document, self, former_status, self, #raise NotImplementedError (expr) # transition/getId|nothing
old_sdef, new_sdef, kwargs) expr = Expression(expr)
econtext = createExprContext(sci) value = expr(econtext)
value = expr(econtext) status_dict[id] = value
status_dict[id] = value # ==========================================================================
"""
# Update all transition variables # Update all transition variables
if form_kw is not None: if form_kw is not None:
object.REQUEST.other.update(form_kw) object.REQUEST.other.update(form_kw)
...@@ -257,16 +268,18 @@ class Transition(XMLObject): ...@@ -257,16 +268,18 @@ class Transition(XMLObject):
for variable in self.contentValues(portal_type='Transition Variable'): for variable in self.contentValues(portal_type='Transition Variable'):
status_dict[variable.getCausalityTitle()] = variable.getInitialValue(object=object) status_dict[variable.getCausalityTitle()] = variable.getInitialValue(object=object)
"""
# Update all variables # Update all variables
for variable in workflow.contentValues(portal_type='Variable'): for variable in workflow.contentValues(portal_type='Variable'):
if variable.getAutomaticUpdate(): if variable.getAutomaticUpdate() == 1:
# if we have it in form get it from there # if we have it in form get it from there
# otherwise use default # otherwise use default
variable_title = variable.getTitle() variable_id = variable.getId()
if variable_title in form_kw: if variable_id in form_kw:
status_dict[variable_title] = form_kw[variable_title] status_dict[variable_id] = form_kw[variable_id]
else: else:
status_dict[variable_title] = variable.getInitialValue(object=object) status_dict[variable_id] = variable.getInitialValue(object=object)
"""
# Generate Workflow History List # Generate Workflow History List
self.setStatusOf(workflow.getId(), document, status_dict) self.setStatusOf(workflow.getId(), document, status_dict)
......
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