Tuesday, September 23, 2025
12 changes · saas-18.2
Enhancements to existing features
The web interface framework used by Odoo has been updated to a newer version. This helps keep the platform current and may improve reliability and maintainability of the user interface without introducing a major functional change.
Original PR description
Update the OWL lib. Release notes: https://github.com/odoo/owl/releases/tag/v2.8.1 Forward-Port-Of: odoo/odoo#228092
Resolved issues and error corrections
This fixes an error that could appear when users opened a performance profiling link before the related profile was enabled. The system now checks that profiling is enabled before trying to load profiling details, making the Settings workflow more reliable.
Original PR description
This error occurs when users create an IR profile and open the `Speedscope URL` without ensuring that profiles are enabled. Steps to Reproduce: - Install the `base` module. - Open the profile page in Settings. - Create an `IR Profile`. - Click on the Speedscope URL and click Open. TypeError: the JSON object must be str, bytes or bytearray, not bool This error occurs when the system fails to retrieve `init_stack_trace` because the IR Profile is not `enabled`. This commit ensures that the system proceeds to check `init_stack_trace` only if the IR Profile is enabled. Sentry-6466200993 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Changing the default grouping in the Accountant dashboard to certain online account fields could cause an error when no matching journals were available. This fix prevents that crash so users can safely adjust grouping options and continue working normally.
Original PR description
This error occurs when `Default Group By` is changed. Some selections such as `Account online Account` and `Account Online Link` which leads to `self.ids` being empty. **Steps to reproduce:** * Install accountant, web_studio * accountant> web_studio icon>Default Group By>`Account Online Account` or `Account Online Link`. `SyntaxError:syntax error at or near ')' LINE 19: WHERE j.id in () ^` **Root Cause:** The main cause of this error is that the method `_compute_has_entries` attempts to compute journal entries even when there are no journals available for grouping. Specifically, when grouping by an online bank account that is not connected, no journal IDs are passed to the compute method, which expects these IDs in the dashboard. **Solution:** * Prevent execution of sql query when ids are empty and let the function proceed as usual which assigns values if no journal entries exist. **Sentry-6674695712**
The editor test suite was reorganized so each check has its own timeout instead of sharing one timeout across several checks. This reduces random test failures and helps keep release validation stable without changing user-facing behavior.
Original PR description
Grouping multiple `testEditor` in a single `it` is bad practice because the timeout of `it` is then shared between the different `testEditor` calls rather than each having their own separate timers. Technically, only the web_edior tests ever timed out, but I split the html_editor ones as well for good measure. runbot-231687
This fixes a date-related issue in the product margin test suite so automated checks behave consistently. It helps keep product margin calculations protected from regressions without changing day-to-day user functionality.
Original PR description
runbot-230719 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227210 Forward-Port-Of: odoo/odoo#226089
This fixes a Field Service task issue where opening the command search could crash if a status field had no available choices. Users will now see the command as unavailable instead of encountering an error, improving reliability during task management.
Original PR description
**Steps to reproduce:** - Installed industry_fsm (Field Service) module - Navigate the menu Field Service -> Configuration -> Project - Create a new project - Then Navigate the menu My Tasks -> Tasks…
**Steps to reproduce:** - Installed industry_fsm (Field Service) module - Navigate the menu Field Service -> Configuration -> Project - Create a new project - Then Navigate the menu My Tasks -> Tasks - Create a new task with the new created project - Then using the keyboard shortcut ctrl + k for command search, an error occurs **Cause:** - When the `stage_id` statusbar had no possible values, `this.getAllItems()` returned an empty array. - The command `isAvailable` unconditionally accessed `this.getAllItems().at(-1).isSelected`, which is undefined, causing a crash.[see](https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/fields/statusbar/statusbar_field.js#L147-L148) **Fix** - Add safe check in the command action so it does not attempt to select a non-existent "next" item. **Result** - The command palette no longer crashes when the `stage_id` field has no available items. Instead, the command is simply unavailable. opw-5084130 upg-3130405 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 Forward-Port-Of: odoo/odoo#227957 Forward-Port-Of: odoo/odoo#227440
This fix prevents crashes when invalid VAT or identification numbers are entered for Argentinian partners. Users can now handle incorrect values more safely, improving reliability when maintaining customer or vendor records.
Original PR description
Manual backport of https://github.com/odoo/odoo/commit/b01a6640895c4dd4b5bcf849740aa6b3312e9a54. This is needed to prevent crashes when trying to sanitize invalid VAT inputs for Argentina partners due to the assumption that the identification number can always be safely cast to int(). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223661
Resetting a user's Odoo Calendar could previously fail when the reset encountered events the user was not allowed to edit. This fix prevents that unnecessary validation error, allowing calendar resets to complete as expected.
Original PR description
Before this commit, when resetting the Odoo Calendar of an user, it would trigger a ValidationError for updating events that the current user wasn't able to update, even though it was not an updated per se, but just a deletion of it in Odoo. After this commit, we no longer trigger that ValidationError during resets of Odoo Calendars, fixing the error. task-5103918 Forward-Port-Of: odoo/odoo#227991
Timesheet reports printed from a sales order now include the related helpdesk ticket name alongside the helpdesk team. This prevents incomplete report details and makes billed support time easier to understand for customers and internal teams.
Original PR description
to reproduce: ============= 1. make helpdesk team billable and records timesheets 2. create a helpdesk ticket and link it to a sale order 3. log timesheets on the ticket 4. print the timesheet report…
to reproduce: ============= 1. make helpdesk team billable and records timesheets 2. create a helpdesk ticket and link it to a sale order 3. log timesheets on the ticket 4. print the timesheet report **from the sale order** -> the task column will contain only the helpdesk team name, while it should contain "helpdesk team / ticket name" Problem: ======== in helpdesk_timesheet we inherit `hr_timesheet.timesheet_table` to adapt it to helpdesk tickets, but we use `show_ticket` to display the ticket name, which is only set in `hr_timesheet.report_timesheet` and `hr_timesheet.timesheet_project_task_page` but not in `sale_timesheet.timesheet_sale_page` which is the one used when printing the report from the sale order. Solution: ========= `show_ticket` should be set with value `bool(lines.helpdesk_ticket_id)` which is equivalent to `line.helpdesk_ticket_id` in the t-if condition. so we can directly use `line.helpdesk_ticket_id` and remove the `show_ticket` variable. opw-5002650 Forward-Port-Of: odoo/enterprise#95179
This update adjusts a Hong Kong payroll accounting test after a related leave-generation method changed in an earlier version. It helps keep automated checks passing, reducing the risk of delays when validating payroll-related updates.
Original PR description
Explanation: _generate_leave method is updated in saas-18.1. build_error-229902
The bank reconciliation report now ignores foreign exchange adjustment entries that are not actual bank movements. This prevents currency revaluation differences from appearing under miscellaneous operations, giving finance teams a clearer and more accurate reconciliation view.
Original PR description
**Steps to reproduce** - Have foreign currency with rates for date 1 and date 2 - Have a Bank journal in foreign currency - Register a transaction in date 1 - In date 2 open the unrealized currency report - Create the adjustment entry - From the Accounting dashboard Bank[EUR] > Reconciliation report **Issue** The adjustment entry difference is present under the 'Misc. operations' line. This occurs because we look for journal entries hitting the bank account but that specific entry should not be reported as it does not represent a bank in/out operation A solution is to exclude the exchange entry journal, so any operation reported there is not taken into account in the report opw-4867870 [Ticket link](https://www.odoo.com/odoo/project/49/tasks/4867870) Forward-Port-Of: odoo/enterprise#94172 Forward-Port-Of: odoo/enterprise#93999
Refreshing appointment slots could fail when no resource was selected, preventing capacity from being calculated correctly. The fix handles missing resource selections safely so customers can continue booking appointments without interruption.
Original PR description
When refreshing the slots, it's possible that the resource_selected_id is equal to None, False or just empty string. This was leading to some error when parsing it to an integer. This commit move the parsing into the method computing the max possible capacity after checking if we got a value. Related commit 3cca7e47ab58f8a7d4e9196dbf60f7068348216b task-5102895 Forward-Port-Of: odoo/enterprise#95144