Commit a6aabb2b authored by Romain Courteaud's avatar Romain Courteaud

slapos_accounting: XXXXXXXXXXXXXXXXXX reduce number of open order expand calls

There is no need to quickly generate the Sale Packing List if no Invoice will be generated.

slapos_accounting: alarm to create new simulation tree from Hosting Subscription

This alarm does not crawl all Open Order, and so, should reduce number of open order calls

slapos_accounting: speed up the first invoice creation
parent 39204b13
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Alarm" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>active_sense_method_id</string> </key>
<value> <string>Alarm_createSlapOSHostingSubscriptionSimulation</string> </value>
</item>
<item>
<key> <string>automatic_solve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>slapos_accounting_create_hosting_subscription_simulation</string> </value>
</item>
<item>
<key> <string>periodicity_day_frequency</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>periodicity_hour</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>periodicity_minute</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>periodicity_minute_frequency</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>periodicity_month</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>periodicity_month_day</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>periodicity_start_date</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="DateTime" module="DateTime.DateTime"/>
<global name="object" module="__builtin__"/>
<none/>
</tuple>
<state>
<tuple>
<float>36000.0</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>periodicity_week</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Alarm</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Create Hosting Subscriptions Simulation</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
portal = context.getPortalObject()
kw = {}
# Search for the related root applied rule
select_dict = {'causality__related__uid': None}
kw.update(
portal_type='Hosting Subscription',
ledger__uid=portal.portal_categories.ledger.automated.getUid(),
# This is an optimisation to help mariadb selecting a better index
validation_state=['validated'],
left_join_list=select_dict.keys(),
causality__related__uid=None,
method_id='updateSimulation',
packet_size=1, # Separate calls to many transactions
method_kw={'expand_root': 1},
activate_kw={'tag': tag},
)
portal.portal_catalog.searchAndActivate(
**kw
)
# register activity on alarm object waiting for own tag in order to have only one alarm
# running in same time
context.activate(after_tag=tag).getId()
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
<global name="object" module="__builtin__"/>
<none/>
</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>_params</string> </key>
<value> <string>tag, fixit, params</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Alarm_createSlapOSHostingSubscriptionSimulation</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -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>
......
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'])
......@@ -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>
......
......@@ -18,6 +18,7 @@ business_process_module/slapos_sale_subscription_business_process
business_process_module/slapos_sale_subscription_business_process/**
currency_module/CNY
currency_module/EUR
portal_alarms/slapos_accounting_create_hosting_subscription_simulation
portal_alarms/slapos_accounting_generate_packing_list_from_tioxml
portal_alarms/slapos_archive_open_sale_order_with_unused_item
portal_alarms/slapos_cancel_sale_invoice_transaction_paied_payment_list
......
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