Saturday, June 28, 2025
25 changes · saas-18.3
Enhancements to existing features
The website generator now provides clearer translated messages for specific failure cases, including timeouts, redirection issues, and duplicate requests. This helps users and support teams better understand what went wrong and respond more quickly.
Original PR description
Added new translated error messages: - "error_navigation_timeout" - "error_url_redirection" - "error_duplicated_request"
The VoIP header now displays the user's Do Not Disturb status text. This makes availability clearer at a glance and helps users understand their current call interruption setting without opening additional controls.
Original PR description
Show the Do Not Disturb state text on the voip header Task-4891947
Resolved issues and error corrections
Invoice PDFs now avoid extra blank lines when a customer address has empty fields, such as a missing second street line. This makes generated documents look cleaner and more professional without changing the underlying contact data.
Original PR description
To Reproduce: ============= - add contact with empty street2 - create invoice - generate pdf from invoice --> blank line Problem: ========= -The _compute_display_name method concatenates address fields using newline characters (\n). -When some address components (like street2) are empty, this results in multiple consecutive newlines (\n\n), producing blank lines in the rendered display name and PDF reports. https://github.com/odoo/odoo/blob/saas-18.3/odoo/addons/base/models/res_partner.py#L990 Solution: ========== filtering out empty or whitespace-only lines, and joining them back properly. opw-4820829 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
**Steps to reproduce:** From a Romanian company with the RO localization configured, when processing a payment transaction from the e-commerce, it can happen that the creation of the invoice fails due to a SerializationFailure but the EDI is correctly sent to the government service. As the creation of the invoice has failed, the system will retry to create it and trigger the sending of the EDI again. **Solution:** Trigger a commit before sending the EDI. opw-4844913 --- I confi
Original PR description
**Steps to reproduce:** From a Romanian company with the RO localization configured, when processing a payment transaction from the e-commerce, it can happen that the creation of the invoice fails due to a SerializationFailure but the EDI is correctly sent to the government service. As the creation of the invoice has failed, the system will retry to create it and trigger the sending of the EDI again. **Solution:** Trigger a commit before sending the EDI. opw-4844913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216295 Forward-Port-Of: odoo/odoo#216114
The chat interface now shows the "Jump to Present" button sooner when users scroll back through older messages. This makes it easier to quickly return to the latest conversation, especially in threads with large or many messages, and also corrects its placement in some chatter views.
Original PR description
Before this commit, the "jump present" button when scrolling to older messages was displayed when going quite far in older messages. This happens because condition was: greater distance of either 3…
Before this commit, the "jump present" button when scrolling to older messages was displayed when going quite far in older messages. This happens because condition was: greater distance of either 3 times the view port client height and 10 times the height of most recent messages. When most recent messages are very big, this can be long until to see the jump to present. Also when there are lots of messages, 3 times the scroll client height can be a bit too much. In the past the "jump to present" UI was a banner so we were tempted to show when user was likely to want to jump to present. This is a small button now so we can be much more eager to its showing. This commit removes the condition to recent message height and just uses the height of scroll client height for the showing of jump to present. Before / After  
VoIP configuration now handles cases where the default phone call activity type has been removed. This prevents users from seeing an error when refreshing or loading the system after that activity type is missing.
Original PR description
Currently, an error occurs when the system initializes the voip configuration for the currently logged-in internal user. Steps to Reproduce: - Install the `voip` module. - Delete the activity type where the `Action` is `'Phonecall'`, and then refresh the page. `IndexError: tuple index out of range.` This error occurs when the system initializes the voip configuration and no phonecall activity type exists. The system attempts to search for activity types with the 'phonecall' category, which returns an empty recordset. Then it tries to access the first record of this empty recordset[1], which raises an error. [1] https://github.com/odoo/enterprise/blob/2896974e9eda61bfe5e1d67423dc56f6ab17b2af/voip/models/res_users.py#L128 This commit ensures that if activity type with the 'phonecall' category is present, it store the activity type id, otherwise, it stores False as the activity type id. sentry-6689050392
Before this commit, test "test_star_message" was failing frequently on runbot at step to check message was starred have click on "Mark as Todo". This happens because when click on mark as todo, the message is asynchronously starred. However, there's no visual indication other than the message action have yellow filled star icon. This requires hovering the message to see it, but we don't know when we should exactly hover the message to see it. This commit fixes the issue by adding a `data-s
Original PR description
Before this commit, test "test_star_message" was failing frequently on runbot at step to check message was starred have click on "Mark as Todo". This happens because when click on mark as todo, the message is asynchronously starred. However, there's no visual indication other than the message action have yellow filled star icon. This requires hovering the message to see it, but we don't know when we should exactly hover the message to see it. This commit fixes the issue by adding a `data-starred` on the `o-mail-Message` root node of message template that tells whether the message is starred or not. This removes necessity to hover to check whether message is starred. Fixes runbot-227568 Forward-Port-Of: odoo/odoo#216106
When building `base_tax_line_mapping`, the JOIN on `affecting_base_tax_ids` was effectively scanning the CTE as many times as there were tax lines in the domain. This lead to computing a number of rows equivalent to the number of base lines times the number of tax lines; so O(n²). Using a LATERAL JOIN helps in avoiding that behavior and only getting the lines needed in each loop.Description of the issue/feature this PR addresses: Forward-Port-Of: odoo/odoo#216186 Forward-Port-Of: odoo/odo
Original PR description
When building `base_tax_line_mapping`, the JOIN on `affecting_base_tax_ids` was effectively scanning the CTE as many times as there were tax lines in the domain. This lead to computing a number of rows equivalent to the number of base lines times the number of tax lines; so O(n²). Using a LATERAL JOIN helps in avoiding that behavior and only getting the lines needed in each loop.Description of the issue/feature this PR addresses: Forward-Port-Of: odoo/odoo#216186 Forward-Port-Of: odoo/odoo#215411
Actually update to use new email domain --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216195
Original PR description
Actually update to use new email domain --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216195
**Current behavior before PR:** Prior to this PR, when a subthread was created from a deleted message, the thread name appeared empty. **Desired behavior after PR is merged:** the issue is resolved by setting the thread name to "New Thread" when the original message is deleted. task-4665143 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205828
Original PR description
**Current behavior before PR:** Prior to this PR, when a subthread was created from a deleted message, the thread name appeared empty. **Desired behavior after PR is merged:** the issue is resolved by setting the thread name to "New Thread" when the original message is deleted. task-4665143 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205828
[FIX] l10n_in_ewaybill: Prevent duplicate e-way bills during demo data load Steps to Reproduce: 1. Run the Odoo app from the terminal without installing demo data. 2. Install the l10n_in_ewaybill module. 3. Load demo data from the App Settings. 4. Select the IN Company. 5. Open any invoice. Issue: - An error occurs when opening the invoice page. Reason: - The method that generates demo data was being called twice during demo data loading. - As a
Original PR description
[FIX] l10n_in_ewaybill: Prevent duplicate e-way bills during demo data load Steps to Reproduce: 1. Run the Odoo app from the terminal without installing demo data. 2. Install the l10n_in_ewaybill…
[FIX] l10n_in_ewaybill: Prevent duplicate e-way bills during demo data load
Steps to Reproduce:
1. Run the Odoo app from the terminal without installing demo data.
2. Install the l10n_in_ewaybill module.
3. Load demo data from the App Settings.
4. Select the IN Company.
5. Open any invoice.
Issue:
- An error occurs when opening the invoice page.
Reason:
- The method that generates demo data was being called twice during demo data loading.
- As a result, two e-way bills were created per invoice instead of one, which led to errors.
- Additionally, the condition in the account.move model was assuming only one e-way bill per invoice, causing incorrect logic.
Fix:
- Added a check before creating the e-way bill to verify whether it has already been created or not
- Also fixed the logic in the account.move model to properly handle the e-way bill state check.
task: 4777642
Forward-Port-Of: odoo/odoo#216165
Forward-Port-Of: odoo/odoo#208825Technically, using `odoo-bin` without `-i` and `-u` for database with `to upgrade` module was wrong before 18.2, which will skip some upgrade processes/checks in `loading.py`. From 18.2 If there are `to upgrade`, `to install` or `to remove` modules in the database `odoo-bin` without `-i` and `-u` will still automatically update these modules. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confir
Original PR description
Technically, using `odoo-bin` without `-i` and `-u` for database with `to upgrade` module was wrong before 18.2, which will skip some upgrade processes/checks in `loading.py`. From 18.2 If there are `to upgrade`, `to install` or `to remove` modules in the database `odoo-bin` without `-i` and `-u` will still automatically update these modules. 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#216025
Before this commit: When adding any statement line with a date in the future, the amount is reflected in the journal's final balance. While it's not considered when calculating the graph points of the dashboard. Which results in a discrepancy between balances and graph points of all past points. With this commit: Future points are considered in graph points aggregation and visualization. Steps: 1- Create 2 bank transaction in a bank journal one with date in the past, the other in futu
Original PR description
Before this commit: When adding any statement line with a date in the future, the amount is reflected in the journal's final balance. While it's not considered when calculating the graph points of the dashboard. Which results in a discrepancy between balances and graph points of all past points. With this commit: Future points are considered in graph points aggregation and visualization. Steps: 1- Create 2 bank transaction in a bank journal one with date in the past, the other in future. 2- Check dashboard graph points of past transaction, will notice a difference between the graph point and real balance. (difference amount is exactly equal the future transaction amount) opw-4823770 Forward-Port-Of: odoo/odoo#216102 Forward-Port-Of: odoo/odoo#214641
Network scan/analysis tools can be useful when debugging configurations., so we added `arp-scan` and `mtr`. Forward-Port-Of: odoo/odoo#216164 Forward-Port-Of: odoo/odoo#216058
Original PR description
Network scan/analysis tools can be useful when debugging configurations., so we added `arp-scan` and `mtr`. Forward-Port-Of: odoo/odoo#216164 Forward-Port-Of: odoo/odoo#216058
Followup to https://github.com/odoo/odoo/commit/fdcb584b20af1f99cf760eaff94e489a77e6c36d When the `_onClickUpdateQuantity` was updated to use a view instead of a wizard that opens in a new window, it was not checked that the HTML help when no records found is correctly rendered. This fixes that by ensuring it's correctly parsed, i.e. copied same solution as here: https://github.com/odoo/odoo/commit/f9f7d9d6a8470f3ca5ff464bb425b219ac4ed571 Steps to reproduce: - open any product > click
Original PR description
Followup to https://github.com/odoo/odoo/commit/fdcb584b20af1f99cf760eaff94e489a77e6c36d When the `_onClickUpdateQuantity` was updated to use a view instead of a wizard that opens in a new window, it was not checked that the HTML help when no records found is correctly rendered. This fixes that by ensuring it's correctly parsed, i.e. copied same solution as here: https://github.com/odoo/odoo/commit/f9f7d9d6a8470f3ca5ff464bb425b219ac4ed571 Steps to reproduce: - open any product > click on forecast report button - click on "Update Quantity" - apply a filter so that no records are found (e.g. only "Transit Locations" Expected result: normal no records found icon + help Actual result: raw html Additionally cleaned up some of the junk code that was left by the original commit.... --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208896
Steps to reproduce the bug: - Create two purchase orders and add a note - Try to merge them Problem: A traceback is triggered: ``` ValueError: AttributeError("'int' object has no attribute 'total_seconds'") while evaluating 'if records:\n action = records.action_merge()' ``` opw-4890120 Forward-Port-Of: odoo/odoo#216080 Forward-Port-Of: odoo/odoo#215958
Original PR description
Steps to reproduce the bug:
- Create two purchase orders and add a note
- Try to merge them
Problem:
A traceback is triggered:
```
ValueError: AttributeError("'int' object has no attribute
'total_seconds'") while evaluating 'if records:\n
action = records.action_merge()'
```
opw-4890120
Forward-Port-Of: odoo/odoo#216080
Forward-Port-Of: odoo/odoo#215958This commit fixes the calculation of the duration of an attendance record for an employee on a fully flexible working schedule. Previously, we were using the adjusted start and end times, which were adjusted from their original values to be the outer bounds of the interval made up of the original times and the UTC-converted times. This resulted in a duration that was too long. Now, we use the original start and end times to calculate the duration of the attendance because this value is ti
Original PR description
This commit fixes the calculation of the duration of an attendance record for an employee on a fully flexible working schedule. Previously, we were using the adjusted start and end times, which were adjusted from their original values to be the outer bounds of the interval made up of the original times and the UTC-converted times. This resulted in a duration that was too long. Now, we use the original start and end times to calculate the duration of the attendance because this value is timezone-agnostic. Forward-Port-Of: odoo/odoo#213700
Issue -> For databases with large `account_move_line` tables, running the `_existing_accounting` (when opening Settings) method to check if a company has accounting entries by searching for any `account_move_line` records belonging to the current company is slow. The default search order for this model is `date desc, move_name desc, id`. This causes an index scan on the table using `account_move_line_date_name_id_idx`. The combination of using `date` to order by and the query planner using an
Original PR description
Issue -> For databases with large `account_move_line` tables, running the `_existing_accounting` (when opening Settings) method to check if a company has accounting entries by searching for any `account_move_line` records belonging to the current company is slow. The default search order for this model is `date desc, move_name desc, id`. This causes an index scan on the table using `account_move_line_date_name_id_idx`. The combination of using `date` to order by and the query planner using an unrelated index for the search leads to a long running SELECT query. Solution --> We replace the `search` with a `search_count` where the ordering doesn't matter and the order by clause is skipped. Benchmark --> On customers' database with about 30M move lines and 1 `res.company` record, speedup on the SELECT query is as follows --> 62743.883 ms -> 0.392 ms Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4811622) opw-4811622 Forward-Port-Of: odoo/odoo#215727
Following the fix in d927a7b6, we broke the default behaviour of empty text/chart fields. While the server returns the value `false` when they're empty, we want to display an empty string in the `ODOO.LIST` formulas. Task-4897690 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#215831
Original PR description
Following the fix in d927a7b6, we broke the default behaviour of empty text/chart fields. While the server returns the value `false` when they're empty, we want to display an empty string in the `ODOO.LIST` formulas. Task-4897690 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#215831
Because recordsets are immutable, `-=` is in O(n), and doing it in a loop is therefore O(n²). Forward-Port-Of: odoo/enterprise#88704 Forward-Port-Of: odoo/enterprise#88261
Original PR description
Because recordsets are immutable, `-=` is in O(n), and doing it in a loop is therefore O(n²). Forward-Port-Of: odoo/enterprise#88704 Forward-Port-Of: odoo/enterprise#88261
opw-4816130 Forward-Port-Of: odoo/enterprise#88744
Original PR description
opw-4816130 Forward-Port-Of: odoo/enterprise#88744
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#86823 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#86823 Forward-Port-Of: odoo/enterprise#83875
Prior to this commit, the `_sla_generate_status_values` method in the `helpdesk.ticket` model was using a shared list for storing SLAs per ticket. This could lead to unexpected behavior when multiple tickets are processed simultaneously, as they would share the same list instance. We then removed that logic and replaced it by directly excluding the SLAs of the ticket status having a reached deadline, preventing unnecessary recomputation. Forward-Port-Of: odoo/enterprise#88563 Forward-Port-Of: o
Original PR description
Prior to this commit, the `_sla_generate_status_values` method in the `helpdesk.ticket` model was using a shared list for storing SLAs per ticket. This could lead to unexpected behavior when multiple tickets are processed simultaneously, as they would share the same list instance. We then removed that logic and replaced it by directly excluding the SLAs of the ticket status having a reached deadline, preventing unnecessary recomputation. Forward-Port-Of: odoo/enterprise#88563 Forward-Port-Of: odoo/enterprise#88341
With this PR: https://github.com/odoo/enterprise/commit/d0659e4bea162d52604910e86a93c38bc3769bf1 The field `totals_below_sections` became uncheckable. The cause was a missing readonly=False on the field task-4894698 Forward-Port-Of: odoo/enterprise#88491
Original PR description
With this PR: https://github.com/odoo/enterprise/commit/d0659e4bea162d52604910e86a93c38bc3769bf1 The field `totals_below_sections` became uncheckable. The cause was a missing readonly=False on the field task-4894698 Forward-Port-Of: odoo/enterprise#88491
Steps to reproduce: - Set language to RTL Orientation - Go to Accounting > Reporting > Aged Payable - Add multiple columns to report - Print as PDF Issue: When enough columns have been added to the report, the report will overflow the right side of the page Cause: Wkhtmltopdf does not correctly shrink the table if the direction is specified on the body of the document opw-4746361 Forward-Port-Of: odoo/enterprise#87520
Original PR description
Steps to reproduce: - Set language to RTL Orientation - Go to Accounting > Reporting > Aged Payable - Add multiple columns to report - Print as PDF Issue: When enough columns have been added to the report, the report will overflow the right side of the page Cause: Wkhtmltopdf does not correctly shrink the table if the direction is specified on the body of the document opw-4746361 Forward-Port-Of: odoo/enterprise#87520