Friday, October 10, 2025
22 changes · 18.0
Enhancements to existing features
This pull request improves Odoo's Hoot unit testing tools by fixing event simulation, error reporting, and documentation issues. It also simplifies how test helpers are imported, reducing confusion for developers while keeping changes limited to the test ecosystem and minimizing product risk.
Original PR description
## Pull Request HOOT 37 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/96647 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
The course website now handles cases where someone opens an embed link for a course category instead of an individual lesson. Instead of showing an error page, visitors are redirected back to the course homepage, improving reliability and user experience.
Original PR description
When users try to access a `slide ID` that is not included in `channel_slides_ids`, a traceback occurs. Steps to reproduce: --- - Install `website_slides` module - Go to the Website and click on the…
When users try to access a `slide ID` that is not included in `channel_slides_ids`, a traceback occurs. Steps to reproduce: --- - Install `website_slides` module - Go to the Website and click on the `Courses` menu. - Then go to `/slides/embed/<int:slide_id>` route. (http://localhost:8069/slides/embed/7) - The error will occur. Traceback: --- `ValueError: 7 is not in list` At [1], `slide_content_ids` contains the IDs of `channel content`. However, we are trying to access a slide from the `channel category` in URL. As a result, at [2], when attempting to find the index of the slide in `slide_content_ids`, an error occurs because the slide ID actually belongs to `slide_category_ids` and is not present in `slide_content_ids`. Solution: --- Added a special case for category slides — if the slide is a category, redirect to the channel homepage. [1]- https://github.com/odoo/odoo/blob/482bb19e103de9ddbe1b1942b94b33d3da38889b/addons/website_slides/controllers/main.py#L120 [2]- https://github.com/odoo/odoo/blob/482bb19e103de9ddbe1b1942b94b33d3da38889b/addons/website_slides/controllers/main.py#L121 sentry-6572999628 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documentation and clarification updates
This update adds Tomasz Walter to Camptocamp's corporate contributor license agreement records. It confirms the contributor is covered for legal contribution purposes, with no effect on product functionality or users.
Original PR description
Please add me as a member of the Camptocamp organization. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Dutch localization now uses the correct default accounts for deferred revenue and expenses. This helps Dutch companies record deferred items in the right accounting categories, improving accuracy in financial setup and reporting.
Original PR description
The default deferred accounts in the Dutch localization were incorrect. This commit sets the proper accounts and adjusts the `account_type` of the default deferred expense account from "Prepayments" to "Current Assets". task-5152529 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230499
The HR setup data no longer recreates the default admin employee record during updates. This prevents customer-configured employee administration workflows from being disrupted by an unnecessary default record returning.
Original PR description
The `employee_admin` is a default admin option. Later when clients set up their work flow they set up their own admin employee. This record is not present, and it doesn't make sense recreate it with every update. 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#230250 Forward-Port-Of: odoo/odoo#228117
Invoices can no longer use SEPA direct debit mandates that have already been closed. This helps avoid invalid payment selections and ensures only currently active mandates are available for customer payments.
Original PR description
**The issue:** It's currently possible to create select SEPA payment for an invoice when the mandate is "closed" instead of "revoked". **Cause:** The search for usable mandates, is not taking into consideration the "closed" state and looking for non draft/revoked. **Fix:** Changed the query to look specifically for "active" mandate. opw-5048748 Forward-Port-Of: odoo/enterprise#96381
Printing Kanban views with many records now handles page breaks more reliably. This prevents cards from being cut off at the top of later printed pages, making printed reports easier to read and use.
Original PR description
This commit fixes the kanban view print to better handle the page break. The issue was caused by the flex layout: when printing, heights often misbehave on the last row or at page breaks. task-4630646 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
An unstable automated test for the website shop was removed from Odoo 18 versions because it was causing random failures in the validation system. This helps keep release checks reliable without changing customer-facing website shop behavior.
Original PR description
Versions -------- - 18.0 - saas-18.2 - saas-18.3 - saas-18.4 Issue ----- The `test_toggle_contact_us_button_visibility` causes random errors in runbot. Cause ----- Unsure, but with commit 26d22fc975e3f removing jQuery from `VariantMixin`, the random error no longer seems to pop up. Solution -------- Remove the test for versions before 19.0. runbot-145473
An unused section in the Swiss payroll ELM employee screen is now hidden. This keeps the interface cleaner and reduces confusion for payroll users without changing payroll processing behavior.
Fixes an issue in the HTML editor where power buttons could disappear after a user undid typed content. This keeps editing controls visible and reduces confusion while using undo in the editor.
Original PR description
Steps to Reproduce: 1. Insert some text into the editor (e.g., type "a"). 2. Press `Ctrl + Z` to undo the insertion. 3. Observe that the power buttons are not visible. Description of the issue/feature this PR addresses: Power buttons were not visible after pressing Ctrl+Z (undo). Desired behavior after PR is merged: Trigger `updatePowerButtons` when the `CONTENT_UPDATED` command is dispatched, ensuring that the power buttons are updated and made visible. task-4309762
This fix prevents an error when shoppers click to zoom a product page image where only one image is available. It keeps the product browsing experience smooth and avoids a disruptive client-side crash in the online store.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Enable zoom-on-click on product page; 2. have a product page with only a single image; 3. click on the image. Issue ----- > Odoo Client Error > Caused by: TypeError: can't access property "addEventListener", carousel is null Cause ----- Commit 83b79c198eac added event listeners to make the carousel interactive. Issue is that the carousel element doesn't exist in the DOM if there's no extra media. Solution -------- Check if the carousel element exists before adding event listeners. opw-4937009
Datetime fields now correctly hide the time portion when the option to show time is turned off. This prevents users from seeing unnecessary time information in date-related forms and keeps the display aligned with configuration choices.
Original PR description
### Before this PR show_time didn't affect the datetime field. With this PR, the time is correctly hidden if show_time is false ### After this PR show_time will hide the time in datetime field --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The manufacturing order overview now shows the same bill of materials cost as the bill of materials overview. This prevents mismatched cost figures and helps teams rely on consistent manufacturing cost information.
Original PR description
The BOM cost in the MO overview should be the same as the BOM cost in the BOM overview. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix updates test data so products are treated as properly configured instead of missing key setup details. It prevents false test failures caused by recent lead time handling changes, helping keep manufacturing planning and rental workflows reliable.
Original PR description
This PR addresses the issue where tests were failing due to unconfigured products (no vendor/ no BoM). Now unconfigured products' lead_time is incremented by 365 due to this PR: https://github.com/odoo/odoo/pull/216293 Before this fix: Products have `buy` route by default and no vendor, so they are considered unconfigured products and lead time is incremented by 365, and tests fail as any lead time refers to a date earlier than today would only affect the first period in the MPS which is not intended in the tests. After this fix: Products have `manufacture` route and there is BoM, so they are considered configured products and lead time is calculated normally from BoM which is 0. Task-4779057
The India localization test setup was adjusted so it no longer needs the US accounting module when demo data is absent. This improves reliability of internal testing and helps prevent avoidable errors during validation, without changing business features for users.
Original PR description
Standalone `l10n_in` tests were failing when running without demo data because outside-India companies (e.g., US) were defaulting to their country-based chart of accounts. This required the `l10n_us_account` module, causing errors when the module was not installed. <img width="518" height="28" alt="image" src="https://github.com/user-attachments/assets/748663a0-f329-459c-b0e8-0c3de7019258" /> This commit adapts the test cases to run without l10n_us_account dependency. task- 5116352
This update adjusts an internal workaround used by Odoo's Gantt app automated tests after recent testing infrastructure changes. It helps keep the test suite running consistently without changing customer-facing Gantt functionality.
Original PR description
## Pull Request HOOT 37 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/230556
SEPA payments will now be marked as high priority only for Belgian companies. This helps avoid unnecessary bank fees in other countries, such as Switzerland, while preserving the expected handling for Belgium.
Original PR description
Having priority set as HIGH for SEPA payments can induce extra fees (ex. in CH). This commit only sets the priority to HIGH for BE companies. task-4874217 Forward-Port-Of: odoo/enterprise#95420
Maintenance equipment pages now open reliably even if customized workflows leave repair date fields empty. The system handles these unusual missing dates gracefully, preventing an error that could block users from viewing equipment records.
Original PR description
Using standard Odoo, `maintenance.request.close_date` should never be `False` when its `stage_id == 'done'`, but customizations/manual overrides allow users to force it to be `False` and block them…
Using standard Odoo, `maintenance.request.close_date` should never be `False` when its `stage_id == 'done'`, but customizations/manual overrides allow users to force it to be `False` and block them from opening equipment views that displayed fields that depended on it. Steps to reproduce: - Create new maintenance request for an equipment - Put maintenance request into a `maintenance.stage` where `done=True` (e.g. "Repaired") - Force `close_date` to not be `readonly` in form view + set it to `False` - Try to open the assigned equipment's form view Expected result: Form view opens without issue Actual result: `unsupported operand type(s) for -: 'bool' and 'datetime.date'` Issue was due to `mttr` calculation in `_compute_maintenance_request` not expecting `close_date` to be `False`. Since we want the request to still be considered for the rest of the compute, we count its "Time to Repair" as 0 in this case since we cannot use infinity in this case. Additionally, we also gracefully fail in the same way in case `request_date` is also forced to be `False` since it is not a mandatory field and can cause the same issue. 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#230821
This update adds safeguards so Danish Nemhandel connections in copied or test databases do not send or register data on production services. Existing proxy clients are switched to demo mode, while new connections use the test server.
Original PR description
To avoid sending/registering on production, add a neutralize script. The existing proxy client are put in demo mode. The new connections will be registered on the test server. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Discuss call interface now hides participant volume controls when the user is not actually in the call. This avoids confusing controls being shown to people who cannot use them, making the call experience clearer.
Original PR description
Before this PR, the volume slider for call participants was visible even when the user was not part of the call. This PR fixes the behavior by ensuring the volume slider is only available when the user is in the call. task-[5092826](https://www.odoo.com/odoo/project/1519/tasks/5092826) Forward-Port-Of: odoo/odoo#227803
Event organizers using Track Quiz will now see the Community menu button as intended, even when the separate event meeting feature is not installed. This restores access to the expected event community option and avoids confusion when configuring quiz-enabled events.
Original PR description
In the event form the "community" button is supposed to be shown when "track quiz" is installed. However when this was done in [1] there a mistake was made and only the label was removed, as well as the wrong field added after it. That field was removed in [2] but it was again not noticed that only the label was made visible. It may not appear easily because installing website_event_meet also unhides both the label and the field. Hence you only ge this issue when installing track quiz without it. However in 18.3 [3] removed website_event_meet which means the issue is not corrected anymore. task-5159806 [1]: https://github.com/odoo/odoo/commit/147cf5f328f5a55882a62a4279d1d92511628320 [2]: https://github.com/odoo/odoo/commit/c0f0f9f47573b74ca6b1fcdc3383e43f28f7a2e1 [3]: https://github.com/odoo/odoo/commit/9cab4f8f77f71e405971c184544765e8f252a012
This fixes an internal test issue that could occur when automated checks ran across midnight. It helps keep accounting follow-up report validation stable and avoids false failures in the release process.
Original PR description
Tests https://runbot.odoo.com/odoo/runbot.build.error/159772 where failing when setUpClass run before midnight and the test itself run at/after midnight because `today` was not the same. As follow-up report divides the lines per partner to due/overdue utilizing `today` in comparison, This resuls in different lines than expected.