Wednesday, September 10, 2025
67 changes · master
Resolved issues and error corrections
This fixes a display issue where mail message containers were not reversed when the layout required it. Users will see message threads presented in the intended order, improving readability and reducing confusion.
Original PR description
Purpose of this PR, The message container is not reversed when required, this commit handles that issue by adding the class when required. Before: <img width="504" height="137" alt="image" src="https://github.com/user-attachments/assets/838c14e3-8961-4972-9959-702ade483389" /> After: <img width="570" height="79" alt="image" src="https://github.com/user-attachments/assets/bb2d8ede-0599-4ef4-b782-04b4d668c4f0" />
Replies to messages now preserve line breaks correctly, so text from separate lines no longer gets merged together. This makes reply previews easier to read and reduces confusion in mail conversations.
Original PR description
Before this PR, message that contains <br> would not be properly inlined. The second line would be directly append to the first without space. This PR use the existing inlineBody to fix the issue and cleanup the css that inlined the message before. task-5072071
Stripe setup now skips payment methods that do not work with manual capture when enabling default options. This prevents confusing activation warnings and helps businesses configure payment providers more smoothly.
Original PR description
Steps to reproduce: 1) Check the manual capture checkbox on Stripe. 2) Try to enable it. 3) See the warning that some payment methods can not be activated. Reason: Commit 25feb5b11c2df401580b65e0108145863fcf8987 disallows activating payment methods that do not support manual capture if their provider supports it. Solution: Filter out incompatible pms. opw-4860912 Forward-Port-Of: odoo/odoo#223038
This fixes a problem that could prevent the electronic invoicing proxy connection from working after a token renewal. It helps keep automated invoicing communications running smoothly without changing timeout behavior.
Original PR description
The flow after having renewed the token would not have worked because of signature mismatch (position of positional arguments). Also remove timeout kwargs. There is not legitimate reason to change the default value. enterprise: https://github.com/odoo/enterprise/pull/94189 no-task
This fixes an issue in Spreadsheet Dashboards where quick search could not find records when a relational filter was already set to a specific record. Users can now search within those filtered records as expected, making dashboards easier and more reliable to use.
Original PR description
If a relational filter was set to a specific record, it was not possible to use quick search to search for a string in the records. Task: [5008483](https://www.odoo.com/odoo/2328/tasks/5008483) 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
Fixed an editing issue in the Website builder where pressing Enter in a tabs image slide description created a new list item instead of a normal line break. This keeps content editing predictable and prevents unwanted formatting changes for website editors.
Original PR description
Following the [refactoring] of the `html_builder` we had a problem when instead of a new line in the slide description we had a new list item. Steps to reproduce the issue: - Open website and start editing - Drop the .s_tabs_images snippet - Click on any slide description - Press 'Enter' -> It adds a new list item because it treats it as a regular list. Related to task-4367641 [refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 Forward-Port-Of: odoo/odoo#225888
This fixes an issue where switching to developer mode could show an outdated page layout until users refreshed the browser twice. Views are now cached separately for normal and developer modes, so the correct tabs and options appear immediately after refresh.
Original PR description
**Steps to reproduce:** - Go to Calendar app - Go to any meeting - Invitations tab should be hidden (no debug mode) - Trigger developer mode (`?debug=1`) - Invitations tab should be displayed - The…
**Steps to reproduce:** - Go to Calendar app - Go to any meeting - Invitations tab should be hidden (no debug mode) - Trigger developer mode (`?debug=1`) - Invitations tab should be displayed - The tab only appears after a second refresh **Issue:** The new caching process uses a key based on the RPC parameters. In the case of the 'get_views' function, it produces a different result with the same parameters depending on whether debug mode is enabled. This means that two browser refreshes are needed to have the correct view. The first refresh renders the cached view (without the invitation tab) and updates the cache with the view returned by the RPC (with the invitation tab). The new cached view with the invitation tab will be rendered on the second browser refresh. **Fix:** Add the debug option to the RPC parameters to cache the different views separately (with and without the invitation tab). opw-4986038 related: https://github.com/odoo/odoo/commit/f3d955b3235cb256bda79e834df38da0f6a4ac1a Forward-Port-Of: odoo/odoo#223401
This update makes an automated website test more reliable by allowing extra time for images to load from the network. It helps reduce random test failures without changing the customer-facing website experience.
Original PR description
`test parallax zoom` failed non-deterministically, because it fetches images from the network to render the values in the options. The later tests were not affected because they had the image in cache. The non-determinism is "fixed" by allowing a longer timeout when waiting on the element that should appear. task-4367641 Forward-Port-Of: odoo/odoo#225928
This update corrects a typo in the help text for calendar event status. It improves clarity for users viewing or editing calendar events without changing any behavior.
Original PR description
A typo slipped itself in the rework of the calendar form view in [1] [1] odoo/odoo@95a7c10625bcbc75d602ed08ce8062b00df48d7f Task-5057504
Fixed an issue where opening Odoo in multiple browser tabs could prevent the second tab from using cached data and show a browser console error. This makes the web app behave more reliably when users work with the same app in more than one tab.
Original PR description
Open Odoo in two tabs, in a fresh browser (or delete the IndexedDB). - Open the Contacts app in the first tab; - Open the Contactc app in the second tab; Before this commit, the second tab will not use the cache, and an error will be displayed in the console : `IndexedDB error: The requested version is less than the existing version`. This issue occurs, because the IndexedDB wrapper stores the database version, which is incremented when a new table is needed in order to execute the `onupgradeneeded` function and create the table. Now, the version is not stored anymore. When a new table is needed, the database is opened with the current version + 1. This will execute the `onupgradeneeded` function and create the table. Forward-Port-Of: odoo/odoo#226015
A website animation test that was failing unpredictably has been temporarily skipped. This helps keep the development pipeline stable while the team works on a longer-term solution.
Original PR description
The test fails non-deterministically. We sip it while looking for a long term fix task-4367641 Forward-Port-Of: odoo/odoo#226002
This update prevents errors when preparing company-specific settings for Indian localization and sales scenarios. It uses the supported company-switching approach, helping keep automated checks stable as Odoo’s company handling becomes stricter.
Original PR description
In this PR: - Replaced direct assignment `self.env.company = self.default_company` with proper odoo environment switching pattern to avoid AttributeError when company attribute becomes read-only after initialization. Forward-Port-Of: odoo/odoo#224795
This fixes a website builder issue where previewing page visibility for the footer could make the Invisible Elements panel appear and remain open. The preview now behaves correctly without marking the page as changed, and the same preview behavior is enabled for header visibility.
Original PR description
With the [re-introduction of preview on checkboxes], the visibility option on the footer was made previewable, and this causes issues with the "Invisible Elements" panel and excessive saving. The issues were fixed by skipping updates of "Invisible Elements" panel during previews, and also not setting the dirty flag. These changes are sufficient to make the preview for the visibility option of the header work, so it is enabled as well. Steps to reproduce: - Open website builder - Click on the footer - Hover the checkbox of "Page Visibility" - Bug: the "Invisible Elements" panel appears (and stays) [re-introduction of preview on checkboxes]: 6cc63c31378b8acfdb419727a71f38fd00ea37dd task-4367641 Forward-Port-Of: odoo/odoo#224791
This update fixes an automated test for stock replenishment planning so it uses the correct monthly period length. It helps prevent false test failures and keeps stock planning quality checks stable.
Original PR description
The code divides the demand by the number of days per month, so the test absolutely needs to be done 'during' a period of 31 days. runbot error 231696 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix stops the web interface from refreshing navigation focus when the hotkey overlay appears. It prevents unexpected refocusing on page elements, making keyboard help and navigation interactions more stable for users.
Original PR description
This commit fixes an issue where the update of the navigation_hook would trigger for any dom modification (including hotkey overlay) which could cause unwanted re-focus on some elements. Backport of 6939e29b2bf9d943fa82a5969a2472cdc3c81c8a to 18.4 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224939
The translations were missing the reference standard example for the payments. Bug from pad
Original PR description
The translations were missing the reference standard example for the payments. Bug from pad
The website editor now shows the floating blocks snippet more accurately by applying background positioning consistently across its blocks. This helps users trust that what they see while editing will match the published page.
Original PR description
This commit fixes an issue with the `s_floating_blocks` snippet where some CSS rules were inactive due to the selector. Previously, the snippet applied a `background-position: top` property to the first block. However, this rule was ineffective because the first block does not include a `s_parallax_bg`. This commit resolves the issue by allowing all blocks to receive the `background-position` property, ensuring the behavior is fully WYSIWYG for the user. task-5068688 Forward-Port-Of: odoo/odoo#225918
The website translation test flow now waits for background requests to finish before closing the browser. This prevents random test failures and helps keep development validation stable without changing customer-facing behavior.
Original PR description
The `TestTranslation.test_fr_en_db_en_fr_site` tour could fail randomly with `TypeError: Failed to fetch` / `ConnectionLostError`. The root cause was the headless browser being closed while translation or asset fetches were still in flight. This commit makes the tours deterministic by: - installing a lightweight tracker for fetch/XHR requests - waiting for network idle after heavy actions (save, lang switch, HTML editor save, translation save) - ensuring no pending RPCs remain before teardown With this change, the translation tours complete without race conditions and no longer crash randomly at teardown. runbot-229949
New vehicle requests from the Belgian salary configurator no longer make an employee's existing car appear available too early. This prevents accidental reassignment while the new car is still only at the request stage.
Original PR description
When a new car is ordered through the belgian salary configurator, a car is created in the stage 'New Request'. At this state, nothing is planned to change the car so we don't want to set the existing employee car as available for someone else. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223589
This fix prevents TicketBAI submissions from failing when a point of sale name creates an invoice series longer than the allowed limit. The system now shortens the series automatically, avoiding confusing upload errors for users in Spain.
Original PR description
Before this commit, records with sequences over 20 characters will present a cryptic error when uploaded to TicketBAI. Steps to reproduce ----- 1. Create a point of sale with a name >20 characters 2. Validate an order on the POS 3. Go to Point of Sale > Orders > Your order, click "Send to TicketBAI" 4. Invalid Operation ``` 002: Fichero no cumple el esquema XSD. Detalle del error: cvc-maxLength-valid: Value 'ThisisaveryveryveryveryverylongPOSnameTEST' with length = '42' is not facet-valid with respect to maxLength '20' for type 'TextMax20Type'. ``` Issue ----- The schema for SerieFactura specifies a TextMax20Type, but the generated sequence can be over 20 characters. Solution ----- Truncate the sequence to 20 characters. opw-4750372 Forward-Port-Of: odoo/odoo#225776 Forward-Port-Of: odoo/odoo#225436
This fixes an error that could appear when a recruiter refused an application using a refusal reason that did not have an email template. Recruiters can now complete the refusal action without being blocked by a system traceback.
Original PR description
When user tries to select a refuse reason without Email Template in Application, A traceback will appear. Steps to reproduce the error: - Install ``hr_recruitment`` module - Go to Recruitment > Configuration > Refuse Reasons > Create a new Reason without Email Template - Create a Application > Refuse > Select refuse reason without email template Traceback: ``` UnboundLocalError: cannot access local variable 'wizard_field_name' where it is not associated with a value ``` https://github.com/odoo/odoo/blob/f6874befe64daf78dc59fa09a349cad305717bed/addons/hr_recruitment/wizard/applicant_refuse_reason.py#L99-L104 Here, the ``wizard_field_name`` variable is referenced before the assignment, So, It will lead to the above traceback. sentry-6844982581 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225069
Fixed a visual issue where product carousel arrows could appear out of place when using single-item scrolling. This improves the shopping page presentation and makes carousel navigation look consistent for visitors.
Original PR description
Arrows were misaligned when using the options "Scrolling mode: Single". This was due to how we detected where to apply the custom property with the 25 or 50%. task-5076265 Follow-up of task-4997544 | Before | After fix | |--------|--------| | <img width="1578" height="655" alt="image" src="https://github.com/user-attachments/assets/bc745b42-83f6-4ef8-80fd-a48f6cb4a198" /> | <img width="1625" height="661" alt="image" src="https://github.com/user-attachments/assets/b31e742b-99d5-40f7-b01b-756df063e2d9" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the web interface from failing when a custom application uses a very large image as its icon. Users can continue navigating menus without disruption, even if stored icon data exceeds browser storage limits.
Original PR description
Before this commit, if a user uses a large image as an icon for a custom application, an error could be triggered due to the size limit in localStorage. Forward-Port-Of: odoo/odoo#226105
This update makes an automated online shop test wait for the right page element before moving on. It helps reduce false test failures, supporting more stable releases without changing the customer-facing shopping experience.
Original PR description
Some tour steps executed too quickly and did not wait for the target element to appear, causing race conditions where the next step failed due to missing elements. This commit adds an explicit check step between the failing steps to ensure the element is present before continuing, guaranteeing stable tour execution without premature step execution. runbot-229723 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#226038
The website editor no longer crashes when users remove a parallax effect from a background image inside a nested page element. This makes editing more reliable for pages with layered sections, cards, or other nested content using background images.
Original PR description
Before this commit, setting parallax to "none" for elements nested inside other elements with a background image caused an error. The issue occurred because the function `showMainColorPicker` was…
Before this commit, setting parallax to "none" for elements nested inside other elements with a background image caused an error. The issue occurred because the function `showMainColorPicker` was called after the `.parallax` span element was removed. Since the `.parallax` element is the editingElement of this option, the function should not have been invoked in the first place. This commit fixes the issue by querying the editing element only once during the setup of `BackgroundImageOption`. This ensures that even if `showMainColorPicker` is called after the `.parallax` element is removed, no error occurs. How to reproduce The problem can be reproduced with many combinations of nested elements. For example: 1. Place the `s_three_columns` snippet 2. Set a background image for the whole snippet 3. Set a background image for a single card 4. Set a parallax effect for the card background image (e.g.: "Scroll Effect" -> "Fixed") 5. Set the same parallax effect back to "none" (Scroll Effect -> "None") 6. Traceback pops up task-4367641 Forward-Port-Of: odoo/odoo#225128
Fixed an issue where ended live chat conversations with longer names could appear cut off in the sidebar. This helps users read and identify live chat threads more easily after conversations close.
Original PR description
Since PR #217615, when a livechat conversation ends, an italic class is added to the thread name classes in the sidebar. As a result, the thread name may be clipped in the sidebar if it is long enough. This change ensures that the thread name is displayed correctly. Before: <img width="310" height="56" alt="image" src="https://github.com/user-attachments/assets/3b289c01-bf11-4f4e-9555-e45a89641975" /> After: <img width="317" height="56" alt="image" src="https://github.com/user-attachments/assets/676eaa5b-e83d-4f77-b320-a9c525d4dce2" /> Forward-Port-Of: odoo/odoo#226057
Imported FEC accounting entries are now included when users open a sales journal from the accounting dashboard. This helps businesses see all relevant imported sales-related entries in the expected place, reducing confusion during accounting review.
Original PR description
**PROBLEM** When importing a FEC files, moves are created with the `move_type` `entry`. They don't appear in the action of the journal of type `sale` when clicking on the dashboard. **STEP TO REPRODUCE** 1. on a local database install `l10n_fr_fec_import` (you need to import a FEC file given by our client, dont do it on the runbot please !) 2. select the french demo company 3. import the FEC file (accounting/settings/import a file) (for file, see [ticket](https://www.odoo.com/odoo/project/49/tasks/4848763) ) 4. goes in the dashboard, and click on the `Ventes Marchandises` journal. 5. notice the entries does not appear in the action. **CAUSE** When importing a FEC file, all moves are created with the `entry`. The domain for `sale` journal doesn't include the move of type `entry`. **FIX** Adding `entry` in the `sale` journal domain. opw-4848763 Forward-Port-Of: odoo/odoo#222208
The checkout button shown when customers choose Cash on Delivery now appears in the visitor's selected website language. This improves the multilingual shopping experience and avoids untranslated text during order confirmation.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Enable the Cash on Delivery payment method; 2. have a delivery method which allows cash on delivery; 3. active a second language on the website; 4. go to /shop/payment in the other language; 5. select Cash on Delivery payment. Issue ----- The "Place order" button isn't translated. Cause ----- The `delivery` module isn't listed as "front-end module" for translation purposes, making the translated term unavailable there. Solution -------- Add `delivery` as a front-end module via a `_get_translation_frontend_modules_name` override. opw-4971473 Forward-Port-Of: odoo/odoo#225940
Fixes minor display issues with the product comparison bar on website shop pages. The comparison controls now layer correctly with nearby page elements, and the bar shadow no longer appears awkwardly over the footer, creating a cleaner shopping experience.
Original PR description
This PR fixes two issues related to the `website_sale_comparison` bottom bar : 1) As the `bottom_bar` is using the `sticky-bottom` utility class, which comes with the `$zindex-sticky` (1020), it was position above the `floating_bar` element, which overriddes its `z-index` with a `z-3` utility class. We could have set the `bottom_bar` `z-index` to `z-2` but unfortunately, the pager component includes a `z-index: 3` on the active entry, which would make it appear above the bottom bar. To fix this, we set the `z-index` of the `bottom_bar` to `3` and increment the one of the `floating_bar` to `4`. 2) As the `background-color` of the footer was changed in `19.0`, this highlighted an issue with the shadow of the `bottom_bar` showing above the footer. To fix this issue, we set a negative offset, ensuring it only shows on the top side and not on the bottom one. task-5076826 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The wishlist page layout was adjusted to remove an extra border that could make product grids look visually inconsistent. This creates a cleaner shopping experience by ensuring wishlist headers and grid items have the correct spacing and borders.
Original PR description
Prior to Commit[^1], the grid wishlist grid layouts were replicating the approach in use in `/shop`, which defines a border on specific sides of the grid item. After Commit[^1], the border is now defined on different sides of the grid items, top one included, which conflicts with the border defined on the `o_wishlist_products_header` element. With this commit, we remove the custom mixin defining the border of the grid elements, and also fix an issue about the `o_wishlist_products_header` elements not receiving the right `padding` and `border` in the grid layouts. task-5076598 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr [^1]: b6425c11572f3b0f8118715590868377ec25460d
The website SEO optimizer now handles invalid links correctly during broken link checks. This prevents an error message from interrupting users when they scan pages that contain malformed links.
Original PR description
Steps to reproduce: 1. On home page, open editor. 2. Create a new link on button/text with invalid url. 3. Enable debug mode. 4. Open seo optimiser it will start scanning for broken links. 5. Traceback will appear: <img width="1154" height="585" alt="image" src="https://github.com/user-attachments/assets/ccb42fe5-932a-48b3-8aa0-68053af3a7bb" /> After this PR: - As brokenlinks component will always have link props as object, so links will now have Object as type.
The default color palette for website course covers has been adjusted to keep text readable across color presets. This helps ensure a more consistent and accessible viewing experience for visitors using Odoo eLearning pages.
Original PR description
This PR replaces the previous `o_cc` preset as the default palette for website changed for `.version 19` With this PR, we change the default preset from `o_cc4` to `o_cc3`, ensuring the text remains readable no matter the color preset. task-5078900 part of task-3638127 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes the Discuss welcome screen rely on a shared application state instead of temporary page state. This helps prevent the welcome screen from appearing or disappearing inconsistently, improving reliability for users joining public Discuss pages.
Original PR description
Before this commit, whether to display the welcome view was based on a component state, so it was dependent on the lifecycle of components This commit changes the condition so that it relies on the store which should prevent inconsistent state. https://runbot.odoo.com/odoo/error/111051 Forward-Port-Of: odoo/odoo#225486 Forward-Port-Of: odoo/odoo#225325
This fixes an issue where Romanian electronic invoicing synchronization could fail when a communication error occurred. The system now checks the error information in the correct place, helping prevent unnecessary tracebacks and making synchronization handling more reliable.
Original PR description
Problem
---------
Currently, the 'error' message (in case of communication error) is stored in the 'answer' dict. However, the code verify for the 'error' key in the message dict itself.
Solution
---------
When checking if the 'error' key is present, check in the 'answer' dict rather than the message dict
The code is
```message = {**data, 'answer': {**data, 'error': ""}}```
The verification were
``` 'error' in message ?```
and now they are
``` 'error' in message['answer'] ?```
opw-5046567
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#225936Romanian electronic bill imports now ignore invalid PEPPOL endpoint information from ANAF XML files when creating new partners. This prevents unnecessary import errors and chatter messages, helping users process supplier bills more smoothly.
Original PR description
Problem --------- When importing the bill, the XML contains a faulty PEPPOL Endpoint (an address mail). Since the partner in the XML does not yet exist in the client database, we attempt to create it with the name, VAT, address and the faulty endpoint; which, triggers an error that is logged in the chatter. For unknown reasons, the RO government allows for such error to be introduced but since we can't change ANAF itself, we have to make a fix to manage the case. Solution --------- When importing the partner data from the XML, we check if the endpoint is valid before creating the partner. If it is not the case, we simply remove and ignore the endpoint data. opw-5046567 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225947
A website test was adjusted so it no longer fails when the measured query count is below the allowed maximum. This keeps automated checks reliable across Odoo editions without changing customer-facing website behavior.
Original PR description
This test fails in community only as the query count is lower than the maximum allowed. runbot error 226784 Forward-Port-Of: odoo/odoo#224832
This fixes an internal test issue related to email server handling when a supporting component is unavailable. It helps keep Odoo's automated checks stable, reducing false failures during development and release validation.
Original PR description
Fine-tunning of e31ec012 Forward-Port-Of: odoo/odoo#224309
Updates website templates to use the current location for decorative shape assets in newer website snippets. This keeps new website building blocks aligned with recent internal changes while preserving compatibility with older paths.
Original PR description
In [1], shape controller was moved from web_editor to html_editor. In [2], shapes were moved from web_editor to html_builder. This commit adapts the path for new snippets. The former path is still supported but ideally should not be used for newer snippets. [1]: https://github.com/odoo/odoo/commit/44129d85bdc993e37384536519a03d7c29ac7e83 [2]: https://github.com/odoo/odoo/commit/d2cbe9a3535d3563c4252743c7849a6d669ee177
This fixes a Windows-specific issue that could prevent Odoo from generating images for reports due to temporary file access restrictions. Windows users should see fewer report image generation failures and related error messages.
Original PR description
On Windows tempfile.NamedTemporaryFile won't allow access from external process. This result in "ContentAccessDenied" error when wkhtmltoimage process is executed. Below is the example error message on Windows:
2025-09-06 13:11:52,587 15780 WARNING odoo_insights odoo.addons.base.models.ir_actions_report: Wkhtmltoimage failed (error code: 1). Message: Exit with code 1 due to network error: ContentAccessDenied
Follow `_run_wkhtmltopdf` and manage the temp file by hand via mkstemp.
An alternate solution is to use `delete=False` and delete the temp file manually later e.g.
- https://github.com/appveyor/ci/issues/2547
- https://github.com/allenai/olmocr/issues/74
Could be used to modernise the code later.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prPressing Escape on the website now hides the navigation bar as expected. This restores a standard keyboard shortcut behavior that had been blocked when the new content dropdown registered the same key unnecessarily.
Original PR description
The goal of this commit is to reactivate the hide of the navbar in the website when the “escape” key is pressed.
Problem:
========
NewContentSystrayItem adds a listener to the "escape" hotkey. It is therefore used instead of the one used to hide the navbar. The hotkey service executes a single callback (always the most specific one).
Solution:
========
Enable the NewContentSystrayItem "escape" hotkey only when the dropdown is open.
How to reproduce:
====================
- Go to the website.
- Press “escape.”
Before this commit:
Nothing happens.
After this commit:
The navbar hides.
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-prThis fixes copying behavior so only linked records the user is allowed to read are included. It helps prevent copy operations from failing when some related records are not accessible to the user.
Original PR description
When copying data, just cpoy the records that we are able to read. We recently added a check that assigned records to m2m fields must be readable which may not be the case for all returned ids. runbot-error-231611 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website sidebar header no longer forces the mobile menu to open from the left. This ensures the menu appears on the side selected in the website builder, giving users a more consistent mobile navigation experience.
Original PR description
Before this commit, the template sidebar would set the mobile menu position to the left and override the option of the builder. The template sidebar no longer imposes the position of the mobile menu anymore to avoid this issue. Only the option setted in the builder will impact the side of the mobile menu. Steps: - Change the header template to "Sidebar" - Switch to mobile view - Open the mobile menu (Despite the option behind set to "right", the menu is on the left)
This fix removes an unused request timeout option from the Australian payroll API integration. It keeps the integration aligned with the shared EDI proxy behavior and reduces the chance of confusion or inconsistent handling without changing day-to-day user workflows.
Original PR description
remove useless timeout parameter from edi proxy user `_make_request`. It has no legitemate use. see https://github.com/odoo/odoo/pull/225784 no-task
This fixes a timing issue that could affect the setup of signable PDF documents. The change makes the signing template editor more reliable by ensuring the item count update is available when needed.
Original PR description
Fixes a race condition in the editable PDF iframe where updateSignItemsCountCallback could be called before it was defined. The callback is now passed as a prop instead of being set from another component. task-5065598
This update assigns the correct payroll user access group to several India payroll employee fields. It prevents a failing automated test and helps ensure payroll-related employee information is handled consistently for authorized payroll users.
Original PR description
Issue: test_employee_fields_groups: This test case fails. Reason: The fields 'l10n_in_pt,l10n_in_esic,l10n_in_labour_welfare' fails because no Groups are assigned to these fields. Fix: Assigned 'hr_payroll.group_hr_payroll_user' to these fields as these fields are in hr_version and also add group to l10n_in_provident_fund, as there also no group is assigned to this field. runbot error - https://runbot.odoo.com/odoo/runbot.build.error/231596
Reinstalling the SEPA Direct Debit module after using it for batch payments no longer triggers an error when no pre-notification periods are available. This helps businesses avoid setup interruptions and keeps payment module maintenance smoother.
Original PR description
**Issue** When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not…
**Issue**
When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not iterable`.
**Steps to Reproduce**
1. Create a batch payment with SEPA Direct Debit.
2. Uninstall the `account_sepa_direct_debit` module.
3. Reinstall the module.
**Root Cause**
During module (re)installation, the compute method `_compute_sdd_required_collection_date` is triggered before any SEPA mandates or their pre-notification periods exist. This makes `mandates.mapped('pre_notification_period')` return an empty list. The code then calls:
max(minimum_offset, *mandates.mapped('pre_notification_period'))
When the list is empty, this reduces to `max(minimum_offset)`, which is invalid since `max()` with a single integer argument expects an iterable and raises a `TypeError`.
**Fix**
Handle the empty case so that there is a valid fallback both during installation and when mandates have no configured pre-notification period.
Opw-5042153
Forward-Port-Of: odoo/enterprise#93598Saudi payroll employee fields now use the correct payroll access role instead of the general HR employee role. This fixes a failing validation test and helps ensure non-payroll users do not see payroll-related information.
Original PR description
Issue: - `test_payroll_fields_are_hidden_to_non_payroll_users_in_employee_form_view` test case fails due to the missing payroll user group on the fields. Reason: - The fields were incorrectly assigned to the `hr.group_hr_user` group, which is for employee users. - These fields are payroll related and should only be visible to users with payroll specific roles. Since the test case checks for the correct visibility based on user roles, it failed when it couldn't find the required payroll rights on these fields Fix: - Updated the SA localization fields by assigning them the `hr_payroll.group_hr_payroll_user` group. - This resolves the test case failure and ensures that the fields are hidden from non-payroll users as intended. build_error-231289
The report annotation walkthrough test now waits for annotations to appear before continuing. This prevents false test failures and helps keep accounting reports more reliable during development.
Original PR description
We are now waiting for the annotations to appear.
This update fixes access setup for an Italian payroll employee field and prevents payroll export tests from running when a required leave-management component is not installed. It helps keep automated checks reliable without changing day-to-day business workflows.
Original PR description
Issue: 1) 'test_payroll_fields_are_hidden_to_non_payroll_users_in_employee_form_view' test fails due to the missing payroll user group in the 'l10n_it_sdworx_code' field. 2) Couldn't find the 'hr.leave.type' model when loading the test case. Reason: 1) The field required payroll user rights as it is used in the payroll section in the employee form view. 2) 'hr.leave.type' and 'hr.leave' are models of the hr_holidays module, which is not defined in the manifest. Solution: 1) Assign the 'hr_payroll.group_hr_payroll_user' group to the field 'l10n_it_sdworx_code'. 2) Check if the hr_holidays module is installed then run the test case otherwise return. build_error-231525 build_error-231526
Payroll advice reports in Indian payroll now take the reporting period from the selected payslips instead of today's date. This prevents past payroll advice from showing the wrong period or missing the period entirely, improving report accuracy for payroll teams.
Original PR description
Generating a payroll advice would use the current date in order to find other payslips that are for the current period and use this to fill in the period on the advice. However, if you do this for a past payslip, it will either not find any or get the incorrect period. Changed the behavior to use the actual payslips and get the period from those payslips to fill in the period on the report. opw-4582990 Forward-Port-Of: odoo/enterprise#92935 Forward-Port-Of: odoo/enterprise#81625
This update fixes small usability issues in the Appointment app so users can click the Configure button reliably and start typing question names immediately. It also makes publication status visible in the appointment type list, helping teams quickly see which appointment options are live.
Original PR description
1. Make 'Configure' button in appointment kanban view have correct click area 2. Autofocus name on appointment.question form instead of placeholder in certain cases 3. Add is_published in the list view of appointment types. Task-5057504
Tyro payment refunds now show the expected “Refund in process” message instead of prompting users to wait for a card. This keeps the refund experience consistent with other payment terminals and reduces cashier confusion during refund processing.
Original PR description
Currently tyro completely removes the default behaviour of displaying "Refund in process" when requesting a refund and instead displays "Waiting for card" instead which is not the expected default behaviour on other payment terminals who process the refund without presenting a card.
Creating a new folder from the All documents view now correctly places it in My Drive. This restores the expected behavior and helps users keep newly created folders in their personal workspace without confusion.
Original PR description
About creating folder in All, restoring logic sending to 'MY', OK as portal users don't have the option to create folders. Task-5075200
The dashboard publish control now changes state only when users interact with the checkbox or its label. This prevents accidental publish status changes when clicking elsewhere in the dashboard header, making editing dashboards more predictable.
Original PR description
**Steps to reproduce:** - Open a dashboard in edit mode. - Click the “Publish” toggle to change its state. - Click elsewhere on the header (outside the toggle). → The publish state flips back unexpectedly. **Before this PR:** The wrapper container (.o_sp_publish_dashboard) had a click handler, causing clicks on the header to re-toggle the publish state. The CheckBox was rendered with a no-op onChange, so both elements competed for control. **After this PR:** Interaction is handled exclusively by the CheckBox component. toggleDashboardPublished is bound directly to its onChange. Clicking the label text now correctly toggles the checkbox and publish state. Container clicks outside the checkbox no longer affect the state. Task: [5062368](https://www.odoo.com/odoo/project/2328/tasks/5062368) Forward-Port-Of: odoo/enterprise#94061
The Helpdesk ticket list now opens correctly even when there are no tickets to show. This prevents an error that could block teams from accessing their ticket list view, improving day-to-day reliability.
Original PR description
Previously, accessing the Helpdesk ticket list view with zero tickets caused a crash due to improper handling of folded sample data. This commit resolves the root issue by ensuring sample data folding does not trigger errors in empty views, improving stability. Steps to reproduce the original issue: - Navigate to Helpdesk > Teams > Tickets. - Ensure zero tickets exist and switch to list view. Task-4971510
The Documents kanban view no longer shows an unnecessary second scrollbar. This makes browsing document cards smoother and reduces visual clutter for users.
Original PR description
This commit fix the useless double scroll bar in kanban view. Task-4844661 Forward-Port-Of: odoo/enterprise#90548
Duplicated reconciliation models are now treated as user-created models, so they appear in the expected filters right away. Archiving a reconciliation model also clears related manual unreconciled statement line links, reducing confusion and keeping accounting workflows tidy.
Original PR description
When duplicating an automatically created reco model, the field created automatically was still set to True and so the filter doesn't show the reco model at first. By adding the copy=False it solve the problem Also, this commit will remove any manual reco model of unreconciled statement line when archiving that reco model. no task id Forward-Port-Of: odoo/enterprise#94205
A test was added to ensure early payment discounts created during bank reconciliation receive the correct analytic distribution. This helps prevent accounting reports from missing analytic allocation on discount lines, aligning bank reconciliation behavior with manual payment registration.
Original PR description
This commit adds a test for the following issue: - Configure an early discount payment term (e.g., 2/7 Net 30). - Configure the analytic distribution model with the account used when a discount is granted (e.g., 657000 on the BE fiscal position). - Create an invoice using the early discount payment term. - On bank reconciliation, register the transaction taking into account the early payment discount (e.g., 98% of the invoice amount_total). On the third line with account 657000, corresponding to the early discount payment, the analytic distribution model does not apply. In contrast, when manually registering a payment for the invoice, the analytic is correctly applied. community pr: https://github.com/odoo/odoo/pull/217933 opw-4868986 Forward-Port-Of: odoo/enterprise#91651 Forward-Port-Of: odoo/enterprise#90641
This fix prevents Uruguay electronic invoice creation from failing when an invoice line has no product but does have accounting details. If no line description is available, the system now safely uses a placeholder instead of showing an error.
Original PR description
This pull request makes a minor adjustment to the logic for extracting item names and descriptions in the `_l10n_uy_edi_get_line_nom_and_desc` method. The change ensures that the presence of `aml.name` (the line description) is checked directly, rather than relying on the truthiness of the entire `aml` object. Before this PR, if the aml of an invoice only have the `account_id` field filled and no `product_id`, the `_l10n_uy_edi_get_line_nom_and_desc` will raise an error message like `TypeError: 'bool' object is not subscriptable` when trying to create de CFE document. <img width="1254" height="828" alt="image" src="https://github.com/user-attachments/assets/eaadad4c-46c3-4e3b-be52-9fcd146f2c22" /> <img width="1526" height="795" alt="image" src="https://github.com/user-attachments/assets/1b831f41-9774-4ed5-9a9d-9777ee0633e9" /> With this fix, we ensure there is a name to grab or the '-' will be send instead. Forward-Port-Of: odoo/enterprise#93838
Belgian payroll work entry UCM codes now preserve spaces so they remain the required three characters long. This prevents codes such as "PR " from being shortened when users leave and return to the field, helping ensure payroll data matches UCM specifications.
Original PR description
#### Issue: - UCM work entry code should be 3 characters long and allow spaces to get this length #### Step to reproduce: - In a Belgian company - Go to Payroll > Settings > Work Entry Types > New - Add a name - Add a Payroll Code - In the `Country` field fill Belgium - In the field `UCM Code` enter "PR " - Select another field - Select `UCM Code` again #### Current behavior: - The field `UCM Code` was updated to "PR" #### Expected behavior: - The field should stay to "PR " #### Solution: - Don't trim the field and add a spaces if needed opw-5014372 Forward-Port-Of: odoo/enterprise#92838
This fix prevents an error when Ecuadorian delivery guides are generated while barcode scanning is disabled in Inventory. Businesses can continue creating validated delivery documents without needing to enable barcode features they do not use.
Original PR description
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch…
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch to the `EC company`. - Uncheck `Barcode Scanner` in the Inventory `settings`. - Create a new warehouse and set the `Entity` and `Emission Point`. - Navigate to Inventory > Operations > Deliveries and create a new delivery. - Add details > mark as Todo > Validate > Generate Delivery Guide. **Error:** `AttributeError: 'stock.move.line' object has no attribute 'qty_done'` **Root Cause:** At [1], the `qty_done` field is used, but it is defined in the `stock_barcode` module. When the Barcode Scanner is disabled, the field is not available, leading to the error. **Fix:** This commit ensures that the `qty_done` field is always available when creating Delivery Guides by adding `stock_barcode` as a dependency in the `l10n_ec_edi_stock` module. [1]: https://github.com/odoo/enterprise/blob/ba5b9790f28e2f7eabda22e5992737eab0e82c6e/l10n_ec_edi_stock/models/stock_picking.py#L354 sentry-6851008674
This fix prevents report searches from running before report lines are available, avoiding empty or incorrect results when reports initially load without data. Once the data is loaded, the search is applied again so users get the expected filtered report view.
Original PR description
Recently, we changed reports to load without their data (and lines), since the search bar is loaded with the options it will try to filter on lines that haven't been loaded. Now, we are not searching if the lines are not loaded and search again once they are loaded. task-5068340
The Social app now displays action buttons in the stream post view with proper spacing. This small visual fix makes the interface cleaner and easier to use.
Original PR description
In the stream post view, the action button container uses the `gap-1` class, which applies spacing only to its direct children. Since the action buttons are wrapped in a `<div>`, they are not direct children, and the gap does not apply. As a result, the buttons appear flush against each other with no spacing. To resolve this, unwrap the action buttons from the `<div>`. Once unwrapped, the `gap-1` class will apply correctly, ensuring the buttons are evenly spaced and the interface looks cleaner. | Before | After | |--------|--------| | <img width="275" height="53" alt="Screenshot 2025-09-10 at 09 13 57" src="https://github.com/user-attachments/assets/c270d974-183e-48d5-9b58-2f97770ea13f" /> | <img width="282" height="45" alt="Screenshot 2025-09-10 at 09 14 18" src="https://github.com/user-attachments/assets/9eee758d-6d44-4dac-aebf-a9eb9f82cea5" /> | task-5072894
The bank reconciliation report now excludes currency exchange adjustment entries that do not represent real bank money movements. This prevents those adjustments from appearing under miscellaneous operations, giving finance teams a clearer and more accurate reconciliation view.
Original PR description
**Steps to reproduce** - Have foreign currency with rates for date 1 and date 2 - Have a Bank journal in foreign currency - Register a transaction in date 1 - In date 2 open the unrealized currency report - Create the adjustment entry - From the Accounting dashboard Bank[EUR] > Reconciliation report **Issue** The adjustment entry difference is present under the 'Misc. operations' line. This occurs because we look for journal entries hitting the bank account but that specific entry should not be reported as it does not represent a bank in/out operation A solution is to exclude the exchange entry journal, so any operation reported there is not taken into account in the report opw-4867870 [Ticket link](https://www.odoo.com/odoo/project/49/tasks/4867870) Forward-Port-Of: odoo/enterprise#94172 Forward-Port-Of: odoo/enterprise#93999
The follow-up filters are now only shown to users who have permission to access the related follow-up status information. This prevents users from seeing or using filters that would fail due to restricted access, improving reliability and clarity.
Original PR description
Follow-up filters search using an inaccessible field. The filters should only be visible to users that have access to `followup_status`.
[This commit][1] introduced errors in the Dutch and German translation files. As a result this module can not be installed anymore when any of these languages is used. This commit fixes the errors. [1]: https://github.com/odoo/enterprise/commit/d3d5e667a2d543b55a40148cb536e54d2ac64300
Original PR description
[This commit][1] introduced errors in the Dutch and German translation files. As a result this module can not be installed anymore when any of these languages is used. This commit fixes the errors. [1]: https://github.com/odoo/enterprise/commit/d3d5e667a2d543b55a40148cb536e54d2ac64300
A test for the message attachment menu was updated to match a recent interface change. This helps keep automated checks reliable so future updates can be delivered with fewer false test failures.
Original PR description
Following https://github.com/odoo/odoo/pull/225216, this PR fixes the class used to target an active button. task-5058883 PR-commu: https://github.com/odoo/odoo/pull/225216