Friday, September 4, 2026
58 changes · master
Resolved issues and error corrections
Portal navigation breadcrumbs were standardized across several customer-facing pages, including the quotes page. This makes the portal experience more consistent and easier for customers to navigate.
Original PR description
Breadcrumbs were added to most portal pages [here][1]. This commit adds breadcrumbs to `/my/quotes` and fixes UI issues to ensure all portal pages with breadcrumbs look the same. [1]: https://github.com/odoo/odoo/commit/123d5876900a73f674a2286e891b2e442f63d93c task-6365169
The stock replenishment wizard now has clearer help text, visible tooltips, a slightly larger input field, and smoother refresh behavior. These small usability fixes make replenishment tasks easier and less disruptive for users.
Original PR description
bunch of small fixes that can be merged fast - show tooltips - reword tooltip - remove unused libraries - use soft reload - make the input field slightly larger task 6304907 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Custom website snippet previews now display oversized responsive text more accurately in the snippet selection dialog. This helps editors recognize saved snippets without the preview being distorted, while leaving the actual page content unchanged.
Original PR description
Steps to reproduce: - Go to the website editor. - Add a snippet with editable text to the page. - Select the text and set its font size to 144. - Save the edited block as a custom snippet. - Open the…
Steps to reproduce: - Go to the website editor. - Add a snippet with editable text to the page. - Select the text and set its font size to 144. - Save the edited block as a custom snippet. - Open the snippets dialog. - Go to the Custom category. => The custom snippet preview shows the text too large. Before this commit, responsive font sizes using `clamp()` with a `vw` term were rendered too large in the block dialog. The `vw` value was based on the full preview iframe width, while snippets were displayed inside columns. After this commit, the block dialog adjusts `vw` values on cloned `.o_rfs` preview content only, so the preview matches its column width without changing the snippet dropped on the page. task-6303725 | BEFORE (font size -> 144) | AFTER (font size -> 144) | | ------------- | ------------- | | <img width="416" height="409" alt="image" src="https://github.com/user-attachments/assets/e0eb0a4e-eb7b-4ee6-b080-536ea2a75c68" /> | <img width="421" height="272" alt="image" src="https://github.com/user-attachments/assets/6468a234-0966-45c9-9435-e97d9752b794" /> | Forward-Port-Of: odoo/odoo#286228 Forward-Port-Of: odoo/odoo#273257
Fixes a spelling mistake in the website editor’s Instagram video embed option. Users will now see “Instagram” spelled correctly when adding an Instagram reel, making the editor look more polished and professional.
Original PR description
Steps to reproduce: - Edit existing page. - Paste any Instagram reel. - In powerbox Instagram entry is listed as "Embed Intagram Video". Introduced by https://github.com/odoo/odoo/commit/2bae2abd4db704451234b115eb4942dcae7d8afa This commit fixes typo. Forward-Port-Of: odoo/odoo#286529
The demo payment provider now handles refunds correctly after a manually captured payment. This prevents users from getting stuck with a negative authorized amount and keeps refund testing flows reliable.
Original PR description
Issue: --- When using manual capture, you can refund the transaction but it will be only authorized, and you'll then be blocked with a negative authorized amount and the impossibility to refund it. This seems to be specific to demo payment provider. Steps: 1- Enable manual capture on demo provider. 2- Buy a product from shop and checkout and pay. 3- Capture the payment in backend. Then click on post process. 4- Try refund. opw-6413515 Forward-Port-Of: odoo/odoo#286625 Forward-Port-Of: odoo/odoo#282315
This fixes an issue where some already-applied website editor options could be ignored when their priority value was negative. It helps ensure the editor correctly recognizes the selected option, improving reliability for users editing page components.
Original PR description
The function `useSelectableComponent` looked for the selected option by searching for the option with the highest priority among the options that are applied. The search for highest priority implicitely excluded options with negative priority. This case happens with `composite` action when the inner actions have no definition of `getPriority`. This commit initialize the "highest priority found so far" as `-Infinity` instead of 0. task-5245362 Forward-Port-Of: odoo/odoo#286652 Forward-Port-Of: odoo/odoo#286503
This update fixes outdated internal documentation about how temporary records are accessed. It clarifies that these records follow normal access rights and record rules, reducing confusion for teams maintaining or auditing permissions.
Original PR description
Since 6d8688bb124d, TransientModel records use the regular access rights mechanisms instead of being implicitly restricted to their creator. The docstring was not updated with that change and has therefore incorrectly documented creator-only access since 14.0. Forward-Port-Of: odoo/odoo#286374 Forward-Port-Of: odoo/odoo#286251
The onboarding walkthroughs for Rental and Studio were adjusted so automated guided tours run correctly. This helps keep setup guidance reliable for users and prevents validation issues in tour steps.
Original PR description
rental_tour: use stepUtils.saveForm() instead of a manual save click, and add missing isActive:["manual"] twins for autocomplete selection steps. web_studio_new_app_tour: drop two timeout keys rejected by the onboarding step schema.
Belgian payroll attestations now handle employee contracts that do not have an end date. This prevents errors or incorrect occupation information for ongoing contracts, improving payroll document reliability.
Original PR description
A check was missing if the contract end date was false Forward-Port-Of: odoo/enterprise#130410 Forward-Port-Of: odoo/enterprise#130346
The UK CIS report now correctly includes payment information for receipts that use CIS taxes. This ensures businesses get a more complete and accurate view of CIS-related transactions, not just vendor bills.
Original PR description
With the l10n_uk_reports_cis module installed: - Create a vendor bills and add a CIS tax --> This vendor's bills appear correctly in the report. - Create a receipt and add a CIS tax --> This type of bill appears in the report, but the payment is not showing up. opw-6282548 Forward-Port-Of: odoo/enterprise#129395 Forward-Port-Of: odoo/enterprise#124043
This update adds test coverage to ensure spreadsheets exported to Excel keep embedded images correctly. It helps reduce the risk of broken exports for users sharing or downloading spreadsheet documents.
Original PR description
Counterpart of https://github.com/odoo/odoo/pull/279788 Task-6432724 Forward-Port-Of: odoo/enterprise#130172 Forward-Port-Of: odoo/enterprise#126384
This fix removes sample planning data that could fail to load when an optional project planning feature is not installed. It helps ensure the Helpdesk, Field Service, Sales, and Timesheets integration installs reliably without requiring an unrelated module.
Original PR description
…ct on helpdesk intervention Before this commit, `project_id` field in `planning.slot` only exists if `project_forecast` module is installed. However, when `helpdesk_planning_field_service_sale_timesheet` is installed, we cannot guarranty `project_forecast` module is also installed since it is not in the dependencies of `helpdesk_planning_field_service_sale_timesheet` module. This commit just removes the demo data inside `helpdesk_planning_field_service_sale_timesheet` module. Forward-Port-Of: odoo/enterprise#130433
This fixes a small display issue where expanded inventory valuation lines still showed a closed-folder icon. Users now get the correct visual cue when sublines are open, reducing confusion while reviewing stock valuation details.
Original PR description
c5a40a608280 ([IMP] *: apply new icon implementation globally) introduced a typo: it replaced a working `fa-folder#{this.state.displaySublines ? '-open' : ''}-o` with the new icon API and dropped the `s` on the way. Only master carries that rewrite, so this is master-only -- saas-19.4 and older still have the FontAwesome form and are correct there.
Additionally before the commit rewrite the icon was never filled so we drop the fill condition as wellThe map view now uses the record limit defined by the action when no specific map limit is set. This makes map behavior consistent with other views and helps users see the expected number of records.
Original PR description
The map view only considered the `limit` set in the arch, ignoring the one coming from the action (`ir.actions.act_window.limit`), unlike other views (list, kanban) which fall back to it. task-6531776
This fix prevents automated accounting-related processes from failing when they run with elevated permissions on behalf of users who do not have accounting access rights. It helps modules that need accounting reports, such as localization reporting, complete setup or return creation reliably.
Original PR description
This was spotted in a dev branch for master, where we set a default account_opening_date on every company, hence trying to directly create the returns for it. Some modules need to call reports for that (like intrastat l10n), and do it in sudo(). However, even in sudo, a user without the accounting rights still doesn't have the proper group, and it raises an exception. We hence adapt the condition. Forward-Port-Of: odoo/enterprise#130448
This fixes a small visual issue where the side area of kanban cards could have slightly mismatched rounded corners. The update makes card styling more polished and consistent by accounting for the card border when applying corner rounding.
Original PR description
Ensure the aside element gets the right `border-radius` value by taking the `border-width` of the kanban card into account when computing the radius value. task-6537730 | Master (top radius is incorrect due to the border width) | This PR (take the border width into account) | |--------|--------| | <img width="122" height="186" alt="image" src="https://github.com/user-attachments/assets/ec39123d-f874-4374-805e-82371d5ed8d4" /> | <img width="125" height="191" alt="image" src="https://github.com/user-attachments/assets/25ba6513-d1b3-4f18-805d-afa83c152bff" /> |
Fixes visual spacing problems introduced by the Frost design in list, kanban, and search panel views. This keeps the Community interface cleaner and more consistent while moving edition-specific styling to the right place.
Original PR description
Since the introduction of the Frost design, some spacing customizations for the List, Kanban, and Search Panel views have been defined in Community instead of Enterprise, causing spacing issues in…
Since the introduction of the Frost design, some spacing customizations for the List, Kanban, and Search Panel views have been defined in Community instead of Enterprise, causing spacing issues in Community. To fix this, this commit moves the relevant customizations to Enterprise and adapts them accordingly. task-6527607 Requires: - https://github.com/odoo/enterprise/pull/130335 | Before | After | |--------|--------| | <img width="1914" height="769" alt="Screenshot 2026-09-03 at 16 41 22" src="https://github.com/user-attachments/assets/9fa1be40-e3ff-4679-a739-dc86de516607" /> | <img width="1916" height="756" alt="Screenshot 2026-09-03 at 16 39 55" src="https://github.com/user-attachments/assets/6c6530f6-b20f-4339-b1ce-2ac4d7f8b837" /> | | <img width="1915" height="723" alt="Screenshot 2026-09-03 at 16 41 20" src="https://github.com/user-attachments/assets/0f7abbea-d9ab-4850-9d7f-7aae0995321b" /> | <img width="1918" height="753" alt="Screenshot 2026-09-03 at 16 39 46" src="https://github.com/user-attachments/assets/03855cf2-28b5-4b26-9fe2-30a9f9eec3d5" /> | | <img width="1918" height="550" alt="Screenshot 2026-09-03 at 16 41 05" src="https://github.com/user-attachments/assets/c4c6c703-55e9-4653-90c1-c6ce93610c0a" /> | <img width="1917" height="598" alt="Screenshot 2026-09-03 at 16 40 59" src="https://github.com/user-attachments/assets/02af42f0-84ed-457a-870c-8afd3efb0bcd" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change restores the correct table layout in the inventory report after a previous update caused extra columns to appear in the report body. It helps ensure inventory information is displayed clearly and consistently for users reviewing stock reports.
Original PR description
This reverts commit 43add3f72f29c35280869010b897c3c5656f5120. It was adding too many columns in table body after columns were removed from the header in 19.0. opw-6307728 Forward-Port-Of: odoo/odoo#286294
This fixes a visual spacing issue in the control panel actions that could appear when custom actions were added. It helps keep the interface aligned and consistent after recent UI updates.
Original PR description
After the new ui improvements the control panel actions had some styling issues when xpath is used to add new actions. no task id
The VoIP sound upload area now opens the file selector when users click anywhere inside the upload zone, not just on the icon or label. This makes the form behave as users expect and reduces confusion when uploading or recording sounds.
Original PR description
In a sound form, the file selector only opened when clicking directly on the Upload icon or label. Clicking elsewhere inside the drop zone had no effect, although the entire area looked interactive. Use the complete drop zone as the FileUploader toggler and render it as a button. Also show the pointer cursor consistently on the Upload and Record zones.
This fix restores the intended visual spacing in key Enterprise views after design-related styles were placed in the wrong edition. Users should see more consistent layout spacing in list, kanban, and search panel areas, while Community no longer inherits Enterprise-specific spacing behavior.
Original PR description
Since the introduction of the Frost design, some spacing customizations for the List, Kanban, and Search Panel views have been defined in Community instead of Enterprise, causing spacing issues in Community. To fix this, this commit moves the relevant customizations to Enterprise and adapts them accordingly. task-6527607 Requires: - https://github.com/odoo/odoo/pull/286518 | Before | After | |--------|--------| | <img width="400" height="302" alt="Screenshot 2026-09-03 at 16 44 42" src="https://github.com/user-attachments/assets/4872fb70-cc75-4d8b-80d2-6d5ff44fe1b0" /> | <img width="399" height="301" alt="Screenshot 2026-09-03 at 16 44 45" src="https://github.com/user-attachments/assets/92ff245a-7416-4652-98b1-1a90951cc8c3" /> |
This update adjusts how dropdown menus track their target elements as part of the ongoing web platform migration. It prevents pivot table dropdowns from losing required styling or failing to open correctly, improving reliability without changing the user experience.
Original PR description
Remove useLayoutEffect from dropdown.js as part of OWL3 migration.
The website scroll button now keeps a visible focus indicator when people navigate with a keyboard. This improves accessibility by making it clearer which page control is currently selected.
Original PR description
Scroll button had no outline, which is an issue for people navigating with their keyboards. Now, outline is removed with :focus, but not :focus-visible Task-6009931
Selecting a company or contact suggestion now correctly returns the form to its saved state after the record is updated. This prevents users from seeing inactive save or discard buttons after autocomplete has already saved the enriched partner details.
Original PR description
Steps to reproduce: 1) open partner form view 2) type in the name field 3) select a suggestion from the autocomplete dropdown Issue: The record is enriched and saved, but the form still displays the save/discard buttons, and clicking them does nothing. The record dirty indicator is driven by 2 signals 1) `model.root.dirty`, which is cleared by save() call earlier in the onSelect() 2) the state `fieldIsDirty` of the `FormStatusIndicator` The second indicator is set to true when the user types in an input field, and selecting an option never clears it. The `setDirty` prop no longer exists, and therefore was deadcode. This commit emits `FIELD_IS_DIRTY` bus event, which is the only way to update the second indicator. With that, the indicator goes back to saved state once the record is updated. task-6475332 Forward-Port-Of: odoo/odoo#286651 Forward-Port-Of: odoo/odoo#285897
This fixes a crash when generating electronic invoice data in Community Edition without the Enterprise accounting add-on installed. The system now checks whether optional deferred billing date fields are available before using them, helping electronic invoicing work reliably across editions.
Original PR description
The fields `deferred_start_date` and `deferred_end_date` are created by the enterprise addon `account_accountant`, so not having it installed, this crashes with:
```
File "/opt/odoo/auto/addons/account_edi_ubl_cii/models/account_edi_cii.py", line 684, in <listcomp>
billing_start_dates += [move_line.deferred_start_date for move_line in invoice.invoice_line_ids if move_line.deferred_start_date]
AttributeError: 'account.move.line' object has no attribute 'deferred_start_date'
```
This PR protects the access to these fields checking first if they exist.
Bug introduced in the refactoring in #261572.
@Tecnativa TT64359
Forward-Port-Of: odoo/odoo#286245Portal users who follow a project can now reliably open the tasks they are allowed to see, instead of sometimes getting a “not found” error. This improves the customer portal experience by aligning task page access with the task list permissions.
Original PR description
Before this commit, the portal user could have a request not found when he wants to access to a task from a project he follows even if he can access to the task in /my/tasks route. This commit makes sure the read access are checked instead of checking if the user can access to the task thanks to the token since the token if the one of the project. Forward-Port-Of: odoo/odoo#285878
This fix prevents restaurant preparation tickets from failing during installation when the point of sale module has not yet been upgraded. It uses a more stable receipt section that already exists across versions, reducing manual upgrade steps and avoiding issues for customized setups.
Original PR description
The template for the preparation tickets was using an xpath targeting a newly added div element. This raised an error when installing the `pos_restaurant` module while an old version of `point_of_sale` was still in place, since the customer would need to manually upgrade `point_of_sale` first to have that new div element available. We now use receipt-header as the xpath target, which was always present in the template. We also refill `pos_self_order.pos_order_change_receipt` to prevent breaks with custo. --- Report: https://github.com/odoo/odoo/pull/267161#discussion_r3758115362 Forward-Port-Of: odoo/odoo#281768
Live chat visitors will now see the chatbot typing animation while the bot pauses between scripted steps. This makes automated conversations feel more responsive and reduces confusion during short waits.
Original PR description
Before this commit, a chatbot never shows that it is typing: the animated dots between two steps of its script never appear in the livechat. This happens because typingMessage tests this.isTypingUi on the Chatbot record, a getter of discuss.channel.member that Chatbot does not have, so the read is always undefined and no typing message is inserted. This comes from "[IMP] mail: disable isTyping when muted", which renamed the reads of the member field and took the read of the chatbot's own isTyping attribute along. This commit tests isTyping again, so the typing message shows while the script waits between two steps. Forward-Port-Of: odoo/odoo#285930
The Belgian payroll DMFA check no longer fails for flexible employees who do not have a standard work calendar. It now uses their expected weekly hours to validate quarterly work days, helping payroll teams avoid incorrect warnings or blocked processing.
Original PR description
In this other PR (https://github.com/odoo/enterprise/pull/120063) we added a DMFA warning to check that every employee included in a DMFA has worked the correct number of days in the quarter. Since the calendar can change between employees, we were calling a function to tell us for each employee how many days was he supposed to work. However, if an employee is flexible he has no calendar, the function fails. In that case we have the number of hours it's supposed to work per week and we can fallback to that since we know there are exactly 13 weeks in a quarter. Task: 6497142
This fixes a visual inconsistency in the VoIP sound form when dark mode is enabled. The form background and its surrounding header now use matching colors, creating a cleaner and less distracting experience for users.
Original PR description
In dark mode, the sound form background and the header of the node containing it used inconsistent colors.
Financial reports no longer show the unallocated earnings or losses line when its balance is zero across all columns. This keeps trial balance reports cleaner and helps users focus on meaningful figures.
Original PR description
… zero The unallocated earnings/losses line was displayed even when its balance was zero in every column group, cluttering the report with uninformative rows. We therefore filter out lines whose balance is zero across all column groups. Forward-Port-Of: odoo/enterprise#129666 Forward-Port-Of: odoo/enterprise#129129
The VoIP call flow editor now displays correctly when dark mode is enabled. This improves readability and creates a more consistent experience for users working with call flows in darker interface settings.
Original PR description
Before this commit, the call flow editor kept its light background and node colors when dark mode was enabled, resulting in poor contrast and inconsistent styling. This commit adds dark mode styles for the canvas, grid, nodes, connections, ports, selection states, and location indicator.
This fix stops users from creating order boxes directly from printer settings. Order boxes must be linked to a real physical device, helping avoid incorrect setup and operational confusion in point-of-sale self-order flows.
Original PR description
We prevent users from creating oboxes from pos.printer model, as oboxes should be paired with an actual device. Forward-Port-Of: odoo/enterprise#130197 Forward-Port-Of: odoo/enterprise#129960
Added automated checks to ensure time-tracking assistant suggestions are correctly matched to helpdesk tickets and related calendar entries. This reduces the risk of incorrect timesheet links and helps maintain reliable support reporting.
Original PR description
task: 6475133 Forward-Port-Of: odoo/enterprise#130157
This update corrects icon-related issues across the application to improve visual consistency and usability. Users should see clearer, more reliable interface elements, with no expected workflow changes.
This fixes a timing issue in the self-order interface where closing or changing a carousel during a slide could trigger errors in automated flows. The change improves reliability of the self-order experience without altering user-facing features.
Original PR description
Option A (guard in the hook). Disposing a Carousel mid-slide left its queued transition callback running against a nulled `_element`, throwing `TypeError: Illegal invocation` in unrelated self-order tours. Option B. The self-order bundle ships Bootstrap without `web/static/src/libs/bootstrap.js`, so the fix skipping a transition callback whose element is gone never applied here. Costs ~89kB: the patch file needs Tooltip/Dropdown/Modal. runbot-946931 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Opening the generate lot dialog during receiving could show an error because the system tried to use missing information. The update adds safeguards so warehouse users can open the dialog without the warning interrupting their workflow.
Original PR description
When opening the dialog in stock delivery there is an error warning about reading from undefined. This commit adds extra checks to prevent this.
This fixes French electronic invoice exports so that paid invoices automatically include the required due date, matching the payment date. It helps businesses comply with the latest French invoicing validation rules and reduces the risk of rejected invoice files.
Original PR description
According the schematron v1.4, the cbc:DueDate is required when the move is PAID. "[BR-FR-CO-09/BT-23] : Si le cadre de facturation (BT-23) est B2, S2 ou M2, alors la date d’échéance (BT-9) doit être renseignée et correspondre à la date de paiement." no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286263
Sales order lines for timesheet-based services now update remaining hours when relevant unit or availability details change. This helps keep project and service billing information accurate without relying on unrelated timesheet triggers.
Original PR description
The dependencies of _compute_remaining_hours do not match the fields actually used for the computation: it lists analytic_line_ids, which it never uses, and omits both remaining_hours_available, and product_uom. _compute_remaining_hours_available has the same issue: it uses product_uom but only depends on product_id.service_policy. analytic_line_ids, on the other hand, can be dropped: qty_delivered already depends on it, along with its so_line, unit_amount, product_uom_id and project_id, so the timesheet flow keeps triggering the recomputation. This PR fixes the dependencies for both aforementioned compute methods. Task-4748521 Forward-Port-Of: odoo/odoo#285685 Forward-Port-Of: odoo/odoo#284750
Product thumbnails on ecommerce product pages now stay neatly aligned when automatic image cropping is turned off. This improves the shopping experience by keeping thumbnail rows tidy and ensuring product images are centered properly, even when images have very different shapes.
Original PR description
Steps to reproduce: =================== 1. Add several images to a product, one of them much wider than tall. 2. On the product page, set the image ratio to "Disabled". 3. Move the thumbnails below…
Steps to reproduce: =================== 1. Add several images to a product, one of them much wider than tall. 2. On the product page, set the image ratio to "Disabled". 3. Move the thumbnails below the image. => The wide thumbnail sits at the top of its slot, with blank space under it. Root cause: =========== Thumbnails are given a fixed width of 64px and take their height from `aspect-ratio: var(--o-wsale-product-image-ratio)` [1]. With cropping disabled that variable is `auto`, so each thumbnail keeps the shape of its own image and they no longer share a height. They sit in a flex row, which stretches every slot to the height of the tallest one. The image inside keeps its own height and stays at the top of the slot, so a wide image leaves the rest of its slot empty. The slots are only stretched when the images differ in height, which is why the problem needs cropping to be disabled, and why it does not appear when every image is a landscape one. - [1] sized the thumbnails from the image ratio. Fix: ==== Center the thumbnails in the row so each one keeps the height of its own image instead of being stretched to the tallest. Their width stays at 64px, so a row of wide images still takes the same space as before and none of them is pushed out of the container. [1]: 670b1daa2254 opw-6472484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#283246
This fixes date-related tests so they use the same timezone as the Odoo environment. It prevents occasional test failures around midnight in Belgium, improving reliability without changing business functionality.
Original PR description
## Issue By default in Odoo, `datetime.now()` returns the UTC time, which is two hours behind the local time in Belgium. This leads to two tests failing when executed between 00:00 and 02:00 Belgian…
## Issue By default in Odoo, `datetime.now()` returns the UTC time, which is two hours behind the local time in Belgium. This leads to two tests failing when executed between 00:00 and 02:00 Belgian time: `test_ir_sequence_interpolation_dict` and `test_ir_sequence_iso_directives`. The `_interpolate_dict` method (responsible for interpolating the prefix/suffix from the sequences) specifies the tzinfo when calling `datetime.now()`: https://github.com/odoo/odoo/blob/9c67949be529eb86886b3d5bde08e81e048ecfe7/odoo/addons/base/models/ir_sequence.py#L211-L212 Since this is not the case in the tests, the tests evaluate the date using UTC. This creates a two hours difference between the time expected and the time actually used by `next_by_code`. The tests thus fail between 00:00 and 02:00 because the evaluate dates from both `datetime.now` calls differ, leading to a mismatch in the expected prefixes. ## Fix We force the `env.tz` on the `datetime.now()` call, to mimic the behavior from the `_interpolate_dict`. runbot-242662 Forward-Port-Of: odoo/odoo#284955
This fixes a display issue in the website editor where resize controls could be hidden behind the sidebar when editing animated content. Users can now clearly see and resize selected page elements, improving editing accuracy and reducing confusion.
Original PR description
Steps to reproduce: - Drop a few snippets to make the page scrollable - At the bottom, drop the `s_three_columns` snippet - Click on the last Card - Add an animation "onScroll" (Effect - Slide, Intensity - 100) - Scroll top slightly to hide a part of the card behind the sidebar => The resize overlay is partially hidden The elements `.hb-row` have a z-index of 2, so they appear in front of the overlay which has a z-index of 1. It was decided to fully show the overlay to allow resizing. Keeping the overlay visible in front of the sidebar also allow the user to see where animated element is. task-6476269 Forward-Port-Of: odoo/odoo#283842 Forward-Port-Of: odoo/odoo#282796
This fixes a website editor issue where deleting a card's cover image could leave the card in an inconsistent state. Users will no longer encounter broken cover image options or related errors when editing card-based website snippets.
Original PR description
It was possible to remove the image inside a card cover while keeping the figure wrapper. The card option would then still consider that there was a cover image even though the image was gone, which could also lead to a traceback. Steps to reproduce: - Insert the `s_three_columns` snippet - Click on the image of one card - Either press "Enter", "Delete", "Backspace" - Hover the "Cover Image" options => The image is removed but the `<figure>` is still there, so the option is still considered active (leading to a traceback) task-6081728 Forward-Port-Of: odoo/odoo#285131 Forward-Port-Of: odoo/odoo#280086
This fix updates an internal test so it consistently includes the required tax information when checking Indonesian e-Faktur behavior. It helps prevent false build failures and supports more reliable delivery of the localization feature, without changing day-to-day user workflows.
Original PR description
Issue: In some build, when creating the invoice line it did not assign the default tax so it raise an error when downloading efaktur Fix: Assign the tax line manually in the unit test instead of relying on default taxes issue-[946227](https://runbot.odoo.com/odoo/error/946227) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285902
The editor no longer shows a non-working magic wand icon when users open the link popover for an image with a link. This removes a confusing control and makes editing linked images clearer.
Original PR description
**Current behavior before PR:** Steps to reproduce the issue: - Add an image - Add a link to the image - Put cursor just right after the image link so that link popover is opened - Notice that there is a wand icon in link popover to replace title, clicking on it does nothing **Desired behavior after PR:** There should be no replace title icon in popover for image-link. task-6420902 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286119 Forward-Port-Of: odoo/odoo#279076
Fixes an issue where the website builder showed an inaccurate preview when changing header width for a specific boxed header style. This makes the setting apply more reliably and avoids misleading previews for website editors.
Original PR description
The header width option is not previewed properly on the header template `template_header_boxed`. This happens because this template is not compatible with the action `previewableWebsiteConfig` (its width can't be previewed by adding a single class). This commit fixes the problem by using the action `websiteConfig` instead of `previewableWebsiteConfig` when this template is set. task-6420611 Forward-Port-Of: odoo/odoo#286292 Forward-Port-Of: odoo/odoo#282311
This fixes a mismatch between SMS delivery error handling and mass SMS mailings. Mass SMS campaigns now recognize the newer failure reason, preventing affected flows from crashing when that error occurs.
Original PR description
This commit fixes an issue with the addition of a new failure_type in the SMS module via [1]. The corresponding failure_type wasn't added in mass_mailing_sms meaning that some flows could crash if the specific error was set. Now, the new failure_type is added to the module. [1]:https://github.com/odoo/odoo/commit/06bab9a82dae911c26fd5dd329cb43a466d13569 Forward-Port-Of: odoo/odoo#286510
The Vietnam accounting report variants now keep the search bar available when users switch to the VAS general journal or general ledger. This lets users filter account lines by name consistently, matching the standard general ledger behavior.
Original PR description
The standard general ledger enables the search bar, but the VAS general journal (S03a-DN) and general ledger (S03b-DN) variants do not, so the search field disappears as soon as the user switches to one of them and the account lines can no longer be filtered by name. Enable the search bar on both variants to match their root report.
This fix makes an automated restaurant appointment test wait until a cancellation dialog fully closes before ending. It helps prevent intermittent false test failures, improving confidence in release validation without changing user-facing behavior.
Original PR description
Following commit b6a7991a6aaef1be15a27852c2c76737322cdcab, the tour clicks the cancel button (.o_form_button_cancel) to discard unsaved changes. However, as it was the last step of the tour, the test could terminate before the asynchronous discard/dialog closure completed. This caused intermittent test failures with: `AssertionError: Tour finished with a dirty form view being open.` We now add a final step that waits for the dialog to close and the form to no longer be marked as dirty (`body:not(:has(.o_dialog)):not(:has(.o_form_dirty))`) before completing the tour. Forward-Port-Of: odoo/enterprise#129375
Freezing spreadsheet data now creates the expected data protection log entry. This helps businesses keep a clearer audit trail when spreadsheet content is locked or preserved.
Original PR description
Task: 6389096 Forward-Port-Of: odoo/enterprise#130229 Forward-Port-Of: odoo/enterprise#126461
The web test suite now ignores assets that do not have a file-based name instead of failing unexpectedly. This keeps JavaScript regression testing reliable when websites use customized themes or when asset paths are invalid.
Original PR description
### Problem `HootCommon` in `addons/web/tests/test_js.py` calls `.endswith()` on `asset['filename']` in two places without checking it for `None`: ```python filename = asset['filename'] if not…
### Problem
`HootCommon` in `addons/web/tests/test_js.py` calls `.endswith()` on
`asset['filename']` in two places without checking it for `None`:
```python
filename = asset['filename']
if not filename.endswith('.test.js'):
```
```python
if asset['filename'].endswith('.test.js')
```
But `filename` is legitimately `None` for assets backed by an `ir.attachment`
rather than a file on disk. `ir_asset.py::_get_paths` sets it that way on
purpose (the "an attachment url most likely" branch).
### Reproduction
Customise a website theme (which creates an `ir.attachment`-backed asset), then
run the core JS suite. Four tests fail with:
```
AttributeError: 'NoneType' object has no attribute 'endswith'
```
The same happens with a simple typo in a manifest's asset path, which produces
`filename = None` with only a warning — so a one-character mistake turns the
whole JS suite red instead of reporting the typo.
### Fix
An asset with no file on disk cannot be a `.test.js`, so the correct response to
`filename is None` is the same as for any other name that does not end in
`.test.js`: skip it.
The suite is currently red permanently on any database with a customised theme,
which is exactly when it stops being useful as a regression signal.Fixes a storefront issue where changing options on an out-of-stock product could make the "Add to wishlist" button shift position. This keeps the shopping experience visually stable and avoids confusing customers browsing unavailable product variants.
Original PR description
On an out-of-stock product page where we prevent out-of-stock sale, changing the attribute value moves the "Add to wishlist" button Steps to reproduce: 1. Install eCommerce and Inventory 2. Go to Settings > Website > eCommerce > Inventory Defaults and disable the option "Continue Selling" for Out-of-Stock products 3. Go to Inventory > Products, open product Customizable Desk. In the eCommerce tab, disable option "Sell when Out-of-Stock". 4. In the General Information tab, click on the Quantity On Hand and set all quantities to 0 5. Open the product on the eCommerce 6. Change the Legs attribute to Aluminium 7. The "Add to wishlist" button moves Issue: Changing the combination of the product only removes the `#product_stock_availability` element. However, there can be multiple elements that we need to remove. This was introduced in https://github.com/odoo/odoo/commit/6e72f45f78055de762a24e4a24a82a5565346d7a Solution: Reset the previous behavior opw-6507088
The mail app now cleans up its internal data store automatically when the app is closed, preventing leftover test subscriptions. This improves test reliability and reduces the chance of hidden side effects between mail-related tests without changing user-facing behavior.
Original PR description
Before this commit, a mail test that mounts its UI without the `start()` helper never disposes the store, so the subscriptions its records registered outlive the test: the chat hub and composer…
Before this commit, a mail test that mounts its UI without the `start()` helper never disposes the store, so the subscriptions its records registered outlive the test: the chat hub and composer service entries of the shared local storage listener, and one for each `localStorage` field of a record. `@mail/discuss/call/peer_to_peer` mounts with `mountWebClient()`. This happens because nothing in src disposes a store: a deleted record runs its dispose functions from the delete queue, and the store is a singleton nothing deletes, so its own teardown had one caller, the `after()` hook of `start()`. Note that hoot rebuilds the module set of a test file, so such a subscription is collected with its file and the memory of the suite does not grow. This commit registers the teardown on the scope of the app that builds the store, the one services start in and that `makeStore` already reads `useApp()` from, so destroying the app runs the store's dispose functions and the tests need no hook of their own.
The website editor now treats forum information links as regular links instead of buttons. This avoids confusing styling options when editing forum pages and keeps the editing experience clearer across desktop and mobile.
Original PR description
Steps to reproduce: - Go to a forum page. - Open the website editor. - Select the "About this forum" link in the sidebar. => Button styling options are shown for a regular link. Before this commit, forum information links used button classes, which made the editor expose button styling options for them. After this commit, the `btn`, `btn-sm`, and `btn-link` classes are replaced with `small` so the editor treats these elements as regular links on desktop and mobile. task-6259086 Forward-Port-Of: odoo/odoo#283156
This change removes an obsolete browser history update from spreadsheet document navigation. It keeps the routing behavior simpler after a previous change introduced a dedicated way to handle shared links with tokens, with no expected impact on normal users.
Original PR description
the replaceState after loading the router patch became useless when we changed the implementation of https://github.com/odoo/enterprise/pull/114484 in favor of a dedicated route to handle urls with a token instead of an id. Task-6485474
The ESG module now cleans up its unit links correctly during uninstall, preventing a reinstall failure. This improves system reliability for customers who remove and reinstall the ESG app or run upgrade and test workflows.
Original PR description
As `relative_uom_id` is on delete cascade, when uninstalling esg module, `uom.product_uom_kwh` is being removed when `esg.product_uom_j` is removed. When reinstalling esg module, we try to override uom.product_uom_kwh but it does not exist anymore, causing the error: Cannot update missing record. To prevent this error, we need to detach the core kWh unit from our own J unit when uninstalling esg module. runbot-error: [946474](https://runbot.odoo.com/odoo/runbot.build.error/946474) version-19.5
The Helpdesk team card now displays the email alias aligned with the team name. This small visual fix makes the card easier to read and keeps the Helpdesk interface looking consistent.
Original PR description
In this commit, we remove the margin before the mail alias, ensuring aligment within the helpdesk team card. task-6416578 Forward-Port-Of: odoo/enterprise#129865
Kitchen and change receipts now use the POS configuration tied to the order, even when multiple configurations share the same kitchen setup. This helps ensure printed receipts show the right store or register details without affecting standard single-configuration POS printing.
Original PR description
In this commit: ------------------- - Use the first loaded `pos_config` for kitchen when kitchen is common across multiple configs and use the order's associated config when printing a change receipt from the kitchen to ensure the correct config details are printed. - For regular POS printing, this remains unchanged since only one config is loaded. task: 6512063 Related PR: https://github.com/odoo/enterprise/pull/130117