Daily updates from Odoo
Tuesday, March 24, 2026
58 changes · master
New functionality added to Odoo
This update adds a new setting within the CRM to connect with Markethub, a platform for managing marketplace advertising. By enabling this integration, users can automatically capture leads generated from their online ad campaigns directly into the CRM, streamlining lead management and sales processes. This enhances the ability to track and convert leads from marketplace marketing efforts.
Original PR description
Introduced a new setting to enable Markethub integration from CRM configuration. This allows users to connect their marketplace accounts and automatically capture leads from ad campaigns.
This update introduces a new EC Sales list report specifically tailored for Hungary, providing more detailed sales data. The report groups transactions by key tax codes (B, C, K, R, V) and transaction status, offering a more granular view of sales activity. This change also includes supporting data and workflows for accurate reporting.
Original PR description
This commit implement the EC Sales list for Hungary This report is a bit different from the main EC Sales list, instead of just grouping the lines on partner_id, we need to group on specifics fields on account.move: - l10n_hu_transaction_type: B, C, K, R or V This field represente the type of Intra Community Transaction, it's a selection field with all the legal possible values. We leave the field blank for normal transactions. - l10n_hu_transaction_state: U or T Represent if the transaction is a new one (U) or a correction (T) The grouping of the report works like this: groupby partner_id, l10n_hu_transaction_type, l10n_hu_transaction_state Linked:https://github.com/odoo/odoo/pull/234962 [task-4950959](https://www.odoo.com/odoo/project/967/tasks/4950959)
This update introduces a new model for managing UrbanPiper store settings, streamlining the process and providing more flexibility for food delivery configurations. Key improvements include support for provider pricing, tax settings, and customizable order notifications, enhancing the UrbanPiper integration within the system.
Original PR description
*: pos_urban_piper_enhancements, l10n_in_pos_urban_piper, Added a dedicated `pos.urbanpiper.store` model to manage UrbanPiper store configurations for food delivery. Configuration fields previously stored on `pos.config` are now moved to this new model. Each POS configuration is linked to an UrbanPiper store, allowing for easier management of additional fields and providing a simpler, more streamlined UI. Additional Features: - Support for provider-based pricelists - Tax type configuration (inclusive or exclusive) - Customizable UrbanPiper order notification sound - “Flush & Sync Menu” operation Task-4977992 Upgrade PR: https://github.com/odoo/upgrade/pull/8330
Enhancements to existing features
This update ensures that follow-up reminders are consistently sent to customers, even when a large volume of reminders are pending. The system now automatically re-triggers the reminder process if there are still outstanding reminders, preventing delays and improving customer communication. A new setting allows users to adjust the number of reminders processed in each batch.
Original PR description
In case there is a lot of followup to process, the followup cron doesn't retrigger and we have to wait the next day for them to be sent. This commit make use of the ir.cron progress API so that the cron is retriggered if there are followup left to be sent. We also make the batch_size configurable to that a user could tune it on the cron. opw-6042472 Forward-Port-Of: odoo/enterprise#110918
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 update enhances the visibility of tax return export files for users. When tax returns are validated, the XML and PDF files are automatically generated and made accessible within the Odoo chatter, where they are pinned for easy access. This simplifies the process of reviewing and sharing tax return information.
Original PR description
The xml and pdf of export of the tax return are not so visible for the user, thus the change creates the files on the validation of the returns and exports them to the chatter where they would be pinned task: 5871091
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 streamlines the process of creating and managing audit reports by introducing a clearer system for tracking audit cycles. Previously, changes to cycles were difficult to manage, but now the system automatically creates and removes checks based on selected cycles, improving accuracy and traceability.
Original PR description
*= account_asset, account_fiscal_categories, account_loans, accountant_fleet, accountant_hr_expense, l10n_be_reports This commit improves the audit working file editing flow and refactors how audit…
*= account_asset, account_fiscal_categories, account_loans, accountant_fleet,
accountant_hr_expense, l10n_be_reports
This commit improves the audit working file editing flow and refactors how
audit cycles are handled.
Previously, audit cycles were implicitly managed through skipped cycle
logic, which made changes hard to track when cycles were added or removed
and audit over time.
Key changes:
- Replaced inline name editing in the audit kanban with a Configure option
opening a dedicated form view to allow editing of name, dates, and audit cycles.
- Introduced a new model for audit cycles and replaced skipped cycle logic with
an explicit m2m `cycle_ids` field on audit returns to enable proper
tracking of cycle changes and linked check templates to cycles via a m2o field.
- Now while editing, automatically create checks for newly selected cycles and
remove checks for unselected ones, without altering the status of existing checks.
Related: https://github.com/odoo/upgrade/pull/9233
task-5163902This 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
This update disables the automatic refresh of GST tokens for the Russian localization (l10n_in_reports) module. Previously, tokens refreshed every 5 hours, but now they are permanently disabled. Manual triggering of the refresh process is now required, ensuring compliance with current regulations.
Original PR description
With this PR, the GST token refresh cron interval is updated from 5 hours to 9999 months to effectively disable automatic execution. The cron will instead be triggered manually from `validate_otp` and `_cron_refresh_gst_token` based on the token expiration time. Forward-Port-Of: odoo/enterprise#109937
This update resolves an issue where default values weren't consistently applied to VoIP call records. By reverting to a method that triggers Odoo's retry mechanism on unique constraint violations, the system now reliably handles potential errors and ensures data integrity. This improves the overall stability of the VoIP functionality.
Original PR description
Since 2d406b71cf17d91baa30070899515f22f5ec3222, voip.call records are created using a raw SQL query rather than the ORM. This has the side effect of not applying the default values. The main reason it was done with a raw SQL query was to be able to leverage Odoo default retry mechanism on unique constraint violation, since `UniqueViolation` exception doesn't normally trigger a retry. This commit reverts the approach to using the ORM, and raises a `ConcurrencyError` on `UniqueViolation`. The `ConcurrencyError` triggers the retry mechanism, allowing for the same behavior as the raw SQL query, while keeping the ORM features (e.g. default values). [Task-6036473](https://www.odoo.com/odoo/project/5778/tasks/6036473) Forward-Port-Of: odoo/enterprise#111104
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 corrects a visual discrepancy between the AI live chat snippet editor and its actual display on the website. The fix ensures that the AI snippet appears correctly across different devices and configurations, resolving a rendering issue. This improves the user experience and consistency of the AI live chat feature.
Original PR description
Scenario: - add ai livechat snippet block - switch to mobile - enable "Fallback Button" - save Result: the rendering is different between edition and real usage of AI livechat snippet. Cause: structure and classes don't match Fix: make the structure and classes match. opw-5458575 pr note: I copied `ai_website_livechat.AILivechatComponent` in `ai_website_livechat.s_ai_livechat_edit` but it might make more sense to just render the owl widget with a class that neuter the AI (this way we don't need to update both template at each change) Forward-Port-Of: odoo/enterprise#109569
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 project timesheets didn't accurately reflect changes in employee assignments on manufacturing orders. The fix automatically updates the AAL (analytic accounting line) associated with the work center when an employee is switched, ensuring accurate time tracking and reporting. This improves the reliability of project cost data.
Original PR description
### Steps to reproduce: - Create an MTO product and another Service product that create a project and task - Create a quotation with both products - Create two employees with different hourly cost - Go to Manufacturing order - Configure an employee to manufacture the product at a work station. - Observe the project dashboard - Go back to the MO and change the employee on the work station - Notice the project dashboard Timesheets section doesn't have any change on the amount ### Cause: This is happening because when changing the employee we don't modify anything in the AAL linked to the work station. As we only modify the AAL when the duration change. ### Fix: We call _create_analytic_entry when we change the employee on the work station to change the amount and the employee_id for the AAL. opw-5939321 Forward-Port-Of: odoo/enterprise#111040 Forward-Port-Of: odoo/enterprise#109695
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 resolves an error that prevented users from filtering products by date on the rental shop page. The fix adjusts how the system handles related resources to correctly process date-based searches. This ensures accurate product listings and a smoother user experience for rental bookings.
Original PR description
Currently, an error occurs when searching by date on the shop page. **Steps to Reproduce:** - Install the `website_sale_renting_planning` module. - Go to `Products` and create a product with the…
Currently, an error occurs when searching by date on the shop page. **Steps to Reproduce:** - Install the `website_sale_renting_planning` module. - Go to `Products` and create a product with the following configuration: - `Type`: `Service` - Under the `Sales` tab, set the `Periodicity` value. - Go to `Planning` > `Configuration` > `Roles` and switch to `Kanban` view. - Create a record by adding a `Resource` and the `service` product. - Enable `Sync Shifts and Rental Orders` in this role. - Go to `Website` > `Shop`. - Click `Edit` > `Style` > enable `Rental` by selecting it in the `toolbar`, then `save`. - Set the `start date` and `end date` and `apply` the filter. **Error1:** `ValueError: Invalid field 'resource_id' on model 'planning.slot' for 'resource_id:recordset'.` **Error2:** ` File "/home/odoo/odoo18/community/addons/resource/models/resource_calendar.py", line 455, in _leave_intervals_batch for _, resources in resources_per_tz.items():` `AttributeError: 'resource.resource' object has no attribute 'items'` This error occurs because after this [recent commit], the field `resource_id` was replaced by `resource_ids` with a M2M relation. When the user searches by date, the system attempts to group planning slots by `resource_id`, which raises the error[1]. After this [new commit], _leave_intervals_batch expects resources grouped by timezone, but here only resources are passed [2], which raises the error [3]. This commit ensures that `search_fetch` is used to retrieve `resource_ids`, since `read_group` cannot group records by M2M fields. It also ensures that resources with their timezone are correctly passed to _leave_intervals_batch. [recent commit]: https://github.com/odoo/enterprise/commit/fbf8b2ac67c71ca0abfc75df543069696bd2d29b [new commit]: https://github.com/odoo/odoo/commit/2dff65ab8b5a9db21d5b476065a72755cc4625be#diff-11ecbc9f00711187e60b88f84c618046bb24ada8c39cb29037568c1aa46f06a5 [1]: https://github.com/odoo/enterprise/blob/288c7d9c1f29746e0abe0338801621c033a2280c/website_sale_renting_planning/models/product_template.py#L30 [2]: https://github.com/odoo/enterprise/blob/288c7d9c1f29746e0abe0338801621c033a2280c/website_sale_renting_planning/models/product_template.py#L50 [3]: https://github.com/odoo/odoo/blob/9e41753a14c7398927445d8dc8f69dc57047b0b6/addons/resource/models/resource_calendar.py#L453 sentry-7325252044 Forward-Port-Of: odoo/enterprise#110306
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 error in the reports generated for sales in Ecuador (l10n_ec_reports_ats). The system now correctly identifies foreign partners ('partner_ext') using the appropriate tax identifier ('02') based on their company status, aligning with AFIP requirements. This ensures accurate reporting and compliance for export sales transactions.
Original PR description
Since `tipoCliente` is now determined using the computed `is_company` field, the test data must reflect this logic. `partner_ext` represents a foreign partner and is considered a company, therefore its `tipoCliente` should be set to '02'. See: https://github.com/odoo/enterprise/commit/a779badac35cf4a8f483f490e8ae29eb6bf3d2c5 `l10n_ar_edi`: For foreign partners, AFIP requires the CUIT pais based on the partner’s country and document type, not on partner.is_company. In multi-localization databases, is_company may be influenced by local heuristics and lead to picking the wrong foreign tax identifier. Use the identification type instead: VAT documents map to the legal-entity CUIT pais, while non-VAT documents map to the natural-person one. See: https://github.com/odoo/enterprise/pull/86089#discussion_r2128977870 runbot-241126 Forward-Port-Of: odoo/enterprise#110055
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 update resolves a performance issue related to reading large spreadsheets in Odoo. Previously, Odoo used base64 encoding/decoding, which slowed down processing. Now, the system can directly read the spreadsheet data, resulting in a significant performance improvement.
Original PR description
We used to read from the attachment linked to the `spreadsheet_snapshot` binary field to avoid useless base64 encode/decode. On large spreadsheets, it would have a significant impact on performance. However, since odoo/odoo@41fe2ebdb9cc37341362d7af829c087a5f72f9f1, the orm no longer use base64 internally. We can now directly read the field. Task-6055190
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 ensures invoices accurately reflect subscription end dates, especially when they fall mid-period. It automatically prorates charges for products with prorated pricing, preventing overbilling and improving customer billing accuracy. This resolves a previous issue where subscriptions were billed for the full period regardless of the end date.
Original PR description
Before: - Invoicing ignored the subscription end date when it occurred within an invoiced period. Customers were billed for the full period even if the subscription ended earlier. After: - Invoicing period now ends at the subscription end date when it falls within the billing cycle. Invoice amounts are prorated when the product is configured for prorated pricing. Task-5870935
This update fixes an issue where the PayRun interface wasn't displaying correctly on resized windows, causing information to disappear from the user interface. The changes ensure that all PayRun details are consistently visible and accessible, regardless of screen size, improving usability.
Original PR description
**Description:** In the new payrun flow (https://www.odoo.com/odoo/project/1251/tasks/5362147) If you resize the window, the title is not well displayed and depending on the size, some information disapear event for the kanban cards without informations: Title issue Status bubble invisible: First button invisible (all in the dropdown): **Iplementation:** . Update payrun_card & payrun_button_box views to adapt window resizing task-5955169
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 corrects a technical issue impacting UK top-up payments. The system previously used incorrect country data due to a change in the UK account payload structure. This change ensures accurate top-up processing for UK customers, resolving a potential payment disruption.
Original PR description
Fix the UK top-up logic as UK accounts payload structure shifts from the EU where the country data is located in the EU payload it could be found under bank_transfer[financial_adresses][0][iban][country] and bank_transfer[country] but in the uk payload it can only be found in the second As we used the first one, we are now switching it to the second as it's the only common ground Forward-Port-Of: odoo/enterprise#111588
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 resolves an issue where a payslip would fail to generate correctly when an employee's contract started mid-period. The fix ensures the system handles contract start dates accurately, preventing errors and guaranteeing proper payroll processing for new hires. This improves the reliability of payroll calculations.
Original PR description
An error is thrown when an employee's contract starts mid-period. ```py Invalid Operation Wrong python code defined for: - Employee: Cesar Osbaldo Cruz Solorzano - Version: False - Payslip: Payslip -…
An error is thrown when an employee's contract starts mid-period.
```py
Invalid Operation
Wrong python code defined for:
- Employee: Cesar Osbaldo Cruz Solorzano
- Version: False
- Payslip: Payslip - Cesar Osbaldo Cruz Solorzano - 01/16/2026 - 01/31/2026
- Salary rule: Integrated Daily Wage (Base) (INT_DAY_WAGE_BASE)
- Error: AttributeError("'bool' object has no attribute 'year'") while evaluating
'\nresult = round(payslip.l10n_mx_integration_factor * payslip.l10n_mx_daily_salary, 4)\n
```
Steps to reproduce:
1. Install `l10n_mx_hr_payroll` modules
2. Switch to ESCUELA KEMPER URGATE company
3. Go to Employees and open Cesar Osbaldo Cruz Solorzano
4. Go to Payroll tab, change the start date of contract to 01/10/2026 and save
5. Go to Payroll > Payslips > Payslips and create a new pay run
6. Select Salary Structure 'Mexico: Regular Pay', Pay Schedule 'Monthly' and Period '01/01/2026 -> 01/31/2026'
7. Click on Continue, select Cesar and click on Select
8. An error is thrown
Problem:
In `_compute_integration_factor` method, `_get_first_contract_date` is called with context `before_date`, it returns `False` as the contract starts after the payslip period. This causes an error when trying to access the `year` field of `start_date`.
Solution:
Add a fallback to call `_get_first_contract_date` without context in case the first call returns `False`.
target: saas-18.4
task-6034836
Forward-Port-Of: odoo/enterprise#111417
Forward-Port-Of: odoo/enterprise#110568This update fixes an issue where DATEV exports were inaccurate when a move line's account was changed. Now, updating an account on a move line automatically updates the DATEV account, ensuring the exported data reflects the correct financial information. This prevents duplicate lines in DATEV reports.
Original PR description
Description of the issue this commit addresses: When the account of a move line is updated (e.g. replacing the suspense account with the actual one), l10n_de_datev_main_account_id was not recomputed which leads to an incorrect DATEV export with duplicate lines. Desired behavior after this commit is merged: Changing the account_id of a move line recomputes l10n_de_datev_main_account_id so that the exported DATEV data reflects the current accounts of the move. Forward-Port-Of: odoo/enterprise#111493
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 fix prevents a data error that occurred when updating payroll information for Saudi Arabian companies. The issue stemmed from a missing category reference during the data update process. The change ensures that related category data is updated first, resolving the error and allowing the scheduled 'Payroll: Update Data' action to run successfully.
Original PR description
Currently, an error occurs when the "Payroll: Update Data" scheduled action is executed. **Steps to Reproduce:** - Install `l10n_sa_hr_payroll` with demo data. - Switch to `Saudi Arabian` company. -…
Currently, an error occurs when the "Payroll: Update Data" scheduled action is executed. **Steps to Reproduce:** - Install `l10n_sa_hr_payroll` with demo data. - Switch to `Saudi Arabian` company. - Go to `Payroll` > `Configuration` > `Salary` > `Rule Categories`. - Delete all records related to the Saudi Arabian company. - Go to `Scheduled Actions` and run `"Payroll: Update Data"`. `ValueError: External ID not found in the system: l10n_sa_hr_payroll.l10n_sa_category_provision` After [this commit], the category_id field becomes non-required, allowing users to delete a rule category record even if it is linked to a salary rule. When updating the data file [1], this causes an error due to the missing rule category [2]. This commit ensures that, when updating the salary rule data, the rule category data is updated beforehand, as shown here [3]. [this commit]: https://github.com/odoo/enterprise/commit/c663fd2a81b7f6b34f8199fdbdc4a75c4f21379e [1]- https://github.com/odoo/enterprise/blob/5ab4cb8bbf8211783a23a4334b633d52633b0324/l10n_sa_hr_payroll/models/hr_payslip.py#L157-L165 [2]: https://github.com/odoo/enterprise/blob/5ab4cb8bbf8211783a23a4334b633d52633b0324/l10n_sa_hr_payroll/data/hr_salary_rule_saudi_data.xml#L249 [3]: https://github.com/odoo/enterprise/blob/5ab4cb8bbf8211783a23a4334b633d52633b0324/l10n_ke_hr_payroll/models/hr_payslip.py#L9-L18 sentry-7349905716 Forward-Port-Of: odoo/enterprise#111438
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 fixes an issue where multi-select rectangles on scaled PDF signatures were inaccurately drawn, leading to incorrect selections. Additionally, the update resolves a potential error when dropping elements and ensures helper lines align correctly during dragging, improving the overall signature experience. This enhances the reliability and usability of our digital signature process.
Original PR description
When drawing the multi-select rectangle on scaled PDF pages, the rectangle corner was not properly synchronized with the mouse pointer, leading to inaccurate selection. Additional fixes: - An uncaught error could be triggered when dropping elements on the page. - Helper lines during dragging were not accurately aligned around sign items. task-6049004 Forward-Port-Of: odoo/enterprise#111156
This update fixes an issue where repositioning PDF signs caused multiple resize events, leading to unpredictable behavior. The change ensures only one resize listener is attached per sign, resulting in a more reliable and consistent resizing experience for users. This improves the overall usability of the PDF sign feature.
Original PR description
Previously, repositioning a sign item inside the PDF iframe would attach multiple resize event listeners. This led to inconsistent and unintuitive resizing behavior. This commit ensures that only a single resize listener is registered per item, avoiding duplicated handlers and restoring stable interaction. task-6048759 Forward-Port-Of: odoo/enterprise#111520 Forward-Port-Of: odoo/enterprise#111146
This update ensures that sign document deadlines are always accurate and automatically adjusts when a document's validity date changes. It also removes orphaned 'Signature Request' activities when a document is canceled, preventing clutter and improving the user experience.
Original PR description
1. **Date Sync: mail.activity & sign.request** **Before Fix:** When the validity_date on a sign.request was updated, the linked mail.activity (the "Please Sign" task) did not update its deadline.…
1. **Date Sync: mail.activity & sign.request**
**Before Fix:** When the validity_date on a sign.request was updated, the linked mail.activity (the "Please Sign" task) did not update its deadline. This led to a discrepancy where a document might expire in 2 days, but the user's to-do list still showed a deadline from a week ago.
**Expected Behavior:** The activity deadline should always reflect the current validity of the document to ensure signers are aware of the actual remaining time.
**Fix:** Overrode the write method on sign.request. When the validity_date is modified, the system now automatically updates the date_deadline of all associated records in sign_activity_ids.
2. **Activity Cleanup on Cancel**
**Before Fix:** Canceling a sign.request changed the document state but left "Signature Request" activities sitting in users' to-do lists. This resulted in "orphan" activities that pointed to canceled documents, cluttering the chatter and the activity bin.
**Expected Behavior:** Canceling a request should globally clean up any pending tasks related to that specific request.
**Fix:** Updated the cancel method to unlink associated activities.
**Note on Conflict Prevention:** To avoid a UserError/MissingRecord when canceling directly from the activity widget (where the interface attempts to delete the activity immediately after calling the cancel method), a context flag skip_sign_activity_unlink was introduced. This ensures that if the activity is already handling its own deletion, the backend doesn't "double-delete" it.
Task: 5989542
Forward-Port-Of: odoo/enterprise#111592Features 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
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
Code cleanup and technical improvements
This update integrates JPK FA reporting functionality into the Polish tax reports within Odoo Enterprise. This improves the accuracy and compliance of financial reporting for Polish businesses by adding support for the JPK FA format.
Original PR description
Merging the folder `l10n_pl_reports_jpk_fa` into `l10n_pl_reports`.
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