Friday, November 14, 2025
31 changes · master
Resolved issues and error corrections
A fleet-related tax reporting check was moved out of the community edition and into the enterprise module where the required vehicle data is available. This prevents community build failures while preserving the intended vehicle-based tax reporting validation for enterprise users.
Original PR description
Community build was failing with: ``` FAIL: TestAccountFleet.test_tax_report_with_vehicle_split_repartition Traceback (most recent call last): File '/data/build/odoo/addons/account_fleet/tests/test_account_fleet.py', line 99, in test_tax_report_with_vehicle_split_repartition self.assertEqual(len(tax_details), 2) AssertionError: 0 != 2 ``` The test and SQL join logic relied on `vehicle_id` propagation that only exists in the enterprise addon `account_accountant_fleet`. Since the community edition cannot populate `vehicle_id` on tax lines, the query always returned zero rows, causing the failure. To fix this, the fleet-specific tax report query and test have been moved to the enterprise module, where the vehicle-aware tax reporting functionality actually resides. This keeps community builds green while retaining the intended behavior in enterprise. runbot error:233462 Forward-Port-Of: odoo/odoo#235486 Forward-Port-Of: odoo/odoo#234095
This update prevents a crash when Odoo calculates whether all participants have seen the latest message in a discussion. It makes chat and messaging read-status handling more reliable, especially when some participant details are not fully loaded.
Original PR description
The `lastMessageSeenByAllId` compute function sometimes crashes when the persona linked to a member is unknown. This occurs because the compute function compares the member's persona to determine if it belongs to the current user. However, members are not always sent along with their persona. The compute function should instead compare the member directly to the current user's member. This fixes the issue and makes more sense. 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#235338 Forward-Port-Of: odoo/odoo#235253
This update prevents the Mail tracking feature from showing an error when related records do not have a display name. Instead, Odoo now uses a fallback label, keeping activity tracking stable and avoiding interruptions for users.
Original PR description
Description of the issue/feature this PR addresses: Addresses: https://github.com/odoo/odoo/issues/178883 Same issue is also in 18.0. Is there a separate PR necessary or will this be ported forward? Current behavior before PR: An error is displayed when tracking is activated on one2many and many2many with records without display_name. Desired behavior after PR is merged: Should not crash and use fallback like in other cases. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234934 Forward-Port-Of: odoo/odoo#214121
Italian electronic invoicing setup no longer requires a share capital value for companies that are not limited liability entities. This prevents unnecessary blocking errors and makes configuration more accurate for eligible businesses.
Original PR description
Share capital should not be mandatory for non limited liability company. [Ticket link](https://www.odoo.com/odoo/project.task/5131029) opw-5131029 Forward-Port-Of: odoo/odoo#235498
Opening the blog Archive dropdown in some browsers could accidentally reload the page before a visitor made a selection. This fix prevents that unwanted reload, making blog navigation more reliable for users and editors.
Original PR description
In some browsers, opening a `<select>` triggers a click event. Because of this when the blog's sidebar "Archive" dropdown is opened, it might reload the page before the selection is actually made. This commit solves this by detecting a distinct event when PostLink is activated on `<select>` element. Steps to reproduce: - Using Firefox - Install `website_blog` - Edit the blogs page - Activate the sidebar - Save - Open the "Archive" dropdown => The page was reloaded Forward-Port-Of: odoo/odoo#233202
This fix prevents an error from appearing when a user clicks a Bento block in the website editor. It ensures the block’s border and shadow settings load correctly, making website editing more reliable.
Original PR description
Steps to reproduce: =================== 1- Go to Website → Add a Bento block. 2- Click on the block. → A traceback occurs. Cause: ====== The Bento Border XML references `BorderConfigurator` and `ShadowOption`, but these components were never registered in the `BentoBorderOption` definition. https://github.com/odoo/odoo/blob/43654a2a967cb330d65ae0d163a3436462c12c8c/addons/website/static/src/builder/plugins/options/bento_border_option.xml#L8 Solution: ========= Register BorderConfigurator and ShadowOption as components of BentoBorderOption to ensure proper initialization. opw-5234406 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234492
The website hamburger menu now keeps submenu parent text in line with the selected header font size. This fixes a visual inconsistency so website navigation formatting appears as expected after customization.
Original PR description
Steps to reproduce: =================== - Create a menu and a submenu - Change the header template to the hamburger menu - Update the navbar format ->The format of the submenu's parent is not updated. Cause: ====== The menu in the hamburger layout uses the `.accordion-button` class, which applies a fixed base font size defined here: https://github.com/odoo/odoo/blob/ebb250d3b56970c09ffb5ebefef38f97c622c33d/addons/web/static/lib/bootstrap/scss/_accordion.scss#L37 This prevents the submenu text from inheriting the updated header font-size. Solution: ========= Allow the `.accordion-button` font size to inherit from its parent. This ensures that submenu text correctly follows the header's font-size setting. opw-5223664 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234276
Companies can now create required outstanding accounts for expenses even when they use a manually configured chart of accounts. This prevents setup failures for businesses that do not rely on a predefined chart template.
Original PR description
The creation of outstanding accounts when fallback should not require a chart template, since companies may have manually configured their chart of accounts. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235590
Fixed an issue where multi-line footers in the Wave document layout could cover invoice information when viewed on mobile. This improves readability and reliability of document previews for customers and users accessing portal documents from small screens.
Original PR description
In the Wave layout, a multi-line footer overlaps document information when the portal view is opened from a mobile interface. Steps to reproduce: - Open Settings > General settings > Configure Document Layout - Select Wave layout and add a multi-line footer - Open an invoice, go to portal preview, switch to mobile view Issue: The footer overlaps invoice information. This occurs because the boundaries of the SVG drawing are not well defined and it will unexpectedly shrink. opw-5023032 Forward-Port-Of: odoo/odoo#230230
When users open projects from a sales order, the task list now defaults to tasks linked to that same sales order. This prevents users from seeing unrelated project tasks first and helps them find the relevant work faster.
Original PR description
Before this commit, when the user clicks on x projects and x tasks stat button in the sale order form view and that SO is linked to some task and more than one project, the user will be redirected in kanban view of projects and when he will click on a project, he will see all tasks linked to that project instead of seeing the tasks linked to SO inside that project. This commit makes sure a default search is added in the tasks views when the user open a project from an SO to be sure the user will first see the tasks linked to that SO. Forward-Port-Of: odoo/odoo#235544
Message action buttons in Mail are now easier to see and interact with. Icons are larger, spacing is tighter, and hover feedback is more visible in both light and dark themes, improving day-to-day usability without changing workflows.
Original PR description
1) increase size, reduce gap Make icons more readable by being bigger. The gap is reduced so overall this actually takes slightly less horizontal area. 2) More visible hover effect Hover effect was…
1) increase size, reduce gap Make icons more readable by being bigger. The gap is reduced so overall this actually takes slightly less horizontal area. 2) More visible hover effect Hover effect was inexistent due to typo in chat window style leaking to message actions, but still the hover effect was to shy, with 75% => 100% opacity. This is increased to 50% => 100% in addition to true black/white on 100%. Before / After (white) <img width="716" height="128" alt="white-before" src="https://github.com/user-attachments/assets/3829b7cb-8e36-4f28-8d20-78ef9aa31a97" /> <img width="723" height="128" alt="white-after" src="https://github.com/user-attachments/assets/79ec373a-c847-4c8a-96da-4582b54bb393" /> Before / After (dark) <img width="717" height="127" alt="dark-before" src="https://github.com/user-attachments/assets/cdaddee6-8025-46c3-a50b-9c85f9108887" /> <img width="716" height="123" alt="dark-after" src="https://github.com/user-attachments/assets/ddd712b0-407b-427b-b4c6-e3d615b91c27" /> Forward-Port-Of: odoo/odoo#235497
This fix prevents an error when users edit the configuration of a sales order line after removing the product name. The edit option now only appears when a valid configurable product is selected, reducing interruptions during quotation creation.
Original PR description
Currently, when a user adds a configurable product to an order line, and remove the name of product and click on `Edit Configuration` (pencil icon) error is encountered. **Steps to Reproduce:** -…
Currently, when a user adds a configurable product to an order line, and remove the name of product and click on `Edit Configuration` (pencil icon) error is encountered. **Steps to Reproduce:** - Install Sales module - Create a Quotation - Add a product(e.g Acoustic Bloc Screen), then only remove the name from the orderline and click on **edit button(pencil Icon)**. **Error:** `TypeError: SaleProductConfiguratorController.sale_product_configurator_get_values()` `missing 1 required positional argument: 'product_template_id'` **Root Cause:** When a user clicks on Edit configuration, the client-side JavaScript makes an RPC call to the server, targeting the `sale_product_configurator_get_values`. which expects product_template_id at [1] and since it is removed from order line the error is encountered. [1]- https://github.com/odoo/odoo/blob/1b657cf1e1ce43874a3ede307b2f8ad68216aa56/addons/sale/controllers/product_configurator.py#L11-L13 **Solution:** This commit prevents the error by correcting `depends` on the field `is_configurable_product`, which will ensure that edit button will be only present if the configurable product is selected. Sentry-5741581459, 6925770690 Forward-Port-Of: odoo/odoo#217464
The Discuss sidebar now shows the correct microphone and headphone icons for each call participant when they are muted or deafened. This avoids confusion during calls by accurately reflecting each person's audio status.
Original PR description
Before this commit, discuss sidebar call participants had wrong status shown, e.g. when participants are muted it shows non-slashed mic icon instead of slashed mic icon. Steps to reproduce: - Start a call without being muted or deafen - Have another person join the call and mute or deafen => icon shows unslashed mic or headphone This happens because the slash variants were coupled with active button state of call actions, so was based on current session rather than target session. This commit fixes the issue by using specific mute and deafen icon when session is either muted or deafen. Before <img width="1277" height="406" alt="Screenshot 2025-11-13 at 12 20 08" src="https://github.com/user-attachments/assets/c570d0a4-0ab6-48d8-bab6-b191531b2cb6" /> After <img width="1276" height="397" alt="Screenshot 2025-11-13 at 12 19 44" src="https://github.com/user-attachments/assets/2d69e942-7726-4c8c-8921-7635df47dc85" /> Forward-Port-Of: odoo/odoo#235485
Interactive tours now handle the back button correctly when warning-only steps are present on the page. This prevents the tour cursor from briefly jumping to a warning step and then returning, making guided walkthroughs smoother and less confusing for users.
Original PR description
Before this commit, the backward wasn't ignoring the warn steps. So, if the backward go to the previous step (warn's one) and the trigger is on the page, the tour interactive put the cursor there. But the step is then ignored and go back the step you came from. Now, the warn's steps are ignored. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235511
The Website app now waits for the page preview to finish loading before opening the Optimize SEO dialog. This prevents a crash that could happen when users quickly opened SEO settings during a slow reload, making page editing more reliable.
Original PR description
Steps to reproduce: - Open Website app and enter edit mode on any page. - Reload the page with a slow connection. - Immediately open "Optimize SEO" from the navbar menu. Before this commit, the dialog accessed the preview document while the iframe was reloading, so reading location.origin raised a TypeError. After this commit, the dialog waits for the iframe to finish loading or returns immediately when it is already complete, preventing crashes. task-5104033 Forward-Port-Of: odoo/odoo#235231 Forward-Port-Of: odoo/odoo#230820
This change makes an automated web test wait until an error dialog is actually shown before checking it. It reduces occasional false test failures, helping keep development and release validation more stable without changing user-facing behavior.
Original PR description
Before this commit, the test sometimes failed because we didn't wait enough before checking the presence of the error dialog. The `unhandledrejection` event being thrown asynchronously, simply waiting for an animation frame isn't enough. We can only wait for the dialog to be displayed. runbot error~234017 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#235464
This fixes an issue where the accounting setup wizard could show an error immediately when opened because a required opening date was missing. The wizard now opens in the right state for the selected company, reducing confusing setup interruptions for users.
Original PR description
When creating the setup wizard, if created beforehand and shown to the user it will try to save when the wizard is opened. Since the opening date has no value and is a required field, it will fail and display the field red. To fix this, we are creating the wizard by passing a default company_id which mean the wizard hasn't been created yet and so it's not trying to save when opening the wizard. odoo/odoo#231956 odoo/enterprise#95760 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Reviewed accounting entries can now accept harmless updates to fields that do not affect accounting results. This prevents unnecessary blocks during routine edits or imports, especially when a system writes the same value again for consistency.
Original PR description
Updating a field that doesn't impact accounting shouldn't be blocked, even if the move has already been reviewed. Also, don't block re-writing the current value in order to not block idempotent writes during imports for instance. runbot-233955
This fix ensures the deadline date picker does not remain visible after users navigate away from a task page. It improves the user experience by preventing a lingering popup from appearing on the previous screen.
Original PR description
Steps to reproduce ================== - Go to project - Open a project - Open a task - Click on the deadline field - Go to the previous page using the browser back button => The datepicker stays open Cause of the issue ================== `datetimePicker.create` was called using three parameters. But since bb1f912f04fbc4b1efe57847bceffce5895ced9b, it only accepts two. Solution ======== `createPopover` should be added to the `hookParams` This allows the popover to be closed when the owner component is destroyed. https://github.com/odoo/odoo/blob/bb1f912f04fbc4b1efe57847bceffce5895ced9b/addons/web/static/src/core/popover/popover_hook.js#L65 opw-4811594 Forward-Port-Of: odoo/odoo#233520 Forward-Port-Of: odoo/odoo#212580
Fixed an issue where custom Facebook and Instagram inner content snippets did not show preview thumbnails in the website builder. This helps website editors identify and reuse saved social content more easily.
Original PR description
**Description of the Problem** Custom inner snippets based on `s_facebook_page` and `s_instagram_page` do not display a thumbnail when listed in the “Custom Inner Content” section of the website…
**Description of the Problem** Custom inner snippets based on `s_facebook_page` and `s_instagram_page` do not display a thumbnail when listed in the “Custom Inner Content” section of the website builder. **Why the Problem Happens** Commit [1] introduced the ability to drop the Facebook and Instagram snippets both as inner content and as building blocks, by defining a snippet structure and a snippet inner content with the same name (`s_facebook_page` and `s_instagram_page`). Since commit [2], when a snippet structure and a snippet inner content share the same name, the thumbnail information is stored on both snippets to avoid problems, but this was not done in [1]. In `SnippetModel`, the thumbnail image for custom inner content is retrieved by the method `getSnippetThumbnailURL()`, which relies on `getOriginalSnippet()` to get the snippet object from its name. However, this workflow is not designed to handle cases where an inner content and a building block share the same name. `getOriginalSnippet()` searches for snippets first among `snippetStructures` and then among `snippetInnerContents`. If a name match is found in `snippetStructures`, the method attempts to retrieve the thumbnail URL from there. Since instagram and facebook snippet thumbnails are only defined in `snippetInnerContents`, no thumbnail was found. **Proposed Solution** This commit fixes the issue by reversing the search order in `getOriginalSnippet()`, so that `snippetInnerContents` are checked before `snippetStructures`. In this way, it is no more necessary to replicate the thumbnail info on both snippet when the name is shared. [1]: https://github.com/odoo/odoo/commit/18b1170 [2]: https://github.com/odoo/odoo/commit/a40c360 task-5165956
This fix ensures Odoo consistently detects and reports unexpected messaging connection interruptions, even when a WebSocket does not close cleanly. It improves reliability for real-time features and prevents intermittent automated test failures caused by missing reconnection events.
Original PR description
The websocket worker broadcasts events that track connection state changes (connect, disconnect, reconnecting, reconnect). Sometimes a WebSocket can close without the client noticing, leaving it…
The websocket worker broadcasts events that track connection state changes (connect, disconnect, reconnecting, reconnect). Sometimes a WebSocket can close without the client noticing, leaving it stuck in the `CLOSING` state. If the client starts the worker during this period, the worker detects the issue and triggers a disconnect event, but neither reconnecting nor reconnect is emitted. Conceptually, reconnecting/reconnect should fire on any unexpected loss of connection. This patch ensures those events are properly triggered in this case. This also fixes a runbot error ([1]) where a test simulates the loss of the connection. The test sometimes runs before another service's call to `bus_service.start`, reproducing this exact scenario. [1]: https://runbot.odoo.com/odoo/runbot.build.error/223185 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#235635 Forward-Port-Of: odoo/odoo#235319
Users can now clear the duration type in a Marketing Automation activity without triggering an error. This prevents campaign setup from being interrupted and keeps activity summaries stable when duration details are incomplete.
Original PR description
Currently, an error occurs when removing the interval type or validity duration type in a marketing automation activity. This happens when the system tries to compute the "Activity Summary", which…
Currently, an error occurs when removing the interval type or validity duration type in a marketing automation activity. This happens when the system tries to compute the "Activity Summary", which expects valid selection values but receives False. **Steps to Reproduce:** 1. Install Marketing Automation. 2. Create a new campaign and click on "**Add new activity**". 3. In the "Trigger" field, remove the duration (e.g., "Hours"). **Error:** `KeyError - False` **Cause:** At [1], it tries to get the label from the selection dictionary using the value of `interval_type` or `validity_duration_type`. When either field is `False`, it causes a KeyError. **Fix:** This commit prevents the error by; - Setting an empty summary when required selection values are missing. - Returning 0 for interval standardized when interval type is not set. [1] - https://github.com/odoo/enterprise/blob/bb92db89d3fc1f654dfdff9b2e334b13d81cb7ab/marketing_automation/models/marketing_activity.py#L228-L229 sentry-6957343166 Forward-Port-Of: odoo/enterprise#98367
This fixes an issue that could prevent U.S. Direct Deposit settings from being saved or read correctly after an internal platform change. It helps ensure company payroll direct deposit configuration continues to work as expected.
Original PR description
set_param/get_param don't exist anymore.
Fleet-specific tax reporting checks were moved into the Enterprise fleet accounting module where the required vehicle data is available. This prevents Community build failures while preserving the intended fleet tax reporting behavior for Enterprise users.
Original PR description
Community build was failing with: ``` FAIL: TestAccountFleet.test_tax_report_with_vehicle_split_repartition Traceback (most recent call last): File '/data/build/odoo/addons/account_fleet/tests/test_account_fleet.py', line 99, in test_tax_report_with_vehicle_split_repartition self.assertEqual(len(tax_details), 2) AssertionError: 0 != 2 ``` The test and SQL join logic relied on `vehicle_id` propagation that only exists in the enterprise addon `account_accountant_fleet`. Since the community edition cannot populate `vehicle_id` on tax lines, the query always returned zero rows, causing the failure. To fix this, the fleet-specific tax report query and test have been moved to the enterprise module, where the vehicle-aware tax reporting functionality actually resides. This keeps community builds green while retaining the intended behavior in enterprise. runbot error:233462 Forward-Port-Of: odoo/enterprise#99380 Forward-Port-Of: odoo/enterprise#98650
The self-ordering kiosk no longer relies on an outdated IoT Box image version check that cannot handle the newer date-based version format. This prevents supported IoT Boxes from being incorrectly blocked and keeps kiosk setup working with current images.
Original PR description
New image versions are formatted as YYYY.MM.DD instead of YY.MM. The previous can be casted to float, but not the new one. We then only take the year and month to before casting. Forward-Port-Of: odoo/enterprise#99416
This fix makes the Sign document dropdown correctly detect when there are no documents to show. It prevents misleading or incorrect dropdown behavior for users working with signature requests.
Original PR description
An empty list is true in JS, so we check the length of the list Forward-Port-Of: odoo/enterprise#99405
This update fixes an access issue when the ISO 20022 accounting feature reads configuration settings. It helps ensure payment journal setup and related actions work reliably for users without requiring unnecessary administrator access.
Original PR description
Forward-Port-Of: odoo/enterprise#99359
This fix ensures the helpdesk livechat sidebar displays the correct channel name when a new member joins. It uses existing chat history when current participant details are incomplete, reducing confusion for support teams and visitors.
Original PR description
This change introduces the `im_livechat.channel.member.history` model on the client side to properly display the Livechat channel name. In the case of lacking data for current agents or visitors, we use the history records to display the channel name. task-4966319 Related to odoo/odoo#227240
This update corrects how Chilean electronic invoicing data is saved so the system uses the expected internal format. It helps prevent errors when updating accounting documents, improving reliability without changing day-to-day user workflows.
Original PR description
Write values should be normalized to use ORM commands, `list` and `int` instead of recordsets.
The accounting setup wizard now opens without immediately trying to save incomplete information. This prevents users from seeing an unnecessary required-field error when starting the setup process.
Original PR description
When creating the setup wizard, if created beforehand and shown to the user it will try to save when the wizard is opened. Since the opening date has no value and is a required field, it will fail and display the field red. To fix this, we are creating the wizard by passing a default company_id which mean the wizard hasn't been created yet and so it's not trying to save when opening the wizard. odoo/odoo#231956 odoo/enterprise#95760
This fixes a timing issue in batch barcode scanning that could cause some scan processing to finish out of order or be skipped in certain cases. The change improves reliability for warehouse workflows and prevents intermittent failures when scanning lots in batch pickings.
Original PR description
Commit bc9247d46225c696842bc7b0e3c883320231ab1b has introduced an override of the `processBarcode` method. However, it does not return nor await the super call. In particular, in the case where the super call should be done the overrides returns "undefine" rather than a promess to await and hence that call is not awaited anymore. Note: This error has been noticed from the fact that the test `test_barcode_batch_scan_lots` sometimes fails on step 29/31. runbot-233631 Forward-Port-Of: odoo/enterprise#99303