Friday, June 26, 2026
10 changes · saas-18.4
Resolved issues and error corrections
A test case for importing electronic invoice partner details now uses a valid Belgian VAT number while still checking mismatch behavior. This prevents test failures caused by stricter third-party VAT validation in newer environments, improving reliability without changing user-facing behavior.
Original PR description
This commit fixes a Belgian VAT validation check in `test_import_partner_retrieval_bank_account_number` as the provided vat number isn't a valid one. It keeps the spirit of the test by still having vat number mismatch, but with a valid value. The python-stdnum library used for this validation added a stricter check since version 2.2, which is used in Ubuntu Resolute 26.04. References: - https://github.com/arthurdejong/python-stdnum/commit/7ca9b6ce7b1f2b4d1bf164c2af83a8a77bc919d2 runbot-939796 Forward-Port-Of: odoo/odoo#272082
This fixes an error that could occur when a customized purchase order screen showed the vendor bill button even though no bill existed. Users who adjust visibility settings in Studio can now click the button without disrupting their workflow.
Original PR description
Currently an error occurs when user removes the invisible condition on vendor bill smart button and click on it. Steps to replicate: - Install purchase, web_studio with demo. - Open any purchase…
Currently an error occurs when user removes the invisible condition on vendor bill smart button and click on it.
Steps to replicate:
- Install purchase, web_studio with demo.
- Open any purchase order and turn on studio mode.
- From the View tab click `Show invisible Elements`.
- Remove the invisible condition from the vendor bill smart button.
- Turn off the studio mode and click on the vendor bill smart button.
Error:
```
File '/home/odoo/odoo19/community/addons/purchase/models/purchase_order.py', line 963, in action_view_invoice
result['context'] = literal_eval(result['context'])
~~~~~~^^^^^^^^^^^
KeyError: 'context'
```
Cause:
- Since the user removed the invisible condition from the Vendor Bill smart button, the button becomes visible even when there is no bill linked to the purchase order.
- As a result `invoices` is received as `False` as there is no linked vendor bill the `else` branch gets evaluated [1], which completely overrides the original `result` (window action). As a consequence, when trying to access `result['context']` we get this error.
Solution:
- Returned from the function when the action type is `act_window_close` as it doesnt make sense to add any context to it.
[1]: https://github.com/odoo/odoo/blob/6f2930dcaf202c8e034e958c0a2868e7802578b2/addons/purchase/models/purchase_order.py#L960-L961
sentry-7414648540
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prProject tasks marked as private are now prevented from being selected as parent tasks. This helps keep private work properly separated and avoids exposing or linking restricted tasks in project structures.
Original PR description
In this commit, we ensure that private tasks can never be selected as parent tasks. task-5119141 Forward-Port-Of: odoo/odoo#271896 Forward-Port-Of: odoo/odoo#270795
The German SKR03 accounting template now uses the correct default accounts for cash discounts. This helps German companies set up accounting with the right account codes from the start, reducing manual corrections and reporting errors.
Original PR description
The default cash discout accounts referenced in the
German skr03 template used the wrong account codes.
The template has been updated with the right ones.
task-4915939
opw-4909059
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#271886
Forward-Port-Of: odoo/odoo#271024This change gives the web desktop unit test suite more time to complete during automated checks. It helps prevent harmless timeout failures in nightly builds as the number of tests grows, improving confidence in build results without changing product behavior.
Original PR description
The test_unit_desktop suite sometimes timeouts, especially in nightly builds. There's nothing alarming in those timeouts, that are most certainly due to an increasing number of tests. We thus increase the timeout to 45 minutes (note: in 19, it's 60 minutes). Runbot error~243569 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#272325
This change updates a French e-invoicing test so it works when only the Invoicing app is installed, without relying on a payment status available only in Enterprise Accounting. It helps keep automated checks reliable across different Odoo editions and installation setups.
Original PR description
The `in_payment` state does not exist in community with only the Invoicing module installed. It is added in `enterprise` in the Accounting module. runbot.build.error-939451 Forward-Port-Of: odoo/odoo#267475
This fix prevents the webhook sample payload preview from crashing when selected fields contain complex data structures. Business users configuring webhook notifications can now preview payloads more reliably before activating integrations.
Original PR description
**Steps to Reproduce:** - Create a Server Action of type 'Webhook Notification'. - Select a model containing a field that returns a `frozendict`-based structure (e.g. `account.move` →…
**Steps to Reproduce:** - Create a Server Action of type 'Webhook Notification'. - Select a model containing a field that returns a `frozendict`-based structure (e.g. `account.move` → `needed_terms`). - Add the field to the webhook fields. - Open the webhook sample payload preview. **Issue:** - During sample payload generation: - The selected fields are read from a sample record. - A selected field returns a structure containing `frozendict` objects. - The payload is serialized using `json.dumps()`. - JSON serialization fails with: ```text TypeError: keys must be str, int, float, bool or None, not frozendict ``` - The webhook sample payload computation crashes and the preview cannot be displayed. **Root Cause:** - The webhook sample payload may contain `frozendict` objects returned by selected fields. - The serializer used for payload generation does not handle such mapping-like objects, causing `json.dumps()` to fail. **Solution:** - Use a serializer that converts mapping-like objects into JSON-compatible structures before serializing the webhook sample payload. **OPW-6295777** 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#271864
The mail chatter no longer offers to create a contact when the recipient field is empty. This prevents accidental creation of unnamed contacts that can clutter customer data and cause errors when opened later.
Original PR description
The chatter recipients input always added a "Create" option to its autocomplete dropdown, even when the field held no text. The feature that introduced this input,…
The chatter recipients input always added a "Create" option to its autocomplete dropdown, even when the field held no text. The feature that introduced this input, https://github.com/odoo/odoo/commit/3b985d2c4239fe702c1a56bef04fc112af39e954, wired that option to create a res.partner straight away. Selecting "Create" with an empty input therefore created a partner with no name, displayed everywhere as "Unnamed". The email popover that opens for a recipient without an address then offered a Discard button, but the empty partner was already saved. The same sequence could be repeated to accumulate nameless contacts, which later raise a missing name error when opened in the Contacts app. Only add the "Create" option when the typed term resolves to a name or an email, in getAutoCompleteSources of recipients_input.js. An input with no usable text has nothing to create from, which matches the standard many2one autocomplete that only offers creation once text is entered. Steps to reproduce: 1. Open any record with a chatter 2. Click "Send message" 3. In the recipients field type a character then delete it, leaving the field empty with the dropdown still open 4. Click the "Create" option 5. On the "What's the email address of Unnamed?" popover, click Discard => A blank "Unnamed" contact is created, and repeating the steps creates more Ticket [link](https://www.odoo.com/odoo/action-4043/5942428) opw-5942428 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250973
The disconnect button for French electronic invoicing now uses the correct label instead of referring to Peppol. This reduces confusion for users managing France-specific e-invoicing settings.
Original PR description
The name of the disconnect button for the France e-invoicing was incorrect as it referenced peppol and was fixed in this pr to be called Disconnect French electronic invoicing task-6266337 Forward-Port-Of: odoo/odoo#268536
Documentation and clarification updates
Djody Kort has been added to Codeforward B.V.'s existing corporate contributor agreement records. This confirms authorization to contribute on Codeforward's behalf and supports future accepted contributions.
Original PR description
Adds me (Djody Kort) to the contributor list of the existing Codeforward B.V. Corporate CLA (`doc/cla/corporate/codeforward.md`). This precedes an upcoming `[FIX] service/server` bug-fix contribution. Codeforward's Corporate CLA v1.0 is already on file (signed by Sander Lienaerts), and I am authorized to contribute on Codeforward's behalf. Forward-Port-Of: odoo/odoo#269240