Wednesday, October 8, 2025
26 changes · saas-18.4
Enhancements to existing features
The country state search field now uses the same spacing as similar selection fields. This creates a more consistent form layout and avoids an unnecessary visual gap for users entering address information.
Original PR description
Related PR: https://github.com/odoo/odoo/pull/229290 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230338
Resolved issues and error corrections
Saving website settings with an invalid domain no longer causes an unexpected error. Users now receive a clear validation message, helping administrators correct the domain without disrupting configuration work.
Original PR description
Currently, an error occurs when user tries to save an invalid domain. Steps to replicate: - Install `website_sale`. - Go to `Settings > Website`. - In the domain field, give value as `[`. (any normal URL with a square bracket will also work). - Save and error will occur. Error: `ValueError: Invalid IPv6 URL` Cause: - The error happens because `config.get_base_url()` returns a malformed URL (like containing stray `[`), which makes urljoin [1] raise the error. Solution: - The solution prevents error by adding a constraint and raising a user-friendly `ValidationError` if the URL is invalid. [1]: https://github.com/odoo/odoo/blob/77398aefc291d33264b039e38681f0cd8f65483f/addons/website_sale/models/res_config_settings.py#L135 sentry-6805151048 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223336
This fixes an unreliable CRM automated tour by selecting the intended customer record and waiting until the opportunity name is properly filled in. It reduces false test failures and helps ensure CRM workflows remain stable during validation.
Original PR description
The problem here is twofolds: - After odoo/odoo#206314 the field being searched is filtered on `is_company` which means it's literally impossible to find the partner we create as that field defaults…
The problem here is twofolds: - After odoo/odoo#206314 the field being searched is filtered on `is_company` which means it's literally impossible to find the partner we create as that field defaults to `False`. - Before that PR, since we just `click` the first link we find in the dropdown, we might get a random company which exists in the database (if any) or we might hit the "create" option. In the latter case we have a non-zero chance of clicking `o_kanban_add` before the client has had the time to `name_create` the record, set the partner, call the onchange, and return with the opportunity's name, leading to an attempt to create a nameless opportunity and a "missing required field" error Selecting the very specific partner we created (correctly this time) and then actually waiting for the opportunity's name to be set should resolve the issue, and make problems in that step show up in the right location in the future rather than hit some sub-sub-sub-symptom 20 steps later. https://runbot.odoo.com/odoo/error/229719 Forward-Port-Of: odoo/odoo#230251
Users with limited access rights now see the correct page title when previewing copied links. This prevents misleading generic previews and makes shared links clearer for everyday users.
Original PR description
Users without access for specific actions cannot see the right preview information, using sudo like the search for generic action but on specific model solve the issue. Steps: - Login with a user without window actions access - Copy a link somewhere to have preview dialog Actual result: - Preview title is Odoo due to access error Expected result: - Preview title is the one of the page opw-4933194 Forward-Port-Of: odoo/odoo#222435
The barcode scanning dialog no longer crashes if a user goes back or presses Esc before the camera preview is ready. This prevents an error screen and keeps the scanning workflow stable when users close the dialog quickly.
Original PR description
Steps to reproduce: 1. Install `barcode` 2. Barcode > 'click to scan' 3. Before the camera preview loads, click the back button of the dialog Issue: A traceback occurs: `OwlError: The following error occurred in onMounted: 'Cannot set properties of null (setting 'srcObject')' ` Cause: Clicking the back button triggers `onWillUnmount`, which clears the stream and sets `this.videoPreviewRef.el` to null. However, some asynchronous functions in `onMounted` are still pending and try to access the video element, leading to a crash. Solution: Add a safe check based on component status before accessing `this.videoPreviewRef.el` opw-5055566 Forward-Port-Of: odoo/odoo#229937 Forward-Port-Of: odoo/odoo#226068
The Indian withholding process now checks whether any records were selected before continuing. If nothing is selected, users receive a clear error instead of encountering an unexpected failure, improving reliability in this workflow.
Original PR description
We need to first check if active_ids exist and get usererror if there are no active_ids present. [Link to Runbot Error builds](https://runbot.odoo.com/web#id=74407&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190579 Forward-Port-Of: odoo/odoo#190324
This update fixes a web interaction issue that could cause crashes when certain wait actions returned no value. It makes the behavior more reliable for developers and helps avoid interruptions in website or app interactions.
Original PR description
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#229029
Dashboard treemap charts no longer replay animations unnecessarily when their data is refreshed. This avoids distracting visual changes and makes spreadsheet dashboards feel steadier during normal use.
Original PR description
Charts animations are played every time the chart data changes in dashboards. But the treemap data contains callbacks, which mess up the deepEqual we use to check if the data changed, since new callbacks are created each time. This adds an argument to deepEqual to ignore functions. Task: [5003595](https://www.odoo.com/odoo/2328/tasks/5003595) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225996
This fix ensures an internationalization-related test no longer changes shared test settings in a way that stops later tests from running. It helps keep continuous integration reliable so issues are caught before reaching customers.
Original PR description
The `config.parse_config` call changes the test flags, effectively disabling all following tests and breaking the CI. See: odoo/odoo#229755
This fixes image editing so that rotating, resizing, or moving an image can be undone back to its original state with a single Ctrl+Z. It makes content editing more predictable and reduces frustration from needing several undo actions.
Original PR description
**Current behavior before PR:** - When rotating, resizing, or dragging an image using the transform container, pressing Ctrl+Z did not revert the image to its initial state (when the transform container was opened). - Instead, it required multiple undo operations to return to the initial state. **Desired behavior after PR is merged:** - Pressing Ctrl+Z now correctly reverts the image to its initial state in a single undo, after a transformation. task-5114320 Forward-Port-Of: odoo/odoo#228720
This fix ensures Point of Sale test companies include a country when needed by installed localizations. It prevents avoidable test failures and helps keep the release validation process stable.
Original PR description
Before this commit, some tests would fail when localizations requiring a country were installed, because the created company did not have a country set. runbot-233158 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230114
Opening the Quality Points button from a product could crash when Point of Sale was installed because the wrong list view was selected. The fix ensures the correct Quality Control view is used, so users can access quality points from product records reliably.
Original PR description
**Step to Reproduce** 1- Install point_of_sale and quality_control. 2- Open POS -> Product -> Product 3- Open any product and click the Quality Points smart button → traceback occurs **Issue**…
**Step to Reproduce** 1- Install point_of_sale and quality_control. 2- Open POS -> Product -> Product 3- Open any product and click the Quality Points smart button → traceback occurs **Issue** `UncaughtPromiseError > OwlError Uncaught Promise > The following error occurred in onWillStart: ""quality.point"."product_variant_count" field is undefined."` **Root Cause** https://github.com/odoo/odoo/blob/a729578afb7fed79aac2d622aae4da4c0917f8e5/addons/point_of_sale/views/product_view.xml#L23-L25 - View reference is passed in the context. - When this context is propagated to `action_see_quality_control_point`, https://github.com/odoo/enterprise/blob/7b777bffbebfb6503bb348005e9ce076825926e4/quality_control/models/quality.py#L579-L584 https://github.com/odoo/enterprise/blob/2e08282ca275bf1e66c58e28391f11f8bd7884d2/quality_control/views/quality_views.xml#L859-L868 - Than traceback occurs because the action does not pass a `view_id`. - When the context contains `list_view_ref`, it attempts to load the product template list view with the `quality.point` model. - This leads to a traceback since the fields defined in that view do not exist on the `quality.point` model. **Solution** - Pass a proper `view_id` from the Python side to ensure the correct view is loaded, preventing `list_view_ref` from forcing to load an invalid template. **opw-** **5090505** Forward-Port-Of: odoo/enterprise#95040
This update removes a non-essential test check that could fail unpredictably when product loading conditions changed. It helps keep automated validation stable without changing how users work with the point-of-sale loyalty features.
Original PR description
Before this commit, some tests could fail randomly if a new product was included in the list of limited loading products. The part of the test that checked whether the product was not loaded was not essential, so it has been removed to prevent unnecessary failures. opw-5109838 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228364
The Point of Sale test process now waits longer for the system to load when many regional settings are installed. This reduces false test failures and helps keep release checks stable without changing the customer-facing PoS experience.
Original PR description
Loading the PoS with all the localizations installed can take up to 15s to load, so we increase the timeout of the first step of the generic tour to 20s to make sure it doesn't fail. runbot-233059 Forward-Port-Of: odoo/odoo#229925
This fixes an issue where separators in the Email Marketing showcase template could disappear in received emails. The change keeps separators visible on desktop layouts and improves how their border colors are rendered, making sent marketing emails match the intended design more reliably.
Original PR description
Problem: When adding the `s_showcase` template in email marketing and saving, the separator is not properly rendered in the received email. Cause: The separator is implemented as an empty `<div>` with `display: inline-block` and `height: 100%`. In emails, this can collapse to 0px, making the separator invisible. Additionally, `border-<position>-color` was not applied correctly in some cases. Solution: - Lock the computed height of empty separator elements so they remain visible. - Restrict visibility of separators to desktop screen sizes where columns are stacked horizontally. - Fix rendering of `border-<position>-color`. Steps to reproduce: 1. Open a new email marketing. 2. Add the `s_showcase` template. 3. Test-send the email. 4. Observe that the separator is not visible. opw-5077992 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226350
The employee form now shows the full count of documents stored in an employee's folder and any subfolders, excluding folders themselves. This gives HR users a more accurate view of how many employee documents are available without needing to browse each folder manually.
Original PR description
Before this commit, the documents count on the employee form view showed only the count of documents (folders included) inside the employee folder but not the ones in subfolders. This commit fix that by showing the count of every documents (folders excluded) included in the employee folder or its subfolders. Task-4944895 Forward-Port-Of: odoo/enterprise#91009
This fixes payroll accounting tests after an underlying employee contract model change. It helps keep automated checks reliable without changing day-to-day payroll functionality for users.
Original PR description
Explanation: hr.contract is reworked into hr.version runbot-229897
Creating a new website page while using mobile view no longer causes an error. This helps users continue building and editing website content smoothly from the mobile preview experience.
Original PR description
Steps to reproduce: 1.open website. 2.switch to mobile view. 3.click new button and select new page option 4.a traceback occurs. Before this commit: Creating a new page in mobile view raised a traceback because contentDocument was undefined due to an incorrect selector. After this commit: The issue is resolved by using the correct querySelector value, ensuring that contentDocument can be accessed properly.
This fixes an issue that could cause a server error when reporting problems from the Nilvera integration for Turkish localization. Users should now receive the intended error message instead of an unexpected failure.
Original PR description
The http response object doesn't have a `code` attribute, this commit fixes this typo which has already been fixed in 19.0 as a part of #222869 task-5050516 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228088
This update adds a protective check to avoid rare calculation errors when electronic invoice values round down to zero. It helps keep invoice export processing stable and prevents a potential division-by-zero failure in edge cases.
Original PR description
[FIX] account_edi_ubl_cii: float comparison safeguard. This fix solves a potential issue where the `delivered_qty * price_unit` is too close to zero making it pass the float comparison check, later we divide against the same product, but this time wrapped in `curency.round` which may round it to zero, resulting in a division by zero error. Whilst I found no functional way to reproduce the issue as the value of price_unit should already be zero when we get here but, the fix is to simply safeguard from potential future changes. Ticket [link](https://www.odoo.com/odoo/project.task/5013588) opw-5013588 Forward-Port-Of: odoo/odoo#230236
Event invitation descriptions now format links more safely so Gmail does not break them. This helps recipients open the correct event URL directly from their email, reducing confusion for attendees.
Original PR description
When website_event is installed an anchor tag is added inside the event description which is guaranteed to break the url in the gmail client. We now quote the description appropriately so that there's no confusion. task-5092759 Forward-Port-Of: odoo/odoo#229979 Forward-Port-Of: odoo/odoo#228359
The stock quantities list now highlights only products that actually have an overdue removal date. This prevents regular products from being incorrectly shown in red for stock users, making the list easier to read and reducing confusion.
Original PR description
Description of the issue/feature this PR addresses: For stock users (not admins), the stock quantities list view display red lines for every product. Current behavior before PR: <img width="2243" height="217" alt="image" src="https://github.com/user-attachments/assets/330c591c-6ef4-46cb-8336-fa39fb483333" /> Desired behavior after PR is merged: Red lines are only displayed for products with a removal date and a removal date < current date <img width="2241" height="290" alt="image" src="https://github.com/user-attachments/assets/fe37adc7-e736-447e-a21e-e2fae984e074" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228992
This update fixes a backend issue where certain request parameter names could conflict with core remote call fields. It helps ensure affected Odoo web requests are handled reliably without disrupting normal business workflows.
Original PR description
Backport 1bb69de64165b18fca7d00164c5299e58c48d40f > 44:18.716 INFO o.t.result: 0 failed, 0 error(s) of 12 tests when loading database 'odoo-backport-json2-name-collison'
This update adjusts how AI-related functions are called so they are easier to customize and better aligned with newer versions. It is an internal reliability fix with no expected direct impact on day-to-day users.
Original PR description
To ease the override and compatibility with what is done in 19.0, we call the function with kwargs instead of args. Forward-Port-Of: odoo/enterprise#96528
This fix prevents valid accented characters, such as ü, from being removed from legal names used in Mexican electronic invoicing. It helps ensure company names match official SAT records and reduces the risk of rejected or incorrect documents.
Original PR description
Previous commit (#95207) removed accents for names including character ü which indeed is a recognized character for SAT opw-5125107 Forward-Port-Of: odoo/enterprise#96043
Fixed an issue that blocked users from editing properties on several demo job offers in the Recruitment app. These demo jobs now correctly use the current company, preventing the warning and allowing configuration changes as expected.
Original PR description
Steps to reproduce: - Go to the Recruitment app - Open the configuration panel for the demo offer for CTO, Consultant, Experienced Developer or Human Resources Manager - Click on the cogwheel - Select "Edit properties" - A warning appears and you can't edit properties Reason: The definition of the job demo data sets the "company_id" field to False, which causes an error when you try to edit the properties. How it was fixed: By removing the explicit value of False for the field "company_id", it will auto assign the field to the current company and allow the properties to be edited correctly. Task ID: 5093032