Commit a516e323 authored by Arnaud Fontaine's avatar Arnaud Fontaine

WWIP: Configurator Workflow.

* Rename WorkflowConfigurator PropertySheet to ConfiguratorWorkflow.
* Add ConfiguratorWorkflowTransition PropertySheet for transition_form_id.
  => Should it be moved to standard 'action' instead?
parent 3ffe9c68
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_view</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>configurator_settings</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>10.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Configurator</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/WorkflowTransition_viewConfigurator</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
def titleToReference(title):
reference = title.replace(' ', '_').lower()
return reference
def migrateToERP5Workflow(portal_workflow, configurator_workflow):
"""
Convert Configurator Workflow (workflow_module/*) to ERP5 Workflow.
"""
workflow_id = configurator_workflow.getId()
relative_url = "%s/%s" % (portal_workflow.getRelativeUrl(), workflow_id)
def getCategoryList(prefix, category_value_list):
return ['%s/%s%s' % (relative_url, prefix, titleToReference(o.getTitle()))
for o in category_value_list ]
workflow = portal_workflow.newContent(
id=workflow_id,
portal_type='Workflow',
reference=configurator_workflow.getId(),
comment=configurator_workflow.getComment(),
description=configurator_workflow.getDescription(),
source_list=getCategoryList('state_', configurator_workflow.getSourceValueList()),
# ConfiguratorWorkflow PropertySheet
configuration_after_script_id=configurator_workflow.getConfigurationAfterScriptId(),
state_base_category=configurator_workflow.getStateBaseCategory())
for business_configuration in configurator_workflow.getRelatedValueList(
portal_type='Business Configuration'):
business_configuration.setResourceValue(workflow)
for subobject in configurator_workflow.objectValues():
title = subobject.getTitle()
reference = titleToReference(title)
if subobject.getPortalType() == 'State':
state = workflow.newContent(
id='state_' + reference,
portal_type='State',
reference=reference,
title=title,
destination_list=getCategoryList('transition_', subobject.getDestinationValueList()),
comment=subobject.getComment(),
description=subobject.getDescription())
for business_configuration in subobject.getRelatedValueList(
portal_type='Business Configuration'):
business_configuration.setCurrentStateValue(state)
elif subobject.getPortalType() == 'Transition':
workflow.newContent(
id='transition_' + reference,
portal_type='Transition',
reference=reference,
title=title,
destination_list=getCategoryList('state_', subobject.getDestinationValueList()),
comment=subobject.getComment(),
description=subobject.getDescription(),
before_script_value=subobject.getProperty('before_script_id'),
after_script_value=subobject.getProperty('after_script_id'),
guard_expression=subobject.getProperty('guard_expression'),
# ConfiguratorWorkflowTransition Property Sheet
transition_form_id=subobject.getProperty('transition_form_id'))
# XXX: Transition Variable: Not used in erp5.git, used elsewhere?
elif subobject.getPortalType() == 'Variable':
if reference in ('action',
'actor',
'comment',
'error_message',
'history',
'portal_type',
'time'):
continue
workflow.newContent(
id='variable_' + reference,
portal_type='Workflow Variable',
reference=reference,
title=title,
description=subobject.getDescription(),
automatic_update=subobject.getAutomaticUpdate(),
variable_expression=subobject.getProperty('initial_value', evaluate=0),
comment=subobject.getComment())
# default_image
elif subobject.getPortalType() == 'Embedded File':
copy_data = configurator_workflow.manage_copyObjects([subobject.getId()])
workflow.manage_pasteObjects(copy_data)
else:
raise NotImplementedError(
"%s: Portal Type '%s'" % (subobject.getRelativeUrl(),
subobject.getPortalType()))
return workflow
def migrateWorkflowModuleToPortalWorkflow(self, recreate=False):
"""
Migrate workflow_module to new-style ERP5Workflows: workflow_module was implemented
for Configurators, based on DCWorkflow (portal_workflow), and a step towards migrating
DCWorkflows to ERP5 Objects. Now that portal_workflow is a real ERP5 Object, these must
be migrated to portal_workflow.
"""
portal = self.getPortalObject()
try:
workflow_module = portal.workflow_module
except AttributeError:
return "Nothing to do as workflow_module does not exist."
portal_workflow = portal.portal_workflow
assert portal_workflow.getPortalType() == 'Workflow Tool'
from zLOG import LOG
for configurator_workflow in workflow_module.objectValues():
id_ = configurator_workflow.getId()
if id_ in portal_workflow:
if not recreate:
continue
portal_workflow._delOb(id_)
new_workflow = migrateToERP5Workflow(portal_workflow, configurator_workflow)
LOG("migrateWorkflowModuleToPortalWorkflow", 0,
"Migrated %s to %s" % (configurator_workflow.getRelativeUrl(),
new_workflow.getRelativeUrl()))
return 'Done'
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Extension Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>migrateWorkflowModuleToPortalWorkflow</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>extension.erp5.migrateWorkflowModuleToPortalWorkflow</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Extension Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<property_sheet_list> <property_sheet_list>
<portal_type id="Transition">
<item>ConfiguratorWorkflowTransition</item>
</portal_type>
<portal_type id="Workflow"> <portal_type id="Workflow">
<item>ConfiguratorWorkflow</item>
<item>DefaultImage</item> <item>DefaultImage</item>
<item>WorkflowConfigurator</item>
</portal_type> </portal_type>
</property_sheet_list> </property_sheet_list>
\ No newline at end of file
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>WorkflowConfigurator</string> </value> <value> <string>ConfiguratorWorkflow</string> </value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Standard Property" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>elementary_type/string</string>
</tuple>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>state_base_category</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>state_base_category_property</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Standard Property</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Property Sheet" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ConfiguratorWorkflowTransition</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Property Sheet</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Standard Property" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>elementary_type/string</string>
</tuple>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>transition_form_id</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>transition_form_id_property</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Standard Property</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -114,6 +114,7 @@ ...@@ -114,6 +114,7 @@
<string>my_empty_mode_default_address_region</string> <string>my_empty_mode_default_address_region</string>
<string>my_empty_mode_default_address_zip_code</string> <string>my_empty_mode_default_address_zip_code</string>
<string>my_view_mode_reference</string> <string>my_view_mode_reference</string>
<string>my_view_mode_transition_form_id</string>
</list> </list>
</value> </value>
</item> </item>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>display_width</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_view_mode_transition_form_id</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>extra_context</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_context</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>display_width</string> </key>
<value> <int>40</int> </value>
</item>
<item>
<key> <string>extra_context</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_string_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Transition Form ID</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_edit</string> </value>
</item>
<item>
<key> <string>action_title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string>multipart/form-data</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>my_transition_form_id</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WorkflowTransition_viewConfigurator</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>WorkflowTransition_viewConfigurator</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_view</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Configurator Settings</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>display_width</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_transition_form_id</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_view_mode_transition_form_id</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewConfiguratorFieldLibrary</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -37,6 +37,10 @@ ...@@ -37,6 +37,10 @@
<key> <string>action</string> </key> <key> <string>action</string> </key>
<value> <string>Base_edit</string> </value> <value> <string>Base_edit</string> </value>
</item> </item>
<item>
<key> <string>action_title</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -135,7 +139,7 @@ ...@@ -135,7 +139,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Configutator Settings</string> </value> <value> <string>Configurator Settings</string> </value>
</item> </item>
<item> <item>
<key> <string>unicode_mode</string> </key> <key> <string>unicode_mode</string> </key>
......
...@@ -27,6 +27,7 @@ Site Property Configurator Item | view ...@@ -27,6 +27,7 @@ Site Property Configurator Item | view
Solver Configurator Item | view Solver Configurator Item | view
Standard BT5 Configurator Item | view Standard BT5 Configurator Item | view
System Preference Configurator Item | view System Preference Configurator Item | view
Transition | configurator_settings
Workflow | configurator_settings Workflow | configurator_settings
Workflow | launch_configuration Workflow | launch_configuration
portal_actions | use_configurator portal_actions | use_configurator
\ No newline at end of file
extension.erp5.ConfigurationTemplate_readOOoCalcFile extension.erp5.ConfigurationTemplate_readOOoCalcFile
extension.erp5.migrateWorkflowModuleToPortalWorkflow
\ No newline at end of file
Transition | ConfiguratorWorkflowTransition
Workflow | ConfiguratorWorkflow
Workflow | DefaultImage Workflow | DefaultImage
\ No newline at end of file
Workflow | WorkflowConfigurator
\ No newline at end of file
WorkflowConfigurator ConfiguratorWorkflow
\ No newline at end of file ConfiguratorWorkflowTransition
\ No newline at end of file
...@@ -165,6 +165,10 @@ def generatePortalTypeClass(site, portal_type_name): ...@@ -165,6 +165,10 @@ def generatePortalTypeClass(site, portal_type_name):
is_partially_generated = True is_partially_generated = True
return is_partially_generated, ((klass,), [], [], attribute_dict) return is_partially_generated, ((klass,), [], [], attribute_dict)
# TODO-BEFORE-MERGE: Hack for legacy Configurator Workflow
if portal_type_name == 'Variable':
portal_type_name = 'Workflow Variable'
# Do not use __getitem__ (or _getOb) because portal_type may exist in a # Do not use __getitem__ (or _getOb) because portal_type may exist in a
# type provider other than Types Tool. # type provider other than Types Tool.
portal_type = getattr(site.portal_types, portal_type_name, None) portal_type = getattr(site.portal_types, portal_type_name, None)
......
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