Daily updates from Odoo
Navigate
Branch
Thursday, August 28, 2025
65 changes
Security fixes and vulnerability patches
This update changes how online forms are protected against unauthorized submissions, removing the need to rely on visible security tokens. It helps keep business workflows secure while reducing friction and maintenance across affected areas.
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
Payroll contract type lists now prioritize country-specific options when a localization is installed, followed by the standard options. This makes it easier for users in Belgium, Switzerland, India, Morocco, and the United States to pick the contract types most relevant to their local payroll setup.
Original PR description
When localizations are installed, the standard contract types are shown first. It should be the ones from the loca in first position then the standard ones. Task: 4979947
The audit report PDF export window has been made clearer and easier to use. Its title now better explains the action, and the available options appear earlier in the text so users can understand and set them more quickly.
Original PR description
This PR refines the modal used when exporting an audit report to PDF. The input toggles have been moved to the beginning of the text, and the modal's title has been updated to provide a clearer description of its purpose. Task-4989809
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
Appointment configuration screens are reorganized to make setup easier and less overwhelming. Users can now start from templates when creating appointment types, share appointment links faster, and get a clearer booking flow for choosing staff or resources.
Original PR description
RATIONALE ========== While appointment contains a lot of different configuration options, it can proves to be difficult for the user not to get overwhelmed by the various options. Therefore, let us…
RATIONALE ========== While appointment contains a lot of different configuration options, it can proves to be difficult for the user not to get overwhelmed by the various options. Therefore, let us rework the appointment type form / kanban views, and modify a few options to make them more user-friendly. Also harmonize the front-end user / resource selection step and simplify its activation. Finally, allow the user to use sample templates at creation, not only as an action helper. MAIN CHANGES ============= - Form View rework, group options, reorder / rename notebook pages, make some content dynamic - Kanban Card rework: menu is removed, and only 'share' and 'configure' remain as buttons. 'Share' now directly copies a share_url for the config: selected appointment type only + any allocated users / resources - Allow Template Selection when creating an appointment type from Form, List, Kanban view - Make User Selection dedicated step always enabled when website_appointment is installed (and more than 1 resource / user + select user_resource first configuration) and do not depend on the avatars_display option anymore. Placeholder images are used instead (and smaller + design harmonized for Users / Resources) if avatars are hidden. - Sample templates are reworded - Some fields are changed to clarify their purpose. See section below. UPGRADE ======== - assign_method is split in two different selection fields: - assignment_method (auto/manual) - select_first(date/user_resource) - appointment_manual_confirmation logic is inverted into a new auto_assign field. - avatars_display is now show_avatars, a boolean field UPG PR: odoo/upgrade#8014 Task-4898893
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.
The accounting reports module now stores the return status in the database again. This lets the fiduciary dashboard retrieve complete return information more reliably for reporting and analysis.
Original PR description
The dashboard fidu needs the state field in sql so they can fetch all the data. task-5043219
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
This change standardizes an internal WhatsApp field name to better match Odoo naming conventions. It is a low-impact technical cleanup that helps keep the codebase consistent without changing user-facing behavior.
Original PR description
**Purpose of this PR**: Renaming selfMember to self_member_id task-[5000747](https://www.odoo.com/odoo/project/1519/tasks/5000747)
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
Website editors now get a smoother experience when creating pages and adjusting helpdesk website menus. This small improvement aligns Helpdesk with the updated website editor flow, making menu setup more intuitive and reducing friction for content teams.
Original PR description
This commit makes a small adjustment in website_helpdesk following the related community PR, which improves the menu editor to make page creation and menu editing easier and more intuitive for website editors. task-4422810
This update improves internal test helpers for text insertion in the HTML editor by better matching browser behavior. It helps ensure editor-related features are tested more accurately, reducing the risk of regressions for users.
Original PR description
Simulate BR removed by the browser in the unit tests.
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
This update adds automated checks for point-of-sale IoT hardware flows, including device setup and payment terminal handling with Six. It helps reduce the risk of regressions in connected checkout hardware and payment integrations without changing day-to-day user workflows.
Original PR description
*: pos_iot, pos_iot_six In this commit: ------------------ - Loaded data for `iot.box`, `iot.device`, and `iot.channel` to test the complete IoT flow from setup to core device functionalities. - Added payment method records and validated the payment terminal integration using Six. task- 4945645 Related PR: https://github.com/odoo/odoo/pull/220801 Forward-Port-Of: odoo/enterprise#93109 Forward-Port-Of: odoo/enterprise#91117
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
Signing a Belgian salary contract now correctly updates assigned cars or bikes so they are no longer shown as available for change. This prevents confusion in fleet planning and keeps employee vehicle assignments accurate.
Original PR description
Issue: When a contract was signed and a future driver was assigned to a vehicle, the car still remained marked as available. Fix: Once the first signature is completed and the future driver is assigned, the vehicle is correctly marked with plan_to_change_car = False (the same applies to the bike). Related task: 4926335. Forward-Port-Of: odoo/enterprise#92590 Forward-Port-Of: odoo/enterprise#89774
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
This update adds automated coverage for a previously fixed issue in bank statement reconciliation when no payment account is set. It helps ensure the accounting workflow remains reliable and prevents the same customer issue from returning in future releases.
Original PR description
Add a test to previous fix: https://github.com/odoo/enterprise/commit/582e3ee22cba404ff38782534e76569bc93a44ef opw-5039931 opw-5039807 Forward-Port-Of: odoo/enterprise#93308 Forward-Port-Of: odoo/enterprise#93182
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
The Belgian reporting tests were updated to match a renamed account used in annual account export checks. This keeps automated validation aligned with the latest account naming changes and helps prevent false test failures.
Original PR description
### PURPOSE:- - With this [PR](https://github.com/odoo/odoo/pull/221416), we are going to remove or update some accounts. - The test case **test_annual_account_export** fails because we change the account name of account 700000, from **Sales in Belgium (Trade Goods)** to **Sales of Goods in Belgium** in the above PR. ### SPECIFICATION:- - The above test case is modified as per the updated name. task-4948805
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#90631The Peru electronic purchase report now places detraction details in the official columns required by SUNAT. This helps businesses submit compliant TXT reports and reduces the risk of reporting errors or rework.
Original PR description
According to the Annex N.°8 of RS 040-2022/SUNAT (page 20 of https://www.sunat.gob.pe/legislacion/superin/2022/anexo-040-2022.pdf), detraction informations are considered as additional informations and should be displayed in columns 42 and 43. This commit moves detraction infos from columns 38, 39 to columns 42, 43. opw-4860530 Forward-Port-Of: odoo/enterprise#93044
Fixed 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
The payroll test setup now gives the test user the needed payroll permissions before running Saudi payroll accounting checks. This prevents false build failures caused by missing access rights, helping keep payroll validation reliable.
Original PR description
steps to reproduce: install l10n_sa_hr_payroll_account run test_payslip_overtime_1 test added payroll user and manager groups to the test user to avoid missing access rights error build_error-230673
The payroll accounting test setup for Poland now gives the test user the required permissions. This prevents avoidable access errors during automated checks, helping keep payroll-related updates reliable.
Original PR description
add missing user groups to the test user to avoid access errors build_error-230676
Fixes an error that could stop an expense from being saved when the selected employee was not linked to a user account. This helps ensure expense uploads and edits remain reliable for all employee records.
Original PR description
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure…
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure this employee is not linked to a user). - Go to Expenses > upload [1] and open it. - Set the `Employee` to `test` and click `Save` (it may take up to 5 seconds). (See [2] for Steps to reproduce) **Error:** `AttributeError: 'hr.expense' object has no attribute 'uid'` **Root Cause:** At [3], the code incorrectly uses `self.uid` instead of `self.env.uid`. Since `hr.expense` records do not have a `uid` field, this leads to an `error`. **Fix:** This commit ensures that expenses can be saved correctly, even when the selected employee is not linked to a user. [1]: https://drive.google.com/file/d/1Ew2B_zMFCQbw-6nwfKctJPy1W4y2ZaIb/view?usp=sharing [2]: https://drive.google.com/file/d/1qP-9L_emaox3l9JyoNVYjqj1Ht8bJSmZ/view?usp=sharing [3]: https://github.com/odoo/enterprise/blob/804f263b80cb78884e3f246bcc7fa7ea4e0cf73a/hr_expense_extract/models/hr_expense.py#L90 sentry-6834628909 Forward-Port-Of: odoo/enterprise#93211
The AI Website page creation dialog now shows only the intended styled Generate Text toggle instead of both a checkbox and a switch. This removes a confusing duplicate visual element while keeping the option fully functional for users.
Original PR description
The 'Generate text' option used a custom switch with an AI icon, but the checkbox was still visible alongside the styled toggle, causing duplicate UI elements. The standard 'Switch' component already hides its checkbox with 'visually-hidden' class. This commit applies the same approach by adding the 'visually-hidden' class, ensuring the checkbox remains functional but only the styled toggle with AI icon is visible to the user. Task-5039009
This change makes an internal appointment-related test more predictable by fixing the appointment time used during the test. It helps prevent occasional false test failures, supporting smoother quality checks without changing customer-facing behavior.
Original PR description
Before this commit: --- - In the test case, the appointment start time was not explicitly set. - By default, the time was rounded (e.g, if current time is 8:09 PM, it defaults to 8:30 PM). - Sometimes this default time did not fall within the current hour filter, causing test failures. After this commit: --- - In the test case add `freezeDateTime` to ensure created appointemnt always matches the current filter. runbot-231194
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
This fixes a small setup error where return report options pointed to the return record instead of the correct report. It helps ensure users open and work with the intended return report without confusion or incorrect navigation.
Original PR description
During this pr: https://github.com/odoo/enterprise/pull/93187 We made a small mistake by setting the return id instead of the report id in the options.
Rental invoice lines are now excluded from automatic cost-of-goods-sold accounting entries. This prevents rental sales from generating inappropriate stock cost postings, improving financial accuracy for companies using rental workflows.
Original PR description
…entries Modified the COGS generation logic to skip any invoice lines that come from a rental sales order. task-4919306 Forward-Port-Of: odoo/enterprise#91472 Forward-Port-Of: odoo/enterprise#90901
Accounting report exports to XLSX now handle unusual account codes or values that look like infinity without crashing. This helps users reliably export reports such as the Trial Balance even when account data contains extreme numeric-looking text.
Original PR description
_set_xlsx_cell_sizes tries to convert each cell into a float if it's possible. If the cell contains "inf", "1e1000" (or any value such that float(value) = float("inf")), then there is an OverflowError which is not catch by the try/except.
To reproduce, set an account code as "1E1000", make this account appearing in the trial balance (by creating a move) and export it as XLSX.
opw-4981385
Forward-Port-Of: odoo/enterprise#91686Fixed an issue that caused the Payroll payslips page to crash when debug mode was enabled on a new database. This ensures payroll users and administrators can access payslips reliably while troubleshooting or configuring the system.
Original PR description
steps to reproduce: - create an empty db (without demo data) - install payroll - enable "debug" mode - go to Payroll > Payslips > Payslips menu - notice the traceback (`payrunId` is not a number) cause: - in "debug" mode the prop types are strictly checked - and `payrunId` is set optional but the type is `Number`, and `null` is passed fix: - pass `payrunId` only if it is not `null` :) task-5004937 Forward-Port-Of: odoo/enterprise#91996
Subscription upsells and renewals now keep the invoice journal from the original sale order when one was set. This prevents billing details from being lost or left blank when company templates do not provide the right subscription journal.
Original PR description
Up until now, the invoice journal set on a given subscription sale order was not copied when the order was upsold or renewed. Only the sale_order_template_id was copied, which depends on the company and has a value for the invoice journal inside. Usually, the copany either doesn't have a sale_order_template attached or they have one for normal sale orders, not subscriptions. In these cases, the invoice journal was extracted from the sale_order_template which didn't contain any (or any valid) and so was left empty. Here we check if the invoice journal value on the order has a value of its own and, in that case, we copy it so that it is preserved. This might be overridden by the value in the company template if there is one. Task: 5031427
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
Fixed an issue in OCR manual correction where removing a selected box appeared to work but was not saved. This prevents previously unselected boxes from reappearing as selected after refreshing the page.
Original PR description
During refactoring of the boxes interface of the OCR (see commit acfbaf3), this occurrence of `dataMoveId` wasn't replaced with `recordId`. It causes a small bug where the box unselection wouldn't work properly. Visually, it looked like it was working as the JS code handling the unselection of boxes worked fine, but the unselection wasn't saved to the database. Upon refresh, all the boxes that were selected at some point will still be displayed as "user selected" in the UI. task-none Forward-Port-Of: odoo/enterprise#92980
Restoring an Excel spreadsheet without a folder no longer saves an invalid folder value. This keeps the Documents view consistent and avoids confusing search panel behavior after files are restored from the trash.
Original PR description
Steps to reproduce: - Go to documents and upload an XLSX file - Move the XLSX file to the trash - Restore the XLSX file Current behavior before PR: - The key 'searchpanel_documents_document' was set to undefined, When the file had no folder Desired behavior after PR is merged: - Files without a folder now store 'false' as the default search panel folder_id Task: [5005319](https://www.odoo.com/odoo/2328/tasks/5005319) Forward-Port-Of: odoo/enterprise#92799
Features or functions removed from Odoo
Payroll configuration for salary structures and salary rules now opens only in list and form views. This removes an unsuitable card-style view, keeping administrators focused on the views intended for setup work.
Original PR description
#### Steps to Reproduce Payroll -> Configuration -> Salary Structures / Salary Rules #### Issue Kanban views are not relevant for payroll configuration. Users are supposed to work in list view, and mobile usage for editing payroll configuration is not meaningful. #### Fix This commit removes the kanban views from salary structures and salary rules, and updates the actions to use only list and form views. task-5025479
Payroll salary adjustments are being moved into a more structured property-based setup, replacing the previous generic “other input type” mechanism. This makes payroll inputs clearer to manage and helps reduce ambiguity when handling employee adjustments and payslip calculations.
Original PR description
Task: 4930632
Code cleanup and technical improvements
This update refines internal automated tours used to verify key workflows across HR, payroll, manufacturing, inventory, restaurant appointments, timesheets, knowledge, and barcode operations. It makes these checks wait for the right screen elements before running, reducing false failures and improving confidence in release quality without changing day-to-day user features.
Original PR description
In this commit, we prefer to use : - trigger instead of assertions in run function. Tour engine wait for trigger in DOM while run fires directly when trigger is found. Then if trigger is too much obvious (like 'body') run is fired ... and assertions can occur too fast. - delay from currency, not hoot. - animation frame from native, not hoot.
This update reorganizes how Odoo identifies certain search rule operators behind the scenes. It helps keep behavior consistent across several apps without introducing visible workflow changes for users.
The payment form code for SEPA Direct Debit and subscriptions has been reworked to use Odoo’s newer interaction approach. This is an internal modernization that should help keep payment-related screens easier to maintain without changing the customer-facing process.
Original PR description
Convert payment form Public Widget to Interaction. task-4721516 See also: - https://github.com/odoo/odoo/pull/222198
Miscellaneous changes
Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762
Original PR description
Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762