Daily updates from Odoo
Wednesday, January 7, 2026
12 changes · master
Resolved issues and error corrections
This update corrects a display issue where vendor bills weren't appearing in the list view, even when a button indicated a matching count. The fix integrates purchase receipts into the display, ensuring the list view accurately reflects the number of bills and receipts associated with an analytic account. This improves data visibility for expense tracking.
Original PR description
Currently, when the user clicks the vendor bill smart button from analytic accounts, the list view shows no records even though the button count is greater than 0. **Steps to replicate:** * Install…
Currently, when the user clicks the vendor bill smart button from analytic accounts, the list view shows no records even though the button count is greater than 0. **Steps to replicate:** * Install `accountant` and `hr_expense` with demo. * Enable analytic accounting from settings. * Expense > Approve and Post submitted expense * Analytic Accounts > Nebula > Vendor Bills **Observed Behaviour:** * Even though the smart button shows a count of 1 there are no records displayed in the list view. **Root cause:** * After PR [1], vendor bills were changed to receipts. Since [2] counts receipts too, the button shows a different count than the list view, as [3] does not include receipts. **Solution:** * Show purchase receipts along with the vendor bills which correctly matches with the vendor bill count. [1]: https://github.com/odoo/odoo/pull/217758 [2]: https://github.com/odoo/odoo/blob/569b2e27699a76f9bac210e61b47f8a5708c814b/addons/account/models/account_analytic_account.py#L36 [3]: https://github.com/odoo/odoo/blob/569b2e27699a76f9bac210e61b47f8a5708c814b/addons/account/models/account_analytic_account.py#L68 opw-5359320 Forward-Port-Of: odoo/odoo#238282
This update resolves an issue where product quantities remained at zero after removing optional items from a sales order. The fix ensures that when optional items are unset, the corresponding product amounts are accurately restored, preventing incorrect order calculations. This improves the reliability of sales order management.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Create a Sales Order. - Add a section and some products under it. - In the section menu (three dots), click Set Optional. - Again, open the…
**Steps to produce:** - Install the `Sales` module. - Create a Sales Order. - Add a section and some products under it. - In the section menu (three dots), click Set Optional. - Again, open the section menu and click Unset Optional. **Issue:** - After unsetting the optional, the product amounts remain `0`. **Root cause:** - At[1], when setting options, both quantity and price are reset to `0`. - When unsetting optional, only the quantity is restored, leaving the price at `0`. **Solution:** - When unsetting optional, explicitly trigger the onchange on the field `product_uom_qty` using `.update()`. [1]https://github.com/odoo/odoo/blob/27cd0a3fea1b47a85a4f3d397b052bbec08e182b/addons/sale_management/static/src/fields/sale_order_line_field/sale_order_line_field.js#L138-L140 Before: <img width="1198" height="476" alt="image" src="https://github.com/user-attachments/assets/01dee1d6-2870-4222-8a6c-724fbfff8da1" /> After: <img width="1214" height="453" alt="image" src="https://github.com/user-attachments/assets/63ed4eb4-27cf-4b15-a957-c28a46a3ca42" /> opw-5368488 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239805
This update resolves an issue where database neutralization inadvertently deleted records from other models linked to the 'mail.partner.device' field, causing problems during testing. The fix now uses a targeted deletion query instead of a broad truncation, ensuring data integrity during neutralization and upgrade processes.
Original PR description
### Step to reproduce: 1. Create db in version 17.0 and create a many2one field with ``mail.push.device`` 2. neturalize the db. All records of res.users will be vanish due to ``TRUNCATE…
### Step to reproduce:
1. Create db in version 17.0 and create a many2one field
with ``mail.push.device``
2. neturalize the db. All records of res.users will be vanish due to ``TRUNCATE mail_push_device CASCADE;``
### Issue:
during neutralize if there is any custom/studio field many2one with ``mail.push.device`` even if the mail push device
record won't used it in particular model still it will wipe out all the records of that model on neutrilizing
which can issue during testing on neutrlized db
**To fix it :**
[here](https://github.com/odoo/odoo/pull/133560/files#diff-284b40b100919f9b1d4f7bee50740387fea5f11815210baa5f6de9cbf317ca6dR14) want to delete only partner device. So, adjusted query using ``DELETE FROM mail_push_device`` instead of truncate.
below traceback will generate due to this during upgrade.
```
Traceback (most recent call last):
File "/home/odoo/bin/misc/update_module_list.py", line 25, in <module>
env["ir.module.module"].update_list()
File "<decorator-gen-87>", line 2, in update_list
File "/home/odoo/src/odoo/17.0/odoo/addons/base/models/ir_module.py", line 71, in check_and_log
log_data = (method.__name__, self.sudo().mapped('display_name'), user.login, user.id, origin)
File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1188, in __get__
raise MissingError("\n".join([
odoo.exceptions.MissingError: Record does not exist or has been deleted.
(Record: res.users(1,), User: 1)
[ERROR]::Error during the upgrade:
```
opw-5443072
upg-3712726
Forward-Port-Of: odoo/odoo#242081
Forward-Port-Of: odoo/odoo#241535This update resolves an issue where closing the event registration wizard incorrectly left products attached to sales orders. The fix ensures that when an event selection is dismissed, the associated product is also removed from the order, preventing data inconsistencies. This improves order accuracy and simplifies the sales process.
Original PR description
**Steps to produce:** - Install `Events and Sales` modules. - Go to `sale > sale order > Open any SO > Add product > Event registration`. - When the wizard opens, dismiss it by either clicking the X…
**Steps to produce:**
- Install `Events and Sales` modules.
- Go to `sale > sale order > Open any SO > Add product > Event registration`.
- When the wizard opens, dismiss it by either clicking the X button in the
top-right corner of the modal or by pressing the `Escape` key.
**Traceback:**
`TypeError: Cannot convert undefined or null to object.`
**Root cause:**
- In this [commit], the `{ dismiss: true }` option was added to the `dismiss` call.
- At [1], when `onClose` is triggered, we only check `!closeInfo || closeInfo.special`.
Since `{ dismiss: true }` does not satisfy either condition, the code falls into the `else` branch,
where `update` is called with an `undefined` value.
**Solution:**
- Now, we also check the condition `closeInfo.dismiss`.
- So, now that we have closed the selection of the event, our product is also removed from the SO line.
[commit]: https://github.com/odoo/odoo/commit/31c00161fd3a77c9fbd260754cb8c142fcb0d652
[1]https://github.com/odoo/odoo/blob/01a896557ec2bada04db60195926c6fa61375b10/addons/event_sale/static/src/js/sale_product_field.js#L40
**opw-5349732**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238061This update corrects a bug in how manual currency rates are applied within Odoo. Previously, the system wasn't consistently using the correct rates, leading to inaccurate financial reporting. This fix ensures all currency conversions are handled correctly, improving the reliability of financial data.
Original PR description
draft --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where bank account synchronization incorrectly defaulted to the default company. The fix ensures the active company context is properly passed, preventing incorrect data synchronization. This improves the reliability of bank account operations within multiple company environments.
Original PR description
This issue was caused by missing context propagation after a recent refactor: the bank account selection widget did not pass the active context to the callback, and the subsequent doActionButton call was executed without `allowed_company_ids` or `cids`. As a result, the backend environment was initialized with the default company instead of the currently active one. This commit restores the context chain by ensuring the bank account selection widget correctly forwards the context to the callback. To make this flow even safer, we now rely on the link's `company_id` when creating the journal, falling back to self.env.company only if the link has no defined company (shouldn't happen). While not ideal, this fallback provides reasonable protection as long as context propagation remains correct. Task ID: 5452455 Forward-Port-Of: odoo/enterprise#103164
This update fixes an issue where UBL XML bills were importing the contact person's name instead of the company's legal name into the vendor field. The change prioritizes the company's legal name (RegistrationName) as required by UBL standards, ensuring accurate vendor information. This improves data consistency and compliance with accounting regulations.
Original PR description
Steps To Reproduce ------------------ 1- Go to Accounting > Vendors > Bills. 2- Upload a UBL XML file containing both RegistrationName and Contact/Name (you can use one of the two attached in the…
Steps To Reproduce ------------------ 1- Go to Accounting > Vendors > Bills. 2- Upload a UBL XML file containing both RegistrationName and Contact/Name (you can use one of the two attached in the ticked). 3- Check the Vendor field. Issue ----- The vendor name is set to the contact person name instead of the company's legal name. Cause ----- In `_import_retrieve_partner_vals`, the XPath prioritizes `cac:Contact//cbc:Name` (contact person) over `cbc:RegistrationName` (company legal name). Fix --- Swap the priority to check `RegistrationName` first, falling back to `Contact/Name` only when no registration name exists. Legal/Standards Proof (OASIS UBL 2.1 Specification) according to sources: https://www.datypic.com/sc/ubl21/e-cac_PartyLegalEntity.html - cbc:RegistrationName: "The name of the party as registered with the relevant legal authority." http://www.datypic.com/sc/ubl21/e-cac_Contact.html - cac:Contact/cbc:Name: "The name of this contact. It is recommended that this be used for a functional name and not a personal name." The RegistrationName is the official legal company name, while Contact/Name is just a contact point at the company. Test ------ For the test I updated a test file so that `test_import_partner_fields` fails without these changes. opw-5392139 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242046
The point-of-sale system now correctly displays search results when users type wildcard characters (like '%') into the partner search bar. Previously, the system would load partners but not show them in the list, leading to a confusing 'x partners found' message. This update ensures that search results are always displayed, improving the user experience.
Original PR description
When the client typed `a%t%` into the search bar and pressed 'Enter', we load the partners from the backend using `getNewPartners` and showed a dialog "x partners found", however, we never show those results in the partner list since the search bar didn't support the wildcard ilike pattern. This commit adds support for searching wildcard patterns, to match the SQL behavior more or less. Clients now won't be confused by seeing "x partners loaded" and at the same time seeing an empty list. opw-5395340 Forward-Port-Of: odoo/odoo#242371 Forward-Port-Of: odoo/odoo#240541
This update fixes an issue where holiday carryover days weren't accurately calculated, leading to a discrepancy in the number of days expiring. The change ensures that accrued holiday days are correctly added before the expiration date is determined, resulting in accurate holiday accrual and reporting.
Original PR description
To reproduce: ============= - Create an accrual plan: - Carryover date: allocation - One level: - Accrues 2 days. - Accrual date: monthly on 1st of each month - Starts immediately on allocation start…
To reproduce:
=============
- Create an accrual plan:
- Carryover date: allocation
- One level:
- Accrues 2 days.
- Accrual date: monthly on 1st of each month - Starts immediately on allocation start date - Carryover policy: all days carry over - Carried over days validity: 3 months.
- Create an allocation that uses the above accrual plan on 23/09/2025:
- Starts on 01/07/2024
We should have 30 days in total with 24 expiring on 01/10/2025 but we only have 22 expiring on 01/10/2025.
Problem:
========
When `accrued_gain_time` of the accrual plan is 'start', in the `_process_accrual_plans` method, the property `expiring_days` is set when the first accrual still hasn't been added to the `number_of_days` (it is usually added at the [end of the loop](https://github.com/odoo/odoo/blob/18.0/addons/hr_holidays/models/hr_leave_allocation.py#L596)).
Solution:
=========
In the `_process_accrual_plans`, add the accrued days to the `number_of_days` before the `expiring_days` is set.
[opw-4963163](https://www.odoo.com/odoo/all-tasks/4963163)
Forward-Port-Of: odoo/odoo#241447
Forward-Port-Of: odoo/odoo#233424This update resolves an issue where links between sale orders and delivery moves were sometimes lost during the picking process. The change ensures that when a sale order is associated with a delivery, the correct delivery move information is consistently tracked. This improves the accuracy of inventory management and reporting.
Original PR description
### Steps to reproduce: - Create a picking with a move for any product #### Issue 1: > A procurement group is created and linked to the transfer - Add a second move on the picking and save #### Issue 2: > The procurement group of the picking is lost ### Cause of the issue: The `_set_sale_id` set method creates a procurment group and links it to the picking no matter if the `sale_id` is set or not. https://github.com/odoo/odoo/blob/842025976ab65e92551366def88cdd243549e5ee/addons/sale_stock/models/stock.py#L90-L93 https://github.com/odoo/odoo/blob/842025976ab65e92551366def88cdd243549e5ee/addons/sale_stock/models/stock.py#L100-L113 opw-5386424 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240426 Forward-Port-Of: odoo/odoo#239697
This update enhances the HTML Builder by automatically updating container information (like titles and buttons) when the editing element changes. This ensures a more responsive and accurate builder experience. The change also resolves a previous issue identified in PR #239235.
Original PR description
After the [refactoring of html_builder], the container's information was computed directly in the plugin. This change ensures that containers fields (title, header buttons, isDisabled, etc.) are updated automatically when the editing element changes, using dom state. This change also fixes an issue addressed in PR #239235. [refactoring of html_builder]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 Related to task 5391316.
This update corrects a discrepancy in the calculation of Belgian withholding taxes within the Odoo Enterprise system. The changes ensure that tax rates and regulations up to 2026 are accurately reflected, improving payroll accuracy for businesses operating in Belgium. This is a critical fix to maintain compliance with Belgian tax laws.
Original PR description
TaskID: 5403525 Forward-Port-Of: odoo/enterprise#103271 Forward-Port-Of: odoo/enterprise#103215