Thursday, March 26, 2026
17 changes · 18.0
New functionality added to Odoo
This update introduces specific fuel tax calculations and related accounting data for Chile (l10n_cl). It adds two new fuel tax rates, incorporates relevant tax tags, and includes a migration script to ensure a smooth transition. These changes align with Chilean tax regulations.
Original PR description
- Adding two specific fuel taxes and relevant tax tags. - Adding specific fuel tax account tag. - Adding end-migrate to handle additions. task-4259393 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update resolves an issue preventing superuser administrators from deleting work entry types within the payroll module. Previously, this action was restricted, leading to potential operational inefficiencies. Now, superusers can safely delete work entry types, streamlining payroll management.
Original PR description
Forward-Port-Of: odoo/enterprise#111967
This update corrects a bug where warranty pricing incorrectly applied to all lines associated with Field Service tasks, including the original service product. The fix ensures warranty pricing is applied only to additional products added to the task, maintaining the correct price for the initial service order. This prevents unexpected cost adjustments.
Original PR description
Steps to reproduce: - Create a Field Service service product configured to create a task. - Create a Sale Order and add the FSM service product. - Confirm the Sale Order to generate the FSM task. - Add an additional product to the newly created task. - Enable Under Warranty on the task. Issue: Enabling warranty sets the unit price of all task-related sale order lines to zero including the original FSM service line. Cause: Warranty logic does not exclude the original service sale order line. Solution Apply warranty pricing only to additional sale order lines linked to the task and keep the original FSM service line price unchanged. task-5403794
This update fixes a bug in Odoo's Web Studio that prevented users from adding chatter functionality to certain form views. Specifically, the system now validates that models support chatter before allowing it to be added, preventing an error and improving the user experience. This ensures smoother operation within Web Studio.
Original PR description
Currently, adding a chatter in a form view using web studio causes an error when the model does not inherit from mail.thread model. **Steps to Reproduce:** 1. Install the `data_cleaning` and…
Currently, adding a chatter in a form view using web studio causes an error when the model does not inherit from mail.thread model. **Steps to Reproduce:** 1. Install the `data_cleaning` and `web_studio` modules. 2. Data Cleaning > Configuration > Field Cleaning (form view). 3. Activate studio and open the XML view from the "View" tab. 4. Add `<chatter/>` tag inside the `<form>` tag and try to save the view. **Error:** `AttributeError - 'data_cleaning.model' object has no attribute '_get_thread_with_access'` **Cause:** The `.../mail/thread/data` controller passes the current model as a `thread_model` but the chatter can only be added module that inherits the 'mail.thread' module. When a chatter is added to a form view of a model that does not inherit mail.thread, resulting in an AttributeError. - [1] **Fix:** This commit prevents adding chatter to form views of models that do not support it. Instead of a traceback, a validation error is shown to the user. [1]: https://github.com/odoo/odoo/blob/71e86f38c7699aaea980c929c67835a3495edf55/addons/mail/controllers/thread.py#L18 sentry-6792833694
This update resolves a test failure caused by relying on demo data that is no longer available in the system. The code now automatically creates a new partner record when needed, ensuring the test runs successfully. This prevents disruptions in the testing process.
Original PR description
4d844b7f3b570d7c3d978c6f10c351c48553df0b was a backport that was developed when demo data was installed during CI. However, time has passed, and demo isn't installed anymore causing the following:…
4d844b7f3b570d7c3d978c6f10c351c48553df0b was a backport that was developed when demo data was installed during CI.
However, time has passed, and demo isn't installed anymore causing the following:
```python
Traceback (most recent call last):
File "/data/build/enterprise/sale_amazon/tests/test_amazon.py", line 541, in test_sync_orders_replacement
"partner_id": self.env.ref("base.res_partner_1").id,
File "/data/build/odoo/odoo/api.py", line 596, in ref
res_model, res_id = self['ir.model.data']._xmlid_to_res_model_res_id(
File "/data/build/odoo/odoo/addons/base/models/ir_model.py", line 2215, in _xmlid_to_res_model_res_id
return self._xmlid_lookup(xmlid)
File "<decorator-gen-43>", line 2, in _xmlid_lookup
File "/data/build/odoo/odoo/tools/cache.py", line 104, in lookup
value = d[key] = self.method(*args, **kwargs)
File "/data/build/odoo/odoo/addons/base/models/ir_model.py", line 2208, in _xmlid_lookup
raise ValueError('External ID not found in the system: %s' % xmlid)
ValueError: External ID not found in the system: base.res_partner_1
```
This commit creates a new partner on the fly instead.
runbot-241943
Forward-Port-Of: odoo/enterprise#112131This update resolves an issue where the SEPA payment version field in the accounting system was incorrectly displaying as empty in the user interface. The fix ensures the correct 'PAIN 09' version is generated, aligning with database values. This improves data accuracy for SEPA payment processing.
Original PR description
https://github.com/odoo/enterprise/commit/80f9f966d7db793ae82e65c76514323cb10e34ab tried to fix the issue, but assumed the field would be returned empty by the ORM when the value was inconsistent with the db. It's not true: it returns the database value ; only the UI shows the field as empty.
This update allows invoicing users to easily check the Nilvera status of partners during the invoicing process. Previously, a technical issue prevented this check due to missing access rights. Granting access to the `account.group_account_invoice` group now resolves this without requiring administrator intervention.
Original PR description
Invoicing users need to verify partner Nilvera status as part of the regular invoicing workflow, but the check was failing due to missing access rights on `l10n_tr.nilvera.alias` (create/unlink operations). Granted access to `account.group_account_invoice` to allow the check without requiring admin intervention. task-6044307
This update automatically checks out employees from attendance records when they are archived. Previously, archived employees remained checked in, leading to inaccurate attendance tracking. This change ensures data integrity and provides a more accurate record of employee timekeeping.
Original PR description
Before: - When an employee was archived, their attendance was not updated. After: - When an employee is archived, if they are currently checked in, they will be automatically checked out at the current timestamp. task-5916700 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255524
This update resolves an issue where the Chrome debug log file wasn't always created, potentially causing problems with debugging Odoo. The change ensures the log file is created reliably, regardless of Chrome's verbosity settings, improving the stability and troubleshootability of the application.
Original PR description
Follow up to #255054 [Apparently][] on old versions of chrome `chrome_debug.log` may not exist if the verbosity is not at least 1 (or chrome otherwise has had things to write to the log). Thus handle the possibility of the file being missing instead of assuming it's present just because we've told chrome to generate one. [Apparently]: https://github.com/odoo/odoo/pull/255054#pullrequestreview-4001460518 Forward-Port-Of: odoo/odoo#255769 Forward-Port-Of: odoo/odoo#255736
This update ensures that all user-defined domains within the 'mail.catchall.domain.allowed' system parameter are properly sanitized. Previously, a formatting issue caused incorrect comparisons, preventing valid domains from being recognized. This fix resolves a potential issue where users couldn't correctly configure email catch-all settings, improving email deliverability.
Original PR description
Since its introduction (https://github.com/odoo/odoo/pull/76734), the "mail.catchall.domain.allowed" system parameter is normally sanitized by `_sanitize_allowed_domains` when using `set_param`. But…
Since its introduction (https://github.com/odoo/odoo/pull/76734), the "mail.catchall.domain.allowed" system parameter is normally sanitized by `_sanitize_allowed_domains` when using `set_param`. But the method is not run when the system parameter is created manually, for example through the UI, because the current conditional logic is not triggered for write and create call. This can be an issue if for example the use submits this value: "domain1.com, domain2.com,domain3.com" The comma seperated list will only be split by ',', meaning that the second element is " domain2.com" (space character in front). As such, that domain will not be used as expected, since most flows using that data will end up comparing "domain2.com" vs " domain2.com", and not considering it a match. Before this fix: Create new record in System parameters with key = "mail.catchall.domain.allowed" value = "domain1.com, domain2.com,domain3.com" -> after save, value == "domain1.com, domain2.com,domain3.com" After this fix: -> after save, value == "domain1.com,domain2.com,domain3.com" OPW-5505414 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244279
This update resolves an issue where upgrading the `l10n_ae` module would fail if the user had customized the name of the 'United Arab Emirates' country setting in Odoo. The fix replaces references to country names with a stable XMLID, ensuring consistent module upgrades regardless of user customizations. This improves the reliability of module updates.
Original PR description
### Steps to reproduce ------------------ - Install `l10n_ae` module. - Go to *Settings → Countries* and rename the country "United Arab Emirates" (e.g. change it to "UAE"). - Upgrade the `l10n_ae`…
### Steps to reproduce
------------------
- Install `l10n_ae` module.
- Go to *Settings → Countries* and rename the country "United Arab Emirates" (e.g. change it to "UAE").
- Upgrade the `l10n_ae` module.
### Issue
-----
The file `l10n_ae/data/res.bank.csv` references the country using its name ("United Arab Emirates"). During the module upgrade, the CSV import tries to resolve the country relation using the country name. If the country name has been modified by the user (for example to "UAE"), the lookup fails and the module upgrade crashes with:
```python3
No matching record found for name 'United Arab Emirates' in field 'Country'
```
### Root Cause
----------
Using translatable/display names in CSV data is unreliable, as these values can be customized or translated by users.
### Fix
---
Replace the country name reference with the stable XMLID `base.ae` in `res.bank.csv`.
Using XMLIDs ensures consistent resolution regardless of name changes or translations.
opw-6015302
upg-3950261
tbg-2492
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-prThis update fixes an issue where the VAT autocomplete feature in the Contacts app was failing to recognize VAT numbers with country codes. The change ensures the backend correctly processes VAT numbers with country codes, providing accurate autocomplete suggestions. This improves data accuracy and user experience when entering VAT information.
Original PR description
**Steps to reproduce:** * Go to the Contacts app and create a new partner. * In the VAT field, type a valid VAT number that includes the country code prefix (e.g., a Danish VAT like DK12345678). *…
**Steps to reproduce:** * Go to the Contacts app and create a new partner. * In the VAT field, type a valid VAT number that includes the country code prefix (e.g., a Danish VAT like DK12345678). * Trigger the autocomplete suggestion. **Observed behavior:** * The autocomplete by VAT does not return any results. It falls back to an autocomplete by name, which relies on the VAT string and also yields no results. **Cause:** * The `jsvat` frontend library requires the VAT string to include the country code prefix (e.g. DK12345678) to evaluate it correctly as a VAT number and trigger the VAT autocomplete flow. * However, the backend IAP `search_by_vat` API expects the VAT number without the country prefix in the `query` field, as the country code is provided as a separate `query_country_code` parameter. Passing the full VAT string prevents the IAP service from finding matches. **Fix:** * Modified `autocomplete_by_vat` in `res_partner.py` to strip the `query_country_code` prefix from the `vat` string before passing it to the IAP API `search_by_vat`. * The full, unmodified VAT string is still preserved for the `check_vies` fallback, as VIES requires the full country code prefix. opw-5974250
This update resolves an issue preventing API key creation through the batch RPC call. The previous implementation had a problem with how expiration dates were handled, which was causing the process to fail. This fix ensures API keys can now be created reliably using the batch RPC method.
Original PR description
Commit 3b3ee6bb5f2d3edc69f4166e0e63074f8b1e1c87 allows apikey creation via batch RPC call. However, this will not work when dereferencing `res.expiration_date`.
This update resolves an issue where the `/lead` command within the live chat feature wouldn't display conversation history when a chatbot wasn't attached. The change ensures the system correctly retrieves message history regardless of whether a chatbot is present, improving the user experience.
Original PR description
In PR: https://github.com/odoo/odoo/pull/253566, _get_channel_history was modified to fetch messages from `chatbot_message_ids.mail_message_id` instead of `message_ids`. This caused an issue where the `/lead` command was not working correctly when no chatbot is associated, resulting in an empty conversation history. This commit fixes the issue by falling back to `message_ids` when `chatbot_message_ids` is not available.
This update resolves a bug where the bold formatting action wasn't consistently removing bolding from text, particularly when a `/file` component was present. The fix ensures that bolding is correctly applied or removed based solely on editable text nodes, improving the reliability of the HTML editor's formatting capabilities.
Original PR description
When determining whether the "bold" action is about adding bold or removing bold, non-editable text nodes are also taken into account. Because of this, if the selection contains an embedded component such as `/file`, it always considers bold was not applied on all nodes, and should therefore be applied. The action thus never removes bold. This commit fixes this by only taking into account the editable nodes. Steps to reproduce: - Go to a "To do" note - Add a few lines of text - Add a `/file` in the middle - Select all - Press Ctrl+B: bold is applied on the surrounding text - Press Ctrl+B again => Bold was not removed from the surrounding text task-5955977
This update fixes an issue where invoices sent via Peppol were creating duplicate documents in the system. The change ensures attachments are synchronized only once during the dedicated document linking process, streamlining the Peppol invoice sending workflow. This improves data accuracy and efficiency.
Original PR description
When sending an invoice via Peppol, the PDF and XML attachments are logged in the chatter. This automatically triggers a synchronization with the Documents app. However, the Peppol sending flow also includes a dedicated document linking step later in the process. This caused the same attachments to be registered as documents twice. This commit skips the document synchronization during the initial chatter logging step. The attachments will now only be synchronized once during the dedicated linking phase. Note: ec6e559 prevented duplicate attachments in the chatter with some cleanup code, but this cleanup code runs after the document has already been created and does not remove the document, resulting in duplicate documents, which this commit fixes. Task-6030468 Forward-Port-Of: odoo/odoo#254893
This update optimizes the testing process by pre-generating the `bus.websocket_worker_assets` bundle. Previously, this bundle was rebuilt repeatedly during tests, causing significant delays. This change dramatically speeds up test execution times, improving overall development efficiency.
Original PR description
This commit sets the `bus.websocket_worker_assets` bundle to be pregenerated while running tests to avoid rebuilding it at runtime (i.e. +900 times with a db "all"). Forward-Port-Of: odoo/odoo#255843