From d1570751a4acc0ca6888dfb6cd5845973a02d274 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Nowak?= <luke@nexedi.com>
Date: Wed, 7 Mar 2012 15:33:08 +0100
Subject: [PATCH] Try to fix consistency of Open Sale Orders.

---
 .../workflow_chain_type.xml                   |   4 +
 ..._fixEffectiveExpirationDateConsistency.xml | 105 ++++++++++++++++++
 .../OpenSaleOrder_fixConsistency.xml          |  96 ++++++++++++++++
 .../scripts/OpenSaleOrder_fixConsistency.xml  |  68 ++++++++++++
 master/bt5/vifib_slap/bt/revision             |   2 +-
 .../template_portal_type_workflow_chain_list  |   1 +
 6 files changed, 275 insertions(+), 1 deletion(-)
 create mode 100644 master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/OpenSaleOrder_fixEffectiveExpirationDateConsistency.xml
 create mode 100644 master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/interactions/OpenSaleOrder_fixConsistency.xml
 create mode 100644 master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/scripts/OpenSaleOrder_fixConsistency.xml

diff --git a/master/bt5/vifib_slap/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml b/master/bt5/vifib_slap/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
index 80a13446c..ee8a104d4 100644
--- a/master/bt5/vifib_slap/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
+++ b/master/bt5/vifib_slap/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
@@ -15,6 +15,10 @@
   <type>Internal Packing List</type>
   <workflow>slap_interaction_workflow</workflow>
  </chain>
+ <chain>
+  <type>Open Sale Order</type>
+  <workflow>slap_interaction_workflow</workflow>
+ </chain>
  <chain>
   <type>Person</type>
   <workflow>person_slap_interface_workflow, slap_interaction_workflow</workflow>
diff --git a/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/OpenSaleOrder_fixEffectiveExpirationDateConsistency.xml b/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/OpenSaleOrder_fixEffectiveExpirationDateConsistency.xml
new file mode 100644
index 000000000..eddda1bca
--- /dev/null
+++ b/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/OpenSaleOrder_fixEffectiveExpirationDateConsistency.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <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>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>from DateTime import DateTime\n
+from Products.ZSQLCatalog.SQLCatalog import Query, NegatedQuery\n
+state = context.getValidationState()\n
+validated = state == \'validated\'\n
+archived = state == \'archived\'\n
+\n
+if state == \'archived\':\n
+  if context.getEffectiveDate() is None or context.getExpirationDate() is None:\n
+    if context.getExpirationDate() is None:\n
+      # is there any validated order?\n
+      validated_open_order = context.getPortalObject().portal_catalog.getResultValue(\n
+        portal_type=\'Open Sale Order\',\n
+        reference=context.getReference(),\n
+        simulation_state=\'validated\',\n
+      )\n
+      expiration_date = DateTime()\n
+      if validated_open_order is not None: \n
+        expiration_date = validated_open_order.getEffectiveDate()\n
+        if expiration_date is None:\n
+          raise NotImplementedError(\'Inform that it was impossible to fix as validated has no effective date.\')\n
+      context.setExpirationDate(expiration_date)\n
+\n
+if context.getEffectiveDate() is not None:\n
+  # ok\n
+  return\n
+# is there any archived open sale order?\n
+archived_open_order = context.getPortalObject().portal_catalog.getResultValue(\n
+  portal_type=\'Open Sale Order\',\n
+  reference=context.getReference(),\n
+  simulation_state=\'archived\',\n
+  uid=NegatedQuery(Query(uid=context.getUid())),\n
+  sort_on=((\'expiration_date\', \'descending\'),)\n
+)\n
+effective_date = DateTime()\n
+if archived_open_order is not None:\n
+  effective_date = archived_open_order.getExpirationDate()\n
+  if effective_date is None:\n
+    raise NotImplementedError(\'Inform that it was impossible to fix as archived order has no expiration date.\')\n
+context.setEffectiveDate(effective_date)\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>OpenSaleOrder_fixEffectiveExpirationDateConsistency</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/interactions/OpenSaleOrder_fixConsistency.xml b/master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/interactions/OpenSaleOrder_fixConsistency.xml
new file mode 100644
index 000000000..95d2f0503
--- /dev/null
+++ b/master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/interactions/OpenSaleOrder_fixConsistency.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="InteractionDefinition" module="Products.ERP5.Interaction"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>actbox_category</string> </key>
+            <value> <string>workflow</string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>actbox_url</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>activate_script_name</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>after_script_name</string> </key>
+            <value>
+              <list>
+                <string>OpenSaleOrder_fixConsistency</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>before_commit_script_name</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>guard</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>OpenSaleOrder_fixConsistency</string> </value>
+        </item>
+        <item>
+            <key> <string>method_id</string> </key>
+            <value>
+              <list>
+                <string>fixConsistency</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>once_per_transaction</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>portal_type_filter</string> </key>
+            <value>
+              <list>
+                <string>Open Sale Order</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>script_name</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>temporary_document_disallowed</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>trigger_type</string> </key>
+            <value> <int>2</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/scripts/OpenSaleOrder_fixConsistency.xml b/master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/scripts/OpenSaleOrder_fixConsistency.xml
new file mode 100644
index 000000000..054452e70
--- /dev/null
+++ b/master/bt5/vifib_slap/WorkflowTemplateItem/portal_workflow/slap_interaction_workflow/scripts/OpenSaleOrder_fixConsistency.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <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>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>open_sale_order = state_change[\'object\']\n
+open_sale_order.OpenSaleOrder_fixEffectiveExpirationDateConsistency()\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>state_change</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>OpenSaleOrder_fixConsistency</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/master/bt5/vifib_slap/bt/revision b/master/bt5/vifib_slap/bt/revision
index a9ba1259c..6f4cec90d 100644
--- a/master/bt5/vifib_slap/bt/revision
+++ b/master/bt5/vifib_slap/bt/revision
@@ -1 +1 @@
-607
\ No newline at end of file
+608
\ No newline at end of file
diff --git a/master/bt5/vifib_slap/bt/template_portal_type_workflow_chain_list b/master/bt5/vifib_slap/bt/template_portal_type_workflow_chain_list
index 0464c0d54..2cc3670fa 100644
--- a/master/bt5/vifib_slap/bt/template_portal_type_workflow_chain_list
+++ b/master/bt5/vifib_slap/bt/template_portal_type_workflow_chain_list
@@ -4,6 +4,7 @@ Computer Partition | slap_interaction_workflow
 Computer | computer_slap_interface_workflow
 Computer | slap_interaction_workflow
 Internal Packing List | slap_interaction_workflow
+Open Sale Order | slap_interaction_workflow
 Person | person_slap_interface_workflow
 Person | slap_interaction_workflow
 Purchase Packing List Line | slap_interaction_workflow
-- 
2.30.9