Tuesday, December 23, 2025
12 changes · saas-18.4
Resolved issues and error corrections
This update resolves an error that occurred when users attempted to send customer statements. The fix ensures the system correctly handles scenarios where a custom email template isn't used, defaulting to the current user's email address to prevent a technical error.
Original PR description
Currently, an error occurs when a user sends a customer statement. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1soOylzCVnNCNsWUBizeBQ9vfFlI5pzSP/view)):** - Install the…
Currently, an error occurs when a user sends a customer statement. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1soOylzCVnNCNsWUBizeBQ9vfFlI5pzSP/view)):** - Install the `account_reports` module. - Go to `Invoicing` > `Customers` > `Customers`. - Switch to `List view`, select `a customer`, then click on `Actions` > `Open Customer Statements`. - Click `Send`, remove the `Email Template`, add a `subject`, and then click `Print & Send`. **Error:** `ValueError: Expected singleton: mail.template()` After [this commit], which checks whether the template has an email_from, when a user sends the customer statement and removes the email template, it still tries to access the template to fetch email_from for a particular customer [1]. If no email template is used, this results in an error [2] when going to extract the email_from. This commit ensures that email_from is taken from the email template if one is used; otherwise, it uses the current user's email address [3], which matches the default behavior. [this commit]: https://github.com/odoo/enterprise/commit/22c46e4f63e7b2dc0eee16fc807656cd4de21fb7 [1]- https://github.com/odoo/enterprise/blob/dc4d5633407ccc728d30de5ce2072a80c16b2766/account_reports/wizard/account_report_send.py#L246 [2]: https://github.com/odoo/odoo/blob/0dabb221225fba96c0e55779afadd9f12b369777/addons/mail/models/mail_render_mixin.py#L691-L693 [3]: https://github.com/odoo/odoo/blob/0dabb221225fba96c0e55779afadd9f12b369777/addons/mail/models/mail_thread.py#L2891-L2892 sentry-7106576491 Forward-Port-Of: odoo/enterprise#102532 Forward-Port-Of: odoo/enterprise#102219
This update resolves a visual issue where the Sales 3 menu on the website would overflow when certain items were added. The fix prevents the parent element from overflowing, ensuring the menu displays correctly and consistently. This improves the user experience for customers navigating the website.
Original PR description
Scenario: - edit the website navbar and set template "Sales - 3" (penultimate) - edit menu to add several menu items that will be larger than possible Result: the menu overflows Cause: a parent element of the menu doesn't overflow, so when computing autoHideMenu where we compute what overflow the list of menu, nothing overflows it since the overflow already happened in the limitless parent element. Fix: using CSS to prevent the parent from overflowing. opw-5178552 __pr note:__ this is happening in 17.0 but I'm targeting 18.0 since the ticket is in 18.0 and code is the same in 18.0 up to master. Forward-Port-Of: odoo/odoo#240433
This update resolves an issue where archived subtasks remained visible in the Kanban view, even with the 'Show Sub-Tasks' option disabled. The fix removes a previous setting that forced subtasks to be visible after archiving, aligning the system with the current 'Show/Hide Subtasks' toggle functionality. This ensures a cleaner and more intuitive user experience.
Original PR description
Steps to reproduce: - Install the Project app. - Create a task and a subtask under it. - Archive the subtask, then unarchive it. - Untoggle the Show Sub-Tasks Issue: Subtask remains visible in Kanban even when Show Sub-Tasks is untoggled. Cause: When a subtask is archived, the PR https://github.com/odoo/odoo/pull/148342 forces `display_in_project' to True Fix: Remove the logic that sets display_in_project to True on archived subtasks, since their visibility is now managed by the Show/Hide Subtasks toggle. task-5075134
This update fixes an issue where product attributes weren't displayed on order lines. The change ensures that all product attribute names are now correctly shown, providing a clearer view of order details for users. This improvement was made by updating how attribute information is constructed.
Original PR description
Before this commit: --- - When an order was placed with product attributes, the attribute details were not shown on the order line. After this commit: --- - The product attribute names are now correctly displayed on the order line. Cause: --- - Until saas-18.2, the attribute string was built using the product’s display name and `attribute_line_ids`, which only included never type PTAV entries. - Starting from saas-18.2, the attribute string is constructed solely from `attribute_line_ids`, which now includes all PTAVs. task-5244869 Forward-Port-Of: odoo/enterprise#99007
A recent test failure in the MRP work order module has been resolved. The issue stemmed from a miscount of analytic lines created during employee setup, triggered by a calendar entry with incorrect date settings. This fix ensures accurate accounting calculations for work orders.
Original PR description
fixing runbot error https://runbot.odoo.com/odoo/runbot.build.error/234639 on test test_mrp_analytic_account_employee_from_widget introduced by this PR https://github.com/odoo/enterprise/pull/85517
**cause of the error:**
Because there is a resource.calendar.leave without calendar_id,
without resource_id and at a date after today :
during the setupclass, when the employee is created,
_create_future_public_holidays_timesheets() creates an account.analytic.line.
So at the end of the test ,
self.env["account.analytic.line"].search([('employee_id', '=', self.employee1.id)])
returns 2 records instead of 1.
runbot-234639
Forward-Port-Of: odoo/enterprise#102338
Forward-Port-Of: odoo/enterprise#102282This update fixes a misleading error message displayed when deleting sale orders with associated appointments. Previously, users received an incorrect instruction to reduce order quantities. Now, the system correctly informs users that they must cancel the order before deletion, aligning with expected behavior and improving the user experience.
Original PR description
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed.…
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed. Solution: The order lines should not be manually unlinked from the sale order. It should be the bookings linked to the order lines that should be unlinked before the sale order deletion. Expected Behavior: When deleting a sale order whose lines have bookings, the following error message shoud be displayed: "You can not delete a sent quotation or a confirmed sales order. You must first cancel it." Current Behavior: When deleting a sale order whose lines have bookings, the following error message is displayed: "Once a sales order is confirmed, you can't remove one of its lines (we need to track if something gets invoiced or delivered). Set the quantity to 0 instead." Steps to reproduce on Runbot: 1. Install Appointments and ecommerce 2. For the dental care appointment, edit and enable "Up-front payment" 3. On the website, book an appointment for dental care and proceed to payment 4. Delete the sale order with the booking 5. Observe the incorrect error message being displayed opw-5092349 Forward-Port-Of: odoo/enterprise#100371
This update prevents guest users from seeing the unpin button in the message panel, resolving a confusing user experience. Previously, guests could interact with a button that didn't work, leading to frustration. Now, the UI accurately reflects guest user permissions, ensuring a smoother and more intuitive experience.
Original PR description
**Description of the issue/feature this PR addresses:** ---------------------------------------------- Currently, guest users in PinnedMessagesPanel can see the unpin button on pinned messages, but…
**Description of the issue/feature this PR addresses:** ---------------------------------------------- Currently, guest users in PinnedMessagesPanel can see the unpin button on pinned messages, but the server correctly rejects their unpin requests. This creates confusion and a poor user experience where external users see functionality that doesn't work for them. **Current behavior before PR:** ---------------------------------------------- - Guest users see the unpin button on pinned messages - Clicking the unpin button results in server rejection - UI shows functionality that guest users cannot actually use **Desired behavior after PR is merged:** ---------------------------------------------- - Guest users cannot see the unpin button on pinned messages - Internal users continue to have full pin/unpin functionality - UI accurately reflects user permissions and capabilities - Better user experience with appropriate access control Task-5033295 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at https://www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240763 Forward-Port-Of: odoo/odoo#229211
This update resolves an issue where arrow keys didn't function correctly when adjusting range values (like intensity) in certain Odoo scroll effects. The fix replaces a flawed string-to-number conversion with a more accurate floating-point conversion, ensuring arrow keys now provide precise control over these ranges.
Original PR description
**Problem** Arrow-keys don't work properly on `BuilderRange` if the `step` value is fractional. **How to reproduce** The problem is present on every `BuilderRange` having fractional `step`. For example: snippet `s_parallax` -> set "Scroll Effect" to "Parallax to Top" -> "Intensity" range. **Why the problem happens** The method `BuilderRange.onKeydown` retrieves the range value as a string, converts it to a number using `parseInt`, and then adds or subtracts the step value. Of course, `parseInt` is inappropriate when the value is expected to be fractional. **Fix** `parseInt` has been replaced by `parseFloat`. task-5405036
This update fixes a bug where overlays disappeared after reloading the website editor. The change ensures that the plugin correctly cleans up its DOM elements, preventing the removal of newly created overlays. This improves the user experience when editing website templates.
Original PR description
Since [1], overlays are no longer visible after an operation that executes `reloadEditor`. Steps to reproduce: - On website, go into edit mode - Change header template - After reload, overlays are missing Reason: `WebsiteBuilderClientAction.reloadEditor` sets up the new `Editor` before the old one is destroyed. Consequently, `LocalOverlayPlugin.destroy` removes the newest overlays as well. This commit ensures the plugin only cleans up its specific DOM elements. The order of operations bug will be fixed in a later PR. task-5438306 [1]: https://github.com/odoo/odoo/commit/3cd29fbac2b06566bfff40b5e7ed310cb0ce12c1
This update fixes a calculation error that incorrectly displayed discounted prices for products sold through templates. Previously, the system miscalculated prices when a product was used as a template, resulting in inflated prices. This change ensures accurate discounted price calculations for all product types, including templates, improving pricing accuracy and customer satisfaction.
Original PR description
Steps to reproduce: 1- Add a product that has variants to a vendor pricelist. 2- Set the vendor's unit for this product to a one different than the product's unit. 3- Create an RFQ with from that vendor. 4- Open the catalog. Issue: `discounted_price` is miscalculated and causes wrong price calculation, it shows the price multiplied by its factor. i.e if a price of pack of 6 is 10$, it will be shown as 60$. Cause: We only check for `product_id` not for `product_tmpl_id` when computing the `price_discounted`, so if its a template, `product_id` is false, and its sent with `_compute_price()` and the same price is returned since there's no unit and after that its sent to `_get_product_price_and_data` where its converted to the new unit. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240519
This update fixes an issue where mobile users were seeing both purchase and sales taxes available when creating invoices. The fix copies the tax selection options from the standard desktop view, ensuring mobile users see the appropriate taxes based on their invoice type. This improves the user experience and accuracy of invoice creation on mobile devices.
Original PR description
Steps to reproduce ================== - Use a mobile viewport - Create an new invoice - Add an invoice line - Click on the Taxes field => Both purchase and sales taxes are available Solution ======== Copy the domain from the desktop list view https://github.com/odoo/odoo/blob/fcc677e900c2fccb9fa0bd88ef01c559cadfa08a/addons/account/views/account_move_views.xml#L1051-L1055 We also add the corresponding context and options opw-5124536 Forward-Port-Of: odoo/odoo#240116 Forward-Port-Of: odoo/odoo#237724
This update expands the functionality of the 'sign' process to align with the official itsme service coverage. Previously, it was limited to Belgium and the Netherlands, but now supports a wider range of countries as defined by itsme. This ensures compliance and a better user experience for customers utilizing the itsme authentication method.
Original PR description
Extend itsme availability beyond BE and NL to match the official itsme coverage: https://www.itsme-id.com/en-BE/business/coverage task-5424818 Forward-Port-Of: odoo/enterprise#102423