Monday, June 2, 2025
61 changes
9 changes
Enhancements to existing features
When a commission plan start date is moved later, linked salesperson start dates that fall before the new plan date are updated automatically. This reduces manual cleanup and keeps commission eligibility dates aligned with the active plan period.
Original PR description
Before: - Changing the plan start date didn't update linked salespersons' from dates. - Users had to manually update each salesperson's from date. After: - Whenever the commission plan’s start date is changed — whether to an earlier or later date — the start date of all salespersons linked to it will be updated to match the new plan start date. task:4601225
The Sign and itsme signing modules now use the newer testing approach, replacing older test cases. This improves confidence in electronic signing workflows while keeping the change internal and not altering day-to-day user features.
Original PR description
Hootfication of Sign Modules task-4452228
This update adds coverage to ensure HTML content used by AI fields is properly sanitized, helping reduce the risk of unsafe or malformed content. It also raises the API call timeout, making related AI operations more tolerant of slower responses.
Original PR description
Task-4712395
The Indian localization Balance Sheet no longer opens with the horizontal split option enabled by default. This gives users a simpler default report view while still allowing them to enable the split manually when needed.
Original PR description
- before this commit: split horizontally is ticked by default on Balance Sheet. - after this commit: split horizontally is unticked by default. - Task ID: 4836667
The Planning Holidays test coverage has been updated to match the newer email-based notification flow for leave requests. This helps ensure the right responsible person is still notified when leave is created, reducing the risk of unnoticed absences in planning workflows.
Original PR description
This PR improves the test cases related to notifying the responsible person when a leave is created. Previously, the notification triggered an activity, which also invoked the compute function during the process. Now, since the notification is sent via email instead of creating an activity, the compute function is no longer automatically triggered — so it needs to be called explicitly. task-4681107
Resolved issues and error corrections
A spreadsheet test was adjusted to match the corrected behavior of fixed-period global filters. This helps ensure the spreadsheet feature remains reliable after related changes in the shared codebase.
Miscellaneous changes
Also apply images customization on non-cropped images, so the format can can be detected by the website editor. Performance improved by reducing the amount of regex applied per page. This is both an improvement and fixes, we do it retrospectively in 18.3 to be able to continue fast iterations by updating server side. Linked to: - https://github.com/odoo/website-scraper/pull/307 - https://github.com/odoo/iap-apps/pull/1069 Forward-Port-Of: odoo/enterprise#85131
Original PR description
Also apply images customization on non-cropped images, so the format can can be detected by the website editor. Performance improved by reducing the amount of regex applied per page. This is both an improvement and fixes, we do it retrospectively in 18.3 to be able to continue fast iterations by updating server side. Linked to: - https://github.com/odoo/website-scraper/pull/307 - https://github.com/odoo/iap-apps/pull/1069 Forward-Port-Of: odoo/enterprise#85131
16 changes
Enhancements to existing features
The accounting dashboard now shows the "Fetch from CodaBox" action as a link-style button. This improves spacing and alignment with nearby actions, making the dashboard look cleaner and easier to use.
Original PR description
The "Fetch from CodaBox" link displayed on the accounting dashboard had no gap between it and the button at the left of it, and wasn't aligned horizontaly with the other buttons next to it making it look out of place. It is now displayed as a link button, which solve both problems. task-4671468 Purpose The fetch from CodaBox is too sticky to the upload button  After this commit : 
This update corrects internal tests so they use the debug setting in the same format as the application does. It helps keep automated checks accurate and reduces the risk of false test behavior, with no expected impact on day-to-day users.
Original PR description
The debug key in the environment, is a string based on the query string of the URL that can have the following values : "1", "assets", "asset,test" or "". This commit fixes some tests that incorrectly set the debug as a Boolean value.
The `all_l10n` standalone test started to fail on 2025-06-01 when installing `l10n_in_hr_payroll`. A first attempt was made to blacklist the module in the test itself. This attemps failed as the module is auto_install on `hr_payroll` and most of `l10n_hr*` modules depend on `hr_payroll`. Forward-Port-Of: odoo/enterprise#86758
Original PR description
The `all_l10n` standalone test started to fail on 2025-06-01 when installing `l10n_in_hr_payroll`. A first attempt was made to blacklist the module in the test itself. This attemps failed as the module is auto_install on `hr_payroll` and most of `l10n_hr*` modules depend on `hr_payroll`. Forward-Port-Of: odoo/enterprise#86758
Resolved issues and error corrections
This fixes an access rights error that could appear when users searched for tasks from Timesheets. The change prevents the system from using task stage information that the current user is not allowed to access, making task search work more reliably for permitted users.
Original PR description
The sudo function allowed the current user to fetch data (stage IDs) which were used to browse. The user does not have access to this data; therefore, an access error message is triggered task-4194357 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update makes internal HTTP-related tests less likely to fail because of harmless differences in text or URL formatting. It improves confidence in automated checks without changing product behavior for users.
Original PR description
**[FIX] test_http: make test_webjson_list_args reliable** The domain in the query-string is quoted by werkzeug, but there are multiple possible equivalent quoting strategy and the test sometimes fails because it is quoted differently. The test is not about testing the different quoting strategy, use a proper url parser to make the test more resilient. **[FIX] test_http: more reliable test_models3** The quote in the returned text sometimes get escaped, sometimes not, sometimes with a different QP code. Remove the quote, since the test is not about them, to make the test more reliable.
This fix adds the missing 'Error' status for Romanian E-Factura records so users can correctly see when an electronic invoice has failed. This helps businesses identify failed submissions more clearly and take follow-up action without confusion.
Original PR description
Description of the issue/feature this PR addresses: add missing 'Error' status to E-Factura selection 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
Helpdesk ticket satisfaction ratings now display the correct emoji face and color. This makes customer feedback easier to understand at a glance and avoids misleading rating indicators.
Original PR description
### Issue: `helpdesk.ticket` ratings were converted to emojis in https://github.com/odoo/enterprise/pull/42972, but currently do not display the correct color or face. ### Solution: Correctly check the value of `rating_avg_text` to determine which face should be shown, and remove class decoration that was recently added that hides the proper color. opw-4703331
Users can no longer save a blank name when renaming a document or folder from the side panel. If the field is left empty, Odoo shows an error notification and restores the previous name, helping avoid confusing unnamed items.
Original PR description
Fix the possibility to enter an empty document name when editing a file or folder name from the side panel. If the name is empty, a danger notification should be displayed and the previous name should be restored. Task-4794447
Miscellaneous changes
Requested by @cima-odoo Forward-Port-Of: odoo/odoo#211848
Original PR description
Requested by @cima-odoo Forward-Port-Of: odoo/odoo#211848
Description ----------- Upon importing contracts, in `_recompute_work_entries`, a wizard is created where we set the employee and a timeframe. The field `employee_ids` is a stored `Many2many` and upon reading its content, an active test is performed in `convert_to_record`, meaning that if the employee is archived, reading `employee_ids` would yield `[]`. This is problematic in `regenerate_work_entries` which therefore will search and write on *all* work entries in the timeframe, since readi
Original PR description
Description ----------- Upon importing contracts, in `_recompute_work_entries`, a wizard is created where we set the employee and a timeframe. The field `employee_ids` is a stored `Many2many` and upon reading its content, an active test is performed in `convert_to_record`, meaning that if the employee is archived, reading `employee_ids` would yield `[]`. This is problematic in `regenerate_work_entries` which therefore will search and write on *all* work entries in the timeframe, since reading `employee_ids` returns an empty list -> all employees. This commit adds a context key to take archived records when regenerating work entries. Reference --------- opw-4813590 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212117 Forward-Port-Of: odoo/odoo#211748
**Issue** When displaying related products for a product attribute, only unarchived products are shown, even when the archived filter is applied. Steps to Reproduce: 1. Install the Sales app 2. Select or create a product 3. Select or create an attribute and values 4. Archive the product 5. Go to the attribute page 6. Click on related products smart button 7. Set Archived filter 8. Observe that the archived product is not displayed. Expected Behavior: After applying the Archived
Original PR description
**Issue** When displaying related products for a product attribute, only unarchived products are shown, even when the archived filter is applied. Steps to Reproduce: 1. Install the Sales app 2.…
**Issue** When displaying related products for a product attribute, only unarchived products are shown, even when the archived filter is applied. Steps to Reproduce: 1. Install the Sales app 2. Select or create a product 3. Select or create an attribute and values 4. Archive the product 5. Go to the attribute page 6. Click on related products smart button 7. Set Archived filter 8. Observe that the archived product is not displayed. Expected Behavior: After applying the Archived filter, related products, including archived ones, should be displayed. Actual Behavior: Archived related products are not shown, even when the Archived filter is applied. **Root Cause** When the related products smart button is clicked, the action_open_related_products method is triggered. In this method, when applying the domain for related products, an implicit active_test=True filter is applied by default. This filter excludes archived records, meaning only active (unarchived) products are displayed. **Fix** The issue was resolved by explicitly modifying the context to include archived products by setting active_test=False when querying the related products. This ensures that both active and archived related products are shown, even when the Archived filter is applied. opw-4565133 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201248 Forward-Port-Of: odoo/odoo#197513
Required for fixes in 18.0+ branches Forward-Port-Of: odoo/odoo#212403
Original PR description
Required for fixes in 18.0+ branches Forward-Port-Of: odoo/odoo#212403
Currently, an error occurs when the replenish wizard is unable to find the default 'Buy' route, which the user may have deleted. Steps to produce: - Install the `purchase_stock` module. - Activate `Multi-Step Routes` from Settings. - Navigate to `Inventory > Configuration > Warehouse Management > Routes (list)`. - Delete the `Buy` route record. - Create a new product without adding vendors or defining routes. - Click on the `Replenish` button. - Observe the error. `AttributeError: '
Original PR description
Currently, an error occurs when the replenish wizard is unable to find the default 'Buy' route, which the user may have deleted. Steps to produce: - Install the `purchase_stock` module. - Activate…
Currently, an error occurs when the replenish wizard is unable to find the default 'Buy' route, which the user may have deleted. Steps to produce: - Install the `purchase_stock` module. - Activate `Multi-Step Routes` from Settings. - Navigate to `Inventory > Configuration > Warehouse Management > Routes (list)`. - Delete the `Buy` route record. - Create a new product without adding vendors or defining routes. - Click on the `Replenish` button. - Observe the error. `AttributeError: 'NoneType' object has no attribute 'id'` The issue occurs when attempting to access the `id` of the 'Buy' route `purchase_stock.route_warehouse0_buy` - [1], without verifying if it exists. If this route is missing, `self.env.ref(...)` returns `None` which leads to an `AttributeError`. This commit resolves the issue by checking whether the `purchase_stock.route_warehouse0_buy` route exists before attempting to access its `id`. This prevents errors when the route is missing. [1] - https://github.com/odoo/odoo/blob/58f4b01dda6ba2e67c21663399aab1c189f4a312/addons/purchase_stock/wizard/product_replenish.py#L108 Sentry-6275025957 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#196959
Add the computed current year profit/loss to the balance sheet to have the full picture as expected Translation files were changed based on Odoo Export, so I guess the diff is ok as it will anyway appear with the next code change if created from the system. Info: @wt-io-it Forward-Port-Of: odoo/enterprise#83875
Original PR description
Add the computed current year profit/loss to the balance sheet to have the full picture as expected Translation files were changed based on Odoo Export, so I guess the diff is ok as it will anyway appear with the next code change if created from the system. Info: @wt-io-it Forward-Port-Of: odoo/enterprise#83875
Related to https://github.com/odoo/odoo/pull/211714 Forward-Port-Of: odoo/enterprise#86467 Forward-Port-Of: odoo/enterprise#86440
Original PR description
Related to https://github.com/odoo/odoo/pull/211714 Forward-Port-Of: odoo/enterprise#86467 Forward-Port-Of: odoo/enterprise#86440
Regarding Avatax, when the same tax appeared multiple times in the summary lines (e.g., with different tax types like Sales and Use), the computed amounts were not correctly summed in the result dictionary before. This fix ensures that duplicate tax entries are aggregated properly, avoiding incorrect totals. Steps to reproduce: - Difficult to reproduce without Avatax credentials. - Example: ``` { "country": "US", "region": "OH", "jurisType": "State", "jurisCode": "3
Original PR description
Regarding Avatax, when the same tax appeared multiple times in the summary lines (e.g., with different tax types like Sales and Use), the computed amounts were not correctly summed in the result…
Regarding Avatax, when the same tax appeared multiple times in the summary lines (e.g., with different tax types like Sales and Use), the computed amounts were not correctly summed in the result dictionary before.
This fix ensures that duplicate tax entries are aggregated properly, avoiding incorrect totals.
Steps to reproduce:
- Difficult to reproduce without Avatax credentials.
- Example:
```
{
"country": "US",
"region": "OH",
"jurisType": "State",
"jurisCode": "39",
"jurisName": "OHIO",
"taxAuthorityType": 45,
"stateAssignedNo": "",
"taxType": "Sales",
"taxSubType": "S",
"taxName": "OH STATE TAX",
"rateType": "General",
"taxable": -100.00,
"rate": 0.0575,
"tax": -5.75,
"taxCalculated": -5.75,
"nonTaxable": 0,
"exemption": 0
},
{
"country": "US",
"region": "OH",
"jurisType": "State",
"jurisCode": "39",
"jurisName": "OHIO",
"taxAuthorityType": 45,
"stateAssignedNo": "",
"taxType": "Use",
"taxSubType": "U",
"taxName": "OH STATE TAX",
"rateType": "General",
"taxable": -100,
"rate": 0.0575,
"tax": -5.75,
"taxCalculated": -5.75,
"nonTaxable": 0,
"exemption": 0
},
```
This fix simply ensures that the values of duplicate taxes are properly consolidated in the existing dictionary.
Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4801883)
opw-4801883
Forward-Port-Of: odoo/enterprise#86410Problem --------- Follow-ups can be configured to execute multiple type of follow-ups (email, whatsapp, sms, ...) One of those is to print a letter, but it's not the most used. When you try to execute a follow-up manually, a wizard opens and follows the setup of the to-be-executed level ; so for example if the next level is configured to send a SMS, SMS should be ticket by default. But the "Print" option is always ticked, even if the "Letter" option is not selected in the configuration o
Original PR description
Problem --------- Follow-ups can be configured to execute multiple type of follow-ups (email, whatsapp, sms, ...) One of those is to print a letter, but it's not the most used. When you try to execute a follow-up manually, a wizard opens and follows the setup of the to-be-executed level ; so for example if the next level is configured to send a SMS, SMS should be ticket by default. But the "Print" option is always ticked, even if the "Letter" option is not selected in the configuration of the level. This always generates an additional PDF that is often not needed. Objective --------- Do not tick "Print" by default when manually executing a follow-up level, unless "Letter" is ticket in the configuration of the level. Solution --------- Set "Print" default value in the wizard to the "Letter" value of the follow up line instead of leaving it as True (which is the default). task-4574971 Forward-Port-Of: odoo/enterprise#80116
This commit make the company field on the followup report invisible. opw-46693397 Forward-Port-Of: odoo/enterprise#86387
Original PR description
This commit make the company field on the followup report invisible. opw-46693397 Forward-Port-Of: odoo/enterprise#86387