Simulation: splitted expand, performance improvements and bugfixes
All interactions and activity tags are reviewed to fix bugs like duplicated root applied rules, and also reduces the amount of duplicated/useless work, e.g: - Simulation trees are not expanded anymore when simulated objects are modified. - 'expand' activities are merged (i.e. dropped) with any other 'expand' activity for an ancestor. New implementation exposes new API that hides much complexity to the developper about activity dependencies. By default, expand() now automatically defers any work if the current transaction takes too long time. This method also gains a parameter to explicitely choose when to expand, which is often important in unit tests or solvers. In particular, when postponing work, it takes care of setting proper activity dependencies. - If you have any code requiring to expand everything immediately, you'll have to replace 'expand()' by 'expand(expand_policy="immediate")'. - On the contrary, you should replace any 'activate().expand()' by 'expand(expand_policy="deferred")'. expand() still accepts activity parameters for any extra needs. In causality workflow, 'building' state is clarified and now means « delivery may diverge but we can't know now ». A delivery remains in draft as long as it does not contain any movement built from simulation. After init/clone/builder/etc. scripts used to call 'startBuilding' & 'updateCausalityState': this calls must be removed since only SimulatedDeliveryBuilder should take care of move to 'building' state and workflows now triggers 'updateCausalityState'. Disguised interactions have been unhardcoded and either deleted, or moved to appropriate interaction workflows, which have been reorganized. Those that triggers update of portal_workflow can be easily customized or disabled. New API: - updateSimulation() on deliveries and subscription items. It takes care of creating root applied rule, expanding and reindexing parts of simulation trees. It somehow replaces: - Delivery_updateSimulation - Delivery_updateAppliedRule - Delivery.applyToDeliveryRelatedMovement - Delivery.updateAppliedRule - Delivery.expand - Delivery.expandRuleRelatedToMovement - SubscriptionItem.expand - SubscriptionItem.updateAppliedRule - Delivery.localBuild() is the new way to do local building and replaces Delivery_expandAndBuild. Private method Delivery._localBuild replaces Delivery_buildOnComposedDocument. - Simulation Movements that are being built by a builder are reindexed with the following tag: 'built:<delivery_path>'. Any after_path_and_method_id dependency against 'related_simulation_movement_path_list' and reindexing methods should be replaced by this after_tag. After builder scripts used to confirm the delivery in a separate activity, which was useless.
Showing
product/ERP5/ExpandPolicy.py
0 → 100644