Tuesday, September 23, 2025
32 changes · 19.0
Resolved issues and error corrections
Fixed an issue in the HTML editor that could cause an error when users changed a linked to-do item between numbered and bulleted lists. This improves editing reliability and prevents interruptions while formatting content.
Original PR description
Steps to Reproduce: 1. Go to To-Do 2. Create a link 3. Select all using Ctrl + A 4. Switch to order list and then unordered list. 5. Traceback occurs Description of the issue: - This issue occurs because a feff (zero-width no-break space) character is present inside the link. When the link is inside a list and the list type is changed, the `removeFEFF` method is triggered. `removeFEFF` removes the feff characters, but the selection is preserved based on positions from when those feffs were still present inside the link. As a result, after the list type is changed, restoring the selection causes a traceback. Solution: - Triggered `clean_handlers` before preserving the selection. This ensures feff characters are removed from the link before the selection is preserved, preventing invalid selection offsets and avoiding the traceback. task-5095561 Forward-Port-Of: odoo/odoo#227680
This update corrects how default email recipients are selected in Accounting communications. It helps ensure accounting-related emails are addressed to the right partners, reducing manual corrections and potential communication mistakes.
Original PR description
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
Opening Studio from a project dashboard no longer triggers an error when there are no project update records yet. This prevents a disruptive crash during project configuration and keeps the setup flow working as expected.
Original PR description
An error currently occurs when opening the studio view. Steps to reproduce: --- - Install `Project` and `web_studio` - Project > Configuration > Projects > Create a New Project - Click on the `Dashboard` button > Open studio view - Error in terminal Traceback: --- `TypeError: object of type 'bool' has no len()` This error occurs because `project.update` doesn’t have any records. When opening the studio view, at [1] it tries to compute the record’s name, which is `False`, and `False` has no length. [1]- https://github.com/odoo/odoo/blob/e0322e2cbc16d2405e66f3b16cbabeac2ad265e7/addons/project/models/project_update.py#L80 sentry-6830573412 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225070
This fix updates an automated test so it enables the discount and pricelist settings it needs before checking order calculations. It helps prevent false failures in validation systems when only the Sales app is installed, improving release reliability without changing customer-facing behavior.
Original PR description
This commit fix runbot issue cause by PR https://github.com/odoo/odoo/pull/226859 to compute discount depending on pricelist. Cause: - In subscription discount and pricelist are default enable that allow discount to compute properly and set it to 0 but when only sale is installed test was breaking because non of the condition was enabled require to compute discount properly. Fix: - Enabled discount and pricelist feature in testcase to compute discount properly runbot-232685 Forward-Port-Of: odoo/odoo#227706
The Live Chat channel screen no longer shows a misleading -1 rating percentage when no customer ratings have been received. This keeps reporting clearer for administrators by only displaying satisfaction percentages once at least one valid rating exists.
Original PR description
**Steps to reproduce:** - Install website_livechat - Initiate a conversation from the visitor's side - Close the conversation without providing a rating - Log in as 'Admin' - Go to Live Chat - Open the form view of the default channel **Current behavior before PR:** The stat button displays the `rating_percentage_satisfaction` field as -1, which is a fallback value used when there are no ratings. **Desired behavior after PR is merged:** The `rating_percentage_satisfaction` field is only displayed when we have received at least 1 valid rating. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents an error when a Chilean company imports the same DTE XML file more than once. Users now receive the intended message instead of encountering a system traceback, improving reliability during electronic document processing.
Original PR description
### Steps to reproduce: - Install 'l10n_cl_edi' and switch to a Chilean company - Import twice the same DTE XML file. ### Cause: This [commit](https://github.com/odoo/enterprise/commit/42744fcecdbd36ea0101070c68299227a9f204a6) forgot to add the `_()` method to format the message. As `append()` only needs one argument but two are given, there is a traceback. opw-5080094 Forward-Port-Of: odoo/enterprise#94929
This fixes an internal test setup for the email campaign editor so it uses a lighter helper that is available in the relevant testing bundle. It helps keep automated checks reliable when the app is tested on its own, reducing the risk of false failures during development.
Original PR description
The full editor helpers require hoot to be loaded and it's not loaded in the assets bundle used for mailing_editor_theme.js. There is a more lightweight file that exists solely to expose `setSelection` which does not require hoot. runbot-232630
Timesheet reports printed from a sales order now include the helpdesk ticket name alongside the helpdesk team. This makes billed support work easier to identify and verify for customers and internal teams.
Original PR description
to reproduce: ============= 1. make helpdesk team billable and records timesheets 2. create a helpdesk ticket and link it to a sale order 3. log timesheets on the ticket 4. print the timesheet report…
to reproduce: ============= 1. make helpdesk team billable and records timesheets 2. create a helpdesk ticket and link it to a sale order 3. log timesheets on the ticket 4. print the timesheet report **from the sale order** -> the task column will contain only the helpdesk team name, while it should contain "helpdesk team / ticket name" Problem: ======== in helpdesk_timesheet we inherit `hr_timesheet.timesheet_table` to adapt it to helpdesk tickets, but we use `show_ticket` to display the ticket name, which is only set in `hr_timesheet.report_timesheet` and `hr_timesheet.timesheet_project_task_page` but not in `sale_timesheet.timesheet_sale_page` which is the one used when printing the report from the sale order. Solution: ========= `show_ticket` should be set with value `bool(lines.helpdesk_ticket_id)` which is equivalent to `line.helpdesk_ticket_id` in the t-if condition. so we can directly use `line.helpdesk_ticket_id` and remove the `show_ticket` variable. opw-5002650 Forward-Port-Of: odoo/enterprise#95179
This update fixes a date used in product margin testing, helping ensure the module’s automated checks remain accurate and stable. It reduces the chance of false test failures without changing everyday user functionality.
Original PR description
runbot-230719 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227210 Forward-Port-Of: odoo/odoo#226089
This fix corrects small visual alignment issues in the spreadsheet top bar, including filter badges and collaborator avatars. The change makes the interface look cleaner and more consistent without changing how users work with spreadsheets.
Original PR description
- the global fitler badge was slightly misaligned - the user avatars in the collaborative status had a border created by a padding with a background color. We should use an a actual border instead, as the padding had a decimal value leading to the items inside looking slightly misaligned. Borders don't have this issue, as they are rounded to the nearest pixel. Task: [5086022](https://www.odoo.com/odoo/2328/tasks/5086022)
This update removes obsolete AI-related code paths that referenced functionality already removed elsewhere. It helps reduce errors and maintenance overhead without changing active user-facing features.
Original PR description
Methods like **_ai_submit_to_model**, **_ai_add_message_to_context**, and **_ai_create_response** have been removed, along with the route **/ai/generate_w_composer**, from this [commit] [commit]: https://github.com/odoo/enterprise/commit/f8b9d475c0f19e5746ec47fe535c2030d117b534#diff-292213f329cde8a43c2882d1a0a972016a2fccb2f467fc79b196ebc2ae00f681L133-L191 In this commit, we are removing the method where the route and the referenced methods are called. sentry-6685514254
The website search suggestion menu now opens on the side of the search bar with the most available room. This prevents the menu from appearing cramped or partially hidden when users zoom in or use a shorter browser window, improving shopping search usability.
Original PR description
Scenario: - go to /shop - increase zoom to 175% (or decrease height of window) - search "a" and let the suggestions dropdown open Result: the dropdwon menu is shown on top of the search bar, where…
Scenario: - go to /shop - increase zoom to 175% (or decrease height of window) - search "a" and let the suggestions dropdown open Result: the dropdwon menu is shown on top of the search bar, where there is the less space available. Cause: When the dropdown doesn't fit fully in the viewport below the searchbar it is always added on top even if there is less space available. The code was added in 15.0 62c265ee7d7cf36db01bf6a95b2c5ea9843ba2d3 with the intent of putting the dropdown on the top if it increased the page height when putting it below (eg. when we put a search bar in the footer). But in saas-18.2 refactoring (b9b3a605e0f4c5da3a258c980107d6162da7f44f), the code was rewritten and now: - the dropdown has a scroll bar if it is too big to fit on viewport - if the dropdown doesn't fit fully below the searchbar in the viewport, it is placed above the searchbar even if there is less space Fix: place the dropdown below the searchbar if there is more space below than above. opw-5019685 Forward-Port-Of: odoo/odoo#225220
A test for printing the planning calendar was corrected so it no longer triggers an invalid extra action during automated checks. This helps keep the planning feature's quality checks reliable without changing day-to-day user behavior.
Original PR description
This commit's purpose is to fix the planning calendar print test. Source of the issue: the empty dict that the mockrpc returns is evaluated as a truthy value and leads to an extra execute of the doAction function with an invalid value. Solution: Return false instead of an empty dict task-5079063
The payslip form now hides the warnings area when there are no issues to display. This removes unnecessary blank space and makes the payroll screen cleaner for users.
Original PR description
Before this change, the `issues` field was always rendered on the payslip form, even when there were no warnings to display. This resulted in unnecessary empty space being shown in the UI. task-5071223
The automated test for sales planning was updated to reflect a recent change in the planning calendar workflow. This helps ensure the scheduling dialog opens correctly and reduces the risk of future issues going unnoticed.
Original PR description
Before this commit, the multi-create feature has been added to the gantt view of planning but the tour testing the planning gantt view has not been adapted accordingly. This commit adds a new step to make sure the plan dialog is opened as expected. runbot-error-230670
Fixed an issue where creating a payslip could fail when an employee payroll property was set to zero. Payroll teams can now use zero values on employee records without blocking payslip generation or overriding payslip-specific values.
Original PR description
Reproduce: 1. Create a salary rule based on a salary input and make it available for both employee and payslip. 2. Configure the input on both employee and payslip. 3. Set the property value to zero on the employee form and give it a value on the payslip. 4. Try to create a new payslip for this employee. Issue: `dict(payslip.version_id.payroll_properties)` does not return the property if its value is zero. Fix: Use `version_properties.get(key, 0)` to avoid the KeyError. Task: 5082135
This update adds or adjusts automated checks for Spain's Modelo 130 tax report to help ensure the report remains reliable. It reduces the risk of regressions in Spanish tax reporting after future changes.
Original PR description
opw-4933241 Forward-Port-Of: odoo/enterprise#94251 Forward-Port-Of: odoo/enterprise#90044
The Spanish Modelo 130 report now uses an end-date selection instead of a date range. This prevents users from expecting only a selected range while the report correctly calculates from the start of the fiscal period, reducing confusion in tax reporting.
Original PR description
Currently mod130 report is configured to compute from the beginning of the fiscal period, however the date filter widget is in range mode. This means that when a user open the report and select a date range, the entries will not be just in the selected range but span from the beginning of the fiscal year to the end of the range, creating confusion. We should disable filter date range, so the date widget allow to set an end date to the current period Enterprise PR: https://github.com/odoo/enterprise/pull/90044 opw-4933241 Forward-Port-Of: odoo/odoo#226177 Forward-Port-Of: odoo/odoo#218544
The update ensures e-invoice action buttons appear only on the relevant sales or purchase journals. This reduces confusion for users by hiding refresh or fetch options where they do not apply, especially when Peppol self-billing is enabled.
Original PR description
At the moment: - If the `peppol_activate_self_billing_sending` field is set on the company, both the `show_refresh_out_einvoices_status_button` and the `show_fetch_einvoices_button` fields are set on sale and purchase journals. After this commit: - The `show_refresh_out_einvoices_status_button` should be shown only on sale journals, and on self-billing purchase journals if the `peppol_activate_self_billing_sending` field is set. - The `show_fetch_in_einvoices_button` should be shown only on non-self- billing purchase journals. task-none
This fixes a Website Editor issue where the Cover Image option could stay hidden after changing a blog snippet back to showing a single item. Editors can now reliably toggle snippet settings without losing access to the cover image control.
Original PR description
Steps to reproduce: 1. Open Website Editor and drop a single aside blog snippet. 2. Change the Fetched Elements option to > 1. - The Cover Image option disappears (expected). 3. Change the Fetched Elements option back to 1. - The Cover Image option stays hidden (unexpected). Issue: The Cover Image option visibility is managed by useDomState. In dynamic snippets, the core snippet is rendered by an Interaction, while options are rendered before the Interaction starts. Since useDomState observed the element before the Interaction rendered the final one, the option visibility became desynchronized. Fix: Use the `isSingleMode` state to ensure the Cover Image option remains in sync when toggling between 1 and >1 fetched elements. 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
Creating a milestone from a Sales Order now keeps the correct project selected, preventing an error during milestone setup. This helps sales and project teams use milestone-based service products without manual workarounds.
Original PR description
**Steps to reproduce:** Create a service product with invoicing policy set to Based on milestones. Create and confirm a Sales Order with this product. Open the Sales Order and click on the Milestones stat button. In the milestones list view, click New to create a milestone. **Cause:** The default logic that was supposed to select the default project from context or active_id so it used the active_id which is Sales Order ID. **Issue:** When creating a milestone from a Sales Order, the project was not set correctly, which caused an error. **Fix:** Add the project_id field in list view to avoide default method call. task-5090316 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227491
Product packaging options are now shown even when a product has no variants, as long as it offers multiple units of measure. This helps shoppers see available packaging choices more consistently on the website product page.
Original PR description
Packaging options was only viewable if a product had variants. Modify condition to view product packaging when it has multiple uoms. opw-5104189 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where receipt links for downloading invoices could fail because ticket numbers were required to be too long. The point of sale now accepts shorter ticket numbers again, helping customers and staff access invoices from receipts reliably.
Original PR description
- Since this PR (https://github.com/odoo/odoo/pull/222261) the minimum length of the Ticket Number (pos_reference) has been set to 12 characters. This was causing issues when trying to download invoices with the link on the receipt. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Planning now correctly calculates weekly progress for flexible employee shifts that span across two weeks. This prevents the current week from showing hours that belong to the following week, making workload tracking more reliable.
Original PR description
### Steps to reproduce: - Install Planning app - Create a shift for a flexible employee that starts on Friday and end on the following Tuesday for example - Go to the gantt view for the week that the shift should start at - Notice the progress bar is showing the whole allocated hours not just the week's hours ### Cause: This mainly happening because when the employee is flexible we are getting the value by multiplying the hours_per_day of his schedule by the period.days and the period is the shift period ### Fix: We use the interval we are just checking as the period now so if the shift is extended to the next week we are just going to use the end of the week as the interval end not the shift's end_datetime opw-5022800 Forward-Port-Of: odoo/enterprise#95199 Forward-Port-Of: odoo/enterprise#93404
The HTML editor now correctly allows users to replace Odoo, brand, regular, and duotone icons with standard Font Awesome icons. This fixes a limitation in content editing, making icon customization more reliable for website and document editors.
Original PR description
Description of the issue this PR addresses: Before this PR, It wasn't possible to replace Odoo icon (oi) or Font Awesome duotone (fad), brand (fab), and regular (far) icons to a font awesome (fa) icon. This PR adds support replace such icons to fa icons. task-4972193 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Bank synchronization now avoids sending an extra payment identifier unless the related payment standard module is installed. This prevents failures for companies using Odoo’s online banking connection without that optional module.
Original PR description
Odoofin always give the 'end_to_end_uuid' info. But it's a field that is only defined in account_iso20022. So we should not give this field in the create if the module is not installed.
Survey invitation emails now correctly update their subject line when a different or edited email template is selected. This prevents outdated subjects from being sent and helps teams keep survey communications consistent with their chosen templates.
Original PR description
Description of the issue/feature this PR addresses: Fixed [previous commit] where the subject doesn't update when the template was updated. This was due to a filter in place preventing this from happening. Steps to reproduce on runbot: 1. Go to mail templates and search for Survey 2. Open the Survey: Invite template 3. Update the subject on this template 4. Open the Surveys app and select any survey 5. Click on Share and then enable send by email 6. Change the template being used 6. The subject will stay the same [previous commit]: https://github.com/odoo/odoo/commit/16a2c28c9aec307f7ce9dbed0a660b512db31f3a opw-4654411 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227460 Forward-Port-Of: odoo/odoo#221049
Fixed an issue where notification messages with both a title and formatted content could display raw HTML instead of the intended button or styling. This improves clarity for users seeing alerts such as CRM enrichment credit warnings.
Original PR description
This commit fixes the notification's rendering issue when both message and title are provided. Before, the message's HTML was escaped even if marked as safe with `markup`. Steps to reproduce: - Open CRM app - Open a lead - Click on "Enrich" button => a notification appears "Not enough credits" but the button's html is not properly rendered (escaped). task-5088945
Fixes a problem that caused an error when users tried to translate a message from the mobile chatter action menu. This makes message translation work reliably on mobile, improving usability for multilingual users.
Original PR description
Steps to reproduce: - Open any chatter with a message on mobile - Try to translate the message using the Translate mobile action => Throws traceback This happens because the component here is `MessageActionMenuMobile` instead of `Message`, and MessageActionMenuMobile does not have the `onClickToggleTranslation` method. This PR fixes the issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227902 Forward-Port-Of: odoo/odoo#223567
The website generator help page now points users to the correct support contact instead of an incorrect email address. This helps customers reach the right support channel and reduces confusion when they need assistance.
Original PR description
Changing wrong email into the support /help page. Task: odoo.com/odoo/project.task/5100049?menu_id=4720
Long custom out-of-stock messages on product pages now wrap within their display box instead of spilling outside it at narrower screen widths. This keeps product availability information readable and preserves a cleaner shopping experience for customers.
Original PR description
When the Out-of-Stock message contains a long string of text at certain screen sizes, the text is longer than the parent div Steps to reproduce -------------------- 1. Have a tracked product with Continue Selling off and a long custom Out-of-Stock Message. 2. View the product shop page on the website. 3. Reduce the horizontal screen size until the text goes over the edge of the parent div(red rounded box). Cause ----- No CSS to handle when the text is longer than the parent element. Solution -------- Add text-wrap to parent div so the child element text wraps when necessary. opw-5056843 Forward-Port-Of: odoo/odoo#227010
Fixes a crash that occurred when users selected Add GIFs from the More Actions menu in chat. The GIF picker now opens correctly, including when no GIF service API key is configured, helping users continue composing messages without interruption.
Original PR description
**Description of the issue this PR addresses:** Traceback on clicking `Add GIFs` from more actions **Steps to reproduce:** - Open a Chat Window and click on `+` More Actions. - Select the Add GIFs option. **Desired behavior after PR is merged:** This PR ensures that the Add GIFs option is accessible from More Actions. If no API key is configured, the picker now opens the popover as expected instead of crashing. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr