Friday, July 11, 2025
33 changes · saas-18.4
Enhancements to existing features
This update restores automated checks for website navigation, mega menu editing, and event ticket purchasing after recent website builder changes disrupted them. It helps ensure these website flows continue to work reliably for users and administrators.
Original PR description
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
Resolved issues and error corrections
The hardware drivers now check that certificate data received from Odoo is not empty before applying it. This avoids failed web server restarts that could disrupt connected IoT or hardware services.
Original PR description
We now ensure that the certificate data returned by odoo.com is not empty, to avoid nginx not restarting. Task: 492610 Forward-Port-Of: odoo/odoo#218467 Forward-Port-Of: odoo/odoo#218325
Miscellaneous changes
Problem: When a paragraph contains a `<br>` element, triple-clicking on any line does not select the entire paragraph — only the clicked line is selected. Solution: Ensure that on triple click, the selection expands to include the entire block, regardless of inline breaks like `<br>`. Steps to reproduce: - Open the Todo app. - Add a paragraph of text. - Use `Shift+Enter` to insert a line break (`<br>`). - Add text on the second line. - Triple-click on the second line. → Only the sec
Original PR description
Problem: When a paragraph contains a `<br>` element, triple-clicking on any line does not select the entire paragraph — only the clicked line is selected. Solution: Ensure that on triple click, the selection expands to include the entire block, regardless of inline breaks like `<br>`. Steps to reproduce: - Open the Todo app. - Add a paragraph of text. - Use `Shift+Enter` to insert a line break (`<br>`). - Add text on the second line. - Triple-click on the second line. → Only the second line is selected, not the full paragraph. opw-4825816 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214907 Forward-Port-Of: odoo/odoo#212139
This fix cleans existing and newly entered Peppol endpoint values before checking whether they are valid. It helps upgraded databases avoid errors caused by older partner records that contain unsupported characters.
Original PR description
Commit odoo/odoo@769a7ec5ed4c introduced a restriction to ensure the Peppol Endpoint only contains valid characters. This causes some issues with upgraded database having existing partner with an invalid value. This commit ensures we properly sanitize both Peppol Endpoint existing and new value (before testing its validity). [opw-4925940](<https://www.odoo.com/odoo/project.task/4925940>) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217904
Clicking empty space near non-editable navbar buttons in the website builder no longer selects the whole navbar or opens the floating toolbar. This keeps editing behavior cleaner and avoids confusing interruptions for users building website pages.
Original PR description
Steps: - In the website builder, have a navbar with an empty space next to a non-editable button (e.g. the shopping cart or the search button). - Click on the empty space next to the button. As a result the whole content of the navbar gets selected (this might not be visible in Chrome), and the floating toolbar opens. It is not clear why the resulting selection is produced (nor why it is not visible on Chrome), but it is not desirable to have the toolbar opened when clicking on the navbar. But making the non-editable buttons also not user-selectable seems to solve the issue. task-4936596
This fix ensures sales product quantities are passed correctly through configurator processes. It supports accurate configuration behavior, particularly for related enterprise sales workflows.
Original PR description
Needed for enterprise purposes, cf. enterprise PR --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes unstable automated tests around the link popover in the HTML editor by using full web addresses in those test cases. The change helps keep test results consistent and reduces false failures during development and release checks.
The sidebar now shows unread discussion channels in bold and read channels in muted styling as intended. This makes it easier for users to quickly spot conversations that need attention.
Original PR description
Before this commit, the channel name in the sidebar would be bold when read and muted when unread which is the opposite of the intended behavior. This happens because in https://github.com/odoo/odoo/pull/217629 the condition to make the name bold or muted got extracted into a component method with the incorrect opposite condition for muted. This commit fixes the issue by changing the condition to the correct opposite. task-4938469
The update prevents the developer data view from trying to load raw binary attachment content, such as PDFs, that can break the connection. This keeps the record data tool stable when reviewing attachments in Odoo.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Enable developer mode; 2. go to Settings / Technical / Database Structure / Attachments; 3. open a PDF attachement; 4. open developer tools; 5. click on Record / Data. Issue ----- > Connection lost. Trying to reconnect... Traceback in logger: > `UnicodeDecodeError: 'utf-8' codec can't decode byte ...` Cause ----- Commit 5ef4c07ada1b4 moved the `json_default` function from `date_utils` to `json`, with the purpose of letting it serialize objects besides `date` & `datetime`. When used for raw data of binary files like PDF, it encounters values that cannot be represented in UTF-8, and because `decode` defaults to strict error handling, an exception is thrown. Solution -------- When sending the `read` request to the ORM, only request fields of that aren't of type `binary` to ensure they're serializable. opw-4717657 Forward-Port-Of: odoo/odoo#218401 Forward-Port-Of: odoo/odoo#209702
Website editors can once again see and use parallax background controls inside popup dialogs. This prevents users from getting stuck with a parallax effect they cannot remove when adding certain website sections to a popup.
Original PR description
In [1], we wrongly removed the parallax option for background image that are in a dialog. This lead to some problems (e.g. dropping a snippet with parallax enabled (s_cover) inside a popup doesn't let you remove it). This commit just revert the change concerning the apparition of the option depending on the context. [1]: https://github.com/odoo/odoo/commit/598827afe40e64b27134cb2c9ddbb9421e8a5d82
The HTML editor’s font size field now adjusts its text color properly when dark mode is enabled. This improves readability and keeps the editing experience consistent for users working in darker interface themes.
Original PR description
Purpose of this PR: - Backport a [PR #206008](https://github.com/odoo/odoo/pull/206008), which ensures that the font-size input now changes its color appropriately in dark mode. task-4897771 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215865
The Indian state previously shown as "Orissa" in contact address selections is now correctly displayed as "Odisha". This aligns Odoo's country/state data with official Government of India naming and avoids outdated information in customer and company records.
Original PR description
<b>Steps to reproduce:</b> 1. Install the `Contacts` module. 2. Go to Contacts > Create a new contact. 3. Select country "India", then open the State dropdown. 4. Observe that "Orissa" appears instead of the updated name "Odisha". <b>Issue:</b> As per [Government of India guidelines](https://www.mha.gov.in/sites/default/files/2022-08/odishaAlterationAct2011%5B1%5D.pdf), the state name was officially changed from "Orissa" to "Odisha" in 2011. However, Odoo still uses the outdated name in the state selection. <b>Solution:</b> Update the name of the state from "Orissa" to "Odisha" in state records. <b>opw-4935633</b> Forward-Port-Of: odoo/odoo#218342
This update adjusts website sales tests so previously sold demo products are archived before the test runs. This prevents demo data from causing false test failures, improving reliability of validation for the online shop module.
Original PR description
Archive previously sold products to make sure they do not make the test fail when demo data are installed. runbot build error 163667 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218423
This fix ensures employee work calendars are checked against the correct company on the employee record, not only on related HR version data. It helps prevent assigning calendars from the wrong company in cases where company fields differ, such as contract templates.
Original PR description
The check_company of the resource_calendar field was only on the hr_version model but should also be on the hr_employee model as the two company fields are not necessarily related (ex: contract templates). task-4894155 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
Products that are allowed to sell when out of stock now show as available for regular delivery, even when in-store pickup is also enabled. This prevents customers from seeing an incorrect delivery-unavailable message and helps avoid lost online sales.
Original PR description
Steps to reproduce: 1) Configure a product and allow selling when out of stock 2) Publish any delivery method 3) Publish the Pickup in-store delivery method 4) Check the product page of the created product Problem: It is shown that the product is not available for delivery even though we allow selling it when out of stock This commit shows that a product is available for delivery (not for in_store one) if allow selling when out of stock is enabled. opw-4792024 Forward-Port-Of: odoo/odoo#218298
The online shop now loads correctly when the search box is enabled or disabled from the backend. This prevents an error page for visitors and lets administrators manage the search box visibility safely.
Original PR description
**Before this PR:** - Toggling the active field of the search box view from the backend caused a traceback on the shop page when loading the frontend. **After this commit:** - The shop page now loads correctly even when the search box view is deactivated or reactivated via the backend. The toggling behavior works as expected without raising errors. **opw - 4918722** Forward-Port-Of: odoo/odoo#217263
The website editor now correctly accepts negative shadow values when adjusting design options. This prevents an error from interrupting users who fine-tune header or element shadow styling.
Original PR description
Since website refactor [1], negative values for the shadow option were not properly handled, leading to a traceback. This commit updates `parseShadow` regex to correctly accept all negative shadow values. These negative values are crucial for precise shadow styling, enabling effects like inner shadows or shadows that extend inward or upward. Steps to reproduce: - Edit website - Click on header - Modify shadow offset to a negative value - A traceback occurs [1]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2
This fixes a recent issue that limited menu icons to PNG files only. Businesses can once again use common image formats such as GIF, JPEG, SVG, ICO, and WebP for menu icons, restoring the flexibility available in earlier versions.
Original PR description
Description of the issue/feature this PR addresses: PR #135607 breaks support of image types other than `png` for menu icons. This puts back the support for previously supported image types. Current behavior before PR: You can't use a menu icon which has a type other than `png`. Desired behavior after PR is merged: You can use `gif`, `ico`, `jfif`, `jpeg`, `jpg`, `svg` and `webp` files like version `16.0`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218131
This fixes an unreliable automated test for adding a new line in detailed stock operations. The change helps prevent false test failures, supporting smoother validation and delivery of stock-related updates.
Original PR description
The `test_add_new_line_in_detailled_op` fails in 18.0+ since clicking on the head of the modal content will trigger a web_read before the records has been updated in db. So that the last applied change disappear. This commit attempt to clean the tour to be more reliable. runbot-113534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216860 Forward-Port-Of: odoo/odoo#216645
Employees can now post expenses even if they do not have a work email address recorded. This avoids unnecessary blocking because the related contact can be created without relying on that email field.
Original PR description
- removed work email constraint while posting the expense as the partner is now created without the need of work email --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218279 Forward-Port-Of: odoo/odoo#212211
Work order lists in Manufacturing can once again be edited in batches. This fixes an accidental change that removed multi-editing, helping teams update multiple work orders more efficiently.
Original PR description
Multi-edit was disabled from the WO list view by mistake in commit: https://github.com/odoo/odoo/commit/5767cf0c0cbf2a4130430cd92a3cba8891b84510 Therefore, it has been re-enabled. Task: 4900236 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216143
This update corrects how employee version deletions are validated so archived versions do not incorrectly affect the check. It also handles deletions involving multiple employees, helping ensure every employee keeps at least one active version as required.
Original PR description
"An employee must always have at least one active version." The constrain had two issues: 1. it took into account the number of archived versions selected for deletion, but it shouldn't. 2. It assumed a single employee for all versions getting deleted. Task-4903960
This fixes intermittent failures in automated live chat rating checks by ensuring the chat session is fully created before it is closed and rated. It helps keep chatbot rating flows consistently verified, especially under slower system conditions.
Original PR description
Chatbot rating tours can sometimes fail. They all share the same steps: start a chat, close the chat, then rate the agent. Before closing the chat, the tours check that the message is present in the DOM, assuming it has been posted, then close the chat window. However, this is not enough to guarantee the thread was properly created. Initially, a temporary thread is shown. When the user sends the first message, a temporary message is posted on that thread while the real thread is created asynchronously. As a result, closing the chat after checking the message in the DOM doesn’t guarantee the window belongs to the persisted thread. If it doesn’t (due to slow network or high CPU load), the rating panel never shows because the real thread was never closed. This commit fixes the issue by waiting for the persisted thread to be created before closing the chat. fixes runbot-159683 Forward-Port-Of: odoo/odoo#218318
This update addresses unnecessary hidden fields across several country-specific accounting and compliance views. It keeps stable-version tests passing while reducing the risk of issues for customers with customized views.
Original PR description
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216095 Forward-Port-Of: odoo/odoo#206026
This fixes an issue where changing the size of selected heading text in the website builder did not take effect when the heading already had a predefined size style. Business users can now adjust heading sizes more reliably while editing website content, reducing formatting frustration and manual cleanup.
Original PR description
Steps to reproduce: - In the website builder, drop a snippet with a heading that has a font-size class (e.g. `<h2 class="h4-fs">`). For instance "Key benefits" - Select the text of the heading and try to change its size => It doesn't work. The class remains, and no span child is created. Until [1], in such a case, a span child was created, but the original class was not removed. This is a best effort with the current editor: ideally, the new class should be applied on the heading tag itself (to avoid weird line heights). The behavior was introduced with [2] but was not replicated in the html_editor refactoring [3], which did not need it at that time. [1]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 [2]: https://github.com/odoo/odoo/commit/194f73a9bbad8c3c3fb5c378e7bdfa704aaacdc0 [3]: https://github.com/odoo/odoo/commit/97117e70a1766ad24f5ec14ffef303127d56b76b task-4367641
This fixes an intermittent failure in the automated test for the website live chat bot conversation flow. It ensures the test waits for the chat bot to actually finish its delayed response handling, improving confidence in live chat quality checks without changing customer-facing behavior.
Original PR description
Before this commit, the `website_livechat_chatbot_flow_tour` tour was sometimes failing. The intent it to ensure the chat bot stops until the user fully wrote his answer. The flow is the following: -…
Before this commit, the `website_livechat_chatbot_flow_tour` tour was sometimes failing. The intent it to ensure the chat bot stops until the user fully wrote his answer. The flow is the following: - User sends a message (first part of his answer) - User starts typing: the chat bot waits - After some time, the user didn't finish his answer afterall, the chat bot continues. The chat bot uses the `_processAnswerDebounced` function to delay the processing of the step. However, the tour relies on `setTimeout`, expecting to come after the debounce delay. However, multiple messages are sent, and the debounce delay is postponed. As a result, the assertion is made too early, making the test fail. This commit fixes the issue by awaiting a deferred, resolved when the chat bot actually executes the debounced function. fixes runbot-113948,227675 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#218222 Forward-Port-Of: odoo/odoo#218153
The Belgian payroll double holiday pay report now uses the correct payslip-based label instead of referring to the 13th month. This makes generated payroll documents easier to identify and reduces confusion for HR and employees.
Original PR description
Originally, the name structure for double holiday follows "13th Month -[Legal Name] -[year]". It has been renamed to "[Payslip name]- [Legal Name] -[year]" . Forward-Port-Of: odoo/enterprise#88732
This fix prevents an error when generating Peru Stock Move PLE valuation reports. Users can now run the PLE 13.1 report for Peruvian companies without the report failing due to missing product category data.
Original PR description
Currently, an error occurs during the valuation of the Stock Move PLE reports. Steps to Reproduce: - Install the `l10n_pe_reports_stock` module. - Create a `new company` with the country set to…
Currently, an error occurs during the valuation of the Stock Move PLE reports. Steps to Reproduce: - Install the `l10n_pe_reports_stock` module. - Create a `new company` with the country set to `Peru`, and switch to this company. - Go to `Receipts` in `Inventory`, create a `new receipt`, and `validate` it. - Go to `Valuation` and click on `PLE Reports`. - Select the `start date` as the day after today, and click on `PLE 13.1`. `KeyError: 'category'` This error occurs during the valuation of the Stock Move PLE reports. In the query, we retrieve product_template.categ_id as category_id [1], but later category [2] is used to access category_id. Since the category key is not present in the line, this causes the error. [1] https://github.com/odoo/enterprise/blob/95d20fca13efa0977018b0dc260efd410891fce6/l10n_pe_reports_stock/wizard/stock_move_ple_report.py#L241 [2] https://github.com/odoo/enterprise/blob/95d20fca13efa0977018b0dc260efd410891fce6/l10n_pe_reports_stock/wizard/stock_move_ple_report.py#L303 This commit ensures that category_id is used in place of category for safe evaluation. sentry-6723761615 Forward-Port-Of: odoo/enterprise#89379
Users can now share shortcut folders from the cog menu next to the breadcrumbs in Documents. This fixes a missing sharing option and removes unused code, making folder sharing more consistent.
Original PR description
Before this commit, the share action in the cog menu (next to the breadcrumbs) wasn't available for shortcut folders. This commit fix this issue. This commit also removes some dead code. Task-4897840 Forward-Port-Of: odoo/enterprise#89161 Forward-Port-Of: odoo/enterprise#88512
This update ensures the invoice option is selected before validating Italian point-of-sale orders, preventing a validation error that could block sales completion. It also removes a duplicate line in the UrbanPiper POS integration, with no expected change for users beyond cleaner behavior.
Original PR description
## After this commit: - It ensure invoice checkbox is selected before validation, preventing the error and allowing the order to validate correctly. - Removed repeated line in `pos_urban_piper`. Runbot [link](https://runbot.odoo.com/odoo/runbot.build.error/159985) Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4916349) runbot-159985 task-4916349 Forward-Port-Of: odoo/enterprise#90018 Forward-Port-Of: odoo/enterprise#89486
The India reports now use the official state name “Odisha” instead of the outdated “Orissa”. This keeps tax reporting labels aligned with Government of India terminology and avoids confusion for users reviewing statutory reports.
Original PR description
Issue: As per Government of India guidelines, the state name was officially changed from "Orissa" to "Odisha" in 2011. However, Odoo still uses the outdated name in report. Solution: Updated the records from "Orissa" to "Odisha". opw-4935633 Forward-Port-Of: odoo/enterprise#89947
This update documents hidden fields across several localization and payroll screens so automated checks pass consistently in stable versions. It reduces maintenance risk while preserving current behavior for customers and custom views.
Original PR description
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. Forward-Port-Of: odoo/enterprise#88643 Forward-Port-Of: odoo/enterprise#83421
Offer processing for applicants now creates only one salary contract version when a new employee record is created. This avoids duplicate versions at the end of the signature process, making employee offer records cleaner and easier to manage.
Original PR description
Current Behavior: When you send an offer to an applicant it will create two versions at the end of the process: https://tinyurl.com/253j3683. Behavior after PR is merged: When you send an offer to an applicant it will only create one version* for the employee created from the applicant. Change: Removed the unnecessary initial version created for fresh employee records coming from applicants' offers. *: note that this new version will be active, even when awaiting full signature, this might be acceptable since the fresh employee record would be archived, which is different from existing employees offers, where the employee remains active, and the new version is archived till full signature. Task-4903960