Tuesday, May 19, 2026
32 changes · saas-19.2
New functionality added to Odoo
This pull request updates the .weblate.json files to include translations for additional Odoo modules. Ensuring complete translations improves the user experience for international customers and supports localization efforts. This work was originally reported and addressed in a related issue.
Original PR description
Forward-Port-Of: odoo/odoo#260483 Forward-Port-Of: odoo/odoo#260319
This pull request updates the localization data files (.weblate.json) for the Odoo Enterprise edition. It adds definitions for missing modules, ensuring consistent and accurate translations across the application. This improves the user experience for international customers.
Enhancements to existing features
This update enhances the Windows IoT version tracking by automatically recording the build date in a VERSION file. This ensures consistent version identification across installations and simplifies troubleshooting. The Windows version is also now logged on startup for easier monitoring.
Original PR description
Before this commit, the Windows IoT version was hardcoded to '23.11'. After this commit, the installer now writes a VERSION file to the IoT install directory (which will remain between git checkouts). This file contains the build date in `YYYY.MM.DD` format, the same as the current Raspberry Pi IoT images. In addition, the Windows version is now logged on startup. task-6196801 **Image version:** <img width="306" height="39" alt="image" src="https://github.com/user-attachments/assets/f0252d44-4b5c-4bb5-aac8-4b8f56dc6ee2" /> **Windows version:** > INFO ? odoo.addons.iot_drivers.main: Windows version: Windows-11-10.0.26100-SP0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263392 Forward-Port-Of: odoo/odoo#263089
Resolved issues and error corrections
This update ensures charts accurately display data when users specify custom date ranges, including open start or end dates. Previously, the chart's granularity would shift unnecessarily. Now, the chart maintains its current level of detail, regardless of the user-defined date range, providing a consistent and reliable view of the data.
Original PR description
The charts adapt their granularity when a date global filter is updated. But the code didn't handle the cases where the user sets a custom range with an open start or end date (eg. `until 2024-01-01`). In those case picking the best granularity is not practical (because it fully depends on the server data), so we will just keep the current granularity. Task: [6196246](https://www.odoo.com/web#id=6196246&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#264411 Forward-Port-Of: odoo/odoo#263019
Code cleanup and technical improvements
This update streamlines the process of checking user permissions for reviewing and supervising financial records. By creating helper functions, the system now more efficiently determines if a user has the necessary access rights based on the record's 'review_state', ensuring accurate and consistent access control across the system. This improves data security and user experience.
Original PR description
Introduce two small helpers on `AccountMove`: * `_get_review_state_access_groups()` – returns the `(is_user_able_to_review, is_user_able_to_supervise)` booleans so the two `has_group` calls are not repeated across methods. * `_check_review_state_access(review_state)` – raises a `ValidationError` with a state-specific message when the current user lacks the required role to modify a record in the given `review_state`: - `'supervised'` → requires `account.group_account_manager` - `'reviewed'` / falsy → requires `account.group_account_user` - `'todo'`, `'anomaly'` → unrestricted opw-6128792 Forward-Port-Of: odoo/odoo#262531
Documentation and clarification updates
This pull request implements a Corporate Legal Agreement (CLA) signature for QoQa, ensuring compliance with Odoo's contribution guidelines. The change was backported from version 18.0 to meet existing requirements. This update strengthens Odoo's legal framework and supports the integration of QoQa as a valued partner.
Original PR description
Description of the issue/feature this PR addresses: This is the corporate CLA for QoQa. I backported #262581 because we need it from 18.0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262582
This update simplifies how Odoo manages add-on locations. It now supports using wildcard patterns in the list of add-on paths, making it easier to manage multiple Odoo installations from a single root. This reduces the need for manual configuration and streamlines add-on deployment.
Original PR description
Pass all addons_path entries through glob.glob(), which returns [path] for literal paths and expands patterns otherwise. This is useful when managing multiple Odoo repositories under a common root, avoiding the need to list each addons path explicitly. Forward-Port-Of: odoo/odoo#259690
This update addresses a potential crash in the Gantt chart feature. It restores a safety mechanism that prevents the chart from malfunctioning when a user attempts to drag a pill without a valid target. This ensures the Gantt chart remains stable and reliable.
Original PR description
In https://github.com/odoo/enterprise/pull/113438, it was incorrectly assumed that it would be impossible to initiate a pill drag without a valid target being found. This commit reintroduces a strict safeguard to handle scenarios where the drag is triggered with no valid cell target. This prevents unexpected crashes encountered during test executions. runbot-error-242486
This update resolves an issue where users without write access to the Fiskaly Point of Sale (PoS) module would receive an access error when attempting to authenticate with a token that had expired. The fix ensures that the correct error message is displayed, improving the user experience and preventing disruptions to sales transactions.
Original PR description
When trying to auth directly from the PoS when the token expires, if you are logged in with a user that doesn't have write access to the PoS. You would get an access error. Steps to reproduce: ------------------- * Setup Fiskaly in an AT company * Open PoS and try to make a sale * To fake the token expiration I modified the code so that the request always return 401 status code > Observation: You get an access error opw-5925203 Forward-Port-Of: odoo/enterprise#112474
This update resolves an error that prevented the generation of PDF reports for Colombian statements. The change adjusts how data is accessed within the report generation process to align with a recent update in the report's data structure. This ensures reports are now generated successfully.
Original PR description
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de…
***Steps to reproduce*:** - Install `l10n_co_reports` module. - Create 2 vendor bills with taxes `0% EXEMPT` and `0.966% RteICA`. - Navigate to Reports -> Colombian Statements -> Certificado de Retención en ICA - Generate the PDF report. ***Observed behavior*:** - An error is raised while generating the PDF: `AttributeError: 'AccountReportColumnData' object has no attribute 'get'` ***Cause*:** After commit [1](https://github.com/odoo-dev/enterprise/commit/b92dc397bef029472a40223f51b611cdf5b631dc#diff-e97f74c63a6257470e69eb8122c12d0ce4afa5bc6013176bb69e702849575123) all report lines, columns, and annotations were converted from dictionaries to custom objects (e.g., AccountReportColumnData). However, the function `_get_report_values` still uses .get() to access values, which is only valid for dictionaries. Calling .get() on these objects raises an error. ***Fix*:** - Replace the `get()` method usage with `column.name` format to access values from `AccountReportColumnData ' properly. - This ensures compatibility with the new structured column data format introduced in v19.2. opw-6205984
This update fixes a visual issue where long accounting reports would cut off the final row, preventing users from seeing all the data. The team adjusted styling to ensure all rows are fully visible, regardless of the report's content length. This improves the clarity and usability of our accounting reports.
Original PR description
Problem: When an accounting report fills a whole page, the final row is not fully visible Steps to reproduce: 1- View a tax report that has a lot of entries that would fill the whole screen 2- Notice how the last line is not fully visible and it isn't possible to scroll and view the rest of it Solution: Correctly style the different < div > elements opw-6171555 Forward-Port-Of: odoo/enterprise#116068
This update fixes a problem where users without sufficient accounting permissions would encounter errors when scraping components from purchase orders created by others. The change ensures that users with the correct access rights can properly retrieve component data, preventing disruptions in reporting and analysis. This improves data accuracy and user workflow.
Original PR description
When scraping the component of a MO created by another user you could get an access error saying you don't have write access on account analytic lines. Steps to reproduce: ------------------- *…
When scraping the component of a MO created by another user you could get an access error saying you don't have write access on account analytic lines. Steps to reproduce: ------------------- * Install timesheet_grid and project_mrp_account * Create product A, storable * Create product B with a cost of 20 and also storable * Update the available quantity of product B * Create a BoM for product A, it should only require one product B * Update Marc Demo access right and make sure he doesn't have access to any accounting stuff and he has atleast timesheet approver * Create a first MO for 1 product A and produce it * Create a second MO for 1 prodcuct A but just confirm it * Login as Marc Demo and try to scrap the component of the second MO > Observation: You get an access error here https://github.com/odoo/odoo/blob/d98afdc08b46bf458eaa287ea882cc7663286a59/addons/stock_account/models/analytic_account.py#L95 opw-5954989 Forward-Port-Of: odoo/odoo#262104 Forward-Port-Of: odoo/odoo#255824
This update fixes a technical error that could have caused the system to fail when accessing certain components. The change adds checks to ensure key objects are initialized before use, preventing an 'AttributeError' and ensuring smoother operation. This improves system stability and reliability.
Original PR description
An error occurs when attempting to access `createCTEPManager` from `self.easy_ctep`, because `self.easy_ctep` is `None`. Error: `AttributeError: 'NoneType' object has no attribute 'createCTEPManager'` This commit resolves the issue by adding an early return when `self.easy_ctep` is `None`. It also introduces a safeguard in `tim_interface.py` to return early when `self.tim_api` is None to preventing unintended errors from accessing an uninitialized object. sentry-7334805653
This update fixes a bug that prevented users from saving blank reports in web_studio. The issue stemmed from removing identifying XML attributes, causing a system error. The fix ensures the system gracefully handles blank XML, preventing save failures and maintaining report editing functionality.
Original PR description
Currently an exception is generated when the user tries to save the report XML as follows: - Install sale_management and web_studio - Go to Sales > Enable Studio Mode > Open Reports - Click New >…
Currently an exception is generated when the user tries to save the report XML as follows:
- Install sale_management and web_studio
- Go to Sales > Enable Studio Mode > Open Reports
- Click New > Select `Blank` Report
- Click `EDIT RESOURCES` and replace all XML with below (Remove `lock-id`)
```
<t t-name="web.basic_layout">
<t t-call="web.html_container">
<t t-if="not o" t-set="o" t-value="doc"/>
<div class="article" t-att-data-oe-model="o and o._name" t-att-data-oe-id="o and o.id" t-att-data-oe-lang="o and o.env.context.get('lang')">
<!-- Your report content -->
</div>
</t>
</t>
```
Error: `KeyError: None`
This issue arises because users removed `lock-id` (identified nodes) attributes from elements, making them untraceable. As a result, fetching the `DIFF_ATTRIBUTE` (key for getting identified) nodes from the modified XML (new_tree) returns `None`, which causes an error when attempting to access the corresponding node in `map_id_to_node_old` (see see code at [1]).
This commit fixes the issue by preventing access to `map_id_to_node_old` when the `key (new_tree.get(DIFF_ATTRIBUTE))` is `None`. In this case, no changes are applied, and the original XML is returned since no identifiable attribute is available in new XML tree.
sentry-7349653271This update fixes an issue where the print button disappeared from PDF attachment previews in version 19 and later. The change removes a redundant setting that was previously hiding the button on desktop, ensuring the print function is consistently available for all users. This improves usability for users viewing PDFs.
Original PR description
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained…
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained permanently visible. **Steps to reproduce:** - Open any record that has a PDF attachment in the chatter. - Click the PDF attachment to open the preview popup. - Observe toolbar buttons disappeared. **Cause:** commit responsible for this: https://github.com/odoo/odoo/commit/b7889d007f72c7e7f9f22318a9968338cde0ddb3 It was removed to prevent some bugs with some android/smartdevice and some old browsers `file_viewer.js` passes `hidePrint: true` to `hidePDFJSButtons()`. This was originally added alongside the mobile guard (`isMobileOS()`), but the `isMobileOS()` guard in `hidePDFJSButtons` already handles mobile, so the explicit `hidePrint: true` in `file_viewer.js` was redundantly hiding Print on desktop too. https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/file_viewer/file_viewer.js#L60-L71 https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/utils/pdfjs.js#L35-L37 **Fix:** - Remove `hidePrint: true` from `file_viewer.js` since mobile is already covered by the `isMobileOS()` check inside `hidePDFJSButtons()`. opw-6216534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264739
This update fixes a minor issue where some work entry names within the Odoo HR system were displaying incorrect spellings. The team corrected the data files to ensure accurate and consistent naming conventions for work entry types. This ensures proper functionality and reporting within the HR module.
Original PR description
Issue: ---------------------------------------- Some work entry names are wrong. Solution: ---------------------------------------- Change the data files. opw-6090081 Forward-Port-Of: odoo/odoo#264094
This update resolves an issue where Odoo was attempting to process invalid GSTR2B attachments due to missing file content. The system now verifies that the attachment's actual data is present before attempting to process it, preventing errors and ensuring proper return handling. This improves the reliability of tax reporting.
Original PR description
There may be databases contained GSTR2B JSON attachments whose metadata was still present in `ir.attachment`, but whose underlying binary content was missing from the filestore. This caused the matching flow to attempt processing invalid JSON payloads instead of moving the return to `error_in_fetching`. The condition validating JSON attachments now also checks that the attachment raw content exists before adding it to the payload list. opw-6088082 Forward-Port-Of: odoo/enterprise#117083
This update resolves an issue where Knowledge articles appeared narrow when printed on large screens. The fix specifically targets the Knowledge editor's form view, preventing a default CSS rule from causing a constricted layout. Now, articles print correctly when exported or viewed in a zoomed-out state.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update fixes an issue where CodaBox statements were sometimes incorrectly routed to the wrong bank journal due to currency differences. The system now prioritizes journals with a specific currency ID, ensuring statements are accurately assigned to the correct currency account. This improves financial reporting accuracy.
Original PR description
When several journals share the same IBAN but use different currencies, a CODA could land on the wrong journal instead of the currency-specific one. Split the lookup in two passes: first a journal with an explicit currency_id matching the CODA, then fall back to the no-currency journal (qualified by the company currency). Steps to reproduce: - Create 2 bank journals sharing the same IBAN; one without currency and one with USD. - Setup CodaBox connection and retrieve USD statements. - Before this fix: may land on the EUR journal. opw-6048931 Forward-Port-Of: odoo/enterprise#117332 Forward-Port-Of: odoo/enterprise#114590
This update ensures that UTM tracking parameters (like 'utm_reference') are properly processed when the website's cookies bar is displayed. Previously, these parameters weren't handled correctly. This change improves the accuracy of website analytics data by ensuring that all website traffic is tracked consistently.
Original PR description
Since we've added the utm_reference parameter, it should be correctly handled in when the cookies bar is present Added in: https://github.com/odoo/odoo/pull/233963 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
This update resolves an issue where the drag-and-drop overlay for moving table rows and columns in email templates was misaligned, particularly when the table was within an iframe. The fix adjusts the overlay's position calculation to correctly account for the iframe's presence, ensuring proper alignment and a better user experience.
Original PR description
Steps to Reproduce: - Navigate to Email Marketing and open any template. - Insert a table into the template. - Long-press on the column or row options. Description of the issue: - The blue overlay used for moving rows/columns appears misaligned. Cause: - The position of the drag-and-drop overlay is calculated without considering the iframe. When the table is inside an iframe and the overlay is rendered outside of it, the position calculation becomes incorrect. Solution: - Update the position calculation logic to account for the iframe. This ensures that when the table is inside an iframe, the drag-and-drop overlay is displayed at the correct position. task-6059715 Forward-Port-Of: odoo/odoo#256347
This update fixes an issue where the spreadsheet feature was making unnecessary server requests when displaying CRM lists. The change ensures that all required data is fetched efficiently, reducing the number of calls to the server and improving spreadsheet loading times. This results in a smoother and faster user experience.
Original PR description
How to reproduce: - Create a spreadsheet with a CRM list and only set 2 cells content A1: =odoo.list(1, 1, "id") A2: =odoo.list.header(1,"zip") - save and reload the spreadsheet and look at the server calls ⮕ web_search_read called 2 times The problem is that the datasource methods early return if the datasource is already loading without adding the field to the list to fetch. It was partially solved by explicitely adding the field to fetch in the *getter* `getListCellValueAndFormat` but not on `getListHeaderValue`. This revision ensures that we always add the field to the list to fetch in the datasource directly, this responsibility should not be held by the plugin getters. Task-6175523 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#261985
This update fixes a potential issue where incorrect data in payslips could trigger warnings. The change enhances the system's ability to handle these errors gracefully, preventing disruptions to payroll processing. This ensures more reliable and accurate payroll calculations.
Original PR description
…ta and versions Task: 6133111
This update corrects a minor issue where holiday calculations weren't always reflecting the correct version of the employee's record. Now, the system accurately determines and applies holidays based on the version being worked on, ensuring accurate leave balances and preventing potential scheduling conflicts. This improves the reliability of our HR processes.
Original PR description
…ion being written on 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
This update fixes an issue where the call preview overlay would sometimes overlap with call actions on smaller screens. The change ensures the preview remains fully visible and readable, providing a better user experience for all users. This resolves a usability problem identified in previous development.
Original PR description
Purpose of this PR: Since #235707, the call preview content could overlap the call actions on small screens. This commit prevents the overlap and keeps the preview readable. Before/After: <table> <tr> <td> <img width="398" height="691" alt="image" src="https://github.com/user-attachments/assets/da7eaf5b-387e-439f-80bb-cb6dd8c07454" /> <td> <img width="391" height="691" alt="image" src="https://github.com/user-attachments/assets/384a08d1-6b51-490a-8b57-267a3bb1b3d5" /> </table> task-[6201269](https://www.odoo.com/odoo/project/1519/tasks/6201269) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263535
This update corrects a bug where the default prompt within the AI Documents account module was not updated after a recent code change. The fix ensures the prompt functions correctly, providing the expected user experience. This resolves an issue impacting the usability of the AI Documents feature.
Original PR description
Bug === Since odoo/enterprise/pull/97362 we remove the code action to use a new type of action. But we forgot to update the code in the prompt modal. Task-6230554
A recent update to the BoM report layout caused the header to overlap with the component list on the second page. This fix reverts a style change that was disrupting the report's pagination, ensuring the header and components display correctly. This resolves a visual issue impacting report readability.
Original PR description
Steps to reproduce: 1- Install Manufacturing 2- Create a test product and create a BoM for that product 3- Add many components (>12) to the BoM and download the BoM Overview Issue: The BoM Header line (Product - Quantity - Cost) overlaps with the actual components of the BoM in the second page Why this happens:I Part of the commit 193302b272bbd49a1addb5b8135ef23498d2d8e9 changed the div style for the report which causes this overlap. The root cause is likely `overflow-auto` creating a block formatting context that confuses wkhtmltopdf's pagination, causing the header to not repeat correctly on page 2. It does not have any effect on the rest of the layout, so can be reverted to the previous style. opw-6214362
This update resolves an issue preventing non-administrator users from viewing user settings within the Odoo Enterprise platform. Previously, users lacked access to the 'Settings/Users' view, restricting their ability to manage user accounts. This change ensures all users can access essential user management features.
Original PR description
Steps:
- Create a user X with admin rights
- Connect as X
- Open Settings/Users
- Access right error
```
Failed to read field res.users.database_user_ids
You are not allowed to access 'Database User' (databases.user)
```
opw-6209241
Forward-Port-Of: odoo/enterprise#117573This update removes unnecessary progress reporting from Odoo's automation and autovacuum processes. Previously, these processes were incorrectly signaling progress, leading to the scheduler retrying tasks and causing errors. This change ensures the job scheduler operates reliably and efficiently, preventing unnecessary retries and improving overall system stability.
Original PR description
Base automation and autovacuum should not log progress as this is makes the job scheduler think that something progresses and can be retried leading to the same error because we process the same (all) items. In general, progress numbers are only relevant for jobs that act as job queues. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264684
This update resolves a problem that prevented modules using the withholding tax feature from upgrading correctly. The fix replaces a problematic process with a simpler method for parsing tax account information, ensuring smoother upgrades and preventing errors related to outdated database tags.
Original PR description
When a module depends on `l10n_account_withholding_tax` and updates tax account tags on the chart of accounts, the upgrade fails. `_withholding_tax_get_demo_account_ref` calls `_get_account_tax`, which calls `_deref_account_tags`, throwing an error due to missing tags in the database since the deref tags function dri. This occurs because the depening module tags has not updated yet as it needs to be triggered by the user post upgrade. This fix uses `_parse_csv` instead to avoid calling `_deref_account_tags` and triggering the issue. task-4967527 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265239
This update allows Invoicing Administrators to delete or edit reconciled lines in the accounting system, resolving a previous restriction. The change ensures consistent access control based on the line's review state, aligning with existing accounting rules and improving administrative flexibility. This update was implemented to address a bug related to privilege checks.
Original PR description
Deleting or editing a reconciled line raised "Validated entries can only be changed by your accountant." for Invoicing Administrators because the check only tested `group_account_user`, which is not granted by the Invoicing privilege chain. Delegate to `AccountMove._check_review_state_access()` to apply the same rules as `account.move`: - `'supervised'` → requires `group_account_manager` - `'reviewed'` → requires `group_account_user` or `group_account_manager` - `'todo'` / `'anomaly'` → no restriction opw-6128792 Forward-Port-Of: odoo/enterprise#114833
This update improves the way Odoo checks apps submitted to the Odoo Apps Store. Specifically, it adds support for price, currency, and other key information within the manifest files, ensuring more accurate validation of apps before they're made available to users. This enhances the quality and reliability of apps on the Odoo Apps Store.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257047 Forward-Port-Of: odoo/odoo#255857