Friday, May 29, 2026
22 changes · saas-19.3
Enhancements to existing features
This update adds logging to the IoT drivers to help our support team quickly diagnose issues related to IoT boxes that are having trouble connecting with the correct IP address or version. These logs will provide valuable insights for troubleshooting and resolving problems, ultimately improving the user experience. This is a minor improvement focused on internal support processes.
Original PR description
This PR adds some minor logs to help identify issues around iot box hanging ip address and version See https://github.com/odoo/enterprise/pull/118377 Forward-Port-Of: odoo/odoo#266538 Forward-Port-Of: odoo/odoo#266410
This update enhances logging around IoT device connections and data transmission. Specifically, it adds more detailed logs for IP address and version changes, and optimizes a search process to prevent unnecessary activity. These improvements will aid our support team in troubleshooting IoT issues and improving device performance.
Original PR description
This PR adds some minor logs around ip/version change and websocket messages sent to the iot box. It also inverts a condition to avoid doing a useless search when sending websocket messages See https://github.com/odoo/odoo/pull/266410 Forward-Port-Of: odoo/enterprise#118442 Forward-Port-Of: odoo/enterprise#118377
Resolved issues and error corrections
This update resolves an issue that caused temporary problems during Odoo upgrades. It replaces a complex workaround with a more direct method of managing group settings for the service timesheet, preventing the creation of unnecessary temporary records. This ensures smoother and more reliable Odoo upgrades.
Original PR description
Replace the `res.config.settings transient record + execute()` hack with a direct group implication on `group_field_service_allow_material` to avoid orphan transient records during upgrade. see: https://github.com/odoo/upgrade/pull/10310#issuecomment-4518235969 Forward-Port-Of: odoo/enterprise#118178
This update corrects a bug preventing new users with broader timesheet access (e.g., 'All Timesheets') from appearing in the Assistant Rules sharing dropdown. The fix adjusts how the system identifies eligible users, ensuring all authorized personnel can be selected. This improves the usability of the timesheet sharing feature.
Original PR description
Steps to Reproduce: - Create a user with "All Timesheets" access. - Open the Timesheets app and navigate to Assistant Rules. - Attempt to share any rule with the newly created user. Current Behavior: - The new user is missing from the dropdown selection list. Cause: - The domain on the user selection field filters based on explicitly assigned groups (using group_ids for "Own Timesheets" access). Users with higher-level access, such as "All Timesheets" or "Timesheets Admin", have this access implied rather than explicitly assigned, meaning it only registers in `all_group_ids`. Fix: - Update the field domain to evaluate `all_group_ids` instead of `group_ids`. This ensures users with implied group access are correctly populated in the dropdown list. task-6236300
This update adds a new account (221004) to the Hong Kong chart of accounts. This change enables accurate recording of employer-paid housing allowances within the payroll system, ensuring compliance with local regulations and providing better financial reporting.
Original PR description
Add account 221004 (Staff Housing Accrued) to the HK chart of accounts to support employer-paid rent accrual entries in payroll. Enterprise PR: https://github.com/odoo/enterprise/pull/118629 task-6219303
This update fixes a previous accounting error in the Hong Kong payroll module. The Employer Paid Rent rule was incorrectly only recording a debit, leading to an imbalance. Now, the correct credit account (221004) is used for this rule in both common payroll structures, ensuring accurate financial reporting.
Original PR description
The Employer Paid Rent rule (HEPR) only had a debit account (5220 Employee Benefits/Staff Costs), leaving the journal entry unbalanced. Set account 221004 (Staff Housing Accrued) as the credit account for the HEPR rule in both CAP57 Monthly Employee Pay and CAP57 Casual Employee Pay structures. Community PR: https://github.com/odoo/odoo/pull/266863 task-6219303
This update resolves an issue where double-clicking images within the Media Dialog triggered a technical error. The fix uses a flag to track processing clicks, preventing multiple actions from executing simultaneously. This ensures a smoother user experience when editing website content.
Original PR description
Steps to reproduce: 1.Open the website in Edit mode. 2.Add a snippet with an image. 3.Replace the image. 4.After replacing image, double-click on it to open the Media Dialog. 5.Inside the Media…
Steps to reproduce: 1.Open the website in Edit mode. 2.Add a snippet with an image. 3.Replace the image. 4.After replacing image, double-click on it to open the Media Dialog. 5.Inside the Media Dialog, double-click on the same or any other image. 6.Traceback occurs. Before this commit: parentElement was becoming null because parentElement is a DOM position check.it requires the element to be physically attached in the DOM tree to find its parent.Since this.props.node is not yet in the DOM at that point, parentElement returns null. After this commit: 1.The issue is fixed using a boolean flag: isProcessingClick. Initially, the flag is set to false. When the first click starts, it is updated to true. If another click occurs during the same flow (e.g during a double click), isProcessingClick is already true, so the function immediately returns and prevents the action from being executed multiple times. 2.we now pass closestSnippetEl directly from replaceMedia() through params.this allows the dialog taken snippet reference using (closestElement(mediaEl , "[data-snippet]")) without depending on the media node being attached to the DOM. task-6033320 Forward-Port-Of: odoo/odoo#266664 Forward-Port-Of: odoo/odoo#254790
This update fixes a potential issue where users could select inactive Intrastat codes on products. Now, a warning message will appear if a user attempts to use an expired or future-dated code, preventing incorrect reporting and ensuring data accuracy for Intrastat compliance. This improves data integrity and reduces the risk of errors.
Original PR description
Problem: When choosing an intrastat code on a product, all the codes are shown, even the ones that are expired or not yet active. Users can select an intrastat code that is not active. Steps to reproduce: 1. Check the intrastat code list and find a code with a start date in the future or an expiry date in the past 2. Note the code description 3. Open a product form view and try to set/change the intrastat code 4. Search for the code description noted in step 2 5. Note that the code is proposed while it should not be proposed Solution: When an intrastat code is selected, if the code is not active, a warning message is shown to the user. opw-6217915 Forward-Port-Of: odoo/enterprise#118569 Forward-Port-Of: odoo/enterprise#117884
This update resolves a compatibility issue with the XML processing library (lxml) used in Odoo. Updating the library ensures Odoo continues to function correctly and prevents potential disruptions. This change is a routine maintenance update.
Original PR description
Note: support for version 6+ of lxml has been merged in odoo/odoo@4b1797fccdf1447a8adb817148cc39bc322428a6 runbot-938365 Forward-Port-Of: odoo/odoo#266893 Forward-Port-Of: odoo/odoo#266627
This update fixes an issue where checklists were not properly rendered in email templates sent through Odoo. The change re-enables the checklist command within the activity HTML field and ensures that checklists are converted to standard lists when emails are sent, improving email formatting and functionality.
Original PR description
Purpose: - The checklist command was removed from the activity html field. This change re-enables the checklist command for the activity html field. - When sending mail, convert checklist into a normal list. task-6144663 Forward-Port-Of: odoo/odoo#263287
This update fixes an issue where the Table of Contents in the HTML editor wasn't updating properly after editing headings. Specifically, deleting a heading caused the ToC to fail to refresh. The fix ensures the ToC always updates correctly, regardless of editing activity, improving the overall content editing experience.
Original PR description
Steps to Reproduce : - Go to To-Do → Create New and add a Table of Content block - Type text → in new line create /h1 → it appears in ToC - Place cursor before /h1 and press Backspace → it merges with paragraph Description of the issue: Table of Content block does not update accordingly Cause: After the heading is merged with the previous paragraph, `delayedUpdateTableOfContents` is triggered, but at that time no heading is available in the editable area. As a result, instead of updating the Table of Contents, it returns without making any changes. Solution: If Table of content already contains heading, then update regardless of whether editable contains heading elements or not. task-6150579 Forward-Port-Of: odoo/odoo#265803 Forward-Port-Of: odoo/odoo#261675
This update resolves a bug that prevented users from correctly applying custom grouping options within the Analytic Report feature. The fix ensures that custom groupBys are properly included in the search items, allowing users to select and utilize them as intended. This improves the functionality of reporting on analytic data.
Original PR description
Steps to reproduce: - Install `Accounting` module - Search `Analytic Report` > Click on `Total` > `Custom Group` - Select `Journal Item` > Now again close and select `Journal Item` Traceback: ```js…
Steps to reproduce:
- Install `Accounting` module
- Search `Analytic Report` > Click on `Total` > `Custom Group`
- Select `Journal Item` > Now again close and select `Journal Item`
Traceback:
```js
TypeError: Cannot destructure property 'fieldName' of 'searchItems.find(...)' as it is undefined.
at AnalyticPivotRenderer.onGroupBySelected (http://localhost:8069/web/assets/3b7bf10/web.assets_backend_lazy_dark.min.js:434:7)
at Object.onSelected (eval at compile (http://localhost:8069/web/assets/b0799bf/web.assets_web.min.js:1376:421), <anonymous>:78:62)
at DropdownItem.onClick (http://localhost:8069/web/assets/b0799bf/web.assets_web.min.js:2373:24)
```
Cause:
Custom groupBys were not being added to the search items list in `onGroupBySelected`, causing a lookup failure when selecting a custom groupBy from the dropdown.
Solution:
Added custom groupBys to the search items list so they can be found and applied correctly.
opw-6227164
Forward-Port-Of: odoo/odoo#265810This update corrects a technical issue related to how currency rates are configured in Odoo. Previously, a faulty method was causing errors, but this change replaces it with a more modern and reliable approach. This ensures currency settings function correctly and prevents potential disruptions.
Original PR description
Since saas-19.1, get_param has been removed from ir.config_parameter and replaced by typed helpers such as get_int, get_float, and get_bool, etc. This commit replaces the deprecated get_param call with get_int to prevent an AttributeError. Forward-Port-Of: odoo/enterprise#118621
This update streamlines the initial setup process for the timesheet assistant by removing a redundant step. Previously, users had to manually start a server each login; this has been resolved through an updated installer, making the onboarding process smoother and more convenient. This change improves user experience and reduces potential support requests.
Original PR description
Before this commit, the wizard to onboard the user to correctly install activity watch for timesheet assistant, mentioned the user has to start the server each time he logs in on his computer. This step is not longer needed thanks to an update on the odoo activity watch installer. This commit removes the line saying the user has to start the server each time he starts his working day. task-6081636 Forward-Port-Of: odoo/enterprise#115373
This update corrects a bug where child contacts linked to a company were incorrectly flagged as companies themselves. The fix prevents inherited data from triggering the incorrect 'is_company' calculation, ensuring accurate contact categorization. This resolves an issue impacting Argentina and Latin America-based users.
Original PR description
### Issue: When creating a company with CUIT 30999003156, any child contact added under it is incorrectly considered as a company ### Cause: In `l10n_ar`, `_compute_is_company()` relies on:…
### Issue: When creating a company with CUIT 30999003156, any child contact added under it is incorrectly considered as a company ### Cause: In `l10n_ar`, `_compute_is_company()` relies on: `l10n_ar_afip_code` and the prefix of `l10n_ar_vat` However, these fields are propagated to child contacts As a result, child contacts inherit the same values as the parent company and are incorrectly computed with `is_company = True` ### Note: This same fix also fix the issue on `l10n_latam_base` and `l10n_co` ### Steps to reproduce: - Install `l10n_ar` and switch to an AR Company - Create a Partner in Contacts (Name: Test Company, Country: Argentina, Identification Number: CUIT 30999003156) - Add a Contact (Name: Test Contact) - Go in Contacts and add a Filter for Name: Test ### Before the fix: The Contacts are: Test Company and Test Contact ### After the fix: The Contacts are: Test Company and Test Company, Test Contact opw-6140921 Forward-Port-Of: odoo/odoo#263503
This update resolves an error that prevented users from adding multiple loan lines to a French company account. The issue stemmed from a comparison between date values, which was causing a system error. The fix ensures that users can now successfully add and manage multiple loan lines within the accounting module.
Original PR description
**Steps to reproduce:** - Install the `l10n_fr_account_loans` module and switch to a `FR Company`. - Navigate to Accounting > Accounting > Assets & Liabilities > Loans. - Create a new loan record. -…
**Steps to reproduce:** - Install the `l10n_fr_account_loans` module and switch to a `FR Company`. - Navigate to Accounting > Accounting > Assets & Liabilities > Loans. - Create a new loan record. - Click `Add a line`, set a `Date`, and `save` the record. - Click `Add a line` again. **Error:** `TypeError: '>' not supported between instances of 'datetime.date' and 'bool'` **Root Cause:** At [1], when adding a line after the record has already been saved with at least one existing line, the existing line has a valid `datetime.date` value for `l.date`, while the newly created unsaved line still has `line.date` set to `False`. This results in a comparison between a `datetime.date` object and a boolean value, causing an error. **Fix:** This commit prevents the errors when adding multiple lines after saving the record by applying a fix similar to [2]. [1]: https://github.com/odoo/enterprise/blob/54eef93f295eaebd98d24730d108b1203ca7b35a/l10n_fr_account_loans/models/account_loan_line.py#L21 [2]: https://github.com/odoo/enterprise/blob/54eef93f295eaebd98d24730d108b1203ca7b35a/account_loans/models/account_loan_line.py#L61-L63 opw-6244973 Forward-Port-Of: odoo/enterprise#118354
This update resolves a bug where the HTML editor shortcut would remove empty lines after inserting inline commands. The issue stemmed from how the system handled `<br>` tags, leading to incorrect block boundary detection. This change ensures that empty lines are preserved when using the shortcut, improving the editor's usability and allowing for more flexible content creation.
Original PR description
…r <br> Problem: Typing "->" + Space after a Shift+Enter on an empty line correctly inserts the → character, but removes the empty line above it. Cause: - Consecutive `<br>` elements were not preserved when determining the old block boundary; the preceding `<br>` was incorrectly deleted. - Inline commands were wrapped in a block element instead of being inserted inline. Steps to reproduce: 1. Type "a" 2. Press Shift+Enter twice 3. Type "->" then Space 4. The empty line above is removed when the shortcut is applied task-6229525 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265270
This update resolves an issue where new US chart of accounts installations created default numeric codes (e.g., 1014-1018) for certain bank and cash accounts. The fix removes these automatic codes and ensures that the US chart of accounts uses the intended blank codes as designed. This improves consistency and simplifies account management.
Original PR description
Issue: After installing the US chart of accounts, a few accounts still receive numeric codes on new 19.3 SaaS databases, for example: Bank Suspense Account (1014) Bank journal default account (1015)…
Issue: After installing the US chart of accounts, a few accounts still receive numeric codes on new 19.3 SaaS databases, for example: Bank Suspense Account (1014) Bank journal default account (1015) Outstanding Receipts (1016) Funds in Transit (1017) Outstanding Payments (1018) The rest of the chart has no codes, as intended. Steps to reproduce: 1) Create a clean database on 19.3 2) Install accounting with United States localization (l10n_us / l10n_us_account) 3) accounting > configuration > fiscal position set to US 4) Open Accounting > Chart of Accounts 5) Observe that some bank accounts (and the Bank journal account) have codes 1014–1018 while other accounts have no code Cause: this commit https://github.com/odoo/odoo/pull/253759/changes/45d29f576baea0f92552af04229e1049037f8271 removed US account codes from the US CSV and set `code_digits` to 0: https://github.com/odoo/odoo/blob/73252cd9bfaa07ea004f7ac82a68afa558c09e9c/addons/l10n_us_account/models/template_us.py#L9-L13 Those accounts are not in the US CSV, Core account still creates them using company bank/cash/transfer prefixes, so they were the only ones that kept getting codes, because `code_digits` is 0, `len(prefix) < 0` is always false, so the code becomes the prefix itself (1014, 1015, 1017, ...) https://github.com/odoo/odoo/blob/73252cd9bfaa07ea004f7ac82a68afa558c09e9c/addons/account/models/account_account.py#L1059 Solution: - Set `bank_account_code_prefix`, `cash_account_code_prefix`, and `transfer_account_code_prefix` to `False` in the US chart template company data so those auto created accounts get no prefix and no generated code. opw-6211806 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adjusts the timeout for Epson printer connections in the Point of Sale system. Previously, a popup would appear unnecessarily, especially on iPads, while the print job completed successfully. Increasing the timeout to 15 seconds ensures the system doesn't prematurely alert customers to issues that don't exist, improving the user experience.
Original PR description
[FIX] point_of_sale: increase epson printer timeout Extend the timeout duration for the Epson printer integration to avoid the "RetryPrintPopup" keep appearing on users' devices, especially iPads, while the ticket is properly printed. Previously, the popup was displayed after 3 seconds. In reality, it can take 8 seconds for the printer to respond, which is considered normal. After this fix, the timeout at 15 seconds covers worst cases as well. The printer will take the time it needs to print and the POS won't rush to warn the customer about an issue that has not actually occurred yet. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#266747
This update fixes an issue where selecting the start date first would incorrectly set both the start and end dates for postponed accounting periods. The change ensures that the period dates are displayed correctly, regardless of the order in which the start and end dates are selected, resolving a confusing user experience.
Original PR description
The issue is when selecting deferred dates, if the start date is selected first, the system will set both the start and end dates. However, when selecting the end date first, the period appears backwards example ( 2026 - 2025 ). task: 6140024 Forward-Port-Of: odoo/enterprise#114866
This update fixes a problem where the bank statement KPI wasn't being updated correctly when no statements were processed. Now, if no bank statements are available, the KPI column is automatically cleared, ensuring accurate reporting. This prevents misleading KPI data related to bank statement processing.
Original PR description
The aim of this commit is to update the integer kpis when those aren't received. ### Context: The account module report the bank statement in draft to process. When all bank statement have been processed, there isn't any and thus, the module send back an empty list. ### Before this commit: The bank statement kpi wasn't updated as we didn't received anything about that specific kpi. ### After this commit: Any kpi that wouldn't be reported would get it's column emptied. opw-6170973 Forward-Port-Of: odoo/enterprise#115695
This update fixes a technical issue where the AI system was occasionally encountering an error (keyerror) when retrieving tool call IDs from the Gemini language model. The fix ensures the system correctly handles cases where the ID is missing, preventing disruptions in AI functionality. This improves the reliability of the AI-powered features.
Original PR description
The functionCall parts returned by Gemini may or may not have an id depending on the LLM model used (Gemini 2.5 doesn't include an id in functionCall parts but Gemini 3 does). So, there is some code that checks whether there is an id and generates a uuid if none exists. This code had a bug because it was accessing the id directly on the functionCall part which may not exist and a keyerror was thrown in such cases. This commit solves the issue by using get instead of direct key access.