Daily updates from Odoo
Thursday, June 18, 2026
21 changes · 18.0
Resolved issues and error corrections
This update fixes a visual issue in the ATO submission wizard for Australian payroll. The checkbox to accept terms and conditions was misaligned with the text, particularly on wider screens. This change ensures a consistent and user-friendly experience when submitting payslips or payruns to the ATO.
Original PR description
- Step to reproduce: with l10n_au_hr_payroll_account installed and validated payslips or payruns click "Sign & Submit to ATO" -> wizard opens with checkbox to accept T&C, mght be misaligned depending on window width - Cause: if text fills full width then checkbox is moved above. - Solution: using d-flex and utilities, force checkbox on same line as text and allow text to split if necessary. Task: 6051482
This update fixes a potential issue where Odoo would incorrectly try to install auto-install modules if a required dependency was missing. Now, if an auto-install module has a missing dependency, it won't be marked for installation, preventing installation errors and improving database startup times.
Original PR description
Let's consider an auto-install module `A` having 2 dependencies, one to `base` and the second to custom module `B`. If module `B` is not present in the addons path (i.e is unknown), during a new database initialization module `A` would still be marked as `to install`. This commit ensures that if an auto-install module has a missing dependency, it will not be marked as `to install`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270346
This update addresses a bug preventing company-to-company KSeF invoice retrieval within the same Odoo database. The fix allows invoices to be sent between companies with the same KSeF number and limits the date range for fetching bills to a maximum of three months. This ensures accurate KSeF compliance and proper invoice retrieval.
Original PR description
Issues: 1. For a db with company_1 and company_2, when company_1 sends an invoice to company_2 via KSeF (out_invoice with a ksef number), company_2 in the same database can't fetch the corresponding bill because there is a move with the same KSeF number. 2. The date difference between `from` and `to` in the `dateRange` must not exceed 3 months as explained in the documentation https://api.ksef.mf.gov.pl/docs/v2/index.html#tag/Pobieranie-faktur/paths/~1invoices~1query~1metadata/post Fixes: 1. Change the unique constraint and the domain to allow same KSeF number per different companies. 2. Minimize the `to` parameter with `from` + 2 months. task-6260645 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update eliminates a distracting, empty vertical scrollbar that appeared in Odoo's notebook headers when the tabs fit within the window. The fix ensures a cleaner user experience by correctly managing scrollbar behavior, without impacting the functionality of the horizontal tab bar. This was previously fixed in the master branch and now applied to version 18.0.
Original PR description
### Description `.o_notebook_headers` sets `overflow-x: auto` while leaving `overflow-y` at its default `visible`. Per the [CSS overflow…
### Description `.o_notebook_headers` sets `overflow-x: auto` while leaving `overflow-y` at its default `visible`. Per the [CSS overflow spec](https://www.w3.org/TR/css-overflow-3/#overflow-properties), when one axis is not `visible`, the computed value of the `visible` axis becomes `auto`. So `overflow-y` resolves to `auto`, and a sub-pixel vertical overflow (the active tab border / nav-link height) renders a useless vertical scrollbar next to the tabs — even when the tabs fit horizontally (no horizontal overflow). Pinning `overflow-y: hidden` suppresses it, without affecting the legitimate horizontal scrolling of the tab bar when the tabs don't fit. ### Steps to reproduce 1. Open any form view with a notebook in a maximized window where the tabs fit horizontally. 2. A short vertical scrollbar is drawn at the right of the tab bar, scrolling nothing. ### Note Already fixed on `master` (`addons/web/static/src/core/notebook/notebook.scss` has `overflow-y: hidden`). This backports the one-line fix to 18.0. <img width="2637" height="1924" alt="29476" src="https://github.com/user-attachments/assets/9b51723d-5b98-4047-b51a-65c56c2505ce" /> <img width="1661" height="499" alt="88342" src="https://github.com/user-attachments/assets/0e7299f1-7b2b-4b19-9c2f-ff9bd3985e98" />
This update resolves an issue where the partner information on purchase bills was incorrectly overridden by the PO matching process during UBL XML imports. The fix establishes the purchase order as the definitive source for partner information on bills, ensuring accurate data and improved import reliability. This prevents data discrepancies and streamlines the billing process.
Original PR description
Fix a bug where the partner of a bill is overriden by the PO matching The chosen logic here is to say that in the context of a purchase, the purchase order is the single source of truth to set the partner on a bill Steps to reproduce: - Create a partner with is_company = True - Create a contact type 'invoice' for this partner - Create a purchase order for the first partner - Import an XML (UBL) that matches this PO - You can see in the import logs that the partner was correctly found first, and then the PO matching override it to set the contact as the partner task-6289358
This update fixes an issue where payments to CFDI were being sent multiple times for the same invoice, leading to inaccurate reporting of payment totals. The change ensures the 'Update Payments' button only appears after the invoice payment is fully reconciled, preventing this duplication and maintaining accurate financial records. This improves data integrity and reporting reliability.
Original PR description
Issue: Sending payments to CFDI before its full amount is reconciled allow sending the same invoice payment several times to CFDI. So some invoices are declared as paid several times and the total…
Issue: Sending payments to CFDI before its full amount is reconciled allow sending the same invoice payment several times to CFDI. So some invoices are declared as paid several times and the total amount of the payment is seen as exceeding the real total. This fix is a back port of odoo/enterprise#108355 and aim to prevent some things the backend allow, but the front end prevents. Following steps could be used to reproduce from 18.3. Steps to reproduce: - In a Mexican company - Create an invoice A of $40 to Inmobiliaria CVA - Confirm and send to CFDI - Go to bank, create a new Bank transaction of $80 - reconcile with Invoice A - Go to invoice A => click on button "Update payments" (it doesn't appear before version 18.3) - Then sheet CFDI and Download There is the first XML sent to CFDI with payment for invoice A - Create an invoice B of $40 to Inmobiliaria CVA - Confirm and send to CFDI - reconcile the transaction with Invoice B - Go to invoice B - Click on button "Update payments" - Then sheet CFDI and Download There is the second XML sent to CFDI with payment for invoices A and B Invoice A payment was sent twice to CFDI Expected behavior: - The "Update payment" button should appear only once the invoice payment is fully reconciled. Current behavior: - The update payment button appear once the invoice is reconciled with a payment. opw-5432421
This update corrects a bug where the link popover title didn't update when a file's name was changed within the HTML editor. Now, the popover displays the correct, current file name, ensuring users always see accurate information about attached files. This improves the user experience and data consistency.
Original PR description
Problem: After updating a file name, the link popover still shows the original file name. Cause: The link popover always displays the attachment name instead of the current link content. Solution: Use the link content as the popover title so it reflects the updated file title. Steps to reproduce: - Go to To-Do → Create New. - Upload a file. - Change its title. - Observe that the title shown in the link popover still uses the original file name. task-6213840 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the composer field in Odoo was misinterpreting the 'End' key when a mention was added. By adding a special character (FEFF), the browser now correctly positions the cursor at the end of the line, improving the user experience for composing messages.
Original PR description
### Purpose of this PR: - Inserting a mention in the composer results in a paragraph ending with a bare `<a>` element and no trailing text node. This causes the browser to mishandle the End key, moving the caret to the start of the next paragraph instead of the end of the current line. - Fix by appending a \uFEFF (zero-width no-break space) text node. task-6295924 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the sale stock module installation would fail due to a warehouse constraint warning. The fix ensures that the installation process continues smoothly even when a company initially lacks a defined warehouse, preventing unnecessary installation interruptions.
Original PR description
Steps to reproduce the bug:
- Have a database with sale_management installed and at least two companies (Company 1 and Company 2)
- Confirm sale orders with storable products under each company
- Install the stock module (which triggers sale_stock as a bridge module)
Problem:
The installation raised a RedirectWarning ("Please create a warehouse for company 2") and aborted. During sale_stock installation, _init_column initialises the new `warehouse_id` column on `sale.order` via SQL. Orders belonging to companies that have no warehouse yet (company 2, since `create_missing_warehouse` only creates one for the first company at that point) remain NULL. The stored-field recompute then calls write(), which fires _check_warehouse. That constraint calls _warehouse_redirect_warning() for each company without a warehouse, raising a RedirectWarning that aborts the install.
opw-6302537This update resolves an issue where markdown commands and shortcuts were unexpectedly active within code blocks, causing errors. The fix prevents commands like `/table` from being executed inside code blocks, ensuring code blocks function as intended and improving the user experience. This ensures consistent and reliable code block functionality.
Original PR description
### Steps to reproduce: - Go to ToDo. - Create a code block using `/code`. - Place the cursor inside the code block. - Type `/table` and select the table command. - A traceback occurs. ### Purpose of this PR: - Commands and markdown shorthands should not be available inside code blocks. However, typing `/` inside a `<pre>` opened the command palette, allowing structural commands such as `/table` to be executed and causing a traceback. Similarly, markdown shorthands such as `* ` and `1.` were still active, unexpectedly transforming code content into lists. ### This PR fixes the issue by: - Disabling the command palette when the cursor is inside a `<pre>` element. - Disabling markdown shorthands inside `<pre>` elements by registering an `is_shorthand_available_predicates` predicate. task-6292231 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where invoices with reverse charge tax were not being correctly formatted in the XML export for ksef. Specifically, the XML fields related to reverse charge were inaccurate. This ensures invoices with reverse charge are properly transmitted and processed, preventing potential tax reporting errors.
Original PR description
**STEP TO REPRODUCE** 1. Create an invoice with a tax with reverse charge (0% EU G for example). 2. Send the invoice to ksef. 3. Open the generated xml, and notice field P_18 is 2 while it should be 1 (because there is reverse charge). Also, there is not P13_10 indicated the total value of sale to which the reverse charge applies. opw-6041836
This update ensures that binary files uploaded through forms now store their original filenames. Previously, this feature was limited to manual fields, causing issues with mimetype detection and hindering the migration of SaaS modules. This change improves file handling and reliability.
Original PR description
Description of the issue/feature this PR addresses: Since [1], studio binary fields uploaded through a form store their filename. Due to the condition of [1], this behaviour is restricted to manual…
Description of the issue/feature this PR addresses: Since [1], studio binary fields uploaded through a form store their filename. Due to the condition of [1], this behaviour is restricted to manual fields, which limits the usage of those fields in standard and is particularly problematic when Saas modules that use this feature are migrated to Python. Not storing the filename can lead to incorrect mimetype guesses. Given that a more appropriate condition has already been added in [2], it should no longer be necessary to restrict this feature to manual fields. This commit removes that restriction to allow standard binary fields to store their filename when uploaded through a form. Current behavior before PR: When uploading a file to a non-manual binary field that has a related '_filename' field, the filename will not be stored, which can later lead to incorrectly guessing the mimetype of the file. Desired behavior after PR is merged: Uploading a file to a non-manual binary field that has a related '_filename' field stores the filename of the file. Task related to this issue: https://www.odoo.com/odoo/project.task/5917543 [1] https://github.com/odoo/odoo/commit/0e2f3b144581c47d25a99cecdd7e058a3d55bcc3 [2] https://github.com/odoo/odoo/commit/1bcab2f42eebf98127416e54f31cd6e351938b7f --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268014
This update fixes a translation error in the Odoo POS system for Spanish-speaking users. Previously, the display of available event seats showed the directional term 'izquierda' instead of the correct 'restantes'. This change ensures users see the accurate remaining seat count, improving the user experience.
Original PR description
Description of the issue/feature this PR addresses: The string "left" in `pos_event` (used to show remaining/available seat count, e.g. "5 left") was translated in `es.po` as "izquierda" (directional meaning) instead of "restantes" (remaining count). The `es_419.po` file already had the correct translation "restantes". Current behavior before PR: Users with Spanish (es) language see "5 izquierda" in the event configurator popup and product card instead of "5 restantes". Desired behavior after PR is merged: The available seat count shows "5 restantes", consistent with the es_419.po translation. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The barcode scanner check-in process was previously inaccurate due to relying on a less precise location database. This update now uses the browser's geolocation to determine location, significantly improving accuracy and reducing location discrepancies, especially in kiosk mode.
Original PR description
**Issue** Check-in and check-out performed in kiosk mode via the barcode scanner were less accurate than those made via the manual selection. The reported inacurracy between the actual and real locations was several kilometers. **Cause** `attendance_barcode_scanned` was called without a location coming from the browser's geolocation API. In that case, the location was determined by the geoip database https://github.com/odoo/odoo/blob/51f59a293de1e86f66f30257f8fc0c419463d18c/addons/hr_attendance/controllers/main.py#L69-L70 which is generally not as accurate as the location provided by the browser. opw-5889102
This update prevents the upgrade script from altering account flags (specifically the 'reconcilable' flag) when accounts have partially reconciled transactions. This resolves a potential error that would have caused the upgrade process to fail. It ensures data integrity during account updates.
Original PR description
### Context: Clients can have some existing accounts with `reconcilable` flag set as True. Some of these accounts also have partially reconcilated transactions. In Odoo 19.0, it is not authorized to…
### Context: Clients can have some existing accounts with `reconcilable` flag set as True. Some of these accounts also have partially reconcilated transactions. In Odoo 19.0, it is not authorized to toggle the `reconcilable` flag from True to False on accounts that contain partially reconcilated transactions. When the migration script `l10n_pl/migrations/2.1/end-migrate.py` is executed and try to update the CoA by adding/updating accounts, using the accounts in the file `l10n_pl/data/template/account.account-pl.csv`. This CSV file contains a reconcilable flag per account. ### Problem: Before this modification, the upgrade script was trying to update the CoA using `_load_data`, which try to overwrite the reconcilation flag of accounts in the client DB. A traceback occurs during the upgrade if an account's `reconcilable` flag is toggled to False while it still contains partially reconciled transactions. ### Solution: I have sanitized the dict `data` using the _pre_reload_data method. ### Notes: `_pre_reload_data` method sanitizes the dict `data` by avoiding the creation of duplicated accounts, the creation of duplicated fields for a given record, the toggling of the `reconcilable` flag, etcs. Back port of: https://github.com/odoo/odoo/commit/23ed5448a13255e68ff4d3ca87884c2ca2f97ba3 Reason: the issue was originally introduced in `18.0` (see https://github.com/odoo/odoo/commit/d5109a45d610916530b4b74cf3e2fa440ee7ed63) Related to: https://github.com/odoo/upgrade/pull/10266#discussion_r3402549250 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a crash in the Point of Sale (POS) system when processing payments with the Adyen terminal. Adyen sends multiple notifications for the same payment, leading to errors when attempting to retrieve payment information. The fix ensures that payment data is fetched only once at the beginning of the processing, preventing the crash and improving payment reliability.
Original PR description
The following error is raised in the POS when paying with an Adyen terminal: ``` TypeError: Cannot read properties of undefined (reading 'uuid') at Proxy.handleAdyenStatusResponse ``` Adyen delivers…
The following error is raised in the POS when paying with an Adyen terminal: ``` TypeError: Cannot read properties of undefined (reading 'uuid') at Proxy.handleAdyenStatusResponse ``` Adyen delivers webhook notifications at-least-once, so the ADYEN_LATEST_RESPONSE event can fire several times for a single payment, running handleAdyenStatusResponse concurrently. After the await on get_latest_adyen_status, a previous (duplicate) notification may already have resolved the payment line, so getPendingPaymentLine no longer returns it and the subsequent line.uuid dereference crashes. opw-6237987 patched the same root cause on a single line by adding an optional chaining operator in isPaymentSuccessful, which only moved the crash to the next dereference. Fetch the pending line once at the start of handleAdyenStatusResponse and bail out when it is gone, so every dereference below is safe. The same guard is added to the remaining branches of _adyen_handle_response for consistency with the existing Reject branch. opw-6237987 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a problem in how Odoo generates UBL BIS3 files for Debit Notes. Previously, the system incorrectly used 'LegalMonetaryTotal' instead of the required 'RequestedMonetaryTotal' node. This change ensures UBL BIS3 files are compliant with industry standards, improving data accuracy and export functionality.
Original PR description
Problem --------- Debit note should have the node `RequestedMonetaryTotal` instead of `LegalMonetaryTotal`. Solution --------- Add a conditional depending on the document type. opw-6295897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the PDP identifier field in the company registration process was left blank when using non-0225 PEPPOL EAS. It now displays a user-friendly error message if an invalid identifier is entered, preventing silent failures and ensuring accurate registration. This improves the registration process for French businesses using PEPPOL.
Original PR description
Currently when the company partner uses non 0225 peppol EAS the `pdp_identifier` field is `False`. Thus the (related) identifier field on the registration wizard is left empty. Also add a UserError when writing an invalid identifier to the `pdp_identifier` field instead of just silently failing. That way an error ill pop up in the registration wizard when trying to register with an invalid identifier. task-6307489
This update resolves an issue preventing correct XML generation for DIAN payments. The fix eliminates a workaround that caused incorrect calculations of prepaid amounts, ensuring accurate data transmission and avoiding API errors related to mismatched payment totals.
Original PR description
**Steps to reproduce:** To test this, you will need an official DIAN setup, because this error comes from the response to our API call to the DIAN. - Setup the DIAN in a colombian company - Open the…
**Steps to reproduce:** To test this, you will need an official DIAN setup, because this error comes from the response to our API call to the DIAN. - Setup the DIAN in a colombian company - Open the PoS - Order a product - Before paying, make the amount we are paying bigger than the amount due - We get an error response from the API, the error is saying that the total due does not match what we paid **Why the fix:** Currently, the xml is rejected because the sum of the **PaidAmount** in the **PrepaidPayment** tag is not equal to what we are trying to pay for. This is happening because to avoid the fact that we can not send a line with negative amount, we used the **abs()** function on the line amount to make it positive. The negative line comes from the fact that when we have a total due that is below the amount paid, we create a new payment line with a negative amount to balance it out. But as we can't send lines with negative amount, we needed to make it positive. This does not work, as the sum of the lines' amount will then be too much compared to what we are paying for, because instead of substracting it we will be adding it. To avoid this, we now group the amount in one single tag and send it this way. This ensures that the sent amount is correct and equals the amount due, and does not send a negative line. opw-6232575
This update fixes a minor issue where the invoiced quantity was slightly off (rounding error) after importing XML bills and linking them to purchase orders. The fix ensures accurate quantity calculations by addressing a decimal precision discrepancy during the import process. This prevents discrepancies in invoice totals.
Original PR description
When importing an XML bill and linkin git to a purcahse order, the invoiced quantity may be computed incorrectly, due to a decimal precision mismatch. Steps to reproduce: - Import an XML bill having a line with quantity 1800.0 - Link to a purchase order with the same line Issue: The invoiced quantity will be computed with 1 cent difference (1800.01) Analysis: Because the system forced a decimal precision of 13 for 'Product Unit of Measure', quantity is imported as 1800.0000000000016. Later, when computing the invoiced quantity, the system round the quantity using 'UP' strategy, rounding the amount to 1800.01 opw-6194824
This update fixes an issue where rapid changes to product quantities in the product catalog sometimes resulted in incorrect final quantities on Sale Order Lines. The fix ensures that quantity updates are processed sequentially, preventing a race condition that caused data inconsistencies. This improves the accuracy of sales order calculations.
Original PR description
Fix a concurrency race condition in the product catalog where rapid quantity updates could result in incorrect final quantities on Sale Order Lines (SOL). Steps to produce: --- - We need a DB with…
Fix a concurrency race condition in the product catalog where rapid quantity updates could result in incorrect final quantities on Sale Order Lines (SOL). Steps to produce: --- - We need a DB with too many products. Also it might not be easy to reproduce the issue locally. Try runbot. - Open a Sale Order (SO) and open the Product Catalog. - Rapidly change or paste quantities (e.g., changing from 1 to 100) across multiple records very fast. - Return to the SO. Some lines intermittently retain an intermediate quantity (e.g., qty = 1) instead of the final entered value. Cause: --- - This is a concurrency issue. In the faulty cases, the `update_order_line_info` setting quantity to 1 takes a few seconds to resolve, while the update setting quantity to 100 resolves faster (around 200ms). This cause the SOL final quantity set to 1. Fix: --- - We can chain RPC calls to ensure that each request is completed before starting the next one. Backport of ef9554ad95d5e39ab7b550db0d39454373f99aed opw-6282877 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269750