Wednesday, June 3, 2026
28 changes · saas-19.3
Resolved issues and error corrections
This update fixes an issue where users couldn't reliably select formatted text within a table cell. The fix simplifies the selection process by directly verifying cell boundaries, ensuring consistent and accurate cell selection when applying formatting. This improves the overall usability of the table editor.
Original PR description
### Steps to reproduce: - create a table (e.g. /table) - type something in any cell and select that cell. - apply formatting through toolbar (bold, italic, etc.) - now select that single cell through…
### Steps to reproduce: - create a table (e.g. /table) - type something in any cell and select that cell. - apply formatting through toolbar (bold, italic, etc.) - now select that single cell through mouse. - observe that it is not selected ### Description of the issue/feature this PR addresses: - The single-cell selection logic relied on getTargetedNodes(), which collects descendants of the selection’s common ancestor. When selecting text inside inline formatting tag (e.g. `<i>`), the text node became the common ancestor, so the parent `<i>` tag was excluded from selectedNodes. As a result, check ensuring all cell elements were selected failed, preventing from being selected. ### Desired behavior after PR is merged: - Cell selection was simplified using areNodeContentsFullySelected(startTd) directly instead of manually matching targeted descendants. This relies on DOM Range to verify whether the cell boundaries are fully selected. task-6207941 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#266208 Forward-Port-Of: odoo/odoo#263742
This update optimizes the styling of the Odoo Enterprise website's home menu for faster loading times. The changes eliminate inefficient CSS selectors used with hover and active states, replacing them with CSS variables for better performance. This results in a smoother user experience.
Original PR description
Avoid selectors after `:hover` and `:active`, as they can impact performance. CSS variables are now used instead. Replace hex color values with "0 0 0" RGB syntax to ensure compatibility with CSS variable usage. Forward-Port-Of: odoo/enterprise#119082
This update fixes a technical issue that prevented the system from correctly processing paychecks with negative amounts. The fix involved correcting references to negative net values and removing unnecessary code, ensuring accurate paycheck calculations. This resolves a potential error that could have impacted payroll accuracy.
Original PR description
Steps to produce: - create a previous payslip with negative amount - create a payslip for current month - click on the warning to apply negative amount - you get an error or a traceback because it's referencing an input which is removed from the system and migrated to other input Fix: - corrected the reference to negative net - removed content of the method `_generate_payslip` as it's not used and referencing removed inputs task-id: 6240163 Forward-Port-Of: odoo/enterprise#119010 Forward-Port-Of: odoo/enterprise#118144
This update resolves an issue where clicking on social media posts (Facebook, Instagram, YouTube) without comments would cause the system to crash. The fix ensures that the comments dialog opens correctly, regardless of whether the post has comments or not, improving the user experience within the Social Marketing feed.
Original PR description
*=social_youtube,social_instagram,social_facebook,social_twitter, social_linkedin **How to reproduce:** - Open the Social Marketing feed. - Click a Facebook, Instagram, or YouTube stream post with no comments. **Issue:** - A traceback is raised because the click handler tries to call `click()` on a missing comments element. - The comments dialog does not open. **Cause:** - The kanban record click handler forwards clicks to `.o_social_comments`. - For some media, the comments counter is not rendered when the post has zero comments. - See: https://github.com/odoo/enterprise/commit/0293d3e839825a4333882e831960050070b02ba6 **Fix:** - Make the shared handler detect when the comments element is missing. - Delegate that case to media-specific handlers so Facebook, Instagram, and YouTube can open their comments dialog directly. Task-6113089
This update removes redundant sudo permissions that were incorrectly added when calling the image generation tool. The change corrects a previous error and improves the system's efficiency and security posture. This ensures the system operates with the minimum necessary privileges.
Original PR description
The sudo used for calling the image generation tool isn't needed and shouldn't have been added here 99f76c1 in the first place. So, it is removed.
This update fixes an issue where timesheet forms weren't displaying the correct, specialized view when refreshing after opening from the grid. Now, the system correctly restores the timesheet-specific form view, ensuring users always see the relevant information when navigating back to a timesheet record.
Original PR description
…m view * Go to Timesheets > My Timesheets > switch to Grid view. * Hover over a cell with a timesheet entry and click the magnifier (search) icon. * The list opens; click a record to open its form view. * Observe the URL: `/odoo/timesheets/account.analytic.line/<id>`. * Refresh the page (F5). Before this commit, the generic form view was shown instead of the timesheet-specific form view. This occurred because, when reloading a page with a dynamic action and a resId, a generic view layout [false, "form"] was requested instead of the action-defined view. Now, the dynamic action is properly restored on refresh, ensuring the correct specific view is loaded for the form. opw-6133602 Forward-Port-Of: odoo/odoo#266369 Forward-Port-Of: odoo/odoo#265552
This update fixes a visual issue where the background color of selected table cells wasn't accurately reflected in the toolbar. The changes include a new background color processor and adjustments to ensure the selected color is always updated, even when selecting empty cells. This improves the user experience when working with tables in the HTML editor.
Original PR description
Before this commit: the background color of selected table cells isn't shown in the toolbar. After this commit: we have a background color processor in the table plugin to calculate the background color of selected cells. The color and background color are also properly reset to update the selected color when selecting an empty table cell. table_selectionchange_handlers is created to make sure the selected color is updated after it. task-5976046 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267342 Forward-Port-Of: odoo/odoo#252011
This update corrects a bug in the helpdesk rating dashboard. Previously, ratings created late in the day weren't included in searches. The change now uses current date and time to ensure all ratings within the last 7 days are accurately reflected, providing a more complete view of customer feedback.
Original PR description
Before this commit, the ratings created the current date at 23h will not been taken into account in helpdesk rating dashboard. This commit uses datetime.now() instead of date.today() to search the ratings in the last 7 seven days. runbot-error-230905 Forward-Port-Of: odoo/enterprise#119035
This update resolves a visual glitch where a gradient color filter remained on website sections after the background image was removed. The fix directly removes the related filter element, ensuring a cleaner and more consistent appearance for website pages. This improves the user experience and prevents unexpected visual artifacts.
Original PR description
Steps to reproduce: - Edit a website page. - Select a section with a background image. - Set a gradient color filter on the background image. - Remove the background image. => The gradient color filter stays in the section DOM. After this commit, `removeBackgroundImage` directly removes the related `.o_we_bg_filter`. Forward-Port-Of: odoo/odoo#265025
This update ensures that users aren't presented with warnings related to the Italian EDI (l10n_it_edi) functionality if it's not applicable to their business. Previously, warnings would appear even when the EDI setting was correctly configured. This change improves the user experience by removing irrelevant notifications.
Original PR description
We shouldn't show warnings for `l10n_it_edi` if it's not possible to use it, even if the partner has its preferred EDI method set as `it_edi_xml`. Ticket [link](https://www.odoo.com/odoo/project.task/5985570) opw-5985570 Forward-Port-Of: odoo/odoo#267019
This update resolves an issue where clicking on a binary field in a list view would unexpectedly open the associated record. The change prevents this behavior, ensuring users only download the intended binary content. Unit tests have been added to guarantee this fix.
Original PR description
If a list view contains a field (column) with binary widget, on click it will download the content of the field. This is the intended behavior but at the same time it will, by default, open the record of which it is part, which is strange since the user only wants to download the content. With this PR we make use of .stop on the t-on-click to detach the execution of the function from the opening of the record. We also add unit tests for this. Task: 6260266 Forward-Port-Of: odoo/odoo#267197
This update corrects an issue where the graph view incorrectly displayed currency conversions when only one company was present. The fix prevents unnecessary currency conversions, ensuring that graph data consistently shows the correct currency (USD) regardless of the grouping options. This improves the accuracy and reliability of sales reporting.
Original PR description
Steps to reproduce ================== - Install sale_managemement - Enable the EUR currency - Create a new company with the EUR currency - Enable both the current and the new company as the main one - Go to Sales - Switch to the graph view - Group by Order Date > year - Hover over a bar => The currency is in USD - Group by Order Date > Week => The currency is now in EUR even though all records are in USD Cause of the issue ================== _web_read_group_fill_temporal returns an empty array in currency_id:array_agg_distinct when there are no records in that group The undefined currency was then added to graphCurrencies. => graphCurrencies = [1, undefined] Since graphCurrencies has more than one item, the currencies are converted opw-6226827 Forward-Port-Of: odoo/odoo#267608 Forward-Port-Of: odoo/odoo#266972
This update allows users to efficiently edit the analytics distribution field within asset records, mirroring the functionality available for journal items. This enhancement streamlines the process of updating asset analytics data, improving user productivity and data accuracy.
Original PR description
This commit fixes the multi-edit of analytics distribution field in assets form view. The multi-edit option was added to the analytics distribution widget, same as in the journal items. task-6218188 Forward-Port-Of: odoo/enterprise#119054 Forward-Port-Of: odoo/enterprise#118042
This update resolves a technical issue related to how automatic sign fields are populated. The change isolates the auto-fill process to prevent unintended side effects that could have disrupted the signing workflow. This ensures a more reliable and consistent experience for users completing digital signatures.
Original PR description
task-6269354
This update resolves an issue where the Executive Summary report would crash when the date range filter was disabled. The fix ensures the report uses the fiscal year's start date instead, preventing a calculation error and allowing the report to function correctly regardless of the date range selection.
Original PR description
## Steps to Reproduce: 1. Install the Accounting module. 2. Go to Accounting > Reporting > Executive Summary. 3. Activate debug mode. 4. Click on the gear icon at the top. 5. In the "Options" tab,…
## Steps to Reproduce: 1. Install the Accounting module. 2. Go to Accounting > Reporting > Executive Summary. 3. Activate debug mode. 4. Click on the gear icon at the top. 5. In the "Options" tab, disable the "Date Range". 6. Open the report again. ## Error: `TypeError - unsupported operand type(s) for -: 'datetime.date' and 'NoneType'` ## Cause: At [1], when the "Date range" option is disabled in the summary report, `date_from` becomes None. The NDays expression still computes `date_to - date_from` at [2], which raises a TypeError because subtraction between a datetime and NoneType is not supported. ## Fix: This commit takes the fiscal-year's start date, when the date-range feature is disabled. [1] - https://github.com/odoo/enterprise/blob/a9cadd93b849375edfcc7fd04612d9eb8787043b/account_reports/models/account_report.py#L564-L570 [2] - https://github.com/odoo/enterprise/blob/a9cadd93b849375edfcc7fd04612d9eb8787043b/account_reports/models/executive_summary_report.py#L15-L16 sentry-7455506965 Forward-Port-Of: odoo/enterprise#116888
A recent test failure related to demo data installation has been resolved. The fix ensures that a simulation offer is hidden, preventing errors during the test run. This improves the stability of the system when using the standard demo environment.
Original PR description
**Problem**: The test fails when demo data is installed because some steps expect an empty list view. **Fix**: Ensure the simulation offer is hidden by applying a custom filter on the simulation employee Task: 6246575 Forward-Port-Of: odoo/enterprise#119065 Forward-Port-Of: odoo/enterprise#118358
This update resolves a performance issue impacting the calculation of payroll deductions (DPV) in the Belgian HR payroll module. The fix optimizes a key process, leading to faster and more efficient payroll processing. This ensures accurate and timely payroll calculations for our business users.
Original PR description
Forward-Port-Of: odoo/enterprise#118929
This update fixes an issue where orders placed at tables in one restaurant POS configuration were sometimes incorrectly matched and merged by other configurations sharing the same floor. This ensures accurate order tracking and prevents duplicate order processing, improving operational efficiency. The change was made as part of a routine bug fix.
Original PR description
When multiple POS configurations share the same restaurant floor, an order placed on a table in one POS could be incorrectly retrieved or merged by another POS selecting the same table. task-id: 6024012 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253473 Forward-Port-Of: odoo/odoo#253116
This update optimizes the timesheet grid by preventing unnecessary reloading of the entire form when focusing on the timer field. By handling focus directly within the timer widget, the system now only updates the specific field, resulting in a smoother and faster user experience. This change improves performance and responsiveness.
Original PR description
This PR prevents re-rendering the whole systray form view when focusing in and out of the timer field. We instead handle the focus in the widget, ensuring only the field itself re-renders. Task-6251180 Forward-Port-Of: odoo/enterprise#118524
This update fixes an issue where multiple lines of text were incorrectly separated into individual code or quote blocks when converting to a single block. The change ensures that selected text is now correctly combined into a single code or quote block, improving the editor's functionality and user experience. This resolves a visual inconsistency and streamlines content formatting.
Original PR description
Steps to reproduce: - Write multiple lines of text. - Select all lines. - Change block type from Normal to Code (or Quote) via the toolbar. Description of the issue: - Notice that each line is now a separate code block (or quote). Cause: - The `setBlock` method currently converts each selected block individually into the target block type, creating multiple blocks when multiple lines are selected. Solution: - For code and quote blocks, `setBlock` now converts only the first selected block into the target type and merges the content of the other selected blocks into it, ensuring a single code/quote block. task-6068930 Forward-Port-Of: odoo/odoo#258331
This update fixes an issue where the duration of calendar events created through the quick-create form wasn't updating correctly after modifying the end time. Now, when you adjust the event's end time in the popover and open the full form, the duration will accurately reflect the new end time, ensuring event details are always precise.
Original PR description
When creating a calendar event by dragging on the calendar view, modifying the end time in the quick-create popover, and then clicking "More Options", the duration shown in the full form is the…
When creating a calendar event by dragging on the calendar view, modifying the end time in the quick-create popover, and then clicking "More Options", the duration shown in the full form is the original drag value instead of the value implied by the user's updated stop. calendar's makeContextDefaults seeds default_start, default_stop, default_duration, and default_allday from the drag extent. In the quick-create popover, changing stop triggers _compute_duration on that record so its duration becomes correct. On "More Options", goToFullEvent extracts a whitelist of fields from the quick-create record as default_X and merges them with the original drag context. https://github.com/odoo/odoo/blob/c82341c503ac/addons/calendar/static/src/views/calendar_form/calendar_quick_create.js#L9-L19 duration is missing from that whitelist, so the merged context still carries the stale default_duration from the drag. In the full form, that default is applied to the duration field and _compute_duration does not run because a default was provided for a stored, writable field. Adding duration to the whitelist forwards the quick-create's recomputed value as default_duration so the full form opens with the correct duration. Steps to reproduce: 1. Open Calendar, drag to create a 2-hour event (e.g. 10:00-12:00) 2. In the quick-create popover, change the end time to 14:00 3. Click "More Options" 4. Check the Duration field in the full form => Duration shows the original drag value (02:00) instead of 04:00 opw-6087449 Forward-Port-Of: odoo/odoo#257294
This update ensures that email backgrounds remain consistent with the selected theme color, even after website palette changes. Previously, a new palette update would overwrite the originally set background color in sent emails. This fix maintains the intended design and prevents unexpected color variations.
Original PR description
When a mass mailing block uses a `bg-o-color-N` theme color class, the mailing's `body_arch` stores the class and `convert_inline` correctly inlines the resolved color into `body_html`, matching the…
When a mass mailing block uses a `bg-o-color-N` theme color class, the mailing's `body_arch` stores the class and `convert_inline` correctly inlines the resolved color into `body_html`, matching the website palette at save time. The class also stays on the element in `body_html`. The stylesheet rule that gives `bg-o-color-N` its color is declared with `!important`. When the website palette is later rebuilt (any change to the primary colors), the new `bg-o-color-N` rule wins over the inline color whenever `body_html` is rendered. So an already-sent mailing reopened in the backend shows the new palette's color instead of the one that was picked, and resaving the mailing bakes that new color into `body_html`. `classToStyle` already does the right thing for the property value. What was missing is dropping the class itself from `body_html` once its style has been inlined, so no future `!important` palette rule can override the inline color. `body_arch` keeps the class, so the editor preview stays theme-aware while editing, but `body_html` is now stable across palette rebuilds. Steps to reproduce: 1. Open Email Marketing and create a new mailing using the Welcome Message template 2. Select a content block, open Customize, set the background to the 5th theme color 3. Save the mailing 4. Open the Website editor and change the 5th primary color to a different value 5. Reopen the saved mailing in the backend => the block's rendered background follows the new website color instead of the one picked at design time Ticket [link](https://www.odoo.com/odoo/project.task/5892350) opw-5892350 Forward-Port-Of: odoo/odoo#267570 Forward-Port-Of: odoo/odoo#253934
This update fixes an issue where order names weren't correctly updated when a customer (partner) was changed on an existing order, particularly in scenarios like Delivery/Eat In presets. The fix ensures that order names accurately reflect the current customer, improving order clarity and data consistency.
Original PR description
When a partner is changed on an order that was previously named after another partner (e.g. in a Delivery/Eat In preset scenario), the order name was not updated. This was because once `floating_order_name` is set, the order is no longer considered a "direct sale", and the logic to update the name from the partner was bypassed. This commit updates `setPartner` to check if the current name matches the name of the previous partner. If so, it updates the name to the new partner's name. task-id: 6000287 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267044 Forward-Port-Of: odoo/odoo#251811
This update corrects a visual issue in German invoices (DIN5008) where columns were misaligned after hiding the item composition. Enabling the 'Show Position Column in Reports' setting resolved this, ensuring invoices print with correctly aligned data. This improves the professional appearance of invoices for our German clients.
Original PR description
| Before | After | |--------|--------| | <img width="1573" height="830" alt="image" src="https://github.com/user-attachments/assets/1960b51b-5c3e-4560-bd09-a20adfe2b381" /> | <img width="1573" height="830" alt="image" src="https://github.com/user-attachments/assets/565d0238-a295-44b7-bdaa-e7c6dd1200cf" /> | Steps to reproduce ================== - Install l10n_din5008,l10n_de - Use a german company - Go to settings - Enable "Show Position Column in Reports" - Go to Invoicing > Sales > New - Add a new section - Click on the three dots - Check "Hide composition" - Add a new line with a product - Confirm the Journal Entry - Print the Invoice PDF => Every column after the description is offset by one opw-5427590 Forward-Port-Of: odoo/odoo#261527
This update resolves an issue where paying a PL supplier without a VAT number on invoices over 15,000 PLN would trigger an error. The fix adds a check to prevent unnecessary verification creation, improving the stability of the bank verification process for PL suppliers.
Original PR description
[FIX] l10n_pl_bank_verification: PL Supplier no VAT When a PL supplier has no VAT and a PL company tries to pay him a bill above 15.000 PLN, there is a traceback. The reason is that there was no check for partner with no VAT, a verification was created every time the field was compute. Forward-Port-Of: odoo/odoo#267888 Forward-Port-Of: odoo/odoo#266878
This update fixes a technical error in Odoo's internal tools that could cause a crash when copying data. The issue stemmed from how Python 3.14 handles weak references during copying, leading to a runtime error. The fix utilizes a more reliable method for copying the data, ensuring stability and preventing future disruptions.
Original PR description
In Python 3.14, iterating over weak references (like `transaction.envs`) can trigger a `RuntimeError: dictionary changed size during iteration`. This happens mostly because the Garbage Collector can remove a weakref while `OrderedSet.copy()` is rebuilding the set via `dict.fromkeys()`. Instead of re-initializing the set by iterating over its elements, we now directly use the dictionary's native `.copy()` method. This atomic operation prevents the GC from modifying the size of the underlying `_map` during the copy. Forward-Port-Of: odoo/odoo#267947
Features or functions removed from Odoo
This update removes a reference to 'Peppol' from the French Payroll (l10n_fr_pdp) module. This change simplifies the configuration and aligns with evolving regulations, ensuring clarity for users and reducing potential confusion. The removal does not impact core functionality.
Original PR description
task-None Forward-Port-Of: odoo/odoo#267650
Code cleanup and technical improvements
This update enhances the way timesheets display floating values by making it easier to customize the formatting options. This change improves the flexibility and adaptability of timesheet reporting, allowing for more tailored views. It's a minor update that ensures consistent and accurate time tracking.
Original PR description
This PR slightly refactors the FloatTime widget to create a getter for the formatting options of its value and popover, which not only is a DRY-positive thing, but also allows us to override it more easily in Timesheets Task-6251180 Forward-Port-Of: odoo/odoo#266743