Friday, January 23, 2026
16 changes · saas-18.2
New functionality added to Odoo
This update introduces support for the Caribbean Guilder (XCG) as a new currency option within Odoo. It's specifically designated as the default currency for Curaçao and Sint Maarten, expanding Odoo's currency coverage to include these regions. This change allows users to accurately record financial transactions in XCG.
Original PR description
Introduce the Caribbean Guilder (XCG) as an available currency and set it as the default currency for Curaçao and Sint Maarten. Related PR-https://github.com/odoo/enterprise/pull/104404 taskID-5490423 Forward-Port-Of: odoo/odoo#243955
This update introduces support for the Caribbean Guilder (XCG) currency within Odoo Enterprise. It establishes XCG as the default currency for Curaçao and Sint Maarten, aligning our financial data with the broader Odoo community. This change improves reporting and financial management for businesses operating in these regions.
Original PR description
Align enterprise currency data with the community with addition of new currency XCG. Related PR-https://github.com/odoo/odoo/pull/243955 taskID-5490423 Forward-Port-Of: odoo/enterprise#104404
Enhancements to existing features
This update removes a previous restriction that limited the ability to use certain journal accounts for reconciliation. This change provides greater flexibility for users to manage their accounting data and reconcile transactions without limitations. It's a minor improvement that enhances usability.
Original PR description
Previously, a constraint prevented accounts from being non-reconcilable if they were used as default debit/credit accounts involved in journals. This behavior is too restrictive. This commit removes the constraint. task-5254202 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244398
Resolved issues and error corrections
This update fixes a display issue in the appointment calendar for Ukrainian and Polish users. Previously, month names were incorrectly formatted in the genitive case. The fix ensures month names are displayed correctly in the nominative case, aligning with standard calendar conventions and improving user experience for these languages.
Original PR description
In the appointment calendar, the "Month Year" (e.g. January 2026) is displayed at the top of the calendar selector as is standard for calendars. Unfortunately in some languages, the word month word…
In the appointment calendar, the "Month Year" (e.g. January 2026) is displayed at the top of the calendar selector as is standard for calendars. Unfortunately in some languages, the word month word used depends on grammatical situation. Steps to reproduce: - activate Ukrainian (or Polish) language - Preview (i.e. the website view) of any appointment - Change the preview into Ukrainian (or Polish) Expected result: Calendar month at top of calendar is shown in the nominative case: e.g. January 2026 = січень 2026 (in Ukrainian) Actual result: Calendar month is shown in the genitive case (e.g. "of January", as in "the 12th of January): e.g. January 2026 = січня 2026 (in Ukrainian) Fix is to switch from the "MMMM Y" format (i.e. month based on grammar context) to "LLLL Y" (i.e. stand alone month) which will use the correct month case. Ref: https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-month Note that for most languages this won't make a difference since there is usually only 1 way of writing a month. opw-5474705 picture diff (for January 2026): before fix: <img width="1168" height="468" alt="image" src="https://github.com/user-attachments/assets/36754439-e664-40f3-9c5b-7c9c76cd7cca" /> after fix: <img width="1215" height="492" alt="image" src="https://github.com/user-attachments/assets/82f0665e-fe70-4b9f-b1d4-f420b52db38f" /> Forward-Port-Of: odoo/enterprise#104942
This update fixes a technical error in the delivery IoT module that caused tracebacks when confirming print jobs. The issue stemmed from discrepancies between how print jobs are created in the front-end and the backend, particularly with WebSocket confirmations. Additionally, the update ensures compatibility with older IoT devices that don't always provide standard print identification data.
Original PR description
In `delivery_iot`, as reports are fetched in the chatter from the backend, we end up creating one print job in the front end but multiple print jobs can be sent with WebSocket in the backend. We then get a traceback when getting a second confirmation from a print job that has just been deleted from the job list. Additionally, we ensure compatibility with the stable IoT Box, that do not return a `print_id` or `iot_mac`. opw-5464957 Forward-Port-Of: odoo/enterprise#105194
This update fixes a potential issue where small discrepancies in cash reporting were incorrectly flagged as needing removal. The change ensures that currency rounding errors are now accounted for, preventing the unintended removal of legitimate cash transactions and improving the accuracy of cash difference reports. This ensures more reliable financial reporting.
Original PR description
Before this commit, when calculating the cash difference in the report, the code did not account for currency rounding. This could lead to situations where a very small cash difference, due to rounding errors, was not recognized as zero, resulting in the unintended removal of cash moves. opw-5489958 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245251
This update addresses a technical issue preventing Odoo from correctly handling responses from external services. The problem stemmed from a recent change in the 'requests' library, which removed a necessary import. By installing a specific version of 'requests' and importing the correct exception, this error is now resolved, ensuring smooth communication with external systems.
Original PR description
Installing `requests==2.25.1` and using the following line of code:
from requests.exceptions import JSONDecodeError
It raises the following error:
ImportError: cannot import name 'JSONDecodeError' from 'requests.exceptions' (python3.10/site-packages/requests/exceptions.py)
It was removed from the following commit in the `requests` package:
https://github.com/psf/requests/commit/db575eeedcfdb03bf31285afd3033e301df8b685
This change fixes this error importing the original exception from `json` package
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#245075This update corrects a technical detail related to the translation of Odoo's Greek language support. The incorrect language code ('gr') was replaced with the correct code ('el') in the system's configuration files. This ensures accurate translations for Greek-speaking users and maintains the quality of the Odoo platform.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244830 Forward-Port-Of: odoo/odoo#244684
This update corrects a previous issue where newly added modules to the stable version of Odoo Enterprise were not correctly marked for translation. This change adds the necessary entries to the .weblate.json file, guaranteeing that these modules will be properly translated and available for all languages. This prevents future translation delays and ensures a complete user experience.
Original PR description
Modules added into stable without being properly added to .weblate.json file = never translatable. Forward-Port-Of: odoo/enterprise#104964 Forward-Port-Of: odoo/enterprise#104890
This update resolves a technical issue where the demo data for the Mexican payroll modules incorrectly set the company and partner names during installation. This prevented proper CFDI stamping of invoices and payment complements in demo databases, ensuring the demo environment functions correctly and aligns with regulatory requirements.
Original PR description
The demo data of the Mexican payroll modules was overriding the company and partner name during installation, which can break the CFDI stamping flow for invoices and payment complements in demo databases. Forward-Port-Of: odoo/enterprise#102558
This update resolves an issue where internal users without sales permissions would encounter errors when accessing their sales orders through the /my page. The change mirrors a previous fix and ensures a smoother experience for all users, regardless of their access level. This improves overall system stability and usability.
Original PR description
Avoid error when internal user (no sale permissions) see Orders at /my Similar to https://github.com/odoo/odoo/commit/5ebab949a06ec338cc28e912317a74bbfb3fe6ac @Tecnativa TT60025 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245039
This update resolves a potential infinite loop issue that could occur when generating product attribute combinations. Specifically, it prevents errors caused by a specific configuration involving multi-checkbox attributes with no associated values. This change ensures stable product configuration and avoids disruptions to the sales process.
Original PR description
Before this commit, having a `product.template.attribute.line` with zero `product.template.attribute.value` records might cause an infinite loop if this **multi-checkbox** attribute wasn't in the end…
Before this commit, having a `product.template.attribute.line` with zero `product.template.attribute.value` records might cause an infinite loop if this **multi-checkbox** attribute wasn't in the end of the list.
Suppose the order was arbitrary and we are generating combinations for two lines (the order here is important):
- Line (A) -> [] (multi checkbox type)
- Line (B) -> [attr_1, attr_2]
- The possible combinations are {(attr_1), (attr_2)}.
After generating the second combination the following 2 procedures happen.
- The value_index_per_line[1] will be resetted to -1,
- The line_index will decrement from 1 to 0.
Now, since the first line doesn't have any values, it will be skipped and the line_index will be incremented to 1.
This results in the redundant generation of the same combination, triggering an infinite loop.
Since this method yields a recordset of `product.template.attribute.value` model and the **multi-checkbox** attribute doesn't have a value being passed to the method anyways, we can exclude the lines that doesn't have values for the algorthim not to be stuck in an infinite loop.
opw-5267179
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241557This update resolves a bug where self-order kiosk tickets were printing blankly when a preparation printer was configured without product categories. The fix ensures that the printer only prints when a product category is defined, aligning with the expected behavior of the self-order system. This prevents blank tickets and ensures accurate order information is printed.
Original PR description
Before this commit: To reproduce (version 17 and >): 1. Install Restaurant 2. In PoS restaurant config allow "Self ordering" in Kiosk mode and enable "Preparation printers" 3. Create a preparation printer with NO categories and set it as a restaurant preparation printer 4. Open the Kiosk 5. Make an order with any product and checkout -> Printer will print a ticket with no product <img width="512" height="415" alt="image" src="https://github.com/user-attachments/assets/31bd08f9-2470-4f72-9e3d-822564b43f70" /> After this commit: No kitchen printer is printed (expected as no category set on the kitchen printer) Forward-Port-Of: odoo/odoo#245193
This update resolves minor visual inconsistencies in the website's image gallery template. Specifically, it corrects issues with missing styling and undefined class names, ensuring a more polished and consistent user experience. This improves the overall presentation of images on the website.
Original PR description
This commit fixes a few minor issues in the new carousel items template introduced in [1]: items having an `"undefined"` class, and a missing margin style in the main snippet template. [1]: https://github.com/odoo/odoo/commit/9042b1cae7b630b20e0670788b7a4ed9e4c97609 linked-task-3414281 Forward-Port-Of: odoo/odoo#241785
This update enhances the security and reliability of our Peppol integration by implementing a safer process for server-initiated deregistration. Previously, an issue caused disruptions when a server unexpectedly removed a participant. Now, the system handles this more gracefully, allowing users to re-register after a soft reset of the configuration. This change was driven by a postmortem analysis of a recent incident.
Original PR description
Reintroduce server-initiated deregistration on `client_gone`, but only for implementations that explicitly handle it. The base proxy client now just raises the error. Peppol opts in by soft-resetting its configuration so users can re-register. See the IAP postmortem for the rationale and incident history. https://github.com/odoo/iap-apps/pull/1317 no-task Forward-Port-Of: odoo/odoo#245038 Forward-Port-Of: odoo/odoo#239254
This update resolves a technical issue identified during testing of Odoo's project scheduling features. Specifically, a problem with how spaces were handled in test data was corrected. This ensures the accuracy and reliability of the project scheduling system, preventing potential errors in planning and reporting.
Original PR description
Fixes https://runbot.odoo.com/odoo/runbot.build.error/162366 Forward-Port-Of: odoo/enterprise#105370