From a4eb816f0d43fcd536f665687eecf3e814c44f87 Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Wed, 11 Sep 2024 15:15:29 +0000
Subject: [PATCH] slapos_accounting: speed up the first invoice creation

It should reduce number of open order expand calls.
---
 .../interaction_OpenSaleOrder_validate.xml        |  2 +-
 ...cript_Base_triggerUpdateOpenOrderSimulation.py |  1 -
 ...nSaleOrder_triggerUpdateOpenOrderSimulation.py | 15 +++++++++++++++
 ...aleOrder_triggerUpdateOpenOrderSimulation.xml} |  2 +-
 4 files changed, 17 insertions(+), 3 deletions(-)
 delete mode 100644 master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation.py
 create mode 100644 master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.py
 rename master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/{script_Base_triggerUpdateOpenOrderSimulation.xml => script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.xml} (96%)

diff --git a/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/interaction_OpenSaleOrder_validate.xml b/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/interaction_OpenSaleOrder_validate.xml
index 09ce0c139..876a8718d 100644
--- a/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/interaction_OpenSaleOrder_validate.xml
+++ b/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/interaction_OpenSaleOrder_validate.xml
@@ -10,7 +10,7 @@
             <key> <string>categories</string> </key>
             <value>
               <tuple>
-                <string>after_script/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation</string>
+                <string>after_script/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation</string>
               </tuple>
             </value>
         </item>
diff --git a/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation.py b/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation.py
deleted file mode 100644
index d9157efd6..000000000
--- a/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation.py
+++ /dev/null
@@ -1 +0,0 @@
-return state_change['object'].Base_reindexAndSenseAlarm(['update_open_order_simulation'])
diff --git a/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.py b/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.py
new file mode 100644
index 000000000..52a1e2eac
--- /dev/null
+++ b/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.py
@@ -0,0 +1,15 @@
+from DateTime import DateTime
+open_sale_order = state_change['object']
+tag = 'script_Base_triggerCreateHostingSubscriptionSimulation'
+current_date = DateTime()
+
+# Prevent creating empty applied rule if not simulation movement
+# will be created
+# Sadly, this is probably nearly for tests which freeze date
+start_date = open_sale_order.getStartDate()
+if (start_date is not None) and (start_date < current_date):
+  for open_order_line in open_sale_order.objectValues():
+    for ob in [open_order_line] + open_order_line.getCellValueList():
+      for item in ob.getAggregateValueList(portal_type='Hosting Subscription'):
+        ob.reindexObject(activate_kw={'tag': tag})
+        item.activate(after_tag=tag, activity='SQLQueue').Base_reindexAndSenseAlarm(['slapos_accounting_create_hosting_subscription_simulation'])
diff --git a/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation.xml b/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.xml
similarity index 96%
rename from master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation.xml
rename to master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.xml
index 491815135..69d48d8b6 100644
--- a/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_Base_triggerUpdateOpenOrderSimulation.xml
+++ b/master/bt5/slapos_accounting/WorkflowTemplateItem/portal_workflow/slapos_simulation_interaction_workflow/script_OpenSaleOrder_triggerUpdateOpenOrderSimulation.xml
@@ -60,7 +60,7 @@
         </item>
         <item>
             <key> <string>id</string> </key>
-            <value> <string>script_Base_triggerUpdateOpenOrderSimulation</string> </value>
+            <value> <string>script_OpenSaleOrder_triggerUpdateOpenOrderSimulation</string> </value>
         </item>
         <item>
             <key> <string>title</string> </key>
-- 
2.30.9