Monday, October 13, 2025
134 changes
10 changes
Resolved issues and error corrections
The online shop category sidebar now handles long category names correctly, including nested categories. This prevents layout distortion and keeps the product browsing experience visually consistent for shoppers.
Original PR description
__Issue:__ In the product categories sidebar (`#products_grid_before`), nested `<li>` elements could become wider than their parent `<ul>` when the category names were long (e.g., "Untersuchungshandschuhe"). This caused the parent <ul> to expand in height before the child and broke the visual layout. __Fix:__ Force `<li>` elements inside the `#categories_recursive` list to respect their parent width by applying `width: 100%` This keeps the sidebar layout consistent even with long category names. - opw-5075226 Forward-Port-Of: odoo/odoo#228343
When a user types a full URL and it is automatically converted into a link, the link popover now correctly shows the prompt to replace the URL with the page title. This makes the editing experience clearer and restores the intended option for newly created links.
Original PR description
**Current behaviour before PR:** Steps to reproduce: - Type a full valid URL e.g. `https://odoo.com` - Press space to create link. - Open popover by clicking on link. There is no banner at the bottom of popover showing "Replace URL with its title?" when a newly link is created. After merging this commit [1], When the link popover is opened for the first time, replace title option should be visible in the popover. **Desired behaviour after PR:** Now, replace title banner is shown at the bottom of popover if link is created by transformation. [1]: https://github.com/odoo/odoo/commit/7da241d6fd3a3fa1e6d617b436d397b5b28320cf task-5085975 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor now only shows the Countries Filter option on the Customers page where it actually applies. This avoids confusing editors on the Partners page with a setting that has no effect.
Original PR description
Scenario: - install website_customer and website_crm_partner_assign - go to /partners - in edit mode, disable the option "Countries Filter" Result: nothing happen Cause: there is no filter options on /partners page, but the options of /customers page are targetting class o_wcrm_filters_top that is common to both page, so they are shown on /partners incorrectly. Fix in stable: change the selector to only show options on /customers. Fix in master: in website_customer, change the o_wcrm_filters_top class to o_wc_filters_top class. opw-5102381 Forward-Port-Of: odoo/odoo#228575
Selected tags on website blog and eLearning pages are now preserved when users open the website editor, refresh through navigation, or use the search bar. This prevents visitors and editors from unexpectedly losing active filters, making browsing and content management more reliable.
Original PR description
Before the change in the blog/slides pages of a website every tag but one disappears when opening the editor or when the search bar is used. Steps to reproduce: - Log in Odoo with a user that can access the website editor Open the Website - Install the blog app if it is not already present - Open the blog app - Click on two or more tags to add them to the filter Open the Website editor or use the search bar - Every tag but one will be removed After the change all the tags will be kept when opening the editor or using the searchbar. task-4216129 Fixes #164577 Forward-Port-Of: odoo/odoo#226898
SEPA payments will now use high priority only for Belgian companies. This helps companies in other countries avoid potential extra bank fees caused by unnecessary high-priority payment processing.
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#96869 Forward-Port-Of: odoo/enterprise#95420
This fixes a collision issue in sales commission reporting where some commission adjustment logs could generate the same internal report record ID. The change helps ensure commission achievements remain distinct and accurately represented after transfers or adjustments.
Original PR description
This commit 5b6fdda126e4cfa5ebf92f7b96d1805f6c4b992b introduce an entropy date to avoid having two separate achievment.report record with the same ID. Entropy date for log where based on the write_date, this commit 03d1ee3495a4936fbff0d21743bb784c85b50b12 add the sign of the amount. Unfortunatly this is not enough, the adjustment after the transfer can be positive as well and thus two achievment ends-up with the same ID anyway. This commit use the id of the log to add more entropy to the entropy_date, since log are created in the same transaction, they are likely to have id just seperate by one or only few number, id % 10 seems enough, therefore two log on the same order, with the same create_date will have different entropy date and end up with a different id. Forward-Port-Of: odoo/enterprise#96622
This change updates internal test data so products are treated as properly configured for manufacturing instead of as incomplete purchase items. It prevents test failures caused by artificially extended lead times, helping keep planning and rental workflows reliable in validation.
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 Forward-Port-Of: odoo/enterprise#88766
The sales commission achievement report now uses the latest end date from relevant commission plans when setting its default date range. This prevents reports from ending too early and helps users see the full expected commission period.
Original PR description
When there is active_plan_ids in the context the date_to are the max of plans' date_to when not it's the min, this is wrong it should be the maw as well Forward-Port-Of: odoo/enterprise#96526
Analytic grid reports now keep all months visible when weekends are hidden in the yearly view. This prevents missing month columns and makes year-level reporting easier to read and rely on.
Original PR description
To reproduce: ============= 1- Go to Analytic Reporting. 2- From the year dropdown, uncheck "Show weekends". → Some months disappear unexpectedly. Problem: ========= Weekend filtering was applied even in year range. In year view, each column is already a full month, so filtering out weekends is incorrect. Fix: ==== Adjust the condition to skip filtering when range is not "month". Weekend logic now only applies to month range grid. community-pr: https://github.com/odoo/odoo/pull/226975 opw-5078200 Forward-Port-Of: odoo/enterprise#96171 Forward-Port-Of: odoo/enterprise#94593
This fixes an issue where some translated error messages displayed byte-string content as a list of numbers instead of readable text. Users may now see clearer server or connection error details in their selected language.
Original PR description
Improvements introduced by https://github.com/odoo/odoo/pull/197702 streamlined the auto formating of iterables to lists when passed as an argument to translatable strings in Odoo. While doing so,…
Improvements introduced by https://github.com/odoo/odoo/pull/197702 streamlined the auto formating of iterables to lists when passed as an argument to translatable strings in Odoo.
While doing so, strings were ignored (to prevent formating them as a list of the individual characters), but they failed to account for the fact that **byte strings** might also be passed as arguments in certain parts of the code.
An example can be found here:
https://github.com/odoo/odoo/blob/f037c39ad4d33384f81a418cb63fcdd6a5085d56/odoo/addons/base/models/ir_mail_server.py#L265-L278
`repl` in this context will be a byte string object returned by the SMTP connection.
## BUG:
Before the fix, if you would pass a byte string as an argument to a translatable string using keyword templating, the output would be the raw representation of the bytes as a list instead of the human readable content.
For example if we use in a french localisation:
`raise UserError(_('The server refused the test connection with error %(repl)s', repl=b'TEST byte string'))`
Before the fix we could get:
`Le serveur a refusé la connexion de test avec l'erreur 84, 69, 83, 84, 32, 98, 121, 116, 101, 32, 115, 116, 114, 105, 110 et 103`
And after the fix:
`Le serveur a refusé la connexion de test avec l'erreur b'TEST byte string'`
## Proposed fix:
In the same way that we ignore `str` arguments before auto applying the `format_list` method, we will also ignore them if the type is `bytes`
OPW-5107313
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#2311796 changes
Resolved issues and error corrections
The Analytic Reporting grid now keeps all months visible when users hide weekends in a yearly view. This prevents confusing missing-month reports because weekend filtering is only applied where it makes sense: month-level grids.
Original PR description
To reproduce: ============= 1- Go to Analytic Reporting. 2- From the year dropdown, uncheck "Show weekends". → Some months disappear unexpectedly. Problem: ========= Weekend filtering was applied even in year range. In year view, each column is already a full month, so filtering out weekends is incorrect. Fix: ==== Adjust the condition to skip filtering when range is not "month". Weekend logic now only applies to month range grid. community-pr: https://github.com/odoo/odoo/pull/226975 opw-5078200 Forward-Port-Of: odoo/enterprise#94593
1 change
Resolved issues and error corrections
This update corrects automated test setup for products used in manufacturing planning and rentals. It ensures test products are treated as properly configured, preventing false failures caused by default lead-time rules rather than real business issues.
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 Forward-Port-Of: odoo/enterprise#88766
12 changes
Enhancements to existing features
Payment terminals will no longer be automatically registered for event handling because they already manage those events themselves. This reduces unnecessary setup work and helps avoid duplicate or incorrect event processing for connected payment devices.
Original PR description
As for printers that can send event whenever they want, payment terminals handle event themselves. We then removed auto event registering for payment terminals. odoo/enterprise#96634
2 changes
Resolved issues and error corrections
Changing a user's locale can alter the first day of the week, which affects how spreadsheet pivot data is grouped by day. This fix reloads pivot data after a locale change so reports continue to show accurate day-of-week values.
Original PR description
Chaning the locale can change the first day of the week. But the normalization of the server value depends on this `locale.weekStart`, se we need to reload the pivot when the locale changes, otherwise we might display wrong values for a "day_of_week" grouping. Task: [5149508](https://www.odoo.com/web#id=5149508&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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
3 changes
Resolved issues and error corrections
Website form fields now keep their spacing settings when display options such as label position or description are previewed or changed. This prevents accidental layout changes and saves editors from having to reapply spacing manually.
Original PR description
Before this commit, changing display parameters of a field (label position, description, etc.) would remove the offset already added. It would require to add them again if a change was made on the display, even if the mouse just hovered the buttons. This commit solves the issue. Steps to reproduce the bug: - Add a form snippet - Add an offset to a field - In the snippet customization, hover over the label position (The offset was removed for good) task-3675509
When a website is created with only the Events option selected, Ecommerce will no longer be installed automatically. This keeps the setup focused on the selected business need and avoids adding irrelevant sales features.
Original PR description
Steps to reproduce: 1. Install website module 2. Select events in configurator 3. Build website. => Ecommerce is installed, which should not as it does not make sense with only the events. After this commit: - Ecommerce will no longer be installed when the events is configured. task-4922600 Forward-Port-Of: odoo/odoo#221527
The website editor no longer shows the Countries Filter option on the Partners page, where it had no effect. This prevents confusion for website editors by keeping customer-page settings visible only where they apply.
Original PR description
Scenario: - install website_customer and website_crm_partner_assign - go to /partners - in edit mode, disable the option "Countries Filter" Result: nothing happen Cause: there is no filter options on /partners page, but the options of /customers page are targetting class o_wcrm_filters_top that is common to both page, so they are shown on /partners incorrectly. Fix in stable: change the selector to only show options on /customers. Fix in master: in website_customer, change the o_wcrm_filters_top class to o_wc_filters_top class. opw-5102381 Forward-Port-Of: odoo/odoo#228575
SEPA payment files will now mark payments as high priority only for Belgian companies. This helps companies in other countries avoid unnecessary bank fees while preserving the required behavior 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#96869 Forward-Port-Of: odoo/enterprise#95420
This fix updates test setup data so products are treated as properly configured instead of missing required supply details. It prevents false test failures caused by artificially extended lead times, 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 Forward-Port-Of: odoo/enterprise#88766
This update corrects an automated test so it no longer depends on Belgian localization behavior that may not be present in smaller app builds. It helps keep Peppol-related quality checks reliable without changing customer-facing features.
Original PR description
This commits fixes test we previously added [1]. In Belgium, the Company Registry (0208) and the VAT number (9925) can be computed from each other (`0208:0400000000` <-> `9925:BE0400000000`). [This compute](https://github.com/odoo/odoo/blob/0d8aadb2db7f10d439e10f222ec0ab6dcfab3672/addons/l10n_be/models/res_partner.py#L13) is actually only available in l10n_be, while the test rely on it to deduce the expected EAS, and therefore fails on single Apps builds. [1]: https://github.com/odoo/odoo/pull/230880 [runbot-error-233343](https://runbot.odoo.com/odoo/runbot.build.error/233343)
Resolved issues and error corrections
This fix prevents users from creating a to-do item without a name, avoiding an error that could appear during quick creation. It also adds a safeguard for existing records with missing names so they no longer trigger the same failure.
Original PR description
Currently, an error occurs when user tries to create a to-do with no name. Steps to replicate: - Install Project. - Go to `To-Do > Click New > Click Add`. - Error will occur on the terminal. Error:…
Currently, an error occurs when user tries to create a to-do with no name. Steps to replicate: - Install Project. - Go to `To-Do > Click New > Click Add`. - Error will occur on the terminal. Error: `TypeError: expected string or bytes-like object, got 'bool'` Cause: - The error occurs after a recent [PR], that changed `name` field in the to-do app's kanban view to `display_name`. - As `display_name` is not a required field this will allow the creation of task and trigger the method `_inverse_display_name`. - This will cause the error to occur at line [1] (because `task.display_name` is False). Solution: - Made the field required through xml similar to the `project.task` kanban view in the project app [2]. - Also handled the case when `display_name` is received falsy at [1] by skipping the execution and continuing the loop (this is mostly for the existing DBs). [PR]: https://github.com/odoo/odoo/pull/205354 [1]: https://github.com/odoo/odoo/blob/b81d119fae5f5194334cee94bacffefeb1cd8c6e/addons/project/models/project_task.py#L801 [2]: https://github.com/odoo/odoo/blob/b81d119fae5f5194334cee94bacffefeb1cd8c6e/addons/project/views/project_task_views.xml#L609 sentry-6913627252 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Creating a company in the Belgium localization no longer crashes when an alphanumeric ZIP code is entered. The system now skips region calculation for invalid Belgian ZIP codes, preventing disruption during company setup.
Original PR description
Currently, in the Belgium localization, creating a company with an alphanumeric ZIP code raises an error. **Steps to Reproduce:** 1) Install **account,l10n_be_reports** module 2) Navigate to…
Currently, in the Belgium localization, creating a company with an alphanumeric ZIP code raises an error. **Steps to Reproduce:** 1) Install **account,l10n_be_reports** module 2) Navigate to **Settings>Users & Companies>Companies**. 3) Create a New Company and first set country as `Belgium` and then set a alpha-numeric value to `ZIP=(e.g. R93R2R3)` 4) Click anywhere on the screen **Error:** `ValueError: invalid literal for int() with base 10: 'R93R2R3'` **Root Cause:** since [this commit](https://github.com/odoo/enterprise/pull/93219/commits/d9f116b5ceda85a11c997b8d46ec9af5425cbf09), a new field `l10n_be_region_id` is computed based on zip as shown at [1]. When an alphanumeric `ZIP` is added, the computation searches the company region based on `zip_start` and `zip_end` as shown at [1]. However, `zip_start` and `zip_end` expect integer values only, as mentioned at [2], which causes the error. **Fix:** Prevent calculation of region for companies with invalid zip code for belgium localization. [1]- https://github.com/odoo/enterprise/blob/424a470188756fffed4437b83d127039795fbe59/l10n_be_reports/models/res_company.py#L37-L45 [2]- https://github.com/odoo/enterprise/blob/71cc92c9526234dcd44ec756375647a67729029f/l10n_be_reports/models/l10n_be_company_region.py#L17-L18 sentry-6931185627
This fix updates test data so products are treated as properly configured for manufacturing instead of missing setup details. It prevents false test failures caused by inflated lead times, helping keep planning and rental workflows reliable during validation.
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 Forward-Port-Of: odoo/enterprise#88766
Employee contracts in multi-company setups now only show insurance options that belong to the relevant company. This prevents users from accidentally selecting insurance records from another company, improving payroll data accuracy.
Original PR description
Currently, in a multi-company setup, you are able to select insurances from other companies on the employee contract task-5157106 Forward-Port-Of: odoo/enterprise#96932 Forward-Port-Of: odoo/enterprise#96821
Fixes an issue in the HTML editor where undoing image rotations, resizing, or dragging required several undo actions. Users can now press Ctrl+Z once to restore the image to its original state, making content editing more predictable and efficient.
Original PR description
**Current behavior before PR:** - When rotating, resizing, or dragging an image using the transform container, pressing Ctrl+Z did not revert the image to its initial state (when the transform container was opened). - Instead, it required multiple undo operations to return to the initial state. **Desired behavior after PR is merged:** - Pressing Ctrl+Z now correctly reverts the image to its initial state in a single undo, after a transformation. task-5114320 Forward-Port-Of: odoo/odoo#230211 Forward-Port-Of: odoo/odoo#228720
This update ensures multiple quote carousel sections on a website page each get their own unique identifier. As a result, navigation controls like next and previous now operate the correct carousel instead of accidentally moving another one.
Original PR description
The selector used to target the carousel, to generate unique ID, did not include some carousels (s_quotes[...]). This led to issues with the controllers that would not be linked to the correct carousel. Steps to reproduce the issue: - Go to Edit - Drop two "s_quotes_carousel" - Save - Click on the "next" arrow of the second carousel => The second carousel does not slide, but the first one does. Forward-Port-Of: odoo/odoo#230541
Phone numbers in the VoIP call list now stay properly aligned when no country flag is shown. This removes a small visual offset that affected calls to invalid or unrecognized numbers, making the list easier to read.
Original PR description
In the voip.call list view, when no flag is displayed, the phone number is slightly offset to the right. This is because the margin that separates the flag from the phone number is still present. This commit moves the margin from the phone number (always displayed) to the flag (sometimes absent). How to reproduce: 1. Make a call to an invalid phone number 2. Go to voip.call list view 3. Look at the numbers without a flag
The command palette now keeps all repeated characters visible when highlighting search matches in app names. This prevents confusing or misspelled-looking results, such as “Meeting Rooms” appearing with a missing letter during search.
Original PR description
**Before this commit :** When searching for apps whose names contain repeated characters, the command palette incorrectly omitted the second occurrence of that repeated character while searching for it. Example: App name: Meeting Rooms input: o Result: Meeting Roms(missing the second `o`), which was incorrect. **After this commit:** The command palette now correctly displays all characters without skipping any repeated ones. task-5129947 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix reduces the risk of duplicate commission achievement records being generated when subscription commission adjustments happen close together. It helps keep commission reporting accurate and avoids conflicts that could affect sales compensation calculations.
Original PR description
This commit 5b6fdda126e4cfa5ebf92f7b96d1805f6c4b992b introduce an entropy date to avoid having two separate achievment.report record with the same ID. Entropy date for log where based on the write_date, this commit 03d1ee3495a4936fbff0d21743bb784c85b50b12 add the sign of the amount. Unfortunatly this is not enough, the adjustment after the transfer can be positive as well and thus two achievment ends-up with the same ID anyway. This commit use the id of the log to add more entropy to the entropy_date, since log are created in the same transaction, they are likely to have id just seperate by one or only few number, id % 10 seems enough, therefore two log on the same order, with the same create_date will have different entropy date and end up with a different id. Forward-Port-Of: odoo/enterprise#96622
Fixes the default end date used in sales commission achievement reports so it consistently uses the latest end date across relevant commission plans. This helps ensure reports cover the full intended period and avoids accidentally cutting off commission data too early.
Original PR description
When there is active_plan_ids in the context the date_to are the max of plans' date_to when not it's the min, this is wrong it should be the maw as well Forward-Port-Of: odoo/enterprise#96526
SEPA payment files will now mark payments as high priority only for Belgian companies. This helps companies in other countries avoid unnecessary bank fees that can be charged for high-priority payments.
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#96869 Forward-Port-Of: odoo/enterprise#95420
This fixes tooltip and popover placement so help text is less likely to be cut off when it appears near the edge of the screen. Users get a clearer interface in developer-mode forms, reducing confusion when viewing field information.
Original PR description
**Steps to reproduce:** - Activate Developer mode - Go to CRM -> Activity Type - Click on any model to open its form - On hover the Model field tooltip does not display properly its popover component (cut on the left of the screen) **Issue:** When the element cannot be positioned correctly on the screen, it fallbacks to the default position which is often worse. **Fix:** Backported part of a fix from newer versions (https://github.com/odoo/odoo/commit/ae25a2bb09a92b39fb7643a1bf18eecae8f24fc8) to keep the best position among the evaluated ones. opw-5089577 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
App icons created in Studio are now resized before being saved, with a maximum size of 64x64 pixels. This prevents unnecessarily large icon files from increasing database size, cache usage, and request payloads.
Original PR description
Before this commit, the IconCreator images were sent as is in their full size. Downstream it was problematic because apps' icons were bigger than necessary, bloating the different caches, the database, and the request. After this commit, icon are resized to a max of 64x64 pixels.
Clearing the website search box now removes the typed text without reloading the page. This preserves the current search results until the visitor chooses to run a new search, reducing confusion and unnecessary page refreshes.
Original PR description
Before this commit, clicking on the "x" button on the searchbar would refresh the page and remove the result immediatly. The user might want to keep the result if he does not do another search. This commit avoids refreshing the page when removing the input content. Steps to reproduce the bug: - Click on the search button in the navbar - Search "tree" - Press enter (You are redirected to /website/search) - Click on the "x" button to delete the input content (The page refresh) task-3570756