Thursday, August 20, 2026
5 changes · 17.0
Resolved issues and error corrections
This fixes an issue where some database rules were repeatedly treated as changed even when they were effectively the same. It reduces unnecessary maintenance work during updates and helps keep system upgrades cleaner and more reliable.
Original PR description
A constraint definition like `"CHECK(name NOT LIKE '%% %%')"` was dropped and recreated every time because it was mistakenly considered as changed. The `%` char is replaced by `%%` in `tools.sql.add_constraint` Exemple in base: ``` Dropping and recreating constraint ir_model_fields_name_manual_field. Old "CHECK (state != 'manual' OR name LIKE 'x\\_%%')". New "CHECK (state != 'manual' OR name LIKE 'x\\_%')". Dropping and recreating constraint ir_model_data_name_nospaces. Old "CHECK(name NOT LIKE '%% %%')". New "CHECK(name NOT LIKE '% %')". ```
This fixes an edge case where a company sends an electronic invoice to itself through Peppol. The system no longer mistakes the incoming copy for a duplicate, so the related vendor bill can still be created correctly.
Original PR description
Edge case: self-addressed messages (sender == receiver). i.e. a company genuinely invoicing itself. The outgoing invoice already carries the message UUID, so the duplicate check would wrongly discard the incoming document. Exclude those messages from the check so the vendor bill can still be created. task-no --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users who request a migration in the French e-invoicing setup will now see a clearer, consistent message instead of an inaccurate “available tomorrow” timeline. This reduces confusion and sets better expectations while the migration is being handled.
Original PR description
Currently when the user requested a migration, we don't show it in any way to the user, and the only timeline we give ("available tomorrow") is completely false. Because we don't have any field we could use for this client-side (maybe from 19.3 we can use the catch-all-json field) So just make the message same for everybody.
no-taskThe live currency rate service now uses the Romanian central bank's new required web address for exchange-rate XML files. This prevents exchange rate updates from failing when the old address is retired in August 2026.
Original PR description
As of 6 August 2026, the XML files used by software applications to retrieve daily exchange rates will no longer be available directly through addresses on the www.bnr.ro domain and will be accessible exclusively via the curs.bnr.ro subdomain. The XML file names will remain unchanged; only the access domain will be modified. no-task
This fix ensures Swiss payroll payment files include the beneficiary name when employees are paid through Revolut. It helps prevent payment processing issues and improves compatibility with banking requirements.