Friday, May 8, 2026
22 changes · saas-19.1
Enhancements to existing features
This update ensures the demo data for Brazil (l10n_br) in Odoo is current and reliable. The changes to product and company information improve the accuracy of testing and demonstrations for this specific Odoo localization. This is an important improvement for developers and consultants working with the Brazil tax compliance features.
Original PR description
Updated Brazil Product and company demo data to ensure accurate testing task-6159933 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261636
This update improves the Brazil demo data within Odoo Enterprise to ensure accurate testing of the l10n_br_avatax module. The changes include updated product and company data, aligning the demo environment with current tax regulations for Brazil. This ensures developers and testers can reliably evaluate the module's functionality.
Original PR description
Updated Brazil Product and company demo data to ensure accurate testing task-6159933 Forward-Port-Of: odoo/enterprise#115361
Resolved issues and error corrections
This update resolves a problem preventing the demo data for the MRP Subcontracting module from loading correctly in Odoo 19. The fix ensures that the correct product template record is used, which was previously mismatched, causing an error. This ensures demo data loads properly for testing and training.
Original PR description
Steps to reproduce: - Initialize an empty database with demo data enabled - Install mrp_subcontracting Problem: The product.product `product_delivery_02` record does not share the same #ID as the product.template `product_delivery_02_product_template` record. This leads to an error when loading the demo data. This errors only started with Odoo v19. Solution: Use the right product.template `product_delivery_02_product_template` record. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262949
Features or functions removed from Odoo
This update removes outdated code from the welcome page related to managing call streams. Previously, the welcome page handled stream cleanup, but this functionality was moved to another part of the system. Removing this unused code simplifies the system and improves efficiency.
Original PR description
**Purpose of this PR:** Since odoo#228382, the welcome page no longer manages call preview media streams itself. `CallPreview` now handles both stream cleanup on destroy and the `getUserMedia` race that could happen when leaving the page while permission was still pending. The `isClosed` flag was introduced in odoo#179690 to guard that race in `WelcomePage`, but it became obsolete after the refactor and the assignment was not cleaned up. This commit removes the unused assignment from the welcome page. Forward-Port-Of: odoo/odoo#263216
This update resolves a visual bug where the "Add to Cart" button appeared squeezed on product pages when in edit mode with specific image and purchase style settings. The fix prevents a click event from being triggered when the spacebar is pressed, ensuring the button's correct size and functionality.
Original PR description
This code fixes a bug related to the size of the “Add to Cart” button. To reproduce the bug, you need to be on a product page in edit mode. In this mode, you must set the Image Area to 33 and the purchase style to Large. You will see that the “Add to Cart” button is squeezed. The bug occurs because, in edit mode, a new span container is added around the button to indicate that it can be edited. The purpose of the span was to prevent a click event from being triggered when pressing the space key. The fix removes this span and adds a listener to capture space key presses, allowing a real space character to be inserted instead of triggering a click. find-when-working-on-task-6147939 **Before** <img width="1918" height="552" alt="before" src="https://github.com/user-attachments/assets/1ef6e793-45d4-4c6b-ab2b-cdd4ace5381f" /> **After** <img width="1913" height="1054" alt="after" src="https://github.com/user-attachments/assets/b611834e-3414-4b37-af9e-c0942c6cb05b" />
This update corrects a minor error in the automated tests for our Point of Sale (POS) system. A typo was identified in the test assertions, which was causing intermittent failures. The fix ensures the tests run reliably and accurately reflect the POS order flow.
Original PR description
Correct a typo in `test_01_order_flow` assertions. `pdis_order1` was reassigned multiple times; the second assertion should use `pdis_order2`. Task-6065459 Forward-Port-Of: odoo/enterprise#116424 Forward-Port-Of: odoo/enterprise#111917
This update resolves a technical issue that was causing a test to fail in our self-order system. The fix ensures that all time slots are generated for the current day, preventing errors related to time-dependent testing. This improves the reliability of the self-order process.
Original PR description
Before this commit: = - The test test_slot_limit_orders created slots only for the first day of the week (Monday). - The test scenario includes a slot at "18:00". - On Mondays, the test fails between 18:01 and 23:59 because the "18:00" slot no longer exists for the current day. - On other days, the test passes since slots are generated for the upcoming Monday. After this commit: = - Freezed the time to current day at "00:00" so that slot list can have every slot for that day. task-6043739 runbot-241836 Forward-Port-Of: odoo/odoo#254775
This update fixes a visual inconsistency in the Point of Sale interface. The styling of product and combo product cards has been unified, creating a more consistent and professional look across the product screen and combo configuration popup. This improves the overall user experience for sales staff.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
This update resolves an issue where the 'Reconcile' button on the bank statement dialog wouldn't work correctly on smaller screens (like mobile devices). The fix ensures the correct data is passed to the dialog component, preventing a validation error. This improves usability for users accessing the system on mobile.
Original PR description
When clicking on the "Reconcile" button of a bank statement line on a small screen (ex: mobile) threw an OwlError "Invalid props for component 'KanbanController': unknown key 'bankRecInfo'". BankRecSelectCreateDialog injected `bankRecInfo` into `baseViewProps`, which is spread into the embedded view regardless of its type. On desktop the embedded view is a list (patched to accept `bankRecInfo`), but on small screens SelectCreateDialog falls back to a kanban view, whose controller does not declare that prop, triggering Owl's props validation. Only forward `bankRecInfo` when the inner view is a list by overriding `viewProps` instead of mutating `baseViewProps`. Steps to reproduce: - Enable the developer mode. - Open Bank Reconciliation. - Resize the window to a small/mobile width (or open from a mobile device). - On a statement line, click the "Reconcile" button to open the dialog. - OwlError is thrown opw-6070573 Forward-Port-Of: odoo/enterprise#114298
This update resolves an issue where internal transfers using multi-step routes were incorrectly flagging a missing delivery carrier. The fix ensures that carrier validation is skipped for internal movements, streamlining the process and preventing unnecessary errors. This improves the efficiency of internal stock transfers within the RO company.
Original PR description
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method…
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method `_compute_l10n_ro_edi_stock_enable` was overridden to check for `not picking.batch_id` However, for multi-step delivery routes, internal pickings still triggered the carrier validation, as no check on the `picking_type` was performed ### Steps to reproduce: - Install `l10n_ro_edi_stock_batch` with demo data and switch to RO Company - In Settings, enable `Multi-Step Routes` - Set the RO Warehouse's Outgoing Shipments to `Pick then Deliver (2 steps)` - Create a Product (e.g. RO product) - Create a Delivery Method (e.g. RO Delivery, Partner: Any, Delivery Product: RO Product) - Create and Confirm a Sale Order for the RO Product - From the Sale Order, click Delivery and validate the picking ### Before the fix, internal transfers raised: `The picking RO Co/PICK/00001 is missing a delivery carrier.` enterprise-PR: https://github.com/odoo/enterprise/pull/114166 opw-5925087 Forward-Port-Of: odoo/odoo#263036 Forward-Port-Of: odoo/odoo#257293
This update resolves an issue preventing users from modifying warehouse routes in the Romanian (RO) version of Odoo. The fix addresses a bug where an error occurred when changing routes, blocking modifications. This ensures that users can correctly manage incoming and outgoing shipments within their warehouses.
Original PR description
### Issue: When changing the routes of a Romanian warehouse, an error is raised, blocking any modification of multi-step routes ### Cause: The code attempts to access `in_type_id` from `warehouse_data` However, when updating routes, `warehouse_data` is empty in the method `_create_or_update_sequences_and_picking_types` This leads to a crash because the code assumes that `warehouse_data` always contains `in_type_id` and `out_type_id` Additionally, even if the data were present, it would result in creating duplicate `stock.picking.type` records ### Steps to reproduce: - Install `l10n_ro_saft_stock` with demo data and switch to `RO Company` - Enable `Multi-steps Routes` in Settings - Try to modify Incoming or Outgoing Shipments on a warehouse - When saving, the following error is raised: "Oh snap! in_type_id" odoo-pr: https://github.com/odoo/odoo/pull/257293 opw-5925087 Forward-Port-Of: odoo/enterprise#114166
This update fixes a bug in the HTML editor that prevented the cursor from correctly positioning within newly created code blocks. Previously, the editor created an invisible text node during shortcut extraction, which was then removed during code block conversion. Now, the editor directly deletes the selection, eliminating this issue and ensuring the cursor moves correctly.
Original PR description
#### Description of the issue this PR addresses: - In shortcut plugin, extractContent leaves an empty text node at block start - When converting to a code block, that invisible node is removed, so the editor cannot restore the cursor correctly #### Desired behavior after PR is merged: - Delete the selection directly instead of extracting text - This prevents creating the invisible empty node #### Steps to reproduce: - Type `1. ` to create a list - Immediately insert `/code` - Cursor does not move inside the code block task-6169180 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261799
This update resolves issues preventing order validation and report downloads within the l10n_co_edi_pos module. The fix addresses a problem where data was being incorrectly formatted during export, leading to errors. This ensures reliable POS data generation for DIAN compliance.
Original PR description
Steps to reproduce: --- - Install `l10n_co_edi_pos` and configure it. - Set the POS Serial Number in the POS configuration. - Open a POS session, create an order, and validate it. Issues: --- 1. A traceback occurs while validating the order. 2. After fixing the above issue, another traceback occurs when downloading the Sales Details report from the backend. Causes: --- 1. During UBL DIAN data generation, the `name` field is overwritten with `pos_order.l10n_co_edi_pos_name`, which can be empty. 2. `l10n_co_edi_pos_serial_number` is accessed on an invalid type (ID/list instead of a recordset). Fixes: --- - Preserve the original `name` if `l10n_co_edi_pos_name` is not set. - Ensure `config_ids` is always a recordset and safely compute serial numbers using `mapped`, joining unique values. task-6051285 Forward-Port-Of: odoo/enterprise#111306
This update resolves an issue in the LDAP authentication unit test that was causing temporary data inconsistencies. Switching to an `HttpCase` simplified the test and ensures accurate results. The test is being revived to accommodate a new bug fix, improving the stability of the authentication process.
Original PR description
The unit test is tagged `-standard` and `database_breaking` because it was leaving left overs in the database. Using an `HttpCase` over a `BaseCase` solves that issue in addition to make the code way simpler. We want to resurrect this unit test class because we plan to add another unit test in that class for a bug fix. Forward-Port-Of: odoo/odoo#262288 Forward-Port-Of: odoo/odoo#261743
This update fixes a display issue in push notifications for inbox users. Previously, notifications contained escaped characters, resulting in a broken message. Now, users receive the full, correctly formatted notification content, ensuring a better user experience.
Original PR description
**Steps to reproduce:** Log in as admin and ensure notifications are handled in Odoo. Enable push notifications and the 'Task Created' subtype for a project. As a second user, create a new task in…
**Steps to reproduce:** Log in as admin and ensure notifications are handled in Odoo. Enable push notifications and the 'Task Created' subtype for a project. As a second user, create a new task in that project. **Current behavior before PR:** admin received escaped content in the push notification (e.g., `A new task has been created in the "Project Name" project`) **Cause:** For inbox users, we send a client-side push notification using `previewText` as the body. This field returns a markup object containing escaped characters, which are converted to a string when passed to the notification body. Since the notification body only accepts plain text, these characters are displayed literally to the user. **Desired behavior after PR is merged:** admin receives the unescaped content in the push notification. (e.g., `A new task has been created in the "Project Name" project`) task-5112810 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263187 Forward-Port-Of: odoo/odoo#240331
This update resolves an issue where users couldn't edit documents after removing their ownership, even with editor permissions. The fix allows editing from the company folder and enables users to correct incorrect document ownership, improving document management flexibility. It also allows moving non-folder documents from the company root.
Original PR description
How to reproduce: - Login as Marc Demo (not as admin) - Upload a document at the root of "My Drive" - Remove the owner of this document The document is no longer editable in the details view panel while the user has been added as editor. To solve the problem, we change the readonly condition in the detail panel to allow edition in the company folder also (even if not a manager). We also change the following: - we allow to move non folder document from company root folder (user_can_move) while the "protection" was applied also to non folder before. - we change the condition to update the owner. Now when there is no owner, a user with edit permission can change it. This allows to correct a wrong manipulation. Task-5881531 Forward-Port-Of: odoo/enterprise#106192
This update resolves an issue where payment reminders wouldn't display correctly when the 'Payment' module wasn't installed. The fix ensures the system checks for the necessary 'payment.method' model before attempting to use it, preventing template rendering errors. This ensures payment reminders function properly regardless of the installed modules.
Original PR description
Repro steps: 1. Initialize a new DB 2. Install account_followup module without payment module 3. Go to Email templates > Payment reminder 4. Click on Preview You will get an error Failed to render QWeb template for Mail Template: 'Payment Reminder' (ID: 9) Target Model: res.partner Language context: en_US Error: Error while render the template KeyError: 'payment.method' Root cause: The method `_show_pay_now_button` that was being called in the template email_template_followup_1 was using self.env['payment.method'] even tho payment module is not a dependency of account_followup Fix: The introduced fix ensures that 'payment.method' model exists before attempting to use it build_error-243030 Forward-Port-Of: odoo/enterprise#116673 Forward-Port-Of: odoo/enterprise#116079
This update resolves a technical problem that prevented users from correctly booking appointments with multiple seats and capacity limits when scheduling was set to 'flexible'. The fix ensures that the booking system accurately handles these complex appointment types, improving the overall user experience.
Original PR description
### Steps to reproduce: - Download "Appointment" and "Website" - Configure an appointment to be booked by resource with multiple seats and manage capacity - Set the schedule to be flexible and configure valid time slots - Go to the booking page and select the number of participants > Traceback: cannot unpack non-iterable bool object ### Cause of Issue: The `_get_appointment_slots` method unpacks the `appointment_slots_force_month` directly: https://github.com/odoo/enterprise/blob/4ca3dddaeadeb6c937d555cc4da8fb4bb61fea35/appointment/models/appointment_type.py#L871 Since the `appointment_slots_force_month` value was explicitly set to `False` in https://github.com/odoo/enterprise/blob/4ca3dddaeadeb6c937d555cc4da8fb4bb61fea35/appointment/controllers/appointment.py#L1063-L1070 the unpacking operation failed because it tried to unpack a boolean instead of a tuple. opw-6197653 Forward-Port-Of: odoo/enterprise#116613
This update ensures the 'Back on X' message for employees on holiday is now consistently displayed in both the standard and compact versions of the discussion sidebar. Previously, this information was only visible in the larger sidebar view. This enhancement provides a more complete and user-friendly experience for viewing team availability.
Original PR description
Before this commit, the "Back on X" text below chats of people that are away was only displayed in non-compact sidebar. This comes from `xpath` that targets only the non-compact sidebar. This commit fixes the issue by adding the `xpath` for the compact sidebar. Task-6197362 Before / After <img width="247" height="254" alt="before" src="https://github.com/user-attachments/assets/da149668-7649-479a-baca-c3df9f6600b6" /> <img width="240" height="279" alt="after" src="https://github.com/user-attachments/assets/072405d1-b050-4314-933f-31f1c1c30ad4" /> Forward-Port-Of: odoo/odoo#263071
This update corrects a bug in how tax reports calculate balances. Previously, a new tax tag would incorrectly include a leading dash, causing reports to always show a zero balance. Now, the system correctly handles new tax tags, ensuring accurate reporting of tax amounts.
Original PR description
When writing a new formula on a tax_tags expression, if the tag is not shared by other expressions, the tag should be renamed accordingly. Before this commit, when the new formula started with a '-' sign, the tag ended up with that same '-' at the beginning of its name. This was wrong: from 19.0 on, a tax tags formula starting with '-' means we want to negate the balance of the move lines having that tag. Because of that, when computing the report, the expression would look for a tag without the '-' in its name, not find it and essentially always compute a result of 0. Forward-Port-Of: odoo/odoo#262059
This update corrects a misleading validation error that appeared when using the translation button on Sale Order Templates, particularly within O2M views. The fix ensures the system correctly handles nested records, preventing unnecessary error messages and improving the user experience. This change ensures users can accurately translate product descriptions without confusion.
Original PR description
Steps to reproduce: * Enable multiple languages * Go to Sale Order Templates and create a new template * Add a product line, then click the translate button on the description field * A confusing…
Steps to reproduce: * Enable multiple languages * Go to Sale Order Templates and create a new template * Add a product line, then click the translate button on the description field * A confusing validation error appears for missing `sale_order_template_id` Issue: * Instead of highlighting the missing required fields on the sale order template form view, it raises a misleading validation error on `sale_order_template_id` Cause: * `useTranslationDialog` always attempts to save the passed record directly. In O2M list views, the field can belong to a nested relational record, so the correct behavior is to save the root record instead. Affected Version: 17.0 Before: <img width="1919" height="1014" alt="image" src="https://github.com/user-attachments/assets/cd61381d-289a-4df4-bdf2-7881fa851939" /> After: <img width="1920" height="887" alt="image" src="https://github.com/user-attachments/assets/5218c74b-c024-4994-b816-cb7ae69b420f" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262988 Forward-Port-Of: odoo/odoo#262755
The budget report now accurately displays data without duplicate analytic lines. This issue stemmed from a recent performance optimization of the report's underlying query, which inadvertently created duplicate entries. The fix ensures unique and reliable budget reporting.
Original PR description
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item…
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item (linked to Analytic Account A). - Open the budget report and remove the default "open budget" filter. Duplicate amounts appear in the pivot view and duplicate lines appear in the list view. #### Cause: In #104299, the query in `_get_aal_query` was refactored for performance to avoid a single query with an OR condition in the LEFT JOIN. It was replaced by two separate queries combined with `UNION ALL`. This caused some lines to be captured by both queries, resulting in duplicates in the final report. #### Fix: Use three separate queries, each with specific filter conditions to guarantee unique results: Q1 - Analytic lines with no matching budget line. Q2 - Analytic lines matched to a budget line with no company (null-company). Q3 - Analytic lines matched to a company-specific budget line. OPW-6051696 Forward-Port-Of: odoo/enterprise#116612