Daily updates from Odoo
Tuesday, June 30, 2026
71 changes
15 changes
Enhancements to existing features
The check status button is now disabled when a user does not have permission to edit it. This avoids access errors and makes the interface clearer by only allowing actions that the user can actually perform.
Original PR description
Before this commit: Only main company of tax unit have write access on check, so when main company is not selected and user tries to change status of check, access error is thrown. After this commit: Disable check status button if user don't have write access on check. task-5951364 Forward-Port-Of: odoo/odoo#271447
When a Swedish VAT number is entered, Odoo can now automatically extract and fill in the company’s registry number. This reduces manual entry and helps keep business identification details consistent.
Original PR description
Organization number is part of the VAT number Official reference: https://www.skatteverket.se/foretag/moms/kopavarorochtjanster/inkopfranandraeulander/kopavarorfranandraeulander.4.3a7aab801183dd6bfd380005738.html > I Sverige börjar alla VAT-nummer med bokstäverna SE (landskoden) och avslutas med siffrorna 01. Om du har en enskild firma följs landskoden av de 10 siffrorna i ditt personnummer. Om du har ett bolag eller en förening följs landskoden av de 10 siffrorna i organisationsnumret. VAT-numret skrivs utan bindestreck. which translates to > In Sweden, all VAT numbers begin with the letters SE (the country code) and end with the digits 01. If you are a sole proprietor, the country code is followed by the 10 digits of your personal identification number. If you are a corporation or an association, the country code is followed by the 10 digits of your organization number. The VAT number is written without a hyphen. Forward-Port-Of: odoo/odoo#269590
Resolved issues and error corrections
This update fixes an editing issue where the cursor could jump to the wrong side of template content after deleting text. It helps users edit email templates more smoothly and avoids unexpected cursor behavior in <t> blocks.
Original PR description
## Problem:
`<t>` elements are classified as self-closing, even if they aren't used that way in a mail template. If you press backspace in the editor on some plain text that happens to be inside a `<t></t>` block, the editor would prevent the cursor from being placed back inside the block after merging because of `normalizeSelfClosingElement`. The result is the cursor being left on the outside edge of the block.
## Solution:
We will remove "T" from the list of self-closing tags.
## Steps to replicate (runbot v18):
1. Open an email template (Purchase: Purchase Order)
2. Place your cursor in some text inside a t-if element ('The receipt is expected for...'). Press backspace. Your cursor will snap to the end of the t-if block.
opw-6124284
Forward-Port-Of: odoo/odoo#272285
Forward-Port-Of: odoo/odoo#266816This change prevents a warning from being shown or logged for every uploaded document when automatic OCR is turned off. It reduces noise in the system logs and makes it easier to spot messages that actually need attention.
Original PR description
The warning "Automatic OCR does not apply to this document" was logged for every upload when automatic OCR isn't enabled, it isn't very useful. Manually backported as branch 19.4 was created during fw-port of original PR. opw-[6232122](https://www.odoo.com/odoo/unassigned-tasks/6232122) X-original-commit: 49b7d2bdc8ba20f6286c51c2721045cda36c4b8e
The website generator now uses a more general page limit note instead of showing a specific number. This gives the system more flexibility to adjust page limits later without confusing users.
Original PR description
Page limit note fixed by being more general instead of stating a blatant 200. This gives us more leeway to control the nbr of pages IAP side. X-original-commit: d82ef3a10c671972131bab7d28c76cce82e55105
This change fixes a timing issue in the WhatsApp channel test so message status updates are applied in the correct order. As a result, the test no longer fails intermittently, making the WhatsApp chat experience more reliable to validate.
Original PR description
The "Allow SeenIndicators in WhatsApp Channels" test awaited the bus subscription so the simulated seen notification is no longer dropped, but that exposed a second race between the init RPC and the bus return. openDiscuss does not await the channel data fetch (channels_as_member), whose response carries each member seen_message_id=false. When it is applied after the _sendone seen notification, it clobbers the member back to unseen, the indicators never render, and the assertion times out. Wait for the message to render before simulating the seen notification: the thread message comes from the message fetch, which only runs once the channel (with its members) is loaded, so the seen data is guaranteed applied. This mirrors the message seen indicator tests in mail. https://runbot.odoo.com/odoo/error/242021 Forward-Port-Of: odoo/enterprise#122041
The system restores a previous performance optimization when checking access rights for views. This keeps the fix for earlier loading issues while improving speed again, so users should benefit from a smoother experience without the earlier slowdown.
Original PR description
This reverts commit f2442a193584d6a2ecc8af4f9cd06002148211f5, which was avoiding method ir.access._get_all_access() to fail on not yet loaded fields. Commit 1570432f930baac8b018f7339338057ac8c2226c now avoids the method to fail in such cases. Therefore the de-optimization is no longer necessary.
This update corrects the color shown in the Timesheets grid when an employee’s schedule includes fractional working hours. It prevents the app from marking a cell as warning/orange by mistake when the worked time exactly matches what is expected.
Original PR description
## Issue In the Timesheets app, the color of the *Time Spent* cell at the end of a row indicates the current status of the timesheets based on the expected number of working hours. The selected color…
## Issue
In the Timesheets app, the color of the *Time Spent* cell at the end of a row indicates the current status of the timesheets based on the expected number of working hours. The selected color (green/orange/red) is sometimes wrong when an employee has a work schedule with fractional hours.
## Steps to reproduce
1. Install *Timesheets* (`timesheet_grid`)
2. For an employee E, edit the *Standard 40 hours/week* schedule:
- Change *Monday Afternoon* "Work to" column from 17:00 to 17:20.
3. In Timesheets > All Timesheets, go back one week and fill the timesheet for the employee E. We need 8 hours everyday but on Monday, where we need 8 hours and 20 minutes.
4. __The background of the *Time Spent* cell is orange, even though there's no overtime anywhere, and the value in the cell is precisely 40:20, which is the expected amount of hours worked.__
## Cause
When comparing the amount of hours worked and the expected amount of hours, small rounding errors occur. At this point of the execution:
https://github.com/odoo/enterprise/blob/19b7f5a6961dbce7367c07fcc55eea1925832634/timesheet_grid/static/src/views/timesheet_grid/timesheet_grid_renderer.js#L157
We obtain the following values:
```js
> monday = section.cells[1]
> monday.value
8.333333333333336
> workingHours[monday.column.value]
8.333333333333332
> monday.value - workingHours[monday.column.value]
3.552713678800501e-15
```
This small difference differing from 0, the wrong color is selected by `_getSectionTotalCellBgColor`:
https://github.com/odoo/enterprise/blob/19b7f5a6961dbce7367c07fcc55eea1925832634/timesheet_grid/static/src/views/timesheet_grid/timesheet_grid_renderer.js#L160-L172
## Fix
The same issue was fixed elsewhere by https://github.com/odoo/enterprise/commit/3340c0610ae6d7d3087f20da04309512771cc4b7. The same fix is applied here for consistency.
opw-6193181
Forward-Port-Of: odoo/enterprise#121463This update adjusts the holiday calendar side panel to work with the latest Owl framework version used in Odoo. It helps keep the scheduling interface stable and prevents issues caused by outdated component behavior.
Original PR description
This commit is a follow-up of 197d0ca5, as part of the Owl 3 migration, replace onWillUpdateProps hook with the appropriate Owl 3 alternatives 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
When users switch companies while viewing a payroll pay run, the system now checks access before reloading the page. This prevents a brief error message from appearing and takes users directly back to the pay run list when the record is not accessible in the new company context.
Original PR description
Steps to reproduce: 1- Open a payrun 2- Switch companies Issue: You get an access error for a moment and then get redirected to payrun list view Cause: When switching companies, the payrun reloads but since it is in the context of a different company, you get an access error. Solution: First check in js before fetching that you have access to the payrun, if not, redirect to the list view instead. Task-6008140 Forward-Port-Of: odoo/enterprise#120004
We fixed an automated test in the chat features that was sometimes failing at random. The check now looks directly at the chat title instead of relying on a brief loading moment, making test runs more reliable and reducing false failures.
Original PR description
The hoot `:text('X')` pseudo-class matches an element only when its whole inline text equals "X". `.o-mail-ChatWindow:text('slytherins')` therefore matched the chat window only during the brief frame where it showed nothing but its title, before the thread body (start message, composer) was rendered. Catching that frame is a race, so the assertion times out intermittently on runbot.
Assert against the title element itself: add a dedicated `o-mail-ChatWindow-name` class on it and match it with `.o-mail-ChatWindow-name:text('X')`. This is exact and no longer depends on the rest of the window being empty.
https://runbot.odoo.com/odoo/error/939914
Forward-Port-Of: odoo/odoo#272567
Forward-Port-Of: odoo/odoo#272380This update fixes an unstable automated test in the messaging app that could fail intermittently under slower conditions. It does not change user behavior, but it helps ensure future releases are tested more reliably.
Original PR description
The "Jump to old reply should prompt jump to present (RPC small delay)" test clicked the jump-to-present button right after clicking the in-reply, without waiting for the jump to the old reply to render. The button only shows once that load has settled, so under load the button could still be absent when the click polled for it, making the test flaky. Wait for the messages to be reloaded around the old reply before clicking, mirroring the non-delayed sibling test. https://runbot.odoo.com/odoo/error/941200
This change moves a self-order-related check out of the standard Point of Sale flow and into the self-order feature where it belongs. It helps prevent failures in automated testing and keeps the regular Point of Sale behavior aligned with its intended scope.
Original PR description
This commit moves the usage of `has_valid_self_payment_method` from `point_of_sale` to `pos_self_order`, where it belongs. The method usage was introduced in https://github.com/odoo/odoo/pull/269502, causing runbot failures Runbot Errors- [941124](https://runbot.odoo.com/odoo/error/941124), [941125](https://runbot.odoo.com/odoo/error/941125), [941126](https://runbot.odoo.com/odoo/error/941126)
Searching messages could previously send the same request twice, which could slow down the interface and create unnecessary load. This update ensures the search only runs once per action, improving responsiveness and reliability when users look for messages.
Original PR description
Previously, searching messages could trigger two RPCs for a single search. This was caused by the search effect executing 'run()' even after the search had already been performed. This PR ensures that the search effect only clears results when inactive, preventing duplicate search RPCs. task-6311095 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Code cleanup and technical improvements
This change removes old, unused code related to the Gantt progress bar redesign. It helps keep the product codebase cleaner and easier to maintain without changing how users work.
Original PR description
Cleans up residual dead code left over from the progress bar redesign in https://github.com/odoo/enterprise/pull/118045. Since the `GanttRowProgressBar` component is no longer referenced anywhere in the new layout architecture, its corresponding files have been deleted.
10 changes
Resolved issues and error corrections
A point-of-sale sales test was moved to the module that now contains the related stock logic. This prevents the automated build from failing and keeps the test aligned with the right feature set.
Original PR description
The test uses `pos_order.picking_ids`, but on saas-19.3 `picking_ids` moved to the `pos_stock` module. `pos_sale` does not depend on `pos_stock`, so the test fails there with AttributeError. Move it to `pos_sale_stock`, which depends on `pos_stock`. Fixing https://runbot.odoo.com/odoo/runbot.build.error/938839
This change adjusts a point of sale test so it uses a single, compatible setup instead of mixing data from different company contexts. It helps prevent test failures in multi-company environments and makes the test suite more reliable.
Original PR description
Making the test only depend on one class setup to avoid potential (already present) multicompany issues. In this case the env.user came from one setup class but was incompatible to use during the setup of the second class that was creating records for another company. By making the test only depend on one of the tests we'll avoid this issue. runbot-939375 Forward-Port-Of: odoo/odoo#268819
This change fixes a timing issue in WhatsApp channel tests where the seen status could be overwritten before the message fully loaded. As a result, the seen indicators now display reliably, reducing flaky behavior in channel conversations.
Original PR description
The "Allow SeenIndicators in WhatsApp Channels" test awaited the bus subscription so the simulated seen notification is no longer dropped, but that exposed a second race between the init RPC and the bus return. openDiscuss does not await the channel data fetch (channels_as_member), whose response carries each member seen_message_id=false. When it is applied after the _sendone seen notification, it clobbers the member back to unseen, the indicators never render, and the assertion times out. Wait for the message to render before simulating the seen notification: the thread message comes from the message fetch, which only runs once the channel (with its members) is loaded, so the seen data is guaranteed applied. This mirrors the message seen indicator tests in mail. https://runbot.odoo.com/odoo/error/242021 Forward-Port-Of: odoo/enterprise#122041
This fix makes the Point of Sale more resilient by safely handling unexpected or invalid input when checking whether an IP address is private. It avoids crashes in cases where the system receives a value that is not a string, helping keep the feature stable for users.
Original PR description
Add an extra guard to isPrivateIp to return false for invalid values. Otherwise it would throw a TB when the provided value is not a string. This fix already exists on 19.0-19.2 from [#256028](https://github.com/odoo/odoo/pull/256028) Task-[6295735](https://www.odoo.com/odoo/project/1737/tasks/6295735) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update stops users from choosing a private task as the parent of another task. It helps keep private work items properly hidden and avoids accidental exposure through task hierarchy relationships.
Original PR description
In this commit, we ensure that private tasks can never be selected as parent tasks. task-5119141 Forward-Port-Of: odoo/odoo#272263 Forward-Port-Of: odoo/odoo#270795
The Point of Sale stock tests were updated so lot tracking is set on the product template instead of the product variant. This keeps the tests working with the current Odoo behavior and helps avoid validation errors during automated testing.
Original PR description
`tracking` is no longer writable on `product.product` on 19.3/master. Update lot-related POS tests to write it on `product.template` instead. original task: 6274744 runbot error: 940485
This update corrects the alignment of the link popover’s URL field and its icon in Notes. It ensures the input keeps the same height as its container, so the interface looks consistent even when autocomplete is available.
Original PR description
Steps to Reproduce: - open notes - type `/link` to open link popover Issue: - The url input field and its icon are misaligned. Cause: - When url autocomplete are enabled in the link popover, the input field height is reduced, causing it to become smaller than its container. This results in misalignment between the input field and the icon. Solution: - Set the link popover url input height to 100% so it always matches the height of its container, ensuring proper alignment even when autocomplete is avaialble. task-6201175
This fix brings back the intended behavior for pages using the `s_nb_column_fixed` class, which hides the column count option in the builder. It ensures that layouts marked this way no longer show an option that should be locked, improving consistency for content editors.
Original PR description
The class 's_nb_column_fixed' was used to hide the column count option, but it got lost during the refactoring and doesn't work since 18.4. This commit restores it. task-6234267 Forward-Port-Of: odoo/odoo#271975 Forward-Port-Of: odoo/odoo#268005
This update makes the public chat test flow more reliable by ensuring the attachment menu closes before the message is sent. It also corrects a test setup issue so the right conversation data is updated between runs, helping prevent flaky failures during automated testing.
Original PR description
Attempt at fixing the following race condition. It's not clear what causes it, but these changes make the test more robust and might help future investigations. discuss_channel_public_tour opens the composer "More Actions" menu to attach files but feeds the hidden file input directly, so the menu is never closed and is still open when Send is clicked. Close it and wait for it to disappear before sending, to avoid clicking Send while the dropdown is dismissing. Also fix _open_group_page_as_user, which updated the last message body of self.channel instead of self.group between the two tour runs. https://runbot.odoo.com/odoo/error/243436 Forward-Port-Of: odoo/odoo#272606 Forward-Port-Of: odoo/odoo#272425
This change prevents Romanian-specific stock batch behavior from being applied in situations where it should not be. It fixes an error that affected automated system checks and helps keep the stock workflow stable.
Original PR description
The Romanian specifics were applied without condition which caused runbot errors. Note that this was revealed later on (saas-19.3) after a change in the generic stock test setup. runbot-241098 Forward-Port-Of: odoo/odoo#271985
10 changes
Enhancements to existing features
The Inventory at Date wizard now opens the same richer stock reporting screen used for current stock, instead of a basic product list. This gives users the same buttons, columns, and filters when checking stock at a past date, making the report easier to use and more informative.
Original PR description
## Summary Minimal alternative: make the "Inventory at Date" wizard open the same rich stock report view instead of the basic one. ### Problem The wizard opens `stock.view_stock_product_tree` (basic…
## Summary Minimal alternative: make the "Inventory at Date" wizard open the same rich stock report view instead of the basic one. ### Problem The wizard opens `stock.view_stock_product_tree` (basic product list) instead of `stock.product_product_stock_tree` (full stock report with action buttons and search panel). ### Solution Change the wizard's `open_at_date()` to use the stock report view and its associated search view. The wizard flow is preserved — this is purely a view swap. ### Changes - `stock_quantity_history.py`: Changed `tree_view_id` from `view_stock_product_tree` to `product_product_stock_tree`, added `search_view_id` for the stock report search view ### Alternative See #263507 for a more integrated approach that replaces the wizard entirely with a date picker in the search panel. [Task #6152466](https://www.odoo.com/odoo/rd-fun-logistics-966/6152466) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263509
This change speeds up how Odoo looks up task activities in project-related mail data. It reduces the time needed for a frequently used query, which should make page and activity loading more responsive for users.
Original PR description
`/mail/data` is called a lot. It spends roughly 33% of its time on the query fetching task activities in `_get_activity_groups` https://github.com/odoo/odoo/blob/a52b277a4db5f14516717738ca962e3bb3c7180f/addons/project_todo/models/res_users.py#L27 This commit adds an index to speed up the query. - before ~25ms https://explain.dalibo.com/plan/72b26edce8448b51 - after <1ms https://explain.dalibo.com/plan/c4g6851e5b4hh702 task-6327159 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update adjusts an automated Point of Sale test so it uses a single, consistent setup. It prevents errors caused by mixing data from different companies during testing, helping keep test results reliable.
Original PR description
Making the test only depend on one class setup to avoid potential (already present) multicompany issues. In this case the env.user came from one setup class but was incompatible to use during the setup of the second class that was creating records for another company. By making the test only depend on one of the tests we'll avoid this issue. runbot-939375 Forward-Port-Of: odoo/odoo#268819
This change fixes an automated test so it no longer leaves temporary code behind after it runs. It keeps the test environment clean and prevents unnecessary test failures during development and validation.
Original PR description
Avoid polluting the Odoo model registry and failing `test_lint_override_signature` by using `patch.object` instead of manual assignment. This ensures the injected method is properly torn down after the test block, keeping the registry clean and bypassing static analysis failure as the patched method is only used for tests. runbot-939298
This update improves the way Point of Sale loyalty tests are temporarily modified during testing. It keeps those test changes isolated and automatically cleaned up afterward, which prevents unrelated test failures and helps maintain overall system stability.
Original PR description
Avoid polluting the Odoo model registry and failing `test_lint_override_signature` by using `patch.object` instead of manual assignment. This ensures the injected method is properly torn down after the test block, keeping the registry clean and bypassing static analysis failure as the patched method is only used for tests. runbot-939298
This update makes a public chat test more reliable by ensuring a menu closes before the Send action is triggered. It also corrects a test helper so it updates the right conversation data between runs, which helps prevent flaky failures and improves confidence in messaging behavior.
Original PR description
Attempt at fixing the following race condition. It's not clear what causes it, but these changes make the test more robust and might help future investigations. discuss_channel_public_tour opens the composer "More Actions" menu to attach files but feeds the hidden file input directly, so the menu is never closed and is still open when Send is clicked. Close it and wait for it to disappear before sending, to avoid clicking Send while the dropdown is dismissing. Also fix _open_group_page_as_user, which updated the last message body of self.channel instead of self.group between the two tour runs. https://runbot.odoo.com/odoo/error/243436 Forward-Port-Of: odoo/odoo#272606 Forward-Port-Of: odoo/odoo#272425
This change fixes an unstable automated test in the messaging app that could occasionally fail because of timing, not because of a real product issue. It makes the retry scenario behave more like a real user experience, reducing false test failures and improving release reliability.
Original PR description
The "Retry loading more messages on failed load more messages" test drove load-more by scrolling (real IntersectionObserver) and failed the fetch synchronously, then clicked retry immediately. The observer could fire the older-fetch twice and leave a second fetch in flight at the retry click, which then no-op'd (fetchMoreMessages bails while a fetch is loading), leaving 30 messages instead of 60. This is a test-timing artifact: a real user retries long after any fetch has settled. Fail the load-more through a Deferred rejected only once the fetch is in flight, like jump_to_present.test.js. While it is pending, duplicate observer fires no-op, so no orphan fetch can race the retry. https://runbot.odoo.com/odoo/error/242113 Forward-Port-Of: odoo/odoo#272605 Forward-Port-Of: odoo/odoo#272430
This change makes the avatar card tour test run on a fixed mid-week date instead of depending on the current day. It prevents the test from failing intermittently on Fridays and Saturdays, improving the reliability of automated checks without changing customer-facing behavior.
Original PR description
The avatar card tours create a time off relative to "today" and assert the "Back on" out-of-office indicator. When the test runs on a Friday or Saturday, today+1 is a weekend, so the leave's date_to lands on that weekend day's 00:00 and the "currently on leave" window closes at midnight. Once the run crosses that boundary the leave is no longer active, the indicator disappears and the tour fails at the "Back on" step, deterministically on that weekday. Freeze setUpClass to a fixed mid-week day so the time off always ends on a working day. https://runbot.odoo.com/odoo/error/242512
This change updates a salary configurator test so it includes the employee’s private address information. It helps ensure the test reflects real-world employee data and prevents false failures in the salary setup flow.
Original PR description
Task-6329628 Forward-Port-Of: odoo/enterprise#121935 Forward-Port-Of: odoo/enterprise#121626
This update ensures Romanian-specific stock handling is only applied when it should be. It prevents test and system errors caused by those settings being enabled unconditionally, improving stability for automated checks and future updates.
Original PR description
The Romanian specifics were applied without condition which caused runbot errors. Note that this was revealed later on (saas-19.3) after a change in the generic stock test setup. runbot-241098 Forward-Port-Of: odoo/odoo#271985
1 change
Resolved issues and error corrections
The disconnect button for French e-invoicing now uses the correct wording instead of referring to Peppol. This makes the interface clearer for users and avoids confusion when managing their electronic invoicing connection.
Original PR description
The name of the disconnect button for the France e-invoicing was incorrect as it referenced peppol and was fixed in this pr to be called Disconnect French electronic invoicing task-6266337 Forward-Port-Of: odoo/odoo#272507 Forward-Port-Of: odoo/odoo#268536
2 changes
Enhancements to existing features
The POS now sends buyer address details to Fiskaly only when they are actually available. This avoids transmitting placeholder values like "N/A", which helps keep request data accurate and prevents unnecessary records from being sent.
Original PR description
In this commit: ------------------- - Buyer address fields are optional and should only be sent to Fiskaly when they are actually available. - Avoid sending placeholder values like "N/A". If the data is not present, the fields should simply be omitted from the request. task: 6113133 Forward-Port-Of: odoo/enterprise#121989 Forward-Port-Of: odoo/enterprise#113621
Resolved issues and error corrections
The UNSPSC product code 10171500, which covers organic fertilizers and plant nutrients, was not showing up in the product settings. This fix enables the code so users can select it when classifying products, improving accuracy and completeness of product data.
Original PR description
The code 10171500 - Organic fertilizers and plant nutrients wasn't appearing. In the file that has the unspsc product codes this one was set to False. Steps to reproduce: - Activate module product_unspsc. - Go to product > accounting. - Verify that this code is not listed. Ticket [link](https://www.odoo.com/odoo/project.task/4461974) opw-4461974 Forward-Port-Of: odoo/enterprise#121914
4 changes
Enhancements to existing features
This update makes sure optional buyer address information is sent only when it actually exists. It no longer fills missing fields with placeholder values like "N/A", which helps keep submitted data cleaner and more accurate.
Original PR description
In this commit: ------------------- - Buyer address fields are optional and should only be sent to Fiskaly when they are actually available. - Avoid sending placeholder values like "N/A". If the data is not present, the fields should simply be omitted from the request. task: 6113133 Forward-Port-Of: odoo/enterprise#121989 Forward-Port-Of: odoo/enterprise#113621
Resolved issues and error corrections
This change makes an automated website checkout test wait until the page interactions are fully ready before continuing. It reduces random test failures in Odoo’s build system and makes checkout-related validation more reliable.
Original PR description
Before this commit, it could happen that the tour would click too quickly on a button in the step "Billing address is not same as delivery address", before the corresponding interaction was ready. This would then result in the tour failing. To fix this, we could try to have a system to retrigger the events on the interaction, but it feels fragile, and may cause subtle issues in the future. Another way to fix this is to simply make sure that the tour is waiting for all interactions to be ready. This is obviously not perfect, because it kind of hides the reality of the situation: with a slow network connection, a real user may encounter the problem, clicking on something and not seeing anything happens because the js is not ready yet. However, until we find a perfect solution, this commit will solves the random failing builds that we see on the runbot. error-230070 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The product UNSPSC list now correctly includes code 10171500, which corresponds to Organic fertilizers and plant nutrients. This fixes a missing option in product accounting so users can select the right classification when needed.
Original PR description
The code 10171500 - Organic fertilizers and plant nutrients wasn't appearing. In the file that has the unspsc product codes this one was set to False. Steps to reproduce: - Activate module product_unspsc. - Go to product > accounting. - Verify that this code is not listed. Ticket [link](https://www.odoo.com/odoo/project.task/4461974) opw-4461974 Forward-Port-Of: odoo/enterprise#121914
The website language selector now includes descriptive text for flag images when the flag is the only visible indicator. This makes the selector easier to understand for screen reader users and gives search engines clearer context.
Original PR description
Steps to reproduce: 1. Enable the language selector in the website header. 2. Enable the "Inline" and "Flag" options. 3. Inspect the flag images rendered in the inline variant. Issue: Flag images in the list items have an empty `alt=""` attribute in "Flag only" mode, where the flag is the sole visual indicator of the language, making the selector inaccessible to screen readers and providing no context for search crawlers. Expected behavior: Inline + Flag should have a descriptive ALT tag since there is no adjacent text or code to identify the language, the flag is not decorative. opw-6246464 Forward-Port-Of: odoo/odoo#271362
2 changes
Resolved issues and error corrections
The UNSPSC product code 10171500, for Organic fertilizers and plant nutrients, was not showing up in product accounting options. This fix enables the code so users can select it when classifying products, improving completeness and accuracy of product data.
Original PR description
The code 10171500 - Organic fertilizers and plant nutrients wasn't appearing. In the file that has the unspsc product codes this one was set to False. Steps to reproduce: - Activate module product_unspsc. - Go to product > accounting. - Verify that this code is not listed. Ticket [link](https://www.odoo.com/odoo/project.task/4461974) opw-4461974 Forward-Port-Of: odoo/enterprise#121914
The test for the Colombia POS flow was adjusted so it no longer expects one exact document number. This prevents occasional failures when the document number increases during repeated test runs, making the test more stable without changing business behavior.
Original PR description
**Why the fix:** This step failed from time to time as we did some batch testing on the runbot with the same database, and because of this, the Número de Documento increased, making it SETF990000002 or more. This error existed before 68da209 but by fixing the refund flow in said commit, this error has been appearing way more frequently. As this has already happened a few times in 18.2, it is still the targeted version for this fix. We now use a regex to make sure that we have **Número de Documento: SETF** followed by some numbers, but we do not specify that it should be SETF990000001 anymore. runbot-241997
15 changes
Enhancements to existing features
We updated the app name sent to Avalara to “Odoo SA” so these requests are easier to distinguish from other app store entries. This is a small behind-the-scenes improvement that helps avoid confusion in service reporting and identification.
Original PR description
To distinguish these calls from others in the app store, we change our app name to Odoo SA. task-6305073
This update expands automated testing to cover how the New button works in list and kanban views. It helps ensure the expected create flow is correctly handled across different view configurations, reducing the risk of regressions for users adding new records.
Original PR description
…an views This commit expands the Clickbot's test coverage by simulating a click on the "New" button within list and kanban views. Depending on the view's configuration, this action will either open the corresponding creation form view, trigger editable mode for inline-editable lists, or launch the quick create interface in kanban views. task-6324762
The Point of Sale interface for Sweden has been updated to hide the Split Bill action when the Sweden blackbox is enabled. This keeps the POS aligned with the supported local setup and avoids showing an option that cannot be used.
Original PR description
The bill splitting configuration has been removed from PoS settings. Since bill splitting is not supported when using the Sweden blackbox, this commit adapts the localization by overriding the control button template to hide the Split Bill button in the POS UI when the Sweden blackbox is enabled. Task [link](https://www.odoo.com/odoo/project.task/6294276) task-6294276 Related PRs: - Community: https://github.com/odoo/odoo/pull/269442 - Upgrade: https://github.com/odoo/upgrade/pull/10465
This update adjusts how several enterprise features read and react to UI data in chatter, activities, and attachment previews. It helps these screens stay more reliable and consistent as information changes, with no expected impact on business workflows.
Original PR description
Enterprise counter-part: adopt the `propSignal`/`propComputed` hooks (and `props.static` for callbacks) across the chatter, activity and attachment patches. Every prop read gains `()`. https://github.com/odoo/odoo/pull/271518
The company switcher and mobile menu checkboxes now follow the Enterprise theme more consistently in their checked, focus, hover, and indeterminate states. This improves the visual consistency of the interface and makes these controls feel more polished across the web client.
Original PR description
This commit scopes the switch company and mobile burger menu checkboxes to use the Enterprise theme colors for checked, indeterminate, focus, and hover states etc. task-6236887
This update makes record tracking more consistent by centralizing how tracking information is exposed and handled. It also cleans up a few outdated tracking settings in tests and related code, reducing confusion and avoiding unnecessary work during record creation.
Original PR description
This small code improvement PR serves two main purposes Serve field track info at fields_get level Override 'fields_get' to include tracking information when asked. That way there is a single entry point to fetch this information making it more standard. Track values in mail.track.mixin Currently, mail.track.mixin offers tools to enable tracking while actual automatic tracking is performed in mail.thread. It was planned but forgotten to move the value tracking in the track mixin, this is now done. Logging is still done by mail.thread but tracking itself is now better contained in track mixin. Cleanup some code bits / remove useless tracking keys notably in tests. Task-6274958
Resolved issues and error corrections
This update prevents a brief access error that could appear when a user switches companies while viewing a payroll run. If the run is not available in the newly selected company, the system now redirects directly to the payroll run list instead of showing an error first.
Original PR description
Steps to reproduce: 1- Open a payrun 2- Switch companies Issue: You get an access error for a moment and then get redirected to payrun list view Cause: When switching companies, the payrun reloads but since it is in the context of a different company, you get an access error. Solution: First check in js before fetching that you have access to the payrun, if not, redirect to the list view instead. Task-6008140 Forward-Port-Of: odoo/enterprise#120004
This change updates automated map view tests so they no longer pause longer than necessary while waiting for data to load. It helps prevent test failures caused by slow execution, improving build stability without changing the user-facing map feature.
Original PR description
This commit replaces the waitFor timeout in map view tests with runAllTimers to cope with potential execution slowdowns and avoid waiting for too long while executing the tests. runbot-error-939600 Forward-Port-Of: odoo/enterprise#120618 Forward-Port-Of: odoo/enterprise#119654
This update makes card layouts in the accounting and documents screens use the same spacing rules as other kanban cards. It helps the interface look more consistent and avoids layout differences between these views.
Original PR description
Rename and reuse the new generic card padding variables. Follow-up of https://github.com/odoo/odoo/pull/272083 Forward-Port-Of: odoo/enterprise#122037
This update fixes a Planning test tour that stopped working after a recent change to the gantt popover design. It helps ensure Planning’s automated checks continue to run reliably after interface updates.
Original PR description
PR [1] refactored the gantt popover API, and classname `.popover-footer` has been replaced by `.o_popover_footer` (i.e. we no longer use the bootstrap class for popovers). Tours that fail due to this change have been adapted accordingly. However, there was a planning tour that was temporarily deactivated and that we thus didn't spot. This commit fixes it. [1] odoo/enterprise#114328 runbot error~940279 Forward-Port-Of: odoo/enterprise#122048
This update corrects a test around tax rules so it only removes taxes that are actually tied to a fiscal position. Taxes that should remain available are now kept in the test, matching the intended behavior and preventing false failures.
Original PR description
map_tax on an empty fiscal position now preserves taxes with no fiscal_position_ids. Filter those out in test_tax_unit_auto_fiscal_position so the assertion only checks that taxes bound to a fiscal position are dropped by the unit FP. comunity PR: https://github.com/odoo/odoo/pull/268273 task-id 623151 Forward-Port-Of: odoo/enterprise#121889 Forward-Port-Of: odoo/enterprise#121525
A test for WhatsApp channel “seen” updates was adjusted so the message notification is sent only after the browser connection is subscribed. This prevents the update from being missed, ensuring seen indicators appear correctly and the test no longer times out.
Original PR description
The "Allow SeenIndicators in WhatsApp Channels" test delivers the seen update over the bus with `_sendone`, but nothing waited for the websocket to subscribe to the channel first. When the notification was sent before the subscription landed it was dropped, the member's seen_message_id was never updated client-side and the seen indicators never rendered, so the assertion timed out. The current user is a member of the channel, so it is subscribed at connection time: wait for the subscription together with `start()` (listener registered first) before opening the channel and sending the notification. https://runbot.odoo.com/odoo/error/242021 Forward-Port-Of: odoo/enterprise#121857
This change stops an automated accounting test from failing when the ISO 20022 module is not installed. It keeps the test suite stable in environments where that optional payment setup is unavailable.
Original PR description
The test_batch_payment_deletion test is currently failing when `account_iso20022` is not installed because the sepa_ct payment method doesn't exists. Add a skipTest in case the module is not installed. runbot-940257 Forward-Port-Of: odoo/enterprise#121511
Code cleanup and technical improvements
This change updates automated tests in Knowledge, Web Studio, and AI so they work with the latest plugin setup. It helps keep the test suite passing and ensures future changes in these areas are validated correctly.
Original PR description
\* = knowledge, web_studio, ai - Update tests to use withPlugins/basePlugins - Update manual plugin list usage Community PR: https://github.com/odoo/odoo/pull/259303 task-6014100
This change moves a shared address-splitting helper into a more central location used by several local reporting modules. It does not change business behavior, but it simplifies maintenance and keeps the affected country-specific reports aligned on the same logic.
Original PR description
https://github.com/odoo/odoo/pull/269676
3 changes
Enhancements to existing features
This update fills in missing translations across Point of Sale screens, dialogs, alerts, and error messages. It helps staff see clearer messages in their language, improving usability and reducing confusion during day-to-day operations.
Original PR description
pos* = All POS module In this commit: -------------------------------- Add missing translations for user-visible strings across POS modules. - Translated dialogs, errors, alerts, and other UI-visible messages - Updated Python-side UserError, ValidationError, and warning messages Task-5406947 Related PR-https://github.com/odoo/odoo/pull/239972 Forward-Port-Of: odoo/enterprise#121690 Forward-Port-Of: odoo/enterprise#102094
The point-of-sale connection for German fiscal reporting now sends buyer address information only when it actually exists. This avoids sending placeholder values like “N/A,” improving data quality and reducing the chance of rejected or confusing requests.
Original PR description
In this commit: ------------------- - Buyer address fields are optional and should only be sent to Fiskaly when they are actually available. - Avoid sending placeholder values like "N/A". If the data is not present, the fields should simply be omitted from the request. task: 6113133 Forward-Port-Of: odoo/enterprise#121989 Forward-Port-Of: odoo/enterprise#113621
Resolved issues and error corrections
When a new file is uploaded in Documents, its available actions now appear right away. This removes the extra step of unselecting and reselecting the file just to access those actions, making file handling faster and smoother.
Original PR description
Bug === When uploading a new file in documents, it's selected, but the actions are not visible (we need to unselect - select the record to see the actions). Task-5408471 Forward-Port-Of: odoo/enterprise#121985 Forward-Port-Of: odoo/enterprise#114770
5 changes
Enhancements to existing features
Italian vendor bills now retain the SDI transaction ID when they are received, instead of dropping it. This makes it easier to trace and match incoming documents with their official exchange reference.
Original PR description
A unique transaction id is provided by the SDI for every document. This transaction id was saved on document sending, but discarded for received one. backport of f2cc23b30dd4 opw-6111186
Resolved issues and error corrections
The security alert email sent when a new device logs in will now be shown in the recipient’s selected language instead of defaulting to English. This makes the message easier to understand and keeps the subject and body consistent for users with translated preferences.
Original PR description
**Description of the issue/feature this PR addresses:** The “new device” security alert email sent by auth_signup renders its QWeb body without any lang in the rendering context. When env.context…
**Description of the issue/feature this PR addresses:** The “new device” security alert email sent by auth_signup renders its QWeb body without any lang in the rendering context. When env.context does not carry a language (which is the case in this code path), QWeb falls back to the source language (en_US), even if the recipient user has a different language configured and translations are available. This results in mixed-language emails (translated subject via _(), but body still in English). **Current behavior before PR:** Configure a user language different from en_US (e.g. es_ES). Login with that user from a new browser/device (or after clearing cookies) to trigger the “new device” alert. The email is sent, but the body is rendered in English because the template is rendered without lang in context (fallback to en_US), even when QWeb translations exist. **Desired behavior after PR is merged:** The email body is rendered using the recipient user’s language (res.users.lang / partner.lang) by explicitly setting lang in the rendering context before rendering the QWeb template. As a result, when translations exist, the whole email (subject and body) is consistently rendered in the user’s language instead of falling back to en_US. **Steps to reproduce:** Set a user language to es_ES (or any non-en_US language). Ensure translations exist for auth_signup.alert_login_new_device. Login from a new browser/device (or clear cookies) to trigger the alert. Observe the received email: body is in English before this PR, and in the user’s language after. @Tecnativa TT60646 @victoralmau @pedrobaeza please review --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refreshes the spreadsheet component to its latest version and brings in several small fixes behind the scenes. It improves everyday usability, such as better color picker behavior and more reliable font display on Linux, while also updating package settings to stay compatible with the current development environment.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ad313f6500 [REL] 18.0.72 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ad313f6500 [REL] 18.0.72 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/d1524238a3 [FIX] sheet: close the color picker on external click [Task: 6322171](https://www.odoo.com/odoo/2328/tasks/6322171) https://github.com/odoo/o-spreadsheet/commit/f164e6b3a0 [FIX] sheet: add sheet tab color to custom colors [Task: 6322171](https://www.odoo.com/odoo/2328/tasks/6322171) https://github.com/odoo/o-spreadsheet/commit/dc7a2b1c99 [FIX] Fonts: Add default font for Linux [Task: 6328646](https://www.odoo.com/odoo/2328/tasks/6328646) https://github.com/odoo/o-spreadsheet/commit/9027b97d4a [IMP] package: add runbot script [Task: 6316690](https://www.odoo.com/odoo/2328/tasks/6316690) https://github.com/odoo/o-spreadsheet/commit/855ec0dadf [FIX] package-lock: re-run npm install [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/4af8d893d8 [FIX] rolldown: Fix cjs file extension [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/48f0cd7b8a [FIX] package-lock: update with removing node_modules [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/08175c6cb8 [FIX] package.json: Update Node.js and npm engine requirements [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This change resolves a test failure affecting Swedish SEPA payments when two related modules are installed together. It updates the test setup so the payment format works consistently and avoids false failures in automated checks.
Original PR description
Here https://github.com/odoo/enterprise/pull/114662 we changed the way the CdtrAgt node is used in the SEPA XML file for Sweden. But this change broke a test when both account_iso20022 & l10n_se_bban are installed, leading to a Non-expected child error. This commit skip the failling test if l10n_se_bban is installed, and add a new one to replace it. runbot-938366 runbot-938367
This change updates an accounting import test to use a smaller, prebuilt XML example instead of a generated one. It makes the test easier to maintain and more reliable, helping ensure partner bank details are retrieved correctly during invoice imports.
Original PR description
Move the partner retrieval bank account number test to the `test_ubl_import_bis3_invoice_be_retrieve_partner.py` file and use a partial XML instead of a generated XML.
4 changes
Resolved issues and error corrections
This fix ensures invoice chatter messages show formatted text properly instead of exposing raw HTML tags to users. It improves the readability of communication history in the Chilean electronic invoicing flow.
Original PR description
Some invoice chatter messages are containing raw HTML tags. Because they are passed as standard strings instead of using the `Markup` wrapper, they are escaped them, causing the actual HTML tags to be displayed as literal text in the chatter. opw-6318439
When users open the detailed list from a grid cell grouped by a selection field, the list title now shows the human-friendly label instead of the internal technical value. This makes the interface easier to understand and avoids confusing names like "non_billable" appearing to end users.
Original PR description
When grouping a grid view by a selection field and clicking on the cell magnifier, the list title showed the technical name (e.g. non_billable) instead of the display name (e.g. "Non Billable"). This commit adds a condition specifically for selection fields, ensuring that their display names are used. task-5980035
Uploaded WebP images are now checked against the same maximum resolution limit as other image formats. This prevents very large images from being accepted on the website or in attachments, helping keep uploads consistent and avoiding oversized files.
Original PR description
Since 17.0, `webp` images can be uploaded at any resolution, whereas every other format is refused above IMAGE_MAX_RESOLUTION (50 Mpx) when the attachment is created on the server. Root cause…
Since 17.0, `webp` images can be uploaded at any resolution, whereas every other format is refused above IMAGE_MAX_RESOLUTION (50 Mpx) when the attachment is created on the server. Root cause =========== `ImageProcess` grouped webp together with empty sources and SVG and set `self.image = False`, returning before the `verify_resolution` check. As a result the resolution limit enforced for `png/jpeg/...` was never applied to `webp`. Fix === Split `webp` out of the skip branch: it is still not processed as before, but its resolution is now read from the RIFF header with `get_webp_size()` and checked against `IMAGE_MAX_RESOLUTION`, so oversized webp images are refused on upload like any other format. Steps to reproduce =================== 1. Edit any page with the website editor 2. Upload a `webp` image larger than 50 Mpx (e.g. 8000x8000) => The image is accepted, while a `png/jpeg` of the same size is refused task-4134430 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Mexican trial balance XML report now follows the SAT-recommended order for account nodes. This brings the generated file in line with the official structure, helping avoid validation or review issues when submitting reports.
Original PR description
**Steps to reproduce:** - Install the `l10n_mx_reports` module and switch to a Mexican company. - Navigate to Accounting > Reporting > Trial Balance. - From the dropdown menu, click `SAT (XML)`. -…
**Steps to reproduce:** - Install the `l10n_mx_reports` module and switch to a Mexican company. - Navigate to Accounting > Reporting > Trial Balance. - From the dropdown menu, click `SAT (XML)`. - Open the generated XML file and inspect the `<BCE:Ctas>` nodes. **Observation:** - The generated XML uses the following attribute order: `Debe > NumCta > Haber > SaldoFin > SaldoIni` - However, the SAT-recommended structure is: `NumCta > SaldoIni > Debe > Haber > SaldoFin` **Root Cause:** At [1], the attributes of the `<BCE:Ctas>` node are defined in an order that differs from the SAT-recommended structure. While the XML remains valid, the generated report does not match the layout recommended by the Mexican government specification. **Fix:** This commit reorders the `<BCE:Ctas>` attributes to follow the SAT-recommended structure, aligning the generated XML with the behavior introduced at [2] for `saas-19.3`. backport-of: https://github.com/odoo/enterprise/pull/115374 [1]: https://github.com/odoo/enterprise/blob/cb9c19272309d793379fa4d23145162f72fa5552/l10n_mx_reports/data/templates/cfdibalance.xml#L15-L20 [2]: https://github.com/odoo/enterprise/blob/acf0929a88ec788aecd44f6b4c647e468dc0a319/l10n_mx_reports/data/templates/cfdibalance.xml#L17-L22 opw-6297711