Tuesday, March 24, 2026
35 changes · master
Enhancements to existing features
This update simplifies the configuration of the timesheet timer feature within Odoo Enterprise. A redundant argument was removed from the code, streamlining the process and improving code clarity. This change ensures the timesheet timer functionality continues to operate efficiently without unnecessary complexity.
Original PR description
Match the signature of the parent definition. The added argument is never used directly (aside from a single test), therefore we can just remove it.
This pull request updates the website's subscription functionality to align with recent changes in the Odoo community. These updates ensure consistent branding and features across all Odoo Enterprise versions. This improves the user experience for customers managing subscriptions.
Original PR description
Community PR: - https://github.com/odoo/odoo/pull/240214 task-5167703
This update prioritizes 'contains' and 'does not contain' operators within the Web Studio domain selector for Char, Text, and HTML fields. This change makes it easier for users to quickly find and apply common text-based filters, enhancing the overall usability of the platform.
Original PR description
In the domain selector, **Char, Text,** and **HTML** fields currently list their operators in this order: =, !=, ilike, not ilike, starts with, set, not set. However, **"contains" (ilike)** and **"does not contain" (not ilike)** are by far the most natural and frequently used operators when filtering on text-based fields. Reordering the list to surface these operators first improves discoverability. Community: https://github.com/odoo/odoo/pull/254643 task-6023007
This update simplifies the process of creating budget entries by using a date range widget instead of separate start and end date fields. This change offers a more intuitive and user-friendly experience for entering budget periods. It’s a small UX improvement designed to make budget creation easier.
Original PR description
We use daterange widget for the date_from and date_to fields of budget.analytic instead of showing 2 separate fields for a better UX. task-6022312
This update simplifies the salary configurator view for users by hiding unnecessary options and buttons when salary information isn't available. It replaces the 'Review Contract' button with a 'Feedback' button, providing a more streamlined experience and reducing potential confusion. This change focuses on usability and clarity.
Original PR description
This update improves the salary configurator view by: - Hiding the Customize Salary text when the option is not available - Hiding the button when the salary summary is not available - Showing a Feedback button instead of Review Contract when there is no salary summary Task-5419466
Resolved issues and error corrections
This update resolves a technical issue related to how geographic data (specifically topoJSON) is processed within the Enterprise edition of Odoo. The fix ensures that charts displaying location-based information are now rendered correctly, improving the accuracy and reliability of these reports. This primarily impacts users relying on charts that visualize data by region or location.
Original PR description
test adaptation Counterpart of github.com/odoo/odoo/pull/248847 Task-5224009 Forward-Port-Of: odoo/enterprise#107912
Features or functions removed from Odoo
This change removes a stray file that was unintentionally left behind after the l10n_it_xml_export module was removed in version 19.0. This is a minor cleanup task to ensure the codebase remains tidy and efficient.
Original PR description
The module was removed in 19.0 by this commit: https://github.com/odoo/enterprise/commit/761e08667a9c8172217afe8b709445d8e12b3872 However a file was accidentally left behind This commit cleans up the remaining file Forward-Port-Of: odoo/enterprise#111554 Forward-Port-Of: odoo/enterprise#111461
Code cleanup and technical improvements
This update enhances the appearance of avatars within the planning modules (like Gantt and Holidays) to align with the Enterprise version of Odoo. The changes involve updating the template for how avatars are displayed in popovers, ensuring a consistent and professional user experience across all Odoo editions.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/251502
This update resolves a visual issue where the map view in the "My Dashboard" sometimes collapsed. The fix removes conflicting height settings and adds a minimum height to the map, ensuring it always displays correctly regardless of the number of records shown.
Original PR description
This commit fixes rendering height issues when the map view is displayed inside "My Dashboard". * Removed `height: 100%` from the map and pin list containers. This conflicting rule interfered with the flexbox layout, often causing the map to collapse entirely since it couldn't compute its own height. * Added a `min-height` to the map renderer. This ensures the map always occupies a reasonable amount of space in the dashboard, even when there are few or no records to display. task-6022958 Forward-Port-Of: odoo/enterprise#111195 Forward-Port-Of: odoo/enterprise#110790
This update resolves a problem where tours on the website sale subscription pages weren't loading translations correctly, particularly with newer Chrome versions. The fix introduces a temporary step to ensure translations start loading promptly, preventing delays and interruptions in the tour experience. This ensures consistent and accurate tour guidance for users.
Original PR description
This commit adds an intermediary step ensuring the proper page has been reached before actually doing the checks and avoiding to let startup requests (like the loading of the translations) pending at the end of the tour (and the eventual stop of the runner browser). Note: this is most likely due to a timing (indeterministic by nature) change, emphasised by recent Chrome versions (like v145). runbot-239128 Forward-Port-Of: odoo/enterprise#111013 Forward-Port-Of: odoo/enterprise#110648
This update corrects an issue where incorrect folio numbering occurred when a Customer Fiscal Account (CAF) wasn't set up. The fix ensures that folios are generated correctly, avoiding negative numbering and preventing performance issues related to repeated sequence searches. This improves data accuracy and stability for Chilean accounting.
Original PR description
`l10n_cl_edi` overrides `account.move._get_last_sequence()` to ensure the folio belongs to an available in-use CAF. When no CAF exists at all, `l10n_latam.document.type._get_start_number()` returns 0 and the fallback builds a previous sequence using start_nb - 1. Formatting -1 as `:06d` yields “-00001”, which then propagates to “FAC -00002”, “-00003” and corrupts the sequence chain. In addition, returning an invalid “last sequence” may force `sequence.mixin` to search for a free number under the UNIQUE constraint by retrying increments inside a savepoint and rolling back on UniqueViolation, which is costly when many values are already taken see [ _locked_increment()](https://github.com/odoo/odoo/blob/18.0/addons/account/models/sequence_mixin.py#L352). Now we only reset to the CAF start when an in-use CAF actually exists (start_nb > 0). opw-5918758 Forward-Port-Of: odoo/enterprise#108909
This update allows superuser administrators to unlink existing salary rules and parameters within the HR Payroll module. This provides greater flexibility for managing payroll configurations and resolving potential conflicts. Previously, this action was restricted, creating a bottleneck for administrators needing to adjust payroll settings.
This update resolves a common error (code 9004) users experience when using the Instagram integration in Odoo. The changes provide clear guidance to help users quickly identify and troubleshoot network or file-related issues, reducing support requests. This improves the overall stability and usability of the Instagram module.
Original PR description
Purpose ======= Explain the possible errors for the code 9004, to help users debugging their Odoo servers without creating a ticket. Task-5972197 Forward-Port-Of: odoo/enterprise#110571 Forward-Port-Of: odoo/enterprise#109319
This update fixes an issue where portal users weren't able to view timesheets linked to projects with 'Invited internal and portal users' visibility. The change expanded the timesheet domain to include both 'portal' and 'invited_users' visibility options, ensuring portal users can access timesheets as intended.
Original PR description
Steps to reproduce: - Create Project A with visibility set to `Invited internal and portal users.` - Create a Helpdesk Team and assign Project A to it. - Create a helpdesk ticket. - Log a timesheet…
Steps to reproduce:
- Create Project A with visibility set to `Invited internal and portal users.`
- Create a Helpdesk Team and assign Project A to it.
- Create a helpdesk ticket.
- Log a timesheet on the ticket and share the ticket with the portal user.
- Log in as the portal user and check the timesheet.
- Observe that the timesheet is not visible to the portal user.
Cause:
- After introducing the `invited_users` option in `privacy_visibility`, the portal domain in `_timesheet_in_helpdesk_get_portal_domain` was not updated.
- The domain was still defined as: `('project_id.privacy_visibility', '=', 'portal')`
- As a result, timesheets linked to projects with visibility set to “Invited internal and portal users” were excluded from the portal user’s view.
Solution
Update the domain to include both visibility options: `('project_id.privacy_visibility', 'in', ['portal', 'invited_users'])`
- This ensures timesheets are visible to portal users when the project visibility is either portal or invited_users.
task-5924243
Forward-Port-Of: odoo/enterprise#111548
Forward-Port-Of: odoo/enterprise#107800This update resolves a potential error in the bank statement import process for Odoo Enterprise when handling multiple journals with different currencies. The fix prevents a 'singleton error' by streamlining the data retrieval process, focusing only on the necessary IBAN and currency information.
Original PR description
When having multiple journals with the same IBAN, but different currencies, we could have a singleton error if they are not all configured the same (besides the currency). This happens in the cron that fetches new CODAs as we first fetch all CODAs. Then, for each, we have to dispatch it in the right journal. To do so, we rely on `_parse_bank_statement_file` which is called on `self`, which itself calls `_get_coda_final_statements` that triggers the singleton error. However, at this point, we don't care about calling `_get_coda_final_statements` since we only want to retrieve the IBAN and the currency of the CODA, we don't care about the other details. Thus, the solution here is to ignore this call if we don't need it while just retrieveing the necessary info to match a journal before even creating the statements. opw-5723017 opw-6036909 Forward-Port-Of: odoo/enterprise#111560 Forward-Port-Of: odoo/enterprise#111101
This update corrects a problem where the calculation of employee appraisal dates was unreliable. The fix ensures appraisal dates are correctly determined based on company settings related to appraisal plans. This improves the accuracy of appraisal scheduling within the system.
Original PR description
Issue: The computation of the next appraisal date for employees depends on setting the appraisal plan for a company or changing the company's settings for `duration_after_recruitment`, `duration_first_appraisal`, `duration_next_appraisal`. Fix: Moving the test employee creation after configuration of the company settings for the appraisal plan. task-6050719 Forward-Port-Of: odoo/enterprise#111345 Forward-Port-Of: odoo/enterprise#111265
This update ensures the 'To-Do' feature within the project management system functions reliably. Previously, uninstalling the 'To-Do' module could cause issues, but this change guarantees the necessary components are installed, preventing unexpected problems and improving user experience.
Original PR description
This commit backports the `project_enterprise_hr_todo` bridge module that ensures that `project-todo` is correctly installed in order to use the todo mail alias feature. Before, this requirement was not enforced so anyone uninstalling To-Do could experience some issue, as the feature would still be part the `project_enterprise_hr` module, even without `project_todo` installed. Forward-Port-Of: odoo/enterprise#110593 Forward-Port-Of: odoo/enterprise#109194
This update fixes a technical error that occurred when users tried to take pictures without an IoT device connected to a quality control point. The fix prevents a system crash and guides users to properly set up the IoT device before proceeding, ensuring a smoother workflow.
Original PR description
Currently, an error occurs when the user clicks the Take Picture button without an IoT box set on the quality control point. ## Steps to replicate: - Install Quality, Purchase, IoT - Quality >…
Currently, an error occurs when the user clicks the Take Picture button without an IoT box set on the quality control point. ## Steps to replicate: - Install Quality, Purchase, IoT - Quality > Quality Control > Control points - Create a new Control point with - Type: Take A Picture - Operations: My Company: Receipts - Create and confirm a purchase order for a test product - Receipts > Quality Checks > Take A picture ## Observed behavior: TypeError: Cannot read properties of undefined (reading '0') ## Root cause: This error occurs because no device has been set on the control point. When the user clicks the **Take a Picture** button, the `onClick` method [1] is triggered. Since `this.iotDevice` is false, both `iotBoxId` and `deviceIdentifier` are undefined. These undefined values are then passed to the action function [2], which in turn passes them to the `_attemptFallbacks` function. At [3], a type error occurs because the system tries to index `iotBoxId` even though it is undefined. [1]: https://github.com/odoo/enterprise/blob/2c2e358695357a730b66480fd99c27d7e922bd0b/quality_iot/static/src/iot_picture_button.js#L7-L17 [2]: https://github.com/odoo/enterprise/blob/2c2e358695357a730b66480fd99c27d7e922bd0b/iot/static/src/network_utils/iot_http_service.js#L213-L236 [3]: https://github.com/odoo/enterprise/blob/2c2e358695357a730b66480fd99c27d7e922bd0b/iot/static/src/network_utils/iot_http_service.js#L149-L152 [4]: https://github.com/odoo/enterprise/blob/1d25675de808521dc8ad8c56bc9fbd320a0ae56b/quality_iot/static/src/iot_measure_button.js#L27-L32 ## Solution: Add a check for an unset device and notify the user to add a device to the quality point. This prevents a traceback and clearly informs the user about the issue. Similar to how it was done in [4] opw-6010095 Forward-Port-Of: odoo/enterprise#110615
This update automatically adds missing rows to pivot tables when a group by field causes the layout to shift, preventing errors. Previously, users would encounter confusing '#SPILL' errors and revert changes. Now, the system intelligently adjusts the layout and displays a clear error message if needed, improving usability.
Original PR description
When you update a pivot and you add a group by such that the pivot no longer fits in the available space, the formula becomes a #SPILL error. Users tend to think they messed up something and revert the change. They probably don't know they can hover the cell to see the error message. With this commit, missing headers are automatically added up to a reasonable amount. If it's above the threshold, it opens the error message to make it obvious. task-6023969
This update resolves a warning message appearing during time off processing. The fix removes a redundant check for blocked payslips related to leave, preventing the warning from triggering. This ensures smoother and more reliable time off calculations.
Original PR description
. Remove the check for blocked payslips corresponding to the leave to avoid triggering the warning. task-6044925
This update resolves an issue preventing the successful installation of the Helpdesk Stock module when auto-installation is skipped. The fix ensures that the necessary Sale Stock module is installed, allowing users to correctly utilize Helpdesk Stock's features. This improves the overall stability and usability of the Enterprise suite.
Original PR description
This commit fixes the error when installing helpdesk_stock with auto_install skipped which prevents the module `sale_stock` from being installed. The error is introduced by this PR: https://github.com/odoo/enterprise/pull/103051 To reproduce: install the module with `--skip-auto-install`. The fix: Change the module dependencies to include `sale_stock` to be able to access `sale_order.picking_ids` Runbot error links: https://runbot.odoo.com/odoo/error/242083
This update fixes an issue where the 281.50 PDF report occasionally generated an extra page due to formatting. The change optimizes the report layout to ensure it consistently uses only one page for standard reports, improving readability and reducing unnecessary PDF file sizes. This primarily impacts reports for Belgian companies.
Original PR description
**Behavior:** Currently when generating the 281.50 report the pdf ends up taking an extra page filled only with header and footer, the page appears when creating the report for a natural person and…
**Behavior:** Currently when generating the 281.50 report the pdf ends up taking an extra page filled only with header and footer, the page appears when creating the report for a natural person and adding a national number. The solution is not to fully prevent the report form being more than 1 page long, as some informations could span over more than one line which would make the pdf need an extra page. But to shave a few milimeters so that by default when filled with standard informations the pdf appears cleaner. **Steps to reproduce:** - Log to a Belgian company - Create a contact that is a person - Add the 281.50 tag to them - Create a credit note for any positive amount for that person and set the date to the previous year - Make sure the account used in the credit note has any 281.50 x tag assigned - Go to Accounting/Reporting/Open 325 forms and create a new form for the year indicated in the credit note - When generating the 281.50 PDF you'll seee it span over 2 pages if you have filled the national number of the contact opw-5930339 Forward-Port-Of: odoo/enterprise#111310
This update fixes a potential issue where the Gemini AI feature would sometimes return empty responses to users, creating a confusing 'no reply' experience. The fix automatically retries the request with a slightly increased budget and, after three failed attempts, gracefully informs the user of the failure. This ensures a more reliable and consistent AI experience.
Original PR description
It often occurs that gemini responses come back empty without anything to show to the users. Specifically, the response object has content but the "parts" are empty - the place were you either get a…
It often occurs that gemini responses come back empty without anything to show to the users. Specifically, the response object has content but the "parts" are empty - the place were you either get a function call or a message to the user by the LLM. Prior to this commit, when this occured, we didn't perform any explicit handling. We would always just return what the LLM responded with, which when empty would be nothing. UX wise, it would seem like something broke because the user would basically get no reply. In this commit, we add a retry mechanism in `_request_llm_google` of `llm_api_service.py`, where if we get no response, we increase the thinking budget of the next request to 512 and try again. 512 tokens were chosen completely arbitrarily - anecdotally, the model should use around 300 thinking tokens for its tasks so 512 should be enough. After 3 unsuccessful tries, we send a failure response to the user. Task-5959805 Forward-Port-Of: odoo/enterprise#111228 Forward-Port-Of: odoo/enterprise#108755
This update resolves an issue where the 'Appraisal' survey type was not appearing as an option when creating a new survey. The fix replaces a technical code change to ensure the correct survey type selection is available, improving the user experience for creating appraisal surveys.
Original PR description
How to reproduce: - install hr_appraisal_survey - log in as admin and create a new survey The selection for "Appraisal" survey type is missing in the survey form. We solve the issue by replacing the "append" in the compute method by an affectation. Task-6009719
This pull request addresses a minor typo and improves the user interface of the Odoo Enterprise payroll module. Specifically, a corrected spelling and updated styling (using `<label>` instead of `<span>`) were implemented to ensure consistency and a better user experience. The changes also included alignment adjustments for a distance input field.
Original PR description
- Correct typo "reimboursed" -> "reimbursed" - Replace `<span>` labels by `<label>` to match style (bold, arrow cursor) - Add narrow field class to distance input so that it is aligned with the field bellow Task: 5952495
This update simplifies the calendar event interface by removing a redundant button and optimizing its layout. The change addresses a recent update to the calendar event form, streamlining the user experience and improving efficiency. This ensures a cleaner and more intuitive way to manage calendar events.
Original PR description
Removing smart button as new field: `res_record` is added in the form view of calendar event. Also, changing the location of `action_view_sale_order` Task-5106718
This update resolves an issue where only administrators could delete salary rules within the payroll module. Now, superusers (with appropriate permissions) have the ability to remove outdated or incorrect salary rules, improving payroll management flexibility. This change enhances administrative control over payroll configurations.
This update optimizes the calculation of payroll figures by limiting the scope of certain computations to currently active payslips. This change prevents unnecessary processing of older, closed payslips, improving system performance and reducing potential data inconsistencies. It addresses a previous issue that could have impacted a large number of records.
Original PR description
Before this commit, `_compute_basic_net` was not limited to specific payslips, potentially affecting thousands of records and even more of `hr.payslip.line` records. This commit restricts the compute to ongoing payslips. task-6022499 Forward-Port-Of: odoo/enterprise#111437 Forward-Port-Of: odoo/enterprise#110069
This update resolves an issue where employee document filenames were incorrectly displayed as file sizes instead of the actual document names. The fix ensures that the correct document filename is shown when uploading files to the employee's personal information, improving data accuracy and usability. This was a minor bug fix related to the Payroll module.
Original PR description
Steps to reproduce: ---------------------------------- 1. Install Payroll module 2. Go to any Employee > Personal Tab 3. In the Documents section, upload any file in the Sim Card Copy field 4. Save the record Observation: ---------------------------------- File name changed to file size Issue: ---------------------------------- The `filename` attribute was missing in the view, preventing the proper computation of the document filename. Solution: ---------------------------------- Add computed fields for the document filenames and Set these fields in the `filename` attribute of the corresponding binary fields in the view Related Community PR: https://github.com/odoo/odoo/pull/249024 opw-5905408
This update fixes a bug where right-clicking on keypad buttons incorrectly triggered a long-press action. This issue stemmed from the system misinterpreting the context menu opening as a long-press. The fix ensures that only left-button actions are recognized, improving the user experience.
Original PR description
Since [1], some keypad buttons have a long-press value/action and, at worst, they enter the normal key value after the long-press duration. It was later improved by [2] (19.2) and other actions were…
Since [1], some keypad buttons have a long-press value/action and, at worst, they enter the normal key value after the long-press duration. It was later improved by [2] (19.2) and other actions were added such as long-pressing backspace at [3] (19.2) and more recently [4] (19.3) which allows calling the voicemail with long-pressing "1". In all those versions and features, there is the same bug: right-clicking the key triggers the long-press action as the context menu opens over the cursor, then our implementation ends up believing a long-press was performed. Solution: we should never have considered anything else than left-button actions anyways. [1]: https://github.com/odoo/enterprise/commit/82b4c4327fc722f55a0c14b14a916a5cddafa0eb [2]: https://github.com/odoo/enterprise/commit/b9dd0d6fc1fee479e9c8cd4c89dc0a9147891185 [3]: https://github.com/odoo/enterprise/commit/2723ef65622bb206d64e08482f3acd6594c03d28 [4]: https://github.com/odoo/enterprise/commit/dea0baa0dfd76962865717173807e4c945414cd3 task-6055182 Forward-Port-Of: odoo/enterprise#111528 Forward-Port-Of: odoo/enterprise#111490
This update enhances the accuracy of worker code searches within the Odoo Enterprise system. Previously, searches relied solely on display names, leading to potential mismatches. Now, the system incorporates DMFA and egov3 codes for a more reliable and comprehensive search experience.
Original PR description
before when searching for worker code it only used display name. now it uses dmfa, egov3 codes. Task#6020172 Forward-Port-Of: odoo/enterprise#110100
This update corrects a bug in the Social Media Clicks digest KPI calculation. A recent change removed tracking data previously used, and this fix adapts the KPI computation to the new UTM reference logic. This ensures the digest KPI accurately reflects social media click data, even with the updated tracking system.
Original PR description
Steps to reproduce the error : ============== 1. Go to Settings -> Technical -> Digest Emails 2. Open any Digest record 3. Click `Send Now` or `Test` -> A traceback occurs. Issue ============= A…
Steps to reproduce the error : ============== 1. Go to Settings -> Technical -> Digest Emails 2. Open any Digest record 3. Click `Send Now` or `Test` -> A traceback occurs. Issue ============= A previous refactor of Social UTM tracking: - removed `source_id` from social.post and now stores post reference directly in link.tracker (utm_reference) - removed `utm_medium_id` from social.account The "Social Media Clicks" digest KPI computation still relied on `social.post.source_id` and `social.account.utm_medium_id`. Since these fields were removed, the SQL query fails with a “column does not exist” error. Fix ============= Update the KPI computation to adapt to the new utm_reference logic Note ============ If a post is posted across all companies, its clicks are visible to all companies. This is an expected limitation of the new utm_reference logic See https://github.com/odoo/enterprise/commit/0058e409cd9ae4868bc8ed974f34f29d26c1f7df for more details task-5960183 Forward-Port-Of: odoo/enterprise#108728
This update ensures the 'mark as complete' button is always visible when closing returns, regardless of whether the API connection is active. This resolves an issue where the button was hidden for users relying on manual uploads, improving usability for all return closure workflows.
Original PR description
When a flow is already started, the button "mark as complete" on returns was invisible. This is an issue for some localizations that don't handle the flow when the API connection is not desired by the user. Another use case, for example, is the API connection is down temporarily, the user manually uploads it on the website, then wants to close the started return. Forward-Port-Of: odoo/enterprise#111600
This update streamlines the payrun payment process by removing redundant 'Register Payment' functionality. The 'Payment Report' button has been renamed to 'Pay' to align with the current payrun workflow, improving user experience and consistency. This change ensures payments are handled in the most efficient way possible.
Original PR description
-"Register Payment" button behavior and tests have been removed to match the payment report behavior for the payrun. -In the Payrun view, "Payment Report" button has been renamed to "Pay".
This update removes outdated aliases related to a legacy barcode system used in the Scale-Up game. These aliases were created to maintain compatibility with an older version of the game and are no longer needed as the game's barcodes have been updated. This simplifies the system and improves efficiency.
Original PR description
Barcode commands and default barcodes were re-written to be simplified in [^1] and [^2] but some aliases were created in [^3] for old barcodes and old barcode commands to still be able to work with Scale-Up game (cards were printed using the older version of barcodes.) Those barcodes were updated in the 19.0 version of the Scale-Up game so there is no reason to keep those aliases. [^1]: odoo/odoo#158827 [^2]: odoo/enterprise#59242 [^3]: odoo/enterprise#69639