Wednesday, August 6, 2025
16 changes · 18.0
Resolved issues and error corrections
Fixed an issue where long product purchase descriptions could overlap the table header when a purchase order PDF continued onto multiple pages. This makes printed purchase orders easier to read and avoids confusing or unprofessional document formatting.
Original PR description
**Steps to reproduce**: 1. Install the `purchase` module. 2. Go to a product's `Purchase` tab and add a long purchase description (approx. 40–45 lines). 3. Create a Purchase Order using this product.…
**Steps to reproduce**: 1. Install the `purchase` module. 2. Go to a product's `Purchase` tab and add a long purchase description (approx. 40–45 lines). 3. Create a Purchase Order using this product. 4. Print the PDF of the Purchase Order (via gear icon). **Observation**: The long product description overlaps with the table header when the table spans multiple pages in the generated PDF. **Issue**: wkhtmltopdf does not handle multi-page table headers properly by default. causing header/content overlap when the table breaks across pages. **Solution**: Apply a known wkhtmltopdf workaround by explicitly setting: `<thead style='display: table-row-group;'>` This ensures headers will not repeat same as sale order. ref(https://github.com/odoo/odoo/pull/53909) Before: <img width="1003" height="426" alt="image" src="https://github.com/user-attachments/assets/38b7b4de-ea81-445f-8cd2-ae164fcb7531" /> After: <img width="1000" height="414" alt="image" src="https://github.com/user-attachments/assets/ef09ef94-2a26-468a-b6e7-03d93b4515b8" /> opw-4908457
Portal users can now access marketing cards in the same way public users already could. This fixes an access issue that could prevent recipients, who are often customer or partner portal users, from viewing cards intended for them.
Original PR description
The access right that allows public users to read cards should obviously apply equaly to portal users. Recipients will very often be partners so them not being allowed is very annoying. task-5000332
The HTML editor now clears multiple text styles, such as size, color, and bold, with a single click. This avoids repeated user actions and makes document editing more predictable.
Original PR description
**Current behaviour before PR:** Steps to reproduce: - Select a text - Apply font size - Apply color - Apply bold - Clicking on removeFormat button doesn't remove all formats User has to click on removeFormat button twice to remove the format. **Desired behaviour after PR is merged:** Now, all formats are getting removed at once when clicking on removeFormat button. task-4911199 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The project stock workflow no longer opens an unavailable map view in the community edition. This prevents users from seeing an error when clicking the 'From WH' button from a project task, while leaving room for the enterprise edition to add the map view where supported.
Original PR description
* STEP TO REPRODUCE: go to task of a project, enable 'From WH' in top bar button. Click on it -> error because no map view * SOLUTION: in community version we should remove map view then in enterprise we can overide to add it 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
The Stripe documentation link in Point of Sale payment provider settings has been corrected. This helps users quickly access the right setup instructions and avoids confusion during payment configuration.
Original PR description
Before this commit: ---------------- - The Stripe documentation link in the POS payment provider configuration was broken, leading to a poor user experience. After this commit: ------------------------------- - The Stripe documentation link has been corrected to ensure proper access to setup instructions. Task - 4797691
Email template lists in the email composer now show only templates available to the current user or templates not assigned to anyone. This prevents users from seeing templates intended for other users, keeping the send-email workflow cleaner and more accurate.
Original PR description
**Steps to reproduce:** 1. Install Sales. 2. Create an email template for the 'sale.order' model and assign it to the admin user under the settings page in the 'User' field. 3. Log in as the demo user. 4. Create a quotation and click the 'Send by Email' button. 5. In the wizard, click the three dots between the attachment and AI logo in the footer. 6. Observe the templates list. **Issue:** - The template created for the admin user appears for the demo user as well. **Cause:** https://github.com/odoo/odoo/blob/07626050bd0104fecd8799b56d30245d00da3f27/addons/mail/static/src/core/web/mail_composer_template_selector.js#L31-L44 - The domain used to fetch templates was incorrectly filtering for templates assigned to any user (instead of filtering for templates assigned to the current user or not assigned at all). **Solution:** - Corrected the domain to include only templates assigned to the current user and not assigned to anyone. opw-4901492
The messaging menu now shows only the relevant empty-state message during quick search. Users searching for a conversation that does not exist will see “No thread found” without also seeing the general “No conversation yet” message, reducing confusion.
Original PR description
**Steps to reproduce:** - Open the messaging menu with 20+ threads (quick search btn shows on 20+ threads) - Dismiss (or install) the 'Install Odoo' notification - Dismiss (or allow) the 'Turn on notifications' notification - Use quick search to look for a thread that doesn't exist => Both 'No thread found.' and 'No conversation yet...' messages are displayed This happens due to an incorrectly handled condition. This PR ensures only the relevant message is shown: - 'No thread found.' is displayed when the search yields no results. - 'No conversation yet...' is shown only when the user has no threads at all. <img width="565" height="279" alt="image" src="https://github.com/user-attachments/assets/689bc007-dfb4-4041-8543-18bc4ad2e19d" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could block users from creating new work entries in the list view for French payroll. The system now handles missing start or end dates safely, making manual entry creation more reliable.
Original PR description
Currently, a traceback occurs when a user attempts to create a work entry in the list view. **To reproduce this issue:** 1) Install the `l10n_fr_hr_work_entry_holidays` module. 2) Switch to the `French` company and open the payroll. 3) Open the work entries in list view and try to create a new record. **Error:** ``` AttributeError: 'int' object has no attribute 'seconds' ``` **Cause:** By default, when creating a work entry through the list view, no `start` or `end` date is provided. This leads to the traceback originating from the following line when computing the duration. https://github.com/odoo/odoo/blob/84b15dc1f866e27d5c8a5fe3e457c2f982bcb133/addons/l10n_fr_hr_work_entry_holidays/models/hr_work_entry.py#L28-L32 **Solution:** Adding an extra check of the `start` and `end` date would resolve this issue. opw-4943104 Forward-Port-Of: odoo/odoo#220127
This fixes an internal automated test for Time Off that was failing because it relied on a fragile screen element lookup. The test was rewritten to check the same behavior more reliably, helping keep future updates moving without false failures.
Original PR description
The #217517 PR is causing a test failure on runbot.
The problem was due to use of ```$('.o_stat_info:contains("Time Off")')``` to get the element in tour.
To avoid unnecessary use of tour, the test is re-written.
runbot-230486
Forward-Port-Of: odoo/odoo#221706Fixes an issue in the HTML editor where starting to create a link and then clicking away could leave the link popover stuck open or cause it to reappear. This makes editing text smoother and prevents unfinished empty links from lingering after users cancel the action.
Original PR description
reproduction 18.0 and 18.1: 1. Go to the To-do app and type some text. 2. Select the typed text and click the Link button in the toolbar. 3. A link editing popover appears, without adding an href,…
reproduction 18.0 and 18.1: 1. Go to the To-do app and type some text. 2. Select the typed text and click the Link button in the toolbar. 3. A link editing popover appears, without adding an href, click anywhere outside the popover. 4. The popover does not close when clicking outside. And pressing Escape and clicking again in the editor, the popover reopens **Before this commit:** When creating a link from the toolbar, the link element is not padded with `feff` . This results in the selection remaining inside the link when clicking away and keeps the popover open. Pressing Escape only closes the popover but does not clean up the created link element. **After this commit:** We pad the newly created link element with `feff` when it is eligible for visual link isolation but not already padded. This ensures the padding is limited to newly created links. Additionally, when pressing Escape, we now clean up empty link elements after closing the popover. task-4948641 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where calendar events created from a contact could lose the intended link because an empty internal value was saved instead of the default contact. This helps ensure meetings remain correctly associated with the relevant contact when users create them from the calendar flow.
Original PR description
To reproduce:
=============
- Pick any contact
- Click on meeting
- Select the time for the meeting with that contact
- Click on more options
- Add a meeting and save
- Click on meeting & contact
Problem:
========
- When creating calendar events, res_id=0 is passed in vals_list
- Events are created with res_id=0 instead of using default value
Solution:
=========
- Add separate handling for res_id in vals_list processing
- Apply defaults.get('res_id') when vals.get('res_id') is falsy
opw-4892445
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#216042This fixes a timing issue that could affect invoice naming when processing Spanish Amazon sales. It helps ensure invoice references are handled correctly and reduces the risk of incorrect or prematurely locked invoice names.
Original PR description
Accessing `invoice_line_ids` was flushing and protecting `move_name` too early. runbot-162079
WhatsApp message previews now keep underscores in links instead of treating them as italic formatting. This prevents copied URLs from being altered, helping customers and users access the correct pages from WhatsApp messages.
Original PR description
To reproduce this error: 1- Send a message that has _ in whatsapp message e.g. http://example.com/my/orders/3?access_token=ab 2- Preview the message and copy the url into browser 3- As you see _ in the url is turning into italic symbol opw-4889978
This fixes an issue where hidden page data could still expose a product’s original list price when a zero-priced item was unavailable for sale. The change keeps those prices hidden for public visitors and search engines while preserving the intended editing behavior for website managers.
Original PR description
Versions
--------
- 17.0+
Steps
-----
1. Create a pricelist setting product prices to zero;
2. configure website to make zero-priced products unavailable for sale;
3. go to /shop as a public user;
4. open the product page of a zero-priced product;
5. open the browser console;
6. use `document.querySelector('.css_non_editable_mode_hidden .oe_currency_value')`
Issue
-----
The query returns an element with the product's original list price.
Cause
-----
In `website_sale`, this element is part of a `t-if` that only gets rendered when `editable` is `True`. A `website_sale_renting` override changes the conditional to `not combination_info.get('is_rental')`.
Solution
--------
Instead of replacing the `t-if` attribute in the override, add `and not combination_info.get('is_rental')` to it, ensuring it remains hidden outside of editable mode.
opw-4865141
Forward-Port-Of: odoo/enterprise#91112Urban Piper menu synchronization now sends a DoorDash-compatible selection limit for multi-checkbox product options. This prevents checkbox-style options from appearing as single-choice radio buttons, helping restaurants present menus accurately on DoorDash.
Original PR description
Steps: - Configure urban piper in pos.config - Select products that has attribute and its type is multi-checkbox - Sync menu. Issue: - For Doordash multi-checkbox appears as radio instead of checkbox. Cause: - max_selectable is -1 which is not supported by Doordash. Fix: - Send static value as 30 instead of -1. task- 4971545
Searching for loans in the Loan Analysis view now uses the correct loan field, preventing an error message from appearing. This helps users find loan records reliably without interruptions.
Original PR description
Behaviour before this commit: While searching for 'Loan' in the Loan Analysis view, a traceback appears since the filter_domain for the search is on `name` but `name` is not present in account.loan.line, instead it is `loan_name`. Desired behaviour after this commit: The filter_domain for 'Loan' is updated to search for `loan_name` instead of `loan`, and domain for `display_name` is removed. TaskID:4991369