Friday, January 16, 2026
24 changes · saas-19.1
New functionality added to Odoo
This update introduces a new feature to the Finnish l10n reports, specifically the EC Sales List and Tax reports. It now provides customers with clear return deadlines and allows them to verify report accuracy before submission, improving reporting compliance and reducing potential errors.
Original PR description
The aim of this commit is adding returns for EC Sales List report and the Tax report. These returns allow customers to know when they have to report both reports and help them to check that every value are correctly set before sending the report. task-4893984 Forward-Port-Of: odoo/enterprise#100572
Enhancements to existing features
This update enables public users to access documents via a link without needing to create a standard user account. Previously, inviting a public user would force them to register, creating a separate user. Now, the public user's registration is linked to the document access, streamlining the sharing process and improving usability.
Original PR description
Purpose ======= We can share a document to a partner without a user, and with `access_via_link == 'none'`. In that situation, the partner is forced to create a user, but if he clicks on signup, then the new user won't be linked to the partner set on the `documents.access` (a new partner will be created). Now, when inviting a member, if he doesn't have a user, we invite him to create a user. If the partner has a user, then we just redirect him to the login page. Task-5242208 Forward-Port-Of: odoo/enterprise#104374 Forward-Port-Of: odoo/enterprise#100628
Resolved issues and error corrections
This update resolves a problem that prevented the tax module from loading correctly during database upgrades. The fix disables tracking computations during the module's loading process, preventing errors that were causing delays and failures. This ensures smoother database upgrades and avoids disruptions to the system.
Original PR description
During database upgrades to v19, the overridden `_load` method in l10n_br_avatax writes `l10n_br_avatax_code` on `account.tax` records. ```py…
During database upgrades to v19, the overridden `_load` method in l10n_br_avatax writes `l10n_br_avatax_code` on `account.tax` records.
```py
/home/odoo/src/odoo/19.0/addons/l10n_br/migrations/1.1/end-migrate-update_taxes.py(8)migrate()
-> env['account.chart.template'].try_loading('br', company)
/home/odoo/src/odoo/19.0/addons/account/models/chart_template.py(170)try_loading()
-> return self._load(template_code, company, install_demo, force_create)
/home/odoo/src/enterprise/19.0/l10n_br_avatax/models/account_chart_template.py(12)_load()
-> self._l10n_br_init_avatax_code(company)
/home/odoo/src/enterprise/19.0/l10n_br_avatax/models/account_chart_template.py(324)_l10n_br_init_avatax_code()
-> tax.l10n_br_avatax_code = tax_data['l10n_br_avatax_code']
```
Because tracking was not disabled, this write triggered `mail.thread` tracking computation during module loading, leading to failures while finalizing tracking messages.
```py
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 576, in _track_finalize
tracking = records.with_context(context)._message_track(fnames, initial_values)
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 697, in _message_track
record._message_log(
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 477, in _message_log
self._message_log_repartition_lines(tracked_value_id[2]['old_value_char'], tracked_value_id[2]['new_value_char'])
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in _message_log_repartition_lines
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in <listcomp>
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
KeyError: 'Porcentagem fatorial'
```
This occurs due to the interaction between:
- the `_load` override introduced in odoo/enterprise@eeaea338c1c6b9540a89be8003dadbe651de881e
- the new `try_loading` flow added in odoo/odoo@9d965abb992d558ea4235ef5f87a7654c6f1ceae
The resulting tracking computation crashes with a KeyError when processing repartition line diffs.
Fix: ensure `_load` runs with `tracking_disable=True`, as expected by the standard `_load` execution context, preventing tracking logic from running during module loading.
opw-5467986
upg-3753990
tbg-2380
Forward-Port-Of: odoo/enterprise#103931This update simplifies the process of setting up Peppol integration within Odoo. The old wizard has been replaced with a more user-friendly interface, including a radio selection for registration type and a dedicated field for the Peppol contact email. This change streamlines the configuration and improves the overall user experience.
Original PR description
In this commit: - Deprecate the Peppol configuration wizard. - Move the Peppol contact email field to Settings. - Replace the wizard button with a radio selection for the Peppol registration type. - Simplify the overall Peppol settings user experience. Task-5438539 Co-authored: [Soham Zadafiya (soza)](soza@odoo.com) Forward-Port-Of: odoo/odoo#243985
This update resolves two issues impacting the website editor. First, it fixes blurry countdown canvases and text when zooming, ensuring sharp visuals at any scale. Second, it prevents text overlap with icons, particularly when using the Unsplash photo option, improving the overall user interface.
Original PR description
## [FIX] website: prevent blurry countdown canvas and text on zoom [Commit 1] Steps to reproduce: - Go to Website -> Edit Mode - Add a Countdown snippet (size: "Small") - Save and zoom in/out, the…
## [FIX] website: prevent blurry countdown canvas and text on zoom [Commit 1] Steps to reproduce: - Go to Website -> Edit Mode - Add a Countdown snippet (size: "Small") - Save and zoom in/out, the countdown canvas and text appears blurry The countdown was rendered at a low resolution, which caused it to blur when zooming. This fix updates the canvas to draw at the proper resolution so the countdown remains sharp at any zoom level. ## [FIX] web_editor: prevent text overlap with icon [Commit 2] Steps to reproduce: - Go to Website -> Edit Mode - Add a Image snippet - Enter a long text in search bar: Issue: 1. Text overlaps with search icon. 2. Selecting the "Photos (via Unsplash)" option causes the text to overlap the dropdown icon. The fix adjusts the end padding to provide sufficient spacing between the text and the icons. task-[4771268](https://www.odoo.com/odoo/project/974/tasks/4771268) Forward-Port-Of: odoo/odoo#242814 Forward-Port-Of: odoo/odoo#213373
This update fixes formatting issues in live chat ticket descriptions created by the chatbot. Previously, system notifications were included, making tickets difficult to read. Now, only relevant chat messages are used, ensuring clearer and more organized ticket descriptions for support agents.
Original PR description
In [1], chat bot's create lead/ticket steps were improved to set the formatted discussion as the lead/ticket description. The same holds for lead/ticket commands. However, the /ticket command was not properly updated. As a result, the discussion is poorly formatted, making it difficult to read. Also, the description should only include relevant messages, not system notifications such as "agent joined the channel". This commit fixes both issues. task-5491212 community: https://github.com/odoo/odoo/pull/243856 Forward-Port-Of: odoo/enterprise#104336
This update fixes an issue where payment advice reports (PDF and XLSX) were incorrectly displaying only the first bank account when employees had multiple salary distributions. The fix ensures that all bank accounts with salary splits are accurately reflected in the payment advice, providing correct financial reporting.
Original PR description
Issue: When an employee had multiple bank accounts with salary distribution, the payment advice (PDF and XLSX) was displaying only the first bank account and assigning the full salary amount to that account. This resulted in incorrect payment information being generated. Fix: When multiple bank accounts are configured with salary distribution, the payment advice now displays the correct information in both PDF and XLSX reports. task-5390429 Forward-Port-Of: odoo/enterprise#101818
This update resolves an issue where overtime work entries were incorrectly generated, even when overtime rules were disabled. It also fixed a bug where regenerating work entries caused shifts in attendance hours across consecutive days. The fix ensures accurate overtime calculations and consistent results during payroll regeneration.
Original PR description
# Bug 1: ## Steps to reproduce: - Create an overtime ruleset and add rules. - Disable "Pay extra hours" on all rules in the ruleset. - Assign this ruleset to an employee. - Create an attendance that…
# Bug 1: ## Steps to reproduce: - Create an overtime ruleset and add rules. - Disable "Pay extra hours" on all rules in the ruleset. - Assign this ruleset to an employee. - Create an attendance that normally generates overtime. - Navigate to the work entries in payroll. - Overtime work entries are created! This fix will skip generating work entries when their will be no `paid` rules in a ruleset. # Bug 2: ## Steps to reproduce: - Create attendances with overtime for multiple consecutive days. - Navigate to Work Entries in Payroll. - Click on Reset->"Regenerate Work Entries” on the same period for bulk regeneration. - Observe that attendance and overtime hours are shifted between days. ### Fix: In `_get_overtime_intervals`, the overtime list was recreated inside the per-day loop, causing previously computed overtime intervals to be lost when multiple days were involved. Overtime intervals are now accumulated per resource across all days in the requested range before building the final Intervals. task - [5189151](https://www.odoo.com/odoo/project/1251/tasks/5189151) Forward-Port-Of: odoo/enterprise#103028
This update resolves a validation error that occurred when creating partial backorders within wave transfers. The issue stemmed from the system incorrectly processing ongoing batches, leading to validation failures. This change ensures that the system accurately handles backorder creation and prevents these errors.
Original PR description
## How to reproduce: - Enable Wave transfert in setting - Go to the Receipt Operation type: - Create Backorder: always - Automatic Batches: Enabled - Wave Grouping: Products - Create and confirm…
## How to reproduce:
- Enable Wave transfert in setting
- Go to the Receipt Operation type:
- Create Backorder: always
- Automatic Batches: Enabled
- Wave Grouping: Products
- Create and confirm (don't validate) 2 Receipts for 10 units of a storable product P
- The 2 receipt should have been added to a new wave transfer with 2 lines for P
- On the first line, set the quantity to 0
- On the second line, set the quantity to 1
- Try to validate the wave transfer ==>> UserError "The following transfers cannot be added to batch transfer WAVE/XXXX. Please check their states and operation types."
## Issue:
Backorders are generated before the current batch is marked 'done' (it waits for empty pickings to be detached). The auto-batch logic incorrectly identifies the current 'in_progress' batch as a candidate for the new backorders, attempting a merge that violates validation constraints.
## Solution:
Exclude the current wave/batch from the auto_wave search domain using a context variable passed during validation.
OPW-5413921
---
Test result before fix:
```
2026-01-13 10:37:26,541 27952 INFO oes_test_18.0 odoo.addons.stock_picking_batch.tests.test_auto_waving: Starting TestAutoWaving.test_auto_wave_skip_current_batch ...
2026-01-13 10:37:26,820 27952 INFO oes_test_18.0 odoo.addons.stock_picking_batch.tests.test_auto_waving: ======================================================================
2026-01-13 10:37:26,820 27952 ERROR oes_test_18.0 odoo.addons.stock_picking_batch.tests.test_auto_waving: ERROR: TestAutoWaving.test_auto_wave_skip_current_batch
Traceback (most recent call last):
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/tests/test_auto_waving.py", line 440, in test_auto_wave_skip_current_batch
wave.action_done()
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking_batch.py", line 264, in action_done
return pickings.with_context(**context).button_validate()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking.py", line 145, in button_validate
res = super().button_validate()
^^^^^^^^^^^^^^^^^^^^^^^^^
...
File "/home/odoo/Odoo/src/18.0/odoo/odoo/fields.py", line 1418, in __set__
records.write({self.name: write_value})
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking.py", line 112, in write
self.batch_id._sanity_check()
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking_batch.py", line 323, in _sanity_check
raise UserError(_(
odoo.exceptions.UserError: The following transfers cannot be added to batch transfer WAVE/00012. Please check their states and operation types.
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#243873
Forward-Port-Of: odoo/odoo#243519This update provides users with more detailed error messages when sending documents to HMRC, including the specific error code and message returned by the system. This change simplifies troubleshooting and reduces the need for support, leading to faster issue resolution.
Original PR description
Currently, when an error occurs while sending a document to HMRC, the user only receives a generic error message. This change enhances the error feedback by including the error code and message returned by HMRC, giving the user clearer insight into the cause of the failure. This helps users identify issues more easily and reduces unnecessary support requests. Forward-Port-Of: odoo/enterprise#104407
This update fixes a problem where users received unclear error messages when cash point closing with Fiskaly failed. The change now displays the full response from Fiskaly, providing more detailed information to help users quickly diagnose and resolve the issue. This improves the user experience and reduces troubleshooting time.
Original PR description
When a cash point closing fails with Fiskaly, the error message shown to the user was not very informative. This commit enhances the error message to include the actual response from Fiskaly, making it easier for users to understand what went wrong. opw-5461084 Forward-Port-Of: odoo/enterprise#103358
A recent update caused a crash when users clicked on boxes within X2many fields. This was due to a change in how click events were handled, leading to the system expecting the field to be in edit mode when it wasn't. This fix ensures stability and prevents the crash.
Original PR description
Since commit odoo/odoo@37d78a4, a crash would occur when clicking on a box while a field of a x2many field was focused.
The commit mentionned above changed the order in which the click event handlers are called because of the addition of `{ capture: true }` on the list renderer click listener.
Before, the propagation of the click event was stopped at the box layer level, preventing it to reach the global listener of the list renderer and thus keeping it in edit mode.
After, the click listener of the list renderer is executed first, which means we leave the edit mode before executing the click listener of the manual correction component. This causes a crash as the list renderer is expected to be in edit mode to be able to fill in the value.
task-noneThis update fixes a previous issue in the product configurator where prices weren't accurately reflecting selected options or the current order's details. Now, the configurator displays the correct price based on chosen attributes and the order's pricelist and fiscal position, reducing user confusion and ensuring accurate pricing.
Original PR description
Before this commit, product configurator popup did not consider selected attributes, and pricelist or fiscal position of the current order when displaying the price of the product being configured. This could lead to confusion for the user. opw-5472946 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242533
This update fixes an issue where loyalty points weren't being calculated correctly after discounts were applied in the point-of-sale system. The change ensures that loyalty rewards are accurately reflected in the customer's balance, regardless of discount usage. This improves the customer experience and data accuracy.
Original PR description
Step To Reproduce: - create a loyalty of type "loyalty card", that grants 1 point per $ spent - configure pos for global discounts - start pos, select a product (say price_with tax is 100) - select a…
Step To Reproduce: - create a loyalty of type "loyalty card", that grants 1 point per $ spent - configure pos for global discounts - start pos, select a product (say price_with tax is 100) - select a customer - apply a discount of 10%, price should be 90 refer image <img width="1367" height="687" alt="image" src="https://github.com/user-attachments/assets/37709299-b377-4eee-95af-e857b19c7671" /> Observation: - the loyalty gained stays 100, even after we applied discount, it should be 90 <img width="257" height="587" alt="pos loyalty issue" src="https://github.com/user-attachments/assets/772821c2-dc06-4dfc-8d4c-ab00de209ce8" /> Cause: - the recent commit [1], `applyDiscount` uses `addLineToOrder`, which bypasses `addLineToCurrentOrder`. - This skips `updateRewards` and other module-level extensions defined on `addLineToCurrentOrder` [1] https://github.com/odoo/odoo/commit/b63c7c28cfe6d59888982d58b8e9d99ea62281f4 https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/pos_loyalty/static/src/app/services/pos_store.js#L439-L448 Fix: - Replace `addLineToOrder` with `addLineToCurrentOrder` to ensure rewards and programs are properly updated opw-5437844 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242740
This update resolves an issue where refreshing AI embeddings triggered unnecessary cron jobs. It also includes error handling to prevent embedding failures from disrupting the entire process, ensuring smoother AI performance for users. This change improves reliability and efficiency of the AI embedding feature.
Original PR description
Avoid triggering multiple embedding cron jobs when the refresh button is clicked, since the cron is automatically triggered while new chunks still need to be processed. Also catch AttributeError exceptions when calling the embedding service and mark the affected chunk as failed instead of crashing the whole embedding flow. task-id-5498693 Forward-Port-Of: odoo/enterprise#104414
This update speeds up product searches within Point of Sale by optimizing how products are filtered and sorted. Previously, the search process was slow due to redundant calculations. This change streamlines the search, resulting in a faster and more responsive user experience, especially when dealing with a large number of products.
Original PR description
Previously, the product search performed normalization inside the filter and sort loops. Because sort algorithms perform O(n log n) comparisons, the `normalize` function was called redundantly thousands of times for the same product, leading to UI lag when handling large products. This commit optimizes the search by: - Moving normalization to the model getters - Flattening the template search string to include all variants, removing the need for nested `.some()` loops during filtering. - Replacing `localeCompare` with primitive string comparison for faster sorting. opw-5448113 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241668
This update resolves an issue where imported sales orders containing kit products (with tracked components) were incorrectly splitting the order into multiple lots during the POS process. This commit ensures that kits are no longer tracked by lots when sold, preventing errors and improving the reliability of POS sales transactions. This change was made to address a bug impacting order accuracy.
Original PR description
When a kit product with tracked components is sold, and if the kit is tracked by lots, the imported sale order lines were being split by lots causing issues in the POS session. Although kits are not supposed to be tracked by lots, this commit prevents the splitting of sale order lines by lots when the product is a kit. opw-5423833 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242785
This update ensures that payment terminal responses sent via websocket include a necessary 'session_id' field. This resolves an issue that could have caused communication problems between the payment terminal and the Odoo system, improving the reliability of payment processing.
Original PR description
We provide the request data to the payment terminal response to ensure `session_id` exists in the response sent through websocket.
This update enhances the customer display popup in Point of Sale, making it easier to access customer information on both desktop and mobile devices. Previously, the popup opened in a separate window, which was difficult to use on a second device. Now, users will see a button to open the display on the same device or scan the QR code, streamlining the customer interaction process.
Original PR description
Changed to open the QR code popup on the desktop as well. Before it was opening directly in a new window and it was hard to open it on a separate device. The QR popup will: - on desktop: will show a button to open the customer display on the same device, or to scan the qr - on mobile: will show only the qr code to scan task-5129241 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243521 Forward-Port-Of: odoo/odoo#229478
This update fixes a previous change that prevented automatic follower copying from parent sale orders to subscription renewals and upsells. This ensures that sales teams automatically receive notifications for related subscription activity, improving collaboration and communication. The change maintains the previous restriction for other Odoo record types.
Original PR description
[FIX] sale-subscription: Restore automatic follower copying from parent SO In Odoo 18.2 (Task 4655022), automatic follower addition was removed for all users and limited to internal users. However, for subscriptions, it is logical to automatically copy followers from the parent sale order to renewal and upsell orders. This commit restores that behavior for subscription renewals and upsells while keeping the restriction for other record types. task - 5002181 Forward-Port-Of: odoo/enterprise#101088
This update fixes an issue where sale warnings weren't showing when set on a company contact instead of an individual partner. The change ensures that all sale warnings, regardless of whether they're linked to a partner or their company, are now correctly displayed. This improves the accuracy of sales alerts and helps sales teams address potential issues proactively.
Original PR description
### Issue: Due to this issue, the sale warning message is only shown when the warning message is set on partner itself, not partner's company. #### Steps to reproduce (with demo data): 1- Enable `Sale warnings` from setting. 2- On `Contacts` app, open `Azure Interior`, and add a sale warning from `Notes` tab. 3- Create a SO with `Brandon Freeman` from `Azure Interior` as the customer. 4- No sale warning is shown. ### Cause: The IMP #192211 replaces warning popup with a message. However, it doesn't check for the warning from `partner_id.parent_id`, which was the case before that PR. This is the case with purchase as well. opw-5404983 Forward-Port-Of: odoo/odoo#242050
This update enhances the reliability of website generation by ensuring that customized images are correctly updated and by optimizing database operations. The changes address a previous issue where images weren't being replaced properly and reduce the number of database queries, leading to faster and more stable website updates.
Original PR description
Added commit_progress during website generation, this is now required due to the reduction of the timeout delay of crons as well as to ensure robustness. Fixed bug where the customized images where not replaced correctly. It happens because we were copying the original instead of fetching the modified one. Switch to record operations in batch to reduce number of queries.
This update fixes a potential issue where Odoo installations didn't consistently create foreign key relationships in the database. This resulted in 'Record missing' errors appearing later, often after weeks or months, due to inconsistencies. Merging this change will guarantee that Odoo installs with properly configured foreign keys, improving database stability and preventing these unexpected errors.
Original PR description
---- Description of the issue/feature this PR addresses: See related OPW Ticket [opw-5495025](https://www.odoo.com/my/tasks/5495025) Current behavior before PR: Odoo seems to install correctly, and works normally. However the database consistency is not ensured. Foreign Keys are not created. User receives `Record missing` errors after some time, when there was a Contact deleted, for example. Issue is dangerous, because it can be latent and be undetected for weeks or months. Desired behavior after PR is merged: Odoo installs *with* the Foreign Keys, and works normally. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr --- Ticket opw-5495025 Forward-Port-Of: odoo/odoo#243833
This update resolves a problem where Odoo invoices exported to the SII system (Chile) were being rejected due to incorrect decimal formatting. The fix ensures the `<TotClauVenta>` tag always uses a maximum of two decimal places, aligning with SII requirements and preventing validation errors. This ensures accurate export invoices and avoids potential disruptions to the export process.
Original PR description
Before this PR: Everything works fine, but if the user change the decimal precision for foreign currency (i.e. USD, usually needed for export invoices, for example to three decimals), the SII system…
Before this PR: Everything works fine, but if the user change the decimal precision for foreign currency (i.e. USD, usually needed for export invoices, for example to three decimals), the SII system rejects the invoice. The rejectment cause is cryptic, and difficult to undertand, since it says: That is expecting a `<Documento>` tag, while this tag is not used in Exports invoices (the correct tag is `<Exportaciones>`. The real cause of the error is that if the `<TotClauVenta>` tag has more than 2 decimals is ignored, and if it is ignored, the SII system assumes that the invoice is not an export invoice, and that's why an incorrect tag is expected by the validator. After this PR: We simply forced the decimals of the tag `<TotClauVenta>`to 2. This definitely solves the issue. Source: https://www.sii.cl/factura_electronica/formato_dte.pdf Capture of this portion of the normative: <img width="626" height="118" alt="Captura de pantalla 2026-01-07 a la(s) 18 21 06" src="https://github.com/user-attachments/assets/3b9ec8f0-d343-4819-8589-67afeeeba807" /> Forward-Port-Of: odoo/enterprise#103600