Friday, September 5, 2025
25 changes · saas-18.4
Resolved issues and error corrections
The window used to create a new website now displays the title "Add Website." This small fix makes the action clearer for users and improves consistency in the website setup experience.
Original PR description
The modal used to create a new website was missing a title. This commit fixes the issue by setting its header to "Add Website". Forward-Port-Of: odoo/odoo#225387 Forward-Port-Of: odoo/odoo#225302
Welcome messages in direct chats and channels now use more natural wording. This small correction improves readability and makes the first message users see in conversations less confusing.
Original PR description
Description of the issue this PR addresses: Some welcome messages in direct chats and channels contain minor grammatical errors, making them less natural and slightly confusing for end users. Current behavior before PR: Direct chat message: "This is the start of direct chat with %(userName)s" Channel message: "This is the start of #%(channelName)s channel" Desired behavior after PR is merged: Direct chat message: "This is the start of your direct chat with %(userName)s" Channel message: "This is the start of the #%(channelName)s channel" This improves readability and ensures the welcome messages are grammatically correct. task-4952480 Forward-Port-Of: odoo/odoo#223324
The Discuss welcome screen now uses a shared application state instead of temporary screen state to decide when it appears. This prevents inconsistent display behavior caused by page or component lifecycle timing, giving users a steadier experience when opening Discuss.
Original PR description
Before this commit, whether to display the welcome view was based on a component state, so it was dependent on the lifecycle of components This commit changes the condition so that it relies on the store which should prevent inconsistent state. https://runbot.odoo.com/odoo/error/111051 Forward-Port-Of: odoo/odoo#225486 Forward-Port-Of: odoo/odoo#225325
The website editor now shows custom black-to-white color options correctly when dark mode is enabled. This prevents users from accidentally applying the opposite color than the one they selected, improving confidence when editing page designs.
Original PR description
In the html builder, colorpickers belong to the global window (backend), while the elements they target belong to an inner iframe (frontend). When the dark theme is toggled on in the backend, it doesn't affect the frontend. However, given how it works, until this commit, custom black to white color tints were switched visually, but still applied the opposite color (i.e. clicking on the black tint applied white). This commit makes sure that, in such an environment where the colorpicker and the targeted element are not in the same DOM, the color swatches are properly displayed.
This fixes a display issue in inherited templates where added text could disappear when nearby content was removed with branding enabled. Business users benefit from more reliable page and view customizations, reducing unexpected missing text in customized Odoo screens.
Original PR description
With the inherit branding activated, have a xpath in an inherited view that removes a node, and adds some text afterwards in the parent of the removed node Before this commit, the text of the spec was not output. This was because it was appended to the removal ProcessingIntruction that was removed later on After this commit, a spec can add text in a node from which a child has been removed 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#223576
Creating a debit note now records only one clear message in the document chatter instead of two overlapping notices. This reduces confusion for users reviewing accounting document history and keeps audit trails easier to read.
Original PR description
* PROBLEM: install account_debit_note module, add a debit note -> check the log at chatter we will see 2 message, one is 'This entry has been duplicated from ...' and another is 'This debit note was created from..' * Fix by only keep one message log in that case * This continue work of https://github.com/odoo/odoo/pull/214302 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#224762
This fix ensures many-to-many checkbox fields pass the relevant context when looking up available records. This helps related records, such as attachments, appear correctly when special business rules or filters are needed.
Original PR description
**Description of the issue/feature this PR addresses:** When `name_search` is called, the `context` is not passed to the method. In some cases, this is necessary, for example, if the field is related to `ir.attachment` and you want to pass `skip_res_field_check` in the context (see https://github.com/OCA/social/pull/1672). **Current behavior before PR:** The `context` is not passed to `name_search`. **Desired behavior after PR is merged:** Ability to pass `context` to `name_search`. From #215420 Forward-Port-Of: odoo/odoo#225438 Forward-Port-Of: odoo/odoo#216588
The employee organizational chart zoom button now opens the correct public employee view for users without HR access rights. This prevents an error and lets limited-access users navigate the chart as intended.
Original PR description
Steps to Reproduce: 1. Install the HR module and log in with a user account that has no access rights. 2. Open the employee form view and click on the zoom button in the organizational chart. 3. A traceback error will occur. Cause: The action associated with this button is intended for the `hr.employee` model, which the user does not have access to. Fix: Use the action created for public employees to open the organizational view correctly. Task-5039925
This fix prevents an unexpected system error when checking company compatibility for records that use multiple companies instead of a single company field. Users now receive a clear business error explaining which records belong to incompatible companies, helping them correct configuration issues faster.
Original PR description
`_check_company` can be called on models that don't have a `company_id` field, but they might have a `company_ids` one. In this case the message logged as the user error should be able to handle that…
`_check_company` can be called on models that don't have a `company_id` field, but they might have a `company_ids` one. In this case the message logged as the user error should be able to handle that scenario.
Example on how to reproduce the error in accounting:
```py
company_a, company_b
tax_group self.env["account.tax.group"].create(
{
"name": "Tax Group",
"company_id": company_a.id,
}
)
tax = self.env["account.tax"].create(
{
"name": "30% - Loan Tax",
"type_tax_use": "sale",
"tax_exigibility": "on_payment",
"amount": 30,
"amount_type": "percent",
"tax_group_id": tax_group.id,
"company_id": company_a.id,
}
)
account = self.env["account.account"].create({
...,
"company_ids": [Command.link(company_b.id)]
})
account.tax_ids |= tax
```
Error raised
```
AttributeError: 'account.account' object has no attribute 'company_id'
```
After the PR the following message appears:
```
odoo.exceptions.UserError: Incompatible companies on records:
- “Loan Principal” belongs to company “BE Company Loan Tests” and “Default Taxes” (tax_ids: '30% - Loan Tax') belongs to another company.
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#225177The USB device interface now handles cases where a connected device does not provide a valid product name. This prevents unexpected crashes and helps keep IoT hardware connections more reliable.
Original PR description
Before this commit, if a USB device did not provide a valid product string, the USB interface would crash trying to access it. After this commit, we wrap the access in a try/except to prevent the crash. task-5060062 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225564
The accounting invoice menu now triggers the correct action when users refresh outgoing e-invoice statuses. This prevents the system from accidentally running the incoming invoice fetch action instead, helping users keep e-invoice status information up to date.
Original PR description
[FIX] account: add refresh_out_einvoices_status to fetch_einvoices_cog The fetch_einvoices_cog OWL component was missing the trigger for button_refresh_out_einvoices_status, as it always called button_fetch_in_einvoices. Now the function will call a getter to allow easier customization by overriding buttonAction, and it now supports the missing flow for button_refresh_out_einvoices_status. task-4714467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225417
Step to reproduce: - install `l10n_ar` , `website_sale` and `payment_demo` - Add a language e.g. : spanish (AR) - switch to `(AR) Responsable Inscripto` and create a website for this company - change default company for "marc demo" user to `(AR) Responsable Inscripto` - login with "marc demo" , go to shop page, and change site language to sapnish - add a product e.g, three set sofa to cart and goto checkout page - proceed and you will be directed to "Address management page" Observatio
Original PR description
Step to reproduce: - install `l10n_ar` , `website_sale` and `payment_demo` - Add a language e.g. : spanish (AR) - switch to `(AR) Responsable Inscripto` and create a website for this company - change…
Step to reproduce: - install `l10n_ar` , `website_sale` and `payment_demo` - Add a language e.g. : spanish (AR) - switch to `(AR) Responsable Inscripto` and create a website for this company - change default company for "marc demo" user to `(AR) Responsable Inscripto` - login with "marc demo" , go to shop page, and change site language to sapnish - add a product e.g, three set sofa to cart and goto checkout page - proceed and you will be directed to "Address management page" Observation: "Identification Type " and "AFIP Responsibility" are not translated Cause: After this commit [1], module l10n_ar_website_sale was dropped and address logic was mooved to l10n_ar and l10n_latam_base but the following pot files were not updated, this caused missing of tranlation in following modules [1] https://github.com/odoo/odoo/commit/5a93da8e9220ecbf664b26445b04717a9245ef5e Fix: Add missing translations in respective po and pot files Before: <img width="903" height="517" alt="image" src="https://github.com/user-attachments/assets/f1e265bd-e976-4698-b83b-9de821073b8c" /> After: <img width="806" height="374" alt="image" src="https://github.com/user-attachments/assets/a04dfde9-8e5d-4699-a1a4-1a8c36339f63" /> opw-5000512 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224260
Adds a test to ensure contact tag searches return the expected format. This helps prevent a traceback when users add tags to contacts, improving reliability without changing user workflows.
Original PR description
Add basic test case for PR https://github.com/odoo/odoo/pull/221866 to ensure that the _search_display_name method on res.partner.category returns a list domain Forward-Port-Of: odoo/odoo#222165
An unstable automated test in the website module has been skipped because it was causing inconsistent validation failures. This helps keep the release process reliable by avoiding false alarms while the underlying test issue can be addressed separately.
Original PR description
Test seems dodgy to start with (cf odoo/odoo#224814 disabling it), and apparently #225034 made it mostly but not entirely broken: that PR did manage to pass in [140299] but broke two stagings before that ([140290], [140291]), and then broke the 4 stagings afterwards (one PR got flagged but was apparently an innocent victim). [140299]: https://runbot.odoo.com/runbot/batch/2119196/build/88387072 [140290]: https://runbot.odoo.com/runbot/batch/2119088/build/88383126 [140291]: https://runbot.odoo.com/runbot/batch/2119112/build/88383656
Website editors can now remove a background image from the Floating Blocks snippet without triggering an error. This makes page editing more reliable and avoids interruptions while customizing ecommerce website content.
Original PR description
Steps to reproduce: - Open a website in edit mode - Drag & drop the "Floating Blocks" eCommerce snippet - Remove the background image of the second block - A traceback is raised Cause: The `editingEl` was `undefined` when calling `showMainColorPicker`, leading to an error. Solution: Use `useDomState` to safely compute the value of `showMainColorPicker` based on the current `editingEl`.
Chatbot conversations now keep channel history cleaner by avoiding unwanted blank lines when a message has no content. This prevents confusing or cluttered chat transcripts for users and support teams reviewing conversations.
Original PR description
When a chatbot conversation contains messages with empty body, this empty body would be converted into a newline which is not desired. This commit ensures that empty messages are not converted into newlines in the channel history. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225455 Forward-Port-Of: odoo/odoo#225001
The website builder now shows the right label for the color setting when configuring hover animations, such as displaying “Overlay” for the Zoom Out effect. This reduces confusion for users editing website images and restores expected behavior from the previous builder.
Original PR description
The commit 80b5db99a3c26c3dd4fb5c55e04b8813dddb5b8d brought the options for "on hover" animations into the new website builder. The label for the "Color" option used to change depending on the current effect, and this was lost in the new builder. This commit brings it back Steps to reproduce: - Open website builder - Add an animation "On Hover" (this can be done on images) - Set the "Effect" to "Zoom Out" - Bug: the label for the color is "Color" instead of "Overlay" task-4367641
The website builder now correctly shows language codes, such as FR, when that label option is selected for the language selector. This prevents confusion for website editors configuring multilingual site headers and ensures the published selector matches their choice.
Original PR description
During the initial [website builder refactor], a mistake happened when porting the option for the label of the language selector. This commit adds the missing key in the views parameter when the "Code" is choosen Steps to reproduce: - Open website builder, on a multi-language website - Click on the language selector in the header - Select "Code" for the "Label" of "Language Selector" - Bug: Instead of showing the code (for example "FR"), it shows the language name (for example "Français") [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641
The website backend now correctly stays in debug mode when a user enters debug mode from a website page and opens the editor/backend area. This avoids confusion for administrators and support teams who rely on debug mode to inspect or troubleshoot website settings.
Original PR description
Before this commit, the debug mode was not correctly applied in the website backend when navigating from a website page. While the `?debug=assets` URL parameter was present, the debug mode was only active within the website's iframe, not the main backend interface itself. Steps to reproduce: - Go on a website page - Enter debug mode by adding `?debug=assets` to the URL (not ctrl+k) - Click on editor on the top left to navigate to website backend - Check with `odoo.debug` in console - Debug is activated in the iframe not in the backend Forward-Port-Of: odoo/odoo#223800
The Swiss payroll occupation report is now clearly read-only, preventing users from trying to add or delete entries that the system cannot save. This avoids confusing database errors while keeping the report fully available for review.
Original PR description
The model `l10n.ch.occupation` is backed by an aggregated SQL view (GROUP BY). PostgreSQL does not support inserts or deletes on such views, so exposing Create/Delete in the UI led to errors. This change makes the report safe to use by disabling creation and deletion on the list view (`create="0" delete="0"`), keeping it read-only while fully browsable. task-5042279
Fixed an issue where adding many lists to a spreadsheet could place unrelated menu actions in the middle of list entries. This keeps spreadsheet menus organized and easier to use when working with larger spreadsheets.
Original PR description
Steps to reproduce: - Add 25 lists in a spreadsheet => The order of the lists is not correct, menu items like "Re-insert static pivot" are positioned inside the list items. This commit fixes the sequence computation of the menu items for the pivots, lists and charts in spreadsheet to always be inside one integer (from 50 to 51 for pivots, 53 to 54 for lists, ...). Task: 5025230
This fix updates an automated Planning test so it uses today's date directly instead of relying on a function. It helps prevent build failures and keeps quality checks reliable without changing customer-facing Planning behavior.
Original PR description
Now the tour use edit with the date of today and not a function runbot build error: 164213 Forward-Port-Of: odoo/enterprise#93856 Forward-Port-Of: odoo/enterprise#93816
Fixed an issue in Chilean point-of-sale localization where cash in/out operations could fail when a receipt printer was connected. This helps stores complete cash movement workflows smoothly and print the needed receipt without interruption.
Original PR description
Before this commit, when a printer was connected, performing a cash in/out operation would raise an error when trying to print the receipt. opw-5060974 Forward-Port-Of: odoo/enterprise#93834
A flaky automated test in Odoo Studio was stabilized so it no longer fails randomly when the test runner moves faster than form inputs can update. This helps keep validation pipelines reliable and reduces noise from false failures.
Original PR description
The def test_rename function (tour web_studio_main_and_rename) crashed undeterministically because the tour engine is now faster, inputs soimetime do not have the time to update. This commit fixes one instance of this. runbot-error-163471 Forward-Port-Of: odoo/enterprise#93826
Payroll localisation test setup has been corrected so attendance-related overtime fields are only used where the attendance module is available. This reduces failed automated checks across country payroll packages and helps keep localisation updates reliable.
Original PR description
**Issue:**
The test_{xx}_contract_template_loading test fails across all localisations due to incorrect fields being passed.
**Cause:**
The issue occurs because the _get_whitelist_fields_from_template() method includes the overtime_from_attendance field, introduced in this https://github.com/odoo/enterprise/pull/92093. This field comes from the hr_work_entry_attendance module, which is not listed as a dependency in all payroll localisations. As a result, the field cannot be found during test execution.
**Solution:**
Remove the overtime_from_attendance field from all _get_whitelist_fields_from_template overrides in the localisation modules, and instead include this field by overriding the function in the hr_work_entry_attendance module.
build_error-231680