Tuesday, February 10, 2026
29 changes · 19.0
Enhancements to existing features
Expense card payment refusals now include more detail about the information used to reject a transaction, such as the vendor country. This helps employees and finance teams understand why a payment was blocked when the merchant location differs from expectations.
Original PR description
Description of the issue/feature this PR addresses: A company in belgium creates a card, it's "allowed countries" is set to Belgium by default. If said card is used to pay online on a website ending with .be, it is understandable that the user believes the vendor to be located in Belgium If it is not the case (the vendor is actually in Luxembourg), the payment is refused but the message on the refused expense is unclear "Country not allowed" The change adds the data received to make the decision in the error message --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
The keyboard shortcut shown for creating a new task in Project has been corrected so it no longer conflicts with the priority shortcut. This prevents users from accidentally changing task priority when they intend to create a new task.
Original PR description
Steps to Reproduce: - - Open Project → Tasks. - Press Alt key to view shortcut hints. - New button control show Alt+R. - Pressing Alt+R triggers priority change instead of creating a new record. Issue: - Pressing the shortcut displayed on the New button (Alt+R) does not create a new task but instead changes the task priority. Cause: - The New button and the Priority widget share the same shortcut (Alt+R), causing the wrong action to trigger. Solution: - Changed the shortcut for the New button from Alt+R to Alt+C to avoid conflict and ensure correct behavior. task-5270075 Forward-Port-Of: odoo/odoo#237555
The Project app now uses a different keyboard shortcut for the New button so it no longer conflicts with the Share button. This prevents users from accidentally triggering the wrong action when using keyboard shortcuts in a project.
Original PR description
Steps to Reproduce: - - Go to Project → open any project. - Press Alt key to display shortcut hints. - Both New and Share buttons show the same shortcut. Issue: - The New button and the Share Project button use the same shortcut, leading to a conflict. Cause: - The New button and the Share Project button share the same shortcut (Alt+R) causing the wrong action to trigger. Solution: - Changed the shortcut for the New button from Alt+R to Alt+C to avoid conflict and ensure correct behavior. task-5270075 Forward-Port-Of: odoo/odoo#237694
This fix keeps the mocked clock used in Point of Sale automated tours active even when a page reloads. It helps prevent date-based test data from disappearing during test runs, improving reliability without changing normal user behavior.
Original PR description
Mocking time in tours via `freezeDateTime` is lost when the page reloads , causing date-filtered data to disappear and tests to fail. Introduce `withTimeFreeze(millis, steps)`, which persists the mock timestamp in `sessionStorage`. POS now checks this storage on module load to automatically re-apply the freeze, ensuring the clock survives refreshes while handling cleanup after the steps finish. runbot-232601 Related Enterprise PR: odoo/enterprise#106724 Forward-Port-Of: odoo/odoo#247596
The Indian TDS report now displays TDS amounts as positive values instead of incorrectly showing them as negative. This helps businesses read withholding tax totals accurately and reduces confusion during reporting and compliance checks.
Original PR description
ref commit-https://github.com/odoo/odoo/commit/17a6117ed88c29b5bc4db0c872bcdbc109a7d98b The TDS report was incorrectly showing amounts as negative. This PR, adjusts the sign handling so that the amounts are displayed as positive, ensuring the report reflects the correct TDS values. task-5894372
This fix makes automated checks for Malaysian and Taiwanese electronic invoicing more reliable by explicitly setting the expected taxes on test invoices. It reduces false test failures and helps ensure future updates can be validated with greater confidence.
Original PR description
[FIX] l10n_my_edi: more precise tests Improve reliability of Malaysian EDI module which work with xml files and bills by ensuring that we precise the tax we expect to see in the file when creating the invoice. issue-[237946](https://runbot.odoo.com/odoo/runbot.build.error/237946) related-odoo/odoo#227111 --- [FIX] l10n_tw_edi_ecpay: flaky tests not applying default taxes Improve reliability of Taiwanese EDI module by explicitly declaring taxes on invoice creation. We do this instead of relying on the default taxes to apply as they've caused flaky tests to fail. issue-[238485](https://runbot.odoo.com/odoo/runbot.build.error/238485) related-odoo/odoo#227111 --- runbot-[437842](https://runbot.odoo.com/runbot/bundle/master-l10n-my-edi-fix-tax-tests-437842)
This fix prevents the Manufacturing resupply option from turning itself back on after a warehouse manager disables it. Businesses can now rely on their warehouse routing settings to remain as configured, avoiding unintended manufacturing replenishment flows.
Original PR description
**Steps to produce:** - Install `mrp` with demo data. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. -…
**Steps to produce:** - Install `mrp` with demo data. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. - Open `YourCompany` record. - Click on Routes > open `Manufacture` > enable `Products`. - Return to `YourCompany` and disable `Manufacture to Resupply`. **Issue:** - After disabling `Manufacture to Resupply`, the option is automatically re-enabled. **Root cause:** - In [1], `manufacture_to_resupply` is set to true if either `manufacture_route.product_selectable` is true OR the current warehouse is included in `manufacture_route.warehouse_ids`. - In the `_inverse_manufacture_to_resupply` method, unchecking the flag only unlinks the warehouse from the route. However, if `product_selectable` is still enabled, the compute logic will continue to set the field back to true. **Solution:** - Now, when we uncheck `manufacture_to_resupply` then also made manufacture route non-selectable on products. As a result, manufacture_to_resupply will no longer be set to true again. [1]https://github.com/odoo/odoo/blob/4f5594a911c1960f620d902d507e563cdab167b9/addons/mrp/models/stock_warehouse.py#L48 opw-5383719 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where marketing card links did not provide their description to web crawlers, leaving link previews without the expected text. This helps shared campaign links display more complete and accurate preview information on social platforms and messaging apps.
Original PR description
**Current Behavior:** description is not available for the Crowler <img width="1159" height="802" alt="image" src="https://github.com/user-attachments/assets/2979f413-6487-4f44-993c-b9a806e0d0ef" />…
**Current Behavior:** description is not available for the Crowler <img width="1159" height="802" alt="image" src="https://github.com/user-attachments/assets/2979f413-6487-4f44-993c-b9a806e0d0ef" /> **Steps to reproduce:** 1. Install `marketing_card` 2. Create a card campaign 3. Set Recipient, Post Link and Post Suggestion 4. Save and Preview 5. Copy the URL and replace `preview` with `redirect` 6. To reproduce in locale, in the `contoller` make the marketing_card.card_campaign_crawler template the only return 7. Now paste that URL in the browser **Issue** - The `<meta property="og:description">` tag is empty in inspect. It does not contain any content **Cause:** - The controller `card_campaign_redirect` passes the campaign's suggestion text to the view using the key `post_text`. However, the template `card_campaign_crawler` attempts to access `post_suggestion`, which is not present in the rendering context. **Solution:** - Update the controller to pass `post_suggestion` opw-5351041 Forward-Port-Of: odoo/odoo#238534
This fixes an issue in Email Marketing where the color picker for custom links could appear behind the link settings popover and become unusable. The picker now opens on top, making it possible to change link text and fill colors reliably.
Original PR description
Problem: In Email Marketing, the color picker for custom links is hidden under the link popover, making it unusable. Cause: Overlays added in mass mailing use a default sequence of 1050, while the color picker uses the default sequence (50). As a result, the link popover overlays the color picker. Solution: Force the color picker sequence to 1051 (mass mailing default + 1) so it always appears above other overlays, including the link popover. Steps to reproduce: - Open Email Marketing. - Add a link. - Change its type to custom to enable text and fill color options. - Open the color picker to change the text color. - Observe that the color picker is hidden by the link popover. opw-5866997 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes sales invoice creation more stable when businesses use third-party sales customizations. It prevents avoidable errors during invoicing by handling invoice line ordering in a more compatible way, reducing disruption for users.
Original PR description
This commit acts as a robustness fix for _create_invoices. It explicitly handles the 'sequence' argument by assigning it to the result dictionary after the _prepare_invoice_line call. This prevents TypeErrors when third-party modules override _prepare_invoice_line without accepting **kwargs, ensuring greater compatibility and stability. 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
The store pickup checkout dialog now correctly displays locations that are open for a full day. This helps shoppers choose pickup locations with accurate opening-hour information and avoids confusion during checkout.
Original PR description
## Versions 19.0+ ## Issue The website's pick-up in store dialog doesn't show up full opening days. ## Steps to reproduce *Ensure "Click & Collect" is enabled in the Settings* - Go to "Delivery…
## Versions
19.0+
## Issue
The website's pick-up in store dialog doesn't show up full opening days.
## Steps to reproduce
*Ensure "Click & Collect" is enabled in the Settings*
- Go to "Delivery Methods" and edit "Pick up in store":
- Click on the warehouse under the "Stores" tab:
- Change the "Opening Hours" values (set one if needed) by clicking on the internal link:
- Under the "Working Hours" tab, change or add a line with its "Day Period" set to "Full Day" and save.
- Save.
- Ensure the method is "Published".
- Go to the website's shop:
- Look for a product that can be retrieved from the store (e.g. "Chair floor protection");
- Go to checkout and fill forms in until you arrive on the delivery form where you can select a store location:
- Select the warehouse you changed:
- Check the opening hours not displaying the full day's data.
## Cause
`full_day` has been introduced in the calendar via commit 77f860f5d3757e5a56861ac1de95b9ad29ea0dff but its retrieval in `website_sale_collect` was skipped du to `day_period` restrictions. These restrictions exist because we don't want to consider breaks in the opening hours
opw-5904377The copy button now behaves correctly when placed inside forms by preventing it from triggering form submission. This avoids accidental form actions and ensures users can reliably copy content in more contexts.
Original PR description
Previously, the type of the button in the template of the CopyButton utility component was left unspecified. Because the default type for buttons is "submit", the copy button will not work if it is placed within a `<form>` element, and will instead submit the form (see [1]). This commit just forces the type of the button to "button" which has no default behavior, meaning it can be used even inside of `<form>` elements without issues. [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type Forward-Port-Of: odoo/odoo#247754
The Italian localization now uses the correct tax exemption code for 0% EU service transactions. This helps businesses issue compliant electronic invoices by distinguishing services from goods as required by Italian tax rules.
Original PR description
In Italy, the code depends strictly on whether the transaction is for Goods or Services. N3.2 is for Intra-community supply of GOODS (Cessioni Intracomunitarie di beni) N2.1 is for Intra-community supply of SERVICES (Prestazioni di Servizi) This commit fixes the exoneration code on the 0% EU S tax from N3.2 to N2.1. task-5870894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247755 Forward-Port-Of: odoo/odoo#245675
Users can now middle-click web link fields inside related record lists without accidentally opening the record popup. This makes link navigation less disruptive and aligns middle-click behavior with normal clicks.
Original PR description
This commit fixes the obtrusive opening of the record's modal when middle clicking on a x2many's url field, in a form view. It applies the same logic as the one used for regular click (letting the url be opened, but not the modal). Note: originally spotted in the Runbot build error's form view (Builds page or Error content...). _Note to reviewers : doesn't look to apply to small screens, but not sure why... Feedback requested :pray:_
This fix restores the correct navigation behavior when users open linked projects from a sales order after migrating from older Odoo versions. It ensures breadcrumbs remain visible, so users can easily trace their path and return to the sales order context.
Original PR description
Steps to reproduce: 1. Create a db with having 'sale' & 'project' installed in version 16. 2. Create a sale order having linkage to more than single project. 3. Migrate the db to version 19. 4. When…
Steps to reproduce:
1. Create a db with having 'sale' & 'project' installed in version 16.
2. Create a sale order having linkage to more than single project.
3. Migrate the db to version 19.
4. When clicking on the project stat button the breadcrumb traceability will not be there.
Issue:
-> In v16.4 the target defined for the action `project.open_view_project_all` is removed from [here](odoo/odoo@a92d686)
When migrating a database from v16 to v19 and opening projects from a sale order linked to multiple projects, the stat button triggers `action_view_project_ids`, which in turn calls
`project.open_view_project_all` for records having len('projects_ids') > 1 from [here]
(https://github.com/odoo/odoo/blame/19.0/addons/sale_project/models/sale_order.py#L220) Because the persisted target is `main`, breadcrumb traceability will be lost. The issue will arise in the DBs coming from version 16 or lesser. Therefore, it would be necessary to address this immediately and set correct target for window_action for databases >= v17
This commit explicitly sets the action target to `current` to restore proper breadcrumb behavior and align it with standard odoo record.
OPW-5448916
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#244245This fixes an issue where messages sent from the full composer could show multiple “Read More” expanders for the same user signature. It keeps email chatter cleaner and avoids confusion when signatures have been edited with formatting changes.
Original PR description
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text -…
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text - Save the changes - Refresh - Remove the bold formatting - Press enter between the two lines (at the end of `--`) - Save the changes - Go to the Contact app - Select any record - Go to its chatter - Click on `Send Message` and then the `Full Composer` expand button - Send the mail - In the chatter multiple `Read More` are added for the same signature (I think it can appears in multiple operations, this is just an example related to the `<strong>` element becoming `<span>` on removal) **Issue:** Playing with the html editor on the signature field can break the `tag_quote` flow due to the added elements. **Fix:** Explicitly add `"data-o-mail-quote"` to the signature container which is added when opening the `fullComposer`. It could also be an issue related to the html_editor but this seems cleaner to fix it here. This issue was fixed in 19.0 in a similar way by adding a common div around the signature and adding the same attribute. related: https://github.com/odoo/odoo/commit/6eb55c42158b08652c4c533bf56b5333c162bd3a opw-5149505 Forward-Port-Of: odoo/odoo#247274 Forward-Port-Of: odoo/odoo#231954
Updates the Discuss video call support component to the latest bundled version. This should help keep group call behavior aligned with the maintained SFU release and improve reliability without changing the user workflow.
Original PR description
https://github.com/odoo/sfu/releases/tag/v1.3.3 Forward-Port-Of: odoo/odoo#246979 Forward-Port-Of: odoo/odoo#244971
This fixes an issue where editor action buttons could appear even when the user's cursor or selection was outside the editable content. The buttons now follow the actual document selection and update their position when collapsible content changes layout, making editing behavior more predictable.
Original PR description
Description of the issue this PR addresses: Powerbuttons were previously relying on the editable selection to decide whether they should be shown. However, this also displayed powerbutton when selection was not in editable. Powerbuttons now uses the document selection, ensuring powerbuttons only appear when the selection is actually inside the relevant elements. task-5240942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A Point of Sale test was updated so refund orders are correctly identified as refunds. This prevents an accounting document mismatch during automated validation, helping keep release checks stable.
Original PR description
TASK: [#5897377](https://www.odoo.com/odoo/project/1737/tasks/5897377) --- The test `point_of_sale:TestPointOfSaleFlow.test_pos_order_refund_ship_delay_totalcost` was failing with the following error: > You cannot use a credit_note document type with an invoice. This issue occurred because the refund order was not marked as a refund. As a result, the `account.move` `move_type` was set to `out_invoice` instead of `out_refund`. Since 19.0, following the change introduced in [odoo/229683](https://github.com/odoo/odoo/pull/229683/files#diff-29cbaebb5b63b539ab173d9340b2aec87b9ad63cd322eec2347879c5412bd50bR850), the `move_type` is no longer determined based on the `pos.order` `amount_total`, but on its `is_refund` field. This field was missing in the test, causing the incorrect behavior.
The PDF file check now accepts valid PDF type labels that include extra details, such as encoding information. This prevents legitimate PDF files from being rejected unnecessarily, improving reliability for users handling documents.
Original PR description
The mimetype check was too strict and rejected values like `application/pdf;base64`. This change fixes the issue by only verifying that the mimetype starts with `application/pdf`, ignoring any additional parameters. runbot-231598
The point of sale printer test buttons now use the same local network access setting as the rest of the POS printing flow. This keeps printer testing consistent with store configuration and helps avoid failed or misleading test results.
Original PR description
Ensure the printer and preparation printer Test buttons use LNA when triggered, aligning behavior with `point_of_sale.use_lna` configuration. Task-5886700 Related: https://github.com/odoo/enterprise/pull/106594
The e-invoicing process now records account numbers when they are encountered instead of trying to recreate or reactivate them automatically. This prevents unnecessary account changes and gives users clearer information for follow-up when importing or processing electronic invoices.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247693
This update automatically generates unique employee identification numbers and sets the initial marital status to a person's birthday if they are single. This simplifies data entry and reduces potential errors, ensuring more accurate payroll calculations for Swiss employees.
Original PR description
For quality of life improvement, the unique employee identification is now automatically generated and initial marital status date is set to the birthday by default if the person is single Forward-Port-Of: odoo/enterprise#106752
This update resolves a test failure within the l10n_uy_edi module due to a recent method extension. The commit simply adds the necessary update to the test suite, ensuring it correctly reflects the new functionality. This ensures the module continues to function as expected.
Original PR description
The PR odoo/odoo#244443 introduces a new extension to the method _is_downpayment hence the test fails since it is not patched. This commit adds the new extension to the patched list. task-5135918 Forward-Port-Of: odoo/enterprise#106022 Forward-Port-Of: odoo/enterprise#105165
This update simplifies the salary simulation process by hiding temporary offers from the user interface. These offers are automatically removed after a month by a scheduled task, but previously their presence caused confusion. This change improves the user experience by removing unnecessary information.
Original PR description
The salary simulator creates temporary offers to compute salary configurations. These offers must still exist for backend computations, as the configurator relies on them when updating results. Simulation offers are already cleaned up by a cron job after one month, so this change simply hides them from the list view to avoid user confusion. task: 5498873
This update fixes a user interface issue where the 'Some required fields are not filled' warning appeared twice when the salary configurator form was submitted with empty required fields. The fix removes redundant validation and clears existing warnings to ensure a cleaner user experience. This improves usability and prevents confusion.
Original PR description
On submitting the salary configurator form, keeping the required fields empty, the warning “Some required fields are not filled” is displayed twice. [Steps to reproduce](https://drive.google.com/file/d/1bKeXhtXN5nY5pdVYhPiau7pDwGnrzgg4/view?usp=sharing) ## Root cause The same warning message was added for radio field validation, causing duplicate alerts to appear. ## Fix Removed the radio validation and centralized with other fields validations. ## Additionally Remove existing alerts to prevent stacking of warnings on multiple clicks on button. task-[5113853](https://www.odoo.com/odoo/project/1251/tasks/5113853)
This update resolves an issue where accents in legal names were being incorrectly removed, preventing proper recognition by Mexican tax authorities (SAT). The fix restores the correct handling of accented characters, ensuring accurate data submission for Mexican e-invoices. This ensures compliance with Mexican tax regulations.
Original PR description
Previus commit (odoo#95207) removed accents for names including character ë which indeed its recognized for SAT opw-5897333 Forward-Port-Of: odoo/enterprise#106557
This update ensures that the IoT printer 'Test' buttons now correctly align with the system's 'use_lna' configuration setting. Previously, this button's behavior was inconsistent. This change improves the reliability and predictability of the printer test functionality.
Original PR description
Ensure the IoT printer Test buttons use LNA when triggered, aligning behavior with `point_of_sale.use_lna` configuration. Task-5886700 Related: https://github.com/odoo/odoo/pull/246446
This update corrects a previous issue where the payslip report displayed the company's working schedule instead of the employee's. The report has been updated to accurately reflect the employee's individual working schedule, ensuring payroll reports are more accurate and relevant.
Original PR description
-The display for working schedule info in the payslip report was referring to the company's working schedule. -The report has been adjusted to include the employee's working schedule. -Task #5900303