Daily updates from Odoo
Monday, November 10, 2025
32 changes
4 changes
Resolved issues and error corrections
This change fixes a visual issue where the breadcrumb label could briefly show the wrong name or flicker when moving between livechat sessions. It improves the user experience by keeping the session title consistent and readable during navigation.
Original PR description
Before this PR, The breadcrumbs flickered when navigating between livechat sessions. This occurred because the `FormController`…
Before this PR,
The breadcrumbs flickered when navigating between livechat sessions.
This occurred because the `FormController` ([@web/views/form/form_controller](https://github.com/odoo/odoo/blob/saas-18.3/addons/mail/static/src/core/web/discuss_patch.js#L16-L23))
updated the breadcrumb title inside the `onRendered` hook and set it to
`this.model.root.data.display_name` which is `undefined`, the `Discuss` component
also updated the breadcrumb title in a `useEffect` hook. ([@mail/code/web/discuss_patch.js](https://github.com/odoo/odoo/blob/saas-18.3/addons/mail/static/src/core/web/discuss_patch.js#L16-L23))
The two updates conflicted: the onRendered hook first set the title to
“Unnamed,” and then the useEffect hook replaced it with the correct title,
causing a brief flicker. Additionally, when navigating to another session with
the same thread.displayName, the useEffect hook did not trigger (since its
dependency did not change), but onRendered still ran, causing the breadcrumb
to remain “Unnamed”.
This PR fixes the issue by introducing a `LivechatFormController` which
updates the breadcrumbs when channel is fetched in store.
task-4671251
Before:

After:

task-4671251
Forward-Port-Of: odoo/odoo#233167This change corrects a failing automated test in the manufacturing accounting area after a previous update to how duration is calculated. It helps keep the test suite reliable so future changes can be validated with confidence.
Original PR description
### Issue: This is caused by changing the duration inverse in #233777. ### Cause: Before #233777, in duration inverse, only sum of `time_ids` was taken into account to calculate the `duration`. After that PR, `time_ids` with `get_working_duration` are also taken into account which cause this test fail. runbot-233742
This change fixes an issue where installing the Argentina withholding demo data could create duplicate taxes with the same name. It keeps the demo setup clean and avoids confusion when users review or configure taxes.
Original PR description
**Description of the issue/feature this PR addresses**: This pr is to avoid duplicated taxes when the demo data is installed. **Steps to reproduce**: 1. Install l10n_ar_withholding module with demo…
**Description of the issue/feature this PR addresses**: This pr is to avoid duplicated taxes when the demo data is installed. **Steps to reproduce**: 1. Install l10n_ar_withholding module with demo data. 2. Take position in "(AR) Responsable Inscripto" company. 3. Check the taxes created on "Invoicing > Configuration > Accounting > Taxes". 4. Delete the filter "Sale or Purchase". 5. Add custom filter: Argentina Withholding Payment Tax type (l10n_ar_withholding_payment_type) is in ["supplier", "customer"]. 6. You will see that there are duplicated taxes (duplicated names) with suffix (Copy). **Current behavior before PR**: Duplicated taxes are created when demo data is installed. <img width="1597" height="795" alt="image" src="https://github.com/user-attachments/assets/51b65037-bb89-4ec7-8adf-21636b68e405" /> **Desired behavior after PR is merged**: No duplicated taxes are created when demo data is installed. _Task latam side_: 1360. _Task Adhoc side_: 57627. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226992
This change turns off IndexedDB during Hoot test runs for Point of Sale. It helps prevent test environments from filling up with too many databases, making the full test suite more reliable and easier to run.
Original PR description
Disable IndexedDB in Hoot tests to avoid creating to much IndexedDB databases when running the full test suite. IndexedDB is still tested in dedicated tours. Forward-Port-Of: odoo/odoo#234701
4 changes
Resolved issues and error corrections
Products with a non-variant attribute and only one available option will now be matched correctly in the cart instead of being added as a new line every time. This prevents duplicate lines for the same item and makes shopping cart behavior more consistent for customers.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have a product attribute with variant creation set to never; 2. have product using only this attribute, with only a single value; 3. open website editor on…
Versions -------- - 18.0+ Steps ----- 1. Have a product attribute with variant creation set to never; 2. have product using only this attribute, with only a single value; 3. open website editor on /shop; 4. enable add-to-cart button & save; 5. use button on the aforementioned product at least twice. Issue ----- Each time the product gets added, a new line is created. Cause ----- Because there's only a single value, the product configurator doesn't pop up by default when adding the product to the cart. Without the configurator pop-up, the `_cart_update` method doesn't receive any `no_variant_attribute_value_ids`, which are used find a matching line if the product template has any `no_variant` attribute. Solution -------- Instead of checking `product.product_tmpl._has_no_variant_attributes()`, to see if we should attempt to match `no_variant_attribute_value_ids`, check if the added product has any `no_variant` attributes that have more than one value or are optional (multi-checkbox). If not, a `no_variant` product behaves the same as a single-variant product. opw-5093175 opw-5137351 Forward-Port-Of: odoo/odoo#234958 Forward-Port-Of: odoo/odoo#233452
This change updates how page assets are included in the appointment and rental website snippets. It helps keep these pages working with the latest Odoo asset structure and reduces the risk of display or loading issues after upgrades.
Original PR description
See https://github.com/odoo/odoo/pull/104836 task-2963840 Forward-Port-Of: odoo/enterprise#98250 Forward-Port-Of: odoo/enterprise#35153
When users click a channel in the Discuss kanban view, Odoo now opens the channel’s form view instead of doing nothing. This makes it easier to review and manage channel details directly from the channel list.
Original PR description
**Steps to reproduce:** Open 'Discuss' Click on 'Channel' in the menu to display channels in kanban view Click on any channel **Cause**: The action 'mail.discuss_channel_action' did not include form view in view_mode. **Effect**: Clicking on a kanban card does not display the form view. **Fix**: Open the form view of a channel when clicking on a kanban card. Task-5076555 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change stops Hoot tests from creating unnecessary IndexedDB databases during full test runs. It helps keep automated testing cleaner and more reliable, while IndexedDB coverage remains in dedicated tests.
Original PR description
Disable IndexedDB in Hoot tests to avoid creating to much IndexedDB databases when running the full test suite. IndexedDB is still tested in dedicated tours.
1 change
Resolved issues and error corrections
When a pivot table is sorted by a date or date-time field in the web view, inserting it into a spreadsheet now keeps the same sort order. This fixes an issue where the date values were not normalized correctly, which could make the spreadsheet version appear unsorted.
Original PR description
If on the web pivot view we create a pivot with a date/dateTime field in the columns, and sort on one of these columns, the resulting pivot when inserted in a spreadsheet isn't sorted. This was because we didn't normalize the date values in the pivot `sortedColumn`, and we had UTC timestamps `2023-01-01 00:00:00` instead of normalized values `01/2023`. Task: [3575465](https://www.odoo.com/web#id=3575465&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
7 changes
Resolved issues and error corrections
Fixes an issue where editing a website checkout page after adding a rental-related product could trigger an error due to repeated tooltip cleanup. The change limits cleanup to the intended rental information messages, making the checkout and website editing flow more reliable.
Original PR description
Following commits odoo/odoo@d37d908 and odoo/enterprise@901b8ea, the tooltip cleanup logic disposes elements in `website_sale_renting`, and when the same logic runs again in `payment`, it tries to…
Following commits odoo/odoo@d37d908 and odoo/enterprise@901b8ea, the tooltip cleanup logic disposes elements in `website_sale_renting`, and when the same logic runs again in `payment`, it tries to dispose them a second time, causing a null element error.
Steps to reproduce:
1. Install `website_sale_renting`
2. Install a demo payment method
3. Go to the shop, add any product to the cart, proceed to payment
4. Click the "Edit" button on the website → observe the error
```js
web.assets_frontend_lazy.min.js:3912 TypeError: Cannot read properties of null
(reading 'closest') at Tooltip.dispose (web.assets_frontend_lazy.min.js:2710:70)
at PaymentForm.<anonymous> (web.assets_frontend_…zy.min.js:8282:1450)
at Colibri.destroyInteraction (web.assets_frontend_lazy.min.js:6472:68)
at Colibri.destroy (web.assets_frontend_lazy.min.js:6524:55)
at InteractionService.stopInteractions (web.assets_frontend_lazy.min.js:6584:162)
at InteractionService.stopInteractions (web.assets_frontend_lazy.min.js:6625:907)
at stop (website.assets_insid…rame.min.js:137:290)
at HTMLDocument.<anonymous> (website.assets_insid…rame.min.js:153:450)
at WebsiteBuilderClientAction.onEditPage (web.assets_web.min.js:22215:55)
```
- Restrict tooltip handling to elements with the .o_rental_info_message class to ensure only the intended elements are selected.
- This fix ensures tooltip cleanup is performed safely without re-disposing already disposed elements.
Forward-Port-Of: odoo/enterprise#98748The Sign app now handles unsupported file uploads properly when debug mode is enabled. Instead of showing a technical crash, users see a clear message explaining that the file type is not supported.
Original PR description
Version: - saas-18.3 Steps to reproduce: - Enable debug mode. - Try uploading a non-PDF file in the Sign app. Before: - Uploading a non-PDF file in debug mode caused a traceback error. - The TemplateAlertDialog component tried to use a message prop that wasn’t defined. After: - Replaced the use of the undefined message prop with the correct body prop to display the error message. Impact: - Fixes the traceback error in debug mode. - Shows a clear and user-friendly error message when uploading unsupported file types. task-4828439 Forward-Port-Of: odoo/enterprise#89081
This fix makes Shiprocket delivery tax processing more robust when India GST tax data is not available. It also stabilizes related tests by using a consistent tax rate, reducing false failures and improving reliability.
Original PR description
Some other test adds a fiscal position with tax mapping. This creates 2 problems 1. The new taxes have a tag, which means we evaluate the right hand of…
Some other test adds a fiscal position with tax mapping. This creates 2 problems
1. The new taxes have a tag, which means we evaluate the right hand of
https://github.com/odoo/enterprise/blob/8d3fe30c627eada1186c15480876fb2e8f7ddb59/delivery_shiprocket/models/shiprocket_request.py#L239
However, since l10n_in is not installed,
`tax.env.ref(f"l10n_in.tax_tag_{gst}gst", False)`
does not return anything (False is not a fallback)
https://github.com/odoo/odoo/blob/1e96a3d127e8f521d3027f7110026ae84e11ed5e/odoo/api.py#L588
So we end up looking for `None` in `tax_tag_ids`, which leads us to compare the `_name` properties, see
https://github.com/odoo/odoo/blob/1e96a3d127e8f521d3027f7110026ae84e11ed5e/odoo/models.py#L6545-L6558
2. The test added in 4d5df93 was assuming the default company 15% tax, which was not always true
Solution
-----
1. Provide a fallback for the `ref` lookup
2. Force a 15% tax in the test
-----
runbot-232692
Forward-Port-Of: odoo/enterprise#99027
Forward-Port-Of: odoo/enterprise#97998The Accounting Reports control panel now handles narrow mobile screens correctly. Users can scroll horizontally within the report controls while the header remains stable, making reports easier to use on phones.
Original PR description
Before this commit, the control panel had an overflow in mobile view. The classes `mx-auto` and `fit-content` were causing the issue, so they got taken out. The class `overflow-x-auto` got put in to manage the horizontal overflow and get a horizontal scroll on the content so the header could stay fixed. task-4768525
This fixes a display issue in the Gantt view where the empty-state helper’s blur effect could appear over other page elements. Users should see cleaner screens when no Gantt content is available, without visual obstruction of nearby controls or components.
Original PR description
This commit resets the `position` and `top` attributes in `gantt_view.scss` causing the previously implemented opacity blur effect of the nocontent helper to wrongly appear on top of some components. task-5245728 Forward-Port-Of: odoo/enterprise#98997
The sitemap now only lists the Helpdesk page for websites where Helpdesk is actually enabled. This prevents visitors and search engines from seeing links to Helpdesk pages on websites that do not offer that service.
Original PR description
Steps to reproduce: 1) Create two websites(Website A, Website B) in one company 2) Configure domains in both websites, for example, http://localhost:8069 for Website A, http://127.0.0.1:8069 for Website B 3) In Helpdesk team settings, enable Website Form and select Website A as the website for the helpdesk 4) Now go to browser, and open http://127.0.0.1:8069/sitemap.xml Current Behaviour: Website B will show <loc>http://127.0.0.1:8069/helpdesk</loc> in sitemap even though Website B has no Helpdesk Team! Solution: This commit will add a sitemap method, that will only show the helpdesk in sitemap if it's enabled Forward-Port-Of: odoo/enterprise#96912
This fix updates an automated test so it runs under the same project user permissions expected in normal use. It prevents misleading test failures caused by administrator-level access, helping keep project budgeting quality checks reliable.
Original PR description
In commit [1], a new test was added, but it fails because the result of `template_values` does not match the expected outcome. The failure occurs at line [2], where the method `_get_profitability_values` is called with the project's environment. This environment includes the superuser, which causes the discrepancy in the result. This commit resolves the issue by calling the project (self.project_goats) with the user set to `self.user_projectuser`. [1]: https://github.com/odoo/enterprise/commit/29c6e1d648218219c718a0448fffb8b8444af5df [2]: https://github.com/odoo/odoo/blob/fad692777e90f3c91f91d2a91e706f8bdb64a08a/addons/project/models/project_update.py#L116 runbot-233851 Forward-Port-Of: odoo/enterprise#98897
11 changes
Resolved issues and error corrections
This change prevents the breadcrumb title from briefly changing to an incorrect label when users switch between livechat sessions. It improves the browsing experience by keeping the session name stable and accurate while navigating.
Original PR description
Before this PR, The breadcrumbs flickered when navigating between livechat sessions. This occurred because the `FormController`…
Before this PR,
The breadcrumbs flickered when navigating between livechat sessions.
This occurred because the `FormController` ([@web/views/form/form_controller](https://github.com/odoo/odoo/blob/saas-18.3/addons/mail/static/src/core/web/discuss_patch.js#L16-L23))
updated the breadcrumb title inside the `onRendered` hook and set it to
`this.model.root.data.display_name` which is `undefined`, the `Discuss` component
also updated the breadcrumb title in a `useEffect` hook. ([@mail/code/web/discuss_patch.js](https://github.com/odoo/odoo/blob/saas-18.3/addons/mail/static/src/core/web/discuss_patch.js#L16-L23))
The two updates conflicted: the onRendered hook first set the title to
“Unnamed,” and then the useEffect hook replaced it with the correct title,
causing a brief flicker. Additionally, when navigating to another session with
the same thread.displayName, the useEffect hook did not trigger (since its
dependency did not change), but onRendered still ran, causing the breadcrumb
to remain “Unnamed”.
This PR fixes the issue by introducing a `LivechatFormController` which
updates the breadcrumbs when channel is fetched in store.
task-4671251
Before:

After:

task-4671251
Forward-Port-Of: odoo/odoo#233167This change prevents the Helpdesk page from appearing in a website’s sitemap unless Helpdesk is actually enabled for that site. It avoids exposing links on websites that do not have a Helpdesk team configured, which keeps site maps accurate for visitors and search engines.
Original PR description
Steps to reproduce: 1) Create two websites(Website A, Website B) in one company 2) Configure domains in both websites, for example, http://localhost:8069 for Website A, http://127.0.0.1:8069 for Website B 3) In Helpdesk team settings, enable Website Form and select Website A as the website for the helpdesk 4) Now go to browser, and open http://127.0.0.1:8069/sitemap.xml Current Behaviour: Website B will show <loc>http://127.0.0.1:8069/helpdesk</loc> in sitemap even though Website B has no Helpdesk Team! Solution: This commit will add a sitemap method, that will only show the helpdesk in sitemap if it's enabled
When creating a new employee, the system now pulls the work address from the active company instead of the current user’s company. This ensures employees created in a different company start with the right address automatically.
Original PR description
Steps to reproduce: - Open the Employee app. - Create a new employee in a company different from the current user's company. Issue: - The default address is taken from the current user's company instead of the active company's address. Fix: - Default address now uses the active company's address instead of the user's company. task-5138714 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230049
This change prevents an error from appearing when someone uploads a non-PDF file in the Sign app while debug mode is enabled. Instead of a traceback, users now see a clear and friendly message explaining that the file type is not supported.
Original PR description
Version: - saas-18.3 Steps to reproduce: - Enable debug mode. - Try uploading a non-PDF file in the Sign app. Before: - Uploading a non-PDF file in debug mode caused a traceback error. - The TemplateAlertDialog component tried to use a message prop that wasn’t defined. After: - Replaced the use of the undefined message prop with the correct body prop to display the error message. Impact: - Fixes the traceback error in debug mode. - Shows a clear and user-friendly error message when uploading unsupported file types. task-4828439 Forward-Port-Of: odoo/enterprise#89081
This change corrects a test that was failing when a project was added because it was using the wrong user context. By running the project with the expected project user instead of superuser access, the test now matches the intended business behavior.
Original PR description
In commit [1], a new test was added, but it fails because the result of `template_values` does not match the expected outcome. The failure occurs at line [2], where the method `_get_profitability_values` is called with the project's environment. This environment includes the superuser, which causes the discrepancy in the result. This commit resolves the issue by calling the project (self.project_goats) with the user set to `self.user_projectuser`. [1]: https://github.com/odoo/enterprise/commit/29c6e1d648218219c718a0448fffb8b8444af5df [2]: https://github.com/odoo/odoo/blob/fad692777e90f3c91f91d2a91e706f8bdb64a08a/addons/project/models/project_update.py#L116 runbot-233851
The app creator in Studio now uses a border color that stands out against the background. This makes checkboxes and other boundary elements easier to see while building an app, improving usability and reducing confusion.
Original PR description
Before this commit : when creating an app using the studio, none of the borders were visible, including the checkboxes in the app creator, because the background color of the app creator and the border color were the same. After this commit: the border color for the app creator has been changed to make it visible. task-5138669
This update corrects how the empty-state helper is displayed in the Gantt view. It prevents the helper’s faded overlay effect from appearing on top of other interface elements, improving readability and avoiding visual overlap issues.
Original PR description
This commit resets the `position` and `top` attributes in `gantt_view.scss` causing the previously implemented opacity blur effect of the nocontent helper to wrongly appear on top of some components. task-5245728
This update adds a test to make sure channel mentions are preserved when a user edits a message using the ArrowUp shortcut in the composer. It helps prevent message edits from dropping important channel references, which keeps conversations accurate and easier to follow.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/229546 Add a test to verify that mentioned channels are correctly restored when editing a message using the ArrowUp shortcut in the composer.
The Discuss command palette now uses smaller avatars on desktop so it matches the rest of the Discuss interface. This makes the list look more consistent and allows more results to be visible at once, while keeping the larger mobile layout unchanged.
Original PR description
Discuss command avatar were much bigger than rest of discuss UI, such as discuss sidebar. Discuss sidebar avatar size was reduced in 19.0, but discuss command palette still had big size like before this change. This commit fixes the issue with reduced size. To compensate with reduced size, more items are shown at once. This change only applies to desktop: in mobile the avatar need to be bigger, so this commit doesn't affect small UI. Part of Task-5227387 Before <img width="1280" height="946" alt="Screenshot 2025-11-10 at 12 59 56" src="https://github.com/user-attachments/assets/532c7d7f-a381-43f4-8a65-b0e3db7d6809" /> After <img width="1281" height="946" alt="Screenshot 2025-11-10 at 12 59 43" src="https://github.com/user-attachments/assets/9e018c92-a862-4aee-a2ad-dadd880b21f3" />
This change updates a manufacturing accounting test so it matches the latest way production duration is calculated. It ensures the test reflects the current logic and prevents false failures in automated checks.
Original PR description
### Issue: This is caused by changing the duration inverse in #233777. ### Cause: Before #233777, in duration inverse, only sum of `time_ids` was taken into account to calculate the `duration`. After that PR, `time_ids` with `get_working_duration` are also taken into account which cause this test fail. runbot-233742 Forward-Port-Of: odoo/odoo#234305
When users click a channel from the Kanban view in Discuss, the channel now opens in the form view as expected. This makes it easier to review and manage channel details without extra steps.
Original PR description
**Steps to reproduce:** Open 'Discuss' Click on 'Channel' in the menu to display channels in kanban view Click on any channel **Cause**: The action 'mail.discuss_channel_action' did not include form view in view_mode. **Effect**: Clicking on a kanban card does not display the form view. **Fix**: Open the form view of a channel when clicking on a kanban card. Task-5076555 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227668
4 changes
Resolved issues and error corrections
This update fixes a spelling mistake in the Website Sale module, changing an incorrect word to the intended one. It improves the clarity and professionalism of the customer-facing text without affecting how the feature works.
Original PR description
Description of the issue/feature this PR addresses: This PR fixes a typo that was found in website_sale module. There is a mistake in writing "you" --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds automated tests for a sales margin scenario to make sure purchase price is recalculated correctly when a canceled order is reset, then the pricelist currency is changed. It helps prevent pricing errors for products with automated costing methods and improves confidence in future changes.
Original PR description
Description of the issue/feature this PR addresses: Test-only PR to verify `purchase_price` recomputation behavior when changing pricelist currency after order cancellation (per reviewer feedback on https://github.com/odoo/odoo/pull/232553). Current behavior before PR: No test coverage for this scenario. Desired behavior after PR is merged: Test validates correct currency conversion of `purchase_price` for AVCO/FIFO products after cancel → draft → pricelist change workflow. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When a candidate’s name is changed, any existing follow-up activities now automatically reflect the updated name. This keeps records consistent and avoids confusion for recruiters viewing older tasks.
Original PR description
Issue: When updating an hr recruitement candidate name (stored in hr_applicant after 18.2) the name change is not updated in the name of previously created activities. Cause: The field res_name in mail.activity is computed and stored only at creation of an activity. Solution: Retrigger the compute of an activity when updating a candidates name. Task-4988342
This update adjusts an automated purchase test so it works correctly with PostgreSQL 18. It keeps the test focused on the real business behavior while avoiding a database-specific error name change that caused unnecessary test failures.
Original PR description
Apparently in pg18 a standard-compliance
fix (postgres/postgres@086c84b23d99c2ad268f97508cd840efc1fdfd79) has led to `RESTRICT_VIOLATION` being emitted in cases which formerly emitted `FOREIGN_KEY_VIOLATION`. One such case is specifically being tested for by `test_purchase_order_line_without_uom`, leading to this test failing systematically when running pg18:
psycopg2.errors.RestrictViolation: update or delete on table "uom_uom" violates RESTRICT setting of foreign key constraint "purchase_order_line_product_uom_id_fkey" on table "purchase_order_line"
DETAIL: Key (id)=(29) is referenced from table "purchase_order_line".
Update the test to use the more generic `IntegrityError` as it's probably more than sufficient for our purposes. Technically we could pass a tuple of `(ForeignKeyViolation, RestrictViolation)` but it doesn't really seem necessary. And it would require fixing the `_raisesContext` override as currently it is very much *not* compatible with that.1 change
Resolved issues and error corrections
The upload button in the accounting dashboard can no longer be dragged around by mistake. This keeps the interface stable and avoids confusing shifts in the upload area while users work.
Original PR description
Issue: - In the dashboard, the upload button (purchase journal and others) could be dragged. - This caused unintended movement of the upload UI element. Fix: - Added `draggable=false` to the upload button element. - Ensures the button remains fixed and cannot be dragged around. TaskID-5114617