3a4a7b161b47439ffda53c8aefc5aee2199211d9
The cache currectly fails to correctly invalidate relational fields that depend on a non-relational field. Two passes of invalidation are done, to reflect dependencies on both the old and the new written values. In the first pass only relational fields are considered, as explained in the comments: > It is best explained with a simple example: consider two sales orders SO1 and SO2. The computed total amount on sales orders indirectly depends on the many2one field 'order_id' linking lines to their sales order. Now consider the following code: > > line = so1.line_ids[0] # pick a line from SO1 > line.order_id = so2 # move the line to SO2 > > In this situation, the total amount must be recomputed on *both* sales order: the line's order before the modification, and the line's order after the modification. The written values can be seen as the roots of a dependency forest (a collection of dependency trees). Before this commit all non-relational roots and their corresponding trees were filtered out during the first pass. However, this approach is wrong, as relational fields can also depend on non-relational fields. Instead, the complete dependency forest has to be traversed, skipping invalidation for non-relational fields during the first pass. The test that was previously included accidentally succeeded because of a separate and unrelated bug in the orm domain parser: in certain one2many or many2many leafs the domain parser would not take into consideration the domain included in the definition of the field. As a result, the test still passed by accident, because the records that no longer matched the domain after the write were still invalidated during the second pass. The problem can clearly be demonstrated, however, when the dependency is generated by a compute function. closes odoo/odoo#101038 X-original-commit: d4a5827b42d80f0f830455dcd2056701eb09aed1 Signed-off-by: Rémy Voet <ryv@odoo.com> Signed-off-by: Raphael Collet <rco@odoo.com> Co-authored-by: Raphael Collet <rco@odoo.com>
…
…
…
…
Odoo
Odoo is a suite of web based open source business apps.
The main Odoo Apps include an Open Source CRM, Website Builder, eCommerce, Warehouse Management, Project Management, Billing & Accounting, Point of Sale, Human Resources, Marketing, Manufacturing, ...
Odoo Apps can be used as stand-alone applications, but they also integrate seamlessly so you get a full-featured Open Source ERP when you install several Apps.
Getting started with Odoo
For a standard installation please follow the Setup instructions from the documentation.
To learn the software, we recommend the Odoo eLearning, or Scale-up, the business game. Developers can start with the developer tutorials
Languages
Python
49.6%
JavaScript
47.8%
SCSS
2%
CSS
0.3%
HTML
0.2%