Daily updates from Odoo
Wednesday, October 29, 2025
115 changes
24 changes
Resolved issues and error corrections
Rating icons in Live Chat, Discuss, and Ratings screens now use a transparent background instead of showing a white box in dark mode. This makes reporting and feedback views look consistent and easier to read for users working with dark mode enabled.
Original PR description
**Current behavior before PR:** The rating images have an unintended white background in dark mode. **Steps to Reproduce:** - Turn on Dark Mode - Go to livechat - Go to Report > Sessions History…
**Current behavior before PR:** The rating images have an unintended white background in dark mode. **Steps to Reproduce:** - Turn on Dark Mode - Go to livechat - Go to Report > Sessions History **Desired behavior after PR is merged:** This PR fixes the issue by applying a transparent background to rating images through the `img_class` option in image widget. The change is applied to: - discuss.channel (kanban, list, form views) - rating.rating (form, kanban views) --- **Before:** <img width="372" height="202" alt="image" src="https://github.com/user-attachments/assets/d573ab3e-62be-4ab2-9c7f-e39bf97cb542" /> **After:** <img width="394" height="141" alt="image" src="https://github.com/user-attachments/assets/6133c231-c634-4afd-a99f-5440ecfe72be" /> task-[4689867](https://www.odoo.com/odoo/project/1519/tasks/4689867) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231919 Forward-Port-Of: odoo/odoo#215207
This commit https://github.com/odoo/odoo/commit/74109a1b1a5d31fa55b08257f6a9365b0c1758f0 broke the po by not putting the module the term comes from. This resulting in a traceback when installing the language. It also breaks existing database with Arabic and l10n_jo already set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233379
Original PR description
This commit https://github.com/odoo/odoo/commit/74109a1b1a5d31fa55b08257f6a9365b0c1758f0 broke the po by not putting the module the term comes from. This resulting in a traceback when installing the language. It also breaks existing database with Arabic and l10n_jo already set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233379
This update corrects an internal test for timesheets involving time off and public holidays. It ensures the test uses the right user context, helping maintain reliability of holiday-related timesheet behavior without changing day-to-day functionality.
Original PR description
In the 'test_timesheet_time_off_including_public_holiday' test case, 'employee' was mistakenly passed to 'with_user'. This commit replaces 'employee' with 'user' for consistency. task-4809916 Forward-Port-Of: odoo/odoo#233366
Updating a customer statement email template now works even if all recipients have been removed. This prevents an unexpected error and lets accounting users continue preparing statements without interruption.
Original PR description
Currently, an error occurs if the recipients of the statement report are removed and the user tries to update the email template. **Steps to Reproduce:** 1. Install Accounting. 2. Customers (list view) > select any record > Actions > Customer Statement > Send. 3. Remove recipients and try to update the email template. **Error:** `KeyError - False` **Cause:** The system tries to fetch mail field values from an empty recipient list, leading to a KeyError. **Fix:** This commit recomputes the recipient partners before updating the email subject and body from the template. sentry-6918345730 Forward-Port-Of: odoo/enterprise#96273
This fix prevents Swedish IBAN payments from being incorrectly treated as local BBAN payments when account type information is missing. It helps avoid misclassification in payment batches and keeps payment processing logic reliable.
Original PR description
The method `_is_se_bban` is supposed to flag if payments are bban or iban. But since 8d77c0442d7912880c5da5976c92b24d3f9885ca,
the method returns True for batch of iban payments when you don't provide the `partner_acc_type` params, because
`len({'bban_se', 'plusgiro', 'bankgiro', *(partner_acc_type or {})}) == 3`
is always True if `partner_acc_type` is None.
This commit fix that behaviour, by replacing the empty set by `{'iban'}`, meaning the second condition will always be
False when `partner_acc_type` is None.
This bug has been found by failing runbot tests (error: 233465)
no-task
Forward-Port-Of: odoo/enterprise#97876The French accounting localization now restores the proper accounts for rounding differences after they were accidentally changed. This helps ensure accounting entries use the correct account type and stay consistent with French chart of accounts expectations.
Original PR description
These accounts were changed by mistake. Even more, they're of the wrong type. Re-add account to be consistent with 758 opw-5180702 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232902
Fixed an issue where the deadline date picker could remain visible after users navigated away from a task using the browser back button. This prevents a confusing leftover popup and keeps the interface clean when moving between pages.
Original PR description
Steps to reproduce ================== - Go to project - Open a project - Open a task - Click on the deadline field - Go to the previous page using the browser back button => The datepicker stays open Cause of the issue ================== `datetimePicker.create` was called using three parameters. But since bb1f912f04fbc4b1efe57847bceffce5895ced9b, it only accepts two. Solution ======== `createPopover` should be added to the `hookParams` This allows the popover to be closed when the owner component is destroyed. https://github.com/odoo/odoo/blob/bb1f912f04fbc4b1efe57847bceffce5895ced9b/addons/web/static/src/core/popover/popover_hook.js#L65 opw-4811594 Forward-Port-Of: odoo/odoo#213263 Forward-Port-Of: odoo/odoo#212580
This fixes how placeholder guidance text appears in the Web Studio report editor after an underlying editor change. It helps users continue editing reports with clear prompts instead of missing or incorrect hint text.
Original PR description
Since odoo/odoo@b4d96ac60b212224e7e9a4de13e76209f42c7eda the html_editor's hint text attribute has changed This commit just adapts the report's iframe css to take that into account. Forward-Port-Of: odoo/enterprise#97651
This fixes how Peppol-related partner screens are linked to the underlying electronic invoicing views. It prevents upgrade-time errors caused by the system looking for fields before they are available, improving reliability for companies using Peppol/e-invoicing.
Original PR description
Currently the following views inherit from `base.view_partner_tree`: - `res_partner_form_account_peppol` - `res_partner_view_tree` The views mentioned about contain xpath expressions based on the `ubl_cii_format` field. But the view in `base` does not include the field yet. It is added in module `account_edi_ubl_cii`. This commit changes the inheritance to be from the equivalent views in `account_edi_ubl_cii` instead. Otherwise there is an error in a test when upgrading from 16.0 to 17.0 with the backported `account_peppol` to 16.0. task-4925169 Forward-Port-Of: odoo/odoo#233461 Forward-Port-Of: odoo/odoo#231637
This fix prevents website forms from crashing when a form field is changed into an attachment upload field. It ensures file upload fields are skipped when the system tries to automatically prefill form values, improving reliability for website editors.
Original PR description
Steps to reproduce: =================== 1- Add a Contact Us form. 2- Change the "Phone" field type to "Attachment" and save. → Traceback occurs. Cause: ====== After changing the field type, the field…
Steps to reproduce: =================== 1- Add a Contact Us form. 2- Change the "Phone" field type to "Attachment" and save. → Traceback occurs. Cause: ====== After changing the field type, the field still keeps its `fillWith` value. When saving or refreshing, the system tries to prefill it with a phone number. Since the type is now "file", it cannot be prefilled, causing a traceback. Why it didn't happen before: ============================ In older versions, fields were fetched using `serializeArray()`: https://github.com/odoo/odoo/blob/ad03751ef0a9e617c2b24a30b1c06aa4e25d48a1/addons/website/static/src/snippets/s_website_form/000.js#L167 That method automatically filtered out unsupported input types: https://github.com/odoo/odoo/blob/ad03751ef0a9e617c2b24a30b1c06aa4e25d48a1/addons/web/static/lib/jquery/jquery.js#L9001 Fix: ==== Exclude fields of file-like types from the prefill logic, similar to the behavior of `serializeArray()`. opw-5145855 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231185
Product packaging screens now show a sensible unit name when a unit is missing a related reference unit. This prevents confusing labels such as "1 Undefined" when users configure packaging conversions.
Original PR description
### Steps to reproduce: - In the settings enable "Product Packaging" - Create a product and set its `uom_id` (next to sales price) to "pack of 6" - In the sales tab click on Packagings > This opens a list view of units with convertions #### > The "Units" is converted to "1 Undefined" ### Cause of the issue: The "Units" uom does not have any set `relative_uom_id` so that `record.relative_uom_id[1] ` is undefined: https://github.com/odoo/odoo/blob/e44ea4adbe56586349b78ae4796803777d8a782a/addons/uom/static/src/components/many2x_uom_tags/many2x_uom_tags.js#L74 opw-5189284 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233074
This fix prevents errors when Odoo updates analytic accounting lines that do not have a distribution set. Accounting workflows can continue smoothly instead of being interrupted by a failed update.
Original PR description
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions,…
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions, the vals_list[0] ends up being empty. This situation causes an error in the write method, which prevents the system from properly updating analytic lines without distributions. Current behavior before PR: Before this fix, attempting to update analytic lines with empty distributions triggers an error in the write method. As a result, operations that involve updating such lines fail, potentially interrupting normal accounting workflows. Desired behavior after PR is merged: After merging this PR, the system will first check whether an analytic line has a valid distribution before attempting to update it. Lines with empty distributions will be safely skipped, preventing errors and allowing the rest of the analytic updates to proceed smoothly. This ensures more robust handling of analytic lines and avoids runtime exceptions during updates. Video: https://app.screencastify.com/watch/03zuCLh984kWun2Q71tK Odoo Task: https://www.odoo.com/es_ES/my/tasks/5181171 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232176
This fix prevents SAF-T general ledger processing from failing or returning incorrect results when an accounting entry has no linked partner. It improves reliability for companies generating statutory accounting reports, especially where some transactions are not tied to a customer or supplier.
Original PR description
### Issue: After #95804 , some of the code was improved but the consideration for partner_id being None was not expected. To fix this issue, we add partner_id on the domain. OPW-5177365 Forward-Port-Of: odoo/enterprise#98240
This fix keeps the website editor's list styling from unintentionally changing list content elsewhere on the page. It helps preserve the intended appearance of frontend pages when the editor is loaded.
Original PR description
Problem: The CSS selector `li *` was applied globally, affecting all list content on pages where the editor is loaded — including frontend content outside the editor. Cause: The selector was not scoped to the editor context, so its styling leaked into non-editor elements. Solution: Restrict the `li *` selector to apply only within headers inside the editor to prevent unwanted global styling. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232336
Demo data for localizations now includes the required portal demo user, preventing an access error when changing a company's fiscal localization with Project, Accounting, and VoIP installed. This makes demo and test setups more reliable across country-specific localization modules.
Original PR description
Steps to reproduce: - Install Project, Accounting and Phone (VoIP) - Install any l10n_**_hr_payroll - Switch to the newly created company in the country of the l10n installed - Go to the settings of Accounting - Change fiscal localization to the company's country - Get an Access Error Reason: During the setup of the fiscal localization, VoIP tries to retrieve the information related to "phonecall" activities in the installed modules. In Project, one of the project has Joel Willis (portal demo user) as the client. However, he is not created automatically for a localization when the demo data from a l10n module is loaded, which then causes an Access Error. How it was fixed: Adding the portal demo user to every "demo_company.xml" of l10n modules resolves this issue. Task ID: 5048487
This fixes a repair order issue where a serial number entered on a new repair line could disappear after saving. The serial number field is now only editable once the repair line has been saved, preventing lost selections and reducing rework for users.
Original PR description
When creating a repair order, if you add a line and assign a serial number before saving the line, the serial number is removed when saving. Steps to reproduce: - Create a repair order and save it. - Add a repair line with a product tracked by serial number. - Without saving the repair order, add a serial number on the line. - Save the repair order. - You will notice that the serial number is no longer assigned to the repair line. This PR fixes the issue by making the serial number field read-only until the repair line is saved. opw-5156267 Forward-Port-Of: odoo/odoo#233264 Forward-Port-Of: odoo/odoo#232973
Fixed an issue where course slides with a vertical bar character in their name could cause the browser tab title to show the wrong website name after navigating between slides. This keeps course navigation clearer and avoids confusing page titles for learners.
Original PR description
How to reproduce: - Go to a course with a slide containing "|" in its name. (e.g. Basics of Gardening) - Change slide to this special named slide. - Change back to another slide. - The browser title contains the string part after the "|" instead of the website name. This commit now handles slides with name containing the "|" character. Task-5152858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230489
The website editor no longer crashes when updating the Terms and conditions link on product pages. The fix correctly handles text colors applied through preset styling classes, making link edits more reliable for website managers.
Original PR description
Problem: On website > shop > product page, when trying to edit the link of "Terms and conditions", a traceback occurs. Cause: When applying changes on "Terms and conditions" in `shop/product`, `ColorPlugin.removeAllColor()` is called on the `a` element. Its color was applied by the `text-muted` class. This case in color removal was not properly handled. Solution: In `getFonts`, consider elements that have those special classes (e.g., `text-muted`) when processing color removal. Steps to reproduce: 1. Open website/shop. 2. Open any product page. 3. Open the editor. 4. Select the "Terms and conditions" text. 5. Click edit in the link popover. 6. Click apply. 7. Traceback occurs. opw-5130016 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233305 Forward-Port-Of: odoo/odoo#229725
Dimona-related employee fields are now shown only for Belgian employees instead of appearing for all employees. This keeps employee records cleaner and reduces confusion for companies or staff outside Belgium.
Original PR description
Before this commit, the fields about dimona were shown for all employees, now these fields will be displayed only for belgian employees. task-5148931
Users whose contact record is linked to multiple user accounts can now create spreadsheets from the Documents app without hitting an error. This prevents a blocking crash in a specific contact setup, helping affected users continue their normal document workflow.
Original PR description
Before this commit: 1. connect with a user, the partner_id of which is linked to multiple users via the user_ids field (this can be done by manually setting it, or by merging contacts, for example) 2. go to the Documents app, click new, then spreadsheet --> expected singleton Traceback opw-5133850 Forward-Port-Of: odoo/enterprise#97767
This fix prevents unrelated demo products from interfering with an automated website shop test. It helps keep test results reliable when demo data is installed, reducing false failures during quality checks.
Original PR description
Versions -------- - saas-18.4+ Steps ----- 1. Set up a database with demo data; 2. run `:TestWebsiteSaleProductFilters.test_latest_sold_filter`. Issue ----- Test fails. Cause ----- The filter retrieves demo products that aren't part of the test suite. Solution -------- In `setUpClass`, execute a SQL query archiving all nonrelevant product templates/variants, bypassing any ORM-level constraints. runbot-233399
A stability fix was added to ensure the website wishlist is empty before an automated sales flow test continues. This reduces random test failures and helps keep updates to the online shop experience moving through validation reliably.
Original PR description
Add a step to make sure the wishlist is empty before continuing the tour runbot-229616 Forward-Port-Of: odoo/odoo#233262
The Tasks shortcut on a sales order now preserves the user's language settings when opening related tasks. This prevents menus from unexpectedly switching back to English for users working in another language.
Original PR description
Repro:
- Activate any language different than english
- Create a service product with create Project & Task
- Create a sales order with the product
- Navigate with smart buttons Project > Tasks > Activate Top Menu
- All good
- Now navigate directly to Tasks from the sales order
- Top Menu is in English
Issue:
- The issue here is the context language being lost due to context overriding in the code.
Fix:
- In this commit, I have updated the method from `with_context({'active_id': self.id})` to
`with_context(active_id=self.id)`. This fix ensures that the previous context is retained.
opw-5160373
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#233362This update keeps Odoo installable on newer Debian and Ubuntu versions after an older PDF library package was removed from those operating system repositories. If the old package is unavailable, the setup now uses its replacement so deployments can continue without manual workaround.
Original PR description
pypdf2 is not present anymore in debian/trixie Fallback on pypdf if pypdf2 is not available Note that it should mainly fix the deb_install but future fixes may be needed Forward-Port-Of: odoo/odoo#233598
14 changes
Resolved issues and error corrections
A test for timesheets involving time off and public holidays now uses the correct user context instead of an employee record. This helps keep automated checks accurate and reduces the risk of regressions in timesheet and holiday handling.
Original PR description
In the 'test_timesheet_time_off_including_public_holiday' test case, 'employee' was mistakenly passed to 'with_user'. This commit replaces 'employee' with 'user' for consistency. task-4809916 Forward-Port-Of: odoo/odoo#233366
Updating a customer statement email template no longer fails when all recipients have been removed. This prevents an unexpected error and lets users continue editing the email before choosing recipients.
Original PR description
Currently, an error occurs if the recipients of the statement report are removed and the user tries to update the email template. **Steps to Reproduce:** 1. Install Accounting. 2. Customers (list view) > select any record > Actions > Customer Statement > Send. 3. Remove recipients and try to update the email template. **Error:** `KeyError - False` **Cause:** The system tries to fetch mail field values from an empty recipient list, leading to a KeyError. **Fix:** This commit recomputes the recipient partners before updating the email subject and body from the template. sentry-6918345730 Forward-Port-Of: odoo/enterprise#96273
This fix prevents Swedish payment batches using IBAN accounts from being incorrectly identified as local BBAN payments when account type details are missing. It helps avoid misclassification in payment processing and restores the expected behavior validated by automated tests.
Original PR description
The method `_is_se_bban` is supposed to flag if payments are bban or iban. But since 8d77c0442d7912880c5da5976c92b24d3f9885ca,
the method returns True for batch of iban payments when you don't provide the `partner_acc_type` params, because
`len({'bban_se', 'plusgiro', 'bankgiro', *(partner_acc_type or {})}) == 3`
is always True if `partner_acc_type` is None.
This commit fix that behaviour, by replacing the empty set by `{'iban'}`, meaning the second condition will always be
False when `partner_acc_type` is None.
This bug has been found by failing runbot tests (error: 233465)
no-task
Forward-Port-Of: odoo/enterprise#97876This fix restores the intended accounting setup for rounding differences in the French localization. It ensures those amounts are assigned to the correct type of account, helping keep financial records consistent and compliant.
Original PR description
These accounts were changed by mistake. Even more, they're of the wrong type. Re-add account to be consistent with 758 opw-5180702 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232902
This fix ensures Peppol-related partner screens are built on the correct accounting e-invoicing views. It prevents upgrade or installation errors when the expected e-invoicing fields are not available in the base partner view.
Original PR description
Currently the following views inherit from `base.view_partner_tree`: - `res_partner_form_account_peppol` - `res_partner_view_tree` The views mentioned about contain xpath expressions based on the `ubl_cii_format` field. But the view in `base` does not include the field yet. It is added in module `account_edi_ubl_cii`. This commit changes the inheritance to be from the equivalent views in `account_edi_ubl_cii` instead. Otherwise there is an error in a test when upgrading from 16.0 to 17.0 with the backported `account_peppol` to 16.0. task-4925169 Forward-Port-Of: odoo/odoo#233461 Forward-Port-Of: odoo/odoo#231637
Website forms no longer crash when a field originally set to prefill contact details is changed into an attachment upload field. This keeps form editing and saving reliable for website managers making changes to contact forms.
Original PR description
Steps to reproduce: =================== 1- Add a Contact Us form. 2- Change the "Phone" field type to "Attachment" and save. → Traceback occurs. Cause: ====== After changing the field type, the field…
Steps to reproduce: =================== 1- Add a Contact Us form. 2- Change the "Phone" field type to "Attachment" and save. → Traceback occurs. Cause: ====== After changing the field type, the field still keeps its `fillWith` value. When saving or refreshing, the system tries to prefill it with a phone number. Since the type is now "file", it cannot be prefilled, causing a traceback. Why it didn't happen before: ============================ In older versions, fields were fetched using `serializeArray()`: https://github.com/odoo/odoo/blob/ad03751ef0a9e617c2b24a30b1c06aa4e25d48a1/addons/website/static/src/snippets/s_website_form/000.js#L167 That method automatically filtered out unsupported input types: https://github.com/odoo/odoo/blob/ad03751ef0a9e617c2b24a30b1c06aa4e25d48a1/addons/web/static/lib/jquery/jquery.js#L9001 Fix: ==== Exclude fields of file-like types from the prefill logic, similar to the behavior of `serializeArray()`. opw-5145855 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231185
This fixes an issue where customer information chosen after adding an online payment in Point of Sale was not saved correctly once the payment was completed. It helps ensure orders paid online are linked to the right customer for receipts, reporting, and follow-up.
Original PR description
Before this commit, if a partner was selected after adding an online payment line, the partner was not synced after completing the online payment. opw-5098127 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232547 Forward-Port-Of: odoo/odoo#232455
Product packaging conversion lists now show a proper unit name instead of displaying “Undefined” when a unit has no related reference unit set. This prevents confusing packaging information for users setting up or reviewing product sales units.
Original PR description
### Steps to reproduce: - In the settings enable "Product Packaging" - Create a product and set its `uom_id` (next to sales price) to "pack of 6" - In the sales tab click on Packagings > This opens a list view of units with convertions #### > The "Units" is converted to "1 Undefined" ### Cause of the issue: The "Units" uom does not have any set `relative_uom_id` so that `record.relative_uom_id[1] ` is undefined: https://github.com/odoo/odoo/blob/e44ea4adbe56586349b78ae4796803777d8a782a/addons/uom/static/src/components/many2x_uom_tags/many2x_uom_tags.js#L74 opw-5189284 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233074
This fix prevents accounting updates from failing when analytic lines have no distribution information. Odoo now skips those empty entries safely, helping analytic accounting workflows continue without interruption.
Original PR description
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions,…
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions, the vals_list[0] ends up being empty. This situation causes an error in the write method, which prevents the system from properly updating analytic lines without distributions. Current behavior before PR: Before this fix, attempting to update analytic lines with empty distributions triggers an error in the write method. As a result, operations that involve updating such lines fail, potentially interrupting normal accounting workflows. Desired behavior after PR is merged: After merging this PR, the system will first check whether an analytic line has a valid distribution before attempting to update it. Lines with empty distributions will be safely skipped, preventing errors and allowing the rest of the analytic updates to proceed smoothly. This ensures more robust handling of analytic lines and avoids runtime exceptions during updates. Video: https://app.screencastify.com/watch/03zuCLh984kWun2Q71tK Odoo Task: https://www.odoo.com/es_ES/my/tasks/5181171 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232176
This fix prevents SAF-T general ledger reporting from failing when an accounting entry has no linked partner. It improves report reliability for businesses exporting compliance data.
Original PR description
### Issue: After #95804 , some of the code was improved but the consideration for partner_id being None was not expected. To fix this issue, we add partner_id on the domain. OPW-5177365 Forward-Port-Of: odoo/enterprise#98240
Repair order users can no longer enter a serial number on a new repair line before that line has been saved. This prevents the serial number from being lost during save and avoids confusion or rework when handling serialized products.
Original PR description
When creating a repair order, if you add a line and assign a serial number before saving the line, the serial number is removed when saving. Steps to reproduce: - Create a repair order and save it. - Add a repair line with a product tracked by serial number. - Without saving the repair order, add a serial number on the line. - Save the repair order. - You will notice that the serial number is no longer assigned to the repair line. This PR fixes the issue by making the serial number field read-only until the repair line is saved. opw-5156267 Forward-Port-Of: odoo/odoo#233264 Forward-Port-Of: odoo/odoo#232973
This fix prevents editor-specific list styling from unintentionally changing regular page content when the editor is loaded. It keeps website and backend content looking consistent by limiting the styling to the intended editor area.
Original PR description
Problem: The CSS selector `li *` was applied globally, affecting all list content on pages where the editor is loaded — including frontend content outside the editor. Cause: The selector was not scoped to the editor context, so its styling leaked into non-editor elements. Solution: Restrict the `li *` selector to apply only within headers inside the editor to prevent unwanted global styling. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232336
Fixed an issue where course slide names containing a vertical bar could cause the browser title to show the wrong website name after switching slides. This keeps the page title consistent and avoids confusion for learners navigating course content.
Original PR description
How to reproduce: - Go to a course with a slide containing "|" in its name. (e.g. Basics of Gardening) - Change slide to this special named slide. - Change back to another slide. - The browser title contains the string part after the "|" instead of the website name. This commit now handles slides with name containing the "|" character. Task-5152858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230489
This update makes the online shop wishlist test start from a clean wishlist before continuing. It helps prevent random test failures, improving confidence in the stability of future website shop updates.
Original PR description
Add a step to make sure the wishlist is empty before continuing the tour runbot-229616 Forward-Port-Of: odoo/odoo#233262
4 changes
Resolved issues and error corrections
Users can now update the email template for customer statements even after removing all recipients. This prevents an error during statement sending and keeps the workflow from being interrupted.
Original PR description
Currently, an error occurs if the recipients of the statement report are removed and the user tries to update the email template. **Steps to Reproduce:** 1. Install Accounting. 2. Customers (list view) > select any record > Actions > Customer Statement > Send. 3. Remove recipients and try to update the email template. **Error:** `KeyError - False` **Cause:** The system tries to fetch mail field values from an empty recipient list, leading to a KeyError. **Fix:** This commit recomputes the recipient partners before updating the email subject and body from the template. sentry-6918345730 Forward-Port-Of: odoo/enterprise#96273
Corrects Swedish payment processing so IBAN payments are no longer mistakenly treated as local BBAN-style payments when account type details are missing. This helps prevent payment batches from being classified incorrectly and avoids related processing failures.
Original PR description
The method `_is_se_bban` is supposed to flag if payments are bban or iban. But since 8d77c0442d7912880c5da5976c92b24d3f9885ca,
the method returns True for batch of iban payments when you don't provide the `partner_acc_type` params, because
`len({'bban_se', 'plusgiro', 'bankgiro', *(partner_acc_type or {})}) == 3`
is always True if `partner_acc_type` is None.
This commit fix that behaviour, by replacing the empty set by `{'iban'}`, meaning the second condition will always be
False when `partner_acc_type` is None.
This bug has been found by failing runbot tests (error: 233465)
no-task
Forward-Port-Of: odoo/enterprise#97876Opening the duplicate transaction wizard without a linked journal no longer causes an error. This improves reliability for accounting users accessing the view directly or before a journal has been selected.
Original PR description
When user opens the ``account.duplicate.transaction.wizard.form`` view, a traceback appears.
Steps to reproduce the error:
- Install ``Accounting`` module
- Using Open View, Open ``account.duplicate.transaction.wizard.form`` view
Traceback:
```py
UndefinedFunction: operator does not exist: integer = boolean
LINE 5: WHERE st_line.journal_id = false
^
```
https://github.com/odoo/enterprise/blob/8146cfc7b47ba8536f0fa5208cc69685371b55b8/account_online_synchronization/models/account_journal.py#L278
When the view is opened, the ``_compute_provider_duplicate_ids`` method is triggered,
which calls ``_get_provider_duplicate_transactions`` method.
Since no journal is linked to the wizard, it will raise the traceback from the above line.
ref: 218e8a365b153a202d062152ff69234482bcccf2
sentry-6943450225This fixes an issue in SAF-T accounting reports where entries without a linked customer or supplier could be handled incorrectly. The report filtering now accounts for this case, helping prevent reporting errors and improving reliability for accounting exports.
Original PR description
### Issue: After #95804 , some of the code was improved but the consideration for partner_id being None was not expected. To fix this issue, we add partner_id on the domain. OPW-5177365 Forward-Port-Of: odoo/enterprise#98240
10 changes
Resolved issues and error corrections
Updating a customer statement email template now works even if all recipients have been removed. This prevents an error from interrupting users while preparing statement emails, making the send workflow more reliable.
Original PR description
Currently, an error occurs if the recipients of the statement report are removed and the user tries to update the email template. **Steps to Reproduce:** 1. Install Accounting. 2. Customers (list view) > select any record > Actions > Customer Statement > Send. 3. Remove recipients and try to update the email template. **Error:** `KeyError - False` **Cause:** The system tries to fetch mail field values from an empty recipient list, leading to a KeyError. **Fix:** This commit recomputes the recipient partners before updating the email subject and body from the template. sentry-6918345730 Forward-Port-Of: odoo/enterprise#96273
This fix updates automated website tour checks so they correctly handle page reloads and redirects in appointment and helpdesk flows. It improves reliability of internal quality checks, reducing false failures during validation without changing customer-facing behavior.
Original PR description
\* = helpdesk, website_helpdesk ### Issue: - `appointment_crm_forced_staff_user_tour` fails on steps triggering page unload without `expectUnloadPage: true`. - In `helpdesk_search_ticket_on_portal_tour`, a specific step is failing for `helpdesk` but works when `website_helpdesk` is installed, as the step does not trigger the `beforeunload` event in that case. ### Fix: - Added `expectUnloadPage: true` to steps that trigger a page unload. - Introduced `HelpdeskSearchTicketSteps` class with `_searchTickets` so that the step can be overridden in `website_helpdesk`, removing the `expectUnloadPage` property when installed, since no `beforeunload` event is triggered in that case. runbot-[232987](https://runbot.odoo.com/odoo/runbot.build.error/232987) Forward-Port-Of: odoo/enterprise#95728
Corrects how Swedish payment batches are classified when no account type is provided, preventing IBAN payments from being incorrectly treated as local Swedish BBAN payments. This helps avoid payment processing errors and keeps automated validation checks reliable.
Original PR description
The method `_is_se_bban` is supposed to flag if payments are bban or iban. But since 8d77c0442d7912880c5da5976c92b24d3f9885ca,
the method returns True for batch of iban payments when you don't provide the `partner_acc_type` params, because
`len({'bban_se', 'plusgiro', 'bankgiro', *(partner_acc_type or {})}) == 3`
is always True if `partner_acc_type` is None.
This commit fix that behaviour, by replacing the empty set by `{'iban'}`, meaning the second condition will always be
False when `partner_acc_type` is None.
This bug has been found by failing runbot tests (error: 233465)
no-task
Forward-Port-Of: odoo/enterprise#97876This fix updates the report editor styling so placeholder hint text appears correctly after a related editor change. It helps users editing reports in Studio see guidance text as expected, avoiding confusion while customizing documents.
Original PR description
Since odoo/odoo@b4d96ac60b212224e7e9a4de13e76209f42c7eda the html_editor's hint text attribute has changed This commit just adapts the report's iframe css to take that into account. Forward-Port-Of: odoo/enterprise#97651
Fixed a visual issue where global filter suggestion buttons appeared partially styled for dark mode, even though spreadsheets do not currently support dark mode. This keeps the spreadsheet interface consistent and avoids confusing mixed-theme controls for users.
Original PR description
When using the global filter suggestions feature in dark mode, the buttons are halfway in dark mode. We don't support the dark mode in spreadsheet ATM. Task: [5089382](https://www.odoo.com/web#id=5089382&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#97491
Fixed an issue where using the keyboard to navigate search suggestions in the Helpdesk knowledge base could trigger an error. This makes the customer-facing help pages more reliable when users search for support articles.
Original PR description
Steps to Reproduce: 1. Navigate to '/helpdesk/customer-care-1/knowledgebase'. 2. Enter any text in the search bar to trigger suggestions. 3. Press the down arrow key twice. 4. A traceback error occurs, indicating an Odoo Client Error. Before this commit, we had a crash when a user types something in a searchbar in the website helpdesk and do keydowns: "Cannot read properties of undefined (reading 'nextElementSibling')" To fix this, we need to add the 'data-bs-toggle' attribute to let BS find it to set '_element' (which must be the previous sibling of the dropdown-menu). This data attribute was probably not set before because in this case the BS dropdown is not used on a button or a link as documented; we use it as an autocomplete functionnality. task-4752497 Forward-Port-Of: odoo/enterprise#97334 Forward-Port-Of: odoo/enterprise#90228
This fix prevents SAF-T general ledger reporting from failing or returning incorrect data when an accounting entry has no linked partner. It adds the missing partner condition so reports remain reliable for affected accounting records.
Original PR description
### Issue: After #95804 , some of the code was improved but the consideration for partner_id being None was not expected. To fix this issue, we add partner_id on the domain. OPW-5177365 Forward-Port-Of: odoo/enterprise#98240
The expense Stripe top-up wizard now uses the correct partner information when generating a QR code. This resolves an issue that could block users from creating QR codes during the top-up process, helping payments setup proceed smoothly.
Original PR description
Fix a bug preventing from creating a qr code in the topup wizard due to a res.partner.bank being used instead of a res.partner Forward-Port-Of: odoo/enterprise#98255
Payroll demo data now uses default working calendars with the correct local time zones across several country localizations. This helps demo companies show more accurate schedules and payroll examples for each country.
Original PR description
- added a default resource calendar with the correct timezone for ae, tr, bd, lt, ma, mx, pk, ro localizations - corrected the timezone of resource calendars of jo, sa, eg, ke, id localizations task-id: 4862716
When creating an employee from a salary offer linked to an applicant, the applicant's attachments are now copied to the new employee record. This prevents missing hiring documents and keeps the salary configurator flow consistent with the standard applicant "Create Employee" action.
Original PR description
When an employee is created from a salary offer linked to an applicant, the attachments of the applicant were not transferred to the newly created employee record. This caused missing documents compared to the 'Create Employee' action from the applicant form. This PR ensures that all applicant attachments are copied to the employee record during employee creation from the salary configurator. Related task: 5103309.
34 changes
Resolved issues and error corrections
This fixes an internal test setup for timesheet behavior around time off and public holidays. It ensures the test uses the proper user account context, helping keep timesheet and holiday logic reliable in future updates.
Original PR description
In the 'test_timesheet_time_off_including_public_holiday' test case, 'employee' was mistakenly passed to 'with_user'. This commit replaces 'employee' with 'user' for consistency. task-4809916 Forward-Port-Of: odoo/odoo#233366
Updating a customer statement email template no longer fails after all recipients are removed. This prevents an unexpected error during statement sending and keeps the workflow usable when users adjust recipient details.
Original PR description
Currently, an error occurs if the recipients of the statement report are removed and the user tries to update the email template. **Steps to Reproduce:** 1. Install Accounting. 2. Customers (list view) > select any record > Actions > Customer Statement > Send. 3. Remove recipients and try to update the email template. **Error:** `KeyError - False` **Cause:** The system tries to fetch mail field values from an empty recipient list, leading to a KeyError. **Fix:** This commit recomputes the recipient partners before updating the email subject and body from the template. sentry-6918345730 Forward-Port-Of: odoo/enterprise#96273
The Sales Order Tasks shortcut now preserves the user's selected language when opening related tasks. This prevents menu labels from unexpectedly switching back to English, improving consistency for users working in other languages.
Original PR description
Repro:
- Activate any language different than english
- Create a service product with create Project & Task
- Create a sales order with the product
- Navigate with smart buttons Project > Tasks > Activate Top Menu
- All good
- Now navigate directly to Tasks from the sales order
- Top Menu is in English
Issue:
- The issue here is the context language being lost due to context overriding in the code.
Fix:
- In this commit, I have updated the method from `with_context({'active_id': self.id})` to
`with_context(active_id=self.id)`. This fix ensures that the previous context is retained.
opw-5160373
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#233362This update adjusts colors on accounting dashboard elements so they remain clear and readable when dark mode is enabled. It improves usability for users who work in dark mode without changing accounting features or workflows.
Original PR description
This commit adjusts dashboard element colors to enhance readability in dark mode. task-5122380 Requires: - https://github.com/odoo/enterprise/pull/95875 | Before | After | |--------|--------| | <img…
This commit adjusts dashboard element colors to enhance readability in dark mode. task-5122380 Requires: - https://github.com/odoo/enterprise/pull/95875 | Before | After | |--------|--------| | <img width="665" height="336" alt="image" src="https://github.com/user-attachments/assets/c3270f8d-bd3b-47a9-807f-ca4ca5c7e6c2" /> | <img width="632" height="317" alt="Capture d’écran 2025-09-30 à 14 48 22" src="https://github.com/user-attachments/assets/d0eb8ab1-6ff7-484f-aedb-b668ba337a43" /> | | <img width="1914" height="967" alt="image" src="https://github.com/user-attachments/assets/4d7b9c00-41b7-46a3-addb-4ec09cbbca85" /> | <img width="1916" height="922" alt="Capture d’écran 2025-09-30 à 14 48 59" src="https://github.com/user-attachments/assets/711375aa-5b01-4c81-b7ab-ba462fdbb0b6" /> | | <img width="1716" height="953" alt="image" src="https://github.com/user-attachments/assets/a023d555-3f92-433d-a07f-dc8bb1c2513c" /> | <img width="1640" height="803" alt="Capture d’écran 2025-09-30 à 14 50 07" src="https://github.com/user-attachments/assets/26ae7b94-222d-4527-87ad-68ed55b495d0" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The French accounting localization restores the correct accounts for rounding differences after they were mistakenly changed to the wrong account type. This helps ensure French accounting entries remain consistent and correctly categorized.
Original PR description
These accounts were changed by mistake. Even more, they're of the wrong type. Re-add account to be consistent with 758 opw-5180702 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232902
When users load more website themes, the setup screen now shows a full-screen loading indicator. This prevents users from accidentally selecting an existing theme while the new theme options are still loading.
Original PR description
Steps to reproduce: 1. Create a new website and proceed to the theme configuration step. 2. Click on View More Themes. -> You’ll notice a loading effect on the button, but the existing themes remain selectable. Before this commit: Users could still select existing themes while additional themes were being loaded. After this commit: A fullscreen loader is displayed while loading more themes via the View More Themes button, preventing any unintended interactions. task-4661292 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 Forward-Port-Of: odoo/odoo#230557
This fix makes automated checks for appointment CRM and helpdesk portal flows handle page reloads and redirects correctly. It helps prevent false build failures, improving release reliability without changing customer-facing behavior.
Original PR description
\* = helpdesk, website_helpdesk ### Issue: - `appointment_crm_forced_staff_user_tour` fails on steps triggering page unload without `expectUnloadPage: true`. - In `helpdesk_search_ticket_on_portal_tour`, a specific step is failing for `helpdesk` but works when `website_helpdesk` is installed, as the step does not trigger the `beforeunload` event in that case. ### Fix: - Added `expectUnloadPage: true` to steps that trigger a page unload. - Introduced `HelpdeskSearchTicketSteps` class with `_searchTickets` so that the step can be overridden in `website_helpdesk`, removing the `expectUnloadPage` property when installed, since no `beforeunload` event is triggered in that case. runbot-[232987](https://runbot.odoo.com/odoo/runbot.build.error/232987) Forward-Port-Of: odoo/enterprise#95728
Fixed an issue where Swedish IBAN payments could be incorrectly treated as local BBAN-style payments when account type information was missing. This helps prevent payment batches from being classified incorrectly and keeps Swedish payment processing reliable.
Original PR description
The method `_is_se_bban` is supposed to flag if payments are bban or iban. But since 8d77c0442d7912880c5da5976c92b24d3f9885ca,
the method returns True for batch of iban payments when you don't provide the `partner_acc_type` params, because
`len({'bban_se', 'plusgiro', 'bankgiro', *(partner_acc_type or {})}) == 3`
is always True if `partner_acc_type` is None.
This commit fix that behaviour, by replacing the empty set by `{'iban'}`, meaning the second condition will always be
False when `partner_acc_type` is None.
This bug has been found by failing runbot tests (error: 233465)
no-task
Forward-Port-Of: odoo/enterprise#97876This fixes how Peppol-related partner screens are linked to the right underlying accounting views. It prevents upgrade/test errors caused by expecting fields before they are available, improving reliability during migrations.
Original PR description
Currently the following views inherit from `base.view_partner_tree`: - `res_partner_form_account_peppol` - `res_partner_view_tree` The views mentioned about contain xpath expressions based on the `ubl_cii_format` field. But the view in `base` does not include the field yet. It is added in module `account_edi_ubl_cii`. This commit changes the inheritance to be from the equivalent views in `account_edi_ubl_cii` instead. Otherwise there is an error in a test when upgrading from 16.0 to 17.0 with the backported `account_peppol` to 16.0. task-4925169 Forward-Port-Of: odoo/odoo#233461 Forward-Port-Of: odoo/odoo#231637
The report editor has been updated so placeholder guidance text appears correctly after a related editor change. This helps users creating or editing reports see the intended hints instead of missing or incorrectly styled guidance.
Original PR description
Since odoo/odoo@b4d96ac60b212224e7e9a4de13e76209f42c7eda the html_editor's hint text attribute has changed This commit just adapts the report's iframe css to take that into account. Forward-Port-Of: odoo/enterprise#97651
Contacts linked to Point of Sale orders can no longer be deleted, preventing past orders from losing their customer information. This helps preserve accurate sales history and customer records for reporting and support.
Original PR description
Before this commit, it was possible to delete a contact record even if it was linked to PoS orders, which would cause it to be unlinked from those orders. opw-5164368 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231964 Forward-Port-Of: odoo/odoo#231442
This fixes the appearance of global filter suggestion buttons when users have dark mode enabled. Since spreadsheets do not currently support dark mode, the buttons now display consistently instead of appearing only partially adapted.
Original PR description
When using the global filter suggestions feature in dark mode, the buttons are halfway in dark mode. We don't support the dark mode in spreadsheet ATM. Task: [5089382](https://www.odoo.com/web#id=5089382&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#97491
Odoo now safely handles analytic accounting lines that do not have a distribution set when they are updated. This prevents failed updates and helps accounting workflows continue smoothly when some analytic data is empty.
Original PR description
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions,…
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions, the vals_list[0] ends up being empty. This situation causes an error in the write method, which prevents the system from properly updating analytic lines without distributions. Current behavior before PR: Before this fix, attempting to update analytic lines with empty distributions triggers an error in the write method. As a result, operations that involve updating such lines fail, potentially interrupting normal accounting workflows. Desired behavior after PR is merged: After merging this PR, the system will first check whether an analytic line has a valid distribution before attempting to update it. Lines with empty distributions will be safely skipped, preventing errors and allowing the rest of the analytic updates to proceed smoothly. This ensures more robust handling of analytic lines and avoids runtime exceptions during updates. Video: https://app.screencastify.com/watch/03zuCLh984kWun2Q71tK Odoo Task: https://www.odoo.com/es_ES/my/tasks/5181171 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232176
This fixes a display issue in product packaging unit conversions where some units could appear as "Undefined". Users will now see clearer, correct unit labels when reviewing packaging options for products.
Original PR description
### Steps to reproduce: - In the settings enable "Product Packaging" - Create a product and set its `uom_id` (next to sales price) to "pack of 6" - In the sales tab click on Packagings > This opens a list view of units with convertions #### > The "Units" is converted to "1 Undefined" ### Cause of the issue: The "Units" uom does not have any set `relative_uom_id` so that `record.relative_uom_id[1] ` is undefined: https://github.com/odoo/odoo/blob/e44ea4adbe56586349b78ae4796803777d8a782a/addons/uom/static/src/components/many2x_uom_tags/many2x_uom_tags.js#L74 opw-5189284 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233074
This fixes a missing spreadsheet support function in the Community edition. It helps global filters choose the right operators for related records, reducing errors or incorrect filter behavior for spreadsheet users.
Original PR description
…in community edition `has_searchable_parent_relation` is used to manage operators in global filters domains since http://github.com/odoo/odoo/pull/215217. The method was not moved in community accordingly. Task-5189262 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
This fixes date format definitions used by the core Base module. It helps ensure dates are displayed consistently and correctly for users across supported languages and locales.
Original PR description
TASK-ID: 5194672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A spreadsheet-related method was moved to the shared community code so global filter operators can work reliably across editions. This prevents errors when community features rely on functionality that was previously only declared in the enterprise spreadsheet edition module.
Original PR description
THe method `has_searchable_parent_relation` was declared in spreadsheet_edition but it's been used in Odoo community since the introduction of operators for the global filters in http://github.com/odoo/odoo/pull/215217. Task-5189262
This fix prevents editor-related list styling from unintentionally changing regular page content outside the editor. It keeps website pages visually consistent when the HTML editor is loaded.
Original PR description
Problem: The CSS selector `li *` was applied globally, affecting all list content on pages where the editor is loaded — including frontend content outside the editor. Cause: The selector was not scoped to the editor context, so its styling leaked into non-editor elements. Solution: Restrict the `li *` selector to apply only within headers inside the editor to prevent unwanted global styling. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232336
This change prevents SAF-T general ledger reporting from failing or including incorrect entries when an accounting line has no linked partner. It improves report reliability for companies generating compliance exports.
Original PR description
### Issue: After #95804 , some of the code was improved but the consideration for partner_id being None was not expected. To fix this issue, we add partner_id on the domain. OPW-5177365 Forward-Port-Of: odoo/enterprise#98240
Fixed an issue where course slides with a vertical bar in their name could cause the browser tab title to show the wrong website name after navigating between slides. This keeps course pages looking consistent and avoids confusing learners or website visitors.
Original PR description
How to reproduce: - Go to a course with a slide containing "|" in its name. (e.g. Basics of Gardening) - Change slide to this special named slide. - Change back to another slide. - The browser title contains the string part after the "|" instead of the website name. This commit now handles slides with name containing the "|" character. Task-5152858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230489
This fixes a website editor issue where temporary placeholders could remain visible after undoing changes, such as in an image gallery. The editor now correctly refreshes these interactions when page content changes, reducing confusing visual glitches for users.
Original PR description
invalid Before this commit, the `selectorHas` and `selectorNotHas` conditions of interactions were ignored when calling `stopInteractions` on a sub-element of the interaction target. For example, in…
invalid
Before this commit, the `selectorHas` and `selectorNotHas` conditions of interactions were ignored when calling `stopInteractions` on a sub-element of the interaction target.
For example, in edit mode, adding or removing a node could invalidate `selectorHas`/`selectorNotHas`, but the interaction would not be stopped as expected.
With this commit, when calling `shouldStop` on an interaction, we now check that `selectorHas` and `selectorNotHas` are still valid. If they are not, `shouldStop` returns true so the interaction is properly stopped.
How to reproduce:
- Edit a website page
- Add an Image Gallery snippet
- Remove all images → The `ImageGalleryEdit` interaction activates to display a placeholder allowing the user to add an image
- Perform an undo
Before this commit:
The `ImageGalleryEdit` placeholder remained visible.
After this commit:
The `ImageGalleryEdit` placeholder correctly disappears.
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
Forward-Port-Of: odoo/odoo#233216This update makes an automated website shop wishlist test more reliable by ensuring the wishlist is empty before the test continues. It helps reduce random test failures, improving confidence in release validation without changing customer-facing behavior.
Original PR description
Add a step to make sure the wishlist is empty before continuing the tour runbot-229616 Forward-Port-Of: odoo/odoo#233262
This fix restores a missing website shop configuration option that was accidentally hidden by a previous change. Business users editing online product list pages can now access the intended option again, improving website setup reliability.
Original PR description
In PR https://github.com/odoo/odoo/pull/230283, an unnecessary applyTo was added to ProductsListPageOption Because of this, the option is never visible. In this commit, we will therefore remove this applyT 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 toolbar label for the standard font choice now says "Default font" instead of just "Default." This makes the editor option clearer for users when choosing text formatting.
Original PR description
Description of the issue: - Renamed `Default` to `Default font` for better clarity in the toolbar. task-5156110 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Editing a record from a grouped list no longer accidentally opens or closes groups. This keeps users' list organization unchanged when navigating through breadcrumbs, reducing confusion and extra clicks.
Original PR description
This commit prevents the fa-edit button from folding/unfolding groups on click in list view. This fixes an issue where following breadcrumbs would unfold previously folded groups. task-5213733
Users can now create a spreadsheet in Documents even when their contact is linked to multiple user accounts, such as after contact merges. This prevents an error that blocked the workflow and improves reliability for affected users.
Original PR description
Before this commit: 1. connect with a user, the partner_id of which is linked to multiple users via the user_ids field (this can be done by manually setting it, or by merging contacts, for example) 2. go to the Documents app, click new, then spreadsheet --> expected singleton Traceback opw-5133850 Forward-Port-Of: odoo/enterprise#97767
Companies that are not subject to VAT can now connect to CodaBox even when their VAT field is set to “/” for non-applicable. In that case, Odoo uses the company registry number instead, avoiding connection failures for affected Belgian businesses.
Original PR description
If a company is not subject to taxes, they may not have a VAT number. In that case, the field can be left empty, such that the Company Registry is used instead for the CodaBox connection. However, the case where "/" (Non Applicable) was used as the VAT number was handled. This commit now handles VAT="/" in the same way it handles no VAT at all by using the company registry as a fallback. The commit also cleans up how the company ID is used to avoid duplicated code by creating a computed field. opw-5164155 Forward-Port-Of: odoo/enterprise#98162 Forward-Port-Of: odoo/enterprise#98025
This fixes a timing issue that could cause the mass mailing email editor to fail when saving changes after the editor window was no longer available. The update prevents the editor from becoming stuck, improving reliability for users creating or editing email campaigns.
Original PR description
This commit fixes 2 issues related to an indeterministic test fail: 1) `_commitChanges` is called in a mutex, and it is possible that the `MassMailingIframe` was destroyed after a `commitChanges` call, but before `_commitChanges` is executed. It is also possible that it was destroyed while the iframe assets are being loaded. If it happens, `_commitChanges` execution should be interrupted, because the editor is not available and the html value for the field can not be extracted anymore. 2) Since `_commitChanges` is sometimes called in a `Mutex`, we can't rely on a `KeepLast` instance, because the promise returned by `KeepLast.add` may never resolve (by design). This means that it would lock the `Mutex` forever, and the `MassMailingHtmlField` would become unusable (not possible to successfully execute `commitChanges`). runbot-error-231717
Swiss payroll users can no longer create workplace names directly from certain employee and contract template fields. This prevents errors that occurred when typing a new workplace name and keeps data entry stable in payroll workflows.
Original PR description
The _rec_name was previously set to partner_id, causing type errors when typing a new workplace name in a Many2one field. Couldn't change it to anything else, as one should have to create a new field in that stable version and this is not the best practice. As a workaround, the corresponding field in the l10n_ch_hr_contract_views.xml is removed from it the quick_create to prevent the creation of new names on the fly. task-5043056 Forward-Port-Of: odoo/enterprise#97191 Forward-Port-Of: odoo/enterprise#93424
The website editor's history dialog now handles slow systems or network delays more reliably, preventing inconsistent loading states that could disrupt automated checks. It also falls back to local time when no user timezone is set, improving date display reliability.
Original PR description
When the runbot CPU was running low or the network is slow, some history dialog related tours sometimes broke. The `revisionLoading` state was false by default thus in those cases Owl was sometimes rendering the UI in a loaded state during init, which was messing with the tour steps. Also use "local" timeZone if user.tz is false. runbot-232648 runbot-233338 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Editing the Terms and Conditions link on product pages no longer triggers an error when the text color comes from a standard muted style. This makes website editing more reliable for shop pages and avoids interrupting users applying link changes.
Original PR description
Problem: On website > shop > product page, when trying to edit the link of "Terms and conditions", a traceback occurs. Cause: When applying changes on "Terms and conditions" in `shop/product`, `ColorPlugin.removeAllColor()` is called on the `a` element. Its color was applied by the `text-muted` class. This case in color removal was not properly handled. Solution: In `getFonts`, consider elements that have those special classes (e.g., `text-muted`) when processing color removal. Steps to reproduce: 1. Open website/shop. 2. Open any product page. 3. Open the editor. 4. Select the "Terms and conditions" text. 5. Click edit in the link popover. 6. Click apply. 7. Traceback occurs. opw-5130016 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233493 Forward-Port-Of: odoo/odoo#229725
This update adjusts Odoo's installation requirements so it can use the newer PDF library package available in Debian 13 and future Ubuntu releases. It helps prevent installation failures on updated operating systems while keeping the change limited to packaging setup.
Original PR description
pypdf2 is not present anymore in debian/trixie Fallback on pypdf if pypdf2 is not available Note that it should mainly fix the deb_install but future fixes may be needed Forward-Port-Of: odoo/odoo#233598
Repair order users can no longer enter a serial number on a new repair line before that line is saved. This prevents the serial number from disappearing after saving and helps keep repair tracking accurate.
Original PR description
When creating a repair order, if you add a line and assign a serial number before saving the line, the serial number is removed when saving. Steps to reproduce: - Create a repair order and save it. - Add a repair line with a product tracked by serial number. - Without saving the repair order, add a serial number on the line. - Save the repair order. - You will notice that the serial number is no longer assigned to the repair line. This PR fixes the issue by making the serial number field read-only until the repair line is saved. opw-5156267 Forward-Port-Of: odoo/odoo#233548 Forward-Port-Of: odoo/odoo#232973
Website forms no longer try to prefill file upload fields after a field type is changed. This prevents an error when saving or refreshing forms, helping editors update contact forms without disruption.
Original PR description
Steps to reproduce: =================== 1- Add a Contact Us form. 2- Change the "Phone" field type to "Attachment" and save. → Traceback occurs. Cause: ====== After changing the field type, the field…
Steps to reproduce: =================== 1- Add a Contact Us form. 2- Change the "Phone" field type to "Attachment" and save. → Traceback occurs. Cause: ====== After changing the field type, the field still keeps its `fillWith` value. When saving or refreshing, the system tries to prefill it with a phone number. Since the type is now "file", it cannot be prefilled, causing a traceback. Why it didn't happen before: ============================ In older versions, fields were fetched using `serializeArray()`: https://github.com/odoo/odoo/blob/ad03751ef0a9e617c2b24a30b1c06aa4e25d48a1/addons/website/static/src/snippets/s_website_form/000.js#L167 That method automatically filtered out unsupported input types: https://github.com/odoo/odoo/blob/ad03751ef0a9e617c2b24a30b1c06aa4e25d48a1/addons/web/static/lib/jquery/jquery.js#L9001 Fix: ==== Exclude fields of file-like types from the prefill logic, similar to the behavior of `serializeArray()`. opw-5145855 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231185
9 changes
Resolved issues and error corrections
Repair order users can no longer enter a serial number on a new repair line before that line has been saved. This prevents the serial number from disappearing when the repair order is saved, reducing data entry mistakes and rework.
Original PR description
When creating a repair order, if you add a line and assign a serial number before saving the line, the serial number is removed when saving. Steps to reproduce: - Create a repair order and save it. - Add a repair line with a product tracked by serial number. - Without saving the repair order, add a serial number on the line. - Save the repair order. - You will notice that the serial number is no longer assigned to the repair line. This PR fixes the issue by making the serial number field read-only until the repair line is saved. opw-5156267 Forward-Port-Of: odoo/odoo#232973
A test in the Project Timesheet Holidays module now uses the correct user record when checking time off that includes a public holiday. This helps keep automated validation accurate and reduces the risk of future regressions in timesheet and holiday handling.
Original PR description
In the 'test_timesheet_time_off_including_public_holiday' test case, 'employee' was mistakenly passed to 'with_user'. This commit replaces 'employee' with 'user' for consistency. task-4809916 Forward-Port-Of: odoo/odoo#233366
This fix restores a missing border on selected category items in the search panel. It improves visual clarity so users can more easily see which category is currently active.
Original PR description
This commit introduces a missing border on active category items within the search panel. task-5121027 Requires: - https://github.com/odoo/enterprise/pull/95900 | Before | After | |--------|--------| | <img width="587" height="654" alt="Capture d’écran 2025-10-28 à 10 28 49" src="https://github.com/user-attachments/assets/4c9f9292-9a18-4470-863d-35b34a3fade6" /> | <img width="494" height="645" alt="Capture d’écran 2025-10-28 à 10 28 31" src="https://github.com/user-attachments/assets/d7994472-b7ae-4518-966a-d42def9e35d5" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The mobile search panel now uses colors that better fit dark mode. This improves readability and visual consistency for users working in dark mode on smaller screens.
Original PR description
This commit adapts colors of search_panel for mobile in dark mode. task-5121027 Requires: - https://github.com/odoo/odoo/pull/233193 | Before | After | |--------|------------| | <img width="904" height="1022" alt="image" src="https://github.com/user-attachments/assets/9d2dd1d9-4d23-4c55-8e2d-2cb978db5f39" /> | <img width="360" height="640" alt="Capture d’écran 2025-10-28 à 10 37 46" src="https://github.com/user-attachments/assets/2b030e05-d0ad-46d9-ae7c-10593de1bb36" /> |
Generating a pricelist report no longer crashes when no pricelists have been configured. Instead, users are shown a clear message asking them to create at least one pricelist first, helping avoid confusion and support requests.
Original PR description
Description of the issue/feature this PR addresses: When generating a pricelist report, Odoo crashes if there are no configured pricelists. Current behavior before PR: The system raises an unhandled error when attempting to generate a report without any pricelist record. Desired behavior after PR is merged: If no pricelist exists, a user-friendly UserError message is shown instructing to configure at least one pricelist before generating the report. This is a backport of PR #233429 (merged in 19.0) to 18.0. Issue : https://github.com/odoo/odoo/issues/233393 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change fixes an unstable automated test in the manufacturing app where timing differences could cause inconsistent results. It helps keep quality checks reliable without changing business workflows or user-facing behavior.
Original PR description
### Issue: The test `test_mrp_backorder_operations` behaves non-deterministically. It may fail at this assertion:…
### Issue: The test `test_mrp_backorder_operations` behaves non-deterministically. It may fail at this assertion: https://github.com/odoo/odoo/blob/6e37542b53f9c9ec1baf8d58b1eeca376252186f/addons/mrp/tests/test_backorder.py#L986-L989 Because the `duration` of done workorder can vary. ### Cause: The delta time between `button_start()` and `button_finish()` https://github.com/odoo/odoo/blob/6e37542b53f9c9ec1baf8d58b1eeca376252186f/addons/mrp/tests/test_backorder.py#L983-L985 `button_finish()` triggers `Productivity._close()` https://github.com/odoo/odoo/blob/6e37542b53f9c9ec1baf8d58b1eeca376252186f/addons/mrp/models/mrp_workcenter.py#L572-L576 Which sets `Productivity.duration` to 0 if delta time is zero. Consequently, `workorder.duration` also becomes zero. When `bo_2.button_mark_done()` is called, the duration is set to `duration_expected` (240 in this test), which the assertion only can pass in that case. If delta time isn't zero, then duration will also be non-zero. So it will not set to `duration_expected`. As a result the assertion will fail. runbot-233247
Fixed an issue where course slides with a "|" character in their name could cause the browser tab title to show the wrong website name after switching slides. This keeps course navigation labels consistent and avoids confusing learners.
Original PR description
How to reproduce: - Go to a course with a slide containing "|" in its name. (e.g. Basics of Gardening) - Change slide to this special named slide. - Change back to another slide. - The browser title contains the string part after the "|" instead of the website name. This commit now handles slides with name containing the "|" character. Task-5152858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230489
Calendar events created across multiple days in week view now show the correct start and end times on each day segment. This prevents confusing 12pm or midnight times from appearing, making scheduling clearer for users.
Original PR description
When creating an event in week view spanning over multiple days, all parts of the event display 12pm as end date (except the last one) and 00am as the start date (except the first one). This fix allow calendar views to display the correct hour in week view when the event spans multiple days. task-4700158
Inactive guests who have not been online in the last 12 hours will no longer receive call notifications. This prevents outdated or disconnected live chat participants from being disturbed and keeps call alerts focused on active users.
Original PR description
With this commit, guests who haven't been online in the last 12 hours will not be notified of a call starting. task-5136330 backport of https://github.com/odoo/odoo/pull/230337
5 changes
Resolved issues and error corrections
Accounting report action buttons now stay accessible when several options are shown. Extra buttons are moved into an additional navigation area, preventing the date filter from covering them and making reports easier to use.
Original PR description
Please watch https://youtu.be/8fJ2Fr8sEZE .
The French Factur-X Chorus Pro integration now uses the label "Code de Service" for the relevant invoice field, aligning wording with Chorus Pro documentation. This helps users enter the expected information more confidently and reduces confusion when preparing invoices for Chorus Pro.
Original PR description
Rename the field meant to input the "Code de Service" to match Chorus Pro's documentation more closely after client feedbacks. Source: https://www.pagero.com/onboarding/aife/aife-fr#requirements livechat-908691128
Fixed an issue where course slide names containing the "|" character could cause the browser tab title to show the wrong website name after switching slides. This keeps course navigation clearer and avoids confusing page titles for learners.
Original PR description
How to reproduce: - Go to a course with a slide containing "|" in its name. (e.g. Basics of Gardening) - Change slide to this special named slide. - Change back to another slide. - The browser title contains the string part after the "|" instead of the website name. This commit now handles slides with name containing the "|" character. Task-5152858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230489
This fix prevents errors when multiple companies share the same Chilean tax ID, such as branch-based organizations. The recipient lookup now uses only one matching company record, making incoming electronic document processing more reliable.
Original PR description
Before this commit, if multiple companies shared the same RUT (VAT), for example companies with branches, searching a recipient could return more than one company record. This could lead to errors when accessing variables that expect a single record. To prevent this issue, the search is now limited to one company record. OPW-5128543
The installation setup now works with the newer PDF library package used by Debian 13 and future Ubuntu releases. This helps keep Odoo installable on upcoming Linux versions without requiring manual package workarounds.
Original PR description
pypdf2 is not present anymore in debian/trixie Fallback on pypdf if pypdf2 is not available Note that it should mainly fix the deb_install but future fixes may be needed Forward-Port-Of: odoo/odoo#233598