Wednesday, January 28, 2026
18 changes · 19.0
Resolved issues and error corrections
Chile-specific invoices now require document numbers to contain only digits. This prevents confirmation errors when users enter formats such as numbers with hyphens and helps keep electronic tax documents compliant with Chilean requirements.
Original PR description
An error currently occurs when a user tries to confirm an account move using a document number that isn’t purely numeric and contains ASCII characters other than digits. Steps to replicate: - Install…
An error currently occurs when a user tries to confirm an account move using a document number that isn’t purely numeric and contains ASCII characters other than digits.
Steps to replicate:
- Install `l10n_cl` with demo and switch to CL company.
- Create a new invoice and add customer as `Andes Innovación SpA`.
- Add a move line > Add a product, price and tax.
- Give Document Number as `11-11`.
- Save and Confirm.
Error:
```
File /home/odoo/odoo18/enterprise/account_accountant/models/account_move.py, line 119, in action_post
res = super().action_post()
File /home/odoo/odoo18/community/addons/account/models/account_move.py, line 5478, in action_post
self._post(soft=False)
File /home/odoo/odoo18/enterprise/l10n_cl_edi/models/account_move.py, line 161, in _post
move._l10n_cl_create_dte()
File /home/odoo/odoo18/enterprise/l10n_cl_edi/models/account_move.py, line 646, in _l10n_cl_create_dte
folio = int(self.l10n_latam_document_number)
ValueError: invalid literal for int() with base 10: '11-11'
```
Cause:
- Trying to convert the document number to integer which includes some characters that are not numeric causes the error.
Solution:
- Specifically for Chile, the document number (folio) cant include anything other than numbers (Check the Sources listed below).
- Added a constraint on the field `l10n_latam_document_number` which only allows numbers using regex.
Sources:
- https://www.sii.cl/pagina/clave/folio.htm : The official Internal Revenue Service website for Chile provides information on the standard folio, along with a sample.
- https://www.sii.cl/factura_electronica/formato_dte.pdf : Refer to PG:11, Sr No:3, which specifies that the Folio should be of type NUM, meaning it must contain only numeric characters.
- The folio is created [here] that will be sent later to the authorities in the form of xml.
[here]: https://github.com/odoo/enterprise/blob/5a8bdb586e2d0bf9948a2d0b4c5e30b3849c0414/l10n_cl_edi/template/dte_template.xml#L8
No ID
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241505Sale orders using the DIN 5008 layout now show the Delivery Date in both printed reports and customer previews. This ensures customers and staff see the same important delivery information across documents.
Original PR description
**Steps to reproduce:** 1. Install modules `sale_management` and `l10n_din5008_sale` 2. Go to Settings, Configure Document Layout and set layout to DIN 5008 3. Create a new Sale Order 4. Set a…
**Steps to reproduce:** 1. Install modules `sale_management` and `l10n_din5008_sale` 2. Go to Settings, Configure Document Layout and set layout to DIN 5008 3. Create a new Sale Order 4. Set a customer, add a product, and fill in the Delivery Date (Other Info) 5. Click on Print and Preview **Issue:** The Delivery Date (commitment_date) is not displayed on: - The DIN 5008 sale order report - The sale order preview (portal view) Functional experts confirmed that the Delivery Date must be visible when using the DIN 5008 layout. **Cause:** The `commitment_date` field was not included in the DIN 5008 sale order report template nor in the preview view. **Solution:** This commit adds the Delivery Date information to: - The DIN 5008 sale order report template - The sale order portal/preview view **opw-5490651** **Before:** <img width="560" height="145" alt="image" src="https://github.com/user-attachments/assets/fb29cda1-d668-4682-aa04-12c613f248d8" /> <img width="861" height="268" alt="image" src="https://github.com/user-attachments/assets/615f259f-e0ff-4fb5-9852-1fdd75cda4c9" /> **After:** <img width="589" height="145" alt="image" src="https://github.com/user-attachments/assets/3f1a8d25-783a-4600-b07e-11b547bb326b" /> <img width="824" height="271" alt="image" src="https://github.com/user-attachments/assets/46b37469-5c72-4556-95e2-eaea0824c166" /> Forward-Port-Of: odoo/odoo#244917
The Payments list filter for items that have not been sent has been corrected. This helps accounting users quickly find pending customer and vendor payments without seeing empty or misleading results.
Original PR description
The "Not Sent" filter in Payments list view was not returning the expected records. This was due to an incorrect domain condition in the search view. This commit updates the filter logic to properly…
The "Not Sent" filter in Payments list view was not returning the expected records. This was due to an incorrect domain condition in the search view. This commit updates the filter logic to properly identify payments that haven't been processed or sent, ensuring the filter displays the correct records to the user. **Description of the issue/feature this PR addresses:** This PR fixes a bug in the "Not Sent" search filter within the Payment views (Account Payments). Currently, the filter fails to accurately identify and display records that have not been sent, leading to an empty or incorrect list of results regardless of the sending payment's actual status. **Current behavior before PR:** When a user applies the "Not Sent" filter in the Payments list view (including both Customer and Vendor payments), the system returns incorrect records or no records at all. This is caused by an inconsistent domain definition that doesn't align with the internal field tracking the "sent" status of the payment. **Desired behavior after PR is merged:** The "Not Sent" filter will correctly filter the list to show only those payments where the "Sent" status is not True. This will provide users with an accurate view of pending actions for both Customer and Vendor payments, ensuring consistency across the accounting module. **Steps to reproduce:** 1. Navigate to the Accounting (or Invoicing) module. 2. Go to Vendors > Payments or Customers > Payments (the issue is global). 3. Ensure there are several payments in the list, some marked as "Sent" and others not yet sent. 4. Click on the Filters dropdown menu in the search bar. 5. Select the "Not Sent" filter. 6. Observe the results: Notice that the list either becomes empty or continues to show records that do not match the "Not Sent" criteria, failing to filter the data correctly. **video** https://drive.google.com/file/d/1NTKQ1tHWyZWfs3CPolfDTOMrqaDD9OcN/view --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245487
Saved carousel snippets now display at their natural height in the snippet selection dialog instead of being cut off by a fixed preview size. This helps website editors see an accurate preview before reusing custom carousel content.
Original PR description
Steps to reproduce: - Drag and drop a Carousel. - Add content to the first slide of the carousel to make the snippet taller. - Save the snippet as a custom snippet. - Open the snippet dialog. - Issue: The height of the preview for the saved snippet is forced to 550px, causing the snippet to be truncated. After this commit, the height is no longer forced; it now adapts to the snippet content. task-5156137 Forward-Port-Of: odoo/odoo#244251
This update fixes how purchase stock accounting handles foreign-currency price differences after changes to stock valuation flows. It also reorganizes and re-enables valuation tests, helping reduce the risk of accounting regressions in purchasing and inventory processes.
Original PR description
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
Website editors can now change or remove background colors for content placed inside tab sections. This fixes an inconsistent editing experience and helps users adjust page designs without workarounds.
Original PR description
Before this commit, it was not possible to edit the background color of a snippet dropped within the s_tabs snippet. The user could set the background image / video, but not the color. The user could work around the limitation by setting the background color of a snippet, saving it, then dropping it within the s_tabs snippet. Therefore, it made no sense to disable the background color option. Moreover, adding the background color option fixes the reverse issue: if the user dropped a snippet with a background color set by default, they cannot remove it since the colorpicker was not available.
The manufacturing product catalog test flow now waits for filtering and quantity updates to finish before continuing. This prevents intermittent failures where a component quantity could be recorded incorrectly during automated checks, improving release stability without changing user-facing behavior.
Original PR description
Error message ----- ``` FAIL: TestTourMrpOrder.test_mrp_multi_step_product_catalog_component_transfer Traceback (most recent call last): File "/data/build/odoo/addons/mrp/tests/test_order.py", line…
Error message
-----
```
FAIL: TestTourMrpOrder.test_mrp_multi_step_product_catalog_component_transfer
Traceback (most recent call last):
File "/data/build/odoo/addons/mrp/tests/test_order.py", line 5433, in test_mrp_multi_step_product_catalog_component_transfer
self.assertEqual(component_transfer.product_uom_qty, 2)
AssertionError: 1.0 != 2
```
Cause
-----
It looks like somehow one of the 2 clicks on the product is either not registered, or the update of the POL's quantity isn't triggered / doesn't happen fast enough, so the tour ends with a quantity of 1 for the product. I see 2 possible causes for this:
1. The product is visible in the initial view. So when the view updates (because of the filtering step), the next step - clicking on the product - the clicks can already be triggered, which might lead to an inconsistent state.
2. There is some synchronicity issue with the quantity update's debounce
https://github.com/odoo/odoo/blob/11292070870ef22663364eda5a4b243dea68856a/addons/product/static/src/product_catalog/kanban_record.js#L16-L18
Solution
-----
Add extra steps to wait for filtering to be applied. Also add extra steps to ensure correct update of the POL's quantity.
-----
Runbot error 237956
Forward-Port-Of: odoo/odoo#243974Repair orders can now have draft part lines without a selected product when the scheduled date is changed. This prevents an error that interrupted users while planning or updating repair work.
Original PR description
An error occurs when the product is not set in the repair move line, and the Scheduled Date is being updated. **Steps to Reproduce:** - Install the **Repairs** module. - Create a new **Repair Orders**. - Add a product and confirm the repair. - In the **Parts** tab, **add a new line** and change the **demanded** quantity without selecting a product. - Update the **Scheduled Date**. **Error:** `AssertionError: precision_rounding must be positive, got 0.0` `ValueError: Expected singleton: uom.uom()` (v19.0) When the move line has no `product_id`, its Unit of Measure (uom_id) is also empty. Updating the scheduled date triggers a computation, which leads to the error. Forward-Port-Of: odoo/odoo#246011 Forward-Port-Of: odoo/odoo#244179
Tour guidance pointers are now hidden when the item they refer to is not available in the active screen area. This prevents confusing or distracting hints from appearing on top of unrelated pop-up dialogs, improving the guided user experience.
Original PR description
POC for task-5490670 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#245949 Forward-Port-Of: odoo/odoo#243852
Fixes an issue where saving an already edited message without making changes could still trigger an unnecessary update. This helps keep message editing behavior accurate and avoids extra background processing.
Original PR description
Since #224800, we've been removing the `edited` element from the current message body in order to compare it with the updated body. However, the `edited` element may also be present in the updated body. This change removes the `edited` element from the updated body as well, ensuring a reliable comparison when editing an edited message. Steps to reproduce: - Send a message. - Click `edit`, change the message body and click `save`. - Click `edit` again, don't change the message body this time, then click `save` . - An RPC is made to update the message.
The Gantt view controls now fit better on very small mobile screens when using longer localized date ranges, such as Dutch. This prevents interface elements from covering each other, making project planning easier to use on compact devices.
Original PR description
Steps to reproduce ================== - Switch to dutch - Emulate an iPhone SE viewport in the browser settings - Open a project - Switch to the gantt view - Use a custom date range -> The gantt controls are displayed on top due to the daterange format being to long Note ==== The fix is in the ViewScaleSelector component, but only the gantt view uses a custom scale opw-5340869 Forward-Port-Of: odoo/odoo#245552
This update adds a test to ensure Stripe payments continue to work correctly for currencies with special rounding rules, such as ISK and UGX. It helps prevent future regressions where payments could fail because the paid amount is interpreted differently between Odoo and Stripe.
Original PR description
### Issue: Stripe payment is failing in some special currencies (e.g. ISK, UGX). The issue is already fixed in 19.0; however this commit forwards the test to prevent regressions in future. #### Steps…
### Issue: Stripe payment is failing in some special currencies (e.g. ISK, UGX). The issue is already fixed in 19.0; however this commit forwards the test to prevent regressions in future. #### Steps to reproduce the issue in case the issue exists: 1- Configure Stripe 2- Enable ISK currency 3- Create a SO with ISK currency and generate a payment. 4- Pay using Stripe. The payment will fail due to the amount mismatch. ### Cause: Commit https://github.com/odoo/odoo/commit/9493475273a40320228b92940be15ad8cb0643cb added support for special currency but did not adapt amount in validation method. In stripe payload, we are using `const.CURRENCY_DECIMALS` as `arbitrary_decimal_number` to convert the amount to minor currency unit: https://github.com/odoo/odoo/blob/6e2a29bbb23a8233132dc039d144d97be4feb3af/addons/payment_stripe/models/payment_transaction.py#L161-L166 However, not using the same constant in conversion back to major currency unit in `_validate_amount` might cause amount mismatch. This is currently fixed on 19.0: https://github.com/odoo/odoo/blob/fbdcb07f50c1c6ba3449afcf41f0144a08413a11/addons/payment/models/payment_transaction.py#L808 https://github.com/odoo/odoo/blob/fbdcb07f50c1c6ba3449afcf41f0144a08413a11/addons/payment_stripe/models/payment_transaction.py#L306-L319 opw-5871420 Forward-Port-Of: odoo/odoo#245689
This update resolves a test failure related to how contract end dates are handled in the Enterprise payroll module. The fix ensures that contract end dates are correctly calculated, preventing potential issues with automatic contract terminations. This improves the reliability of payroll calculations.
Original PR description
### Cause: Apparently the contract ends automatically after a period if `contract_date_end == False` ### Solution: Set `contract_end_date` to ` Date.today() + relativedelta(years=2)` like in `hr_payroll/tests/common.py` runbot-237945 runbot-237894 Forward-Port-Of: odoo/enterprise#104627
The 'Unnamed' breadcrumb issue in the Documents section, triggered when navigating from the systray, has been resolved. This ensures the correct folder name is always displayed, providing a consistent and accurate user experience for accessing documents.
Original PR description
When navigating to Documents through the activity menu (systray), the breadcrumb displays "Unnamed" instead of showing the proper folder name. Steps to reproduce: 1. Click the activity menu icon (clock) in the systray 2. Click on "Documents" in the activity dropdown 3. Observe the breadcrumb shows "Unnamed" The issue occurs because when navigating from the systray, the folder section's activeValueId is undefined. This causes getSelectedFolderAndParents() to call folderSection.values.get(undefined), which returns undefined instead of the default folder. Without a valid folder object, the breadcrumb computation has no context and falls back to displaying "Unnamed". The fix ensures that when activeValueId is undefined, we explicitly pass false to values.get(), which correctly retrieves the root/default folder. opw-5473442
This update resolves an issue in Odoo's Web Studio where it could incorrectly create related fields linked to non-searchable data. This prevented warnings and errors, particularly in business settings. The change ensures that related fields are built correctly, regardless of the field's searchability, improving stability and reliability.
Original PR description
Before this commit studio allowed to make a related field with a non-searchable field (ie standard computed fields) in the the chain. This triggered a warning at creation (at fields.py:resolve_depends) and errors when using in a business setting. After this commit, the filter to build the relational field is modified to take into account this. opw-5436158 Forward-Port-Of: odoo/enterprise#105668 Forward-Port-Of: odoo/enterprise#105607
This update fixes a technical issue that previously caused errors when adding transcription snippets to new records. The change ensures proper record identification and saving, preventing exceptions and improving the stability of the AI transcription feature. It also resolves a localized testing issue.
Original PR description
This PR fixes an issues where an exception would be thrown when inserting a transcription snippet on an unsaved record. It does so by removing the resId, resModel props and only retrieving them when actually needed (when opening the full composer to send the summary). Also whennever opening the full composer, we force a save on the record to ensure proper resId. The PR also adapts `voice_transcription_plugin.test.js` to add the locale to the date that is inserted when starting a transcription, avoiding local test fails. task-5788331
This update corrects a technical issue preventing accurate payslip updates by ensuring the necessary permissions are granted during data access. Specifically, a sudo call is now used to read slip IDs, resolving a previous error and improving payroll processing reliability. This ensures employees' payroll information is correctly updated.
Original PR description
From a previous PR (103147), the payslip update logic was moved to the write function which gets called when a field is changed. In doing so, a sudo call is necessary to avoid problems with users modifying their own record (and not having access rights to read slip_ids). This also applies to tests and solves the following runbot error: Runbot Error: 237743 Forward-Port-Of: odoo/enterprise#105287
This update ensures that sign templates are automatically named with the correct document name, regardless of the user's language setting. Previously, templates created in non-English languages would default to 'New Template' due to a comparison issue. This fix guarantees accurate template naming for all users.
Original PR description
## Steps to reproduce: 1. Upload a new PDF document to be signed. 2. Select it in the Documents app to sign it. 3. Check the name of the sign template created. ## Issue: When creating signature templates in languages other than English, the template name would stay as "New Template" instead of updating to the actual document name. This happened because the code was comparing the template name against a translated version of "New Template", but the template was initially created with the English default value. Since "New Template" ≠ "Nueva Plantilla" (Spanish), the comparison failed and the name never got updated. The fix ensures we always compare against the original English default value, so the template name gets properly updated to match the document name regardless of the user's language. Related commit: 4254542 opw-4980747 Forward-Port-Of: odoo/enterprise#92682