Friday, January 2, 2026
11 changes · saas-18.4
Resolved issues and error corrections
This update fixes an issue where paragraphs would become unusable after removing an icon. The change ensures that paragraphs remain editable and accessible, regardless of whether an icon was previously present. It addresses a bug related to how the editor handles empty paragraphs and icon deletion.
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 corrects a technical error that prevented the system from properly updating SSL certificate status. The fix ensures the system correctly handles date/time information, preventing a data conversion issue that was causing errors. This improves the reliability of certificate management processes.
Original PR description
Currently an error occurs when the `iot/box/update_certificate_status` controller tries to write `ssl_certificate_end_date` as `cert.not_valid_after_utc`. Error: `ValueError: unconverted data remains: +00:00` This is because when we convert `cert.not_valid_after_utc` to a string, it will convert the UTC date as ` "2026-03-08 13:06:39+00:00"` and while the system converts this string date with +00:00, it will throw an error. This commit fixes the issue by using a `timezone-naive` value derived from `cert.not_valid_after_utc`. Applying `replace(tzinfo=None)` removes the `+00:00` timezone information and converts the datetime to a `timezone-naive` object. sentry-7016111455 Forward-Port-Of: odoo/odoo#241592
This update resolves an issue where the 'Jump to Present' button in non-aside chatter was unreliable, causing flickering and incorrect scroll positioning. By disabling a browser feature that interfered with scrolling, the button now consistently directs users to the latest message without disruption.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ In non-aside chatter, the **Jump to Present** action did not work reliably. When users clicked it, the…
**Description of the issue this PR addresses:** ------------------------------------------------ In non-aside chatter, the **Jump to Present** action did not work reliably. When users clicked it, the view flickered and the scroll position jumped back, preventing users from reaching the latest message. This happened because the browser’s native scroll anchoring interfered with the scroll-to-bottom behavior when messages were reloaded. **Current behavior before PR:** --------------------------------- - In non-aside chatter, clicking **Jump to Present** caused flickering. - The view jumped back instead of staying on the latest message. - Users could not reliably reach the most recent messages. **Desired behavior after PR is merged:** ----------------------------------------- - Clicking **Jump to Present** in non-aside chatter scrolls directly to the latest message without flickering. - The scroll position remains stable and does not jump back. - The **Jump to Present** button works consistently. **Task:** 5264332 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue within the web_studio module, specifically related to how report variables are handled. The fix ensures that the correct data is used when generating reports, leading to more reliable and accurate report output. This improves the overall stability and functionality of the report editor.
Original PR description
Issue: getQwebVariables returns isEditingFooterHeader, but isInHeaderFooter was read from it Cause of the issue: e2eed2b71647de29905bcc1a40c3c540d2a87e47 Forward-Port-Of: odoo/enterprise#102829 Forward-Port-Of: odoo/enterprise#102543
This update resolves an error that occurred when users attempted to pay invoices with payment terms having multiple due dates. The fix ensures the system correctly handles invoices with missing due dates, preventing a 'date' vs. 'boolean' error and allowing payments to proceed smoothly. This improves the reliability of the invoicing process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241744 Forward-Port-Of: odoo/odoo#241060
This update fixes an issue where users without Point of Sale or Inventory permissions were blocked from deleting contacts. A recent change introduced an access error due to a check for related orders. This fix ensures that only authorized users can delete contacts, improving data security and preventing accidental data loss.
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 fixes a previous issue where users couldn't download documents uploaded through the system. Now, a popover appears with a download link, simplifying the process and removing the editing toolbar for attachments. This enhances usability and allows for quick document access.
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 ensures that changes to product descriptions are now correctly reflected in UrbanPiper during menu synchronization. Previously, updates to product descriptions weren't consistently propagated, leading to outdated information. This fix improves the accuracy of menu data for our UrbanPiper integration.
Original PR description
Before this commit: --- When we sync the menu with the product description and later update the product description, re-syncing the menu does not update the product description in UrbanPiper. After this commit: --- This fix ensures that any change in the product description is properly sent to UrbanPiper during menu synchronization. task-5439271 Forward-Port-Of: odoo/enterprise#102946 Forward-Port-Of: odoo/enterprise#102846
This update fixes a recurring test failure in the MRP planning module. The change makes the test more robust by directly creating planning data instead of relying on calculations, ensuring consistent results. This improves the overall stability and reliability of the Odoo system.
Original PR description
Before this commit: Introduced in https://github.com/odoo/odoo/commit/d06dcfbca96273b540c87252b9188603879ac1b4, the test was failing on runbot in some cases. The issue is deterministic, but requires a specific set of modules installed to fail. After this commit: Use a more robust approach in the test, by creating the leave manually instead of computing the number of operations needed. runbot-234638 Forward-Port-Of: odoo/odoo#241175 Forward-Port-Of: odoo/odoo#239717
This update resolves a technical issue where a key module, l10n_br_edi_sale_fiscal_reform, lacked a direct dependency on another important module, l10n_br_avatax_sale. This change ensures proper functionality and stability of the Brazilian Electronic Invoicing (EDI) sales process within Odoo Enterprise. The fix was automatically triggered by our testing system.
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
This update corrects a typo in the dashboard's sheet name and updates the displayed metrics to use average values instead of totals. These changes ensure the restaurant dashboard provides more accurate and understandable reporting on key performance indicators.
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#241838
Forward-Port-Of: odoo/odoo#241598