diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/building.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/building.xml
index 4181ab934435f27c935d364e0c7963fabf3c10ad..53266c8a2d7a905fab9482c41549a5c7fb0e2d62 100644
--- a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/building.xml
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/building.xml
@@ -30,6 +30,7 @@
converge
diverge
+ freeze
solve_automatically
start_building
diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/calculating.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/calculating.xml
index 26571da5ec09d460a147d24e41b22e78a28ad056..a3ab6af58418d69cdb4463c9dd02f40e0b9e1111 100644
--- a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/calculating.xml
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/calculating.xml
@@ -30,6 +30,7 @@
converge
diverge
+ freeze
solve_automatically
solve_divergence
solve_divergence_action
diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/diverged.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/diverged.xml
index 5f766037225fa921c821caca68757fdb9233e67f..688c00d7080695b7296f057fcf077c87094b390a 100644
--- a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/diverged.xml
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/diverged.xml
@@ -31,6 +31,7 @@
calculate
converge
diverge
+ freeze
solve_automatically
solve_divergence
solve_divergence_action
diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/draft.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/draft.xml
index 29db4dd2abc44704fb3e9d06112e79ca0f63d78c..c6444fc45ce4914a3604457a8c2bd939e7ce66d1 100644
--- a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/draft.xml
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/draft.xml
@@ -28,6 +28,7 @@
transitions
+ freeze
start_building
diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/frozen.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/frozen.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b3d62f51690ba75045a7965e3c9cfa5a9b6a8590
--- /dev/null
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/frozen.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+ -
+ description
+ The document is no longer simulated.
+
+ -
+ id
+ frozen
+
+ -
+ permission_roles
+
+ AAAAAAAAAAI=
+
+
+ -
+ title
+ Frozen
+
+ -
+ transitions
+
+
+
+
+ -
+ type_list
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ data
+
+
+
-
+ Add portal content
+
+
+
+
+ -
+ Modify portal content
+
+
+ Manager
+
+
+
+
+
+
+
+
+
+
diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solved.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solved.xml
index 79f1615fb9d4311656774d13c82a8d7bf8141439..77e75e1876ec49b9b46f21575e70223e0f89c902 100644
--- a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solved.xml
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solved.xml
@@ -31,6 +31,7 @@
calculate
converge
diverge
+ freeze
solve_automatically
start_building
diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solving.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solving.xml
index fe57912c1a4d13a45c93ed18525f2b7e3a2ed019..50e8eaf7b54347fe103087fd990c30184b234744 100644
--- a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solving.xml
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/states/solving.xml
@@ -30,6 +30,7 @@
converge
diverge
+ freeze
diff --git a/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/transitions/freeze.xml b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/transitions/freeze.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f85abad44f9ce04d5604cdb924469e03220a8c2d
--- /dev/null
+++ b/bt5/erp5_base/WorkflowTemplateItem/portal_workflow/delivery_causality_workflow/transitions/freeze.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+ -
+ actbox_category
+ workflow
+
+ -
+ actbox_icon
+
+
+ -
+ actbox_name
+
+
+ -
+ actbox_url
+
+
+ -
+ after_script_name
+
+
+ -
+ description
+ Make the document no longer simulated.
+
+ -
+ guard
+
+ AAAAAAAAAAI=
+
+
+ -
+ id
+ freeze
+
+ -
+ new_state_id
+ frozen
+
+ -
+ script_name
+
+
+ -
+ title
+ Freeze
+
+ -
+ trigger_type
+ 2
+
+
+
+
+
+
+
+
+
+
+ -
+ permissions
+
+
+ Modify portal content
+
+
+
+
+
+
+
diff --git a/product/ERP5/ERP5Defaults.py b/product/ERP5/ERP5Defaults.py
index 05c351b7b8fe1b3270d93144eafe97cc4659081d..13a4b0157a44ea59babc88a623675ba7c306b5c2 100644
--- a/product/ERP5/ERP5Defaults.py
+++ b/product/ERP5/ERP5Defaults.py
@@ -224,3 +224,4 @@ portal_current_inventory_state_list = ('delivered', 'started', 'stopped', 'invoi
portal_updatable_amortisation_transaction_state_list = ('draft',)
+portal_frozen_causality_state_list = ('frozen',)
diff --git a/product/ERP5/ERP5Site.py b/product/ERP5/ERP5Site.py
index bcaed78514ddbd4b1abf2e6eb3a17142b97f2220..af4c966e9a6e9a6399eddb690fc7945aefca4786 100644
--- a/product/ERP5/ERP5Site.py
+++ b/product/ERP5/ERP5Site.py
@@ -1287,6 +1287,14 @@ class ERP5Site(FolderMixIn, CMFSite, CacheCookieMixin):
return self._getPortalConfiguration(
'portal_updatable_amortisation_transaction_state_list')
+ security.declareProtected(Permissions.AccessContentsInformation,
+ 'getPortalFrozenCausalityStateList')
+ def getPortalFrozenCausalityStateList(self):
+ """
+ Return all causality states where the document is no longer simulated.
+ """
+ return self._getPortalConfiguration('portal_frozen_causality_state_list')
+
security.declareProtected(Permissions.AccessContentsInformation,
'getPortalGroupedSimulationStateList')
def getPortalGroupedSimulationStateList(self):
diff --git a/product/ERP5/mixin/rule.py b/product/ERP5/mixin/rule.py
index c63c9486519000b099f91b896c95a1bf09e94864..e5b814e0af8d3685b3b4815f37a56c322b019b43 100644
--- a/product/ERP5/mixin/rule.py
+++ b/product/ERP5/mixin/rule.py
@@ -495,6 +495,8 @@ class SimulableMixin(Base):
See _updateSimulation for accepted parameters.
"""
+ if self.getCausalityState() in self.getPortalFrozenCausalityStateList():
+ return
tv = getTransactionalVariable()
key = 'SimulableMixin.updateSimulation', self.getUid()
item_list = kw.items()