Thursday, December 18, 2025
16 changes · saas-18.3
Resolved issues and error corrections
This update corrects a technical issue that was preventing the correct sizing of columns in the expense report list view. Previously, the column widths were calculated incorrectly due to lost classnames in the override. Now, the column widths will be accurately determined, ensuring a better user experience for viewing expense reports.
Original PR description
Before this commit, some classnames set on the list renderer were lost in the expense override. As a consequence, the column width logic couldn't be applied correctly. The widths were computed with a wrong available width (the width of table's parent element, which is the renderer itself). 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#240270
This update addresses a bug in the spreadsheet component, specifically preventing issues with empty matrices during evaluation. The team has implemented the latest version of the o_spreadsheet library, ensuring improved stability and performance for spreadsheet functionality within Odoo. This change is a routine maintenance update.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bbf6be118b [REL] 18.3.30 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/2764f730cc [FIX] evaluation: do not spread empty matrix [Task: 5421196](https://www.odoo.com/odoo/2328/tasks/5421196) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update corrects a display issue where task templates were incorrectly shown alongside regular tasks in the Odoo portal. The fix ensures that task templates are hidden from portal users, improving the clarity and usability of the task management interface. This change prevents confusion and streamlines task organization for users.
Original PR description
Steps to Reproduce
- Log in as a portal user.
- Go to My Tasks and notice that task templates are visible with tasks.
- Share it with the portal user, giving edit access.
- Open the project sharing view and observe that task templates are visible there.
Cause
- The domains used to filter tasks in both the portal view and the project sharing view did not exclude task templates and it's sub-tasks. As a result, task templates were incorrectly shown alongside real tasks.
Solution
- Added `('has_template_ancestor', '=', False)` to the domain in the `_prepare_tasks_values` method to hide templates in the portal.
- Added `('has_template_ancestor', '=', False)` to the domain in the project sharing action to hide templates when listing tasks.
task-5079337
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update corrects a display issue in the Field Service module where task templates were incorrectly shown alongside real tasks. The fix ensures that only actual tasks are listed in the 'All Tasks' view, improving clarity and preventing confusion for users. This change enhances the user experience within Field Service.
Original PR description
Steps to Reproduce
- Navigate to Field Service > All Tasks.
- Observe that task templates are visible with tasks.
Issue
- Task templates are visible in the Field Service > All Tasks view, which is incorrect. Only real tasks should be listed.
Cause
- The domain in the view definition only filtered tasks by `is_fsm = True` and ` project_id != False`, but it did not exclude template tasks and sub-tasks of task templates.
Solution
- Added `('has_template_ancestor', '=', False)` to the domain so that only actual tasks are displayed in the Field Service > All Tasks view.
task-5079337This update fixes an issue where invoice reports for KE clients were not displaying prices with commas, leading to potential confusion. The fix removes a duplicate XPath and correctly formats the total and taxable amounts, ensuring accurate reporting and compliance with KRA regulations. This improves clarity and accuracy for financial reporting.
Original PR description
Steps to reproduce: 1. install `l10n_ke` 2. Switch to KE Company 3. Create a product with all KRA eTIMS details set on the Accounting page. 4. Create an invoice to KE Company with that product and set unitprice > 10000 5. Confirm the invoice and send it. Now, see the invoice report Issue: 1. xpath for `td_subtotal` was duplicated 2. The total amount and taxable amount were not formatted as prices (no commas). Before: <img width="771" height="397" alt="image" src="https://github.com/user-attachments/assets/492fe911-18d6-4e01-a16d-d7450c17373f" /> After: <img width="766" height="389" alt="image" src="https://github.com/user-attachments/assets/bbe5d4e2-b337-445c-833a-06492a8c827d" /> Solution: Updated the invoice report to: - Remove the duplicated `td_subtotal` xpath. - Properly format the total and taxable amounts with `t-options`. opw-5341578 Forward-Port-Of: odoo/enterprise#101794 Forward-Port-Of: odoo/enterprise#100279
This update ensures that Thai VAT numbers entered into Odoo are valid, requiring exactly 13 numeric digits. This improves data accuracy and prevents incorrect VAT number entries, particularly for customers and partners in Thailand. The change was made by Saran440 and is part of the Odoo 18.3 release.
Original PR description
This PR adds a validation method check_vat_th() to verify Thai VAT numbers. In Thailand, a VAT number must consist of exactly 13 numeric digits. For partners with country set to Thailand, the system will only allow VAT numbers that are exactly 13 digits long. Total credits go to: [Saran440](https://github.com/Saran440) `<saranl@ecosoft.co.th>` (See PR: https://github.com/odoo/odoo/pull/239164) Enterprise PR: odoo/enterprise#101905 Forward-Port-Of: odoo/odoo#240112 Forward-Port-Of: odoo/odoo#239616
This update corrects a test case within the Thailand localization reporting module (l10n_th_reports) that failed due to an incorrect VAT number format. Following the recent implementation of stricter VAT validation rules for Thailand, the test now accurately reflects the required format. This ensures the reporting functionality remains reliable and compliant.
Original PR description
Following the implementation of proper validation for VAT numbers for Thailand, this now fails as the one set in the test doesn't follow the proper format. Community PR: odoo/odoo#239616 Total credits to @vin-odoo Forward-Port-Of: odoo/enterprise#102172 Forward-Port-Of: odoo/enterprise#101905
This update fixes an issue where videos added to product descriptions in the online store would disappear after saving. The fix ensures that the system correctly recognizes and preserves video embeds, improving the presentation of product information for customers. The change addresses a technical detail related to how the system clears 'empty' descriptions.
Original PR description
Versions
--------
- 18.0+
Steps
-----
1. Open website editor on a product page;
2. edit the ecommerce description;
3. add a video using the `/video` command;
4. save & close editor.
Issue
-----
The video disappears.
Cause
-----
The `write` override in `website_sale` uses the `is_html_empty` method to clear "empty" descriptions. When adding a video, it gets added as a `<div data-oe-expression="URL" class="media_iframe_video"></div>` element, i.e. an "empty" `div` element according to `is_html_empty`, hence getting cleared on write.
Solution
--------
In the `write` override, don't clear the ecommerce description if it contains "media_iframe_video".
Also, for 18.0, add `options="{'embedded_components': false}"` to the product view in the back-end to disable adding video there, as it gets formatted in a way that isn't supported by the front-end. For 18.2, this was already done in 6339f261e7161.
opw-5218018
Forward-Port-Of: odoo/odoo#240080This update resolves an issue where local overlays within the HTML editor were incorrectly persisting after edits, leading to performance problems. The fix ensures that these overlays are properly cleared when the editor is destroyed, improving stability and responsiveness. This change was proactively implemented to address a root cause identified since 18.0.
Original PR description
This commit ensures that local overlays are correctly removed when the Editor and `LocalOverlayPlugin` are destroyed. Steps to reproduce (observable after 18.4): - Go on website - Enter edit mode - Save - Repeat entering edit mode and saving - Inspect the DOM: oe-local-overlay elements keep accumulating, only one is non-empty The bug is only observable after 18.4, after the website refactoring, but the root cause has been present since 18.0, so we fix it there in case there are other use cases. task-5380409 Forward-Port-Of: odoo/odoo#239644
This update fixes alignment issues within the partner record view and improves the user experience by hiding the 'MyInvois' tab for journal entries that aren't related to sales or purchases. This ensures that users only see relevant information, streamlining their workflow.
Original PR description
This commit: - Fixes alignment of the `MYINVOIS INFORMATION` section on the partner form. - Hides the `MyInvois` tab on journal entries where journal type is neither `sale` nor `purchase`. task-5356808 Forward-Port-Of: odoo/odoo#240333 Forward-Port-Of: odoo/odoo#239837
This update resolves an issue where archived employees were still appearing in the timesheet section of helpdesk tickets. The fix ensures that timesheet entries are only populated for currently active employees, improving data accuracy and usability. This prevents confusion and ensures timesheet reporting reflects the current team roster.
Original PR description
**Steps to Reproduce:** - Install hekpdesk_timesheet. - Go to settings, enable timesheets - Archive an employee. - In a ticket, try to add a timesheet entry. **Isuue:** Archived employees are also appearing under timesheets tab. **Fix:** Passed a context so that only active employees appear in the selection. task-5078763 Forward-Port-Of: odoo/enterprise#95137
This update fixes an issue where product documents would stop appearing on product pages after a document version was updated. The fix ensures that the link between the product and its document is automatically updated whenever a document version change occurs, maintaining accurate product information. This improves data consistency and simplifies document management.
Original PR description
**Steps to reproduce:** 1. Install `sale_management` and `documents`. 2. Go to settings > check `product` under Files Centralization. 3. Create a product and add a document to it using the smart button. 4. Update the version of that document from the *Manage Versions* action on the document page. **Issue:** - After updating the document version, the linked document no longer appears on the product page. **Cause:** - The product page displays records from the `product.document` model, but its `ir_attachment_id` was not updated when the document’s version changed. **Solution:** - Update the `ir_attachment_id` on the corresponding `product.document` record when the document version is updated. opw-5144041 Forward-Port-Of: odoo/enterprise#99226
This update corrects a bug that prevented accurate reporting when calculating periods that spanned leap years. The fix adjusts date calculations to properly handle February 29th, ensuring reports are generated correctly for all years. This improves the reliability of financial data.
Original PR description
To reproduce: Set the start_date to 2024-02-29 then try to compute periods for 2025. This causes a crash as the start date is only valid in a leap year. Ths fix is to offset back the start_day to a valid start_date.
This update removes a 'New' button from the Payslip Work Days Lines Report and Payslip Line Report. This change prevents errors that occurred when users attempted to create new records from these reports, ensuring the reports function correctly for viewing existing payroll data.
Original PR description
Remove the “New” button from the Payslip Work Days Lines Report and the Payslip Line Report. These reports are intended for viewing only, and allowing record creation caused a traceback. task-5416416
This update resolves an issue where images floated within website builder rows caused layout problems. The fix adds a 'clear: both;' rule to ensure rows always appear below floated elements, maintaining consistent website alignment and improving the user experience. This prevents visual disruptions for website visitors.
Original PR description
Steps to reproduce: - Open the website builder. - Drag and drop the s_key_benefits snippets in the page. - Drag and drop an image below the title, above the 3 columns. - Set the 'alignement' option of the image to left. - Observe that the `.row` appears next to the image instead of below it. Previously, when a user dragged and dropped an image into the container above a `.row`, and applied the `float-start` class (via the builder), the floated image caused the `.row` to wrap around it instead of appearing below as expected. This broke the layout and alignment of content inside the `.row`. I fixed this by adding `clear: both;` to the `.row` element, ensuring it always starts below any floated elements above it. This prevents layout breakage even when users insert floated images above rows.
This update corrects a visual glitch where dynamic website snippets would appear and then disappear unexpectedly. The fix restores the intended behavior of snippets being initially hidden and only displayed when content is present. This ensures a consistent and reliable user experience for website visitors.
Original PR description
Steps to reproduce [18.2+]: 1. Add a dynamic snippet to a website page (e.g., Events). 2. Unpublish all event records. 3. The snippet first appears with a visible header, which then disappears. [A]-…
Steps to reproduce [18.2+]: 1. Add a dynamic snippet to a website page (e.g., Events). 2. Unpublish all event records. 3. The snippet first appears with a visible header, which then disappears. [A]- Starting from [1], the `o_dynamic_empty` class was introduced to handle the dynamic snippets visibility, and an upgrade script (see [3]) set this class by default on them. Later in 18.0 (after [2]), the class was changed to `s_dynamic_empty` in the XML template, while on the JS side, the class used to toggle snippet visibility was `o_dynamic_snippet_empty`. This class was also added to snippets on destroy (before saving). [B]- As a result, a dynamic snippet may end up with: - `o_dynamic_empty` & `o_dynamic_snippet_empty`: for old (before 18.0) but edited snippets. - `o_dynamic_empty`: for old snippets never updated in edit mode on 18.0. - `s_dynamic_empty` & `o_dynamic_snippet_empty`: for new snippets created in 18.0. Remark: the `s_dynamic_empty` class was introduced by mistake and does not have any associated CSS Since only `o_dynamic_snippet_empty` has `display: none` in CSS, the interaction flow became inconsistent (starting from 18.2): snippets were initially visible, then hidden if no content was found... which caused the flickering behavior described above. And because of [B], old snippets with the `o_dynamic_empty` class will be visible by default in 18.0. This commit restores the intended (and original) behavior: - A dynamic snippet should be invisible by default, - Then the interaction decides (based on actual content) whether the snippet should be displayed. [1]: https://github.com/odoo/odoo/commit/63def9c87305dd7773e0592a28fe19d0b63c0878 [2]: https://github.com/odoo/odoo/commit/76cf201e1fc356ad00b27bcdec408c54949df33b [3]: https://github.com/odoo/upgrade/commit/af5821d9aeb75d09653fc33f14e98fae5f5ba906 opw-5354523 Forward-Port-Of: odoo/odoo#240036 Forward-Port-Of: odoo/odoo#238305