Friday, April 17, 2026
18 changes · saas-19.2
Resolved issues and error corrections
This update corrects a previous oversight that allowed team members to modify user information (like email and phone). It ensures that user data is managed through the correct channels, improving data accuracy and security. This change aligns with best practices for user management within Odoo.
Original PR description
Team member is not the place to edit user information like email and phone. Oversight of odoo/odoo#240202.
This update fixes a visual issue where clickable scorecards in the spreadsheet dashboard were displaying a default arrow cursor instead of a pointer. Now, scorecards that act as buttons correctly show a pointer cursor on hover, improving the user experience and ensuring consistent interaction.
Original PR description
## Description of the issue/feature this PR addresses: Current behavior before PR: - The scorecard case was missed when replacing hasOdooMenu with hasOdooLink. - Clickable scorecards were showing the default arrow cursor instead of a pointer on hover. Desired behavior after PR is merged: - Scorecards now correctly use hasOdooLink to determine if they are clickable. - The pointer cursor is displayed on hover when the scorecard acts as a button in dashboard view. Task: [6116584](https://www.odoo.com/odoo/2328/tasks/6116584) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258896
This update restores the vendor bill auto-complete feature that was temporarily disabled. Previously, users experienced issues with the system's ability to suggest relevant vendors when creating vendor bills. This change ensures a smoother and more efficient process for managing purchase invoices.
Original PR description
This reverts commit https://github.com/odoo-dev/odoo/commit/efb240e04c73593a4a711ddc1bf3bf542925e7d4. Enteprise PR: https://github.com/odoo/enterprise/pull/113827 Upgrade PR: https://github.com/odoo/upgrade/pull/9948 task-6119762
This update removes unnecessary emoji triggering from the suggestion service, streamlining how emojis are offered in emails. The change ensures the emoji plugin, which handles emoji suggestions in HTML, functions correctly, resolving a previous redundancy. This improves the user experience for adding emojis to emails.
Original PR description
Currently the emoji suggestions are triggered by the ":" delimiter, but this is already handled by the emoji plugin since https://github.com/odoo/odoo/pull/243077 This commit removes the redundant ":" delimiter from the suggestion service, and only keeps it for the composer when HTML is not enabled (since the emoji plugin only works in HTML mode). task-6127107 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where Arabic text on invoices was displayed with incorrectly positioned parentheses in the generated PDF. The change ensures that Arabic characters and their associated parentheses are rendered correctly, regardless of the invoice's language setting. This improves the clarity and accuracy of invoices for users viewing them in Arabic.
Original PR description
**Problem:** When printing an invoice in English (LTR report) with a product whose name contains Arabic text and parentheses (e.g., لوحة توزيع كهربائية 100 أمبير (شنايدر )), the brackets appear in…
**Problem:** When printing an invoice in English (LTR report) with a product whose name contains Arabic text and parentheses (e.g., لوحة توزيع كهربائية 100 أمبير (شنايدر )), the brackets appear in the wrong position in the generated PDF. **Steps to reproduce:** 1. Create a product named: لوحة توزيع كهربائية 100 أمبير (شنايدر ) 2. Create an invoice with that product 3. Print the invoice PDF in English 4. Observe the brackets are misplaced in the description column **Current behavior:** Parentheses appear detached from the Arabic word they enclose, floating at the wrong end of the text. **Expected behavior:** Parentheses correctly wrap the enclosed Arabic text. **Cause of the issue:** Odoo's report CSS sets `direction: ltr` on elements that are ancestors of the line description span. When CSS `direction: ltr` targets the same element as `dir="auto"`, wkhtmltopdf's WebKit engine lets the CSS rule win, keeping the paragraph base direction as LTR. The Unicode BiDi algorithm then resolves parentheses (neutral characters) using LTR as the base direction, misplacing them. **Fix:** Placing `dir="auto"` directly on the `<span>` that renders the line description — rather than the parent `<td>` — avoids the CSS override. wkhtmltopdf then detects the first strong character (Arabic) and uses RTL as the base direction for that span, allowing the BiDi algorithm to correctly position the brackets. opw-5884712 Forward-Port-Of: odoo/odoo#259039 Forward-Port-Of: odoo/odoo#251190
This update resolves issues with the Windows IoT configuration by aligning it with the Raspberry Pi version. Specifically, it increases the maximum file size allowed for actions and enables both HTTP and HTTPS, ensuring the LNA feature works correctly within Virtual IoT environments. This prevents errors and improves functionality for IoT deployments.
Original PR description
Built installer for testing: https://drive.google.com/file/d/1wF7MCiQox3nAsW9CXg75wsV_Y5fF-5Rw/view?usp=sharing This commit makes the following changes that bring the Windows IoT nginx config in line with the Raspberry Pi version: - The `client_max_body_size` is set to 10MB. This prevents a 413 error from being received when sending large actions to the IoT (e.g. printing a large receipt). - It now listens on regular HTTP as well as HTTPS. This fixes LNA not working with Virtual IoT. opw-6106765, opw-6108700 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259635
This update resolves a technical problem where the website's cookie bar incorrectly persisted a value, leading to potential performance issues and errors. The fix prevents the cookie bar from setting a default value when it's closed without user interaction, ensuring a smoother website experience.
Original PR description
Steps to reproduce: - Set the cookies bar - Do not accept nor reject it - On the website homepage, click on the search button => Check the cookies: website_cookies_bar=true is set. `Popup`…
Steps to reproduce: - Set the cookies bar - Do not accept nor reject it - On the website homepage, click on the search button => Check the cookies: website_cookies_bar=true is set. `Popup` initializes `cookieValue` to `true` and writes it in `onHideModal()`. If the cookies bar is closed before any explicit consent choice, it can therefore recreate the legacy invalid value `website_cookies_bar=true`. This happens because the search button uses `data-bs-toggle="modal"`, which is controlled by Bootstrap: if it is opened while another bootstrap modal is already open on the page, the latter is hidden. This in turn calls the popup interaction's `onHideModal()`, which sets `website_cookies_bar=true` as `cookieValue` hasn't been changed. That value is later treated as invalid and cleared repeatedly during website rendering, which can accumulate duplicate `Set-Cookie` headers in the same response and lead to `upstream sent too big header` behind nginx. Avoid persisting that legacy value by returning early from `CookiesBar.onHideModal()` while `cookieValue` is still the inherited default `true`. opw-6037573 Forward-Port-Of: odoo/odoo#258938
This update resolves an issue where the 'Select Store' feature in Click and Collect would fail if a pickup location's address (city or street) was missing. The fix ensures the system handles empty address fields correctly, preventing errors and improving the user experience when setting up pickup locations. This improves reliability for our customers.
Original PR description
Issue: --- An owl error is raised in select store if the store's company location lacks city or street. Steps to reproduce: 1- Enable Click and Collect. 2- In pickup locations, set a company with an address with empty street or city. 3- Go to the shop. 4- Enable debug mode. 5- Select store. An owl error is raised due to not city and street not being string. opw-6050137 Forward-Port-Of: odoo/odoo#259397 Forward-Port-Of: odoo/odoo#259164
This update fixes an issue where users couldn't sort sale orders by delivery date. A recent change renamed a field, making the standard sorting function unavailable. This change adds the 'promised delivery' date back to the list view, restoring the ability to sort sale orders effectively.
Original PR description
Version: --- 19.1+ Issue: --- it's not possible to sort sale order list using `delivery date` anymore. After 30b895e3bd93ab3f0c0a86c3fcfd0fc0c3b6fb89, a `delivery_field` field is introduced, and `commitment_date`'s string is renamed to `promised delivery`. The new `delivery_date` is a compute field, hence it isn't sortable. The propostion here is to add `commitment_date` to the list view, in case users want to sort the list using `Promised delivery date`. opw-6112037 Forward-Port-Of: odoo/odoo#259641
This update resolves an issue where double-clicking on a message action menu kept displaying the same menu. Now, double-clicking on a message action will open the browser's standard context menu, providing users with more flexibility and control over actions.
Original PR description
Before this commit, when message actions are displayed from right-click, triggering a right-click on the message again would keep displaying the message actions. Right-click on message to show the…
Before this commit, when message actions are displayed from right-click, triggering a right-click on the message again would keep displaying the message actions. Right-click on message to show the actions is useful in many cases, but sometimes the user wants to trigger the browser context menu. Currently browser context menu is shown on links and when there are some text selection, but there might be some other potential cases where seeing the browser context menu is desirable. In practice users could trigger it through SHIFT + right-click but they are not necessarily aware of it. This commit let double right-click on same message open the browser context menu, so that if users really want to have the browser context menu then doing it twice will show it. Before  After  Forward-Port-Of: odoo/odoo#258699
This update resolves an issue where the Odoo Enterprise reporting system was failing due to an incompatibility when exporting data with fiscal year settings. The fix prevents the system from attempting to directly serialize date objects within JSON, which previously caused errors. This ensures reliable reporting functionality for users.
Original PR description
When calling export_file with a fiscal year set we pass a fiscal year into it. This function then calls json.dumps with the date object passed into it through a dictionary, which json.dumps cannot process and users experience an error. https://drive.google.com/file/d/1VBOIAxuzcXT5b5BBnLDqd6ibWqOPxe4P/view?usp=drive_link
This update corrects a bug in the Point of Sale system's tax calculations. Previously, when a fiscal position lacked tax information, an empty tax list was returned. Now, the system correctly handles tax assignments based on the fiscal position, ensuring accurate tax calculations for sales transactions. This resolves an issue reported in opw-6126210.
Original PR description
When a fiscal position has no tax_ids, the JS implementation was unconditionally returning an empty array. The Python map_tax method only removes all taxes when the taxes themselves carry fiscal_position_ids (the tax-units pattern); otherwise it passes the original taxes through. opw-6126210 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259555
This update fixes a display issue in the account reports module. When a company's local GAAP journals are selected, the journal filter now correctly shows 'Local Gaap' instead of the company name. This ensures consistent and accurate reporting for users.
Original PR description
When a journal is archived, the name on the journal filter do not show 'Local Gaap' when the Local gaap ledger is checked. When the local gaap is selected, changed the display name of the journal filter. Before: Name of the companies whose all local gaap journals are selected After: 'Local Gaap' task-6111366
This update restores the automatic vendor bill completion feature in the account and purchase modules. Previously, this functionality was removed. This change ensures users can quickly and easily find and select vendor bills, streamlining the invoice processing workflow. It corrects a recent change that disrupted this common user task.
Original PR description
This reverts commit https://github.com/odoo-dev/enterprise/commit/509ca37eef3a6dc9d148f0a11f350d41704eb02f. Community PR: https://github.com/odoo/odoo/pull/259168 task-6119762
This update resolves an issue where POS users with limited access rights encountered errors when closing sessions related to Fiskaly VAT processing in Germany. The fix removes unnecessary security checks, allowing users to complete the closing process without requiring administrator privileges. This improves the user experience for POS operations.
Original PR description
In German location with Fiskaly setup. POS users hit an AccessError on read when closing the session from the frontend, then had to finish closing in the backend with admin (base.group_erp_manager)…
In German location with Fiskaly setup. POS users hit an AccessError on read when closing the session from the frontend, then had to finish closing in the backend with admin (base.group_erp_manager) rights. Steps to reproduce: ------------------- * Enable Germany + Fiskaly POS (l10n_de_pos_cert), with a company registered for Fiskaly * Use a user with POS rights only (no Access Rights) * Open POS, sell, then close the session from the POS UI > Observation: A warning redirects to the back end; manual close shows: insufficient rights to read l10n_de_fiskaly_api_secret on res.company (operation read). Why the fix: ------------ The guard only needs to know whether the company is in the Germany + Fiskaly flow; that is already expressed by l10n_de_is_germany_and_fiskaly(), without reading API credentials. Fiskaly RPC helpers on res.company continue to use sudo() where secrets are required; this change fixes unnecessary reads of protected fields in the tax helper, not the security model of the credentials themselves. opw-6074960 Forward-Port-Of: odoo/enterprise#113714 Forward-Port-Of: odoo/enterprise#112618
This update ensures that planning times displayed in the Odoo interface match the format used when generating reports. Previously, the system printed times in 24-hour format regardless of the user's settings. This change improves consistency and clarity for users when reviewing their planned schedules.
Original PR description
Steps to reproduce: - Install the Planning module - Open the Planning app - Click the Print action Issue: Planning slots display in 12-hour format in the UI but print in 24-hour format. Cause: A hard-coded time format was used when printing planning slots. Fix: Remove the explicit format and rely on the locale aware short time format. task-5462276 Forward-Port-Of: odoo/enterprise#103359
This update resolves a technical issue within the AI composer that was causing crashes. The fix ensures that focus events are correctly passed to the base handler, preventing errors and maintaining the composer's functionality. This improves stability for users interacting with the AI composer.
Original PR description
**Purpose of this PR:** The AI composer patch overrides `Composer.onFocusin()` but did not forward the focus event to the base handler. This used to be harmless while the base mail composer focus handler did not use the event. Since odoo/odoo#258974, the mail composer now uses the event to stop `focusin` propagation, so dropping it makes the base handler crash when AI composer focus is triggered. This commit fixes the AI composer patch by forwarding the focus event to the base handler, preserving the expected handler contract. Related: odoo/odoo#258974 Task-5954657 Forward-Port-Of: odoo/enterprise#114013 Forward-Port-Of: odoo/enterprise#113763
This update fixes a bug that prevented users from saving appointments when removing the organizer. The issue stemmed from a template rendering error triggered by a missing user ID. This change ensures appointments can be saved correctly, improving the appointment scheduling process.
Original PR description
Currently an error is generated when the user tries to save an appointment as follows: - Install the appointment_google_calendar module without demo data - Create a new appointment as below: - Remove…
Currently an error is generated when the user tries to save an
appointment as follows:
- Install the appointment_google_calendar module without demo data
- Create a new appointment as below:
- Remove Organizer (user_id)
- Set the Google Meet link inside VideocallURL, e.g., https://meet.google.com/aaa-aaa-aaa
- An error occurs in the log and a message is shown to the user when save the record
- Also, an error occurs when trying to preview `Appointment: Attendee Invitation`
after creating appointment as follows:
- Set the Google Meet link inside Videocall URL > save
- Remove Organizer (user_id)
Error:
```
test odoo.addons.mail.models.mail_render_mixin: Failed to render QWeb template for Mail Template: 'Appointment: Appointment Booked' (ID: 12) - Context language:en_US
Target Model: calendar.event
Error: Error while render the template
ValueError: Expected singleton: res.users()
```
This is because the method `is_google_calendar_synced` expected a single
record, but since we removed `user_id` from the event (appointment),
it will generate a singleton error.
This commit will fix the above issue by not calling `is_google_calendar_synced`
when the event does not have `user_id`.
sentry-7393595716
Forward-Port-Of: odoo/enterprise#113966