Thursday, March 26, 2026
59 changes · saas-19.1
Resolved issues and error corrections
This update resolves an issue where a field was incorrectly representing the date the W4 form is filed with the employer, rather than the date it's completed. This correction ensures accurate payroll processing for US businesses using the l10n_us_hr_payroll module, aligning with tax regulations.
Original PR description
This field is about when the W4 is filed with the employer, not when it's filled in. opw-5096780 Forward-Port-Of: odoo/enterprise#111679 Forward-Port-Of: odoo/enterprise#111213
This update fixes an issue where expense refusal messages in the system were displayed in the employee's language instead of the user's. It now correctly uses the user's language for these messages, ensuring a better user experience. Additionally, the system now skips OCR processing for expenses created from Stripe payments, preventing data overwrites.
Original PR description
Problem: For expense created from stripe payment, OCR overwrites the data fetched from stripe. Solution: Skip OCR for expense created from stripe payment and put a log note explaining the same. ***…
Problem: For expense created from stripe payment, OCR overwrites the data fetched from stripe. Solution: Skip OCR for expense created from stripe payment and put a log note explaining the same. *** Purpose: One language may have been set on employee, but that employee may be using any other language in his environment, in that case user should see chatter messages in language from his environment. Before this commit: expense refusal message in chatter used employee's language. After this commit: expense refusal message in chatter uses language of user related to employee. *** Problem: Expense Digitalization (OCR) setting is not properly applied. Steps to reproduce:- - Create a new database with demo data and install `hr_expense_extract`. - Switch to `My US Company` and create an employee for that company. - In expense settings set Expense Digitalization (OCR) to Digitize on demand only. - Create an expense for above created employee and attach receipt. - Expense is digitized automatically. Cause: Here https://github.com/odoo/enterprise/blob/d8acbf22fec266ff7d5dcc9499543e6bea3c1325/hr_expense_extract/models/hr_expense.py#L43 `self.env.company` gives that user's default company instead of currently active company in company selector. Solution: Use `company_id` set on expense to determine Expense Digitalization setting. *** task-5712223 Forward-Port-Of: odoo/enterprise#106261
This update fixes a minor issue where many search dialogs within the Web Studio tool lacked clear titles. Now, most of these dialogs display meaningful titles, improving the user experience and making it easier to navigate and understand the available options. This enhancement ensures a more intuitive workflow for users creating and modifying web applications.
Original PR description
Before this commit, a lot of search More dialogs did not have a meaningful title because one parameter was usually not set. After this, most or all the selectCreateDialog have a meaningful title task-5932652 Forward-Port-Of: odoo/enterprise#111948
This update fixes a reporting issue where the KMD INF report incorrectly included partners with turnover below 1,000 EUR. Now, the report accurately filters partners based on a combined total of invoices and credit notes, ensuring more precise financial reporting. The changes improve data integrity and reporting reliability.
Original PR description
The KMD INF report should only include partners whose total turnover for the period reaches 1,000 EUR. Before this PR: - The report did not check this threshold, so partners below €1,000 were still shown. After this PR: - The threshold is now calculated correctly based on specific rules: - The threshold is calculated separately for invoices and credit notes per partner. - If invoices total base amount >= €1,000 OR credit notes total base amount >= €1,000, both invoices and credit notes are included in the report - The same logic applies to bills and refunds in Part B. task-5373606 Forward-Port-Of: odoo/enterprise#111737 Forward-Port-Of: odoo/enterprise#101333
This update corrects a problem where ISO20022 files generated for Swiss bank accounts were being incorrectly formatted, leading to rejection by the bank. The fix ensures the correct 'PAIN 09' version is used, resolving compatibility issues after database migrations. This prevents delays in payment processing.
Original PR description
To reproduce the issue:
- Create a database in 17.0, with a Swiss company, and install account_sepa. Make sure the bank journal uses the Swiss IS020022 PAIN version.
- Migrate this database to 18.0
- Generate an ISO20022 xml file for the Swiss company
==> The file is wrongly formatted, and will be rejected by the bank.
This happens because the sepa_pain_version field of the journal is still set to its old selection value ('pain.001.001.03.ch.02') after migration, which is not supported anymore. The ORM hence returns an empty value when accessing the selection field, and does not enter the proper conditions when generating the file.
An upgrade fix has been made here https://github.com/odoo/upgrade/pull/9771. This commit makes sure already-migrated databases dynamically fix the issue as well.
opw-6060612
Forward-Port-Of: odoo/enterprise#111949This update corrects a minor issue related to how fields are populated when creating new records in Odoo. Specifically, it ensures that the correct model is used during the filling process. This enhancement improves data accuracy and reliability within the system.
Original PR description
See https://github.com/odoo/odoo/pull/199647. Forward-Port-Of: odoo/enterprise#111898 Forward-Port-Of: odoo/enterprise#109725
This update ensures that all attendees of an appointment, including internal users, receive booking notifications regardless of whether the event syncs with Google or Outlook. Previously, notifications were limited, causing organizers and followers to miss important updates. This change improves communication and ensures everyone is informed about appointment details.
Original PR description
In [1] we prevented cancelation emails from being sent when the booking was synced via google or outlook calendar. However this means even followers who would not be notified by the mail provider (not assisting to the meeting) would not be notified. As well as the organizer who is doing to booking/cancelling from the perspective of the mail provider, as the meeting is created from their account. Instead we should keep sending the "appointment booked" template in all cases as it is only followed by internal users to whom it is always relevant. As for cancelation templates, it should stil be sent to internal users. Partners of the meeting however need not be notified and may be unsubscribed if syncing is enabled, as cancellation typically only happens once. task-5152917 [1]: https://github.com/odoo/enterprise/pull/60913 Forward-Port-Of: odoo/enterprise#111856 Forward-Port-Of: odoo/enterprise#96638
This update prevents the entire reports cron job from stopping if an error occurs during a single report export. Previously, a single failure would halt the entire process. Now, the cron will continue to attempt exporting other reports, improving reliability and ensuring timely report generation.
Original PR description
If an error is raised during the export of reports cron execution, the whole cron stops due to the fact that the error is never catched This commit will ensure that even if there is an error with one of the report export, the cron won't top and will try to send to other documents task-5469038 Forward-Port-Of: odoo/enterprise#111732 Forward-Port-Of: odoo/enterprise#105191
This update addresses a security concern by hiding the total due amount from minimal cashiers when viewing partner lists. This prevents cashiers from inadvertently accessing sensitive financial information, enhancing data protection and privacy. The change was implemented as a bug fix.
Original PR description
Before this commit, the total due amount was visible for minimal cashier in the partner list. This could leak sensitive information to the cashier, which is not desirable. opw-6039529 Forward-Port-Of: odoo/enterprise#111103
This update resolves an issue where users couldn't add reactions to messages within the ‘mail.group’ model in Discuss. The fix ensures the ‘add reaction’ button isn't displayed for message types that don't inherit from the standard ‘mail.thread’ model, improving stability and usability.
Original PR description
Steps to reproduce: - Install the mail_group module - Open Discuss - Go to the History tab - Add a reaction on a message that has model mail.group - Throws an error The error occurs because the mail.group model does not implement the `_get_allowed_access_params()` method, which is invoked during the process here. Actually, the "add reaction" button should not be shown on messages whose model does not inherit from mail.thread. This commit fixes the issue by hiding the "add reaction" button on messages with models that don’t inherit from mail.thread, such as `mail.group`. community: https://github.com/odoo/odoo/pull/218615 Task-5098050 Forward-Port-Of: odoo/enterprise#111919 Forward-Port-Of: odoo/enterprise#111271
This update fixes a problem preventing users from successfully connecting to their databases. Previously, connection attempts were blocked due to access rights issues. Now, users are correctly redirected to the database website for login or connection.
Original PR description
The aim of this commit is to allow a db_user to be able to connect to a database in which he should be able to connect. Before this commit: Clicking on connect would stumble upon access rights issues on system.parameter and on `database_api_key_to_use`. After this commit: User are correctly redirected on the db website, either already connected or on the login page. task-id: 6046086 Forward-Port-Of: odoo/enterprise#111965
This update resolves an issue in Odoo's Web Studio where invisible fields would lose their visibility settings when toggling the 'Show Invisible Elements' option. The fix ensures that the intended invisible state is consistently maintained, preventing unexpected field visibility changes. This improves the user experience and accuracy of customizations within Web Studio.
Original PR description
Steps to reproduce ================== - Install contacts,web_studio - Login as admin - Go to contacts - Open any record - Open studio - Click on any field - Add the "Role / Portal" group - Toggle the…
Steps to reproduce ================== - Install contacts,web_studio - Login as admin - Go to contacts - Open any record - Open studio - Click on any field - Add the "Role / Portal" group - Toggle the "Show invisible Elements" checkbox - Click on the same field => The field is marked as invisible - Add an invisible condition => The invisible condition is lost (but still applied on the view) Cause of the issue ================== In studio, when fetching the view, the invisible attribute is set to True when the user does not have access to the field (when he is not part of the groups). The goal is to make the field invisible in studio unless the "Show invisible Elements" is toggled. But this causes the actual value of the invisible attribute to be lost. Note that this also applies to the column_invisible attribute. Solution ======== If an invisible/column_invisible attribute is present on the nodes with missing access, we copy the actual value to the `actual_invisible` attribute. We then use that value in the editor, when present. opw-6026971 Forward-Port-Of: odoo/enterprise#111868 Forward-Port-Of: odoo/enterprise#111299
This update resolves an issue where the HR Work Entry Attendance module could only record a single attendance event. Now, multiple attendance records can be created for a single work entry, providing a more accurate and flexible way to track employee time. This improves the system's ability to capture complete attendance data.
This update fixes a discrepancy in the generation of SEPA payment files. The system was incorrectly displaying an empty field for a critical version number, which has now been corrected to PAIN 09. This ensures accurate and compliant payment file creation.
Original PR description
https://github.com/odoo/enterprise/commit/80f9f966d7db793ae82e65c76514323cb10e34ab tried to fix the issue, but assumed the field would be returned empty by the ORM when the value was inconsistent with the db. It's not true: it returns the database value ; only the UI shows the field as empty. Forward-Port-Of: odoo/enterprise#112141
This update addresses a security vulnerability where automated email systems (like Mail Defender) could unintentionally cancel or reschedule appointments. The system has been updated to replace direct links with a form, preventing these automated systems from triggering actions. This ensures appointment scheduling remains reliable and secure.
Original PR description
…ointments Mail defender services may click URLs in emails to verify their contents. Additionally they may sometimes interact with the page and visit related pages. For this reason URLs sent in emails should not trigger any action directly nor contain any simple link that could trigger an action. The "cancel/reschedule" anchor URL is replaced with a form which bots should not click. We also port the fix done in appointment to the view in appointment as it replaces the original view in this module. task-4555579 Forward-Port-Of: odoo/enterprise#112040 Forward-Port-Of: odoo/enterprise#79831
This update resolves a minor issue where the helpdesk tour occasionally failed due to the tour attempting to click a button before the kanban view was fully loaded. By ensuring the kanban view is fully rendered before the tour attempts to interact with it, this fix improves the overall stability and reliability of the helpdesk tour experience.
Original PR description
This PR fixes a flickering failure in the `helpdesk_tour` ### Problem In the kanban view, the tour occasionally tried to click the "New" (quick create) button before the view's internal structure was fully painted. This caused the tour to click a wrong element. ### Solution Updated the step trigger to include a selector for the kanban group (`.o_kanban_group`). By requiring the presence of the group container, we ensure that: 1. The page content has actually loaded. 2. The specific "New" button within the kanban context is visible and ready. **Runbot ID: 223081** Forward-Port-Of: odoo/enterprise#110333
This update corrects a technical issue where the system incorrectly limited VAT number lengths when integrating with FedEx. The change ensures that VAT numbers, particularly those used in countries like Switzerland with longer formats, are properly transmitted to FedEx, preventing delivery errors. This ensures accurate shipment processing and avoids potential disruptions.
Original PR description
Issue ----- Fedex limits VAT numbers to 18 char long strings. This is contradictory with how they are stored in db for some countries (eg Switzerland, where the format is CHE-123.456.788 VAT -> 19 char long). Steps to reproduce ----- - Setup Fedex - Create a customer - Company (for VAT number) - VAT number: CHE-123.456.788 TVA - Create a delivery and confirm it Cause ----- VAT number is retrieved as is in https://github.com/odoo/enterprise/blob/0220d413988708c662ffca3c7fb38641c3d9870a/delivery_fedex_rest/models/fedex_request.py#L332-L343 ----- Ticket: opw-5926452 Forward-Port-Of: odoo/enterprise#111864 Forward-Port-Of: odoo/enterprise#109999
This update resolves an issue where only administrators could delete work entry types within the payroll module. Now, users with SUPERUSER permissions can also delete these types, streamlining payroll administration. This change improves operational efficiency and reduces reliance on technical support for this task.
Original PR description
Forward-Port-Of: odoo/enterprise#111967
This update corrects a problem in the demo data for the l10n_ch_hr_payroll module, specifically removing an incorrect record and fixing a reference to the insurance line within the insurance group. This ensures the demo data accurately reflects the module's functionality and improves the reliability of testing.
Original PR description
This commit removes an unnecessary record and fix wrong reference to the insurance line of the insurance group in the demo data of the l10n_ch_hr_payroll module. task-6070942 Forward-Port-Of: odoo/enterprise#112121
This update resolves a minor issue in the Belgian payroll module (l10n_be_hr_payroll) that could occasionally lead to incorrect reporting of termination holidays. The fix ensures that the system correctly handles cases where specific property settings are missing, improving the accuracy of payroll reports.
This update fixes a display issue in the external value pop-up, ensuring it uses the correct decimal separator based on the user's language settings. Previously, the pop-up always used a dot, regardless of the user's locale. This change ensures numbers are displayed correctly for all users, improving data clarity and accuracy.
Original PR description
Description of the issue this commit addresses: The external value pop up doesn't take into account the locale to chose which decimal separator to use. --- Desired behavior after this commit is merged: The decimal separator is the one determined by the language of the user rather than always a dot. --- task-6010533 Forward-Port-Of: odoo/enterprise#111997 Forward-Port-Of: odoo/enterprise#109948
This update resolves an issue where attachment updates for invoices were sometimes failing, leading to inconsistencies in the system. By updating attachments within the same transaction as the move data, this change guarantees that both updates are reliably committed, maintaining data integrity. This ensures accurate invoice processing.
Original PR description
Was committing the move fields update, then updating the attachment. This might create an issue were the move update commits successfully, but setting the attachment fails and we end up with an inconsistency. Set attachment in the same transaction as the move update. task-6035727 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255745 Forward-Port-Of: odoo/odoo#255262
This update fixes an issue where the 'Buy to Resupply' option was automatically re-enabled after being manually disabled. The change ensures that this option remains disabled unless specifically configured, improving order management and reducing potential overstocking. This resolves a previous bug impacting warehouse efficiency.
Original PR description
Steps to produce: --- - Install `purchase_stock` module. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. -…
Steps to produce: --- - Install `purchase_stock` module. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. - Open `YourCompany` record. - Click on Routes > open `Buy` > enable `Products`. - Return to `YourCompany` and disable `Buy to Resupply`. Issue: --- - After disabling `Buy to Resupply`, the option is automatically re-enabled. Root cause: --- - In [1], `buy_to_resupply` is set to true if either buy route is product selectable OR the current warehouse is included in buy route warehouses. - In the `_inverse_buy_to_resupply` method, unchecking the flag only unlinks the warehouse from the route. However, if `product_selectable` is still enabled, the compute logic will continue to set the field back to true. Solution: --- - `warehouse.buy_to_resupply` is now set to True only when the warehouse ID is present in the buy route’s warehouse_ids. [1] https://github.com/odoo/odoo/blob/aeaace7c70b7ac3db68f188c9c517f1ff849e55d/addons/purchase_stock/models/stock.py#L57 opw-5476302 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250360
This update fixes a bug that prevented the Google address autocomplete feature from working correctly when certain modules modified address fields. The change adds a new widget to street fields and handles address autocomplete in e-commerce, ensuring accurate and reliable address input for users. It also updates access rights for city data.
Original PR description
_= base,base_address_extended,google_address_autocomplete,website_sale_autocomplete The Google autocomplete feature was breaking when modules such as base_extended_address modified the address form (e.g., replacing street with street_name, street_number, etc.). In this commit: --- - Add the Google autocomplete widget to street-related fields. - Also same thing handled in frontened (e-commerce address autocomplete). - and update 'city_id' from available cities records if matches with google result. - ```update access_rights for RecCity Model - grant read access to public user``` --- task-5382984 opw-5362597 Forward-Port-Of: odoo/odoo#255728 Forward-Port-Of: odoo/odoo#238672
This update resolves an issue where the interactive tour pointer would disappear when navigating between different elements, particularly within modals. The fix ensures the pointer remains visible and functional regardless of the currently active element, improving the user experience. This enhancement guarantees consistent tour guidance for all users.
Original PR description
Before this commit, the pointer disappeared when the active element change before the anchor of the tour pointer. So, it was not visible in modals for example. Now, the check is done when the active element change and when the isVisisble is read. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252019