Friday, September 5, 2025
19 changes · saas-18.3
Enhancements to existing features
Attendance approver information in an employee's My Profile work details can now become read-only when employees are not allowed to edit their own data. This helps companies keep approval responsibilities visible while preventing unauthorized changes to HR settings.
Original PR description
Add read-only mode for the attendance approver in the My Profile Work Information tab when `allow employee to edit own data` is disabled. task-5008352 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225705 Forward-Port-Of: odoo/odoo#222430
This update changes how automated tests identify messaging and live chat interface elements, making the tests less likely to fail because of visual or styling changes. It does not change the user experience, but it helps maintain product quality by making test results more dependable.
Original PR description
This commit updates the test selectors to use data-as-tab-id to avoid ambiguity. This change enhances the robustness of the tests by reducing their dependency on CSS classes. Using data-as-tab-id attributes provides a more stable and reliable way to select elements in the DOM for testing purposes. backport - https://github.com/odoo/odoo/pull/224974 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225454 Forward-Port-Of: odoo/odoo#225385
UrbanPiper connection errors now show the specific message returned by the service instead of a generic system error. This helps teams quickly understand and resolve setup or synchronization issues, such as duplicate store references.
Original PR description
Before this commit: --- - HTTP errors from UrbanPiper API only showed the generic Python exception. - It was difficult to identify the actual cause (e.g., duplicate store ref_id). After this commit: --- - HTTP error handling now extracts the `message` from the API JSON response. - The displayed/logged error clearly reflects the real cause of the failure. task-5026169 Forward-Port-Of: odoo/enterprise#92713
Resolved issues and error corrections
This update corrects minor grammar issues in welcome messages shown at the start of direct chats and channels. The messages now read more naturally, improving clarity and polish for end users.
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
The dialog used to create a new website now clearly displays the title "Add Website." This small fix improves clarity for users when starting the website creation process.
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
Website editor snippet previews now show the Parallax label only when the preview actually uses a parallax background. This avoids missing labels on custom snippets and misleading labels on theme snippets, helping users choose the right website building blocks.
Original PR description
Steps to reproduce the issues: **Issue 1** - Enter "Website" edit mode. - Drag and drop a "Cover" snippet into the page. - Save the snippet as a custom snippet. - Click the "Custom" category. - Bug:…
Steps to reproduce the issues: **Issue 1** - Enter "Website" edit mode. - Drag and drop a "Cover" snippet into the page. - Save the snippet as a custom snippet. - Click the "Custom" category. - Bug: the "Parallax" label is not displayed on the snippet preview. **Issue 2** - Install the "Artists" theme. - Enter "Website" edit mode. - Click the "Intro" category. - Bug: The "Parallax" label is displayed on the "Cover" snippet preview even though it doesn't have a parallax effect. Commit [1] added a label on snippet previews to indicate if they are Carousel, Popup, Gallery, Tab, or Parallax. This label is linked directly to the snippet's original template. However, this does not work well for "Parallax" because it's an option that can be enabled or disabled. So it doesn't make sense to keep the label when the option is not active. This commit fixes that by checking the snippet structure to see if it contains a parallax on its background. [1]: https://github.com/odoo/odoo/commit/63cd0c6497c3c2e8482dc62b4359eb2431a75926 task-4926420
This fixes an issue where company names entered for event tickets sold through Point of Sale were not saved on the resulting event registration. Businesses can now rely on registration records to include the company information collected during checkout.
Original PR description
Steps to reproduce: 1. Add a question to an event with type 'Company'. 2. Sell a ticket for that event in a POS, making sure to fill in the company question. 3. Validate the sale 4. In the backend, check the new event registration that was created. EXPECTED: The company name you filled in is saved to the registration. ACTUAL: The company name is blank. There were three things that needed to be fixed in order for the company name to work: 1. Use `company_name` instead of `company` on the JS side 2. Add `company_name` to the list of loaded POS fields 3. Tell the POS that `company_name` is not computed (this was already being done for name, email, phone) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225604 Forward-Port-Of: odoo/odoo#225534
Odoo now requires users to link an activity to a record when assigning it to another internal user. This prevents an error during activity creation and makes the scheduling flow clearer and more reliable.
Original PR description
An `AccessError` occurs when a user tries to schedule an activity assigned to another internal user without linking it to a record. **Steps to reproduce**: 1) Install a module 2) Click on the `View…
An `AccessError` occurs when a user tries to schedule an activity assigned to another internal user without linking it to a record. **Steps to reproduce**: 1) Install a module 2) Click on the `View all activities` from activities (Top right corner) 3) Create a new activity without setting a "Link to" record, and assign it to another user. **Issue**: An AccessError will be raised. **Cause**: When the activity has no res_model, the `_action_schedule_activities_personal` method is triggered: https://github.com/odoo/odoo/blob/8e1e4f68763af141c97647fd3e3a2d3a64654a13/addons/mail/wizard/mail_activity_schedule.py#L400-L402 https://github.com/odoo/odoo/blob/8e1e4f68763af141c97647fd3e3a2d3a64654a13/addons/mail/wizard/mail_activity_schedule.py#L415-L424 In this method, both `res_id` and `res_model_id` are passing False, and since `activity_user_id` is not the current user, this leads to an `AccessError` when trying to create the activity. **Solution**: Make res_model required when the assigned user (activity_user_id) is not the current user. opw-5032100
This fixes a template inheritance issue where text added after removing an element could disappear when branding markers were enabled. Business users benefit from more reliable customized views and website/page layouts, especially where inherited templates adjust existing content.
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
Live chat sessions that only involve bots are now automatically closed when they have been inactive for more than one day. This keeps live chat reporting cleaner by preventing abandoned bot conversations from remaining open indefinitely and distorting statistics.
Original PR description
**Purpose of this PR:** Garbage collect livechat sessions involving only bots if the last message was sent more than 1 day ago. This prevents indefinitely ongoing sessions from skewing livechat statistics. task-4972170 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Creating a debit note now records only one clear message in the activity log instead of two overlapping notes. This reduces confusion for accounting users reviewing the history of an entry.
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 update fixes an issue where checkbox-based multi-selection fields did not pass important background settings when searching for available choices. This helps ensure the correct records appear in cases where those settings are needed, such as attachment-related selections.
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
A new automated test checks that adding tags to contacts does not trigger a traceback. This helps prevent a previously fixed contact tagging issue from returning in future updates.
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
This fixes an error that could appear when Odoo checked company compatibility on records linked to multiple companies. Instead of a technical crash, users now receive a clear message explaining which records belong to different companies, helping them correct accounting setup 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#225177This fixes an issue where debug mode appeared in the website page frame but not in the main website backend after navigating from a website page. Website administrators and support teams now get a consistent debug experience when using URL-based debug mode.
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
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
Spreadsheet menu entries for pivots, lists, and charts now keep the correct order even when many lists are added. This prevents unrelated actions from appearing among list items, making spreadsheet menus clearer and easier to use.
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
Cash in and cash out operations in Chilean POS no longer fail when a printer is connected. This helps store staff complete cash management steps smoothly and print the expected 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 adjusted so it waits properly for input updates. This reduces random test failures and helps keep release validation more stable without changing business features.
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