From 4bf202cf44bd7c56300d80691fa4b5af98fdacdb Mon Sep 17 00:00:00 2001
From: Wenjie Zheng <wenjie.zheng@tiolive.com>
Date: Mon, 30 Mar 2015 13:12:55 +0000
Subject: [PATCH] Base.py: reorgnaise erp5 workflow method generation code for
 further ERP5 Interaction Workflow compatibility.

---
 product/ERP5Type/Base.py | 43 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py
index 0116107256..4e0906a20f 100644
--- a/product/ERP5Type/Base.py
+++ b/product/ERP5Type/Base.py
@@ -686,7 +686,16 @@ def intializePortalTypeERP5WorkflowMethod(ptype_klass, portal_ERP5Workflow):
       storage = interaction_workflow_dict
     else:
       continue
+  ### zwj: compatibility for Interaction Workflow and Workflow
+    transition_id_set = set(x.getId() for x in transition_list)
+    trigger_dict = {}
+    for tr_id in transition_id_set:
+      tdef = ERP5Workflow._getOb(tr_id)
+      if tdef.trigger_type == TRIGGER_WORKFLOW_METHOD:
+        trigger_dict[tr_id] = tdef
 
+    storage[ERP5Workflow_id] = (transition_id_set, trigger_dict)
+    """
     ### zwj: geranrate workflow methods
     for tr in transition_list:
       if tr.trigger_type == TRIGGER_WORKFLOW_METHOD:
@@ -695,6 +704,40 @@ def intializePortalTypeERP5WorkflowMethod(ptype_klass, portal_ERP5Workflow):
         ptype_klass.security.declareProtected(Permissions.AccessContentsInformation,
                                                 method_id)
         ptype_klass.registerERP5WorkflowMethod(method_id, ERP5Workflow_id, tr_id, 0)
+    """
+  ### zwj: generate Workflow methods
+  for ERP5Workflow_id, v in workflow_dict.iteritems():
+    transition_id_set, trigger_dict = v
+    for tr_id, tdef in trigger_dict.iteritems():
+      method_id = convertToMixedCase(tr_id)
+      try:
+        method = getattr(ptype_klass, method_id)
+      except AttributeError:
+        ptype_klass.security.declareProtected(Permissions.AccessContentsInformation,
+                                                method_id)
+        ptype_klass.registerERP5WorkflowMethod(method_id, ERP5Workflow_id, tr_id, 0)
+        continue
+
+      #Wrap method
+      if not callable(method):
+        LOG('initializePortalTypeDynamicWorkflowMethods', 100,
+            'WARNING! Can not initialize %s on %s' % \
+              (method_id, portal_type))
+        continue
+
+      if not isinstance(method, WorkflowMethod):
+        method = WorkflowMethod(method)
+        setattr(ptype_klass, method_id, method)
+      else:
+        transition_id = method.getTransitionId()
+        if transition_id in transition_id_set:
+          method.registerTransitionAlways(portal_type, ERP5Workflow_id, transition_id)
+      method.registerTransitionAlways(portal_type, ERP5Workflow_id, tr_id)
+
+  ### zwj: should also generate interaction workflow methods
+
+  ### ==========================================================================
+
 
 def initializePortalTypeDynamicWorkflowMethods(ptype_klass, portal_workflow):
   """We should now make sure workflow methods are defined
-- 
2.30.9