Wednesday, April 8, 2026
18 changes · 19.0
Resolved issues and error corrections
This fix prevents an internal Studio customization entry from being treated like a regular installed app when preparing web assets. It avoids crashes that could stop automated tours from running after users customize views with Studio.
Original PR description
Step to reproduce: - start a fresh db, install studio and pos - using studio, edit any view (add or remove a field) - run any tour Observation: - we are not able to run any tour Traceback ``` File…
Step to reproduce:
- start a fresh db, install studio and pos
- using studio, edit any view (add or remove a field)
- run any tour
Observation:
- we are not able to run any tour Traceback
```
File "/home/odoo/odoo/codebase/odoo/18.0/odoo/addons/base/models/ir_qweb.py", line 2703, in _get_lazy_bundles_from_js
for fname in glob.iglob('**/static/src/**/*.js', root_dir=modroot, recursive=True):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/glob.py", line 46, in iglob
root_dir = os.fspath(root_dir)
^^^^^^^^^^^^^^^^^^^
TypeError: expected str, bytes or os.PathLike object, not bool
```
Cause:
- `_get_lazy_bundles_from_js` fetches module path for all installed module in addons
https://github.com/odoo/odoo/blob/05d0944a7640e196db989039140ae5ddb12152ac/odoo/addons/base/models/ir_qweb.py#L2686-L2697
- in case we have a view edited, we get the `studio_customization` as installled module, which doesn't have any path in addons. i.e. False
Fix:
- filter out such pseudo-modules from the list
Note: this is not a reported issue, i stumbled across it, hence made a fix
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#257806A small configuration issue in the Project app was corrected so Milestones actions remain valid during database upgrades. This helps avoid upgrade interruptions without changing how users work with milestones.
Original PR description
Add an empty `python_method` field to the Milestones embedded actions. This is necessary to satisfy the `_check_only_one_action_defined` constraint during database upgrades. The `ir.embedded.actions` model enforces an XOR constraint between `action_id` and `python_method`, preventing both fields from being set simultaneously. Related PR: https://github.com/odoo/odoo/pull/254102 task-5993183 Forward-Port-Of: odoo/odoo#254106
The HTML editor toolbar now appears in the right place when users select a table column. This prevents confusion while editing tables and makes formatting selected cells more predictable.
Original PR description
**Current behavior before PR:** Steps to reproduce: - Create a 3 x 3 table. - Select 3rd column and wait for toolbar. Currently, the toolbar is positioned at the start of the table even when the last column is selected. This happens because selecting cells in the 3rd column creates a DOM selection range that starts at the first cell and ends at the last cell of the column, traversing all intermediate elements. As a result, browser's range rectangle does not match the actual custom-selection rect. **Desired behavior after PR is merged:** Now, Toolbar is positioned correctly above the custom selected cells. task-5935587 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257779 Forward-Port-Of: odoo/odoo#248964
The search panel now removes the “Too many items to display” warning once a user applies filters that reduce the results below the display limit. This prevents stale error messages and lets users see the corrected list without confusion after refreshing search results.
Original PR description
Have a search view with searchpanel having a filter or a category with a limit. For exemple in sale.order:
```
<searchpanel>
<field name="partner_id" icon="fa-filter" groupby="parent_id" limit="80" enable_counters="True"/>
</searchpanel>
```
On a database with a lot of data, in the category partner of search panel, there is an error 'Too many items to display.'.
Now in the search view, add a filter to restrict the number of records, and hence the number of partners in the search panel below the limit.
Before this commit, the error was still displayed. Now, it isn't, and the data are properly displayed.
Closes #257749
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#257908
Forward-Port-Of: odoo/odoo#257821This fixes an issue where user names shown next to avatars in Mail-related views could be squeezed to zero width and therefore not visible. The change improves readability in affected avatar fields without changing underlying business workflows.
Original PR description
This commit fix the width of the displayName option of the Avatar component which was fixed to zero (bootstrap class 'w-0') Task-5122979 Forward-Port-Of: odoo/odoo#257869 Forward-Port-Of: odoo/odoo#257587
This fix stops history records in the web editor from being written to directly, avoiding failures during duplication or updates. It helps keep editor history data consistent and reduces the chance of errors when copying content.
Original PR description
This commit prevent direct write to history, also, removes it from copy_data as it would fail anyway when trying to write the history Forward-Port-Of: odoo/odoo#220239 Forward-Port-Of: odoo/odoo#217167
Spanish Facturae invoice generation now handles invoice lines that do not have a tax set. This prevents an error that could block users from creating electronic invoice documents for valid tax-free or untaxed lines.
Original PR description
Issue: Attempting to generate facturae document for an invoice without a tax set on one or more line resulted in an IndexError. Solution: adding a check that prevents the function from trying to build tax values when there is no tax on the line. task-none --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256819
This fix prevents Point of Sale from crashing when an Epson printer IP address has not been configured. It helps keep printer-related setup and usage more reliable by safely ignoring missing or invalid IP address values.
Original PR description
When `epson_printer_ip` is not set, `isPrivateIp` would crash with "ip.split is not a function" because the value is undefined/null. Add an early return of false when the argument is falsy or not a string. opw-6067382 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes cursor navigation in the HTML editor when using the up and down arrow keys around code blocks. Users can now move between paragraphs and code blocks more predictably, reducing editing frustration and misplaced cursor positions.
Original PR description
### Description of the issue/feature this PR addresses: - When navigating with ArrowUp/ArrowDown around a code block, the caret could end up in an unexpected position. - Arrow navigation from start or end of a paragraph did not correctly enter the adjacent code block. - Arrow navigation from the start or end of a code block did not correctly move the caret to the previous or next sibling block. ### Desired behavior after PR is merged: - Paragraph start + ArrowUp moves to the end of the previous code block. - Paragraph end + ArrowDown moves to the start of the next code block. - Code block start + ArrowUp moves to the end of the previous paragraph. - Code block end + ArrowDown moves to the start of the next paragraph. task-5384549 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
POS and self-order email templates now use the store company's timezone instead of the sending user's timezone. This prevents customer emails from showing UTC times when sent by the public user, making order and pickup information clearer.
Original PR description
The tz variable in POS email templates was set using object.env.user.tz, which resolves to UTC when emails are sent by the Public User. Fix by using `object.company_id.partner_id.tz` instead, which reliably reflects the store's timezone regardless of which user triggers the email. opw-6052244 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The link settings gear icon now appears only when editing website content, instead of showing in other editors where those advanced options do not apply. This reduces confusion for users working in areas like mass mailing or project descriptions while keeping website link controls available where needed.
Original PR description
*:html_editor Before this commit: The link popover displayed the gear icon in all editors, including Mass Mailing and Project Description, where advanced link options are not relevant. After this commit: The gear icon is shown only in the Website, ensuring that advanced link options are available exclusively in the website context. task-5112817
This update fixes an issue where the helpdesk website displayed all published knowledge articles, regardless of which team the helpdesk was associated with. Now, the website only shows articles linked to the specific helpdesk team or its related teams, improving the user experience and ensuring relevant information is presented.
Original PR description
To reproduce: ============= - create multiple published knowledge articles - link one of them to a helpdesk team - check the help page on website -> all public articles are listed Problem: ======== when fetching the articles to list, we don't take into account the team configuration and we list all the published articles. Solution: ========= fetch only the article linked to the team or its children. opw-5913355 Forward-Port-Of: odoo/enterprise#113025 Forward-Port-Of: odoo/enterprise#109361
This update resolves a crash in the Gantt chart view that occurred when opening the chart on days with Daylight Saving Time transitions. The fix addresses an issue where incorrect time calculations led to a data error, causing the chart to malfunction. This ensures the Gantt chart remains stable regardless of time zone settings.
Original PR description
Steps to reproduce 1. Set your timezone to Asia/Beirut 2. Open a Gantt view (e.g. Planning) in week scale on the last Sunday of March (DST spring-forward day) Issue Beirut's DST spring-forward makes that day only 23 hours long. luxon's .diff() works in absolute time, so diffColumn() returned a float (e.g. 6.958 instead of 7 for a full week). Array(6.958) throws RangeError: Invalid array length, crashing the entire gantt view. Forward-Port-Of: odoo/enterprise#112840
This update prevents rental products from displaying the 'out of stock' ribbon on the website when their quantity is low. This change ensures a more accurate representation of product availability for rental customers, aligning with the time-based stock management of rental products. The fix corrects a technical issue where the system incorrectly flagged rental products as out of stock.
Original PR description
Currently, when a rental product's quantity on hand drops to 0, the out-of-stock ribbon is displayed on the website for that product. Steps to produce: --- - Install the `eCommerce Rental with Stock…
Currently, when a rental product's quantity on hand drops to 0, the out-of-stock ribbon is displayed on the website for that product. Steps to produce: --- - Install the `eCommerce Rental with Stock Management` module. - Create a rental product and set Quantity On Hand to 1. - Under the Sales tab, disable `Sell when Out of Stock`. - Under the Rental Prices tab, add pricing. - Go to `website > ecommerce > products > product ribbons`. - Open `out of stock` ribbon > set assign as `when out of stock`. - Create and Confirm a rental order for that product and validate the pickup. - The product's Quantity On Hand drops to 0. - Opening the product on the website Observation: --- - The product shows the out-of-stock ribbon. Cause: --- - At [1], the or condition evaluates to True because the ribbon is configured as `when out of stock`, `Sell when Out of Stock` is disabled under the Sales tab, and `_is_sold_out` also returns True since the quantity dropped to 0 after the pickup was validated. As all conditions are met, the ribbon is returned and displayed without ever checking whether the product is a rental. Skip the out-of-stock ribbon assignment for rental products, since their stock availability is time-based. [1]: https://github.com/odoo/odoo/blob/12dd03fb678870ddd3f1f8dca66aa3f934aa7985/addons/website_sale_stock/models/product_ribbon.py#L21-L28 opw-6081483 ---
This update fixes an issue related to how default customer partners are assigned when creating orders in Odoo Point of Sale for specific countries (Chile, Colombia, Ecuador, and Guatemala). The change centralizes partner assignment, ensuring more consistent order creation across these localized versions. This improves order processing reliability.
Original PR description
Replace the `createNewOrder()` override with `getDefaultPartnerId()` in l10n_cl_edi_pos, l10n_co_edi_pos, l10n_ec_edi_pos and l10n_gt_edi_pos. The default partner assignment is now handled centrally in `point_of_sale`'s `createNewOrder()`. opw-6077656
This update fixes a layout issue in the Italian Libro Giornale PDF report. When accounts with long names are used, the report's column width expands, causing font shrinkage and excessive spacing. The change adds a CSS class to manage column width, resulting in a cleaner and more readable PDF report.
Original PR description
When generating the Libro Giornale (IT) PDF report with an account that has a very long name, the column expands excessively and break the layout. Steps to reproduce: - With an IT company setup - Have an account with a very long name - Create an invoice using the account - Open Accounting / Reporting / Audit Reports / Journal Audit - Select variant "Libro Giornale (IT)" - Print PDF Issue: The long account name makes the column excessively large. As a result, the font shrinks to fit the page width, leaving wide gaps between lines. **before patch** <img width="794" height="493" alt="screenshot_047" src="https://github.com/user-attachments/assets/6faa5b57-9c60-41cb-9200-003a50019180" /> **after patch** <img width="793" height="553" alt="screenshot_046" src="https://github.com/user-attachments/assets/e97c8948-410b-4201-83c3-04173220d9ce" /> opw-5457103 Forward-Port-Of: odoo/enterprise#112743
This update corrects a stability issue within the expense wizard for Stripe integration. By switching to a temporary model type, the wizard now functions more reliably, preventing potential errors and ensuring smoother expense processing. This change focuses on internal improvements to the Odoo Enterprise system.
Original PR description
`HrExpenseStripeTestPurchaseWizard` is currently using a normal `Model`, but it's a wizard, so use a `TransientModel`.
Miscellaneous changes
This pull request appears to merge the latest updates from the main Odoo 19.0 branch without describing a specific business feature or fix. It likely keeps the branch aligned with upstream changes, reducing divergence and helping future updates integrate more smoothly.
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