Friday, October 10, 2025
40 changes · 19.0
Enhancements to existing features
Users can now close the image description box in the HTML editor by pressing the Escape key. This makes editing images smoother and more consistent with common keyboard behavior.
Original PR description
This PR aims to ensure that image description box gets closed when pressing escape key. task-5114224 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Recruiters can now generate more than one salary offer for the same applicant from the applicant view. This makes it easier to revise or resend offers during the hiring process without unnecessary restrictions.
Original PR description
Purpose: Modified the visibility attribute on the Generate Offer button in the applicant view so the it allows the generation of multiple offers for the same applicant Task ID: 5088931
Additional automated tests were added to confirm that appointment booking capacity, unavailability, cart bookings, invoice confirmation, and event creation work as expected. This helps reduce the risk of booking errors across paid appointments and website appointment sales.
Original PR description
\* = website_appoinment_sale, appointment_account_payment Add tests to ensure correct behaviour for the various scenarios. The following tests are added: - Users/resource's capacity computation when manage capacity is on and off. - Unavailability computation of users/resources in the `calendar.event`. - Check the bookings of user/resource in the cart for the availability after the invoice is confirmed. - Creation of the actual event when the booking from the cart is confirmed. Task-4919317 Forward-Port-Of: odoo/enterprise#91676
Manufacturing teams can now control the order of quality checks and instructions within work operations. This restores a previously available capability, making shop floor guidance easier to organize and follow.
Original PR description
- Sequence was added to give flexibility in ordering quality points inside operations. **Note:** this was already there in past versions, it was just forgotten in the latest redesign: https://www.odoo.com/odoo/project/966/tasks/5005235 Task: 5110982
The employee salary contract testing flow was updated to stay aligned with recent underlying changes. This helps keep automated checks reliable and reduces the risk of unnoticed issues in salary contract workflows.
Original PR description
This commit handles the change in test case due to the modification in the following commit [1]. [1]=https://github.com/odoo/odoo/pull/227819/commits/360b384ba4e24
This update improves internal test helpers used by the website editor so tests wait properly for sidebar updates and related background work. It helps reduce flaky automated tests, making future website editor changes safer and more reliable without changing the user experience.
Original PR description
We need a helper to wait enough Forward-Port-Of: odoo/odoo#226582
Resolved issues and error corrections
Accessing a course category through an embedded slide link no longer causes an error page. Users are redirected back to the course homepage instead, keeping the learning experience stable when an invalid or category-only slide link is opened.
Original PR description
When users try to access a `slide ID` that is not included in `channel_slides_ids`, a traceback occurs. Steps to reproduce: --- - Install `website_slides` module - Go to the Website and click on the…
When users try to access a `slide ID` that is not included in `channel_slides_ids`, a traceback occurs. Steps to reproduce: --- - Install `website_slides` module - Go to the Website and click on the `Courses` menu. - Then go to `/slides/embed/<int:slide_id>` route. (http://localhost:8069/slides/embed/7) - The error will occur. Traceback: --- `ValueError: 7 is not in list` At [1], `slide_content_ids` contains the IDs of `channel content`. However, we are trying to access a slide from the `channel category` in URL. As a result, at [2], when attempting to find the index of the slide in `slide_content_ids`, an error occurs because the slide ID actually belongs to `slide_category_ids` and is not present in `slide_content_ids`. Solution: --- Added a special case for category slides — if the slide is a category, redirect to the channel homepage. [1]- https://github.com/odoo/odoo/blob/482bb19e103de9ddbe1b1942b94b33d3da38889b/addons/website_slides/controllers/main.py#L120 [2]- https://github.com/odoo/odoo/blob/482bb19e103de9ddbe1b1942b94b33d3da38889b/addons/website_slides/controllers/main.py#L121 sentry-6572999628 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225374
Code cleanup and technical improvements
The IoT driver code now treats each device identifier as a stable value rather than recalculating or passing it around in multiple places. This internal cleanup reduces inconsistency risk and helps keep IoT device communication and setup more reliable without changing user-facing behavior.
Original PR description
As the IoT identifier is a serial number or a motherboard uuid, it is not meant to change. It then makes more sense for it to be a constant as `IS_WINDOWS` or `IS_LINUX` are. Enterprise PR: odoo/enterprise#96549 Task: 5149362
This fixes a recent issue in the Adyen payment integration caused by an incorrect customization hook. It helps ensure payment provider behavior remains reliable for businesses using Adyen to process payments.
Original PR description
Commit [efc2788](https://github.com/odoo/odoo/commit/efc2788) introduced the bug by bad method override.
The time off request summary card now displays hourly leave amounts in a shorter, clearer format. This prevents overly long text and makes the side summary easier for employees and managers to read.
Original PR description
On a time off request, there is a summary on the side. Problem: if we have time off in hours, the display is not adapted and the text is too long. This commit fixes the issue to display the hours correctly. task-5092855 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#230693 Forward-Port-Of: odoo/odoo#227631
This fix prevents a stock barcode test from failing randomly when validation happens before a previous save is fully complete. It makes automated checks more reliable without changing normal user workflows.
Original PR description
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; -…
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; - We validate the operation. The validation is done by a barcode scan (`OBTVALI`) but since [1](https://github.com/odoo-dev/enterprise/commit/b3a855a870d1861515abaff8683081a39f95558f), barcodes scanned when the user is somewhere else than in the barcode lines view are skipped. With a little bit of bad luck, the tour scans `OBTVALI` while the save from the form view is not finished yet and thus, the scanned barcode is ignored. To reproduce that, run the test `test_scrap_change_source_location` locally in debug mode and add a throttling (eg.: Fast 4G) before to run the tour. To solve the issue, finetune the `validateBarcodeOperation` default trigger, so the error won't happen in this tour and other similar contexts. Runbot build error: [232331](https://runbot.odoo.com/odoo/runbot.build.error/232331) Forward-Port-Of: odoo/enterprise#96542
This fixes an issue in the HTML editor that could trigger a JavaScript error when inserting content. The change helps keep editing actions stable and prevents interruptions for users working with rich text content.
Original PR description
In `dom.insert`, the variable `container` was being redefined to a constant within a `while` loop, making it impossible to use the original variable within the loop. This caused an `Uncaught Javascript Error` ("Cannot access 'container' before initialization") whenever trying to access it within the loop but above the redefinition. This commit renames the constant to a previously unused name.
opw-5053872
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#230085The Documents app no longer shows an unused tooltip setting on document tags. This avoids confusion for users while keeping the underlying data model stable for compatibility.
Original PR description
The 'tooltip' field was introduced on document tags categories, but after couple of refactors it ended up unused on document tag. As we cannot remove fields from the data model in stable, this commit removes tooltip from the view and marks it as deprecated in the code. opw-4567814 ## Stems from https://github.com/odoo/odoo/pull/210147 https://github.com/odoo/enterprise/pull/79496 # Merge plan - hide `tooltip` in stable - remove `tooltip` in master Forward-Port-Of: odoo/enterprise#86504
The EC Sales report now correctly shows the Code filter again. This helps users narrow down sales report data as expected, matching behavior from the previous version.
Original PR description
Before: EC Sales report Code filter was not visible. As custom_display_config options was defined in the generic ec sales list code inside function `_custom_options_initializer` while it should actually be placed inside `_init_core_custom_options`. After: Like 18.4 now EC Sales report Code filter visible task-5109538
This fixes an issue where links selected from the editor could be incorrectly changed when used from non-Website apps, potentially sending users to the website homepage instead of the intended internal page. The change limits that behavior to the Website app, so backend apps like Knowledge keep their internal links working as expected.
Original PR description
Before this commit: we have the function in website to prefix a frontend url with `@` when clicking on the url in linkpopover. However, this function is usually used inside website. It also affects places where the url is an internal redirecting url like `/knowledge/article/33` and prefixing will lead to the website homepage. After this commit: we also check if the current url of the browser is also a frontend url, which means the user is inside the website app. Frontend links will not be prefixed in the backend pages, e.g. in all other apps except for website. The website patch doesn't influence public users as they won't have access to the website app anyways. task-5048403 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224605
Selecting “Remote” as a job location in the website Jobs editor now works without triggering an error. This restores the expected dropdown option and helps recruiters or website editors update job postings reliably.
Original PR description
Steps to reproduce: 1. Go to Website → Jobs. 2. Open any job application. 3. Change the Job Location to the option "Remote". 4. A traceback occurs. Before this commit: When selecting a job location, initially no Many2One field is selected, that's why no many2oneid is find. which results in a null value being returned. This caused a traceback error After this commit: The "Remote" option is explicitly included in the dropdown, restoring the previous behavior. Forward-Port-Of: odoo/odoo#220312
This fixes an issue where a newly added expense error message was not set up correctly. Users should now see the intended error instead of a broken or confusing message when the affected expense validation occurs.
Original PR description
in 953fac5, the new error was not given the proper arguments Forward-Port-Of: odoo/odoo#229488
This fixes an issue where formatting such as bold could disappear when users pasted plain text into an empty formatted area. The editor now keeps the selected style for normal text while still cleaning up empty formatting when media content is inserted.
Original PR description
Problem: When text is inserted inside an empty format, the format is lost. Cause: After https://github.com/odoo/odoo/commit/ae33ca3d38d4a5adaad3015f036321d473713638, any empty format gets removed if content is inserted inside. Solution: Only remove the empty format if a media element is added. This preserves styling when inserting plain text inside an empty format. Steps to reproduce: 1. Copy some text from somewhere. 2. In an empty task description, press CTRL+B. 3. Press CTRL+SHIFT+V. 4. Notice that the text is not bold, even though the format was active. task-5136314 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230051
Sales orders and invoices no longer crash when they are created for a contact that has no name. The warning message handling now works safely in this edge case, helping users continue sales and billing workflows without interruption.
Original PR description
When creating a Sale Order or Invoice for a partner without a name, a traceback occurs. Steps to reproduce the error: - Install ``sale_management`` with demo data - Enable ``Sale Warnings`` from…
When creating a Sale Order or Invoice for a partner without a name, a traceback occurs. Steps to reproduce the error: - Install ``sale_management`` with demo data - Enable ``Sale Warnings`` from settings - Open ``Azure Interior`` Contact > In Contact, Add Contact > Type: invoice > Save & close - Create a sale order with the newly created partner AND - Create an invoice with the newly created partner Traceback: ``TypeError: unsupported operand type(s) for +: 'bool' and 'str'`` https://github.com/odoo/odoo/blob/7a1b27e5985b3b16768bea450c51226ae3659c76/addons/sale/models/sale_order.py#L822 https://github.com/odoo/odoo/blob/7a1b27e5985b3b16768bea450c51226ae3659c76/addons/sale/models/account_move.py#L59 Here, ``partner_id.name`` is ``False``, which leads to string concatenation with a boolean in sale warning messages and results in the above traceback. sentry-6912482256 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229529
This fix resolves an issue where the analytic distribution field could fail on payroll salary rules because it expected company information that was not available there. Payroll administrators can now edit analytic allocations on salary rules without encountering that widget error.
Original PR description
Before this commit, the widget analytic_distribution has a field dependency on company_id. But this widget is used for the field analytic_distribution in the model "hr.salary.rule" and this model doesn't have a field "company_id". So to solve this issue, this widget is duplicated (with/without company). task-5155490
When payroll teams split one salary adjustment across multiple employees, each individual record now keeps the selected duration type. This prevents limited-duration adjustments from being incorrectly treated as one-time items, helping payroll records stay accurate.
Original PR description
**Issue** When creating individual attachments from a salary adjustment with multiple employees, the duration_type field was not being copied to the individual records causing all split attachments to default to "One Time" instead of preserving the original duration type. **Steps to reproduce** - Go to Payroll > Employees > Salary Adjustments - Create a new Salary Adjustment for multiple employees - Set Duration to "Limited" and create individual attachments - Open any individual attachment, duration shows "One Time" instead of "Limited" Task ID: 5136664
This fix prevents an error when users open the Offers option for a new Mexican employee without wage or yearly cost information set. The payroll calculation now checks that the gross amount is available before using it, allowing the offer flow to continue instead of crashing.
Original PR description
steps to reproduce:
--------------------
1. Install l10n_mx_hr_payroll and hr_contract_salary (load with demo data)
2. Switch to the Mexican company and create a new employee
3. Click on Offers(new)
issue:
-------
A traceback occurs:
`TypeError('cannot unpack non-iterable NoneType object')`
cause:
-------
https://github.com/odoo/enterprise/blob/71cc92c9526234dcd44ec756375647a67729029f/l10n_mx_hr_payroll/data/salary_rules/hr_salary_rule_regular_pay_data.xml#L531
Unpacking fails because **find_rates(gross, isr_table)** returns `None`
when the [gross amount](https://github.com/odoo/enterprise/blob/8b96c67d0555702e88127a77edb6e3b8ef5e58cc/hr_payroll/models/hr_payslip.py#L1157-L1167) is empty. This occurs if wage or yearly costs
are not defined.
solution:
----------
Check that the gross amount is exists before calling `find_rates`
and unpacking its result.
opw-5128275This change adjusts a rental sales order used in testing so it is no longer treated as fully unpaid or empty and filtered out of the POS orders menu. It helps keep the POS rental flow reliable after recent order filtering changes, with no expected impact on normal business operations.
Original PR description
Because of https://github.com/odoo/odoo/pull/230809, it will cause the quotations/orders menu to filter out any sale orders which have an unpaid amount of 0. The test_rental_pos test tries to create a sale order with a quantity of 0 and then settle it in the POS, but because of the filter, the sale order will not show up in the menu causing the test to fail. This PR is to increase the quantity in the sale order to 1 so that the order shows up and the test can be executed properly. Task-5138081
Videos added inside website masonry text blocks now expand to the full width of their available area. This prevents embedded videos from appearing unexpectedly small and improves the visual consistency of edited website pages.
Original PR description
To reproduce: ============= 1- In Website edit mode, drop the "Masonry" snippet. 2- Add a video in one of the text blocks. -> It will appear smaller than expected, with no way to make it larger Why: ==== The child iframe already had width: 100%, but it can only stretch to 100% of its parent container. If the parent container (.media_iframe_video) doesn't have an explicit width, it defaults to its minimum content size. This issue happens specifically in blocks where the columns are display: flex. As a result, the iframe ends up being too narrow despite having width: 100%. Solution: ========= By adding width: 100% to the container itself, it now fills the grid cell, and the iframe inside fills the container. opw-5104640 Forward-Port-Of: odoo/odoo#229001
This fix keeps animated text highlights from making website pages scroll sideways on mobile screens. It improves the editing and viewing experience by ensuring highlighted text stays within the page width.
Original PR description
Steps to reproduce: ==================== 1. Open Website Builder and switch to mobile screen 2. Select any word of a text 3. Apply highlight and animation Bug: - Page becomes scrollable to the right Cause: ======= SVG elements default to a `300px` `width`, which can overflow on smaller screens (e.g. mobile). This commit sets a `width` to prevent horizontal overflow. This is the link for the same issue but for vertical overflow. https://github.com/odoo/odoo/pull/215826 Reference: https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/width opw-5120678 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230299
The website test for switching between websites now uses a standard helper instead of custom steps. This makes automated checks more stable and reduces false failures in the testing pipeline, with no expected change for end users.
Original PR description
`snippet_translation_switching_website` was previously using custom steps to switch the website. Though it worked, it was not very deterministic and broke the tour in a few runbot builds. This commit updates the `snippet_translation_switching_website` tour to use the `testSwitchWebsite` helper function instead of custom steps, providing a more reliable and deterministic way to switch websites. runbot-[229696](https://runbot.odoo.com/odoo/error/229696) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230547
This change removes an inappropriate demo account from the UK accounting setup and corrects bank and cash account prefixes so they behave like prefixes rather than full account numbers. This helps avoid confusing or unrealistic account defaults when configuring UK localization.
Original PR description
That account is meant to be a demo data, created in `hr_payroll_account It was probably exported without much consideration during this refactor 1017d6278b665e0f00ec63d7ed94a5aaee500682 Same goes for the bank and cash prefixes: having a full number up to the last digit doesn't make sense for a prefix.
Changing the quotation template on a sales order now removes the previously linked quote calculator spreadsheet. This prevents sales teams from using outdated calculator data tied to the old template and keeps the order aligned with the selected template.
Original PR description
Step to reproduce: - Create a new SO - Add a customer and quotation template to the order - Click on quote calculator smart button - Return to sale order (click on SO number in top left) - Change the quotation template - Result: it does not change the quote calculator that is linked to the new quotation template Cause: - Clicking on Quote Calculator creates a copy of the quotation template spreadsheet and links it to the SO. https://github.com/odoo/enterprise/blob/8bc6098335d283e6d210dc788463a8ef8c559b14/spreadsheet_sale_management/models/sale_order.py#L30-L35 - When the quotation template is later changed, the spreadsheet linked to the old template remains attached to the SO. Fix: - On changing the sale_order_template, the old spreadsheet should be unlinked from the SO. - Keeping it linked is inconsistent, as it does not matches the current template opw-4998587 Forward-Port-Of: odoo/enterprise#95861 Forward-Port-Of: odoo/enterprise#93970
Creating a new Helpdesk ticket could fail when a stage had a positive “Days to rot” setting. This change adds test coverage to ensure that scenario stays fixed, helping teams avoid interruptions when logging support requests.
Original PR description
Currently an error occurs when user creates the helpdesk ticket. Steps to Reproduce: - Install the `helpdesk` module. - Go to `Stages` and, in the `Kanban view`, open the `New Stage` record. - Set a value `greater than 0` in the `Days to rot` field. - Go to `Tickets` and click `New`. `TypeError: unsupported operand type(s) for +: 'bool' and 'datetime.timedelta'` This commit adds a test for this [PR](https://github.com/odoo/odoo/pull/230271). sentry-6927500374
Payroll now uses the correct work entry date field when finding related records for payslips. This prevents payroll processing issues caused by outdated field references after the work entry data model changed.
Original PR description
There is no more date_start and from in work entries. Use date instead.
Fixed an issue in Mail calls where, after another participant stopped sharing their screen, that person stayed incorrectly highlighted instead of returning the call to the full participant view. This improves meeting clarity by ensuring everyone in the call is shown again as expected.
Original PR description
Before this commit, when another user stops the screen sharing, said user would be now focused (the expected behavior is showing all call participants). Steps to reproduce: 1. Have a call between user A and B 2. As user A start and then stop Screen Share 3. Observe on user B that user A is focused This happened because the activeRtcSession would not be correctly cleared (regression introduced in [1]). This commit fixes the issue by reintroducing the clearing of the activeRtcSession in a more declarative way. [1]: https://github.com/odoo/odoo/pull/221019 task-5090261
This change prevents an analytic distribution field from relying on company information where that information is not available. It helps avoid errors when configuring salary rules, keeping payroll-related setup smoother and more reliable.
Original PR description
Before this commit, the widget analytic_distribution has a field dependency on company_id. But this widget is used for the field analytic_distribution in the model "hr.salary.rule" and this model doesn't have a field "company_id". So to solve this issue, this widget is duplicated (with/without company). task-5155490 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
Product names in selection dropdowns now wrap onto multiple lines instead of forcing horizontal scrolling. This makes choosing products with long names cleaner and keeps hover highlighting visually consistent.
Original PR description
Steps to Reproduce: 1. Install `eCommerce`. 2. Add a product with a name longer than 30 characters. 3. Drop the _Add to Cart_ snippet. 4. In Choose record option, search for the product. 5. Hover…
Steps to Reproduce: 1. Install `eCommerce`. 2. Add a product with a name longer than 30 characters. 3. Drop the _Add to Cart_ snippet. 4. In Choose record option, search for the product. 5. Hover over the product name and try to scroll horizontally. Issue: The product name does not wrap, causing horizontal scrolling. Additionally, the hover background is applied only to the visible viewport area, breaking visual consistency. Cause: The dropdown items had `d-flex`, which makes them flex containers. By default, flex containers prevent text from wrapping and force content to stay on a single line, which caused horizontal overflow. Fix: Removed the `d-flex` class from the _DropdownItem_ and added `text-wrap` to allow product names to wrap onto multiple lines. This eliminates horizontal scrolling and ensures the hover background covers the entire item. Additionally, removed the `align-items-center` class from _DropdownItem_ and `text-wrap` from the child div, as they were unnecessary. Behaviour in 18.4: <img width="1042" height="441" alt="image" src="https://github.com/user-attachments/assets/377047d0-0ea0-4ad8-8f6c-7a62ebf56398" />
The timesheet import template has been updated to include a missing description in one of its sample rows. This prevents errors when users import timesheet data using the provided template, making the process smoother and more reliable.
Original PR description
The previous import template for timesheet had a row without description causing an error during import. This commit fills the empty cell of the import template. task-5159539
This update adjusts an internal Mail app test related to link previews so it is formatted more clearly and runs more reliably. It helps maintain quality around link preview behavior without changing what users see in the product.
Original PR description
Forward-Port-Of: odoo/odoo#230833
Cashiers can now enter password numbers using a physical keyboard when the password popup is shown, instead of being limited to on-screen buttons. This makes POS login and cashier switching faster and less frustrating for staff using keyboard-equipped terminals.
Original PR description
Before this commit, when the NumberPopup was open (for example, when entering the cashier password), the keyboard input was ignored because the overlay manager blocked all keyboard events while any popup was active. As a result, it was only possible to use the on-screen number buttons. After this commit, the keyboard input is allowed when a NumberPopup is open, enabling users to type the password directly using the keyboard. opw-5152235 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230626
Odoo now prevents price rules based on another pricelist from being saved unless that source pricelist is selected. This avoids incorrect product pricing when rules are created outside the standard screens, such as through custom views or integrations.
Original PR description
Before this commit, only a view-level required attribute ensured that pricelist items with `base=='pricelist'` have a `base_pricelist_id` set. Creating pricelist items from a custom view or the API or the shell could result in missing values for this field, causing `_compute_base_price` to incorrectly assume that `base=='list_price'`` This commit introduces a new constraint ensuring any pricelist whose price is `base`d on an "Other Pricelist" has a value for `base_pricelist_id`. Note: in the views, `base_pricelist_id` is required if `compute_price == 'formula' and base == 'pricelist'` but the first condition is not neeeded because `_onchange_compute_price` sets `base` to `'list_price'` when `compute_price!='formula'` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230438
This fixes a visibility issue that could hide payroll accounting distribution settings when Payroll and Accounting were installed independently. Users will now be able to access the expected configuration option, reducing setup confusion.
Original PR description
If payroll and accounting are installed standalone, the application_group is never made visible task-5160204
Social Marketing previews now correctly recognize URLs that include comma-separated parameters and other special characters. This prevents links from being cut off in drafted social posts, reducing preview errors before publishing.
Original PR description
**Steps to reproduce:** - Go to `Social Marketing` app. - Click on `New Post`. - Select Facebook for preview (should not matter). - Write a message with an URL which have comma-separated parameters. (e.g 'TEST URL https://example.be:8080/path/res-123/ext/?param1=v1,v2,v3') - URL is cut on the first comma in the preview. **Issue:** URL regex did not match URLs containing comma-separated query parameters, causing them to be truncated. **Fix:** Updated the regex to include commas. opw-5042131 Forward-Port-Of: odoo/enterprise#94220
The Belgian POS blackbox integration now uses a shared identifier value for IoT Box detection instead of recalculating it through an internal method. This is an internal cleanup that improves consistency and maintainability without changing the user experience.
Original PR description
We now use a constant instead of a call to a cached method to get the identifier of the IoT Box. We updated the driver to use this constant. Community PR: odoo/odoo#230346 Task: 5149362