Thursday, February 19, 2026
27 changes · saas-19.1
Resolved issues and error corrections
This update resolves an issue where the version history comparison displayed incorrectly when using toggle blocks within Knowledge articles. The fix corrects a flaw in the HTML generation process, ensuring accurate comparisons are shown. This prevents potential confusion and ensures data integrity within the system.
Original PR description
There is an issue with the history dialog in very specific scenarios where a toggle (or any similar block) is involved, resulting in an incorrect "comparison" being displayed. How to reproduce: -…
There is an issue with the history dialog in very specific scenarios where a
toggle (or any similar block) is involved, resulting in an incorrect
"comparison" being displayed.
How to reproduce:
- create a new Knowledge article, and replace the title with a toggle block
- in the "content" section of the toggle, write a word, e.g. "word" in the
paragraph.
- exactly below the toggle block, write the exact same word ("word") in a
paragraph.
- save the article
- open the version history
- click on the oldest entry (there should be 2 of them), and click "view
comparison"
Issue:
- the paragraph below the toggle is not shown.
Technical explanation:
- There is an incomplete constraint in `generate_comparison`, which is related
to a trade-off (see `test_replace_nested_divs`), which was supposed to ignore
identical successive `opening` tags. However, it also ignores `closing` tags,
which it shouldn't do (it causes this issue).
- This issue produces invalid html which could also cause owl crashes (in
addition to the incorrect comparison), if embedded components were present in
the invalid html part.
task-5933410
Forward-Port-Of: odoo/odoo#249184This update resolves a minor issue where the website tour wasn't functioning correctly after the initial loading screen refreshed. By waiting for the loading screen to disappear before checking for the 'editor_enable' class, the tour now flows seamlessly for users. This ensures a smoother and more reliable experience.
Original PR description
When the iframe reloading starts, the builder can still have the class `editor_enable`, which breaks the flow of the tour, as the next step is waiting for that class, so we should wait for the loading screen to disappear first, and only then check for the `editor_enable` class. runbot-234504 Forward-Port-Of: odoo/odoo#245688
This update resolves an issue where cron jobs would repeatedly fail after exceeding a timeout threshold. The fix ensures that the cron job counter is correctly reset after a timeout, preventing the job from getting stuck and failing indefinitely. This improves the stability and reliability of automated tasks within Odoo.
Original PR description
CronJobs timed_out_counter is not getting reset when reaching the CONSECUTIVE_TIMEOUT_FOR_FAILURE due to a transaction rollback. This commit introduces a fix to ensure only records with an actual…
CronJobs timed_out_counter is not getting reset when reaching the CONSECUTIVE_TIMEOUT_FOR_FAILURE due to a transaction rollback. This commit introduces a fix to ensure only records with an actual exception tuple pass through in method: 'method_direct_trigger'. Description of the issue/feature this PR addresses: When a cron job reaches the timeout threshold (timed_out_counter >= 3), method_direct_trigger crashes because the ListLogHandler filter matches log records that have exc_info = None. But the original filter only checked hasattr(lr, 'exc_info') which is true for all LogRecord objects. This caused a TypeError when attempting to unpack exc_info (None) on the next line, which rolled back the transaction and prevented timed_out_counter from being reset. Current behavior before PR: Clicking "Run Manually" on a timed-out cron (timed_out_counter >= 3) raises TypeError: cannot unpack non-iterable NoneType object, rolling back the transaction. The timed_out_counter is never reset, leaving the cron permanently stuck. Desired behavior after PR is merged: The filter correctly skips log records where exc_info is None (i.e., non-exception errors like timeouts). method_direct_trigger returns True, the transaction commits, and timed_out_counter is properly reset to 0. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248978
This update adjusts the size of the 'RedirectWarningDialog' in the Odoo web interface. Previously, the dialog was too large, consuming unnecessary screen space. This change ensures a cleaner and more user-friendly experience by aligning the dialog's size with established styling guidelines.
Original PR description
Currently `RedirectWarningDialog` are using `xl` size which is way too big for the content it displays. Dialog sizes were reviewed in commit[1], the RedirectWarning should follow the same styling. task-5477287 [1]: odoo/odoo@01741aa2619998078bd19aca848146ac75c027fc --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where clicking links to specific messages in chatter wouldn't highlight the message correctly. The fix removes a redundant check that was preventing the auto-highlight feature from working when the targeted message wasn't among the initial 30 loaded. This ensures message links function as expected.
Original PR description
PR #223362 removes the early return for checking the origin thread in `highlightMessage()` while PR #234659 adds it again through the FW ports of a fix intended for mailbox (which has not been needed from 19.0 onwards). Since the auto-highlight of message is triggered when the thread is 1st loaded, i.e. has loaded 30 most recent messages, if the targeted message to highlight is not in the loaded messages, then the `highlightMessage()` call would be mistakenly and silently ignored by this early return. This trigger of `highlightMessage()` is done only once, hence the failed attempt to highlight the message. This PR removes reliance on the origin thread. Steps to reproduce the bug: - Send more than 30 messages in a chatter. - Copy the first message link and paste it into the browser to go to the message as a highlighted one. - Thread doesn't jump to the targeted message. task-5929780 Forward-Port-Of: odoo/odoo#249062
This update corrects a visual inconsistency in Odoo's note-taking feature. Previously, checklists and bullet lists had different indentation levels, leading to a misaligned appearance. This change ensures all list types are consistently formatted for improved readability and a more polished user experience.
Original PR description
The checklist has different indents than bullet list and numbered list. It should not be the case. This commit removes the extra indent from checklist entries. Steps to reproduce: - Go to a "To do" note - Create a checklist with indented items - Create a bullet list with indented items => Both list were not aligned task-5916723 Forward-Port-Of: odoo/odoo#249149 Forward-Port-Of: odoo/odoo#247568
This update resolves an issue where tooltips would unexpectedly disappear when a user moved between a parent and child element within the Odoo interface. Previously, the tooltip would be terminated, now it persists as long as the user remains within the parent element's area. This ensures a smoother and more intuitive user experience.
Original PR description
Have a tooltip on a parent. Hover on a child of that parent. Now, leave the child but stay in parent. Before this commit, the tooltip would be killed and never respawn. After this commit, the tooltip is not even killed if we stayed within the parent's physical space. task-5346498 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248857
A recent update to the appointment module caused installation issues due to a problem with how the system checks template data. This fix prevents errors during reinstallations by temporarily skipping the generation of invitation URLs, ensuring the module installs correctly. This resolves a previous installation failure.
Original PR description
Reinstalling the appointment module fails during mail template validation. ### Reproduction Steps 1. Install the `appointment_hr_recruitment` module. 2. Uninstall `appointment`. 3. Reinstall…
Reinstalling the appointment module fails during mail template validation. ### Reproduction Steps 1. Install the `appointment_hr_recruitment` module. 2. Uninstall `appointment`. 3. Reinstall `appointment`. → A template parsing error appears. ### Cause The global `request.env` is bound to the registry active at the start of the request. When reinstalling a module, this registry becomes stale and does not include the models being re-added. During installation, the `mail.template` model performs a test render to validate its XML data. One of the templates calls `_get_interview_invite_url`, which invokes a controller that looks up the `appointment.type` model using `request.env`. Because the registry is stale and does not contain this model, the lookup raises a KeyError and the installation fails. ### Fix Rationale Skip invite URL generation when `install_mode` is set to avoid using the stale `request.env`. opw-5898780 Forward-Port-Of: odoo/enterprise#107650
This update clarifies the visibility of specific fields within the Belgian payroll and fleet modules. Previously, generic fields were consolidated across all countries, but this change restores the original design, keeping BE-specific fiscal logic contained within the Belgian module. This ensures accurate reporting and compliance for Belgian businesses.
Original PR description
This branch only hides BE-specific fields in l10n_be_hr_payroll_fleet (they remain defined/used there and are invisible for non‑BE companies). On master (19.3) those generic fields (can_be_requested, default_car_value) were refactored into hr_payroll_fleet so payroll+fleet consumers across all countries can use them; BE fiscal logic stays in l10n_be_hr_payroll_fleet task-5906656 Forward-Port-Of: odoo/enterprise#106456
This update resolves an issue where the onboarding tour incorrectly targeted disabled calendar slots in the yearly holiday calendar. The fix excludes 'disabled' calendar cells, ensuring the tour reliably selects the first available Thursday, regardless of the server date (specifically impacting years 2027/2028).
Original PR description
Before, the tour attempted to click the “first Thursday” by selecting the first .fc-day-thu element in the DOM. The yearly calendar sometimes renders an initial “empty”/disabled weekday cell (when Jan 1 is Fri/Sat/Sun), so the first .fc-day-thu can be a disabled slot with no actionable element. That makes firstChild de-facto empty and the tour fails (seen reproducibly when the server date is set to years like 2027/2028, for example). Excluding .fc-day-disabled makes the selector target the first real Thursday cell task-5930501 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248275
This pull request reverts a previous change related to how contract templates were being generated. The issue stemmed from a problem with triggering compute fields, which wasn't a critical bug. This change ensures the contract template functionality is working correctly and will be addressed fully in the main version.
Original PR description
This reverts commit 1d5e75900c0326f7b5293ad4cdafcc32d0f662fc. The problem was due to compute fields not triggered. It'll be fixed in master as this is not really a bug. task-5948571 Forward-Port-Of: odoo/enterprise#107791
This update resolves an issue where payroll warnings weren't being properly reflected or updated within the Odoo system. The fix ensures that warning messages are now reliably displayed and can be updated, leading to more accurate and timely payroll reporting. This improves the reliability of financial data.
Original PR description
Forward-Port-Of: odoo/enterprise#107792
This update resolves a technical issue preventing notifications from the signature field. The notification service was missing a necessary declaration, causing an error. This fix ensures that signature field notifications are now correctly processed, improving the user experience.
Original PR description
The notification service is later used in this [method](https://github.com/odoo/odoo/blob/04f3473da52ec74f3955cadd58eb016537497d44/addons/web/static/src/views/fields/signature/signature_field.js#L120), but it was never declared so it was causing an error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248602
This update simplifies the accounting setup for Spanish businesses within Odoo. Previously, there were separate account configurations for sales within Spain, intra-community transactions, and exports. This change removes this unnecessary complexity, aligning with Spanish tax regulations and streamlining the accounting process. It ensures a more straightforward and accurate representation of financial data.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247543
This update resolves an issue where test runs were repeatedly generating unnecessary assets, slowing down the testing process. By adding a specific asset bundle to the pregeneration list, we've streamlined test execution and improved overall efficiency. This change ensures tests run faster and more reliably.
Original PR description
During tests runs, lazy loaded assets are generated on the fly, and eventually multiple hundred of times (i.e. +/- 150 times on runbot). This commit adds the `web_studio.studio_assets` bundle to the pregeneration list to avoid regenerating during tests runs. Forward-Port-Of: odoo/enterprise#107147
This update resolves an issue where closing a POS session would fail if the partner's address (street or postal code) was missing. Previously, an empty address caused an error, now the system gracefully handles this situation, ensuring POS sessions can be completed without interruption. This improves the reliability of the German POS certification process.
Original PR description
Before this commit, if a POS order was created with a partner that had an empty street or postal code, the system would raise an error when closing the POS session. opw-5897334 Forward-Port-Of: odoo/enterprise#106300
This update ensures that orders are accurately synchronized across our system after a payment (online or terminal) is added or removed. Previously, removing an online payment didn't properly update the server, leading to inconsistencies. This fix resolves that issue, guaranteeing accurate order data.
Original PR description
Before this commit, if an order had a terminal payment and an online payment was added accidentally, and then get removed, the terminal payment would get removed from server, while it won't be removed from the UI, resulting in a mismatch between the server and the UI, and the order would no be synced correctly. opw-5911699 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248430
This update ensures the checksum for the l10n_eu_iot_scale_cert module remains consistent with recent changes in the core Odoo system. This alignment is a routine maintenance task to guarantee data integrity and proper functionality of this specific certification process. It's a minor adjustment that doesn't impact users directly.
Original PR description
This PR merely adapts the l10n_eu_iot_scale_cert checksum to align with the changes in the PR https://github.com/odoo/odoo/pull/248855
This update prevents users from selecting multiple accounts simultaneously during the online synchronization process. Previously, users could inadvertently select multiple accounts, leading to potential data inconsistencies. This change ensures accurate and reliable account selection, streamlining the synchronization workflow.
Original PR description
Before this commit, it was possible to click on multiple card when doing the account selection from the wizard. This commit will add a disable feature so that when clicking on the card, other account cannot be clicked. task-5943474
This update resolves an error that occurred when opening 'Sales Order Items' from projects without a linked customer. The fix prevents the system from crashing by disabling the creation of sales orders in these scenarios, ensuring smoother project management workflows.
Original PR description
Currently, an assertion error is raised when opening "Sales Order Items" from a project without a customer. **Steps to Reproduce:** - Install `sale_project` module with demo data. - Create a new project using "Sale Order" project template. - Do not set a customer on project. - Project > Task (Kanban) > Show _Top Menu_ > Show _Sales Order Items_. - Click "**Sales Order Items**". Video Ref: https://drive.google.com/file/d/1xgYHZBvIt5Ep9Gt-wALGIb9f7mj4NPh_/view?usp=drive_link Error: AssertionError **Cause:** The sale order line depends on `default_partner_id` from the context to create a sale order when none exists. When the project has no customer set, this value is missing, causing an assertion failure. **Fix:** This commit returns the list view of SOLs and disables the creation when no partner is set for the project. sentry-7220116560
This update resolves a bug where vertical videos would lose their orientation after a page was saved and reloaded. The fix ensures that the correct video layout (vertical) is maintained when a video is set to vertical and the page is saved. This improves the user experience for video content on our website.
Original PR description
Problem: When setting a video to vertical and saving the page, the alignment is not preserved after reload. Cause: `generateVideoIframe` always sets the `media_iframe_video_size` class, even for vertical videos. As a result, the vertical configuration is lost after saving. Solution: Apply `media_iframe_video_size_for_vertical` when the video is marked as vertical, so the correct layout is preserved after saving. Steps to reproduce: - Drop a Video snippet on a page. - In the selector, enable the vertical option. - Add the video. - Save the page. - Observe that the video is no longer vertical. opw-5941900 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug that occurred when attempting to cancel a Point of Sale order with no items. The fix ensures the system handles empty orders gracefully, preventing errors and improving the user experience. The button to cancel orders is now disabled when no items are present.
Original PR description
Steps: --- - Open a Restaurant session. - Open a table with no order. - Click the control button and click Cancel Order. Issue: --- - A traceback occurs when cancelling an order. Cause: -- - The order is cancelled first, and then `isSelectedLineCombo` tries to access the current order, which is already null. Fix: --- - Safely check for the selected order before accessing combo data. - Disable the Cancel Order button when there are no order lines. task-5934004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update addresses an error that occurred when creating invoices with negative tax factors. The issue stemmed from a filtering process within the accounting module that resulted in an empty list, causing a system error. To ensure smooth invoice creation, we've reverted the recent changes that introduced this problem.
Original PR description
Steps to reproduce: - Install `account` module - Taxes > open any existing tax > Set `factor_percent(%)` of repartition lines to negative(eg:…
Steps to reproduce: - Install `account` module - Taxes > open any existing tax > Set `factor_percent(%)` of repartition lines to negative(eg: [Image](https://www.awesomescreenshot.com/image/58851592?key=ce0017bb467a583ad020f33d21d4d8ba)) - Create a Invoice and add tax in move line and save Traceback: `IndexError: list index out of range` We are getting `factors` as empty because `target_factors` from `_add_accounting_data_to_base_line_tax_details` is empty. This happens because, in `tax_reps`, we are filtering repartition lines with a `factor` greater than `0`. However, when the `factor` is less than `0`, `tax_reps` becomes empty, which leads to the error. We are reverting this PR: https://github.com/odoo/odoo/pull/234334 because it prevents the validation error from being raised when there is a negative value in the repartition lines. [factors]: https://github.com/odoo/odoo/blob/de056cc784a3bbe2575fd3c9e81ca62e73c362d4/addons/account/models/account_tax.py#L1641 [tax_reps]: https://github.com/odoo/odoo/blob/de056cc784a3bbe2575fd3c9e81ca62e73c362d4/addons/account/models/account_tax.py#L2429-L2431 sentry-7102210210 Forward-Port-Of: odoo/odoo#249220
This update fixes a minor error in the account return processing logic. The incorrect configuration of check codes was resolved, preventing unintended record processing. While previously shielded by a safeguard, this change ensures accurate return handling going forward.
Original PR description
the check codes to ignore was wrongly defined, leading to contain records instead of 'code', plus having the exact opposite of what it was supposed to contains, i.e. codes that aren't supposed to be run at the current state of the return. However, it didn't have any impact functionally because it was "protected" by the function _should_run_checks(), which might disapear in the future. Forward-Port-Of: odoo/enterprise#107158
This update fixes a visual issue where Telugu characters in Odoo's PDF reports appeared as black squares. By adding a specific font for Telugu, the system now correctly renders Telugu text within these reports, ensuring accurate and consistent reporting for Telugu-speaking users. This resolves a technical limitation related to PDF generation.
Original PR description
SaaS 19.0 QWeb PDF reports renders Telugu characters as black squares because the default font stack has no Telugu coverage on the server side. While some environments may display Telugu via locally installed fonts, wkhtmltopdf requires explicit webfont coverage to embed the glyphs in the PDF. Add a Noto Sans Telugu @font-face rule with the Telugu unicode range so report rendering can fetch and embed a Telugu-capable font when needed. This mirrors the existing mechanism used for Arabic/Hebrew/Cyrillic. opw-5886157 (related ticket) https://github.com/odoo/odoo/pull/32312 (related PR) I have attached the font files that needs to be uploaded to cdn in NotoSansTelugu.zip. [NotoSansTelugu.zip](https://github.com/user-attachments/files/25395294/NotoSansTelugu.zip) --- Forward-Port-Of: odoo/odoo#249320
This update addresses a technical issue related to the transmission of Swiss payroll data (LPP). Specifically, it ensures the correct inclusion of the 13th month salary component in the reporting calculations, aligning with updated Swiss tax regulations. This ensures accurate and compliant reporting for our Swiss clients.
Original PR description
Forward-Port-Of: odoo/enterprise#107908
This update resolves an issue where the DeviceSelect button's styling was inconsistent, preventing it from correctly reflecting its state. The fix adds a standard styling class to ensure the button's appearance aligns with the rest of the application and provides a more polished user experience.
Original PR description
This PR fixes an issue related to a custom border applied on the `<DeviceSelect>` button. Prior to this commit, the buttons used a custom border handled via `border border-secondary` which will prevent the default border that comes with our buttons to be applied. The visual result is a default button but with a custom border which won't change according to the state. While fixing this, we also add a `.btn-secondary` class on these buttons to improve consistency and ensure they get styled correctly. task-5921830 X-original-commit: [256de110fc73ce9dec640db8b6e73a9d519ee5ec](https://github.com/odoo/odoo/commit/256de110fc73ce9dec640db8b6e73a9d519ee5ec) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr