Daily updates from Odoo
Monday, November 10, 2025
12 changes · master
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#98748Amazon order fulfillment updates now include the carrier code required in some countries. This helps delivery confirmations match Amazon's expected format and reduces the risk of rejected or incomplete shipment updates.
Original PR description
The `POST_ORDER_FULFILLMENT_DATA` feed that is used to push order delivery info to Amazon should follow the `OrderFulfillment` schema (see https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_4_1/OrderFulfillment.xsd), but it was missing the `CarrierCode` element, which is required in some countries. This commit adds the missing element to the payload, with the formatted carrier name as a value. If the carrier name cannot be matched, "Other" is used as a fallback to signal Amazon that they should rely on the `CarrierName` instead. Forward-Port-Of: odoo/enterprise#99026
The 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#97998Fixed an issue where converting very large Excel files with many sheets into Odoo spreadsheets could fail with an error. This improves reliability for users working with complex uploaded spreadsheets in Documents.
Original PR description
Steps to reproduce: - upload a large xlsx file (e.g. with >1000 sheets) - open it and convert it to o-spreadsheet => traceback Task: 5222481 Forward-Port-Of: odoo/enterprise#99087 Forward-Port-Of: odoo/enterprise#98443
Fixes Swedish POS fiscal reporting so sales orders are correctly validated through the required blackbox process again. It also restores reliable receipt reprint tracking and corrects the organisation number format, helping businesses stay compliant with Swedish point-of-sale requirements.
Original PR description
Before this commit, the Swedish blackbox was completely broken in 18.0 because the `push_single_order` function is no longer used. To fix this, the same approach as `pos_blackbox_be` was used, where the `preSyncAllOrders` function was overridden instead. In addition, the old receipt reprinting logic was no longer working, and so it now uses the `nb_print` field to keep track of the number of reprints. Finally, we also forward port a fix from 17.0 (ddbc1fc) to correct the format of the organisation number, which for some reason was not forward ported originally. task-5077448 Forward-Port-Of: odoo/enterprise#98437 Forward-Port-Of: odoo/enterprise#98139
This fix ensures payroll work entries stay accurate when employee attendance records are created, edited, or deleted. It prevents duplicate, missing, or wrongly removed work entries so payroll calculations better reflect actual attendance time.
Original PR description
[FIX] hr_work_entry: fix work entries not being regenerated on attendance modification Steps to reproduce: - In Attendance, create, modify or delete an attendance - In Payroll, go to the work entries…
[FIX] hr_work_entry: fix work entries not being regenerated on attendance modification Steps to reproduce: - In Attendance, create, modify or delete an attendance - In Payroll, go to the work entries tab - If creating an attendance, work entries with the previous and current attendance duration will be displayed - If modifying an attendance, changing the duration would not create a new work entry nor modify the existing one(s) - If deleting an attendance, the work entry would be deleted even if there were other attendances on the same day Reason: - For creation, the method creating work entries from attendances had a strict inequality, which caused the check to never trigger. - For modification, nothing was done to regenerate the work entry after editing the duration. - For deletion, the method archived work entries regardless of whether or not there were other attendances in the day. How it was fixed: - For creation, changed the strict inequalities to inequalities to allow the check for work entries to be made - For modification, if the check in or check out dates are changed, triggers the regeneration of linked worked entries - For deletion, the work entry is only deleted when no attendances are left, and then regenerate work entries to match the new total attendance duration Task ID: 5116353 Forward-Port-Of: odoo/enterprise#96635
The 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
Quality checks created during receipt confirmation now use the company from the related stock move line instead of the currently active company. This prevents errors when users confirm Company B receipts while working from Company A, improving reliability for multi-company operations.
Original PR description
When creating quality checks per quantity, a multi-company error occurs if the active company differs from the one defined on the control point. Steps to reproduce: - Create a Quality Control Point for Company B and Product Table for the receipt operation with a per-quantity control. - Create a receipt in Company B for this product but leave it in draft. - Switch to Company A and try to confirm → error. Root cause: The company_id was not set when creating the quality check, causing it to default to `env.company` (A) instead of the stock move line’s company (B). opw-86993 Forward-Port-Of: odoo/enterprise#99076 Forward-Port-Of: odoo/enterprise#98655
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