Thursday, September 4, 2025
13 changes · saas-18.4
Enhancements to existing features
Payroll contract templates now carry over country-specific payroll fields more reliably when new employee contracts are created. This helps HR teams avoid missing local compliance or payroll details and adds validation to reduce future regressions.
Original PR description
This commit implements _get_whitelist_fields_from_template() method across all HR payroll localizations to ensure that localization-specific fields are properly copied when creating contracts from templates. Additionally, tests has been added for all localizations to validate the whitelist functionality and ensure proper template loading behavior. task-4954283
Resolved issues and error corrections
Fixes a website editor issue where changing an Image Wall layout could crash if one of the images had a link. This helps users safely edit image galleries without losing work or being blocked by an error.
Original PR description
When at least one of the images in the image wall has a link, the editor will crash when trying to change the mode of the Image Wall, i.e. from Masonry to Grid. Steps to reproduce the issue: - Drag and drop an images wall - Click on any of the images - Add a link (Click on the chain icon in the `Media` option and then add a URL) - Click on 'Mode' - Try to change to Grid for example. => We have a traceback. This commit follows the [html_builder refactoring]. Task-5005626 [html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2
Fixes an issue where website editors did not immediately see the correct navigation bar layout after changing previewable settings such as content width. The preview now refreshes the layout right away, helping users make design decisions without needing to resize the browser or reload the page.
Original PR description
Following this [commit] and the [html_builder refactoring], when we preview or apply changes that effect the navbar, we wouldn't see the proper layout until a resize event or reload. Steps to see the issue: - Open website and start editing - Click on a navbar - Change the Content Width to "Small" => The navbar isn't centered, and potentially reflowing if we have enough items in the navbar. Related to task-4367641 [commit]: https://github.com/odoo/odoo/commit/10d727175f5845d6be6fa69f6adaae1126eea826 [html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb
Canceling an import after uploading a spreadsheet now safely checks the import data before continuing. This prevents users from seeing an error and returns them to the previous screen when the import cannot proceed, improving reliability across import workflows.
Original PR description
Before commit: - After uploading an Excel file, when user cancels a bank statement import, it caused an `InvalidDomainError` due to an invalid `resIds` value in the domain. After commit: - This error is resolved and now the `Cancel` button validates `resIds` before passing it into the domain. If `resIds` are invalid, the user is navigated back instead. **Note:** This `InvalidDomainError` occurred in all modules when users canceled import operations. This PR fixes the issue across the system by adding proper validation for `resIds` before processing the domain. Task : 4974749 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor now handles icon spin effects and color changes more reliably. Users can undo icon spin changes, see the toolbar state correctly, and color selected text and icons together with consistent background opacity.
Original PR description
**Current behavior before PR:** - Applying a spin effect to an icon doesn't not create a history step, which causes the undo functionality to fail. - The spin icon in the toolbar was not highlighted…
**Current behavior before PR:** - Applying a spin effect to an icon doesn't not create a history step, which causes the undo functionality to fail. - The spin icon in the toolbar was not highlighted after applying the effect. - When some text is selected along with icon, trying to apply color only affects the icon, the text remains uncolored. **Desired behavior after PR:** Now, - History step is created after adding spin effect to an icon, allowing undo to work properly. - The spin icon in the toolbar is properly highlighted to reflect the applied effect. - This PR removes `color_apply_overrides` from icon_plugin to let color_plugin handle coloring the icons ensuring that the selected text is also colored along with icon. - This PR also makes sure that default 60% opacity is applied when applying solid background color on icons or table cells. task-4794673 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225017 Forward-Port-Of: odoo/odoo#210341
This update prevents Turkish Nilvera invoices from being sent with non-compliant negative lines and corrects how discount and product identification data appear in the electronic invoice file. It also fixes an access issue so eligible accounting users can check Nilvera customers even without the Accountant app installed.
Original PR description
Description of the issue/feature this PR addresses: This PR aims to fix certain compliance issues apparent in the UBL structure of Nilvera. an access right issue was also occurring when account is…
Description of the issue/feature this PR addresses: This PR aims to fix certain compliance issues apparent in the UBL structure of Nilvera. an access right issue was also occurring when account is installed but not account_accountant when doing check_nilvera_customer. Current behavior before PR: - access right error when doing check_nilvera_customer with account_accountant uninstalled. - negative lines were allowed in nilvera invoices and were reflected in the xml document. - StandardItemIdentification displays the products barcode under the invoice line. - multiplierfactor was not reflecting the discount % of the invoice line Desired behavior after PR is merged: - added read access to account module specific groups. - raise a blocking error if there are discount lines in the invoice. - remove the StandardItemIdentification node from the xml document - show discount % in the multiplierfactor task-4907751 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224028 Forward-Port-Of: odoo/odoo#223136
When a user is archived, their assigned activities are now found and removed even if those activities belong to a company that is not currently selected. This prevents old tasks from remaining visible after a user has been deactivated, improving data cleanup consistency in multi-company setups.
Original PR description
**Steps to reproduce:** - Set up one user with a new company - With this user : - Create sale order - Create activity on the new sale order - Go back to the admin user - Disable the new company in…
**Steps to reproduce:**
- Set up one user with a new company
- With this user :
- Create sale order
- Create activity on the new sale order
- Go back to the admin user
- Disable the new company in the top right menu
- Archive the user
- Activities of the user are still present
**Issue:**
In `activities_to_delete = self.env['mail.activity'].search([('user_id', 'in', self.ids)])`, the access rights of the records used in the activities are checked, which means that the sale order domains are applied. If the given domain doesn't match (for example `('company_id', 'in', company_ids)` when the company_id is manually disabled), the search can miss the activity to unlink.
**Fix:**
Added `.sudo()` to ensure all of the user's activities of any company
are considered, overwriting the current company context.
opw-4716031
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#225389
Forward-Port-Of: odoo/odoo#206813Incoming vendor invoice emails are now accepted when the sender is an existing user who does not have access to the target company. This prevents valid emailed invoices from being rejected in multi-company setups and keeps invoice creation through journal email aliases reliable.
Original PR description
To reproduce the bug: 1- Create a DB with two companies and accounting app 2- Create a user and allow it to access company 2 3- Send a email using the user email to alias from purchase journal alias of company 2 4- The email will be rejected 5- Send a email using a random email address to alias. 6- The email will be accepted and an account.move is created. In a normal flow, when a user associated to the email not exists, the user_id is set to odoobot, otherwise, the user accosiated to the email. In the buggy flow the bug happens because `_compute_company_id` in account_move model, will set `company_id` to empty when user has no access to the company, as a result the `account_move` will fail. opw-4853027 Forward-Port-Of: odoo/odoo#225263 Forward-Port-Of: odoo/odoo#217322
This fix ensures mandatory leave days are calculated correctly when there are one or several leave requests across one or several employees. It helps HR teams get more reliable leave planning and avoids incorrect leave balances or scheduling outcomes.
Original PR description
- Fixed the calculation of leave mandatory leaves to account for one or multiple leaves for one or multiple employees Task-4804618 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225427 Forward-Port-Of: odoo/odoo#223349
This fix prevents Accounting app installation from failing when demo data is loaded for a German database. It allows the system’s chart template cleanup process to proceed without incorrectly triggering audit trail protections, reducing setup errors for new databases.
Original PR description
When installing the Accounting app on a new database created with Germany as country and with demo data loaded, the demo loader invokes in `account/demo/account_demo.xml` the `<function name="try_loading">` call which does a wholesale `records.with_context({MODULE_UNINSTALL_FLAG: True}).unlink()`. This cascades into deleting mail.message records, but the audit‑trail hook in only bypasses its check when the `bypass_audit` token is present not when `MODULE_UNINSTALL_FLAG is set causing a “You cannot remove parts of the audit trail” UserError.
Steps to reproduce:
- Created new database, with Germany as country
- Install l10n_de
- Download demo data
- Attempt to install Accounting application ! Receive error message
OPW- 4712364
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#221260Odoo Sign now checks uploaded PDFs more carefully and blocks unsupported encrypted files before users try to sign them. This prevents a validation failure that could interrupt document completion, giving users a clearer and more reliable signing flow.
Original PR description
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following…
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following [pdf](https://drive.google.com/file/d/1M0_VzWLzv-lSZ-IlI9Zmx-M7jFGvtJJj/view?usp=sharing)> Sign the document using `Sign now` * Validate and send completed document `AttributeError: 'NoneType' object has no attribute 'seek'` **Cause:** This occurs because [1] returns `None` to the variable `output` at [2] which in turn passes the `None` value to [3] causing the error. Error occurs in python 3.12+, because it does not throw an exception in `_check_pdf_data_validity`. **Solution:** * Add a validation to prevent upload of unsupported files. [1]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_document.py#L242-L243 [2]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_completed_document.py#L33-L34 [3]: https://github.com/odoo/odoo/blob/033c7a63bdf3d10d9d2c5084959fd34f52011bea/odoo/tools/pdf/signature.py#L51 **Sentry-6784800544,6802557168** Forward-Port-Of: odoo/enterprise#91766
The wage index wizard now selects the right contract version depending on whether users start from an employee form or list. Wage changes are applied consistently to matching contract versions and recorded in the employee history, improving payroll accuracy and traceability.
Original PR description
This commit fixes the wage index wizard broken since the contract-version refactor. - If coming from an employee form view, the wizard will by default select the selected version - If coming from an employee list view, the wizard will by default select the current version id of the selected employees - The wage is indexed for all versions that have the same contract date start/end of the selected version on the wizard - The changes are written in the employee's chatter (it indicates all versions that were indexed) task-4997195
Danish Intrastat and EC Sales List reports now use whole-unit rounding where required for official reporting. Users can still view decimal values in the interface when needed, but government export files are always rounded to meet submission rules.
Original PR description
This commit will change the options of the reports so that we have a rounding in units since the intrastat and ec sales list report must be rounded. This solution still allows people to have the report with decimals if needed task-4948271 Forward-Port-Of: odoo/enterprise#93783 Forward-Port-Of: odoo/enterprise#91268