Thursday, September 17, 2026
2 changes · saas-18.3
Resolved issues and error corrections
This fixes cases where a child contact could show an incorrect VAT validation result when processed before its parent company. VAT validation is now computed for parent companies first, ensuring related contacts inherit the correct status during imports or batch updates.
Original PR description
**Description of the issue/feature this PR addresses:** When a batch recompute of `vies_valid` contains both a parent (commercial) partner and a child sharing the same VAT, and the child happens to…
**Description of the issue/feature this PR addresses:**
When a batch recompute of `vies_valid` contains both a parent (commercial) partner and a child sharing the same VAT, and the child happens to be iterated before its parent, the child ends up with `vies_valid=False` instead of the parent's real, freshly-checked value.
**Current behavior before PR:**
`_compute_vies_valid` loops over `self` in whatever order the batch happens to have:
```python
for partner in self:
...
if partner.parent_id and partner.parent_id.vies_vat_to_check == partner.vies_vat_to_check:
partner.vies_valid = partner.parent_id.vies_valid
continue
status = partner._check_vies_iap()
partner._update_vies_status(status)
```
`Field.compute_value()` removes the whole batch from the "to compute" queue *before* running this loop (it does so upfront, in case the method does not assign every record). So when the loop reaches a child and reads `partner.parent_id.vies_valid` to reuse it, that field is no longer marked "to compute" for the parent, and reading it just returns whatever is currently cached/stored — which, if the parent has not been processed yet in this same loop, is still the old/default value. The child copies that stale value and, being a stored field, keeps it forever: nothing re-triggers its computation afterwards.
Example:
```python
parent = env['res.partner'].create({'name': 'Parent Co'})
child = env['res.partner'].create({'name': 'Child Address', 'parent_id': parent.id})
child.vat = 'BE0477472701' # queues the child's compute first
parent.vat = 'BE0477472701' # queues the parent's compute second
child.vies_valid # False, even though the VAT is valid
parent.vies_valid # True
```
**Desired behavior after PR is merged:**
Every partner without a parent is always computed before any child that may reuse its value, regardless of the batch's original order — so the child correctly ends up with the parent's real `vies_valid`.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#279927This fix makes point-of-sale test flows load customer records in a consistent way by forcing a backend search when needed. It helps avoid unreliable automated test results caused by customer loading order, improving confidence in POS and restaurant POS validation.
Original PR description
Added an explicit config on partner search which explicitly triggers a backend search when enabled to ensure the partner load order doesn't affect the result of tours where it's irrelevant. Runbot-[#233397](https://runbot.odoo.com/odoo/error/233397) Task-[6522073](https://www.odoo.com/odoo/project/1737/tasks/6482065/project.task/6522073) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr