Thursday, April 9, 2026
24 changes · 19.0
Enhancements to existing features
This update streamlines payment status updates by hiding the refresh button when payments are finalized. Previously, the button triggered unnecessary calls to OdooFin, impacting performance. Now, the button is only visible for payments that are actively being processed.
Original PR description
… batches The refresh button was always shown, which could cause unnecessary calls to OdooFin if the payment is finalised (accepted, rejected or canceled). With this change, the button is shown only for payments in progress (pending or unsigned). task-6103900
Resolved issues and error corrections
The setup requirements check has been corrected so it no longer crashes when package versions include labels such as post-release markers. This helps keep installation and deployment checks reliable for supported dependency versions.
Original PR description
This commit fixes a crash in the parse_version() function where it doesn't support non-integer castable version parts (i.e. 5.4.2.post1). Forward-Port-Of: odoo/odoo#257946
Features or functions removed from Odoo
This change removes an obsolete Italian electronic invoicing add-on that was accidentally carried forward into this version. It helps keep the product cleaner and avoids maintaining or exposing a module that should no longer be available.
Original PR description
This commit removes the files of the zombie module `l10n_it_edi_ndd_account_dn` that was added with the forward port of this commit: https://github.com/odoo/odoo/commit/3f85d1032b9784cd15341c0f6d40c13d4146d764 It was removed from saas-18.4+ this PR should remove the zombie module from saas-18.4 till saas-19.1 (included) opw-5930596 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257275
Miscellaneous changes
New POs, repairs, and batch pickings always showed "New" in English for the name of a new (not saved) record. We now make it match the SO logic to show up as translated so as to not confuse users (even though it will automatically change to another name once saved) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258156
Original PR description
New POs, repairs, and batch pickings always showed "New" in English for the name of a new (not saved) record. We now make it match the SO logic to show up as translated so as to not confuse users (even though it will automatically change to another name once saved) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258156
Users now get a clearer message when a snailmail letter cannot be sent because it exceeds the page limit. This helps them understand that the failure is caused by too many pages rather than a generic sending error.
Original PR description
When a user attempted to send a letter with snailmail that had more than 8 pages, sending would fail, and a generic error message is logged on the letter. This commit makes the error message generated in that flow more specific to help users better understand the root cause of sending failure. task-5883011 Forward-Port-Of: odoo/odoo#257867
This fix prevents users from automating a bank reconciliation model when a counterpart line is missing both a partner and an account. It avoids failed reconciliations caused by the system falling back to the bank journal account inappropriately.
Original PR description
**Steps to reproduce:** - Go to Accounting dashboard - From Bank journal, open Reconciliation Models list - Create a new reconciliation model - Add counterpart line without partner and account - Click on "Automate" **Issue:** The operation fails because the default account of the bank journal is used as there is no user and no account configured for the counterpart. Which results on several lines using a liquidity account (i.e. the cause of the error). Either a partner or an account should be set on a counterpart line. opw-6056737 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257923
The Point of Sale product screen now applies consistent styling to the category selector regardless of whether category images are shown. This helps prevent layout inconsistencies and provides a more reliable cashier experience.
Original PR description
Before this commit: ==================== Previously, the `category-list` class was conditionally applied based on `show_category_images`, which caused inconsistent styling and layout issues. After this commit: ======================= This commit ensures that both `product-list` and `category-list` classes are always present, providing consistent rendering of the category selector. Task-6092404 Forward-Port-Of: odoo/odoo#257988 Forward-Port-Of: odoo/odoo#257251
This update restores small typo corrections in an internal test file that were accidentally lost during conflict resolution. It helps keep the codebase's automated checks clear and consistent, with no expected impact on users or day-to-day business operations.
Original PR description
This was partially fixed in another [pr](https://github.com/odoo/odoo/pull/228977) but the fix was lost while solving conflicts. Reintroducing the fix starting from 19.0 since we don't really care about this specific test in eol saas-18.x versions
Delivery slip reports now consistently show the unit of measure for backordered items. This avoids confusion when reviewing partial deliveries and keeps backorder lines aligned with the rest of the delivery report.
Original PR description
**Steps to reproduce:** * Install the **Stock** module with demo data. * Create a delivery with quantity **N** and click **Mark as To Do**. * Set the delivered quantity to less than the demanded…
**Steps to reproduce:**
* Install the **Stock** module with demo data.
* Create a delivery with quantity **N** and click **Mark as To Do**.
* Set the delivered quantity to less than the demanded quantity .
* Validate the delivery, with the creation of a **backorder**.
* Print the **Delivery Slip** report.
**Observed behavior:**
* Backorder lines appear **without units of measure**, while
other lines correctly display their units.
**Cause:**
* The backorder line includes a **group restriction** that hides
the unit unless the *Unit of Measure* setting is enabled.
**Fix:**
* Remove the group restriction so units of measure are
always visible on backorder lines same as others.
<details>
<summary>Click here to see the results:</summary>
Before:
<img src="https://github.com/user-attachments/assets/5f21139a-a4ab-4c39-8b16-3c68c94a163e" />
After:
<img src="https://github.com/user-attachments/assets/dd4de18b-dc2e-4686-8435-30864fe40aa4" />
</details>
---
> NOTE - This fix done after receiving confirmation from PO(dala)
---
opw-5265051
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#257108
Forward-Port-Of: odoo/odoo#238470The Employees app demo onboarding and offboarding activity plans now use the base company instead of being company-less. This makes existing departments available in the department dropdown for single-company setups, avoiding confusion when configuring demo plans.
Original PR description
# How to reproduce - Be in a single company environment - Employees app > Configuration > Activity Plan > Either demo plan (Onboarding or Offboarding) - Try to select a department # The problem The…
# How to reproduce - Be in a single company environment - Employees app > Configuration > Activity Plan > Either demo plan (Onboarding or Offboarding) - Try to select a department # The problem The dropdown is empty even if department exists. This can be check by creating a new plan and trying to assign departments to it. # Cause The demo data for thoses two plan explicitely sets the company_id to false : https://github.com/odoo/odoo/blob/2c14ce9f655a1eea3d7b1cb0e0ce8108cf9da0df/addons/hr/data/hr_data.xml#L21 https://github.com/odoo/odoo/blob/2c14ce9f655a1eea3d7b1cb0e0ce8108cf9da0df/addons/hr/data/hr_data.xml#L48 But the department_id has check_company set to true : https://github.com/odoo/odoo/blob/2c14ce9f655a1eea3d7b1cb0e0ce8108cf9da0df/addons/hr/models/mail_activity_plan.py#L12 # Proposed solution Backport of this commit : https://github.com/odoo/odoo/pull/240167 opw-6058697 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255842
This fix makes automated checks for the HTML editor wait until the editor is fully ready before running. It reduces random test failures in slower environments, helping releases and maintenance workflows stay more reliable.
Original PR description
See individual commits. Forward-Port-Of: odoo/odoo#257948 Forward-Port-Of: odoo/odoo#257620
This fixes a glitch where autocomplete suggestions could briefly appear and then close when a form updated a related field automatically. Users get a smoother experience when selecting fields such as expense categories, with fewer interruptions while entering data.
Original PR description
Before this commit, when the props of the AutoComplete were updated such that the value changed while the dropdown was opened, but the user didn't type anything yet, the dropdown was closed. This could be reproduced in Expenses: - click "New" to create a new expense - set a description - blur the description field by clicking on the category many2one => the autocomplete dropdown briefly opened and closed itself again while the onchange returned, as it set the value of category_id. This commit fixes the issue by never closing the dropdown when the value is changed. Issue reported in the rd-framework-js channel Part of task 5491410
The live chat chatbot restart button is now disabled on the feedback screen if the conversation did not reach its final step. This prevents failed restarts from leaving the live chat session in an error state, improving reliability for website visitors and support teams.
Original PR description
Before this commit, it was possible to restart the chatbot on the feedback panel when closing the chat window. This was actually failing when the chatbot was stopped before the last step was completed and left the livechat state in error. Now, the button is simply disabled on feedback when we did not reach the end of the chatbot to avoid any issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The scheduled update for EU VAT validation data now runs more often, helping keep VIES information fresher. This reduces the chance of delayed validation updates affecting customer or company VAT checks.
Original PR description
task-none
Website editors translating pages will now see the translation status highlight correctly on buttons and badges, even when those elements have their own background color. This makes it easier to spot untranslated or changed content during multilingual website editing.
Original PR description
When buttons (`a.btn` elements) are translated inline, or badges (`span.s_badge`), the background color that shows the status of the translation appears under the background of the button/badge. The…
When buttons (`a.btn` elements) are translated inline, or badges (`span.s_badge`), the background color that shows the status of the translation appears under the background of the button/badge. The status is thus only visible on the surrounding text, and completely invisible when the button is alone (unless it has a transparent background). This commit adds a plugin in translate mode which adds a span with the color of the translation status in the problematic elements if they are inside a translation span and have a background color. Steps to reproduce: - Open website builder - Drop the `s_banner` snippet (or add a button by typing `/button`) - Add a second language - Open in translate mode - Bug: the text of the button does not have the green/yellow highlight that shows the translation state (technically, it is hidden under the background of the button, which you can see if you set a transparent background on the button) `o_translate_inline` on links: - 8fe88de0d5cc61395721cd8bda7b7ef2ea961760 - f65ac79631180e77aca5a53fc557b3e1acfcbd65 - 6aef5ee411656ec400e92fcc2bbd62e420645e0e task-6038029 Forward-Port-Of: odoo/odoo#254000
Odoo now makes sure all Chrome-related background processes are fully stopped before test cleanup continues. This reduces flaky test behavior, lingering web requests, and problems recreating temporary browser folders.
Original PR description
It's not clear when it started to happen (possibly forever), but apparently waiting for the main chrome process to terminate does not ensure all subprocesses are also terminated. Depending how long these subprocesses stick around, this can lead to: - remaining http or websocket requests - the inability to delete or re-creation of the user directory - possibly other confusing situations Update the chrome termination flow to make sure every subprocess is gone before proceeding to the next step. It might be possible to remove the `ignore_cleanup_errors` flag on `TemporaryDirectory`, but I'd rather not take that risk for now, so leaving it in.
The Time Off overview calendar now clearly marks refused requests as crossed out, matching how they appear in other menus. This helps managers and employees quickly distinguish rejected time off from active or approved requests.
Original PR description
Before this commit, the calendar view in Overview menu does not strike the time off refused. The reason is because `is_strike` field is not fetched inside that view. This commit adds the field in the view to make sure the time off refused are striked as it is the case in the other menus. Closes #248868 Forward-Port-Of: odoo/odoo#256723 Forward-Port-Of: odoo/odoo#256579
The Milestones top bar action now opens the same milestone list as other project entry points. This ensures billable projects consistently show sales-related information such as quantity percentage, reducing confusion for users tracking project billing.
Original PR description
Steps to reproduce: - 1. Install the sale_project module. 2. Open a project and ensure it is billable. 3. Compare the view opened from the "Milestones" link in the Kanban view with the view opened from the "Milestones" top bar action. Issue: - The milestone list view opened from the top bar action does not display sales-related fields (e.g., "Quantity (%)"). Cause: - The Kanban view calls the `action_get_list_view` python method, which is overridden in sale_project to add a custom list view including sales-related fields. The top bar action was using a static XML action, bypassing this python logic. Fix: - Update the Milestones embedded actions to call the `action_get_list_view` python method instead of using a static XML action, ensuring top bar uses the same view as others. task-5993183 Forward-Port-Of: odoo/odoo#258149 Forward-Port-Of: odoo/odoo#254102
Website builder catalog snippets now keep their preview content visible and properly sized. This helps users choose and reuse dynamic category snippets without seeing missing or oversized preview items.
Original PR description
### [FIX] website_sale: keep preview data of dynamic category snippet Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe loads the interaction for dynamic category snippet to show its dynamic content in…
### [FIX] website_sale: keep preview data of dynamic category snippet Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe loads the interaction for dynamic category snippet to show its dynamic content in snippet preview dialog. Commit 5cd8ba3b5abcad5a119bb879a9892e0bcfe27d9f changed the condition to avoid replacing the preview data. The dynamic category snippet's preview data does not have the class `s_dialog_preview` to mark them as preview data. Thus the interaction was started and cleared the content (but could not fill it as the snippet does not have a valid configuration yet). This commit uses a `html_builder.snippetsPreprocessor` to add the class on the preview data of that specific snippet in the loaded snippets. Steps to reproduce: - Open website builder - Click on "Catalog" snippets category - Bug: the dynamic snippet containing categories is missing its preview data part task-6088029 ### [FIX] website_sale: scale down height of dynamic category snippet's item Commit 08c41255d70ccbb35eff20e0a12671ffdfba3dfe enables preview of custom dynamic category snippets. But the height of the item is not adapted to the downscaling of the iframe. Thus they looked 3 times too tall. This commits adds a patch to the interaction when loaded in this context to adapt the computed value for the height. Steps to reproduce: - Open website builder - Click on "Catalog" snippets category - Add the dynamic category snippet - Select the added snippet - Save this snippet as a custom snippet - Click on "Custom" snippets category - Bug: the items int the snippet looks way too big task-6088029
This fix gives payment term line lists more space so columns remain stable after changing languages. It prevents distracting shrinking or flickering when users click into those lines, improving the form's usability.
Original PR description
Previously, after a language switch, text gets longer inside cell. On clicking/focusing `o_cell_custom` the widths were recomputed and the list shrinks/flickers. In this commit `colspan='2'` is set on `line_ids` to give the x2many list more horizontal space. This avoids column shrinking/flickering. Task-5189713 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where closing an Odoo session was prevented if the order's user information was incomplete during a specific export process (DSFinV-K). The change ensures that a fallback user ID is used, allowing sessions to be closed correctly and preventing disruptions to business operations. This improves session management reliability.
Original PR description
Before this commit, closing a session was blocked if an order was missing the user_id field during DSFinV-K export generation. opw-6067382 Forward-Port-Of: odoo/enterprise#112119
This update resolves a problem where payments related to EPD (early payment discount) bills weren't correctly updating their status. The fix ensures payments are accurately marked as 'paid' after reconciliation, improving the accuracy of financial reporting. This prevents discrepancies in payment tracking.
Original PR description
Steps to reproduce: - Create an early payment term. - Create a Vendor Bill with EPD and post it. - Register a payment for this bill (no outstanding account set on journal => no move created). - Create a bank transaction fully paying the bill. - Reconcile the transaction with the bill. Issue: Access the payment of the bill. The payment state remains 'in_process' instead of 'paid'. Fix in community: https://github.com/odoo/odoo/pull/256486 opw-5881976 Forward-Port-Of: odoo/enterprise#112398
This update fixes a problem where unclear error messages were displayed when the SendCloud delivery service encountered issues. The change adds a helpful hint message to guide users in resolving these problems, improving the overall user experience. This ensures smoother delivery processes and reduces potential delays.
Original PR description
Add hint with error message. ----- Ticket: opw-6072855 Forward-Port-Of: odoo/enterprise#112463