Tuesday, September 23, 2025
34 changes · master
Resolved issues and error corrections
This fix prevents an error when opening Studio from a newly created Project dashboard. It ensures the Project update view can load even when no update records exist, improving reliability for users configuring projects.
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 update corrects an internal automated test so it consistently handles discount and pricelist settings. It helps keep quality checks reliable when only the Sales app is installed, reducing false failures in development pipelines.
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
This update fixes an issue in the web interface framework used across Odoo screens. It helps keep the user experience stable and reduces the chance of interface problems for users.
Original PR description
test of fix owl
This fix makes an automated website shop test more stable by ensuring page elements are ready before the test continues. It also updates the test to match the current button wording, helping prevent false failures in quality checks.
Original PR description
The add_to_cart_snippet_tour was unstable due to race conditions. some steps executed before their target elements were actually present, causing failures in subsequent steps. This commit ensures the tour runs reliably by adding explicit wait conditions between the affected steps, so the elements are guaranteed to exist before moving on. In addition, the tour is updated to reflect the recent change where the button label was renamed from "Continue Shopping" to "Add to Cart" [1]. [1] https://github.com/odoo/odoo/commit/786c6c00701bcc30c1f2aa04d7fd9ee7bd4c511b#diff-5ac64dbfc12558f048e995a7d75f91d915161063741ddf36281062b273598a51 runbot-231474 Forward-Port-Of: odoo/odoo#227402
A flaky automated test section for purchase catalog suggestions was temporarily disabled to prevent inconsistent build failures. This helps keep development and release validation stable while the underlying suggestion behavior is being reworked separately.
Original PR description
Temporarily remove last part of suggest feature JS tour, which test record interactions as well as filter interactions. WHY: Non deterministic behavior, see: https://runbot.odoo.com/odoo/runbot.build.error/232708 https://runbot.odoo.com/odoo/runbot.build.error/231734 This was simply commented out because the logic, as well as the tour are being reworked in this PR https://github.com/odoo/odoo/pull/225721 task#4783508 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227682
Product images with non-square dimensions now keep their original proportions in the catalog view. This improves the visual presentation of quotations by showing product photos accurately instead of distorted.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have products with non-square images available for sale; 2. open a quotation; 3. open the product catalog. Issue ----- The product images appear stretched. Cause ----- Commit e8836b42200e3 replaced the `div.kanban_image` element with a `field` element using the `image` widget. It maintained the same size limit of 55x55 via the widget's options, but without additional input, this causes the widget to stretch the images to fill the area. Solution -------- Add the `object-fit-contain` as `img_class` to the options. This class contains the image to the area instead of stretching it. opw-5007629 Forward-Port-Of: odoo/odoo#225112
A test date in the product margin area was corrected to keep automated checks reliable. This helps prevent false failures in validation systems without changing day-to-day product margin features for users.
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 makes text selection in the website editor behave more predictably when users double-click links or triple-click buttons. It prevents accidentally selecting or replacing neighboring content, reducing editing mistakes while working with buttons and adjacent links.
Original PR description
Commit 1: Reproduction: 1. triple click in a button and input something 2. the whole button is replaced Before this commit: On triple click we select the whole block by default After this commit: For…
Commit 1: Reproduction: 1. triple click in a button and input something 2. the whole button is replaced Before this commit: On triple click we select the whole block by default After this commit: For buttons, when we triple click, we select the content of the button node Commit 2: [FIX] html_editor: limit word selecting of double click inside link Before this commit: when two links or buttons are next to each other without a space, double clicking the last word of the first link will spread the selection over the second link's first word. This is the default of browser's behavior. Reproduction: 1. create 2 links with different urls, one with label `test one`, second with `test two` 2. double click the `one` of the first link, the selection will spread to the second link. so `one` and `test` are both selected After this commit: We seperate the double click selection correction to the link plugin. Because now we have the selection properly set inside the link without including the feff characters, the previous fix of the selection isn't needed anymore. task-4897848 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226979 Forward-Port-Of: odoo/odoo#219278
Live Chat channel statistics now hide the satisfaction percentage until at least one valid rating has been received. This prevents users from seeing a misleading fallback value when no customer feedback exists yet.
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 Forward-Port-Of: odoo/odoo#228003
The website event page now identifies the correct event when titles use non-Latin characters such as Chinese. This prevents administrators from accidentally editing the wrong event and improves reliability for multilingual websites.
Original PR description
Issue: The Website Event page uses a matching regex to get the event id from the url. URLs are formatted like: '/event/[event-title]-[event-id]/register' The event-id is recovered from the url by matching on the first number that is not followed by a word character. However, for non-latin event titles (e.g. Chinese), the characters are converted using '%' characters and numbers (e.g. '%E6%88%91%E'). The regex consistently fails to get the event id in this case, and returns incorrect IDs. Steps to reproduce: 1. Install `website_event` and go to the website view of any event. 2. Edit the event, to add a Chinese title 3. Save, and try to edit again the same title. Solution: The regex is modified to look for the first number that is followed by either a "/" or the end of a String. opw-5038334 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224164
The website search suggestions dropdown now chooses the side of the search bar with the most available screen space. This prevents suggestions from appearing in a cramped area, improving usability for shoppers using high zoom levels or smaller browser windows.
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
Meeting screens no longer cover important pop-up dialogs, such as camera or microphone permission prompts. This helps users join calls smoothly without missing required confirmations or getting blocked by hidden dialogs.
Original PR description
The meeting view allows focusing on an ongoing call, removing any distraction with a full screen call view. To do so, the overlay service is used, and the call view takes the whole screen. However, other components, such as confirmation dialogs also use the overlay service. As a result, dialogs are sometimes hidden behind the meeting view. This commit ensures the meeting view won't hide other overlays by reducing it's z-index. Steps to reproduce: - Reset your mic/camera permission. - Start a meeting. - The call permission dialog is hidden by the meeting view. task-5095114 Forward-Port-Of: odoo/odoo#227634
Mobile shoppers now see a clearer visual cue when browsing secondary product images. This reduces confusion caused by misleading image indicators and makes product cards feel less like they are malfunctioning.
Original PR description
This pr fixes a confusing behavior when interacting with products' secondary images on mobile. The previous implementation showcased two dots for each image (4 tot.), one of which "active". The…
This pr fixes a confusing behavior when interacting with products' secondary images on mobile. The previous implementation showcased two dots for each image (4 tot.), one of which "active". The attempt was of emulating carousel indicators. Unfortunately, since dots were absolute positioned, the design failed to correctly communicate the user the actual behavior, leading to confusion and to the impression that the element itself was affected by a bug. This commit simply toggle a class, triggering the right design when necessary. Note that this implementation doesn't need to be scoped for specific resolutions, since cards are scroll-able only on mobile. Debouching is not required neither since the events are fired when the user intentionally interact with the element only. task-5082527 --- Before https://github.com/user-attachments/assets/8cbe6040-2e5d-48d6-951a-65f8fe0aae6c ---- After https://github.com/user-attachments/assets/9f3671ec-77eb-478b-840f-676f91bf50e2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226578
This update fixes an internal test setup issue for the Mass Mailing email editor by using a lighter helper that works in the single-app test environment. It helps keep automated checks reliable without changing customer-facing email marketing features.
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 Forward-Port-Of: odoo/odoo#227982
Creating a milestone from a confirmed Sales Order now correctly keeps the related project selected. This prevents errors for teams billing service products based on milestones and makes the sales-to-project workflow smoother.
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
This fix ensures Peppol e-invoice action buttons appear only on the journal types where they are relevant. It reduces confusion by showing refresh actions for sales and self-billing purchase journals, while fetch actions remain limited to regular purchase journals.
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 Forward-Port-Of: odoo/odoo#227194
Long custom out-of-stock messages on website product pages now wrap correctly instead of spilling outside their highlighted area. This keeps product availability information readable and the storefront layout clean on narrower screens.
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
Survey invitation emails now correctly update their subject when a different or edited email template is selected. This prevents outdated subject lines from being sent and keeps survey communications aligned with the chosen template.
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
Removed an unnecessary developer log from the spreadsheet chart configuration area. This keeps the browser console cleaner and avoids exposing irrelevant internal messages during normal use.
Original PR description
Task: 0 Forward-Port-Of: odoo/enterprise#95135
Searching from the Help page now waits for the needed background response before showing results. This prevents users from seeing an error screen and makes help content search work reliably.
Original PR description
Steps to reproduce: 1. Navigate to the Help menu. 2. Search for any term in the search bar. - A traceback occurs. Issue: The search method did not wait for the RPC call to complete and returned a promise prematurely, leading to an unhandled traceback. Fix: Ensure the method properly awaits the RPC call before returning the result. Forward-Port-Of: odoo/enterprise#94565
This fix prevents an error when the same Chilean electronic tax document is imported more than once. Instead of crashing, the system can now handle the duplicate import message correctly, improving reliability for Chilean localization users.
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
Timesheet reports printed from sales orders now show the related helpdesk ticket alongside the helpdesk team. This makes billed support work easier to identify and avoids unclear report lines for customers and staff.
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
Spanish translations for Peruvian electronic invoicing and stock documents were corrected where tariff fraction and withholding code labels were inaccurate or inconsistent. This helps users see the right wording on localization-related records and reduces confusion in compliant Peruvian reporting workflows.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731 Forward-Port-Of: odoo/enterprise#95019 Forward-Port-Of: odoo/enterprise#92758
Restaurant POS orders no longer ask staff to send items to preparation when no preparation printer or display is configured. This prevents confusing checkout prompts and keeps payment flow smooth for configurations that do not use kitchen preparation routing.
Original PR description
Steps to reproduce: - Open a pos restaurant config that has no prep printer/display. - Add an orderline. - The order button appear and if you try to pay the popup ask for send to preparation is shown. Issue: If there is no preparationCategories for a config getOrderChanges consider that all the available categories are the preparationCategories. Fix: If there is no preparationCategories, set the orderline uiState hasChange to false. Note: When no preparation printer category is defined, no categories is to be return by default. For the preparation display, if no preparation categories is selected preparationCategories will return all the available categories. Task-5016231 Forward-Port-Of: odoo/enterprise#94672 Forward-Port-Of: odoo/enterprise#92541
A barcode workflow test was adjusted to wait for the correct step before continuing. This reduces false build failures caused by timing issues, helping keep validation of stock barcode processes more dependable.
Original PR description
The `test_put_packs_in_existing_pack` tour was using an erroneous trigger causing race condition. This commit replaces this trigger by another one to be sure previous step is completed before going forward. Runbot build error: [232638](https://runbot.odoo.com/odoo/runbot.build.error/232638) Forward-Port-Of: odoo/enterprise#95131
Salary offer pages now use the standard theme background color instead of a fixed color. This keeps the page readable and visually consistent when users work in dark mode.
Original PR description
With this commit the background-color is not hardcoded anymore; the background color is calculated with the bootstrap variable text-bg-secondary task-5089515 Forward-Port-Of: odoo/enterprise#94751
This update adds test coverage for Spain's Modelo 130 tax report to help ensure it continues to calculate and behave correctly. It reduces the risk of regressions in Spanish tax reporting without changing day-to-day user workflows.
Original PR description
opw-4933241 Forward-Port-Of: odoo/enterprise#94251 Forward-Port-Of: odoo/enterprise#90044
Unused AI-related code paths and an obsolete route were removed after the underlying methods had already been deleted. This reduces the chance of errors from outdated AI composer functionality and keeps the module easier to maintain.
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 Forward-Port-Of: odoo/enterprise#95110
A test in the Indian payroll module is now allowed to run because the related salary contract app no longer causes it to fail. This improves confidence in payroll quality checks without changing day-to-day user workflows.
Original PR description
- Removed the test skip since the test is now working correctly task-5067701
This update corrects a failing automated test for printing the planning calendar. It ensures the test uses the expected response value, helping keep planning calendar quality checks reliable without changing user-facing 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 Forward-Port-Of: odoo/enterprise#95023
Small visual alignment issues in the spreadsheet topbar were corrected. Filter badges and collaborator avatars now appear more consistently positioned, giving users a cleaner and more polished interface.
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) Forward-Port-Of: odoo/enterprise#94737
This fix prevents payslip creation from failing when an employee payroll input is set to zero while the payslip has its own value. Payroll teams can now use zero values reliably without unexpected errors during payslip generation.
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 Forward-Port-Of: odoo/enterprise#94475
This update adjusts an automated test for sales planning so it matches the latest Gantt scheduling behavior. It helps ensure the planning dialog opens correctly, reducing the chance of future scheduling 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 Forward-Port-Of: odoo/enterprise#95258
Sign requests in the Documents list are now ordered with the newest items at the top. This helps users find and open recent signature requests faster without scrolling through older entries.
Original PR description
Before: * New sign requests appeared at the bottom of the `Documents` list. * Users had to scroll down to find the latest requests. After: * The list is now sorted by creation date (newest first). * New sign requests appear at the top of the`Documents` screen. Impact: * Makes it easier for users to quickly find and access the most recent sign requests. task-5098740 Forward-Port-Of: odoo/enterprise#95104