Wednesday, November 19, 2025
23 changes · 19.0
Enhancements to existing features
Quality checks for repair orders are now created only after a repair is confirmed, instead of as soon as it is opened. This avoids generating checks for repairs that are never actually processed and keeps quality follow-up focused on active work.
Original PR description
- Generate quality checks when a repair order is confirmed rather than when it is created. This ensures that quality checks are only created for repair orders that are actually being processed. - Product and lot updates quality checks only after confirmation. Task [5227065](https://www.odoo.com/odoo/project/966/tasks/5227065)
The IoT Box technical information now includes a clickable link from the image version hash to the exact GitHub commit. This makes it easier and faster to verify which software version is running on the device when troubleshooting or checking updates.
Original PR description
To ease checking the HEAD commit on the IoT Box, we now compute the github url to the commit, and redirect to it clicking on the hash in the technical information tab. Forward-Port-Of: odoo/enterprise#99673 Forward-Port-Of: odoo/enterprise#99422
The self-order attribute selection page now shows a clear “Required” badge next to mandatory attributes. This makes it easier for customers to spot what must be selected and reduces the chance of missing required options.
Original PR description
PURPOSE: --------- - Help users to easily identify which attributes are required in the POS self-order attribute selection page. Before this commit: ------ - Required attributes had no badge or clear visual indication. After this commit: ---------- - Added a Required badge next to attribute names so users can quickly identify and select them. Task-5079571
Resolved issues and error corrections
The Job Page button on job listings now appears only when Online Posting is enabled, and stays hidden when it is disabled. This avoids confusion and makes the button match the job’s publishing status, while still linking directly to the job page when available.
Original PR description
This commit fixes the visibility of the "Job Page" button on the job kanban view. The job page button is now invisible when the `Online Posting` setting is disabled and visible when it is enabled, and directs to the job link. task-5153230 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233421
This update adds a database index to a field used to link invoice symbols with invoice templates in the Vietnam e-invoicing module. It helps the system retrieve related records more efficiently and keeps the module aligned with Odoo’s performance rules.
Original PR description
TestIndex.test_enforce_index_on_one2many_inverse Traceback (most recent call last): AssertionError: The following fields should be indexed with a btree index, as they are inverse of an One2many field: - if the field is sparse -> 'btree_not_null' - if the field is Required or low fraction of False/NULL values -> True or 'btree' - if not sure -> 'btree_not_null': l10n_vn_edi_viettel.sinvoice.symbol.invoice_template_id (inverse of l10n_vn_edi_viettel.sinvoice.template.invoice_symbols_ids) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix improves the message shown when an accounting entry is not balanced. If several entries are affected, users will now see the full list instead of only the first one, making it easier to identify and resolve the issue.
Original PR description
The commit 3467b5971423f70581c6be2caf7f8a8d86ee70f1 intended to improve the error message in `_check_balanced()` by tailoring it based on the number of affected entries. However, in the case of multiple affected entries, the error was raised after the first iteration, preventing the full list of unbalanced entries from being collected and displayed to the user. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236212
This update stops the system from recording unnecessary field changes when using the salary configurator. It helps keep employee change history accurate and avoids confusing log entries during payroll setup.
Original PR description
We use a hack to force the tracking of some fields on the employee. It causes some problem when you work with the salary configurator as we don't want the changes logged in this case. The solution is to not track prepare the fields if there is a tracking disable in the context, like mail does.
This change adds a database index to a key link used by the Vietnam Viettel e-invoicing feature. It helps Odoo find related records faster, improving performance and reducing delays in processes that rely on these invoice templates.
Original PR description
`TestIndex.test_enforce_index_on_one2many_inverse Traceback (most recent call last): AssertionError: The following fields should be indexed with a btree index, as they are inverse of an One2many field: - if the field is sparse -> 'btree_not_null' - if the field is Required or low fraction of False/NULL values -> True or 'btree' - if not sure -> 'btree_not_null': l10n_vn_edi_viettel.sinvoice.symbol.invoice_template_id (inverse of l10n_vn_edi_viettel.sinvoice.template.invoice_symbols_ids)` 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 update adjusts the website builder test setup so it works reliably in Firefox. It prevents a test-only browser behavior from blocking the builder tests, helping ensure the website editing experience can be validated consistently across browsers.
Original PR description
In the website builder test suite, Chrome doesn't load the initial iframe (we load a dummy iframe instead) and never goes through `preparePublicRootReady` from the `WebsiteBuilderClientAction`. On the contrary, Firefox does load the initial iframe. We already have a partial fix for it in the html_builder test helpers (see `originalIframeLoaded`), but it stopped working at some point. As Firefox loads the iframe and goes through `preparePublicRootReady`, it re-assigns `this.publicRootReady` to a deferred that is never resolved in tests, which prevents any Hoot builder test from working. Solution: completely override `preparePublicRootReady` with an empty method in tests. task-5266212 Forward-Port-Of: odoo/odoo#235830
The Alternative Products section on the website now displays clean product names instead of including internal reference codes for certain products. This makes the product cards match the main product page and improves the customer shopping experience.
Original PR description
**Steps to reproduce:** 1. Install eCommerce. 2. Open a product > Sales Tab > Alternative Products 3. Add products with an internal reference (default_code) and Attributes. 4. Go to website > scroll…
**Steps to reproduce:**
1. Install eCommerce.
2. Open a product > Sales Tab > Alternative Products
3. Add products with an internal reference (default_code) and Attributes.
4. Go to website > scroll down to the alternative products section.
**Issue:**
- The "Alternative Products" snippet displays the product's internal reference
in the title.
- This occurs only for products with attributes and variants(attribute_line_ids)
- The behavior is inconsistent with the main product page, where only the
product name is shown
Cause :
- The QWeb template was accessing the product name through values['data']['_record'] (which is a product.template)
whose display_name includes internal reference (e.g., [E-COM06] Corner Desk Right Sit).
This occurs for products that have attribute_line_ids.
https://github.com/odoo/odoo/blob/f0a34badefd432e9c2ab36acaf018d20d0e342fe/addons/website_sale/data/product_snippet_template_data.xml#L17-L20
<img width="1920" height="458" alt="image" src="https://github.com/user-attachments/assets/c3088149-b6c8-4cd7-8db4-129f0282a09d" />
- However, values['data'] already contains a clean display_name
(e.g., Corner Desk Right Sit) i.e. as expected.
**Solution:**
- Updated the QWeb template to use the correct field from the prepared data:
`t-out="data.get('display_name') or product.display_name"`
- This ensures that the title displays a clean product name consistent with the
main product page, without the internal reference
**opw-5122632**This fix makes mail record existence checks update correctly when a record is deleted. It ensures the interface reacts immediately to changes instead of showing outdated information.
Original PR description
The `exists` function of mail records is not reactive. Indeed, it uses a symbol, stored on the proxy internal field which is not observed. This commit fixes the issue by storing it on the record and ensuring we write on the full proxy when the record is deleted. 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#236346 Forward-Port-Of: odoo/odoo#236042
The Recruitment app now displays the job position email field correctly in the kanban view. This small visual fix improves readability and makes the job card layout look consistent after adding an email alias.
Original PR description
Steps to reproduce: --------------------------- 1. Install the Recruitment app with demo data. 2. In Settings, add an Email Alias for the company. 3. Open the Recruitment app. 4. Click the Configure…
Steps to reproduce: --------------------------- 1. Install the Recruitment app with demo data. 2. In Settings, add an Email Alias for the company. 3. Open the Recruitment app. 4. Click the Configure button on the job position kanban card. 5. In the Job Position form view, add an email alias. 6. Use the breadcrumbs to navigate back to the job positions. Observation: --------------------------- The email field for the job position is misaligned in the kanban card. Issue: --------------------------- The `div` containing the email is missing a `justify-content-*` class https://github.com/odoo/odoo/blob/5ab45d45073463495e517aca9fd061415a73e893/addons/hr_recruitment/views/hr_job_views.xml#L77 Solution: --------------------------- Add the missing `justify-content-between` class to align the email properly. Before: <img width="1909" height="749" alt="before" src="https://github.com/user-attachments/assets/51790c71-f30d-4402-ae24-a5ccfb30ff9a" /> After: <img width="1914" height="697" alt="after" src="https://github.com/user-attachments/assets/711f83f6-208e-44c3-83e2-8b736c697a9d" /> opw-5246587
The VoIP keypad now correctly removes highlighted digits when using backspace, even if the selection starts at the first character. This restores expected editing behavior while keeping input handling safe and prevents users from being blocked by the earlier regression.
Original PR description
This commit fixes a regression introduced in commit [1] prevented deleting when a selection began at index 0; extend the guard so the numpad (keypad) backspace still removes the highlighted characters while keeping the cursor-safety logic. [1]: https://github.com/odoo/enterprise/commit/73b01fa5e1f56d4ab71d67760b15942fb2fa0e31 task-5217676 Forward-Port-Of: odoo/enterprise#99655 Forward-Port-Of: odoo/enterprise#99358
When a vendor bill has only one related landed cost, clicking the Landed Costs button now opens that record directly instead of first showing a list. This removes an extra click and makes the workflow faster and smoother for users.
Original PR description
## Before this commit: When a user clicked the Landed Costs smart button on a vendor bill, even if there was only a single landed cost, the system opened the list view first. The user then had to click again to open the form view, which was unnecessary and inconvenient. ## After this commit: The system now opens the landed cost form view directly if only one record exists, avoiding the unnecessary step of displaying the list view. > Task-5231913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The small dot shown on calendar events is now easier to see when an event is unpublished or hatched. The styling was also moved so it works consistently in related views, including Planning even when the Calendar app is not installed.
Original PR description
When pills are hatched (unpublished event) in the calendar view (eg. planning) the `o_event_dot` is barely visible. Additionally the styling to display the dot as outlined on hatched event is wrongly scoped in `/calendar` with the calendar status styling. It should be in the view instead. Otherwise, for the planning module which doesn't depend on calendar, the styling is not applied if calendar is not installed, rendering the filled dot. task-3916768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235978 Forward-Port-Of: odoo/odoo#235286
The import screen now shows the same formatting options for files ending in either .csv or .CSV. This makes the import experience more consistent and avoids confusion for users uploading CSV files with uppercase extensions.
Original PR description
Before this fix, the import side panel displayed the formatting options only when the uploaded file had a lowercase .csv extension. Files with an uppercase .CSV extension could still be imported but did not show the format selection section, leading to inconsistent behavior. This commit updates the condition to perform a case-insensitive comparison on the file extension. Task-5145031 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236348 Forward-Port-Of: odoo/odoo#235061
This change updates the payment methods Odoo enables for Mollie so they match what Mollie actually supports by default. It also removes a payment method that Mollie is phasing out, reducing setup confusion and avoiding unavailable options for customers.
Original PR description
**[FIX] payment_mollie: remove iDEAL from the default payment methods** When a new Mollie account is created, it only accepts card payments out of the box. In Odoo, both the Cards and iDEAL payment methods were activated by default upon enabling the payment provider, while iDEAL required manual activation from Mollie's dashboard. --- **[FIX] payment_mollie: remove Sofort from the linked payment methods** See https://help.mollie.com/hc/en-us/articles/20904206772626-SOFORT-Deprecation-30-September-2024ard. Forward-Port-Of: odoo/odoo#236182 Forward-Port-Of: odoo/odoo#236044
When website content generation runs into a known user-facing error, the system now records it as a warning instead of an error. This better matches the fact that users are already notified in the interface and avoids creating unnecessary error-level logs.
Original PR description
- Currently, we log an error whenever an error occurs during content generation for any webpage. - However, it is a non-blocking error so it can be safely converted to a `_logger.warning`, as we already notify user about the error through a notification [1]. - Additionally, the errors caught here will be all UserErrors so no need to log another error, so we log a warning instead. - This commit converts the `_logger.error` into `_logger.warning`. [1]: https://github.com/odoo/enterprise/blob/b001e9cc2af0f800e2a7965b61aa9b9c5bd4e89e/ai_website/static/src/components/dialog/add_page_dialog.js#L74-L80 sentry-6974000714
This change removes a Northern Ireland business-to-business tax setup that was no longer needed. When applicable, it now uses the standard domestic tax setup instead, reducing complexity and keeping tax configuration aligned.
Original PR description
After more verification, we found that the Northern Ireland B2B Fiscal Position was unnecessary and could be replaced by the domestic one. So this commit removes this fiscal position and replaces it if needed by the domestic one.
When support users open a visitor’s contact from live chat, the contact now opens in a way that keeps the navigation trail intact. This makes it easier to go back to the original chat session and continue working without losing context.
Original PR description
Previously, when we click on the "View Contact" button, the corresponding partner's form is opened but via a href link which does not preserve the breadcrumb. Purpose of this commit is to use the action service instead, to open the form view of the partner, which will preserve the breadcrumb so that navigating back to that session is handy. Part of Task-5190261
When the quantity of a stock move is increased, the system now updates the existing reservation correctly instead of behaving like a new line was created. This keeps stock handling more accurate and prevents test and workflow mismatches in barcode-related processes.
Original PR description
Increasing the quantity of a stock move will create a move line with the same data as the stock move (location and product), no lot, nor package. This commit correct some tests values because increasing the quantity on a stock move will increase the existing move line quantity instead of creating a new one.
This change includes the database identifier with SMS requests sent to Odoo’s cloud service. It helps support teams more quickly identify and troubleshoot issues for customers when a problem occurs.
Original PR description
Send the db_uuid to IAP such that we can more easily debug and support our users in case of a problem. task-none Forward-Port-Of: odoo/odoo#235540 Forward-Port-Of: odoo/odoo#233912
This update corrects how certain accounting template records are labeled behind the scenes. It helps ensure those records are associated with the right module, reducing the risk of setup or update issues for related accounting features.
Original PR description
Trying to fix the account_asset data records having `account` as a module while targeting the `account_asset` model that belongs to the `account_asset` model.