Wednesday, September 23, 2026
39 changes · master
Resolved issues and error corrections
Fixed an issue where employees could receive repeated chatter messages when they were automatically enrolled in an eLearning course. This keeps employee records cleaner and avoids confusion from duplicated course enrollment notifications.
Original PR description
Steps to reproduce: - connect with a user with an employee record - recreate a new eLearning course - enable debug mode - add "Role / User" to "Auto Enroll Groups" fields => message is duplicated in the employee's chatter `_action_add_members` in `website_slides` is designed to be idempotent (calling it twice is a no-op if the partner has already joined) but the override in `hr_skills_slides` is not. We have many many duplicated messages on odoo.com (see task) task-6508615 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#290032 Forward-Port-Of: odoo/odoo#284483
Fixed an issue where changing a gradient angle in the website editor color picker could be lost after saving. Users can now set and save custom gradient directions reliably, improving visual editing consistency.
Original PR description
Problem: When changing the gradient angle input in the color picker and saving the record, the updated angle is not saved and reverts to the previous value. Cause: `setOnCloseCallback` runs before `onAngleChange` because the angle input fires the `change` event on blur/close. As a result, `onColorGradientChange` is called with the previous angle value, and `onColorGradientPreview` runs afterwards with the new value, causing the applied preview to be reverted later. Solution: Call `onAngleChange` on the `input` event instead of `change` so that state and preview update immediately each time the user types. Steps to reproduce: - Add a gradient to a building block. - Define a value of 180 degrees. - Save - If you open the color picker the value is still 135. task-6522533 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286990 Forward-Port-Of: odoo/odoo#285967
This fix makes upload areas easier to read by moving the upload icon so it no longer overlaps the drop zone content. It also corrects stacked icon alignment, giving users a cleaner and more consistent visual experience with the updated design.
Original PR description
### Adjust `oi-stack-*` icons Since the introduction of the new Material Icons library, we also introduced the `oi-stack-*` classes to allow stacking multiple icons. Prior to this PR, the vertical…
### Adjust `oi-stack-*` icons Since the introduction of the new Material Icons library, we also introduced the `oi-stack-*` classes to allow stacking multiple icons. Prior to this PR, the vertical alignment was incorrect when stacking a 1x icon with a 2x icon. This commit adjusts the vertical alignment to ensure that stacked icons are properly aligned. ### Adapt drop zone layout Prior to this PR, there was a layout issue where the upload icon was positioned on top of the drop zone, making the content difficult to read. This PR adjusts the icon position and fine-tunes the layout to better match the new Frost design. task-6591717 --- Example using ```xml <div class="oi-stack oi-4x"> <i class="oi oi-stack-2x" data-icon="circle"></i> <i class="oi oi-stack-1x" data-icon="star"></i> </div> ``` | Before | After | |--------|--------| | <img width="149" height="141" alt="Screenshot 2026-09-23 at 09 00 00" src="https://github.com/user-attachments/assets/9d343dc5-6f83-4f1e-8548-47cfec00272a" /> | <img width="146" height="142" alt="Screenshot 2026-09-23 at 09 00 25" src="https://github.com/user-attachments/assets/c67fdc1d-d29f-494d-9646-04014bd68d8f" /> | Adapt drop zone layout | Before | After | |--------|--------| | <img width="1668" height="698" alt="Screenshot 2026-09-23 at 08 51 30" src="https://github.com/user-attachments/assets/d92d5aee-9046-4a35-892e-ba11994d8e4b" /> | <img width="1671" height="698" alt="Screenshot 2026-09-23 at 08 51 22" src="https://github.com/user-attachments/assets/532a0625-5f04-4a52-a113-442ad3c58357" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289893
The messaging menu now gives clearer visual feedback when users hover over the three-dot options button. This reduces accidental clicks and makes opening item options more reliable without changing the overall messaging workflow.
Original PR description
Before this commit, the bg hover effect of messaging menu item was present even when mouse-hovering the "..." button of a non-active messaging menu item. This had the drawback of misclicks on "..." happening because the bg hover effect is unchanged and gives the impression that we would click on messaging menu item selection even when mouse-hovering the "..." button. This commit fixes the issue by following a similar logic as with channel member list panel: the bg hover effect is shown when mouse-hovering the item except the "..." button, so that click on "..." is easier and more reliable. Note that since bg hover effect is visually similar as active messaging menu item, this is kept when the messaging menu item is active. Before https://github.com/user-attachments/assets/4488438c-883f-4dd9-9038-5c14c107556d After https://github.com/user-attachments/assets/00341a1d-cf7d-42f1-b175-08f3d3cf758c Forward-Port-Of: odoo/odoo#289927
Reference fields now make the record selection easier to notice when a model has been chosen. This helps users avoid saving incomplete links that disappear after refreshing the page.
Original PR description
Steps to reproduce: 1. Install Sign. 2. Open the form view of a document. 3. Select a model in the "Link to" (Reference) field, but leave the record empty. 4. Save and refresh the page. Issue: -…
Steps to reproduce:
1. Install Sign.
2. Open the form view of a document.
3. Select a model in the "Link to" (Reference) field, but leave the record empty.
4. Save and refresh the page.
Issue:
- After refreshing, the selected model is cleared because the reference value is invalid.
Cause:
- A reference field is only valid when it contains both a model and a record ID. However, the record selector has no placeholder, making it easy to overlook and save an incomplete value.
Solution:
- Add a default placeholder to the record selector of reference fields to make it more visible.
<table>
<tr>
<th>Before</th>
</tr>
<tr>
<td>
<img src="https://github.com/user-attachments/assets/3ba34b77-f901-4d3e-9768-5acaf2e673b8" alt="Before" width="100%">
</td>
</tr>
<tr>
<th>After</th>
</tr>
<tr>
<td>
<img src="https://github.com/user-attachments/assets/1fe54b89-221f-4d28-bd2b-0a3c706d5746" alt="After" width="100%">
</td>
</tr>
</table>
opw-6426339
Forward-Port-Of: odoo/odoo#280266This update prevents a crash when opening certain image attachments linked to products or other attachments. It improves reliability for users managing product images and attachments, and adds test coverage to prevent the issue from returning.
Original PR description
### Steps to Reproduce: 1. Go to Sales > Products and select a product 2. Upload an image for the product 3. Go to Settings > Technical > Attachments 4. Click on one of the image attachments 5.…
### Steps to Reproduce: 1. Go to Sales > Products and select a product 2. Upload an image for the product 3. Go to Settings > Technical > Attachments 4. Click on one of the image attachments 5. Observe the Client Error: "Uncaught Promise > Invalid props for component 'Many2One': 'domain' is not a function" ### Issue: In `attachment_patch.js`, the domain for the `Many2OneReferenceField` is overridden when an attachment is linked to another attachment. The patch calculates the domain and incorrectly assigns a static Array (using `.toList()`) to `props.domain`. In Odoo 19, the `Many2One` component enforces strict prop validation (caught when Owl's debug mode is enabled during testing), causing a crash because it expects the domain prop to be a function. ### Solution: We can just wrap the resulting domain Array in an arrow function so that it evaluates dynamically when the `Many2One` component mounts. Also added a unit test to explicitly cover this patched scenario. The test manually applies a local patch to `Many2OneReferenceField.prototype` to accurately replicate the environment and verify the fix. opw-6563954 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289772 Forward-Port-Of: odoo/odoo#287951
This update fixes an automated test for the Point of Sale self-order feature after a recent platform change. It helps ensure future changes to this area are checked correctly and reduces the risk of unnoticed test failures.
Original PR description
Since [1], this.props no longer automatically exists on components. As a consequence, a pos_self_order test didn't pass anymore. For an unknown reason, this addon is excluded from regular builds, so its tests aren't run, hence the fact that [1] could be merged with this failing test unnoticed. Hopefully, nightly builds spotted it. [1] https://github.com/odoo/odoo/pull/289550 Runbot-947518 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#290143
The Mail interface now uses even spacing in action panel headers, keeping header content centered and aligned with the panel body. Meeting views also apply the same padding consistently across all action panels, creating a cleaner and more consistent user experience.
Original PR description
The action panel header had uneven start/end padding, so its content sat off-center and did not line up with the panel body. In the meeting view, only the chat panel header got the meeting padding. This commit uses symmetric padding for the header and applies the meeting padding to every action panel of the meeting view. <img width="1704" height="720" alt="meeting-action-panel-header-before-after" src="https://github.com/user-attachments/assets/e483954c-137d-42b1-9fb8-d2eed3e04f80" /> Forward-Port-Of: odoo/odoo#290103
This fixes an issue in the HTML editor where formatting or other attributes could be lost when pasted content was converted from one block type to another. It helps preserve the intended appearance and behavior of edited content.
Original PR description
The PR [1] forgot to copy the attributes from the DIV into the new P. It is not possible to use `setTagName` here because the function is in DomPlugin which depends on BaseContainerPlugin. See [2] for more information. [1]: https://github.com/odoo/odoo/pull/289891 [2]: https://github.com/odoo/odoo/pull/289891#discussion_r4075860275 Forward-Port-Of: odoo/odoo#290085
The mail call settings panel has been refreshed to better match the newer Frost visual design. Setting groups and device selectors now look more polished and consistent, while the download logs action is presented as a simpler link.
Original PR description
The call settings panel still used plain outlined boxes. This commit fills the setting groups and device selectors as raised surfaces, drops the nested borders and the stray push-to-talk separator, and turns the full-width download logs button into a link. <img width="1360" height="510" alt="20 0-discuss-ui-fixes-aku-3" src="https://github.com/user-attachments/assets/4fe070d1-ac36-4e10-b74e-900ab3e9a704" /> Forward-Port-Of: odoo/odoo#290100
The website project form processing has been cleaned up and reorganized to support more reliable handling and future updates. This is a minor internal fix that should help maintain the feature without changing the user experience.
Original PR description
Clean up and move some of the form processing logic for future updates opw-6560036 Forward-Port-Of: odoo/odoo#287697
This update fixes an internal test for messaging channel invitations so it no longer conflicts with sample demo users that share the same name. It helps keep automated quality checks reliable without changing behavior for end users.
Original PR description
Before this commit, the channel invite search test fails on a database with demo data: AssertionError: Lists differ: [18, 405] != [405] This happens because the test searches "Joel" while the demo data holds its own portal user "Joel Willis". The second search asks for portal users, so the demo one comes back as well. This commit fixes the issue by searching a name that only the test user carries. https://runbot.odoo.com/odoo/error/947235 Forward-Port-Of: odoo/odoo#289982
Duplicated taxes now keep the correct domestic tax status instead of being silently marked as non-domestic. This helps prevent configuration errors in accounting when users copy existing tax records.
Original PR description
_compute_is_domestic checks whether the company's domestic_fiscal_position_id is part of the tax's fiscal_position_ids. Because this field is both stored and precompute=True, duplicating a tax recomputes it on a virtual new() record before insert. On that virtual record, fiscal_position_ids is resolved through NewId pseudo-ids while company_id (a plain Many2one) keeps its real id, so the containment check always failed, silently turning is_domestic into False on any duplicate. Use fiscal_position_ids._origin to compare against the real underlying records instead. opw-6575113 Forward-Port-Of: odoo/odoo#289896 Forward-Port-Of: odoo/odoo#289246
Project task counters now ignore subtasks that belong to task templates, matching what users see as real tasks in the interface. This prevents inflated task totals and gives project teams more accurate open, closed, and overall task counts.
Original PR description
Before this commit, the task_count and closed_task_count takes into account the subtask inside task template, however, those subtasks are not considered as a basic task in the UI, there are also considered as a template.
This commit adds `('has_template_ancestor', '=', False)` condition to make sure those subtasks are no longer taken into account. The condition inside the compute of `open_task_count` has also been reviewed to have the same conditions in the 3 fields.
task-6483156
Forward-Port-Of: odoo/odoo#286910This update fixes an internal website test that was still using an outdated footer language selector reference. It helps keep automated checks reliable after recent website changes, reducing the risk of false failures during development.
Original PR description
Steps to reproduce: - Run `test_website_standalone`. => `test_01_cow_views_inherit_on_module_update` fails. Before this commit, the test changed the old footer selector. Since [1], the language selector uses a new hook. The test thus created an invalid view. After this commit, the test changes the new hook to match the temporary parent. [1]: https://github.com/odoo/odoo/commit/39d871397f6969a1c87226bed0d016edf4995e5c runbot-947383 Forward-Port-Of: odoo/odoo#289828
This update prevents crashes in several Odoo screens by making component configuration requirements explicit after an internal framework cleanup. Users benefit from more reliable dialogs, messaging, mailing, website, spreadsheet, and point-of-sale flows without any expected workflow changes.
Original PR description
Forward-Port-Of: odoo/odoo#289550
Clicking inside a styled link in the HTML editor now places the cursor in the correct position. This makes editing linked text more reliable and avoids confusing cursor behavior for users preparing content.
Original PR description
Since #284197 a pointerDown event inside a formated link was not setting the selection in the correct position. We fixed the issue by getting the clicked element closest link to ensure we are effectively outside a link. task-6592373 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289945
This fixes a display issue in the HTML editor where turning large header text into a list could make bullets appear too far to the left. Lists now adjust their spacing automatically, improving document formatting and reducing visual glitches for users editing rich text.
Original PR description
Problem: Creating a list on a header block with large font size content causes the list marker/bullet to overflow to the left. Cause: `ListPlugin.blockToList()` wrapped block elements into a list without invoking `this.adjustListPadding(list)`, leaving the list padding unadjusted for larger font sizes. Solution: Call `this.adjustListPadding(list)` in `blockToList` so that proper inline padding is set based on the list item content font size. Steps to reproduce: - Create a header block (e.g. Header 4). - Change the font size of the header content to be bigger. - Apply a list on the content. => Observe that the list marker overflows to the left. opw-6542903 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286975
Selecting a city in an employee’s private address now fills in the related address details directly on the form, without waiting for the record to be saved. This keeps the employee address entry experience consistent and reduces confusion for HR users.
Original PR description
Issue: When you select a city in the employee's private address field, the other address fields should be populated accordingly. Even though once you save, the changes are recorded, they don't appear in real-time in the form. This is because the onchange related to the address city field was only in `hr.version`, but not `hr.employee`, so the automatic population upon the change of the city wasn't visible in the employee form view. Fix: Add _onchange_private_city_id() in hr.employee under hr_address_extended module which calls the same-name onchange in the linked version. task-6584206 Forward-Port-Of: odoo/odoo#289837
The HTML editor now ignores blank metadata when showing link previews. This ensures users see a useful fallback, such as the URL, instead of an empty clickable preview area.
Original PR description
Problem: When a link's metadata contains whitespace-only strings for `og_title`, `og_description`, or `og_image` (e.g. `og_title: " "`), the link popover displays an empty clickable preview area.…
Problem: When a link's metadata contains whitespace-only strings for `og_title`, `og_description`, or `og_image` (e.g. `og_title: " "`), the link popover displays an empty clickable preview area. Cause: `LinkPopover` assigned raw metadata values directly. Non-empty whitespace strings evaluate to truthy values in JavaScript (`" "` is truthy), preventing fallback to the default URL or empty string. Solution: Trim the metadata values (`og_title`, `og_description`, `og_image`) when populating state so that whitespace-only values evaluate to empty strings and trigger appropriate fallbacks. Steps to reproduce: - Open HTML editor. - Add a link with URL `https://netorg4182089.sharepoint.com/:v:/s/projects/IQD72ajP3WOBT4jcAu_1qLfIAamL9lvrq4ls1Bs9XCyXJvw?e=vQ9wH3`. - Open the link popover. => Observe that the popover title falls back to the URL instead of showing an empty clickable space. opw-6564118 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288188
The calendar view now updates properly when users resize their browser or switch to a smaller screen. This prevents the desktop sidebar from staying open on mobile, making the calendar easier to use on phones and narrow windows.
Original PR description
See commits Forward-Port-Of: odoo/odoo#289677 Forward-Port-Of: odoo/odoo#288329
Pasted content from one Odoo editor to another now adapts better when the destination editor uses different paragraph formatting rules. This prevents layout and editing issues in areas such as email marketing and website content when content is copied from places like project tasks.
Original PR description
When pasting from an editor whose config allows DIV as paragraphs, like project task, into an editor whose config does not allow it, like mass_mailing or website, those DIVs where inserted as is and did not behave correctly since the editor in which they were pasted did not expect them to exist. This commit checks the incoming DIVs in the pasted content and converts them to P if they would otherwise be candidate for base containers. In theory, Ps should also be converted to DIV if the config allows DIV and not P, but there is no such use case in practice. Forward-Port-Of: odoo/odoo#289891
The AI website builder now avoids starting the same recovery process more than once when the connection service comes online. This prevents random duplicate recovery attempts, making result handling more reliable for users generating website content.
Original PR description
When the bus connects, it would trigger the recoverScraperResults but we may already have have recovery scheduled. This happens randomly, depending on when the bus connects. This commit adds a check on the bus connect call to first check that a recovery is not already happening before calling the recovery. Forward-Port-Of: odoo/enterprise#131732
Financial reports no longer run an extra currency translation calculation when all consolidated companies use the same currency. This avoids needless processing while keeping multi-currency consolidation behavior unchanged.
Original PR description
The condition used to be options['currency_table']['type'] != 'cta'. In monocurrency, the 'currency_table' option key contained 'monocurrency', so the CTA computation always returned an empty result. However, now that the option key has been removed and we use self.currency_translation, some additional check needs to be added in order to avoid uselessly computing CTA when not consolidating companies in different currencies. Forward-Port-Of: odoo/enterprise#132220
The Documents app now keeps the spreadsheet template search bar visible even when no templates match a search. It also prevents a crash when users choose to add a custom filter, making template selection smoother and more dependable.
Original PR description
- templates searchbar disappear when the search has no match - Clicking "Add a custom filter' in the searchbar crashes Task-6526322 Forward-Port-Of: odoo/enterprise#132689 Forward-Port-Of: odoo/enterprise#130096
This fix restores the missing space between the top banner and barcode Kanban cards. It improves readability and keeps the Barcode app layout consistent for warehouse users.
Original PR description
https://github.com/odoo/enterprise/commit/11cd136b2d222fd53dfeb07a611e14d14918009f introduced a margin to prevent Kanban cards from being too close to the top banner. Commit…
https://github.com/odoo/enterprise/commit/11cd136b2d222fd53dfeb07a611e14d14918009f introduced a margin to prevent Kanban cards from being too close to the top banner. Commit https://github.com/odoo/enterprise/commit/c33e82717c4862a32f1feadd9d333f7237c59103 unintentionally removed this margin. This commit restores the missing margin in BarcodeView. | Before | After | |--------|--------| | <img width="1277" height="465" alt="Screenshot 2026-09-22 at 16 25 13" src="https://github.com/user-attachments/assets/9917112b-d503-432f-95f0-aec14033c10d" /> | <img width="1279" height="460" alt="Screenshot 2026-09-22 at 16 24 42" src="https://github.com/user-attachments/assets/80de37dd-500f-45f1-9720-118a6d991836" /> | | <img width="1281" height="610" alt="Screenshot 2026-09-22 at 16 25 15" src="https://github.com/user-attachments/assets/e0c67c37-367b-4bcb-a451-6edbb91e4fd2" /> | <img width="1279" height="559" alt="Screenshot 2026-09-22 at 16 24 51" src="https://github.com/user-attachments/assets/dc550a73-0c33-404c-9d18-8d06d3d2d8f8" /> | Forward-Port-Of: odoo/enterprise#132612
The Belgian payroll employee form no longer shows the same worker status information twice. This reduces confusion for HR users and makes employee records easier to review without changing payroll functionality.
Original PR description
Remove duplicate fields in `hr.employee` form view in belgian payroll module which are `l10n_be_worker_status` and `available_l10n_be_worker_status`. task-6565809 Forward-Port-Of: odoo/enterprise#132586
Non-dashboard spreadsheets, such as documents, now use the intended page background instead of inheriting the navigation bar color. This fixes a visual inconsistency and makes spreadsheet documents easier and more pleasant to view.
Original PR description
The documents (and other non-dashboard spreadsheets) should not have the navbar color as their background color. Forward-Port-Of: odoo/enterprise#132613
This fix makes field service planning tests use a consistent employee time zone. It prevents demo data settings from changing expected working hours, reducing false test failures and improving release confidence.
Original PR description
Employees created in TestPlanningFieldServiceCommon had no explicit tz, so they inherited the acting user's timezone. With --with-demo that user's tz is Europe/Brussels, shifting the resource calendar's work hours by 1h in January and making test_planning_slot_allocated_hours_on_multiple_resources compute 7 allocated hours instead of the expected 8. runbot-946587 Forward-Port-Of: odoo/enterprise#131570
The manufacturing work order preparation action no longer updates the quantity being produced automatically. This prevents unintended quantity changes when preparing manufacturing orders, helping teams keep production quantities accurate.
Original PR description
The prepare MO action sets the producing_qty what shouldn't be the case. Task-id: 6292360
This fixes how PLM handles files uploaded during a product revision. Newly uploaded files are no longer incorrectly linked back and forth with copied files, so users can still see the expected “New” indicator and attachment history stays clearer.
Original PR description
When a revision is applied in PLM and new files were uploaded, `action_apply` will make a copy of the attachments for the `product.template` then set the origin_attachment_id of the attachments on `mrp.eco` & `product.template` to be the attachment of the other model. This creates a circular relation where an attachment is the origin of another and also originates the same other attachment. While there's no breaking issue, this still doesn't make sense. And this also hides the "New" banner that appears on the uploaded files of a revision when we want to see it (see odoo/enterprise#83278). So when uploading a file for a new revision, there should be no origin_attachment_id since it will be the first appearance of the file. Also removing `test_eco_attachments` because `test_eco_apply_document_without_origin` does the same job. Forward-Port-Of: odoo/enterprise#132583
Users who join a Discuss channel themselves will no longer receive a misleading push notification saying they were invited. This prevents confusion and keeps invitation alerts reserved for cases where someone is actually added by another user.
Original PR description
Steps to reproduce: -------------------------------------- 1. Install the mail module 2. Allow push notification permissions from the site settings 3. Open Discuss > Go to Channels 4. Click Join on a…
Steps to reproduce: -------------------------------------- 1. Install the mail module 2. Allow push notification permissions from the site settings 3. Open Discuss > Go to Channels 4. Click Join on a channel where the current user is not a member Observation: -------------------------------------- The current user receives a push notification saying: 'User has invited you to this channel.' This is incorrect; the user joined voluntarily. Nobody invited them Issue: -------------------------------------- The commit https://github.com/odoo/odoo/pull/255052/changes/cddd9491c28e9c949efb24d2330c58e35144af12 Adds a push notification when a user is invited to a channel `_add_members` creates the new member and sends a push notification to all newly added members' partner IDs without checking whether a member joined by themselves or was invited by someone else. https://github.com/odoo/odoo/blob/e9cfa0fd65d234bcff8130a2c790cd80ee443595/addons/mail/models/discuss/discuss_channel.py#L830-L853 Interestingly, the bus notification code just a few lines above already makes this distinction using `member.is_self` but the web push block doesn't apply the same filter. https://github.com/odoo/odoo/blob/e9cfa0fd65d234bcff8130a2c790cd80ee443595/addons/mail/models/discuss/discuss_channel.py#L810-L811 Solution: -------------------------------------- Filter out self-joined members from the web push notification recipients. The push notification should only target members who were invited. OPW-6527691 Forward-Port-Of: odoo/odoo#289796 Forward-Port-Of: odoo/odoo#286421
The Manufacturing app now uses the same status tag colors across related manufacturing screens. This makes production order statuses easier to recognize and reduces visual inconsistency for users.
Original PR description
Update state tag color to match other mrp models. Task-6574839 Forward-Port-Of: odoo/odoo#289860
This fix prevents an error that could occur when sales order prices are forcibly recalculated. It helps ensure sales teams can update order pricing without interruptions caused by a missing internal price check.
Original PR description
When force price recomputation is done, the manual price check was skipped due to short-circuit evaluation, leaving `manual_price` undefined and causing an `UnboundLocalError`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289901
This fixes a small display issue in Odoo Studio where an icon style was missing in the selection field dialog. Users should now see the intended icon presentation, improving clarity when editing app menus or fields.
Original PR description
task-6592802 Forward-Port-Of: odoo/enterprise#132610
A date handling issue in the rental planning test was corrected so it uses the proper working timezone. This prevents false test failures during early morning hours and helps keep release validation stable.
Original PR description
**Issue:** `test_payment_renting_product_available` test is failing when executed between 0:00 AM and 2:00 AM in Brussels timezone (UTC+2): ``` AssertionError: datetime.datetime(2026, 6, 22, 16, 0) != FakeDatetime(2026, 6, 21, 16, 0) : The planning slot should begin at the same time as the picking time. ``` In the database the datetime is stored in UTC, which is the previous day for the example above. In `test_payment_renting_product_available` test, the datetime is passed to `datetime.combine()` function that naively uses the date part, which leads to a one-day delta. The datetime should be converted to the working timezone before being passed to `datetime.combine()`. runbot-940435 Forward-Port-Of: odoo/enterprise#131944
This fixes a test setup issue where some assets were only prepared when first needed, causing slow first runs and occasional failures. The change warms up those assets earlier so onboarding tour tests run more consistently.
Original PR description
mass_mailing.assets_inside_builder_iframe and web_studio.studio_assets are only loaded dynamically, so _pregenerate_assets_bundles misses them and the first tour to need them pays a costly cold compile.
This fixes an issue in the website editor where drop areas around the Animated Cover block could overlap, making it harder to add new content nearby. Editors can now place snippets above or below Animated Cover sections more reliably.
Original PR description
Steps to reproduce: - Go to a website page in edit mode. - Drag and drop an "Animated Cover" snippet onto the page. - Try to drag and drop another snippet below it. => The two dropzones overlap. Before this commit, the last dropzone inside the `Animated Cover` snippet overlapped the dropzone used to add a new section below it. After this commit, the first and last dropzones inside the `Animated Cover` snippet are shifted away from adjacent dropzones. task-6588702 Forward-Port-Of: odoo/odoo#289629
Fixes an error that occurred when a user removed all notification options for a follower in the Mail chatter. This lets teams update follower subscriptions without interruption or needing technical support.
Original PR description
Before this commit, when unselecting all message subtypes for another follower would cause a traceback. Steps to reproduce: 1. Add Marc Demo as follower 2 Edit their subscription unselecting all sutypes 3. Click "Apply" -> traceback This happens since [1] moved the `removeRecipient()` call outside of the "some subtypes selected" branch. This causes `thread` inside `removeRecipient` to be undefined when all subtypes are unselected, since in that case we call `follower.remove()`. This commit fixes the issue by checking for the follower existance before updating the recipiency. [1] https://github.com/odoo/odoo/pull/276170 task-6545366 Forward-Port-Of: odoo/odoo#289959