Daily updates from Odoo
Thursday, August 28, 2025
34 changes · master
New functionality added to Odoo
The accounting payment system now supports the ISO 20022 format used by major US banks for domestic ACH transfers. This helps businesses prepare payment files that better match Bank of America and JP Morgan Chase requirements, with international and mixed transfers planned for later.
Original PR description
US banks are starting to implement the ISO 20022 format for transfers between domestic and international accounts. However, the major banks (Bank of America and JP Morgan Chase) have slightly different implementations of the specification vs SEPA, as such a new payment method must be created. In this first step, the US ISO 20022 payment method supports only domestic ACH transfers; however, future work will support international and mixed-type transfers as the need arises. NOTE: We are still waiting on real world tests with our accounts, but the banks are taking time on this, as such we wanted to get the review done sooner rather than later. task-4939347
Enhancements to existing features
The rental product page has been updated to match the broader product page redesign. This provides a more consistent and polished shopping experience for customers viewing rentable products online.
Original PR description
Mirror community changes and adapt accordingly. Needs: - https://github.com/odoo/odoo/pull/222320/ - https://github.com/odoo/upgrade/pull/8229 task-4707065
The project task date picker now uses an always-available icon to switch date range selection on or off without closing the picker. This makes setting start and end dates simpler and reduces the need for users to understand the underlying date field behavior.
Original PR description
Before this commit, we had to click on “Add start/end date” next to the input field. This has now been replaced with an icon in the date picker, which you can toggle easily without closing the picker. It also means that the user no longer needs to know whether it is a start or an end date. task-4613140
Users can now download certain signable documents immediately when all required information can be filled automatically, avoiding extra clicks through the signing screen. This streamlines simple signature flows while keeping exceptions such as itsme authentication and multi-signer documents on the existing process.
Original PR description
Introduced a new functionality which allows users signing documents that only contain autofillable information to skip the document filling step. Currrently, even if fields are autofillable, users…
Introduced a new functionality which allows users signing documents that only contain autofillable information to skip the document filling step. Currrently, even if fields are autofillable, users still need to click on each field for the value to appear, then click on Validate and later on Download. With this PR, under the conditions that all fields are autofillable, that there is only 1 signer and that the authentication method is not set to itsme, a new button Download appears in the dialog window which is shown when clicking to Sign a document. By clicking this new button everything happens under the hood and the (already filled) document is downloaded right away. After clicking the Download button, the document is downloaded and the view is changed to the general view of the model we started from. In the normal case where we go into the Sign app, open a template and use the download button from there we are redirected to the kanban view to the templates. In other flows like the one where we request a signature from a sales order, we are redirected to the sale order form view. In this PR, there are also some more minor changes: - The text in the buttons used to sign is changed from Sign Now to Sign - The description present when adopting a signature or initials is changed slightly to adapt to the text present in the buttons of the different views where it is displayed: "By clicking Adopt & Sign," has now become "By signing," - We add a tip on the new Download button explaining its function. Task: 4858331
PDF exports now include a title page for knowledge articles that have no content, instead of skipping them. This keeps the table of contents complete and lets empty articles act as clear section dividers for better document navigation.
Original PR description
Currently, the system skips printing empty articles, which can lead to an incomplete table of contents and a less organized PDF structure. To address this, we will now generate a page with the article's title for empty articles. This approach allows empty articles to serve as section dividers, enhancing the document's organization and improving navigation within the PDF. Task-4989809
Accounting and localization screens now hide fields and options that do not apply to a company’s country or region. This reduces confusion for users by showing a more relevant interface, especially around Intrastat and SEPA-related settings.
Original PR description
This **PR** enhances the user experience by conditionally hiding irrelevant elements across various accounting and localization modules (`l10n_*`), based on the user's country group or country code. This ensures a cleaner, more region-specific interface. Major changes: 1. Simplified the logic for installing SEPA modules in the `__init__` of `account_accountant`. 2. In `account_intrastat`, the `intrastat` boolean has been removed from `res.country`. Intrastat applicability is now managed via a dedicated `intrastat` country group. With this the intrastat boolean is removes from the view, thereby reducing confusion for non-intrastat companies. Also this country group is used to manage visibility for some intrastat components as well. **task**-4613288 Community **PR** - https://github.com/odoo/odoo/pull/206454 Upgrade **PR** - https://github.com/odoo/upgrade/pull/8191
The VoIP app now includes a simple calendar view for calls, making it easier to see call activity by date. This helps teams review and organize call records in a more familiar schedule-based format.
Original PR description
Task-5043948
Audit report templates now include clearer prompts showing which documents are needed for each section. Users can upload the requested files directly from the editor, making report preparation easier and reducing onboarding friction.
Original PR description
For the audit reports, we aim to provide clear guidance on which documents to upload in the editor to ensure a well-structured report. To support this, we will add alert boxes in the template indicating the required document for each section, along with a link that allows users to upload files directly. These improvements will streamline the onboarding process and make report creation more intuitive. Task-4989809
Product demand suggestions are being made more visible and consistent by moving access into the search panel and basing calculations on the purchase order warehouse. This helps buyers find recommendations more easily and reduces confusion from suggestions tied to a different warehouse.
Original PR description
Description of the issue/feature this PR addresses: The purchase suggest wizard of PO product catalog kanban view is not used enough, and not interactive with the product catalog (this PR addresses…
Description of the issue/feature this PR addresses: The purchase suggest wizard of PO product catalog kanban view is not used enough, and not interactive with the product catalog (this PR addresses only the visibility): With this PR we will make the suggest feature part of the view's search panel, making it more visible. In a following PR, we will render changes in the suggestion inputs (number of days, percent factor ... ) in the product catalog (eg. displaying suggested qty per product record, changing forecasted qty of product record ...) Current behavior before PR: Suggestions for PO products and quantities are accessed by clicking the "Suggest" button on top of the view. The wizard inputs for the recommendation includes selecting the warehouse, which can be different to the PO's warehouse. Desired behavior after PR is merged: Suggestions for PO products and quantities is accessed from the Search Panel. The wizard now uses the PO's warehouse for calculations and the user has to change the PO's warehouse to get suggestions for another warehouse. upgrade PR: https://github.com/odoo/upgrade/pull/8104 community PR: https://github.com/odoo/odoo/pull/215363 Task: [4981340](https://www.odoo.com/odoo/project/966/tasks/4981340)
Portal users can now sort their signature requests by current status, making it easier to find the most relevant or urgent documents. This improves navigation and visibility for users managing multiple signature requests.
Original PR description
This improvement adds a new sorting option in the user portal to allow sorting sign requests by their current state. This provides users with a more intuitive way to view their requests, prioritizing the most relevant or urgent ones. To support this, a new computed field state_order was added to the sign.request.item model. It determines the item's sort order based on the state. The ordering logic follows the definition order of the state selection field in the sign.request.item model. Developers should maintain this order when modifying the selection list to preserve consistent behavior. task-4978713
Employee and resource avatars have been refined in HR Gantt and Planning views. This should make schedules easier to scan and help users identify people or resources more quickly.
A new setting now directly controls whether each return type is created automatically, replacing an indirect rule based on country information. This reduces setup confusion and helps prevent returns from being generated when a business does not want them.
Original PR description
Before it was clearly confusing and error prone how the auto generation works. It was based on the field country_id on the return type. If it was set then that meant auto generated which is quite wrong as some return can have a country_id but don't want to be auto generated. Since then we added a new field auto_generated on the return type which is by default to true. most of the return are auto generated. If we don't want a return auto generated just ticking this field to false should be enough now.
SEPA direct debit payments are now confirmed when a payment is manually reconciled, even if the customer entered the wrong transfer amount or reference. This helps businesses validate mandates despite common payment mistakes, reducing manual blockers in the payment process.
Original PR description
Prior this commit: - If a customer made an error in the wire transfer amount or reference label, the associated SEPA mandate could not be confirmed. There was no way to validate the mandate in such cases. Post this commit: - SEPA payments are now confirmed upon manual reconciliation, even if the transfer amount or reference is incorrect. This ensures mandates can still be validated in such scenarios. task-4702973
Audit report template variables are now easier to read because dates follow the user's language settings and amounts include the right currency formatting. Amounts are also calculated using the company linked to the audit report, reducing the risk of showing incorrect figures when multiple companies are involved.
Original PR description
This commit enhances the formatting of template variables in audit reports: 1. Dates are now displayed according to the user's language settings. 2. Amounts now include the currency and are formatted based on the user's preferences. By default, the company currency associated with the audit report will be used. Task-4989809
The Sign app now lets internal users place a company stamp on documents, showing official details such as company name, address, and phone number. This makes signed documents look more professional and consistent while allowing edits when no company information is linked.
Original PR description
Before: * Users could not add a company stamp to documents in the Sign app. After: * Added a new `Stamp` item in the Sign app. * Internal users can drag and drop the stamp into a document to display company details such as name, address, and phone number. * The stamp is styled as a textarea: * Read-only when the partner is linked to a company. * Editable when no company or user is linked. Impact: * Provides an easy way to include official company details in signed documents. * Ensures a more professional and consistent presentation of documents. task-4819989
Call-related actions in helpdesk live chat and WhatsApp conversations now use clearer rules for when and where they appear. This makes the interface more consistent across side panels, discussion views, and chat windows, reducing confusion for users handling customer conversations.
This update makes Odoo's AI setup screens easier to use, with cleaner views, required names, archive options for agents, and faster tool creation from topic pages. It also adds support for newer GPT-5 models and removes the less effective calendar event creation topic in favor of better AI topic examples.
Original PR description
- cleanup of the agents views - cleanup of the topics view - cleanup of the default prompts views - cleanup of the "usage" page of "execute code" server actions - make topic title mandatory - make "default prompt"'s rule name mandatory - add no content helper on "default prompts" views - add search model on "default prompts" - renaming of the "Interface Keys" to make them easier to identify - make agents archivable - remove "create calendar event" topic (ai_calendar module) - make it possible to quick create ai tools from the ai topic form view - merge the 2 interface keys that are both linked to the mail composer - add support for gpt-5 and gpt-5 mini Task-5015090
Users can now define a custom CFOP on Brazilian operation types and apply it globally to a sales order or invoice, while still allowing line-level overrides. This improves control over Brazilian electronic invoicing without changing tax calculation behavior.
Original PR description
We allow the user to set a custom CFOP on `l10n_br.operation.type`. This allows the to set a global CFOP on a record (`account.move` or `sale.order`) and also to override that per line through the existing `l10n_br_goods_operation_type_id` m2o fields on the parent and line models. Because it doesn't affect tax calculation we limit the change to just EDI. Our general approach is to do tax calculation and save the response in `l10n_br_edi_avatax_data` to resubmit it for EDI (the EDI request is essentially a superset of the tax calculation response). This approach doesn't work here because they keep returning the CFOP they determine, not the one we send. Therefore we patch the place where we save the tax calculation response to add the right CFOPs. Task-4947957
The Italian tax XML export now correctly separates quarterly submissions into three monthly sections instead of one combined block. Exported filenames are corrected, and the VAT threshold used for the VP7 line is updated to match the new requirement.
Original PR description
Description of the issue this commit addresses: The XML export should contain three "Modulo" sections when the report is submitted quarterly but currently only ever sends one big chunk of data. Also the name of the exported file is wrong. --- Desired behavior after this commit merged: The exported file adapts to whether it is submitted monthly or quarterly and the name of the file issue is addressed. --- Community PR: https://github.com/odoo/odoo/pull/216887 task-4826511 Forward-Port-Of: odoo/enterprise#93181 Forward-Port-Of: odoo/enterprise#86642
Generated audit reports now include a nested outline that follows the table of contents instead of listing every section at the same level. This makes reports easier to browse and helps users find the right section more quickly.
Original PR description
Currently, the outline of the generated audit report is flat, with all entries at the same level. This commit updates the algorithm to produce a hierarchical outline that mirrors the structure of the table of contents, significantly improving document navigation. Task-4989809
Accounting reports now show their header as soon as the header details are available, instead of waiting for the full report data to finish loading. This makes reports feel more responsive and preserves header changes while the report content continues loading.
Original PR description
When opening any accounting report, we are waiting for the report to load before showing its header. This makes it so we are displaying the header when we have the information for it and then displaying the report once we receive its information. task-4826507
Resolved issues and error corrections
This fix prevents tax return report settings from being reused incorrectly across different report variants. It also adds a check to avoid duplicate linked return types, helping ensure users see the right reporting options and reducing filing mistakes.
Original PR description
With this pr: https://github.com/odoo/enterprise/pull/92823, we added a way to use previous options as return_periodicity options This added several issues. First is that we did not check the uniqueness of the linked return type Secondly, we copied those options even for different variants that are wrong
Payroll users can now pay an individual payslip even when batch payroll accounting entries are enabled. This removes an unnecessary blocker and clarifies the setting description so teams better understand when batch entries apply.
Original PR description
Previously, the Pay button was hidden when batch payroll move lines were enabled, preventing payment for single payslips. Since a single payslip creates only one accounting entry, payment should be allowed. This update includes: - Ensuring the Pay button is visible for single payslips, even when batch move lines are enabled. - Removing the redundant condition from the button visibility rule. - Updating the tooltip for batch payroll move lines to improve clarity. Task - 4674557
Fixes an issue that could prevent users from creating payslips for employees in the Mexican payroll module when a contract start date was missing. The system now uses a reliable fallback date, restoring the expected payroll flow and reducing disruptions for HR teams.
Original PR description
Currently, an error occurs when creating a payslip for an employee. Steps to Reproduce: - Install the `l10n_mx_hr_payroll` module with demo data.. - Switch to the `Mexico` company. - Go to…
Currently, an error occurs when creating a payslip for an employee. Steps to Reproduce: - Install the `l10n_mx_hr_payroll` module with demo data.. - Switch to the `Mexico` company. - Go to `Employees` and create an employee. - Click the `Payslips` button under the employee form. `TypeError: '>' not supported between instances of 'bool' and 'datetime.date'` This error occurs after [this commit](https://github.com/odoo/enterprise/commit/780a242b20932f808639f2719a9337d63ca6b13e#diff-e7b04636c3505b4f658eef73da77ef7dbd064ce663fdcfb76ed81e47246acc9d), which replaces the use of the date_start and date_end fields with contract_date_start and contract_date_end, since date_start and date_end are deprecated. When accessing the version, the _compute_dates method runs and sets date_start[1] to the version’s date if the version does not have a contract_start_date. Before this commit, it always retrieved the version’s date_start, which was handled safely. However, after this commit, it retrieves contract_start_date instead of date_start, which is not a required field and can be empty. As a result, when user tries to create a payslip, it raises the error [2]. This commit ensures that if the version does not have a contract_start_date, then while computing the payslip amount it uses the version’s date_version, which is a required field, thereby maintaining the same flow as in previous versions. [1]- https://github.com/odoo/odoo/blob/2054a54a66d6291ab37fa79f749a805138ada1c0/addons/hr/models/hr_version.py#L517-L521 [2]- https://github.com/odoo/enterprise/blob/f1c2326137fd3a94d37e2bbf09b175a9c742f46b/l10n_mx_hr_payroll/models/hr_payslip_worked_days.py#L21 sentry-6818787136 Forward-Port-Of: odoo/enterprise#92732
Audit reports now include PDF files that users embed from the Documents app into knowledge articles. This prevents missing attachments in printed reports and makes generated audit outputs more complete and reliable.
Original PR description
When the user uses the `/file` command in an article and loads a PDF from the Document app, the editor inserts a `/web/content/<int:id>` URL. These URLs were previously not handled by the PDF rendering engine used in audit report, causing attached PDFs to be omitted from generated reports. This commit updates the method responsible for loading attached PDF files to support `/web/content/<int:id>` URLs. As a result, embedded files are now correctly included in the final printed output. Task-4989809
The Belgian payroll SD Worx export wizard has been updated to work with the newer employee version model. This prevents an error when users generate the SD Worx work entries export file, helping payroll reporting continue smoothly.
Original PR description
#### Steps to Reproduce Payroll -> Reporting -> Export Work Entries to SDWorx -> Generate Export File #### Issue In saas-18.4, contracts have been merged into employee versions (`hr.version`) and the contract states (open/close) were removed ([REF] hr_contract: Merge contracts into versioned employee model). The method `_get_versions_with_contract_overlap_with_period` no longer supports the `states` keyword. Passing it caused a traceback when generating the SD Worx export. #### Fix This commit removes the argument to ensure compatibility with the new versioned model. task-5022173 Forward-Port-Of: odoo/enterprise#92610
Intrastat reporting now identifies business customers using VAT numbers instead of only whether a contact is marked as a company. This prevents freelancers or self-employed customers with VAT numbers from being incorrectly treated as consumers, improving reporting accuracy.
Original PR description
The way we checked b2b customer was wrong, we checked on the partner if it was a company or an individual. But, freelancers are individual with a vat number, so the new way of checking is based on the VAT. task-5005852
Belgian point-of-sale users now receive clearer messages when the fiscal blackbox cable is faulty or the device does not send a valid response. This helps staff identify connection issues faster and reduces confusion during checkout.
Original PR description
This PR adds some explicit messages to invalid responsed from the Blackbox. We will now log and inform the user when the cable is malfunctioning or the blackbox isn't responding with a valid message Forward-Port-Of: odoo/enterprise#90944 Forward-Port-Of: odoo/enterprise#90436
Users can now preview each linked YouTube document and see the correct video instead of always seeing the most recently added one. This improves reliability when managing external links in Documents and avoids confusion when reviewing shared content.
Original PR description
**Steps to reproduce:** 1. Go to Documents > Click ⬇ beside Upload > Add a Link 2. Add two different YouTube video URLs with above steps 3. Preview the first link, then the second **Issue:** Previewing individual YouTube links always displays the preview of the *last* added video, regardless of which one was clicked. **Cause:** When a document has no `attachment_id`, the preview fallback logic defaults incorrectly, causing all documents to share the same preview source. **Solution:** Updated `getRecordAttachment` to prioritize `attachment_id` but gracefully fallback to `rec.resId` and `rec.data.name` when missing. This ensures document preview works even when the record has no linked attachment. opw-4906808 Forward-Port-Of: odoo/enterprise#92543 Forward-Port-Of: odoo/enterprise#90388
The Luxembourg annual VAT declaration now includes 0% custom tax rates in XML exports, preventing rejection by ECDF when those rates are required. It also allows average employee figures to be reported with decimals, improving accuracy for annual reporting.
Original PR description
**PROBLEM** 1. In Annexes D and E you can declare custom tax rate. If the custom rate is 0%, this percentage will not be exported into the xml. When submitting the xml to the ECDF, the submission…
**PROBLEM** 1. In Annexes D and E you can declare custom tax rate. If the custom rate is 0%, this percentage will not be exported into the xml. When submitting the xml to the ECDF, the submission will be rejected because the xml doesn't state how much % is the custom tax rate. 2. In Section V, code 110, 108 and 109 should be decimal since they are averages. **STEP TO REPRODUCE** 1. install the l10n_lu module and select the demo lu company. 2. In accouting app, goes to the annual tax report (Accounting/Reporting/Tax Report, select Annual VAT Declaration). 3. Goes to Appendix D or E, and fill code 128, 136, 144, and 162, and leave the custom rate(%) above each of them at 0%. 4. Export to xml (using the little cog thingy). 5. Notice the code 396, 394 149, and 153 doesn't appear in the xml. **CAUSE** 1. Field containing zero are filtered out the xml by default, which is the case of the custom rate (%) fields. 2. Average number of employee during the year is declared in the report data file to be of the integer type. **FIX** 1. Adding custom rate fields to the mandatory fields. 2. Changing type of average employee fields to float. opw-4978365 Forward-Port-Of: odoo/enterprise#91938
This fixes a problem where customers could be unable to add rental or subscription products to their cart after certain product page design changes were made in the website editor. The checkout button now correctly finds the product details it needs even when the page layout has been customized.
Original PR description
## Version saas-18.4+ ## Steps to reproduce - Open the shop; - Select any product; - Open the Editor: - Select the product's main image; - Change the image width to either `100 percent` or `None`,…
## Version
saas-18.4+
## Steps to reproduce
- Open the shop;
- Select any product;
- Open the Editor:
- Select the product's main image;
- Change the image width to either `100 percent` or `None`, then save;
- Click on `Add to cart`.
## Issue
Commit eac892a4ad7373d18f954afbbcd2f1213ac5f281 introduced a UI update that reorganizes the layout of the product configurator, placing the `Add to cart` button next to the form rather than below it.
Although the button remains inside the form in the original template, using the Editor to adjust the layout can result in the button being saved outside the `<form>` element in the final DOM.
This breaks the logic that relies on `closest('form')` to locate the surrounding form, since the button is no longer a descendant of the form element.
## Solution
Find the first product form relative to the button, since it may be a sibling rather than an ancestor in the DOM.
opw-4942986
See also:
- https://github.com/odoo/odoo/pull/218902
Forward-Port-Of: odoo/enterprise#90631Fixed an issue where tax return XML generation could skip company data when a child company appeared before its parent alphabetically. The report now keeps the intended active company during generation, helping ensure complete and accurate tax return exports.
Original PR description
Error: When generating a tax return, there is a circumstance that will cause certain companies to be omitted from the xml computation. This happens when a child company is earlier alphabetically than the parent company. The company ids are ordered alphabetically for display purposes on the tax return view, however when writing this value into the `allowed_company_ids` context value, the first id in the list will override the current company environment variable during xml generation. To fix this the active company is passed into the context to ensure that it is not overwritten. OPW-4964467 Forward-Port-Of: odoo/enterprise#91667
Customers browsing rental products without signing in can now use the date picker normally. This prevents an error that blocked date changes and improves the shopping experience for rental products.
Original PR description
Required to access planning slots when not logged in. How to reproduce: On the e-commerce, try accessing a product configured with plan services while logged out. What happens: Error response from `renting_product_availabilities` call. The datetime picker is not editable anymore (the date is locked). What should happen after fix: On the same product page, the datetime picker is accessible and the user can change dates without any problem. Bug introduced in https://github.com/odoo/enterprise/pull/88174
Fixes an error that occurred when refunding Mexican Point of Sale orders containing a global discount line. This helps staff process customer refunds reliably without being blocked by a system error.
Original PR description
**Steps to reproduce:** ``` - Install PoS mexican localization - Activate PoS setting Global Discounts - Navigate to PoS and create an order with a discount line - Go to back end and try to refund this order - Notice an error pops-up ``` **Cause:** Bad fw-port In the original commit `json.lines` is an array and accessing index "2" of the array was not a problem (https://github.com/odoo/enterprise/pull/84331/files#diff-63a117ed6751a8aae4fcb11d867177f5d0feb78cc1e2f3461f425babc10b5016R15) From 18.0 we are accessing the record `currentOrder` itself and `currentOrder.lines` is an PosOrderline object which doesn't have a property named "2". **Fix:** Remove index access `[2]` opw-4899501 Forward-Port-Of: odoo/enterprise#93251 Forward-Port-Of: odoo/enterprise#90410