Friday, January 2, 2026
8 changes · saas-18.2
Enhancements to existing features
This update adds a helpful link within the Accounting Settings to Odoo's documentation on Deferred Expenses and Revenue management. This provides users with immediate access to detailed information and best practices for handling these complex accounting scenarios, improving overall accuracy and compliance.
Original PR description
In the Accounting Settings, add a "?" icon that points at the Odoo documentation on Deferred Expenses and Revenue management. task-5418388 Forward-Port-Of: odoo/enterprise#103090
Resolved issues and error corrections
This update fixes an issue where removing an icon from a paragraph would leave it empty and unusable. The change ensures that paragraphs remain editable and functional after icon removal, improving the user experience. It also addresses a problem where pressing 'Enter' wouldn't work correctly before an icon, now correctly inserting a new line.
Original PR description
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that…
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that icon during the delete process does not trigger `fillEmpty`. As a result, the paragraph ends up with no content, leaving it empty and unreachable. Solution: - During the delete process, after the icon is removed, call the `fillEmpty` method. This ensures that if the block becomes empty, a `<br>` is inserted inside the paragraph, keeping it accessible. **Issue 2:** Steps to reproduce - Insert an icon in an empty paragraph. - Place the cursor before the icon. - Press Enter. - Nothing happens. Cause - When the cursor is placed before a `contenteditable=false` element, `getDeepRange` sets the selection deep inside the non-editable element as a result, when Enter is pressed, the action is ignored because the selection is not in an editable context. Solution - Instead of setting the selection inside `getDeepRange`, set the selection after calling `getDeepRange` only if the returned range is not within a `contenteditable=false` element. task-3540454 Forward-Port-Of: odoo/odoo#241125 Forward-Port-Of: odoo/odoo#237891
This update resolves a problem where the MRP planning runbot would incorrectly show as red on weekends due to the absence of work intervals. The fix now allows for planning on Fridays, ensuring accurate runbot status. Additionally, the test performance has been significantly improved by reducing the planning timeframe to 2 weeks, speeding up test execution.
Original PR description
overlook of https://github.com/odoo/odoo/pull/239717 ### Before this commit: Runbot was red on weekends, as there are no work intervals on weekends. ### After this commit: Use Friday as a fallback on…
overlook of https://github.com/odoo/odoo/pull/239717
### Before this commit:
Runbot was red on weekends, as there are no work intervals on weekends.
### After this commit:
Use Friday as a fallback on weekends. In addition, improve the test performance by mocking the total number of weeks of planning to 2 instead of 50 (before: 6s, after: 1s).
runbot-237575
---
Note: ran the test for the next 5 years, and it works :+1:
```diff
diff --git a/addons/mrp/tests/test_bom.py b/addons/mrp/tests/test_bom.py
index 7acf19e89add..bfadc8e487c1 100644
--- a/addons/mrp/tests/test_bom.py
+++ b/addons/mrp/tests/test_bom.py
@@ -13,6 +13,7 @@ from odoo.tests.common import HttpCase, tagged, freeze_time
from odoo.tools import float_compare, float_round, float_repr
+@tagged("-at_install", "post_install")
@freeze_time(fields.Date.today())
class TestBoM(TestMrpCommon):
@@ -963,6 +964,16 @@ class TestBoM(TestMrpCommon):
self.assertEqual(report_values['lines']['operations_time'], 15.0)
self.assertEqual(report_values['lines']['producible_qty'], 2)
+ def test_bom_report_planning_with_producible_qty_loop(self):
+ from datetime import date # noqa: PLC0415
+ start, stop = date.today(), date.fromisoformat("2031-01-01")
+ with freeze_time(start) as frozen_date:
+ for i in range((stop - start).days):
+ print("date:", str(date.today()))
+ with self.subTest(str(date.today())):
+ self.test_bom_report_planning_with_producible_qty()
+ frozen_date.tick(timedelta(days=1))
+
def test_21_bom_report_variant(self):
""" Test a sub BoM process with multiple variants.
BOM 1:
```
Forward-Port-Of: odoo/odoo#241582This update corrects a typo in the restaurant POS dashboard's sheet name and updates the labels for key scorecards to use 'Avg' instead of 'Total'. These changes ensure more accurate and understandable reporting for restaurant sales data.
Original PR description
Desired behavior after PR is merged:
- Fix typo in first sheet name: 'Dahsboard' -> 'Dashboard'.
- Rename scorecards to reflect average values:
- 'Total revenue per guest' -> 'Avg revenue per guest'.
- 'Total revenue per order' -> 'Avg revenue per order'.
Task: [5447108](https://www.odoo.com/odoo/project/2328/tasks/5447108)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241598This update fixes an issue where users couldn't download documents uploaded through the system. Now, a popover appears allowing direct download, and the editing toolbar is hidden for attachments, streamlining the download process. This enhances usability for accessing and sharing documents.
Original PR description
Before this commit: the document uploaded by /image cannot be downloaded on clicking. After this commit: we open a popover for document without the editing buttons. The user may download the document by clicking the link. Also the toolbar is hidden for attachments. task-3648796 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241572 Forward-Port-Of: odoo/odoo#236705
This update corrects a bug in the forum post form where fields were incorrectly marked as invalid, even after being populated. The change, triggered by a refactoring of widgets, resolved an issue with conditional highlighting. Users can now reliably see validation errors when required fields are missing, improving the overall forum experience.
Original PR description
Steps to reproduce =================== 1. Go to Forum. 2. Select any forum and Click on New Post. 3. Add a title and keep description empty. 4. Post Your Question. => The title is marked as invalid. 6. Now add a description. 7. Post Your Question. => Both the title and description are marked as invalid, yet form is submitted successfully. After commit [1], refactoring public widgets to Interactions, the `is-invalid` class toggle for forum post title and description used an incorrect condition, leading to improper highlighting of these fields. [1] https://github.com/odoo/odoo/commit/22e777c046521f3f89b62caa5876680beb7f5aba Task-5400394
A recent update prevented users without Point of Sale or Inventory permissions from deleting contacts. This was due to a restriction in the system's ability to unlink contacts from related sales orders. This change ensures that only authorized users can modify contact information within the Point of Sale module, enhancing data security and preventing accidental or unauthorized deletions.
Original PR description
Versions affected 18 (and any where the fw port has been deployed) A user with no point of sale or inventory permissions wouldn't be able to delete contacts anymore since commit 082b7d3 Steps to reproduce: - In runbot, strip demo user permissions so he doesn't have inventory or point of sale access. - Go to a contact and try to delete it. - An **Access Error** error raises, as that user doesn't have `pos.order` permissions and the new unlink check is trying to check if the partner has related orders. (anyway, maybe the right approach would be to set an `ondelete='restrict'` in the `partner_id` field of `pos.order`) cc @moduon MT-12281 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232376
This update resolves a technical issue where a key module, l10n_br_edi_sale_fiscal_reform, wasn't explicitly linked to another important module, l10n_br_avatax_sale. This ensures proper functionality and stability of the Brazilian e-commerce features within Odoo Enterprise.
Original PR description
l10n_br_edi_sale_fiscal_reform depends on l10n_br_edi_sale, which depends on both l10n_br_edi and sale, but not explicitly on l10n_br_avatax_sale. runbot-exception-762 [runbot-error-237690](https://runbot.odoo.com/odoo/runbot.build.error/237690) Forward-Port-Of: odoo/enterprise#103117