Tuesday, September 16, 2025
18 changes · saas-18.2
Resolved issues and error corrections
The portal signature form now works correctly even when it is placed directly on a page instead of inside a pop-up window. This prevents an error that could block customers or users from signing forms in portal pages.
Original PR description
Description of the issue/feature this PR addresses: Be able to use the portal signature form outside of a modal. Current behavior before PR: If the signature form (```<t t-call=“portal.signature_form”>```) is used outside of a modal, an error occurs: ```TypeError: Cannot read properties of null (reading 'addEventListener')``` Desired behavior after PR is merged: The signature form can be used outside of a modal. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224564
Purchase order lines no longer allow users to create a new unit of measure directly from the order line. This prevents purchase confirmations from failing if that newly created unit is later deleted, improving reliability for purchasing workflows.
Original PR description
When users create a new UoM from order lines, and after deleting the newly created UoM, they try to confirm the order. Steps to reproduce: --- - Install `purchase_stock` module - Create a New PO - Add an order line -> Remove its `Unit` and create a New one - Delete newly created UoM from `Units & Packagings` - Now Confirm Order Traceback: --- - `ValueError: Expected singleton: uom.uom()` - `ZeroDivisionError: float division by zero` This error occurs because, after deleting the newly created UoM, the `product_uom_id` becomes empty, which leads to errors in multiple lines. Solution: --- We are restricting users from creating a UoM from purchase order lines, as already done in other modules (e.g., stock, account, …). sentry-6746792383, 6853969554 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures invoices for foreign customers use an alphanumeric Other Buyer ID in Saudi e-invoicing XML. This helps avoid ZATCA acceptance warnings and supports smoother invoice submission for cross-border sales.
Original PR description
When an invoice is being issued to a Foreign Customer, the Other Buyer ID (Other Buyer ID (BT-46) <cac:AccountingCustomerParty / cac:Party / cac:PartyIdentification / cbc:ID>) should be OTH and filled accordingly to avoid an acceptance warning from ZATCA. According to ZATCA, the value needs to be in alphanumeric format, even if the value does not follow the specific country's VAT format Task-id: 5075005 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226593
Online shop quotations now correctly keep the default salesperson configured in Website Settings. This helps sales teams track responsibility for website orders without manual correction.
Original PR description
**Steps to Reproduce:** - Add a default salesperson in Website Setting - Go to Shop > Add a product to cart > Go to cart - Check the quotation created - Go to Other Info tab and check the salesperson(user_id) value **Issue:** The salesperson is not assigned automatically, even if it is set in Settings. **Fix:** While preparing the SO values, the field wasn't set which resulted into this bug. **Affected Version:** 18.2~master **opw**-5071123
This fix prevents internal browser testing tools from failing again when a websocket is unavailable after a serious error. It helps preserve the original failure details, making investigation and troubleshooting more reliable.
Original PR description
Cf #226267 the "error condition" on the ws socket is that it's not present at all, not that it's `None`. So when used after a fatal error (e.g. in the context of trying to take a screenshot or take a screencast) these methods *can* in some cases trigger a compound failure and lose the original error because they fail on trying to access the ws to check if it's truthy. Forward-Port-Of: odoo/odoo#227385
This fix prevents backend editing tools from failing when they display website-related fields. If no website pricelist is available in that backend context, the system now safely uses the company currency instead.
Original PR description
Prior to this commit, the website currency was computed using the request pricelist. However, this logic assumed that the compute method could only be called from a frontend request.
However, via `web_studio`, a user can add fields linked to a website, which triggers the computation in a backend request, causing the following traceback:
```
Traceback (most recent call last):
...
File "/data/build/odoo/addons/website_sale/models/website.py", line 282, in _compute_currency_id
request and request.pricelist.currency_id or website.company_id.sudo().currency_id
^^^^^^^^^^^^^^^^^
AttributeError: 'Request' object has no attribute 'pricelist'
```
This commit fixes the issue by first ensuring that the pricelist exists and falling back to the company currency if it does not.
opw-5068581This update improves the spreadsheet module's internal test helpers by adding support for sorting behavior. It helps Odoo validate spreadsheet list and data scenarios more accurately, reducing the risk of sorting-related issues reaching users.
Original PR description
Task: 4962837 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223011
When a Spanish POS TicketBAI submission fails, receipts will no longer print a misleading QR code. This avoids confusing customers and staff with invalid receipt information after an upload error.
Original PR description
Currently if the TicketBAI upload fails, a QR code is printed with the value `true`. Steps to reproduce ----- 1. Validate a POS order 2. Have a request exception occur during the TicketBAI post 3. Receipt is printed with an incorrect QR code Issue ----- `get_l10n_es_pos_tbai_qrurl()` returns None if the edi document is not accepted. This is then interpreted as `true` by the client and a QR code is printed. Solution ----- Explicitly return an empty string if the edi document is not accepted. Forward-Port-Of: odoo/odoo#227293
This update prevents a mail processing error caused by invalid empty values being included when looking up records. It improves reliability in mail-related workflows without changing user-facing features.
Original PR description
Browse breaks when given a bool, so the solution is to filter the list from false values before browsing --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225916
Fixes an issue that caused an error when users tried to translate chatter messages from the mobile action menu. Mobile users can now use message translation reliably without hitting a traceback.
Original PR description
Steps to reproduce: - Open any chatter with a message on mobile - Try to translate the message using the Translate mobile action => Throws traceback This happens because the component here is `MessageActionMenuMobile` instead of `Message`, and MessageActionMenuMobile does not have the `onClickToggleTranslation` method. This PR fixes the issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223567
The fiscal regime shown on Mexican electronic invoice PDFs now follows the same contact hierarchy rules as the official CFDI XML. This avoids confusing mismatches between the customer-facing PDF and the legally relevant XML when invoicing child contacts of a company.
Original PR description
In l10n_mx: - Create a child contact under a company contact. - Set the fiscal regime of the child contact to one different from the company’s fiscal regime. - Create an invoice with the child contact and send it to the CFDI. In the XML, the fiscal regime used is the company’s, whereas in the PDF it is the child contact’s. This commit applies the same logic from _add_customer_cfdi_values to the PDF generation. After this change, the fiscal regime shown in the PDF will be the company’s, consistent with the XML. opw-4989605 Forward-Port-Of: odoo/enterprise#94259 Forward-Port-Of: odoo/enterprise#92482
Opening the duplicate transactions wizard directly no longer triggers an error when no bank journal is linked. This avoids a confusing crash and makes the Accounting workflow more reliable for users who access the view manually.
Original PR description
Currently, an error occurs when users try to open the view directly. Steps to reproduce: --- - Install `Accounting` module - Using Open View, Open `account.duplicate.transaction.wizard` view Traceback: --- `ValueError: Expected singleton: account.journal()` This error occurs because no account journal is linked to the wizard at [1], resulting in an empty `account.journal`. [1]- https://github.com/odoo/enterprise/blob/08564f3312c255f2f3ab95cef5a9bfc57727bd1f/account_online_synchronization/wizard/account_journal_duplicate_transactions.py#L32 sentry-6812500330 Forward-Port-Of: odoo/enterprise#94538
Spreadsheet list side panels now open even when a saved sort refers to a field that was later removed or renamed. This lets users remove the outdated sorting after an upgrade instead of being blocked by an error.
Original PR description
If a list is sorted on an invalid field and you try to open the list side panel, it crashes. It should open to allow the user to remove the sorting. A list with an invalid sorting field if the spreadsheet was created in a given version, then upgrades to a version where that field has been removed or renamed. Task: 4962837 Forward-Port-Of: odoo/enterprise#92393
Fixed an issue where a renamed spreadsheet could appear as untitled after creating a new spreadsheet and returning through the breadcrumb. This keeps navigation labels accurate and reduces confusion when users work with multiple spreadsheets.
Original PR description
Steps to reproduce: - Create a spreadsheet - Rename it to "My awesome spreadsheet" - Click on File -> New - Go back to "My awesome spreadsheet" from the breadcrumb => The spreadsheet is untitled. This was caused by the fact that the name was not saved in the local state of the action. Task: 4942117 Forward-Port-Of: odoo/enterprise#93163
Features or functions removed from Odoo
A long-disabled automated test for website link tools was removed because it no longer worked after underlying editor changes. This reduces noisy test failures and helps keep the release validation process focused on active, reliable checks.
Original PR description
Test has been disabled in 18.0~master since March, it's even more broken in 19.0+ following #225791 (migrated to a `setSelection` with a different protocol, but the tour was not updated to the new protocol). https://runbot.odoo.com/odoo/error/116797 Forward-Port-Of: odoo/odoo#227163
Documentation and clarification updates
This update refreshes Quartile's Corporate Contributor License Agreement record in Odoo's documentation. It keeps the project's legal contributor records current, with no expected impact on product features or users.
Original PR description
@qrtl --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226204
This update records a contributor's signed Contributor License Agreement. It supports legal compliance for accepting contributions and has no direct impact on product features or users.
Original PR description
The commit contains my CLA signature Forward-Port-Of: odoo/odoo#226307
This update adds a contributor to Ahkio Consulting's corporate contributor agreement record. It helps keep Odoo's legal contribution documentation accurate and up to date, with no impact on product functionality.
Original PR description
Description of the issue/feature this PR addresses: Add a contributor to ahkio-consulting.md --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226311