Skip to content

[18.0][FIX] auditlog: fix caching; [ADD] test_auditlog - #3374

Merged
OCA-git-bot merged 3 commits into
OCA:18.0from
StefanRijnhart:18.0-auditlog-fix-cache_sanitation
Oct 1, 2025
Merged

[18.0][FIX] auditlog: fix caching; [ADD] test_auditlog#3374
OCA-git-bot merged 3 commits into
OCA:18.0from
StefanRijnhart:18.0-auditlog-fix-cache_sanitation

Conversation

@StefanRijnhart

Copy link
Copy Markdown
Member

Port of #3371

Fix caching and add a dedicated test module to run tests on the accounting models.

Fixes creating credit notes with audit rules on account.move.line, writing taxes on products as a user that does not have access to all companies for which there are taxes on the product, and more.

Fixes #3308, #3224, #2561, #2554

Includes a port of #3364.

@StefanRijnhart StefanRijnhart added this to the 18.0 milestone Sep 16, 2025
@StefanRijnhart
StefanRijnhart force-pushed the 18.0-auditlog-fix-cache_sanitation branch from cc5a259 to 66bb147 Compare September 16, 2025 19:33
@StefanRijnhart
StefanRijnhart marked this pull request as ready for review September 16, 2025 19:43
@StefanRijnhart
StefanRijnhart force-pushed the 18.0-auditlog-fix-cache_sanitation branch from 66bb147 to 6b80671 Compare September 18, 2025 11:38
Though TransactionCase rolls back database changes, it does not
call `unlink` on `auditlog.rule` records, meaning that `unsubscribe`
is never called to unpatch model methods. This causes subsequent
tests in other modules to unexpectedly execute patched methods.

This commit adds the `AuditLogRuleCommon` test class in an
attempt to identify and prevent patched methods from contaminating
the test environment.
@StefanRijnhart
StefanRijnhart force-pushed the 18.0-auditlog-fix-cache_sanitation branch from 6b80671 to 4b164b5 Compare September 24, 2025 17:31

@DavidJForgeFlow DavidJForgeFlow left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this fix, it works!

odoo/odoo#228606

@OCA-git-bot

Copy link
Copy Markdown
Contributor

This PR has the approved label and has been created more than 5 days ago. It should therefore be ready to merge by a maintainer (or a PSC member if the concerned addon has no declared maintainer). 🤖

@LoisRForgeFlow LoisRForgeFlow left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! 🎖️

/ocabot merge patch

@OCA-git-bot

Copy link
Copy Markdown
Contributor

On my way to merge this fine PR!
Prepared branch 18.0-ocabot-merge-pr-3374-by-LoisRForgeFlow-bump-patch, awaiting test results.

@OCA-git-bot
OCA-git-bot merged commit 91e55a6 into OCA:18.0 Oct 1, 2025
7 checks passed
@OCA-git-bot

Copy link
Copy Markdown
Contributor

Congratulations, your PR was merged at 233a622. Thanks a lot for contributing to OCA. ❤️

StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.

After this fix, it seems a flush that seemed necessary in the 18.0 port of OCA#3374
can also be removed.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.

After this fix, it seems a flush that seemed necessary in the 18.0 port of OCA#3374
can also be removed.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.

After this fix, it seems a flush that seemed necessary in the 18.0 port of OCA#3374
can also be removed.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.

After this fix, it seems a flush that seemed necessary before can also be
removed.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
@StefanRijnhart

Copy link
Copy Markdown
Member Author

See #3407 for an important fix for this change.

StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Oct 6, 2025
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 2, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 2, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 2, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 2, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 2, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 4, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 4, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 4, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 4, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 11, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
StefanRijnhart added a commit to StefanRijnhart/server-tools that referenced this pull request Jan 20, 2026
Steps to Reproduce:

Install auditlog and purchase_tier_validation. Create an auditlog rule on
the Tier Exception model. Create a new tier exception record for the purchase
order model without any fields. In an export, check the value for the stored
computed field `model_name`.

Desired outcome:

The value for `model_name` is 'purchase.order'.

Actual outcome:

There is no value for the stored computed field `model_name`. When trying to
edit the `Fields` model, which depends on a valid value for this field, an error
occurs saying 'Compute method failed to assign
tier.validation.exception(1,).valid_model_field_ids'.

Analysis:

When `read` is executed under the scope of the new `ThrowAwayCache` decorator
(OCA#3374), recomputes may be performed and dequeued from
`self.env.cache.transaction.tocompute`. To make sure the recomputed values still
end up in the non-volatile as well, we need to preserve the tocompute attribute
from the original transaction.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[17.0] ORM caches many2many field on write without applying company rules

6 participants