Monday, November 3, 2025
29 changes · master
Resolved issues and error corrections
Website editors can now remove a background color from countdown boxes without triggering an error. This keeps the page-building experience smooth when previewing or editing countdown snippets with no custom color set.
Original PR description
Steps to Reproduce: 1. Add a Countdown snippet. 2. Change the layout to Boxes. 3. Apply a background color to the layout. 4. Hover over the delete button in the color picker. 5. A traceback error occurs. Issue: A traceback error occurs because the does not have a default value assigned. This is necessary for the snippet to preview correctly when no additional color is applied. Fix: Assign a default value to ensure that the hover behavior works properly, even when no color is set. The issue was produced here: https://github.com/odoo/odoo/commit/03c552690b15#diff-a0262b81bb090b8c62afbd342b2a30f054cf353a35f9fc0ceeb0f86b7b9cd645 task-4752497 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233586 Forward-Port-Of: odoo/odoo#224012
Creating a sales order from a project no longer fails when the order has no service product. This helps users save project-related sales orders more reliably, including draft orders or orders with non-service items.
Original PR description
Currently, an error occurs when creating a sale order for a project. **Steps to Reproduce:** - Install the `sale_project` module. - Go to `Project` and, in the `list view`, create a `project` and…
Currently, an error occurs when creating a sale order for a project. **Steps to Reproduce:** - Install the `sale_project` module. - Go to `Project` and, in the `list view`, create a `project` and `set a customer`. - Click the `Sales Order` button in the header. - Save the `sale order` without adding `any product` or by adding a `non-service product`. **Error:** `AttributeError: 'bool' object has no attribute 'order_id'` This error occurs, when user creating a sale order for a project without adding a service product, then service sol becomes empty [1], which raises an error here [2] when trying to access the sale order. This commit ensures that if there is no service sol, empty sol is taken in the service sol. [1]- https://github.com/odoo/odoo/blob/3121577430cdfa485af4d69792745a6f9c2ffe2f/addons/sale_project/models/sale_order.py#L272 [2]- https://github.com/odoo/odoo/blob/3121577430cdfa485af4d69792745a6f9c2ffe2f/addons/sale_project/models/sale_order.py#L276 sentry-6948584510 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232079
A missing setting in the CRM menu action was restored so CRM pages use the expected web address. This prevents navigation issues and helps users reliably open CRM from bookmarks or internal links.
Original PR description
Bug === Since b422372df8274db923aff53d624b83dcfdbc6605 , the action has been refactored, but we forgot to set the `path` field on the action. Task-5225750
Invoice terms and conditions now update automatically when a customer's language is changed during invoice creation. This ensures customers receive invoice text in the correct language without needing to recreate the invoice or partner record.
Original PR description
Issue: When changing the customer’s language during invoice creation, the terms & services were not retranslated, unlike when creating a new partner in a different language. Repro Steps: 1. Create an invoice with terms link or plain enabled. 2. Change the partner's language from the invoice creation view. 3. Terms is not translated. Cause: The translation compute was only triggered on partner change, not language change. Fix: Added dependency for partner_id.lang to the narration compute to ensure it updates when the language changes. opw-5031933 Forward-Port-Of: odoo/odoo#232433 Forward-Port-Of: odoo/odoo#230800
This update corrects an internal identifier in the mail composer so it can be reused reliably by other mail-related components. It helps prevent integration issues between plugins without changing the user-facing email experience.
Original PR description
The id used for the mail_composer_plugin had dots, which leads to issues that it cannot be used as a dependency or shared in other plugins. Updated the static id format in mail_composer_plugin.js to use underscores instead of dots. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233846
The Cambodian accounting package now uses unique tax names, preventing errors when a company manually installs the chart of accounts. This makes initial accounting setup more reliable for businesses operating in Cambodia.
Original PR description
Fixes an issue where some taxes in the Cambodian package have the same name, leading to errors when manually installing the chart template. Interestingly enough, the constraints does not trigger on the demo data company. Task [link](https://www.odoo.com/odoo/project.task/5194444) task-5194444 Forward-Port-Of: odoo/odoo#234092 Forward-Port-Of: odoo/odoo#232968
Point of Sale session names now stay continuous when cash posting fails. This prevents skipped session numbers, making records easier to track and reconcile.
Original PR description
Before this commit, if an issue occurred while posting the cash details, the session sequence would still increment even though the operation failed, leading to gaps in session names. With this commit, the sequence only increments when the operation succeeds, ensuring continuous session naming without gaps. related: https://github.com/odoo/enterprise/pull/98157 opw-5180712 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233997 Forward-Port-Of: odoo/odoo#233183
This fix makes an automated test for Discuss sub-channel search more reliable under heavy system load. It helps prevent false test failures while ensuring lazy loading of conversation threads continues to work correctly.
Original PR description
The `test_discuss_sub_channel_search` tour ensures that lazy loading of threads works correctly with the search feature. Technically, the component uses the `useVisible` hook which waits for a trigger to be visible before loading more threads. However, under high CPU load, the `IntersectionObserver` might not detect the change. For example, clearing the search input will make the element disappear, but scrolling afterward may make it reappear. As a result, the component might not detect that it should load more threads. In practice, this should never happen. The test now waits for the state to update before scrolling. fixes runbot-181951 Forward-Port-Of: odoo/odoo#233890 Forward-Port-Of: odoo/odoo#233419
Clicking "View Poll" from poll results now reliably opens and highlights the related poll message instead of sometimes crashing. This improves the Mail polling experience by ensuring the needed poll message data is available when users navigate to poll results.
Original PR description
Before this PR, clicking "View Poll" from a poll result could sometimes cause a crash. This occurred because the highlight message function expects a thread to be passed, but we were passing the `start_message_id` thread, which might be undefined. Similar to [1], the poll ended UI requires the start message to be passed. This commit ensures that the necessary data are sent along with the end message. [1]: https://github.com/odoo/odoo/pull/233897 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 a website shop configuration option that was accidentally hidden from users. Store managers can now see and use the intended product list page setting in the website builder again.
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 Forward-Port-Of: odoo/odoo#233573
The website shop search field now displays product search examples with apostrophes correctly, such as “desk's lamp,” instead of showing encoded characters. This avoids a small but visible presentation issue that could make the storefront look unpolished to shoppers.
Original PR description
currently, we use `t-out` to set the placeholder, which escapes HTML so `desk's lamp` becomes `desk's lamp` Fix: - replace `t-out` with `t-valuef.translate` to properly store placeholder. **Before** <img width="513" height="270" alt="image" src="https://github.com/user-attachments/assets/92046e41-e471-4eba-9510-a9ea91eeccd8" /> **After** <img width="472" height="252" alt="image" src="https://github.com/user-attachments/assets/79157a51-adac-4c95-8e39-a0caa7cf1537" /> opw-5136972 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232177 Forward-Port-Of: odoo/odoo#230961
This fix prevents color formatting from being applied to attached file boxes that are meant to be non-editable. It helps keep documents and messages visually consistent when users select all content and change text colors.
Original PR description
Problem: When having the `o_file_box` in the selected nodes and applying color, the file box gets the color applied even though it has `contenteditable=false`. Cause: `SelectionPlugin.resources.is_node_editable_predicates` only checks if the parent element is editable for a node. But the node itself can be non-editable even if its parent is editable. Solution: Use `isContentEditable` utils which properly check if a node is editable. Steps to reproduce: 1. Add file. 2. Press CTRL+A and apply a font color. 3. The color style is applied to the node. opw-5080082 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226927
This fix aligns the visual styling of sections and subsections in sales portal pages and generated reports with the latest design update. It helps customers and sales teams see a consistent document layout across online views and printable reports.
Original PR description
In commit[1] [2] the sections and subsections were adapted on reports and portal. However in commit[3] we slightly changed the design, thus the change needs to be replicated on reports and portal. task-5216018 Followup of task-5125867 [1]: https://github.com/odoo/odoo/commit/4e81bb2e2f99ef6e038534de05a4dbe48080c49e [2]: https://github.com/odoo/odoo/commit/21384e5c5ac2161e28ca13844675a507b50fcb54 [3]: https://github.com/odoo/odoo/commit/1952f2e95a6050c7beb5e8120301c712c6e0a58 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where demo companies did not receive extra accounting setup data from localization modules during chart of accounts installation. It helps ensure test or demo databases reflect the correct accounting configuration when additional modules are installed.
Original PR description
Steps to reproduce: * create a new database with a module inheriting a CoA and demo data activated (i.e. `-i l10n_co_edi --with-demo`) The demo company won't load the additional data defined in the module, in this case the data for the field `l10n_co_edi_type` with the call from `<account.chart.template>._get_co_edi_account_tax`. This is because during the recent refactor, the new flag `force_update` had not been taken into account everywhere it should. See: 64f9dcb045231ea8cf2edb14de536decb8b9b508
This fix updates base language date formatting so dates display consistently and correctly for users. It helps avoid confusion in day-to-day workflows where localized date presentation matters.
Original PR description
TASK-ID: 5194672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233356
Community users can now enable the Gelato integration from settings without being blocked by an Enterprise upgrade prompt. This fixes an access issue that made the Gelato module harder to install for eligible Community users.
Original PR description
Remove the 'Enterprise' widget from Gelato setting, which prevented community users from installing Gelato module from settings without upgrading to enterprise. Forward-Port-Of: odoo/odoo#230776
Website navigation now marks a menu item as active only when its page URL exactly matches the page being viewed. This prevents similar page names, such as iOS 26 and iPadOS 26, from both appearing selected, making navigation clearer for visitors and editors.
Original PR description
__Current behavior before commit:__ A menu is shown as active if the unslug version of its URL matches the current accessed URL. The issue is that the unslug version of a menu linked to a page has no real meaning. Such menu should only be shown as active if the request URL path matches exactly. __Description of the fix:__ Added a check to ensure that when a menu is linked to a page, it isn't shown as active if its path doesn't exactly match the request path. __Steps to reproduce:__ 1. On the website, go to Site > Pages 2. Create a new page with title "iOS 26" and another page with title "iPadOS 26" 3. Go to /ios-26 4. Both menus "iOS 26" and "iPadOS 26" are highlighted task-5094899 Forward-Port-Of: odoo/odoo#233865 Forward-Port-Of: odoo/odoo#230623
This fixes an issue where website background color choices were changed by mistake during a prior update. Restoring the correct selector values helps ensure users see and apply the intended background colors when editing website pages.
Original PR description
During the FW-port PR (https://github.com/odoo/odoo/pull/230283/files), the background color selectors were mistakenly modified. This commit restores their correct values. 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#233743
This fix ensures payroll runs only check payslips that actually have issues before listing those issues. It prevents incorrect issue handling when a pay run contains a mix of problematic and normal payslips, helping payroll teams review exceptions accurately.
Original PR description
Commit e4e573e1219f38561ae74e2086cee6d54cda6f46 introduced a bug. Steps to reproduce: - Generate a payrun with at least two payslips: one with an issue and another without any issue This commit fixes the issue by filtering the issues payslips before getting their issues. task-5230921
The Planning shift recurrence banner no longer appears immediately after recurrence is enabled. It now shows only after recurring shifts have actually been created, avoiding misleading guidance for users.
Original PR description
**Steps to reproduce:** --------- 1. Create a shift. 2. Save the shift. 3. Open the shift and enable the recurrence. 4. Observe that the recurrence banner is immediately displayed. **Issue:** ----- The recurrence banner is shown as soon as a shift is marked recurring, even though no recurring shifts have been generated yet. This is misleading since the banner has no effect until the actual recurrence slots exist. **Cause:** ------- The banner visibility was based on repeat and id, so it appeared too early, before any recurring shifts were actually created. **Fix:** -------- Update the banner visibility condition to check for both repeat and recurrency. Now, the recurrence banner only appears once the recurrence record exists and recurring shifts are generated: task-5163851 Forward-Port-Of: odoo/enterprise#97245
A failing test setup was corrected so spreadsheet edition tests pass when that module is installed on its own. This helps keep automated validation reliable and reduces false failures during quality checks.
Original PR description
tests `test_image_attachment_copy_access_rights` and `test_image_attachment_deleted_access_rights` are failing when only `test_spreadsheet_edition` is installed. Runbot error: 233711
Fixed an error that could block French companies from sending a VAT report when launching the EDI VAT action from the tax return report menu. The wizard now keeps the related tax return context, so users can submit the VAT report without encountering a crash.
Original PR description
Steps to reproduce: - With a FR Company Setup - Create a bill with tax in past month - Create Tax return for past month, validate - Click "Submit", fill the required vals in wizard and 'Send VAT report' - Everything works as expected - From Accounting / Accounting / Closing / Tax Returns click Cog > EDI VAT - Fill the required vals in wizard and again 'Send VAT report' Issue: Traceback will raise `ValueError: Expected singleton: account.return()` Analysis: When opening the VAT Return wizard from Accounting / Accounting / Closing / Tax Returns the value of return record is not passed on opw-5107549 Forward-Port-Of: odoo/enterprise#98544
New salary offers created from an existing offer now receive a proper secure link with a generated token. This prevents broken offer links showing "False" instead of a valid token, helping recruiters share salary configurator offers reliably.
Original PR description
_______________________________________ ## Short functional explanation of the error When creating an offer on the page of another offer, the salary configurator url doesn't contain a token, but instead, contains token = false. ## Reproduction Steps 1. Open the recruitment module. If there's no job position nor application, create some. 2. Open an existing application and click on Generate Offer. 3. Click on New on the top left of the screen. 4. Fill the new application and click on save. ### Expected behavior The field 'Link' contains an URL with, at the end, &token=x, with x a randomly generated token. ### Unexpected behavior The field 'Link' contains an URL with, at the end, &token=False. ## Origin of the issue The token generation code wasn't called when creating a new offer the way described in reproduction steps. _________________________________________ opw-4885796 --- Forward-Port-Of: odoo/enterprise#98503 Forward-Port-Of: odoo/enterprise#89546
This fix prevents salary rule forms from incorrectly requiring a percentage base field after certain condition changes. Payroll users can now save salary rules without unnecessary validation errors, reducing friction when configuring payroll rules.
Original PR description
**Steps to reproduce:** - Install the hr_payroll module. - Open a salary rule form view. - Change amount_select to Percentage and try to save → validation error occurs because amount_percentage_base is required. - Keep amount_select the same and change condition_select to Salary Input → the same validation error occurs. **Issue:** The amount_percentage_base field is incorrectly made required even when condition_select changes. The requirement should depend solely on amount_select, not condition_select. **Cause:** The field amount_percentage_base remains mandatory when condition_select is updated, leading to validation errors. **Fix:** This PR adjusts the logic so that the amount_percentage_base field is required only when appropriate, based on both condition_select and amount_select. task-5090125 Forward-Port-Of: odoo/enterprise#95419
This change fixes an intermittent issue that could occur when closing AI-related chat windows. It makes the close process happen in the expected order, reducing unpredictable failures and improving reliability for users.
Original PR description
Attempt to fix runbot error 233689 by refactoring `_onClose` across patches. The problem occurs because of the async nature and the many side effects that occur. `_onClose` is not supposed to be async. PR community https://github.com/odoo/odoo/pull/233597
Point of Sale cash session names now keep a continuous sequence when cash posting fails. This prevents missing session numbers, making records easier to follow and reducing confusion during audits or daily reconciliation.
Original PR description
Before this commit, if an issue occurred while posting the cash details, the session sequence would still increment even though the operation failed, leading to gaps in session names. With this commit, the sequence only increments when the operation succeeds, ensuring continuous session naming without gaps. related: https://github.com/odoo/odoo/pull/233183 opw-5180712 Forward-Port-Of: odoo/enterprise#98468 Forward-Port-Of: odoo/enterprise#98157
This update makes closing AI-related chat windows more dependable by preventing timing issues that could cause inconsistent behavior. It helps reduce errors in automated checks and improves stability for users interacting with chat features.
Point of Sale preparation displays now include any free-text details entered for custom product attributes. This helps kitchen or preparation staff see the full customer request, matching the information already shown on receipts.
Original PR description
Steps to reproduce: ------------------- 1. Create a PoS product with an attribute of type "Radio", name it "X", and add a value to it, name it "Y", with the "Free text" option selected. 2. From PoS, click the product, for the attribute "X", select the value "Y", and enter some text in the text input area "blabla". 3. Order the product. Observation: On the preparation display, only the attribute name and value are display, but not the entered text, i.e. "X: Y" instead of "X: Y: blabla". Fix: ---- We now show the custom value (free text) if any. This matches what's been shown on the receipt in PoS. opw-5111768 Forward-Port-Of: odoo/enterprise#95874
The salary contract test setup was corrected to rely only on permission groups from modules it already depends on. This prevents avoidable test failures and helps keep quality checks stable without changing employee-facing functionality.
Original PR description
Before this commit: Running `hr_contract_salary` tests were failing, due to groups used from the module `hr_payroll`, which is not part of the dependencies. After this commit: Use groups from the dependencies. runbot-233547 Forward-Port-Of: odoo/enterprise#98286