Daily updates from Odoo
Tuesday, January 27, 2026
8 changes · 17.0
Enhancements to existing features
This update enhances the system administrator panel by allowing multiple, customizable notifications with varying alert levels. The system now supports a flexible JSON format for messages, providing greater control over important server updates and maintenance alerts. This improves communication and ensures critical information is clearly displayed.
Original PR description
Tweak #102239 to allow more flexibility and display multiple messages with different alert level.
The ir.config_parameter is sysadmin.message and should be a json loadable. The format shoud be something like this:
{
"replace": false,
"warning_type": "user",
"message": "<div class='alert alert-info'>A maintenance operation is planned on your server on <strong>2026-01-15</strong> between 14h and 15h</div>"
}
Forward-Port-Of: odoo/enterprise#105157Resolved issues and error corrections
This update fixes an issue where the 'Average hours per day' calculation in employee scheduling was inaccurate. The fix ensures that all attendance records are considered when determining daily hours, providing a more reliable and consistent view of employee time. This change improves the accuracy of scheduling and reporting.
Original PR description
Steps to reproduce: ------------------- 1. Install hr_employee 2. Open Working Schedules and select any record 3. Enable the Start Date or End Date optional column 4. Set a start or end date on one…
Steps to reproduce: ------------------- 1. Install hr_employee 2. Open Working Schedules and select any record 3. Enable the Start Date or End Date optional column 4. Set a start or end date on one of the working hours Issue: ------ The "Average hours per day" value changes unexpectedly after setting a start or end date on an attendance line. Cause: ------ The `_compute_hours_per_day` method relies on `_get_global_attendances`, which excludes attendances having `date_from` or `date_to`. https://github.com/odoo/odoo/blob/67e4cd087de179a7b06c23321cfc4e6d5aa2a9dd/addons/resource/models/resource_calendar.py#L165-L169 Solution: --------- Compute the `hours_per_day` independently of attendance `date_from` or `date_to` by including all attendances in the computation, ensuring a consistent and correct value. **NOTE:** The `date_from` and `date_to` fields are removed from version 19.0. related commit: 77f860f opw-5417724 --- 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 copy-to-clipboard feature in Odoo 17 was misconfigured, leading to incorrect text copying. By updating the widget's configuration, the feature now correctly uses the intended copy text and aligns with how it's used in project sharing, improving usability.
Original PR description
**Description of the issue/feature this PR addresses:** The `CopyClipboardField` widget previously relied on the `string` attribute inside `attributes` to determine the text of copy button. In Odoo…
**Description of the issue/feature this PR addresses:** The `CopyClipboardField` widget previously relied on the `string` attribute inside `attributes` to determine the text of copy button. In Odoo 17+, the `string` attribute is no longer inside `attributes` but defined outside, causing the widget to break. Additionally, using `string` for copy text caused confusion between the field label and the text to copy (`copyText`). The correct approach is to use widget options for defining `copyText`, as intended in the project share link. In the Payment Wizard button, the widget was inherited and `extractProps` was overridden to handle the `string` attribute manually, which is no longer necessary with the new approach. **Current behavior before PR:** - `CopyClipboardField.extractProps` reads the removed `string` attribute from `attributes`. - The copy text could be confused with the field label (`string`). - Project share link usage fails to read copy text correctly because the widget does not read options. - `PaymentWizardCopyClipboardButtonField` overrides `extractProps` unnecessarily to fix copy text handling. **Desired behavior after PR is merged:** - `CopyClipboardField` reads `copyText` from widget options, no longer relying on the removed `string` attribute. - Copy text is clearly separated from field labels. - Project share link now works correctly using the new `copyText` option. - `PaymentWizardCopyClipboardButtonField` no longer needs to override `extractProps` and copy text is set directly in field options --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where AvaTax was failing due to orders lacking at least one line item. Specifically, it filters out orders without lines to prevent errors that blocked key business flows, such as invoice generation. This ensures AvaTax data is always accurate and reliable.
Original PR description
Backport of https://github.com/odoo/enterprise/pull/101643. Original commit message for completeness: Calling Avatax without lines results in an error and blocks flows: ``` Odoo could not fetch the…
Backport of https://github.com/odoo/enterprise/pull/101643. Original commit message for completeness: Calling Avatax without lines results in an error and blocks flows: ``` Odoo could not fetch the taxes related to MXXX - SOXXX/XXX. Please check the status of `Sales Order XXX` in the AvaTax portal. Transactions must have at least one line. ``` There are various cases this can happen: 1/ if industry_fsm_stock is installed, empty orders are confirmed [1], 2/ if you put the end_date of a subscription before the next_invoice_date, then none of the lines are considered invoiceable [2] and you get the error when viewing the subscription in the portal This commit filters out orders without lines. It's also possible to filter this on the level of the models by doing it in _get_and_set_external_taxes_on_eligible_records(). However, this means doing it separately for each model, and requires every implementer do it manually. [1] https://github.com/odoo/enterprise/blob/703e7fd413e93a8287da98286aa93b9699ae3e96/industry_fsm_stock/models/project_task.py#L159 [2] https://github.com/odoo/enterprise/blob/c7bf4367a9bf6757a36a9f34a872a6e35a19a3a5/sale_subscription/models/sale_order_line.py#L475 opw-5214609 opw-5247727 opw-5311132 opw-5385960
This update resolves an issue where customer claims weren't being processed correctly when multiple invoices sharing the same VAT number were involved. Specifically, the system was limiting searches to a single partner per VAT number, causing it to miss account moves linked to child invoices. This ensures accurate claim processing and updates.
Original PR description
When we process new customer claims, we need to search for the corresponding account moves in order to update their `l10n_cl_dte_acceptation_status`. Currently, we only expect 1 partner per VAT number when searching for a partner to match with the account move. However, this is not always true. For instance, a child invoice contact will share the same VAT number than the parent partner. This can lead to the selection of the wrong partner in the search domain and consequently, the account move not being found. Related ticket: opw-5257481
This update corrects a bug in the Point of Sale (PoS) refund invoicing process. Previously, refund invoices incorrectly showed payment statuses as 'reversed' instead of 'paid'. This change ensures accurate payment tracking for refunded transactions, improving financial reporting and reconciliation.
Original PR description
When invoicing a refund in the PoS the payment status would be 'reversed' when it should be 'paid' Steps to reproduce: ------------------- * Open PoS and make a sale * Refund the order and invoice it when processing the payment * Go to the backend and check the invoice status > Observation: The payment status is 'Reversed' Why the fix: ------------ When computing the payment status of an invoice we check if there are any payment linked to it. In the normal flow of an invoice we look for 'account.payment' records linked to the invoice. However in the PoS we create 'pos.payment' records linked to the invoice instead. opw-5080947
This update ensures that when a user confirms an upsell on a subscription, all remaining alternative quotations are automatically cancelled. Previously, only the confirmed upsell was processed, leaving other upsells in a pending state. This improves the subscription management process and prevents unnecessary orders.
Original PR description
Currently, when creating multiple upsells for a specific subscription, confirming one of them leaves the others in the sent state instead of cancelling them. This fix ensures that all other upsells for the same subscription are cancelled once one upsell is confirmed. task-5270139
This update resolves a memory issue that occurred when exporting large financial reports (FEC) from Odoo. By streaming the export data instead of loading the entire file into memory, the system now handles large databases more efficiently, preventing errors and improving performance.
Original PR description
On large databases (millions of account moves), The FEC exported file can be huge. This resulted in memory error since at some point we have the entire file in memory. This commit aims to overcome this issue by streaming the content of the file to the user. task-5404142 Forward-Port-Of: odoo/odoo#240981