Daily updates from Odoo
Tuesday, July 22, 2025
6 changes · master
Enhancements to existing features
This update prevents Odoo from showing misleading warnings when internal processes update fields that users cannot edit directly. It reduces noise in automated workflows and test scenarios across several business apps without changing everyday user behavior.
Resolved issues and error corrections
AI-generated values for HTML fields now keep the same formatting regardless of optional conversion tools installed on the system. This prevents inconsistent output and resolves related automated test failures, improving reliability for teams using AI fields.
Original PR description
Purpose: ------- After the changes introduced in commit e6438de, depending on if markdown2 is installed or not, ai values for html fields did not have the same format (a trailing "\n" was added with markdown2). This commit removes the unnecessary "\n" added by markdown2. Fixes runbot errors 230097 and 230098
Users with view-only access to shared PDF documents no longer see the split PDF option. This prevents them from running an action they are not allowed to complete, avoiding a confusing error and improving the document sharing experience.
Original PR description
When a user with only view permissions attempts to split a PDF, an error occurs: Unexpected token '<', "<!doctype "... is not valid JSON **Steps to Reproduce:** - Go to Documents. - Choose a PDF file. - Click on Share and select Internal Users with Viewer permission. - Copy the generated link. - Open the link in another window as a non-manager user. - Click on split PDF then split The fix consists in hiding the pdf split functionality for users without edit permission. opw-4354451 Forward-Port-Of: odoo/enterprise#89764 Forward-Port-Of: odoo/enterprise#75803
This fixes a configuration issue in Swiss payroll ELM transmission by removing an inappropriate default value from a linked setting. It helps ensure payroll transmission settings reflect the company configuration correctly and avoids misleading preset values.
Original PR description
…lated field Forward-Port-Of: odoo/enterprise#90490 Forward-Port-Of: odoo/enterprise#90425
Users without administrator settings access can now use the Reload AI Data button on invoices without hitting an access error. This keeps AI-powered invoice processing available to functional users while preserving the existing tax localization check.
Original PR description
When clicking on the "Reload AI Data" button (`account.move::action_reload_ai_data`), a user not in `base.group_system` group encounters an access rights error when searching on `ir.module.module` model in `account.move::is_indian_taxes()`:
```python
def is_indian_taxes(self):
l10n_in = self.env['ir.module.module'].search([('name', '=', 'l10n_in')])
return self.company_id.country_id.code == "IN" and l10n_in and l10n_in.state == 'installed'
```
This commit adds `sudo()` to the `search` call to ensure that the check for the 'l10n_in' module does not fail for users not belonging to "Administration/Settings" group.
This prevents a traceback and ensures that functional users can reload AI data.
Forward-Port-Of: odoo/enterprise#90021Code cleanup and technical improvements
This change makes automated checks in Odoo Studio wait for the exact content they need before continuing. It reduces intermittent test failures, helping teams validate Studio reporting behavior more consistently without changing end-user functionality.
Original PR description
In this commit, we simplify the assertions made in run functions with more explicit triggers that use Hoot's pseudo-selectors. This is almost the same thing, except that the macro system waits to…
In this commit, we simplify the assertions made in run functions with more explicit triggers that use Hoot's pseudo-selectors. This is almost the same thing, except that the macro system waits to find the trigger (animationFrame by animationFrame). If, for some reason, the parent element already exists but not the child element sought in the run function, then the tour spits out... indeterministically.
So this commit can also fix tours.
For example:
{
trigger: ".o-web-studio-report-container :iframe body",
run() {
assertEqual(
this.anchor.querySelector(".test-added-0").textContent,
"in document view"
);
assertEqual(this.anchor.querySelector(".test-added-1").textContent, "in main view");
},
},
:iframe body is present but not ".test-added-0" yet ... then the assertion failed when it is enough just to wait for the element to be in the dom.
Is fixed with :
{
trigger: ".o-web-studio-report-container :iframe body .test-added-0:contains(in document view)",
},
{
trigger: ".o-web-studio-report-container :iframe body .test-added-1:contains(in main view)",
}
Forward-Port-Of: odoo/enterprise#90404