Wednesday, September 17, 2025
76 changes · master
Resolved issues and error corrections
Corrected a misspelled animation label in the website HTML builder's image shape definitions. This helps ensure image shape options are named consistently and reduces the chance of display or configuration issues.
Original PR description
Fix typo: change 'anmated' to 'animated' in image shape definitions. Forward-Port-Of: odoo/odoo#226865
The Discuss app no longer shows the compact chat hub button when there are no chat hub conversations to display. This removes a redundant control and keeps the messaging interface cleaner and less confusing for users.
Original PR description
Before this commit, chat hub compact was visible in disucss app. This happens because while chat windows and bubbles are conditioned to not be shown in discuss app (with exceptions), the compact mode…
Before this commit, chat hub compact was visible in disucss app. This happens because while chat windows and bubbles are conditioned to not be shown in discuss app (with exceptions), the compact mode of chat hub was solely relying on compact mode on/off, ignoring the overall condition for whether some conversations are shown in chat hub (note: conversations in compact are still considered as "shown"). This commit adds extra condition on showing compact button to take into account chat hub showing some conversations. If no conversations are shown, then the compact mode should not be shown at all. Discuss app prevents showing of conversations in chat hub (with exceptions), as this is redundant with discuss app itself. Task-5058838 Before <img width="470" height="195" alt="Screenshot 2025-09-15 at 12 13 40" src="https://github.com/user-attachments/assets/f6e8ea32-7def-4654-858f-5d39fbcc97c1" /> After <img width="490" height="232" alt="Screenshot 2025-09-15 at 12 13 20" src="https://github.com/user-attachments/assets/bc9feb62-6d84-4d73-8e10-674ab4260032" /> Forward-Port-Of: odoo/odoo#227162
This fixes an error that occurred when the portal signature form was used directly on a page instead of inside a pop-up window. Businesses can now reuse the signature form more flexibly without causing page errors for portal users.
Original PR description
Description of the issue/feature this PR addresses: Be able to use the portal signature form outside of a modal. Current behavior before PR: If the signature form (```<t t-call=“portal.signature_form”>```) is used outside of a modal, an error occurs: ```TypeError: Cannot read properties of null (reading 'addEventListener')``` Desired behavior after PR is merged: The signature form can be used outside of a modal. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224564
Fixed an issue where reopening and saving the Optimize SEO dialog could accidentally erase an image description added in the website editor. This helps preserve accessibility and search-related image information without requiring users to re-enter it.
Original PR description
Steps to reproduce: 1. Open Optimize SEO. 2. Mark an image as decorative. 3. Save it. 3. Give a description(ALT) to that image from editor. 4. Open Optimize SEO again and save without doing anything. Issue: The description(ALT) on the image being set is lost. Cause: When reopening the **Optimize SEO** dialog, `seoContext.updatedAlts` still contained entries from previous edits. As a result, saving without making any change triggered an call to `update_alt_images` which reset the `alt` attribute to empty, eventually discarding the description. This PR ensures `seoContext.updatedAlts` is reset when opening the dialog. Forward-Port-Of: odoo/odoo#227178 Forward-Port-Of: odoo/odoo#226913
The mail activity type setup screen now shows or hides the model field more appropriately depending on the context, making settings clearer for administrators. An unnecessary warning about changing models was removed because existing safeguards prevent harmful changes and existing activities are not affected.
Original PR description
Simplify model usage in form view: do not display it if a default value is given in context (aka in apps settings). Generic view, available for admins, correctly display the model field without having to use the technical group. Remove the warning about model change since * plans are protected through a constraint * you cannot change generic types model (Meeting, ...) * changing the model of other types does not break already-created activities (just that it is not available for new activities in the old model); Task-5088991 Forward-Port-Of: odoo/odoo#227116
This fixes an issue where selected website color palette names were saved in the wrong format after a recent change. Restoring the expected format helps ensure website theme settings continue to apply reliably.
Original PR description
Since the refactoring, the `color-palettes-name` value is not surrounded by quotes in the `user_values.scss` anymore. This commit restores the quotes upon selection. task-4367641 Forward-Port-Of: odoo/odoo#224425
Receipt instructions now preserve the product name when it appears as part of a longer description. This prevents important reception guidance from being accidentally shortened or made unclear for warehouse users.
Original PR description
Steps to reproduce: - Create a product - Set a description for receipts that uses the product name somewhere in the text - Create a reception for that product Issue: The product name will be removed from the reception instructions. The intended behavior was to avoid displaying the same information if the description was the same as the product's display_name. So we only check that now, rahter than do a replace in the description. Task-4901289 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226925
Combo product lines in sales orders now display their section options correctly without overflowing past the shortened text. This keeps sales order lines cleaner and easier to read when product descriptions are truncated.
Original PR description
In odoo/odoo@520bb2ff8eb165e4a9389db6300192f9b4a05dfd the styling applied on the `.o_list_section_options` was removed for utility classes. However these utilities were not applied on the combos, rendering an overflow after the ellipsis. task-5089909 Issue: <img width="961" height="583" alt="image" src="https://github.com/user-attachments/assets/fe4f7cd9-da3e-4ca5-98f5-0101d3a95012" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227192
This fix makes Discuss-related automated tests more reliable by ensuring the interface is stable before simulated clicks are made. It also corrects test mocks and incomplete test assumptions, reducing false failures in validation pipelines without changing user-facing behavior.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. The commit also fixes the mock of `discuss/search` ( for https://github.com/odoo/enterprise/pull/94075 ) and a test that was incomplete and relied on the incorrect implementation https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/odoo#225951 Forward-Port-Of: odoo/odoo#225844
On small screens, selecting an item such as Preferences from the user menu now closes the burger menu first. This prevents dialogs from opening behind the menu, making mobile navigation clearer and easier to use.
Original PR description
This commit ensures the BurgerMenu is closed when clicking on one of its items, and specifically on one of the BurgerUserMenu items. Steps to reproduce (on small screen): - on a "base" database (no app installed) - click on the BurgerMenu (top right) - click on "Preferences" => the user's preference dialog opens behind the BurgerMenu Forward-Port-Of: odoo/odoo#226959 Forward-Port-Of: odoo/odoo#225696
This fixes an automated website shop checkout test so it continues to match the updated checkout page layout. It helps keep quality checks reliable and reduces the chance of future checkout changes being blocked or missed by broken tests.
Original PR description
Forward-Port-Of: odoo/odoo#226638
Fixes an issue where changing the start time while quickly editing a calendar event could incorrectly recalculate the event's end time. The calendar now preserves the event duration during quick edits, helping users avoid accidental scheduling mistakes.
Original PR description
`CalendarEvent._compute_stop` relies on "duration" being somehow available when "start" is changed. In quick-create, where the duration is not stored we need to "store" it in the front-end between onchange calls. For this reason "duration" needs to be force_save and invisible on the view so that it is not recomputed each time. Which otherwise defeats the purpose of the feature. In appointment duration is also used in default_get hence fetching a default value for it by having it in view actually changes the behavior of the default values. Though this can be mitigated in other, more reliable ways, this fix is sufficient for that case too. The field was removed during view refactoring in odoo/enterprise@c8eb4fe4ba9938b1c7e07034e6ca7c08a0d6f215 and 81e51985f2e01ee3ff115477ab324e2ad75a1b77 task-5081903 Forward-Port-Of: odoo/odoo#226909
The product page image carousel now makes the currently selected thumbnail easier to identify. This improves the shopping experience for customers browsing products with multiple images, especially when wide image layouts and click-to-popup views are enabled.
Original PR description
Steps ----- 1. Have a published product with multiple images; 2. go to its website page; 3. open website editor; 4. set Images Ratio to Wide; 5. enable pop-up on click; 6. save; 7. browse through the images. Issue ----- - While there is a border around the active thumbnail in the bottom row, it is barely visible, making it difficult to see which image is currently being shown. Cause ----- - The border is only 1 pixel wide. Solution -------- - Increase the width of the border to 4 pixels, change the color to `$primary`, and hide the border for inactive images. - Set opacity of thumbnails that aren't selected or hovered over to 0.5. opw-4908881 Forward-Port-Of: odoo/odoo#224644
This fixes an issue where some payment status messages could be handled incorrectly and trigger an error for users. Payment pages now only perform the empty-message check when a custom status message is actually configured, making the status display more reliable.
Original PR description
Status message in some cases was evaluated as Qweb Template instead of HTML and is_html_empty() doesn't evaluate Qweb. The solution is to only check is_html_empty() when a custom status message is set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226592
This fix prevents an incorrect warning from appearing when a user closes a Point of Sale session. It ensures staff are not told that another user is closing the session when they are performing the action themselves, reducing confusion during store operations.
Original PR description
Issue: When closing session on a pos the warning: "The session is being closed by another user. The page will be reloaded." was shown. Fix: The condition in the closingSessionNotification was strictly comparing an int with a string. 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#227237
This fix makes point of sale test scenarios search for a customer before selecting them, ensuring the customer is available in the list. It helps prevent false test failures and improves confidence that POS customer and loyalty flows work as expected.
Original PR description
### After this commit: - In test cases, before selecting a customer, perform a search to ensure the customer is loaded into the list if it is not already present. Runbot Err: 230518 task: 5068285 Forward-Port-Of: odoo/odoo#227110
This change makes an existing web framework helper available for reuse in other parts of Odoo, such as Studio. It helps teams rely on a standard way to repeatedly check whether a condition is met, reducing duplicate work and improving consistency.
Original PR description
Because waitUntil maybe used in its own sake to periodically check a predicate (in studio) and because macro.js is a standard framework tool, we export its waitUntil function 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#227233
The website shop editor now includes the missing Overlay option for the Showcase Product design. This helps website managers consistently style product displays without needing workarounds.
Original PR description
This commit adds the missing Overlay option for the Showcase Product Design. task-5090301 <img width="1919" height="779" alt="Capture d’écran 2025-09-15 à 16 03 52" src="https://github.com/user-attachments/assets/badb1525-c9f8-4298-853a-1d89f6f8897c" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227252
Product combo names are now available for translation. This helps businesses present combo product options in the customer's preferred language, improving clarity for multilingual users.
Original PR description
Scenario: try to translate product.combo name Result: it's not possible, the field is not translatable opw-5069187
The Employee Type field is visible again on employee records after it disappeared in a recent change. This helps HR teams correctly view and manage employee classifications without disruption.
Original PR description
The Employee Type field disappeared lately, so had to put it back. task-5079734 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226812
Receipts will no longer show an incorrect QR code when a Spanish TicketBAI submission fails during a point-of-sale transaction. This avoids confusing customers and helps businesses keep receipt information accurate after failed reporting attempts.
Original PR description
Currently if the TicketBAI upload fails, a QR code is printed with the value `true`. Steps to reproduce ----- 1. Validate a POS order 2. Have a request exception occur during the TicketBAI post 3. Receipt is printed with an incorrect QR code Issue ----- `get_l10n_es_pos_tbai_qrurl()` returns None if the edi document is not accepted. This is then interpreted as `true` by the client and a QR code is printed. Solution ----- Explicitly return an empty string if the edi document is not accepted. Forward-Port-Of: odoo/odoo#227293
The add snippet dialog now uses theme-aware colors so it remains readable in dark mode. This improves visual accessibility and provides a more consistent experience when users add website building blocks.
Original PR description
The add snippet dialog is using custom colors on its `list-group` items which breaks the color-contrast when displayed in darkmode. This commit removes `list-group-item-light` to rely on default list-group colors, and uses bootstrap CSS variables to handle the custom active background color and color. Creates a `add_snippet_dialog.dark.scss` to handle the background of the searchbar. task-5075140 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226061
The system now only shows a warning about listening on all network addresses when the web server is actually enabled. This prevents unnecessary or confusing warnings in configurations where HTTP access is turned off.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227151
Discuss call action buttons now have slightly softer corners so they visually fit better beside the round join and leave buttons. This creates a more polished and consistent calling experience without changing how the buttons work.
Original PR description
Before this commit, all call actions but the special buttons "join" / "leave" were almost squared, whereas the "join" / "leave" buttons were circles. The circle design of the "join" / "leave" buttons…
Before this commit, all call actions but the special buttons "join" / "leave" were almost squared, whereas the "join" / "leave" buttons were circles. The circle design of the "join" / "leave" buttons is very much what we want, for recognizable shape and consistent in all Odoo such as with VoIP app. The other buttons are not circle because it looks best when inline and grouped. However, the square buttons with rounded circle look slightly off as if there's a clash of design. This commit remedies the problem by adding slight roundness to the square discuss actions that are not circle. This is almost unnoticeable when just looking at the square buttons, but when next to the circle button this looks like they fit together more than before. Before / After <img width="354" height="169" alt="Screenshot 2025-09-15 at 13 59 25" src="https://github.com/user-attachments/assets/f1505ae3-abfd-4b64-94bf-c554ed74e9c8" /> <img width="354" height="167" alt="Screenshot 2025-09-15 at 13 59 05" src="https://github.com/user-attachments/assets/b41100e0-b3bc-408f-8206-6dc2a77aa6c9" /> Forward-Port-Of: odoo/odoo#227202
Primary buttons now show a clearer visual difference between hovering over them and actively pressing them. This reduces confusion for users by making button interactions feel more consistent across the interface.
Original PR description
This PR introduces a clear visual distinction between the `:hover` and `:active` state of our primary buttons. | 19.0 and below | This PR | |--------|--------| | <img width="129" height="45" alt="image" src="https://github.com/user-attachments/assets/204b0c4e-622c-467e-8394-750cc79ee6e4" /> | <img width="135" height="52" alt="image" src="https://github.com/user-attachments/assets/096a5c34-56b2-41d8-9d9e-d6b9195b17d5" /> | Prior to this PR, the active state was using a `darken()`, which was similar to the approach in use for the `:hover` effect, which could result in a confusing behaviour for users. With this PR, we now align the behaviour of our buttons `:active` state across all the bundles. task-5087169 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227083
Deleting a message that contains a link preview now automatically removes the related preview as well. This prevents leftover previews from remaining in the conversation and avoids manual cleanup for users.
Original PR description
**Specifications:** - Ensure link preview is removed when deleting a message. **Purpose:** - Previously, deleting a message with a link preview did not remove the preview, requiring manual intervention. - This fix ensures that when a message containing a link preview is deleted, its associated preview is also removed automatically, improving user experience. task-4678962 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227318 Forward-Port-Of: odoo/odoo#204930
This fix makes Odoo's test and browser automation support handle missing websocket connections correctly after a serious failure. It helps preserve the original error information instead of replacing it with a secondary failure while capturing screenshots or recordings.
Original PR description
Cf #226267 the "error condition" on the ws socket is that it's not present at all, not that it's `None`. So when used after a fatal error (e.g. in the context of trying to take a screenshot or take a screencast) these methods *can* in some cases trigger a compound failure and lose the original error because they fail on trying to access the ws to check if it's truthy. Forward-Port-Of: odoo/odoo#227469 Forward-Port-Of: odoo/odoo#227385
Demo data was adjusted so barcode information is placed on the correct product variant for the Large cabinet item, avoiding issues caused when variants archive the base product. Delivery demo settings were also updated so serial numbers can be created during delivery operations, keeping sample workflows consistent.
Original PR description
Since variants are created for 'Large cabinet', we need to move the barcode to one of those variants. task 5089956 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227346
This fix prevents list views from crashing when a monetary column is configured to be hidden. Users can now work with affected views, such as Analytic Budget records, without interruption, and the list rendering work is limited to visible columns.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227406
This fixes an issue in Discuss where some actions could be linked to the wrong internal message store. The correction helps prevent unexpected errors when actions are created from local components, improving reliability for users.
Original PR description
In Discuss, actions can be defined globally (registry) or locally (components). When defined from a component, the store must be explicitly provided. If not, the constructor falls back to the owner if it is a store, or to the `mail.store` service. The fallback condition was incorrectly grouped due to missing parentheses, so the owner was always used even when a store was given. This could result in actions being bound to the wrong store, causing unexpected errors. 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#227473
Kanban items marked as rotting now use the standard selected-item appearance when chosen. This makes it clearer for users which item is selected and avoids confusion caused by the previous reddish background staying visible.
Original PR description
The new Rotting feature displays rotting items with a light reddish background in Kanban view. However, they retain this color even as they are selected, which makes the selection unclear. This fix makes it so the rotting items look, once selected, the same as any other selected kanban item. task-5088907 Forward-Port-Of: odoo/odoo#227143
Fixes an issue where live survey users could see an error after clicking the Results button at the end of a scored survey. This improves reliability for survey sessions and prevents disruption when participants or presenters review results.
Original PR description
How to reproduce: - Create a live survey with one scored question - Do a live survey with one participant - At the end of the survey, click on "Results" button There is an error. We solve the problem by reading the event to determine if the result should be displayed or not at the top of the method as it is modified later (by waitFor on orm call as observed). Task-5090443 Forward-Port-Of: odoo/odoo#227272
Fixes an error that could occur when users opened the three-dot menu on a section line while editing a new invoice. This keeps invoice editing smooth and also updates related sales line menus that use the same component pattern.
Original PR description
The prop doesn't exist. Forward-Port-Of: odoo/odoo#227475
The Discuss app no longer shows the compact chat hub button when there are no chat conversations to display there. This removes a redundant control and keeps the messaging interface cleaner for users.
Original PR description
Before this commit, chat hub compact was visible in disucss app. This happens because while chat windows and bubbles are conditioned to not be shown in discuss app (with exceptions), the compact mode of chat hub was solely relying on compact mode on/off, ignoring the overall condition for whether some conversations are shown in chat hub (note: conversations in compact are still considered as "shown"). This commit adds extra condition on showing compact button to take into account chat hub showing some conversations. If no conversations are shown, then the compact mode should not be shown at all. Discuss app prevents showing of conversations in chat hub (with exceptions), as this is redundant with discuss app itself. Backport of https://github.com/odoo/odoo/pull/227162 Forward-Port-Of: odoo/odoo#227190
This fix stops Odoo from adding a log note when a Saudi e-invoicing validation error happens before any request is sent to ZATCA. This keeps invoice records cleaner by only logging actual ZATCA responses, reducing confusion for users reviewing invoice history.
Original PR description
In a previous commit e90c35cde2a1f5de5d7bc4db7a525638ca3fab6e, we modified the logic of posting a log note when receiving a response from ZATCA to always log a note of the response. An issue occured because sometimes, Odoo raises user errors before sending a request to ZATCA, In which case, we do not need to log a note. Task-id: 5056724 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#227316 Forward-Port-Of: odoo/odoo#226036
This fix adjusts how content is displayed inside bottom sheets so options and controls fit more reliably. It helps users avoid cramped or misaligned interface elements when working with menus, tags, colors, and form button areas.
Original PR description
This commit fixes several layout issues related to the content of the bottom sheet. task-5087158 Requires: - https://github.com/odoo/enterprise/pull/94783 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227230
The payroll work entry process no longer checks for multiple employee contracts because that situation cannot occur. This removes an unnecessary validation step and helps avoid misleading checks during payroll processing.
Original PR description
The multi contract is not possible, so removed the check. task-5073952 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227159 Forward-Port-Of: odoo/odoo#225964
This fix removes unnecessary test dependency links in website tour automation, helping prevent false failures in Odoo's validation process. It improves the reliability of automated checks without changing day-to-day user functionality.
Original PR description
runbot-error-232620 closes odoo/odoo#227220 Related: odoo/enterprise#94782 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 issue that caused an error when users tried to open the tours list while no interactive tour was running. The tours list now loads the needed files correctly, improving reliability for users who manage or inspect tours.
Original PR description
Before this commit, if you don't have a running tour and try to access to the tours list view, you got a traceback. Now, the traceback is fixed. The error was due to the new lazy load of the tours. The files that concerned the list view of the tours was in an asset that was loaded only when an interactive tour was running. Lazy load pr: https://github.com/odoo/odoo/pull/224571 TASK-ID: 5089053 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227392
This fix makes mail tests wait for messages to load before updating attachments, avoiding timing issues that caused intermittent runbot failures. It improves confidence in automated testing for mail features without changing business workflows.
Original PR description
Before this commit, the test could experience a race condition where the load of the message and the update of the content of that message happen at the same time, if that happens and the update of the content is received by bus before the load of the message (which therefore does not contain any attachment), then the store was overriding the attachment. This commit should solve the problem in the test by waiting for the messages at the beginning of the test as well as updating the attachments in the ui and not by rpc directly. The race conditions should be fixed globally and are not only linked to this issue. fixes-runbot-66304 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227501 Forward-Port-Of: odoo/odoo#226922
The website search page now shows the correct empty-state icon when no results are found. This keeps the visual experience consistent with the current user interface and avoids a mismatched look.
Original PR description
Before this PR, the empty search icon was not the same as the current one in the UI. task-5062081 | Before | After | |--------|--------| | <img width="469" height="288" alt="Screenshot 2025-09-03 at 11 46 46" src="https://github.com/user-attachments/assets/2d9b1a3b-bfe1-4b3a-af3a-bfc00da1f535" /> | <img width="469" height="288" alt="Screenshot 2025-09-03 at 11 46 36" src="https://github.com/user-attachments/assets/08da73c6-28fd-4ab8-8c83-034af891ca36" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225340
This fix prevents errors when website-related fields are configured from backend tools such as Studio. If no website pricelist is available in that context, Odoo now safely uses the company's currency instead, avoiding a crash and keeping configuration workflows stable.
Original PR description
Prior to this commit, the website currency was computed using the request pricelist. However, this logic assumed that the compute method could only be called from a frontend request.
However, via `web_studio`, a user can add fields linked to a website, which triggers the computation in a backend request, causing the following traceback:
```
Traceback (most recent call last):
...
File "/data/build/odoo/addons/website_sale/models/website.py", line 282, in _compute_currency_id
request and request.pricelist.currency_id or website.company_id.sudo().currency_id
^^^^^^^^^^^^^^^^^
AttributeError: 'Request' object has no attribute 'pricelist'
```
This commit fixes the issue by first ensuring that the pricelist exists and falling back to the company currency if it does not.
opw-5068581
Forward-Port-Of: odoo/odoo#227450Forum profile biographies now display formatted content correctly when users edit their profiles. This prevents HTML tags from appearing as plain text, making profile editing clearer and more polished for users.
Original PR description
Currently, when opening the dialog to edit the user profile in Forum, the biography field is shown as raw text and displays the HTML tags instead of rendering them. Steps to reproduce the issue: 1. Open a forum 2. Click on your avatar to open your profile (/profile/user/<user_id>) 3. Click on the "EDIT PROFILE" button => The biography is displayed as text while it should be rendered as HTML Since this [fix], the editor renders markup as HTML and strings as text. To ensure that the profile dialog correctly renders the field, we now convert the field value into markup so that the editor interprets and renders the HTML properly. [fix]: https://github.com/odoo/odoo/commit/560fca7e94b232a7e2c9ad452a9772367c34204b task-5005880 Forward-Port-Of: odoo/odoo#222332
This fix improves the mobile presentation of address selection and payment method screens in the website checkout and portal. Spacing, edit icon alignment, and the “secured by” payment label are adjusted so customers see a cleaner, more consistent checkout experience on small screens.
Original PR description
*: portal, payment. This PR fixes some issues regarding the mobile design of the address selector & method payment, mainly by adapting the margins and paddings in and between the components. 1. The…
*: portal, payment. This PR fixes some issues regarding the mobile design of the address selector & method payment, mainly by adapting the margins and paddings in and between the components. 1. The 'edit' icon placement was changing if there was no badge on the card (address checkout & portal page). 2. Refine the spaces in the address & billing summary on the payment method page. 3. The label 'secured by […]' is now on its own line and centered horizontally on mobile. task-5081875 Requires: - https://github.com/odoo/enterprise/pull/94884 | | Before | After | |--------|--------|--------| | 1 | <img width="1179" height="2556" alt="image" src="https://github.com/user-attachments/assets/33faf30b-3b6c-47ce-acef-12265b50df0d" /> | <img width="368" height="802" alt="image" src="https://github.com/user-attachments/assets/1432d00e-9d41-488d-b482-b64728319206" /> | | 2 | <img width="1179" height="2556" alt="image" src="https://github.com/user-attachments/assets/195da2f4-9f0e-4cc8-bb4d-df55fc887216" /> | <img width="1095" height="2040" alt="image" src="https://github.com/user-attachments/assets/046f1353-df4b-4b4b-b14c-1fe4d7db85c1" /> | | 3 | <img width="704" height="538" alt="image" src="https://github.com/user-attachments/assets/e19388fe-eccd-403b-855f-2a0b2197c87a" /> | <img width="341" height="276" alt="image" src="https://github.com/user-attachments/assets/2f9b24a0-60ee-4cf2-8206-31abed565b90" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226453
The Malaysian EDI fields now show identity card numbers without hyphens, matching how they are typically entered in ERP systems. This reduces user confusion and helps submissions pass validation with the IAP server and MyInvois.
Original PR description
Hyphens are generally omitted in ERPs, and just shown on the Identity card. Putting hyphens in the placeholder is actually misleading for users, and prevents validation through the IAP server and MyInvois Ref: https://en.wikipedia.org/wiki/Malaysian_identity_card#Structure_of_the_National_Registration_Identity_Card_Number_(NRIC) Task [link](https://www.odoo.com/odoo/project/967/tasks/5054821) task-5054821 Forward-Port-Of: odoo/odoo#225094
Changing the memo on an accounting payment now also updates the reference on its related journal entry. This keeps payment and accounting records consistent, reducing confusion during reconciliation and review.
Original PR description
Issue: In previous versions, the memo field of account payments and ref field of account move were related Now that payments do not required to have generated account move's when the memo is updated the ref remains unchanged. Purpose of this PR: To update the account move ref when the payment memo is updated. Steps to Reproduce on Runbot: install accounting go to bank account and assign outstanding accounts for manual payment methods create a payment -- a related account move should be created update the memo on the payment -- the ref on the related account move is unchanged. opw-4989260 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226168 Forward-Port-Of: odoo/odoo#223459
This fixes an issue where background images in the website banner categories block could not be replaced. Website editors can now update those images as expected, making page customization more reliable.
Original PR description
We can't replace the image on the `grid_items` this commits applies the background image on the column to make it replaceable. task-5079842 Follow-up of task-4775259 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226303
The Check Availability button on batch transfers now follows the same rules as the individual transfers inside the batch. This avoids confusing differences for warehouse users and helps ensure batches show the action whenever any included transfer needs it.
Original PR description
The behaviour of the 'Check Availability' button is inconsistent between batch pickings and vanilla pickings. Instead of replicating the same logic in the compute and painstakingly keeping them in sync with every change, we just defer to the same field in the pickings. That is to say, if even one picking has `show_check_availability` as True, it becomes True in the batch picking as well. Task ID: [5075160](https://www.odoo.com/odoo/project.task/5075160)
The time off request form now consistently hides the date range toggle when selecting leave dates. This prevents employees from seeing an inappropriate control and keeps the date selection experience aligned with expected time off workflows.
Original PR description
Before this commit the ´o_toggle_range´ button was shown in the picker due to the following rule:
´´´
showRangeToggler:
this.relatedField && !this.props.required && !this.props.alwaysRange
´´´
As we can see, the button does not appear when the field is required. However, in this case, the `request_date_from` field was not always required, which is why the button appeared.
To fix this issue, we now force it to be hidden by using `alwaysRange`.
task-5085529
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#227196Fixed a display issue where long Many2one field values could overflow instead of showing an ellipsis, causing alignment problems on forms. This keeps employee private information fields and similar form layouts cleaner and easier to read.
Original PR description
The text-truncate bootstrap class of the m2o field does not work properly as the ellipsis is not visible and create an alignment issue with the private_state_id field. This PR solves this issue which can be seen in the "Private information" tab of the employee form. Task-5078736 Forward-Port-Of: odoo/odoo#226214
Product tiles in the online shop now show product names and prices with better visual balance. This makes listings easier to scan and keeps the product name hierarchy clear across different font and styling choices.
Original PR description
Despite "Title" and "Price" use exactly the same font-size, the latter was perceived as "bigger". Root causes: - Price is enforced bold, while Title defaults to regular (can be set bold via options,…
Despite "Title" and "Price" use exactly the same font-size, the latter was perceived as "bigger". Root causes: - Price is enforced bold, while Title defaults to regular (can be set bold via options, but that's not obvious). - They use different font families: the default title font 'InterTight' is more condensed than the font used for the Price, making the Title look smaller. This PR: - Slightly increased the Title font size. - Slightly decreased the Price font size. Combined, these changes create a ~16% size difference, ensuring hierarchy remains clear even when misleading conditions occur (custom fonts, bold titles...). Adjusting the Price alone was risky since reducing it by ~16% would have brought it uncomfortably close to the description font-size. task-5086427 --- 19.0 | Default | Bold Title | Other fonts - No bold title | |--------|--------|--------| | <img width="333" height="431" alt="image" src="https://github.com/user-attachments/assets/915ba7c0-6148-4fd9-9d00-b44c93f35e0e" /> | <img width="336" height="430" alt="image" src="https://github.com/user-attachments/assets/b509eccc-fc0c-4823-93d9-8e9fcce5b961" /> | <img width="332" height="426" alt="image" src="https://github.com/user-attachments/assets/41b680ca-b994-4b87-ad83-09640ca32699" /> | --- This PR | Default | Bold Title | Other fonts - No bold title | |--------|--------|--------| | <img width="332" height="419" alt="image" src="https://github.com/user-attachments/assets/caa1a040-93c2-41ff-95a7-c816d7ae26da" /> | <img width="327" height="418" alt="image" src="https://github.com/user-attachments/assets/afe78b8c-9045-446c-add8-1a11dfa738e4" /> | <img width="322" height="416" alt="image" src="https://github.com/user-attachments/assets/a6460b87-6af6-417c-83e8-51828c04deb5" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227087
Appointment booking confirmation emails will now go only to the intended followers, rather than also being sent to attendees. This avoids unnecessary or confusing notifications while keeping internal teams informed when new appointments are created.
Original PR description
[1] introduces the new paradigm of always sending emails to "relevant recipients" which fetches emails and partners linked to the relevant record to send a message.
In appointment the "Appointment Booked" template is only meant to be sent to followers of `mt{_calendar,_appointment}_event_booked` to inform users that a new appointment was created even if they are not personally assigned to it.
`test_request_meeting_message_for_manual_confirmation` is also updated to represent the case of some visitor creating booking an appointment instead of using internal users for everything to better represent real use cases. Additionally each mail.mail record is extracted and checked individually to make sure we send the right contents to the right recipients.
[1]: 1dd6070ecaab385446cc2df7cad444f046812061
task-5075513
task-4711415
Forward-Port-Of: odoo/enterprise#94646
Forward-Port-Of: odoo/enterprise#94456The Studio AI field setup now requires users to choose a related record type when creating Many2one or Tags fields. This prevents incomplete field configurations from being saved and avoids crashes during field creation.
Original PR description
When adding an AI field of type Many2one or Tags, the Relation field was optional. If left empty, it caused a crash. This commit enforces that a Relation must be selected before confirming the dialog: - Add a red highlight if Relation is missing - Prevent field creation by returning early Task-5055796 Forward-Port-Of: odoo/enterprise#93873
Opening the duplicate transaction wizard directly no longer causes an error when no bank journal is linked. This prevents an avoidable interruption for accounting users and makes the view safer to access from administrative tools.
Original PR description
Currently, an error occurs when users try to open the view directly. Steps to reproduce: --- - Install `Accounting` module - Using Open View, Open `account.duplicate.transaction.wizard` view Traceback: --- `ValueError: Expected singleton: account.journal()` This error occurs because no account journal is linked to the wizard at [1], resulting in an empty `account.journal`. [1]- https://github.com/odoo/enterprise/blob/08564f3312c255f2f3ab95cef5a9bfc57727bd1f/account_online_synchronization/wizard/account_journal_duplicate_transactions.py#L32 sentry-6812500330 Forward-Port-Of: odoo/enterprise#94538
Mexican electronic invoice PDFs now use the same customer fiscal regime as the official XML file. This avoids confusing mismatches when invoicing a child contact whose parent company has a different fiscal regime.
Original PR description
In l10n_mx: - Create a child contact under a company contact. - Set the fiscal regime of the child contact to one different from the company’s fiscal regime. - Create an invoice with the child contact and send it to the CFDI. In the XML, the fiscal regime used is the company’s, whereas in the PDF it is the child contact’s. This commit applies the same logic from _add_customer_cfdi_values to the PDF generation. After this change, the fiscal regime shown in the PDF will be the company’s, consistent with the XML. opw-4989605 Forward-Port-Of: odoo/enterprise#94259 Forward-Port-Of: odoo/enterprise#92482
When a new partner is created from bank reconciliation, the system now shows the correct receivable or payable button based on the statement amount rather than missing customer or supplier history. This prevents users from seeing the wrong payment action for newly created partners.
Original PR description
When creating a new partner from the set partner button, the partner doesn't have any rank (supplier or customer), this lead to have the payable button to be displayed since the condition to have it is to have a partner and not (customer_rank > supplier_rank). Since supplier rank and customer rank are 0 it will be False which lead to the button to be displayed. no task id Forward-Port-Of: odoo/enterprise#90435
This fix stabilizes an automated test related to the WhatsApp command palette so clicks happen only after the interface is ready. It helps prevent false test failures, improving confidence in release validation without changing user-facing WhatsApp behavior.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/enterprise#94075
The Barcode app now avoids showing a product description when it is identical to the product name. This reduces repeated information during receptions, making barcode operations clearer for warehouse users.
Original PR description
Steps to reproduce: - Create a product - Open the Barcode app - Create a new reception and add the product Issue: The description is displayed even though it's the same as the product name. Since in barcode we don't get the product's `display_name` with its code as they're treated separately, we need to reconstitute it to be sure it's not the same as the description in order to know if we want to display it or not. Task-4901289 Forward-Port-Of: odoo/enterprise#94623
Signed document emails now use each document's own name for attachments. This prevents duplicate-looking filenames and avoids adding an extra .pdf extension, making received documents clearer for customers and staff.
Original PR description
Steps to reproduce: 1. Install Sign. 2. Configure an outgoing email server. 3. Send a sign request for 2 or more documents to the admin (use your own email) 4. Open the email, sign and validate the documents. 5. You will receive an email. **Issue:** - You observe there are attachments in the email with same name and an extra `.pdf` as file extensions (e.g. `abc.pdf.pdf`). **Cause**: https://github.com/odoo/enterprise/blob/a1cd174c65fa181701cc3c5883fb5ab43b2803d8/sign/models/sign_request.py#L588-L594 - The code used `record` instead of the current `document` to determine the attachment name, causing the wrong generated name. **Solution:** - Use the `document` name when generating the attachment filename. opw-4965405 Forward-Port-Of: odoo/enterprise#92183
This fixes a problem that could prevent a payroll batch action from working correctly for Swiss payroll. The change restores expected payroll processing behavior by aligning the Swiss payroll customization with the standard action requirements.
Original PR description
Parameter was not added to the overriden method in switzerland Forward-Port-Of: odoo/enterprise#94461
The Documents app now consistently shows the Activities button in the chatter panel for every document, including files linked to other document types such as signing documents. This restores access to activity tracking and follow-up actions where the button was previously missing.
Original PR description
Step to Reproduce: - Install `Documents_sign` module - open Documents - click on 'info & tags` button on the top right corner to show chatter - Open 'Odoo CLA.pdf' document Observation: - The Activities button is not shown in Chatter. Issue: - after this https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e, the activities button shows only for those documents which are related to `documents.documents` model or a document has no model, but it should be shown for all documents https://github.com/odoo/enterprise/blob/23fb26ae0f91a5bdb74d0d4fce48b31fa7abef86/documents/static/src/views/kanban/documents_kanban_renderer.xml#L21-L26 Solution: - Remove condition for Kanban and list view to show `activities` button in Chatter opw-5013427 Forward-Port-Of: odoo/enterprise#94514 Forward-Port-Of: odoo/enterprise#93093
Users without administrator rights can now open return checks without hitting an access error. This fixes a permissions issue in accounting reports so day-to-day return review works reliably for standard users.
Original PR description
Before this fix, trying to open a return with a user not having the administration rights caused an access error. This was because the computation of that field tried to access the name of an ir.model record. Forward-Port-Of: odoo/enterprise#94759
Odoo Studio now uses an existing shared waiting utility instead of depending on a tour-only component. This avoids unnecessary loading behavior and helps keep Studio more reliable without changing the user experience.
Original PR description
HootDom is lazy loaded and necessary only in tours. Studio uses the waitUntil function, but it is also findable in macro.js in @web/core Forward-Port-Of: odoo/enterprise#94786
The US check printing feature now requires the correct US accounting component. This helps ensure the feature is installed with the accounting setup it needs, reducing configuration issues for businesses using US localization.
Original PR description
It should depend on `l10n_us_account`, not just `l10n_us`. Forward-Port-Of: odoo/enterprise#94801
Fixed an issue where users editing properties on products without a category could see a blank notification instead of a helpful warning. This ensures the intended message appears, reducing confusion during product setup.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Create a new product without a category; 2. try to edit properties. Issue ----- An empty notification appears. Cause ----- The `_getPropertyEditWarning` override in `account_asset` introduced by PR odoo/enterprise#87807 doesn't return the value of the `super` call. This was introduced in a forward port as the logic to display the warning was changed in `web` in saas-18.3, and not requiring a return value in previous versions. Solution -------- Return the `super` call. opw-4980006 Forward-Port-Of: odoo/enterprise#94583
Renamed spreadsheets now keep their chosen name when users create a new spreadsheet and then return through the breadcrumb. This prevents confusion from previously renamed files appearing as untitled.
Original PR description
Steps to reproduce: - Create a spreadsheet - Rename it to "My awesome spreadsheet" - Click on File -> New - Go back to "My awesome spreadsheet" from the breadcrumb => The spreadsheet is untitled. This was caused by the fact that the name was not saved in the local state of the action. Task: 4942117 Forward-Port-Of: odoo/enterprise#93163
This fixes a demo data setup issue when Italian Ri.Ba. payments are installed alongside Stripe expenses. The demo bank partner now handles the extra bank journal created by Stripe expenses, preventing installation errors during demos or testing.
Original PR description
Steps: 1. Install `hr_expense_stripe` and activate demo data 2. Install `l10n_it_riba` 3. `l10n_it_riba` demo data install fails with an error Since [this commit](https://github.com/odoo/enterprise/commit/752ffcbcd0c33e2886aa7bcec469e16d3704d7a9), an additional bank journal is created on every company by `hr_expense_stripe`, and `l10n_it_riba` demo data only expects one. task-none Forward-Port-Of: odoo/enterprise#94437
The mobile template list in Sign now shows the template name as the main information instead of the creation date. This makes it easier for users to identify and choose the right template, while still keeping the creation date available as supporting detail.
Original PR description
### Issue: - In mobile view, the template list was showing the creation date instead of the template name. - This made it hard to know which template you were selecting. --- ### Fix: - Changed the mobile view to show the template name as the main info. - The creation date is still shown, but as extra information. --- ### Impact: - Easier to find the right template on mobile. - Mobile and desktop views now look consistent. --- Task: 5038933 Forward-Port-Of: odoo/enterprise#93072
This fix prevents an error when Shop Floor is set as a user’s default landing page. Users can now log in directly to the Shop Floor view without seeing a crash, improving reliability for manufacturing teams.
Original PR description
**PROBLEM** In debug mode, we can change the default home action of a user (the action he sees when logging in). When the action `action_mrp_display` is set as the home action, there is a traceback…
**PROBLEM** In debug mode, we can change the default home action of a user (the action he sees when logging in). When the action `action_mrp_display` is set as the home action, there is a traceback after logging in. **STEP TO REPRODUCE** 1. Go in debug mode 2. Change the home action of a user to the 'Shop Floor' action (in the user form, in the preference tab). 3. log out, and log in with this user. 4. a js traceback should appear. **CAUSE** In mrp_workcenter_dialog.js, the Shop Floor action uses the `menu` service to get the name of the current app. `setCurrentMenu()` which set the current app in the `menu` service is not called before the `appName` getter is called. https://github.com/odoo/odoo/blob/5c1234085b1c1e227846b24bde55a0392779069b/addons/web/static/src/webclient/menus/menu_service.js#L29-L36 This lead to a traceback because this.menu.getCurrentApp() is `undefined`. **FIX** Workaround if the current app is undefined. We already check what is returned by `getCurrentApp()` where it is used. opw-4926317 Forward-Port-Of: odoo/enterprise#94655 Forward-Port-Of: odoo/enterprise#93043
Postpaid subscriptions now correctly set the next invoice date to the start of the billing period when the plan is configured to align periods, such as the first day of the month. This helps ensure customers are billed on the expected schedule and reduces manual corrections for subscription teams.
Original PR description
Before this commit, when a subscription whose lines were all postpaid and the subscription plan was meant to align periods to first day of the period (e.g. first of the month), there was an issue at confirmation. The next invoice date was not put at the first day of the period in that case. Forward-Port-Of: odoo/enterprise#94746
This fix removes a fragile test dependency in the website rental sales area that was causing automated runbot failures. It helps keep validation pipelines stable so future rental-related updates can be checked and delivered with less disruption.
Original PR description
runbot-error-232620 Forward-Port-Of: odoo/enterprise#94782
This fix updates automated tests so they match a newer rule for flexible employee scheduling. It helps keep planning, field service, project, and rental scheduling checks reliable without changing business features.
Original PR description
Several existing tests in `planning`, `project_enterprise`, `sale_renting_planning` and `industry_fsm` failed because the new constraint enforces that `work_entry_source`=`'calendar'` requires a `resource_calendar_id`. These tests are now adapted to use a different `work_entry_source` ('planning') for fully flexible employees.
task-5068798Accounting documents no longer show attachments from reconciled moves in the standard chatter by mistake. Those related attachments remain visible only in the bank reconciliation widget, keeping regular accounting records cleaner and less confusing.
Original PR description
Problem --------- In odoo/enterprise#85991, attachments from reconciled moves were displayed in the chatter along side the moves' attachments. This change was meant to affect only the bank reco widget. However, its scope reached the standard accounting behavior. STEPS --------- 1. Have 'account' installed 2. Create a move 3. Confirm and create the PDF attachment from the Send&Print 4. Create a credit note from it 5. Confirm the credit note -> The 2 moves are now reconciled and the PDF of the invoice is shown in the chatter of the credit note Objective --------- Only show reconciled moves' attachments in the bank reco chatter. Solution --------- Add a context key that is added when the Bank Reco widget is created and remove it when it is deleted. opw-####### Forward-Port-Of: odoo/enterprise#94661 Forward-Port-Of: odoo/enterprise#94442
Bookkeepers and other authorized users can now generate tax returns without needing permission to edit company records. The check now confirms they can view the company, preventing unnecessary blocks while still protecting company data from users without access.
Original PR description
Before:
When generating tax returns, the code checked for write access with `company.has_access('write')`. This could wrongly block users with Bookkeeper access right, who have the rights to generate returns but not to modify company records.
After:
The access check now uses `company.has_access('read')`, ensuring users with sufficient read access can generate returns while still preventing access for users without company visibility.
Forward-Port-Of: odoo/enterprise#94858
Forward-Port-Of: odoo/enterprise#94740A display issue in subscription payment forms was corrected so the “Secured by …” label can use the intended vertical layout. This helps keep payment method information presented cleanly and consistently for customers.
Original PR description
This PR aims to fix an issue where an xpath attribute was preventing from adding `.flex-column` to the "Secured by …" label under the payment methods. task-5081875 Requires: - https://github.com/odoo/odoo/pull/226453 Forward-Port-Of: odoo/enterprise#94884
This update fixes failing payroll localisation tests by ensuring an attendance-related overtime field is only included where the attendance module is available. This helps keep payroll localisation modules stable and reduces build failures without changing business functionality.
Original PR description
**Issue:**
The test_{xx}_contract_template_loading test fails across all localisations due to incorrect fields being passed.
**Cause:**
The issue occurs because the _get_whitelist_fields_from_template() method includes the overtime_from_attendance field, introduced in this https://github.com/odoo/enterprise/pull/92093. This field comes from the hr_work_entry_attendance module, which is not listed as a dependency in all payroll localisations. As a result, the field cannot be found during test execution.
**Solution:**
Remove the overtime_from_attendance field from all _get_whitelist_fields_from_template overrides in the localisation modules, and instead include this field by overriding the function in the hr_work_entry_attendance module.
build_error-231680
Forward-Port-Of: odoo/enterprise#94004