Friday, August 8, 2025
20 changes · saas-18.4
Enhancements to existing features
Renaming website builder snippets no longer triggers an unnecessary server request just to refresh snippet templates. This makes the rename action more efficient and helps avoid needless background processing without changing user-facing behavior.
Original PR description
After this [commit] `load` function with orm call was performed only for the purpose of recomputing snippets templates, when only snippet names were changed, which is unnecessary. [commit]: https://github.com/odoo/odoo/commit/544bb048c6688eae2c445e059b3abbf502660d37
Resolved issues and error corrections
Users can now move content snippets between empty drop zones on shop pages without the action being cancelled. This makes page editing more reliable when arranging eCommerce content around product sections.
Original PR description
Steps to reproduce: - With eCommerce installed, go to the /shop page and go in edit mode. - Drop a "Text - Image" snippet on the dropzone above the products. - Drag this snippet and drop it on the dropzone under the products. => Nothing happens, the drag and drop was cancelled. This happens because the code checking if a change happened (in order to cancel the drag and drop if there is none) was only checking if the new siblings are the same as the old ones. This check is wrong when the dragged snippet had no siblings and is then dropped in an element where it ends up with no siblings too, as both the old and the new ones are `null`, making the condition `true` and cancelling the move. This commit fixes that by also checking if the parent is the same as the old one, making all possible situations covered. task-4367641
This update makes an automated website test more stable by allowing extra time for a popup to appear before checking that it closes correctly. It helps reduce random test failures in the validation pipeline, giving teams more confidence in release checks without changing customer-facing behavior.
Original PR description
Before to this commit, the ‘closing s_popup with the X button updates the invisible elements panel’ test failed from sometimes on runbot. We think boostrap.js takes longer than normal to display the popup. Solution: We're going to increase the waiting timeout so that the crash doesn't recur. We've taken this decision because the problem is very specific and probably link to bootstrap.js. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Saving website pages now resets carousels to their first slide in a way that avoids errors in Product snippets. This helps prevent editor save failures and keeps carousel content consistent after editing.
Original PR description
When saving the editor, the carousels are restored so they all have their first slide as the active one. Before the refactoring, it was done manually (so the attributes and classes were adapted explicitely). But with the refactoring, it is now done automatically by sliding the carousels to the first slide. This causes a traceback when saving the "Products" snippets, because it has no control indicators. Note that the traceback does not appear since commit [1], but it was only fixed by chance. [1]: 80b5db99a3c26c3dd4fb5c55e04b8813dddb5b8d task-4367641
Closing the website theme picker no longer triggers an error after starting a theme switch. This prevents an unnecessary interruption for website editors and lets them exit the theme selection flow normally.
Original PR description
How to reproduce:
================
- Switch to debug mode
- Edit a website page
- Switch to the theme tab
- Click on switch theme
- Click on ok (dialog)
- Close the Pick a Theme action (close button).
Before this commit:
We have an error validating the props. websiteId is equal to null which
is not an accepted value.
After this commit:
The action closes correctly.
Description of the issue/feature this PR addresses:
Current behavior before PR:
Desired behavior after PR is merged:
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes an issue where meetings created from a contact could lose the intended contact link because an empty identifier was saved instead of the expected default. Users should now see newly created meetings correctly associated with the selected contact, improving reliability in calendar scheduling workflows.
Original PR description
To reproduce:
=============
- Pick any contact
- Click on meeting
- Select the time for the meeting with that contact
- Click on more options
- Add a meeting and save
- Click on meeting & contact
Problem:
========
- When creating calendar events, res_id=0 is passed in vals_list
- Events are created with res_id=0 instead of using default value
Solution:
=========
- Add separate handling for res_id in vals_list processing
- Apply defaults.get('res_id') when vals.get('res_id') is falsy
opw-4892445
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#221993
Forward-Port-Of: odoo/odoo#216042Previewing and then leaving a website builder option no longer marks unchanged pages as modified. This prevents unaffected website or report views from being saved unnecessarily, reducing accidental updates and improving editing reliability.
Original PR description
Before this commit, in the website builder, previewing an option could
ley the o_dirty class, which caused an unaffected view to be saved.
Why:
===
When the preview is removed, normalise is called, which can add
mutations to the DOM, and handleNewRecords was called afterwards,
which caused the addition of o_dirty.
Solution:
========
We believe that o_dirty should only be added to views that have been
modified by the user and not by normalise. handleNewRecords should ignore
mutations created by normalise.
How to reproduce:
================
- Go to the website builder.
- Preview an action.
- When you unpreview, normalise should modify the DOM.
Before this commit:
The o_dirty class is present.
After this commit:
The o_dirty class is not present because no user modifications have taken place.
This commit will fix the same type of problem in the report editor.Notification messages for invitation emails and password reset instructions now use corrected grammar. This improves the clarity and professionalism of user-facing communication without changing any functionality.
Original PR description
**Before this commit:** - The notifications for `Send an Invitation Email` and `Send Password Reset Instructions` contained grammatical mistakes. **After this commit:** - The grammatical mistakes have been corrected. task-4975439 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220840
This fix makes internal links from website navigation popovers behave like regular website links while editing. It keeps users in the expected website editing context, avoiding pages opening outside the backend editing experience.
Original PR description
Reproduction: 1. click a nav bar menu link, wait for the popover 2. click the link in the popover, the page is opened in another tab out of the backend. For a link having an internal link in the normal editing zone, the opened page is in backend, e.g. the `Edit` button is shown. After this commit: we set the website link_popover template inherit mode as `extension` to alter the template directly instead of creating a new one. All the inheritance of the link_popover will be properly have website feature when website is installed --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log int
Original PR description
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct…
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log into to one of the demo Argentinean Companies: (AR) Responsable Inscripto 4. Create a customer invoices of type "B" 5. Go to the partner and change the Language to Spanish 6. Return to the invoice and print the PDF 7. Check that the VAT Content section is not translated. ### **Current behavior before PR:** <img width="572" height="407" alt="image" src="https://github.com/user-attachments/assets/e28e609e-2cd2-4ace-9509-f969692ec893" /> ### **Desired behavior after PR is merged:** The "VAT Content section should appear as "IVA Contenido" when printing the report in Spanish. opw-4938520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221832 Forward-Port-Of: odoo/odoo#219912
This fix prevents module installation from failing when an index definition is empty or missing. Odoo now skips those invalid index requests instead of sending them to the database, making installations more reliable without changing user-facing behavior.
Original PR description
Currently when trying to create an index with a falsy definition, either a string or a callable, psql raises a SyntaxError preventing the installation of the module. This commit fixes that by skipping the index creation in case of a falsy definition. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222188 Forward-Port-Of: odoo/odoo#222080
This fix prevents an error when a company installs its chart of accounts after initial setup and then validates the Tax Returns onboarding flow. It ensures the required accounting onboarding is available, helping users complete fiscal year setup without interruption.
Original PR description
For companies that didn't have COA installed, they didn't have onboarding created leading to traceback when setting up fiscal year onboarding for Tax Returns. Steps to reproduce: * A company installed but don't have COA. * Install COA from settings. * In Accounting Dashboard -> Tax Returns * Traceback when validating the return wizard. task-4981853 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222181
Drilling into Task Analysis report counts now shows only the relevant Field Service tasks instead of all tasks. This keeps report details aligned with the selected Field Service data and reduces confusion for users reviewing workload or assignments.
Original PR description
Issue: - When the user drills down in the pivot view, all tasks are displayed. Cause: - The action was not passing the FSM project domain. Fix: - In this commit, we have passed the FSM project domain, so that only the relevant FSM tasks will be displayed during drill down. Steps to reproduce: - Install the industry_fsm module. - Go to Industry > Reporting > Task Analysis. - Group by Assignees. - Check any count column number and drill down. task-4688139 Forward-Port-Of: odoo/enterprise#83295
Demo employee contracts for Egypt, Saudi Arabia, and Turkey now use their correct local payroll structures. This prevents demo data from accidentally using Belgian payroll settings when the Belgian localization is also installed, making payroll demonstrations and testing more reliable.
Original PR description
*: eg, sa, tr - Assign the correct payroll structure to employee contracts in demo data to prevents incorrect assignment of the Belgian payroll structure when l10n_be is installed. Task: 4862722 Forward-Port-Of: odoo/enterprise#87409
The VoIP softphone now checks whether the user is typing in another field before taking focus back after a call. This prevents interruptions and helps users continue their work without losing their place.
Original PR description
Before switching the focus back to the softphone after a call, make sure the user isn't typing somewhere else. Only autofocus if the focus is not on an editable element. Task-4997513. Forward-Port-Of: odoo/enterprise#89562
The salary configuration now leaves the employee state field truly blank when no state is chosen. This prevents new employee records from being assigned the first available state by mistake, improving data accuracy during salary setup.
Original PR description
When using the salary config, the state (private_state_id) shows that no state is set, but the selector actually thinks the first element is selected. So when the employee is created, the state is set anyway. This forces the selector to not have anything selected by default. Task: 4904118 Forward-Port-Of: odoo/enterprise#89958
EC sales list reports now correctly populate values in additional columns beyond goods, services, and triangular transactions. This ensures country-specific reports, such as Slovenia's five-column format, show complete information for compliance review.
Original PR description
Before this commit, when an ec sales list report had more than the 3 bases columns (goods, service, triangular) the value was not filled. For example in slovinia, the ec sales list has 5 columns, the two extras columns where always empty. task-4963633 Forward-Port-Of: odoo/enterprise#90669
This fixes the expiration panel so upsell-related expirations keep the standard expiration message instead of being treated like renewal expirations. Business users will see more accurate messaging, reducing confusion around subscription status and next steps.
Original PR description
Upsell expiration are not handled the same way as renewal expiration, so we can keep the default expiration message for any expiration reasons other than a renewal Forward-Port-Of: odoo/enterprise#91839 Forward-Port-Of: odoo/enterprise#91730
Hong Kong payroll now uses the employee’s general name when surname and first name are not filled in. This prevents payslips from showing an empty or incorrect legal name, improving clarity for payroll documents.
Original PR description
Explanation: In hong kong payroll, the legal name is joined by surname and first name. However both fields are not madatory therefore it will display False on Payslip. After this commit, it will display the name field when both surname and first name are not used. opw-4944968 Forward-Port-Of: odoo/enterprise#90250
This fix prevents a payroll test from failing when the Belgian payroll module is installed without the accounting module. It keeps test setup compatible with the module's actual dependencies, reducing false failures during quality checks.
Original PR description
Reproduce: Run `TestPayrollSocialBalanceSheet` with only `l10n_be_hr_payroll` installed. Issue: The test setup uses `'account.journal'` to set a default account for cp200_salary_structure. Since `l10n_be_hr_payroll` does not depend on `account`, this raises an error when the account module is not installed. Fix: Add a check to ensure 'account.journal' exists in the environment before using it. Task: 5002551