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