Daily updates from Odoo
Monday, June 29, 2026
76 changes
7 changes
Resolved issues and error corrections
This update corrects a layout issue in website theme previews where shapes could appear too close together or with an unwanted gap. It helps previews look cleaner and more accurate, making it easier for users to evaluate themes before applying them.
Original PR description
task-6340483
This change updates automated tests for the map view so they complete more reliably even when execution is slower than expected. It helps prevent test timeouts and reduces false failures in the development and deployment pipeline.
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#119654
This update standardizes the spacing used on card-based kanban screens so they follow the same layout rules across affected areas. It helps the interface look more consistent and reduces the risk of spacing differences between views.
Original PR description
Rename and reuse the new generic card padding variables. Follow-up of https://github.com/odoo/odoo/pull/272083
This update restores a Planning tour that was failing after changes to the popover interface. It ensures the automated test matches the new behavior so Planning can be validated reliably again.
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
This update prevents the automated Clickall test tool from contacting Odoo Fin’s live servers when checking the accounting dashboard. It extends the existing mock to cover a newer endpoint version, helping tests stay reliable and safe from external service changes.
Original PR description
This commit follows up on [1] by extending the Odoo Fin request mock to cover the new version 2 (v2) favorite institutions endpoint. Previously, a mock was introduced to prevent the Clickall tool from making real external HTTP requests to `production.odoofin.com` when displaying the accounting dashboard. This update ensures that the newly introduced v2 URL is also safely intercepted, keeping the automated tests fully isolated from production servers. runbot-234936 [1] : https://github.com/odoo/odoo/commit/c6451015f1b01c3e1defe4a576989fd4bfdf2cdb Forward-Port-Of: odoo/odoo#272339
Miscellaneous changes
This pull request updates the saas-19.4 release information in Odoo’s release file. It helps keep the product versioning and release metadata aligned with the current branch, supporting a clean and consistent software release process.
This pull request appears to be a release coordination update for the SaaS 19.4 branch. It mainly prepares the branch for delivery and does not indicate a specific business feature or user-facing change.
14 changes
Enhancements to existing features
The check status button is now disabled when the user does not have permission to edit it. This avoids access errors and makes the behavior clearer when working across companies in a tax unit.
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
The option to send a PDP response is no longer shown as a prominent button on the invoice or bill screen. It has been moved into the settings/menu area, since cancelling and reposting the document achieves the same result and keeps the interface cleaner.
Original PR description
No real need to show a big button for sending a response in PDP as cancelling and posting an invoice/bill would do the same, so we move it to the cog wheel menu task-6274220 Forward-Port-Of: odoo/odoo#268846
Resolved issues and error corrections
The website editor sidebar was adjusted so it keeps its intended width even when the browser is zoomed in. This prevents the preview from switching to mobile mode when users click Edit at 150% zoom, improving the editing experience.
Original PR description
Steps to reproduce: - Open a website page on Chrome/Firefox. - Set the browser zoom to 150%. - Click Edit. => The website preview switches to mobile view. Before this commit, [1] changed the sidebar to `content-box`, so the `border-start` class added one pixel to `$o-we-sidebar-width`. The sidebar then reached 289px instead of 288px, which made the preview fall below the desktop breakpoint at 150% zoom. After this commit, the sidebar width subtracts the Bootstrap border width so its total width stays at 288px and edit mode keeps the desktop view. [1]: https://github.com/odoo/odoo/commit/181b870c3c6cf28c3eac59a16c36b94ae11ae927 task-6251151 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272074
This change prevents a warning from being logged on every document upload when automatic OCR is not enabled. It reduces noisy logs and makes it easier for teams 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. opw-[6232122](https://www.odoo.com/odoo/unassigned-tasks/6232122) Forward-Port-Of: odoo/enterprise#120741
The website editor now hides the editing toolbar when a content block is removed, even if text was previously selected. This fixes a confusing issue where the toolbar could remain visible after deleting a snippet, improving the editing experience for users.
Original PR description
Commit 8df8b4f41809de75f9ca220d47274cc3166f1cd5 moved the check for selection inside `[data-prevent-closing-overlay]` to the `closeToolbar` plugin. But when this function is called from `selection_leave_handlers` it should not do that check, as it was done for the focus or click. This commit skips the check based on the selection when `closeToolbar` is called by `selection_leave_handlers`. Steps to reproduce: - Open website builder - Drop "Text Image" snippet - Select some text in the snippet - Click on the trash icon in the sidebar to remove the snippet - Bug: the toolbar is still shown task-6308364 Forward-Port-Of: odoo/odoo#270516
Reports will no longer show ledgers that do not contain any journals for the active companies. This reduces confusion by removing entries that are not meaningful for the current business context.
Original PR description
When a ledger does not include any journal of the active companies, do not display it because it does not make sence for these companies. task-6280033 Forward-Port-Of: odoo/enterprise#119546
This update fixes an issue in the website builder where elements with a custom inline shadow could be shown with the wrong shadow state. It also ensures that removing a custom shadow clears any standard shadow styling too, keeping the visual result consistent.
Original PR description
Before this PR, , since [1], elements with an inline `box-shadow` and no custom shadow class were not detected as custom shadows by the builder option. This could make existing snippets show the wrong shadow state. After this PR, elements with an inline `box-shadow` are treated as custom shadows by the builder option, and cleaning the custom shadow also removes Bootstrap shadow classes. [1]: https://github.com/odoo/odoo/commit/55890082db7879bef3a976c84ab336bdacf76818 task-6251151 Forward-Port-Of: odoo/odoo#267175
This update makes automated checks for chat window titles more precise and less likely to fail at random. It improves the reliability of tests, helping keep messaging features stable in development and on runbot.
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#272454
Forward-Port-Of: odoo/odoo#272380This update extends the test mock used by Clickall so it also covers the newer Odoo Fin favorite institutions endpoint. It keeps automated accounting dashboard tests fully isolated from the live production service, reducing the risk of unintended external requests during testing.
Original PR description
This commit follows up on [1] by extending the Odoo Fin request mock to cover the new version 2 (v2) favorite institutions endpoint. Previously, a mock was introduced to prevent the Clickall tool from making real external HTTP requests to `production.odoofin.com` when displaying the accounting dashboard. This update ensures that the newly introduced v2 URL is also safely intercepted, keeping the automated tests fully isolated from production servers. runbot-234936 [1] : https://github.com/odoo/odoo/commit/c6451015f1b01c3e1defe4a576989fd4bfdf2cdb Forward-Port-Of: odoo/odoo#272339
This change prevents an automated test from failing when the ISO 20022 payment module is not installed. It makes the test suite more reliable across different setups without affecting normal business operations.
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
This update fixes an issue where the text cursor could jump to the edge of a template block when deleting text inside an email editor. It makes editing template content feel more natural and prevents unexpected cursor movement while working on messages.
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#266816The POS restaurant interface will now only show the Split button when bill splitting is actually enabled in the settings. This avoids confusing staff with an option that should not be available and keeps the checkout screen consistent with the configured behavior.
Original PR description
The Split button in the POS control panel was rendered whenever the restaurant module was active, without checking the `iface_splitbill` config flag. opw-6248177 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267359 Forward-Port-Of: odoo/odoo#266654
When a fixed price is set by a pricelist, the extra price badge for product variants will now be hidden in both Sales and Website. This prevents customers and sales users from seeing a price adjustment that does not actually affect the final price.
Original PR description
Issue: --- If pricelist.compute_price is fixed, extra price of variant is not taken into calculation, but it's shown in extra price badge. Steps to reproduce: --- 1- Create a product template with two variants. 2- Apply extra price for each attribute values. 3- Apply a pricing with a fixed price for the product on a pricelist. 4- Create a SO and apply the pricelist. Add the product to SOL. 5- Open product configurator on SOL. - As you see, the extra price is shown but it's not effective. 6- Open the product in website with the pricelist. - Here also the extra price is shown but it's not effective. Cause: --- This is caused because there is no mechanism to hide extra price having pricelist.compute_price == fixed. Fix: --- We need to fix the issue both in sale and website_sale separately by having a flag to ensure extra price badge is hidden if compute_price is fixed. opw-6276208 Forward-Port-Of: odoo/odoo#271572 Forward-Port-Of: odoo/odoo#270140
Documentation and clarification updates
This change adds a signed Individual Contributor License Agreement for David Sonnet. It is an administrative/legal update that confirms the contribution can be accepted into the project.
Original PR description
Signing the Odoo Individual Contributor License Agreement v1.0. Adds `doc/cla/individual/dsonnet.md`. --- I confirm I have read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270526
9 changes
Enhancements to existing features
The check status button is now disabled for users who do not have permission to edit the check. This prevents access errors when a user tries to change a check’s status in a company where they do not have write access.
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
The option to send a PDP response is no longer shown as a large on-screen button. It has been moved into the cog wheel menu, since cancelling and then posting an invoice or bill already provides the same result.
Original PR description
No real need to show a big button for sending a response in PDP as cancelling and posting an invoice/bill would do the same, so we move it to the cog wheel menu task-6274220 Forward-Port-Of: odoo/odoo#268846
Resolved issues and error corrections
This fix ensures the editing toolbar disappears when a text block is deleted from the website builder. It improves the editing experience by preventing the toolbar from staying visible after the selected content is gone.
Original PR description
Commit 8df8b4f41809de75f9ca220d47274cc3166f1cd5 moved the check for selection inside `[data-prevent-closing-overlay]` to the `closeToolbar` plugin. But when this function is called from `selection_leave_handlers` it should not do that check, as it was done for the focus or click. This commit skips the check based on the selection when `closeToolbar` is called by `selection_leave_handlers`. Steps to reproduce: - Open website builder - Drop "Text Image" snippet - Select some text in the snippet - Click on the trash icon in the sidebar to remove the snippet - Bug: the toolbar is still shown task-6308364 Forward-Port-Of: odoo/odoo#270516
This update fixes several issues in the rental webshop test flow so it runs reliably again. It ensures demo payment data is only prepared when available, allows weekend rentals in the test setup, and makes the shop search the intended product instead of picking from unrelated items.
Original PR description
## [FIX] website_sale_renting_planning: prepare payment if demo is installed Before this commit, the demo `payment.provider` for the tests was being created in `setUpClass` this caused an issue…
## [FIX] website_sale_renting_planning: prepare payment if demo is installed Before this commit, the demo `payment.provider` for the tests was being created in `setUpClass` this caused an issue because `payment_demo` is not a dependency of this module, therefore it may not be installed while these tests are running and cause the tests to error at setup. After this commit, the `payment.provider` creation was moved into the tests after the check for `payment_demo` installation, ensuring that `payment_demo` would exist when a `payment.provider` is prepared. https://runbot.odoo.com/odoo/runbot.build.error/940273 ## [FIX] website_sale_renting_planning: unforbid weekend in tests Before this commit, the company had `renting_forbidden_sat` and `renting_forbidden_sun` enabled which made it not possible to rent products from website if the rental date included a saturday or sunday. This commit fixes that but setting `renting_forbidden_sat` and `renting_forbidden_sun` to False and allowing rental on all days of the week. https://runbot.odoo.com/odoo/runbot.build.error/940312 ## [FIX] website_sale_renting_planning: search for product in shop page Before this commit, the website `/shop` page would display all published products in the db, this could cause the `website_sale_renting_planning_buy_product` tour to fail if the setup product is not in the first page. After this commit, the `/shop` page is now access with a search on the product to ensure there won't be other products in the first page. https://runbot.odoo.com/odoo/runbot.build.error/940275 Forward-Port-Of: odoo/enterprise#121342
The system no longer logs a warning for every document upload when automatic OCR is turned off. This keeps logs cleaner and avoids confusing messages that do not require any action.
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. opw-[6232122](https://www.odoo.com/odoo/unassigned-tasks/6232122) Forward-Port-Of: odoo/enterprise#120741
Ledgers that do not contain any journals for the currently active companies will no longer be shown. This reduces confusion by removing entries that would not be relevant or useful in the current company context.
Original PR description
When a ledger does not include any journal of the active companies, do not display it because it does not make sence for these companies. task-6280033
This update fixes a timing issue in WhatsApp channel tests where seen-status indicators could fail to appear reliably. By waiting for the conversation to fully load before simulating the seen event, the indicators now display correctly and the test no longer times out.
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
The automated Clickall test now also blocks requests to the newer Odoo Fin v2 favorite institutions endpoint. This keeps test runs fully isolated from production services and reduces the risk of unwanted external calls during accounting dashboard testing.
Original PR description
This commit follows up on [1] by extending the Odoo Fin request mock to cover the new version 2 (v2) favorite institutions endpoint. Previously, a mock was introduced to prevent the Clickall tool from making real external HTTP requests to `production.odoofin.com` when displaying the accounting dashboard. This update ensures that the newly introduced v2 URL is also safely intercepted, keeping the automated tests fully isolated from production servers. runbot-234936 [1] : https://github.com/odoo/odoo/commit/c6451015f1b01c3e1defe4a576989fd4bfdf2cdb Forward-Port-Of: odoo/odoo#272339
Documentation and clarification updates
This change adds a contributor license agreement file for David Sonnet. It is an administrative/legal update that confirms the contributor has signed the Odoo Individual Contributor License Agreement, with no functional impact on the product.
Original PR description
Signing the Odoo Individual Contributor License Agreement v1.0. Adds `doc/cla/individual/dsonnet.md`. --- I confirm I have read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270526
19 changes
Enhancements to existing features
The Point of Sale receipt now shows the tax base amount for every tax group again, matching the 19.0 receipt layout. This makes the tax breakdown easier to read and avoids receipts looking like a flat list when multiple tax groups share the same base amount.
Original PR description
Revert the receipt tax summary design back to the 19.0 format, ensuring that the base amount is always displayed for each tax group. Before this commit, when all tax groups shared the same tax base, the base amount was hidden, leading to a flat tax listing. Now, the template always renders the tax groups in the format: "Tax [Name] on [Base Amount] [Tax Amount]" task-id: 6296906 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The action for sending a PDP response is no longer shown as a prominent button. It has been moved into the cog wheel menu, since users can achieve the same result through the existing cancel and post workflow for invoices and bills.
Original PR description
No real need to show a big button for sending a response in PDP as cancelling and posting an invoice/bill would do the same, so we move it to the cog wheel menu task-6274220 Forward-Port-Of: odoo/odoo#268846
Resolved issues and error corrections
This fix makes the text editor toolbar disappear at the right time when a snippet is removed from a page. It prevents the toolbar from staying visible after deleting content, improving the editing experience in the website builder.
Original PR description
Commit 8df8b4f41809de75f9ca220d47274cc3166f1cd5 moved the check for selection inside `[data-prevent-closing-overlay]` to the `closeToolbar` plugin. But when this function is called from `selection_leave_handlers` it should not do that check, as it was done for the focus or click. This commit skips the check based on the selection when `closeToolbar` is called by `selection_leave_handlers`. Steps to reproduce: - Open website builder - Drop "Text Image" snippet - Select some text in the snippet - Click on the trash icon in the sidebar to remove the snippet - Bug: the toolbar is still shown task-6308364 Forward-Port-Of: odoo/odoo#270516
This update fixes several issues in the website rental and planning tests so they run more reliably. It ensures payment setup only happens when the required demo data is available, allows weekend rentals in the test setup, and makes the product search more targeted so the correct item is found on the shop page.
Original PR description
## [FIX] website_sale_renting_planning: prepare payment if demo is installed Before this commit, the demo `payment.provider` for the tests was being created in `setUpClass` this caused an issue…
## [FIX] website_sale_renting_planning: prepare payment if demo is installed Before this commit, the demo `payment.provider` for the tests was being created in `setUpClass` this caused an issue because `payment_demo` is not a dependency of this module, therefore it may not be installed while these tests are running and cause the tests to error at setup. After this commit, the `payment.provider` creation was moved into the tests after the check for `payment_demo` installation, ensuring that `payment_demo` would exist when a `payment.provider` is prepared. https://runbot.odoo.com/odoo/runbot.build.error/940273 ## [FIX] website_sale_renting_planning: unforbid weekend in tests Before this commit, the company had `renting_forbidden_sat` and `renting_forbidden_sun` enabled which made it not possible to rent products from website if the rental date included a saturday or sunday. This commit fixes that but setting `renting_forbidden_sat` and `renting_forbidden_sun` to False and allowing rental on all days of the week. https://runbot.odoo.com/odoo/runbot.build.error/940312 ## [FIX] website_sale_renting_planning: search for product in shop page Before this commit, the website `/shop` page would display all published products in the db, this could cause the `website_sale_renting_planning_buy_product` tour to fail if the setup product is not in the first page. After this commit, the `/shop` page is now access with a search on the product to ensure there won't be other products in the first page. https://runbot.odoo.com/odoo/runbot.build.error/940275 Forward-Port-Of: odoo/enterprise#121342
This fix ensures that Point of Sale receipts show the customer’s change as a positive amount when they pay more than the order total. It removes a misleading negative sign so receipts are clearer and more accurate for customers and staff.
Original PR description
**Issue:** The printed receipt in Point of Sale displayed a negative change amount when the customer paid more than the order total. **Before:** The receipt showed the change as a negative value…
**Issue:** The printed receipt in Point of Sale displayed a negative change amount when the customer paid more than the order total. **Before:** The receipt showed the change as a negative value (e.g., `-$5,504.00`), which was misleading for customers. **After:** The receipt now correctly displays the change as a positive value (e.g., `$5,504.00`). **Steps to Reproduce:** 1. Open a Point of Sale session 2. Add products to the cart (example total: `$49,496.00`) 3. Select the **Cash** payment method 4. Enter an amount greater than the order total (example: `$55,000.00`) 5. Observe that the **Change** field displays a negative value 6. Confirm the payment 7. Print the receipt and observe that the change amount is also negative **Root Cause:** The issue was caused by an unnecessary negation in the `export_for_printing()` method in `pos_order.js`. The `get_change()` method already returns the correct positive change amount. However, the code applied an extra negation (`-this.get_change()`), which converted the value into a negative amount before rendering it on the receipt. **Fix:** Removed the unnecessary negation in `export_for_printing()` so the receipt now displays the correct positive change amount. Video reproducing the issue: [[Click here to view the video](https://drive.google.com/file/d/1QnQ47qlTFvv98K0J_NzreBVeIh-J2XcF/view?usp=sharing)] opw-6211988 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269978 Forward-Port-Of: odoo/odoo#264681
This change fixes a test in the salary configurator so it correctly includes an employee’s private address. It helps ensure the salary setup process is validated properly and avoids false test failures during development.
Original PR description
Task-6329628 Forward-Port-Of: odoo/enterprise#121626
This change stops a repetitive warning from appearing when automatic OCR is turned off. It makes uploads cleaner and reduces noise for users, without changing how documents are processed.
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. opw-[6232122](https://www.odoo.com/odoo/unassigned-tasks/6232122) Forward-Port-Of: odoo/enterprise#120741
This update removes a receipt customization that pointed to an element no longer used in the standard point of sale receipt. It ensures the Belgian black box receipt continues to work correctly after the receipt layout change, avoiding display or rendering issues.
Original PR description
In the community point_of_sale module, the `<t id="tax_base">` element was removed from the order receipt template in order to restore the 19.0 tax summary design (always displaying the tax base). Remove the xpath in pos_blackbox_be that was targeting this deleted element. task-id: 6296906
This update makes reset (neutralized) databases use the test VAT validation service instead of the live production one. It helps avoid sending unnecessary checks to the real external service, while leaving any custom setup unchanged.
Original PR description
Neutralized databases don't always have demo data, so they talk to production VIES endpoint. With this change, the production endpoint is replaced with the test one. If some database has a custom endpoint, nothing is done. @moduon MT-15142 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272036
The page builder now correctly hides the column count option again when the related style is used. This restores the expected editing behavior after a refactoring broke it, helping keep layout settings consistent 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#268005
This change makes the public discussion tour more reliable by ensuring the attachment menu closes before a message is sent. It also corrects a test setup issue so the right conversation is updated between test runs, helping prevent flaky failures and improving confidence in messaging features.
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#272425
This update extends the automated test mock so it also covers the new Odoo Fin v2 favorites institutions endpoint. It helps keep tests fully isolated from production services, reducing the risk of unwanted external requests during dashboard testing.
Original PR description
This commit follows up on [1] by extending the Odoo Fin request mock to cover the new version 2 (v2) favorite institutions endpoint. Previously, a mock was introduced to prevent the Clickall tool from making real external HTTP requests to `production.odoofin.com` when displaying the accounting dashboard. This update ensures that the newly introduced v2 URL is also safely intercepted, keeping the automated tests fully isolated from production servers. runbot-234936 [1] : https://github.com/odoo/odoo/commit/c6451015f1b01c3e1defe4a576989fd4bfdf2cdb Forward-Port-Of: odoo/odoo#272339
### Steps to reproduce: - Download Calendar and Contacts app - Go to the Setting -> Companies -> Manage companies; make sure there are at least two companies - Go to the Setting -> Users -> Manage users; make sure the current logged-in user has access to both companies - Create a another user who also have access to both companies - Search for the new user in contacts -> Assign the current company to the contact -> Through the internal link of the company, go to sales and purchase tab -> as
Original PR description
### Steps to reproduce: - Download Calendar and Contacts app - Go to the Setting -> Companies -> Manage companies; make sure there are at least two companies - Go to the Setting -> Users -> Manage…
### Steps to reproduce: - Download Calendar and Contacts app - Go to the Setting -> Companies -> Manage companies; make sure there are at least two companies - Go to the Setting -> Users -> Manage users; make sure the current logged-in user has access to both companies - Create a another user who also have access to both companies - Search for the new user in contacts -> Assign the current company to the contact -> Through the internal link of the company, go to sales and purchase tab -> assign the same company in the company field - Switch the company of the logged in user to the other company - Open the test contact form, use the meeting smart button and create a new meeting - Open the kanban contact view **> Access Error: Uh-oh! Looks like you have stumbled upon some top-secret records.** ### Cause of Issue: When trying to view the search results in kanban view, the `meeting_count` is calculated for each contact. Hence,`_compute_meeting_count()` is called which calls `_compute_meeting()`. https://github.com/odoo/odoo/blob/f39785bcddd1eb5b7fb503d053c9bb66e2a0f15c/addons/calendar/models/res_partner.py#L49-L54 Since the above section tries to access `partner.parent_id` each loop, it reaches a `parent_id` that's not accessible for the current user. ### Fix: Since we need to access `parent_id` to be able to calculate meeting count for the full tree of partners, `sudo()` is used to get all partners, but meetings are computed for ancestors who are in `self_ids` only so that we still remain within scope. Same old logic is used to propagate meetings for every ancestor, but dictionary lookups are used to enhance performance. opw-5874204 Forward-Port-Of: odoo/odoo#248985
Remove useless assignation of state from frontend in `_check_pos_order` because its overrided just after in the process. Forward-Port-Of: odoo/odoo#272176
Original PR description
Remove useless assignation of state from frontend in `_check_pos_order` because its overrided just after in the process. Forward-Port-Of: odoo/odoo#272176
This change fixes an unstable automated test in the messaging area that could fail because of timing, not because of a real product issue. It makes the test wait for the load action to be properly in progress before retrying, so it better reflects how a real user behaves and prevents false failures in quality checks.
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#272430
This update prevents the text cursor from jumping to the edge of a template block when editing and deleting text inside email content. It makes editing in mail templates smoother and more predictable, especially in purchase order templates.
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#266816Documentation and clarification updates
This change adds a signed Odoo Individual Contributor License Agreement for David Sonnet. It is an administrative/legal update that allows the contributor’s work to be accepted under Odoo’s contribution process, with no functional impact on the product.
Original PR description
Signing the Odoo Individual Contributor License Agreement v1.0. Adds `doc/cla/individual/dsonnet.md`. --- I confirm I have read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270526
Miscellaneous changes
Pulling latest translations from Weblate, since the sync failed to merge them.
Original PR description
Pulling latest translations from Weblate, since the sync failed to merge them.
Pulling latest translations from Weblate, since the sync failed to merge them.
Original PR description
Pulling latest translations from Weblate, since the sync failed to merge them.
1 change
Resolved issues and error corrections
When a new file is uploaded in Documents, its action buttons now appear right away. This removes the need to deselect and reselect the file just to access common actions, making the workflow smoother and faster.
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#114770
4 changes
Enhancements to existing features
The action used to send a PDP response is no longer shown as a large button on the invoice/bill screen. It is now available in the settings/menu options, reducing visual clutter while keeping the same functionality through other posting and cancellation actions.
Original PR description
No real need to show a big button for sending a response in PDP as cancelling and posting an invoice/bill would do the same, so we move it to the cog wheel menu task-6274220 Forward-Port-Of: odoo/odoo#268846
Resolved issues and error corrections
This fix ensures that attendees see the proper success message after completing a website event quiz. It improves the clarity of the user experience by showing the right confirmation message at the right time.
Original PR description
opw-6332274 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#272371
When a business card is scanned, the city information is now correctly imported along with the other contact details. This makes saved contact records more complete and reduces the need for manual correction.
Original PR description
Previously, when user scans any business card, every information was fetched except for the city name. After this commit the city field will be properly fetched. task-6332914
Documentation and clarification updates
This change adds a signed Individual Contributor License Agreement for David Sonnet. It is an administrative/legal update that allows the contribution to be accepted and tracked properly, with no functional impact on users.
Original PR description
Signing the Odoo Individual Contributor License Agreement v1.0. Adds `doc/cla/individual/dsonnet.md`. --- I confirm I have read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270526
1 change
Enhancements to existing features
This change ensures only real buyer address details are sent to Fiskaly when they are available. If address information is missing, the system now omits those fields instead of sending placeholder values like "N/A", reducing the risk of inaccurate compliance data.
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#113621
11 changes
New functionality added to Odoo
This update adds demo data so repair task examples come with products already available to select. It helps users explore the feature more easily and makes demonstrations and testing more realistic.
Original PR description
Add demo data for products to pick up on tasks Task-3765169
Enhancements to existing features
The search dropdown in Web Studio now stays in the correct state when users click the search field while it is already open. This prevents the menu from closing and immediately reopening, making the interface feel more stable and predictable.
Original PR description
When clicking on the search input while the search dropdown is already open, it closes it on pointer-down and reopens it on pointer-up. This commit fixes the issue with a check on a data attribute. task-6190769
The website generator now links categories to products using unique IDs instead of category names. This avoids mistakes when different categories share the same name, making product assignment more accurate and dependable.
Original PR description
Before we matched categories with products but names but this was less reliable in the case that we had multiple categories with the same name. e.g. Accessories (for men) and Accessories (for women). This new method allows for this and makes the matching more reliable.
This change hides certain zero-value double holiday payroll lines on payslips, making the document easier to read. It removes unnecessary entries for taxable salary and withholding tax when they do not apply, so employees and payroll teams see only relevant information.
Original PR description
This PR expected to hide payslip lines when the value equals to 0, there two rules should be invisible: - Taxable Salary (Double Holiday) - DH_GROSS - Withholding Tax (Double Holiday) - DH_PP - Social Contribution (Double Holiday) - ONSS_DOUBLE_HOLIDAY task: 6317187
Resolved issues and error corrections
The Documents quick button on an employee form now opens in the same page instead of launching a new one. This makes navigation smoother and avoids interrupting the user’s workflow.
Original PR description
Issue: ---------------------------------------- When on an employee form, clicking the "Documents" button opens a new page instead of staying on the same. Steps to reproduce: ---------------------------------------- - Install `documents_hr` - Go on an employee form - Click the "Documents" button - It opens a new page Cause: ---------------------------------------- The `'ir.actions.act_url'` opens a new page by default. Solution: ---------------------------------------- Add `'target': 'self',` to make it open the URL in the same page. opw-6284677 Forward-Port-Of: odoo/enterprise#120285
This update fixes a timing issue in the WhatsApp channel test so the system waits for the connection to be ready before sending the seen-status update. As a result, the test can reliably confirm that seen indicators appear correctly, preventing false failures in validation.
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
The page limit note shown in the website generator has been updated to be less specific about the maximum number of pages. This gives the system more flexibility to adjust limits later without changing the user-facing message again.
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. Forward-Port-Of: odoo/enterprise#121941 Forward-Port-Of: odoo/enterprise#121671
This update fixes an unstable test in the call debrief player by aligning it with the latest playback behavior. It removes an outdated step that manually triggered loading, which helps prevent false test failures without changing the end-user experience.
Original PR description
We update this test to remove the obsolete manual loadeddata dispatch and wait for Segment 1 to load natively before clicking. This aligns the test with the new signal-based core widget and prevents flaking. task-6321435 community https://github.com/odoo/odoo/pull/271300
This update corrects an automated point-of-sale refund test so it no longer checks an item price that can vary when the POS currency differs from the company currency. The change helps prevent false test failures and keeps the refund flow validation reliable.
Original PR description
Before this commit, the tour was checking the price of an article which was not the good one since the currency of the config was not the same as the company one. This commit removes the check of the price which is not even relevant for the tour. Forward-Port-Of: odoo/enterprise#121503
This change prevents a misleading warning from being logged when automatic OCR is turned off. It reduces noise in the 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. opw-[6232122](https://www.odoo.com/odoo/unassigned-tasks/6232122) Forward-Port-Of: odoo/enterprise#120741
The forecast suggestion pencil button in Master Production Schedule now stays visible when the Forecasted Stock row is hidden. This makes the planning screen behave consistently and prevents the button from disappearing unexpectedly.
Original PR description
Steps to reproduce:
1. Install Manufacturing.
2. Enable 'Master Production Schedule' in the Settings.
3. Go to [Manufacturing -> Planning -> Master Production Schedule].
4. Ensure 'Demand Forecast' and 'Forecasted Stock' rows are enabled from the dropdown.
5. Observe the edit pencil button next to 'Forecasted Demand' is visible.
6. Hide 'Forecasted Stock' using the rows filter dropdown.
Issue:
The edit pencil button ("Suggest Forecasted Demand") next to the 'Forecasted Demand' row disappears when the 'Forecasted Stock' row is hidden.
Expected behavior:
The edit pencil visibility should not be affected by the 'Forecasted Stock' row.
opw-6240596
Forward-Port-Of: odoo/enterprise#121688
Forward-Port-Of: odoo/enterprise#1202089 changes
Resolved issues and error corrections
This fix ensures users see the appropriate success message after completing an event quiz. It improves the post-quiz experience by making the confirmation message match the actual outcome, reducing confusion for participants.
Original PR description
opw-6332274 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#272371
The report editor in Studio now keeps the translation button enabled when editing report sources. This makes it easier for users working in multiple languages to translate report content without the button appearing disabled.
Original PR description
The translate button greys itself when isClickable is false. The report editor reuses that button with its own component and always edits an existing ir.ui.view, so it defines isClickable returning true to stay active. Steps to reproduce: 1. Activate a second language in Settings > Translations > Languages 2. Open any report in Studio and edit its sources with the XML editor => The translate button next to the resource selector looks greyed out Ticket [link](https://www.odoo.com/odoo/project.task/6260427) opw-6260427
When opening a customer from an invoice or similar form, the page title and breadcrumb will now show only the customer name, not the full multiline address. This makes the navigation area much cleaner and easier to read.
Original PR description
- Create a new Invoice; - Assign a Customer with a multiline address; - Click on the internal link (arrow icon) of the Customer field. Before this commit, the form view title and the breadcrumb would contain not only the customer's name but also their full address. This resulted in an excessively large and unreadable breadcrumb. Now, only the name is retained. This commit applies the same behavior already used in many2one fields: the display name is split by line breaks, and only the first line is kept for the title and breadcrumb. task-id 6329662 Forward-Port-Of: odoo/odoo#272059
This fix makes the UNSPSC code 10171500, "Organic fertilizers and plant nutrients," available again in the product accounting list. It matters because users relying on product classification can now find and select the correct code for their products.
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
This update adjusts an automated test for subtasks so it matches the current project behavior. When a project is removed from a child task, the task now follows its parent’s project and is hidden, rather than being treated as an invalid change.
Original PR description
Since 2d22b5c, removing the project on a child task sets the project as the parent's and hides the task. The test was not adapted for this behaviour and still expected the write on the child's project_id to raise a CheckValidation error. opw-6253263 runbot-937760
This update adjusts a failing test for project subtasks so it matches the current behavior of the system. When a project is removed from a child task, the task now follows its parent task’s project instead of triggering an error, which keeps the test suite accurate and stable.
Original PR description
Since 2d22b5c, removing the project on a child task sets the project as the parent's and hides the task. The test was not adapted for this behaviour and still expected the write on the child's project_id to raise a CheckValidation error. opw-6253263 runbot-937760
Currently, an error occurs on an invoice when user selects a payment term and removes the currency. Steps to replicate: - Install account - Turn on multiple currencies - Open invoices. - Create a new invoice - Add a line - Add a customer - Save - Select payment term as `30% Now, Balance 60 Days` - Remove the currency. Error: ``` ValueError: Expected singleton: res.currency() ``` Cause: - This error only occurs when the selected payment term contains at least two due term l
Original PR description
Currently, an error occurs on an invoice when user selects a payment term and removes the currency. Steps to replicate: - Install account - Turn on multiple currencies - Open invoices. - Create a new…
Currently, an error occurs on an invoice when user selects a payment term and removes the currency. Steps to replicate: - Install account - Turn on multiple currencies - Open invoices. - Create a new invoice - Add a line - Add a customer - Save - Select payment term as `30% Now, Balance 60 Days` - Remove the currency. Error: ``` ValueError: Expected singleton: res.currency() ``` Cause: - This error only occurs when the selected payment term contains at least two due term lines [1]. - When the selected payment term has atleast two lines the check [1] assigns `on_balance_line` as false and the `else` block is evaluated where currency being an empty recordset (as the user removed it) causes the error from [line] when trying to perform `round()` on an empty res.currency recordset. Solution: - As the currency is a required field, user will not be able to save the record until a currency is assigned. - Used journal's currency or company's currency as a fallback when computing payment terms if the current currency is empty. [1]: https://github.com/odoo/odoo/blob/177002c0aca95de2de6458bb65bedf5c74541ac0/addons/account/models/account_payment_term.py#L229 [line]: https://github.com/odoo/odoo/blob/177002c0aca95de2de6458bb65bedf5c74541ac0/addons/account/models/account_payment_term.py#L240 sentry-7569922293 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adjusts a test in the Mexican electronic invoicing module to handle a change in payment status when the accounting app is installed. It prevents a false test failure in automated checks, helping keep the release process stable.
Original PR description
If accountant is installed, payment state of unreconciled payment switch from 'paid' to 'in_payment'. Not having accountant break the test. runbot-939445
Documentation and clarification updates
This change adds the contributor’s signed Odoo Individual Contributor License Agreement to the repository. It is an administrative/legal update that confirms the contribution can be accepted under Odoo’s licensing terms.
Original PR description
Signing the Odoo Individual Contributor License Agreement v1.0. Adds `doc/cla/individual/dsonnet.md`. --- I confirm I have read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270526
1 change
Resolved issues and error corrections
This change fixes the message shown to users after they complete an event quiz, so they now see the correct success confirmation. It improves the user experience by making the completion result clear and accurate.
Original PR description
opw-6332274 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#272371