Monday, September 28, 2026
45 changes · master
Enhancements to existing features
This update improves Odoo's internal upgrade tooling so more service-related code is migrated correctly during the Owl 3 transition. It helps reduce manual cleanup and lowers the risk of migration issues for future upgrades.
Original PR description
The owl3-migration is missing some of the service's mapping used to migrate the useService call site into usePlugin. This commits aims at fixing this and fixing the typos.
Payroll users will now see a chatter message whenever the estimated end date of a payslip adjustment is changed. This improves traceability by making important adjustment updates visible in the record history.
Original PR description
Add message in chatter whenever the estimated end date of a payslip adjustment is changed. Task-6588118
The Belgian payroll module no longer shows a warning about missing ONSS identification because that warning is no longer relevant. This reduces unnecessary alerts for payroll users and helps them focus on items that still require action.
Original PR description
- Missing ONSS Identificantion warning does not make sense anymore task-6569900
This update makes it easier for developers to build domain filters by allowing model records to be used directly in equality checks instead of manually extracting their IDs. It reduces small implementation friction while keeping validation in place to prevent mismatched model usage.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The accounting settings text for firms has been reworded to make it clearer for users. This is a small wording improvement that helps businesses better understand the relevant setting without changing functionality.
Original PR description
changing the wording for the account firm settings text. task-6578290
The Belgian payroll setup now combines two spouse fiscal status choices that had the same tax effect into one clearer option. This reduces confusion for HR users while keeping withholding tax calculations unchanged.
Original PR description
The "High Income" and "High Pension" options of the Spouse Fiscal Status field have the exact same impact on an employee's withholding taxes. Keeping them separate creates unnecessary clutter in the interface. This change merges both options into a single "With High Income or Pension" option. task-6570466
The public holiday loading wizard now warns users when holidays for the selected year already exist and will be excluded from the list being imported. This helps HR users understand why some holidays are not shown and prevents confusion or duplicate entries.
Original PR description
Notify users, while loading the public holiday from wizard, when some holidays are already present in the system for the given year and will be removed from the shown list. Task: 6559614 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Support teams can now review report snapshots directly from the advanced report configuration view available in debug mode. This helps them investigate customer issues faster by checking whether reported accounting report problems are linked to saved snapshots.
Original PR description
The form view of account.report is only accessible in debug mode, so we can put more advanced debugging/configuration things in it. This way, it'll be easier for support to investigate and check whether the bug reported in a ticket is connected to the snapshots. Forward-Port-Of: odoo/enterprise#132744
The Belgian payroll process no longer shows a toast notification when ONSS rates are imported by the scheduled background job. This reduces unnecessary alerts for users while keeping the import process running as expected.
Original PR description
task-6586967 Forward-Port-Of: odoo/enterprise#132339
The messaging panel has been reorganized behind the scenes to make it easier to maintain and extend across Odoo apps. This should help keep chatter-related features more consistent in areas such as leave requests, projects, portals, ratings, and eLearning without introducing major visible changes for users.
Original PR description
Replace the elements stored inside `env.inChatter` by a dedicated plugin. This also convert the proxy to signals PR enterprise: https://github.com/odoo/enterprise/pull/126791
This update adapts WhatsApp and related document, recruitment, and knowledge features to a newer shared chatter framework. It helps keep message and collaboration tools consistent across apps, reducing maintenance risk while preserving existing user workflows.
Original PR description
PR community: https://github.com/odoo/odoo/pull/280602
Messaging and live chat internals were updated to use a more consistent way of understanding where each interface element appears. This should make future improvements easier and reduce the risk of inconsistent behavior, with little direct change for end users.
Original PR description
PR enterprise: https://github.com/odoo/enterprise/pull/126501
This update adapts the Knowledge app's comment handling to recent navigation improvements in the related community code. It helps keep comments working consistently as users browse and manage Knowledge articles.
Original PR description
PR community: https://github.com/odoo/odoo/pull/280035
Resolved issues and error corrections
When HR users select a private city for an employee address, the related state and ZIP code now appear immediately instead of only after saving. This keeps address entry consistent and reduces confusion during employee record updates.
Original PR description
Picking a city didn't fill in state and zip until you saved. Added an onchange so it happens live, same as we already do for state/country. Task 6482304
Features or functions removed from Odoo
Odoo removed old website styling rules that were no longer used and could cause display issues on mobile pages. This helps prevent elements such as maps from being hidden on smaller screens, with minimal expected risk.
Original PR description
The lines removed in this commit were marked as "Probably outdated" 8 years ago ([in 2018]). The table classes (`.table_desc` and `.table_heading`) are not used anywhere, and the generic rule on mobile does not seem needed anymore (in fact it generates design bugs, which is why we found these outdated rules because the map on `s_hours_and_place` snippet was hidden on mobile since [1]). The risk is low enough that we can delete those rules now. [in 2018]: https://github.com/odoo/odoo/commit/4dce6cc98b2b95a00249ac29245305e08f288e6c [1]: https://github.com/odoo/odoo/commit/7ff08d3d8fa9527b3e3d662d4f2a51feec5a1790
Code cleanup and technical improvements
This update renames an internal mail interface component to better reflect its purpose as a popover rather than a dropdown. It does not change business functionality, but it helps keep the code clearer and easier to maintain for future mail and discuss improvements.
The Belgian payroll localization now installs the guaranteed wage interrupted day illness work entry with the correct absence request settings. This helps payroll teams apply the right configuration from the start and reduces manual corrections after installation.
Original PR description
When installing the localization for Belgium payroll, out of all of the 'hr.work.entry.type' pre-installed for the country, there was a wrong config initialization for the 'Guaranted wage interrupted day illness' one. On the XML data, the proper modifications to the 'time_off_selectable', 'requires_allocation' and 'request_unit' were updated to resemble the right case. task-6580292
This fix improves how employee work contact information is calculated so the right access rules are respected. It helps prevent unexpected behavior when HR records are updated or viewed by different users.
Original PR description
Ensure correct access to avoid unexpected behavior opw-6560194 Forward-Port-Of: odoo/odoo#289768 Forward-Port-Of: odoo/odoo#288063
This update removes an unusual default value from an internal test method parameter to align with coding best practices. It helps prevent confusing behavior in developer tooling and keeps the codebase more reliable, with no expected impact on regular users.
Original PR description
[RUF077](https://docs.astral.sh/ruff/rules/method-receiver-default/#method-receiver-default-ruf077) specifies that method receiver parameters, such as `self` and `cls`, should not have default values. The reasoning is because these parameters are usually bound by the method binding protocol, so a default value on a receiver parameter is almost certainly a mistake and can lead to confusing behavior or runtime errors. This method seems to not reference self, and this should not cause errors, but it is best practice to not do this. runbot-[947144](https://runbot.odoo.com/odoo/error/947144) Forward-Port-Of: odoo/odoo#290616
This update removes unnecessary logic in the accounting reports download flow. The change makes the code clearer and reduces the chance of confusion in future maintenance, with no expected change for users.
Original PR description
`!something` is never nullish, so `?? true` is dead code. Probably the intention was `if (!(data.no_closing_after_download ?? true))`, but reviewer has the final say and I can change it. Forward-Port-Of: odoo/enterprise#131774
The mobile navigation menu now shows a pointer cursor when users hover over menu items with a mouse or trackpad. This makes the interface feel consistent and clearly indicates that the items can be clicked.
Original PR description
## Description of the issue/feature this PR addresses: On tablet, when a pointing device is used, the cursor on menu items is text ## Current behavior before PR: The cursor shows as "text" when hovering menuitems in the mobile navbar. ## Desired behavior after PR is merged: The cursor shows as "pointer" when hovering menuitems in the mobile navbar.
Required statusbar fields now display the same red border and background warning as other required fields when a user tries to save without choosing a value. This makes validation errors easier to notice and helps users correct forms before saving.
Original PR description
**task:** 6573463 **Description of the issue/feature this PR addresses:** The problem occurs when a field, displayed with the statusbar widget, is required, but the user wants to save without selecting a value. The red colors displayed on the normal field are not applied to the statusbar. This commit adds the required css style to apply the invalid colors. The modification is applied to all media breakpoints. **Current behavior before PR:** The red color is not applied on the border and background of the statusbar when it is invalid. **Desired behavior after PR is merged:** The red color is applied on the border and background of the statusbar when it is invalid. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes issues in automated checks for purchasing and units of measure so they work consistently in different run modes and fresh databases. It helps ensure the purchase catalog correctly shows unit of measure information when that feature is enabled.
Original PR description
> ### [FIX] purchase: tour trigger > This commit replaces a trigger which used the button URL because this button's URL can differ if the tour is run in debug mode (eg.: `/odoo/purchase?debug=assets`…
> ### [FIX] purchase: tour trigger > This commit replaces a trigger which used the button URL because this button's URL can differ if the tour is run in debug mode (eg.: `/odoo/purchase?debug=assets` instead of `/odoo/purchase`). > ### [FIX] uom: correct group > This commit fixes `_enable_uom` and `_disable_uom` `UomCommon` class methods to correctly enable/disable the UoM feature. > > Before that, the user has CRUD accesses to UoM but the feature wasn't enabled as expected, which means `_enable_uom` wasn't enough to display UoM fields in view when this field use the group `uom.group_uom` to be display. > > This issue was spotted while working on the `purchase` test/tour `test_catalog_vendor_uom`. When launch locally on a DB without demo data and only with `purchase` installed, the units of measure weren't visible during the tour, and if the tour is paused and we go in the settings, we can see the UoM setting is unticked. Forward-Port-Of: odoo/odoo#289345 Forward-Port-Of: odoo/odoo#283451
This fixes an error that could appear when refusing an applicant while sending a refusal email. Recruiters can now complete the refusal process normally, even after the applicant record is archived.
Original PR description
Steps to reproduce: - Open the Recruitment app and select an applicant. - Make sure "Send Email" is active. - Click on "Refuse". - A traceback is raised (ValueError: Expected singleton). Cause: In…
Steps to reproduce: - Open the Recruitment app and select an applicant. - Make sure "Send Email" is active. - Click on "Refuse". - A traceback is raised (ValueError: Expected singleton). Cause: In `action_refuse_reason_apply`, the applicant is archived (`active = False`) before the refusal email is actually sent. When the code proceeds to send the email via `_prepare_send_refusal_mails` in the `applicant.refuse.single` wizard, it accesses the computed `applicant_id` field. Because the applicant is now archived and the compute method reads `self.applicant_ids` without `active_test=False` in the context, it returns an empty recordset. Calling `message_post` on this empty recordset triggers the error. Fix: Pass `active_test=False` in the context when evaluating `self.applicant_ids` inside `_compute_applicant_id` so the wizard can still locate the newly archived applicant. task-6574551 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
This fixes an issue where edited sales order line labels could be lost before the order was saved. Sales teams can now trust that custom product descriptions entered on a quote or order remain in place.
Original PR description
In c5037bb, we introduced the `label` field to display the combination of the product name and description. It is a computed field whose inverse sets `name` based on whether a product is selected on the SOL. In some cases, another onchange can be triggered before the inverse method is called, causing the `label` value to be recomputed and reset. This can happen, for example, when a sale order onchange is triggered before the record is saved. Call `_inverse_label` from the `label` onchange so that changes to `label` immediately update `name` and are not lost by subsequent onchange calls. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#290276
This update standardizes the appearance of several popover panels in Odoo Mail, including avatar cards, recipients, mark-as-done, and activity assignment popovers. Users get a more consistent and polished interface across related communication actions, including in dark mode.
Original PR description
This PR centralize the popover style and apply it to avatar_card, recipients, markasdone and activity assign popover. ## Before: <img width="504" height="242" alt="image" src="https://github.com/user-attachments/assets/a20e20c7-3d1c-4b5e-b9e1-313e71f956c7" /> <img width="623" height="466" alt="image" src="https://github.com/user-attachments/assets/516b08d8-2e4a-4a11-a807-84bbd803bd30" /> ## After: <img width="545" height="202" alt="image" src="https://github.com/user-attachments/assets/2caecb5d-f751-4c29-9d15-998ba0d9fd59" /> <img width="625" height="439" alt="image" src="https://github.com/user-attachments/assets/404de351-e0e1-48be-863f-2e675dd57275" /> Forward-Port-Of: odoo/odoo#290243
Website theme setup now shares whether the selected color palette is dark, allowing theme-specific setup steps to choose page options that match the user's palette. This helps newly configured websites look more consistent with the selected visual style.
Original PR description
Before this commit, a theme post-copy hook could not know whether the palette selected in the configurator was dark. Theme-specific page options could therefore not adapt to the selected palette. After this commit, the configurator passes the palette mode in the theme setup context so theme-specific hooks can use it. Forward-Port-Of: odoo/odoo#290161
Website editing controls and the shop product comparison bar now handle longer translated labels more reliably. This prevents layout issues and missing styling for users working in languages such as German, improving consistency across localized websites.
Original PR description
Steps to reproduce: - Set the user language to German. - Open a color picker with the `Theme` tab in the website editor. - Check the color presets and the reset button. - Open the product comparison bar on the shop page. => Long labels do not fit and some styles are missing. Before this commit, long labels did not fit in the color preset picker. Some CSS selectors also relied on English `title` values, so their styles were not applied in other languages. After this commit, the preset picker adapts to long labels and the CSS selectors use dedicated classes that work in every language. task-6259086 Forward-Port-Of: odoo/odoo#289308 Forward-Port-Of: odoo/odoo#286426
This fixes the loyalty program setup so Buy X Get Y promotions no longer show or allow minimum purchase settings. It prevents users from configuring an option that should not apply to this promotion type, reducing confusion and setup errors.
Original PR description
I think the point was to hide the entire `Minimum Purchase` section when the program type is `buy_x_get_y`, but only the label is hidden. This commit will also hide the div under the label, so no minimum purchase can be set on `buy_x_get_y` programs --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288281
Fixed a visual issue in Sales quotations where the optional products table could appear lighter than its surrounding area in dark mode. This keeps the quotation modal looking consistent and easier to read for users who prefer dark mode.
Original PR description
**Steps to reproduce:** - Set preferences to dark mode - Create a quotation and add a product with optional products (e.g customizable desk) -> Background of optional products is lighter than the…
**Steps to reproduce:** - Set preferences to dark mode - Create a quotation and add a product with optional products (e.g customizable desk) -> Background of optional products is lighter than the surrounding div **Behavior:** The `div` showcasing optional products is set to be a bit darker to add contrast in the modal. In light mode, table's background is transparent, which allows it to adapt to a darker container. However, this is not the case in dark mode, which causes a mismatch between table and div backgrounds. By default `$table-bg` follows `$body-bg`: https://github.com/odoo/odoo/blob/3442814d57cd9420d7dc6d022d15cd5d1b3def74/addons/web/static/lib/bootstrap/scss/_variables.scss#L738-L740 And is later set to transparent here: https://github.com/odoo/odoo/blob/3442814d57cd9420d7dc6d022d15cd5d1b3def74/addons/web/static/src/scss/bootstrap_overridden_frontend.scss#L74-L75 However when darkmode is enabled, `$body-bg` is re-assigned, which forces `$table-bg` back to the default dark color, bypassing the transparent override. https://github.com/odoo/odoo/blob/3442814d57cd9420d7dc6d022d15cd5d1b3def74/addons/web/static/lib/bootstrap/scss/_root.scss#L132-L139 --- This commit ensures that `table-bg` is explicitly set to transparent for tables displaying optional products. opw-6569713 Forward-Port-Of: odoo/odoo#288127
The website setup flow now keeps future-step fields unavailable until users reach the relevant step. This prevents hidden fields from reacting to mouse, keyboard, or screen reader interaction, making the configurator clearer and more accessible.
Original PR description
Steps to reproduce: - Start the website configurator and open the description step. - Before choosing a website type, move the pointer over the area where the industry field will appear. - Navigate with Tab before completing the industry selection. => Hidden fields still react to input and can receive keyboard focus. Before this commit, the industry input and positioning dropdown were transparent until the previous step was complete. They could still react to pointer input and be announced by screen readers. After this commit, these fields stay hidden and unavailable until their respective steps are reached, while keeping their layout space. Forward-Port-Of: odoo/odoo#290297
The Bulgarian SAF-T report will now only be available and automatically installed when the advanced accounting module is installed. This prevents the report from appearing in setups that are not intended to use advanced accounting features.
Original PR description
As the Bulgarian SAF-T Report is destined for advanced accounting, it should only be available and auto-installed when the accountant module is as well. Forward-Port-Of: odoo/enterprise#132731
The working file card in accounting reports now displays its menu button without overlapping the status button when selected. This small visual fix makes the card easier to read and interact with, reducing confusion for users managing audit working files.
Original PR description
Slightly improve the style of the kanban card of the working file to make the 3-dots button not on top of the state button when pressed. Forward-Port-Of: odoo/enterprise#132789
The account return guided test flow has been updated after the removal of a setup wizard. Returns are now generated manually in the test flow, helping keep automated checks aligned with the current product behavior.
Original PR description
With the removal of the configuration wizard, we have to remove those steps in the tours. In consequences, the return generation trigger has been changed, so they need to be manually generated. This commit fix partially the tours in addition to https://github.com/odoo/enterprise/pull/131928/changes which fixes the rest of the flow. Forward-Port-Of: odoo/enterprise#132134
Fixed an issue that could block users from opening the rental order lines schedule after all variants of a rental product were deleted. The schedule now opens safely without trying to preselect a missing product variant, reducing disruption for rental workflows.
Original PR description
Currently, an error occurs when opening the Rental Order Lines Schedule view. **Steps to Reproduce:** - Install the `sale_stock_renting` module. - Go to `Settings` and enable `Variants`. - Go to…
Currently, an error occurs when opening the Rental Order Lines Schedule view. **Steps to Reproduce:** - Install the `sale_stock_renting` module. - Go to `Settings` and enable `Variants`. - Go to `Rental` > `Products` and create a product. - In the `Attributes & Variants` tab, add an attribute with two values and save. - Delete all variants using the `Variants` smart button or from `Inventory` > `Products` > `Product Variants`. - Return to the `Product` and click the `In Renting smart button`. `IndexError: list index out of range` When a product template is created, a product variant is automatically generated if the product has no attributes. Deleting this variant also deletes the product template [1]. By explicitly creating attribute values, a dynamic product variant is generated. Deleting this variant does not delete the product template because of the dynamic attribute [2]. When the In Renting button is clicked, it it going to open the rental order lines Schedule view and adds default_product_id to the action context. Since no product variants exist anymore, accessing the default product variant raises an error [3]. This commit ensures that default_product_id is not added to the context when the product template has no product variants [1]: https://github.com/odoo/odoo/blob/1f70b81eeebcc62b64c18772915e2f4696e189e7/addons/product/models/product_product.py#L486 [2]: https://github.com/odoo/odoo/blob/1f70b81eeebcc62b64c18772915e2f4696e189e7/addons/product/models/product_product.py#L478-L480 [3]- https://github.com/odoo/enterprise/blob/98ec35f3f17a2b706ad4fcc4d6161d12d05eadfd/sale_renting/models/product_product.py#L69 [4]: https://github.com/odoo/odoo/blob/942d3892c33e7ccdcfec260c3da37095069b699e/addons/stock/models/product.py#L635-L643 [5]: https://github.com/odoo/odoo/blob/942d3892c33e7ccdcfec260c3da37095069b699e/addons/stock/models/product.py#L601-L612 sentry-7637715724 Forward-Port-Of: odoo/enterprise#132650 Forward-Port-Of: odoo/enterprise#126356
The Australian payroll onboarding process now correctly accepts bank details when a BSB and bank name are provided, even if the BIC field is empty. This prevents users from seeing an incorrect warning after entering valid local bank information.
Original PR description
Bug reproduction: 1 - Install l10n_au_hr_payroll_api, settings→payroll→AU localization 2 - Start payroll onboarding `2.1 - Next step→fill in BSB and keep BIC empty→Set Bank details` 3 - No BSB or bank set warning continues to appear Bug cause: 1 - For that warning, there is check that checks bic (to not keep empty) Bug solution: 1 - bic check is removed and bank name check is added task-6540863 Forward-Port-Of: odoo/enterprise#131463 Forward-Port-Of: odoo/enterprise#130792
The payroll salary test was updated to match current behavior after a removed benefit allocation feature, a display change, and a corrected public transport value. This helps keep automated checks reliable and reduces false failures in payroll-related validation.
Original PR description
Error 1:
Drop the automatic extra legal allocation 's test: this feature was remove
in this task 5362345; but the test was not removed
Error 2:
Due to some UX change the IP display change and the test was not up-to-date
Error 3:
Due to a misconfiguration the public transport value was wrong.
runbot_error-242808
Forward-Port-Of: odoo/enterprise#132227
Forward-Port-Of: odoo/enterprise#131958Fixed an issue where Payroll dashboard warning cards stayed visible after users chose "Never show it again" until the page was refreshed. Dismissed warnings now update immediately on screen, reducing confusion for payroll users.
Original PR description
Bug reproduction: - Versions 20.0 and above - Go to the Payroll dashboard - Hover a warning card - click the cross confirm with "Never show it again" - The card stays on screen until the page is…
Bug reproduction: - Versions 20.0 and above - Go to the Payroll dashboard - Hover a warning card - click the cross confirm with "Never show it again" - The card stays on screen until the page is refreshed Bug cause: Dismissing a warning no longer soft reloads the dashboard: the dialog calls the `onDismiss` callback given by the dashboard, which fades the matching cards out and refreshes the cached warnings. However, `onDismiss` was never declared in the props of ArchiveWarningDialog. This was harmless with `static props`, as `this.props` was the object passed by the parent, but since the conversion to `useProps`, `this.props` only holds the declared keys. The callback silently resolved to `undefined`, so the record was archived server side but nothing was dispatched client side. - conversions of props in below PR: -- https://github.com/odoo/enterprise/pull/131078 Bug solution: - Declare the onDismiss props so the dismissal is dispatched again. task-6585492 Forward-Port-Of: odoo/enterprise#132218
This fix ensures payroll accounting entries that have already been posted are handled with the appropriate reduced access rights. It helps keep payroll accounting processes reliable while avoiding unnecessary elevated permissions after entries are finalized.
Original PR description
Forward-Port-Of: odoo/enterprise#132827 Forward-Port-Of: odoo/enterprise#132624
This fixes an issue where the website builder view could unexpectedly shift when a chat message was sent while editing a partially visible element. The change keeps the editing overlay aligned and prevents empty space from appearing, making website editing more stable.
Original PR description
The builder could shift upward when sending a chat message while a partially visible element was selected. The selection overlay can extend beyond the visible area, causing the builder layout to become programmatically scrollable. When the chat calls `scrollIntoView`, the parent layout is also scrolled, while the preview frame remains unchanged, causing the overlay to become misaligned and leaving empty space. Use `overflow: clip` instead of `overflow: hidden` on the builder layout container. This keeps the existing clipping behavior while preventing programmatic scrolling caused by the overlay's overflow. The fix is applied in the website module layout since the issue is caused by the builder container being scrollable, rather than by the chat itself. task-6229153
The Live Chat channel card layout was adjusted so the Join or Leave button stays clear of the three-dot card menu. This prevents visual overlap when users hover over a card, making the action button easier to read and use.
Original PR description
The three-dot menu of a kanban card sits in its top-right corner, where the Join/Leave button of a Live Chat channel also sits. Hovering the card brought the menu over the right edge of the button. This commit widens the padding of the button column from pe-1 to pe-4 to avoid this overlap. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where links that were made bold by a stylesheet could not be changed back to normal text in the editor. Business users editing email or website content can now reliably adjust link formatting without needing technical help.
Original PR description
Problem: Links with `font-weight: bold !important` from a CSS stylesheet cannot be unbolded from the editor. Cause: After `2028bc00f177d3fcb1e1dc6304153f9ebe0a523a`, applying a style to a link always wraps it in a `span`. When the link itself has a `font-weight: bold !important` rule, the style on the `span` cannot override it. Solution: Apply the style directly to the link, or more generally to any unsplittable element, so the new style can override the existing CSS. Steps to reproduce: - Open a new Email Marketing. - Select the "Welcome Message" template. - Add a link and observe that it is bold by default. - Try to unbold the link. - Observe that nothing happens. task-xxxx --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289922
The mail and live chat action controls were reorganized into clearer reusable parts, including dedicated button and dropdown handling. This is an internal cleanup that should make future maintenance and improvements easier without changing the main user experience.
The mail and live chat action menus were reorganized to make the underlying interface components cleaner and more consistent. This should support easier maintenance and more reliable future improvements with only minor visible changes, such as button alignment and rounded styling.
This update simplifies the mail welcome page so it loads in a more predictable way. The change is internal and should not alter the user experience, but it helps keep the Discuss area easier to maintain.
Original PR description
task-6373278 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