Friday, February 20, 2026
21 changes · saas-19.2
New functionality added to Odoo
This update introduces support for JoFotara's Point of Sale system within Odoo. It allows for the generation of UBL invoices and credit notes directly from PoS orders, streamlining the invoicing process for JoFotara users. This enhancement ensures compatibility with their existing system and improves data exchange.
Original PR description
This commit adds support to JoFotara for pos.order model. task-4213323 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248269 Forward-Port-Of: odoo/odoo#243844
Enhancements to existing features
This update introduces a new feature that allows users to directly update the original Odoo records with information entered during the signing process. The system intelligently handles different data types and formatting issues, ensuring data integrity and preventing loss of information. This improves the accuracy and efficiency of document management.
Original PR description
Add an "Update values in Odoo" option that allows values entered during the signing process to update the original Odoo records. The sync process handles different data types and potential input issues. It parses localized date formats, formats text for HTML fields, and prevents data loss by ignoring blank fields or conflicting inputs if the document has duplicate fields. task-5951903
Resolved issues and error corrections
This update resolves a potential issue where global invoices from the POS system in Mexico could fail to send correctly, leading to duplicate documents being submitted to the SAT portal. Increasing the timeout for communication with the SW sapien system helps ensure invoices are reliably transmitted, preventing errors and maintaining compliance. This improves the overall stability of the Odoo Enterprise system for Mexican businesses.
Original PR description
**Fix:** Increase the read timeout for POST requests to SW sapien PAC. It may prevent timeout issue when sending a global invoice from the POS with a lot of POS orders that could lead to duplicated documents on the SAT portal when retrying to send the global invoice again. opw-5347962 Forward-Port-Of: odoo/enterprise#107735
This update aligns the red counter and unread badge in conversations with notification settings, providing a clearer visual indication of unread messages. Users can now see if they've been mentioned in all messages, only mentions, or if there are no unread messages based on their notification preferences. This ensures a more intuitive and consistent experience for managing conversations.
Original PR description
Backport of https://github.com/odoo/odoo/pull/243218 This commit aligns the red counter and unread badge (bold) with notification settings. - All Messages: Red counter for mentions, unread badge (bold) for all messages - Mentions Only: Red counter and unread badge (bold) for mentions only - Nothing: No red counter, unread badge (bold) for all messages - Mute: Channels and groups are downgraded to "Mentions Only", with push notifications for mentions This ensures consistent and clear unread indicators across conversations. Task-5418490
This update resolves an issue where Odoo was incorrectly including an UETR tag in ISO 20022 payment files, causing rejection by strict banks. The fix ensures compliance with SEPA regulations, preventing errors and guaranteeing successful payment processing for our European customers. This improves compatibility with major banking systems.
Original PR description
In Odoo 18.0, when a user selects the pain.001.001.09 format (ISO 20022), Odoo systematically includes the <UETR> (Unique End-to-end Transaction Reference) tag for every transaction. While valid under the general ISO 20022 XML schema, the <UETR> tag is not authorized by the EPC (European Payments Council) within the standard SEPA Credit Transfer (SCT) Rulebook. Strict banks (e.g., UBS, German banks) reject the entire file with errors such as: "No child element is expected at this point" when an UETR is detected in a domestic or intra-SEPA flow. Task: 5871528 Forward-Port-Of: odoo/enterprise#107869 Forward-Port-Of: odoo/enterprise#105518
This update fixes a problem preventing wage statements in Switzerland (l10n_ch_hr_payroll) from being correctly sent out. The fix ensures accurate generation and delivery of these important financial documents, complying with Swiss regulations. This resolves a potential delay in reporting payroll information.
Original PR description
Forward-Port-Of: odoo/enterprise#107837 Forward-Port-Of: odoo/enterprise#107827
This update corrects a bug in the Belgian company structure type calculations. Previously, the system incorrectly calculated the amount of meal vouchers and private car benefits on payslips. This fix ensures accurate reporting of these benefits, resolving a potential discrepancy in payroll data.
This update improves the odoo spreadsheet component by compressing data for faster loading and smaller file sizes. It also addresses issues with chart backgrounds and table auto-extension, enhancing the spreadsheet's performance and usability. This ensures a smoother experience for users working with spreadsheets within Odoo.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd2d994f5a [REL] 19.2.0 [](https://www.odoo.com/odoo/2328/tasks/)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd2d994f5a [REL] 19.2.0 [](https://www.odoo.com/odoo/2328/tasks/) https://github.com/odoo/o-spreadsheet/commit/5f0c837502 [REL] 19.2.0-alpha.9 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/bb4353b04b [IMP] export: reduce JSON size [Task: 5489478](https://www.odoo.com/odoo/2328/tasks/5489478) https://github.com/odoo/o-spreadsheet/commit/63a47b4005 [REF] cells: remove content from formula cells [Task: 5489478](https://www.odoo.com/odoo/2328/tasks/5489478) https://github.com/odoo/o-spreadsheet/commit/b9c86c5039 [REF] introduce CompiledFormula [Task: 5489478](https://www.odoo.com/odoo/2328/tasks/5489478) https://github.com/odoo/o-spreadsheet/commit/832a1cbbb8 [FIX] charts: chart have wrong background at copy/download [Task: 5925821](https://www.odoo.com/odoo/2328/tasks/5925821) https://github.com/odoo/o-spreadsheet/commit/734466abf0 [FIX] tables: avoid auto-extend on pivot formulas [Task: 5905874](https://www.odoo.com/odoo/2328/tasks/5905874) https://github.com/odoo/o-spreadsheet/commit/5d43c36551 [FIX] dynamic_tables: ignore dynamic pivot table inside static table [Task: 5905874](https://www.odoo.com/odoo/2328/tasks/5905874) https://github.com/odoo/o-spreadsheet/commit/4cb0fccd81 [FIX] dynamic_tables: enable total row style only when total is visible [Task: 5920830](https://www.odoo.com/odoo/2328/tasks/5920830) https://github.com/odoo/o-spreadsheet/commit/38bf6f006e [IMP] icons: add and uniformize some icons [Task: 5797703](https://www.odoo.com/odoo/2328/tasks/5797703) https://github.com/odoo/o-spreadsheet/commit/d263f13077 [FIX] topbar menu: fix formulas order in "insert formula" menu [Task: 5797703](https://www.odoo.com/odoo/2328/tasks/5797703) https://github.com/odoo/o-spreadsheet/commit/71bf1333b5 [IMP] formulas: move FORMAT_LARGE_NUMBER to text module [Task: 5797703](https://www.odoo.com/odoo/2328/tasks/5797703) https://github.com/odoo/o-spreadsheet/commit/be8f08f81b [FIX] tests: do not dispatch `UDPATE_CELL_POSITION` in monkey party [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/35a328913e [IMP] index: export Select component [Task: 5048552](https://www.odoo.com/odoo/2328/tasks/5048552) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update resolves an issue where upgrade processes incorrectly delayed constraint definitions, leading to failures. The change ensures that the latest constraint definition is always applied, particularly when modules are loaded in a different order. This improves the stability and reliability of Odoo upgrades.
Original PR description
Current issue: Module A fails to add constraint X with definition D1 -> (X,D1) is delayed Module B loaded after A, overrides constraint X to D2 and also fails to add the constraint -> still (X,D1) are in the delayed queue, instead of (X,D2) In this patch we ensure the delayed constraint gets the latest definition (D2) This issue affects upgrades. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249495
This update optimizes how Odoo retrieves related data, specifically when fetching multiple records at once. The change reduces the potential for performance slowdowns by preventing data duplication and improving efficiency in complex data relationships. This results in faster data retrieval, particularly when dealing with large datasets.
Original PR description
Various improvements to avoid non-linear growth of returned values when iterating over prefetches. Traversing a relational field introduces a duplication factor in the returned values. `records |=…
Various improvements to avoid non-linear growth of returned values when iterating over prefetches. Traversing a relational field introduces a duplication factor in the returned values. `records |= more` is syntactic sugar for `records = records | more`, which does not modify the recordset in place but makes one from scratch. Therefore the time complexity is not `O(len(more))` but `O(len(records) + len(more))`, which is what makes it quadratic when used in a loop. Since refactor in https://github.com/odoo/odoo/pull/229057, this quadratic complexity is introduced in the prefetching, too. Changes: - Keep same prefetch when accessing a single key as when iterating over a recordset. Small gain and more consistent results. - When iterating over prefetches, deduplicate at source. Without this, the overhead of the generator can be huge for each returned value, since the same value might be returned many times. In less trivial cases (like traversing two relational fields and making unions with it), the time speedup is several orders of magnitude. Forward-Port-Of: odoo/odoo#248770
This update prevents discounts applied to recurring subscription lines from being unexpectedly removed when an upsell is added to the order. Previously, confirming an upsell would reset the discount, causing revenue discrepancies. This change ensures accurate discount calculations and prevents financial errors during upsell transactions.
Original PR description
Before this commit, the discount of recurring lines in a sub would be reset in the following case: 1) create a sub, add a discount on recurring line 2) invoice the sub 3) create an upsell, add quanitty on the recurring product, change the start date of the upsell to trigger computation 4) confirm the upsell The discount of the parent order was reset. task-5886270 Forward-Port-Of: odoo/enterprise#105750
This update fixes a discrepancy in accounting calculations within the Point of Sale (POS) for Mexican tax reporting (l10n_mx_edi_pos). Previously, the POS wasn't correctly loading necessary data, leading to inaccurate amounts. This change ensures that POS transactions align with the calculations performed in Python, improving financial accuracy.
Original PR description
Before this commit, the needed assets were not correctly loaded in the POS, which caused the amounts to be different from the ones computed in python. opw-5935191 Forward-Port-Of: odoo/enterprise#107657
This update fixes a problem where orders wouldn't sync correctly after a terminal payment and an online payment were added and then removed. Previously, the server would remove the terminal payment even if it was still visible in the user interface. Now, only online payments are deleted, ensuring accurate order synchronization and a consistent view across the system.
Original PR description
Before this commit, if an order had a terminal payment and an online payment was added accidentally, and then get removed, the terminal payment would get removed from server, while it won't be removed from the UI, resulting in a mismatch between the server and the UI, and the order would no be synced correctly. opw-5911699 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248430
This update resolves an issue where Peppol invoices were incorrectly using the wrong company context, leading to errors and inconsistencies when processing invoices across different companies. The fix ensures that invoices are processed with the correct company's information, preventing data mismatches and improving data accuracy for cross-company transactions.
Original PR description
Currently, the created move does not always use the company context of the related move/proxy user. As a result, default values may be taken from another company, which can lead to cross-company inconsistencies and access errors. Steps to reproduce: - Set up two companies, A and B - In company A, configure a default value for the partner.company_id field, applicable only to company A - When a Peppol invoice arrives for company B but is processed using the context of company A, and a new partner must be created, the partner is created with company A as the default value - This results in an incompatible companies on record error This fix ensures that the company context of the move or EDI user is used when creating the move, preventing cross-company issues. opw-5473233 Forward-Port-Of: odoo/odoo#249409 Forward-Port-Of: odoo/odoo#249059
A recent update allowed users to confirm dialogs with CTRL+Enter, but this also caused floors to be created twice. This fix prevents the double confirmation by stopping the event propagation, ensuring data integrity and preventing unintended duplicate entries in the restaurant floor management.
Original PR description
For the `TextInputPopup` component a feature was introduced in 2f5c5c15644412cfb6493c661b2f1b927c8cc7e2 that allows the user to confirm the popup by simply clicking enter. The problem is that the dialog itself has a hotkey on "CTRL+Enter" that will also confirm the popup. This means that if a user uses the "CTRL+Enter" hotkey, the popup will be confirmed twice. Steps to reproduce: 1. In restaurant, click the button to add a new floor 2. Write a name for the floor 3. Click "CTRL+Enter" 4. Observe that 2 floors with the given name were created instead of one. The fix: We stop the propagation of the event Task: 4698289 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212134
This update ensures that when creating transactions (like expenses), the correct company account is used, regardless of the user's main company selection. Previously, transactions were linked to the user's default company, even when processing transactions for a different company. This fix improves data accuracy and consistency across company transactions.
Original PR description
The aim of this commit is to ensure the account select through product is related to the correct company. (ie. the one related to the processed model) Before this commit: If a user has company_a selected as the main company in the company switcher and create an expense for company_b, the account selected from the product will be an account from company_a. (because product is shared between company but the account properties on those are company dependent) This could also happens in other places so we fixed it. After this commit: The account selected from the product will be from the company set on the model. task-4699717 Forward-Port-Of: odoo/odoo#249194 Forward-Port-Of: odoo/odoo#209144
This update resolves an issue where changes made to email marketing records were not being saved when switching between form tabs. The fix ensures that the last edits to the email body are correctly preserved, improving the user experience and preventing data loss. This enhancement provides greater reliability for email marketing campaigns.
Original PR description
Problem: While editing an email marketing record, switching tabs in the form view causes the last changes in the editor to be lost. Cause: The `blur` event on the iframe is not triggered when clicking outside of it. If the iframe is not fully ready when listeners are attached, the required events are not properly registered, so the latest changes are not saved before switching tabs. Solution: Attach the `blur` listener only once the iframe is fully loaded, ensuring that changes are correctly detected and saved when focus is lost. Steps to reproduce: - Create a new email marketing record. - Add a text snippet. - Change the text and save. - Modify the text again. - Switch to another tab in the form view, then return to the "Mail body" tab. - Observe that the last changes are lost. opw-5921800 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248974
This update resolves a technical issue within the Lu payroll module that was causing incorrect calculations for employee pay. The fix ensures accurate payroll processing, maintaining the integrity of financial data. This change primarily impacts payroll reporting and employee compensation.
Original PR description
Forward-Port-Of: odoo/enterprise#107635
The AI translation feature in the website builder was experiencing timeouts, preventing users from translating large amounts of text. This update removes the timeout restriction, allowing translations to complete successfully even with extensive or complex content. This improves the user experience and ensures accurate translations for our website.
Original PR description
Scenario: - have lot of untranslated text in a page - in a secondary language, open translation editor - click on "Translate to [current language]" in side panel Result: the translation fails completely or partially, and there is a notification saying "A technical issue occurred in the builder, you should save or discard your changes.". Reason: since 6df83abb35c95ab42e55d9a08cf6c411efa64b3e website builder action have a default timeout of 10 seconds to prevent deadlocks. But the /html_editor/generate_text can easily take more than 10 secondes depending on latency and quantity of text to translate. Fix: prevent the timeout when using the AI translation feature. opw-5892402 Forward-Port-Of: odoo/odoo#249464
This update resolves issues with the website builder's option folding and overlay behavior. Specifically, it fixes a bug where the last group of options wasn't unfolding correctly and addressed overlapping hover overlays, ensuring a smoother and more reliable user experience. These changes improve the overall usability of the website builder.
Original PR description
### [FIX] website: avoid empty option for grid Commit 64d35ccd6fade9e0473686b8484f561b5f4215ce added folding for groups of options, and folds them automatically, except the last group. But in some…
### [FIX] website: avoid empty option for grid Commit 64d35ccd6fade9e0473686b8484f561b5f4215ce added folding for groups of options, and folds them automatically, except the last group. But in some cases, the last container with options did not have any options displayed, and thus the last group shown was not unfolded. This commit fixes the issue for the case it was found by avoiding having the option completely (instead of having it, but being empty), by changing the selector. Steps to reproduce: - Open website builder on `/jobs` - Click on the bottom of the right column - Bug: the last group is not unfolded task-5946692 ### [FIX] html_builder: avoid hover overlay on top of active overlay Commit 53ae0a9f646808632ca1ca396466e1c0bb5a73c7 adds overlays on hover on elements with option. But it showed it also when there is already another active overlay, which preventing correct dragging of handles and caused an ugly color. This commit avoid showing the hover overlay if there is another overlay active for that element. Steps to reproduce: - Open website builder - Drop the `s_banner` snippet - Click on the column with text - Drag a handle to resize it - Bug: the overlay does not moved when dragged (the column is correctly resized) - Open website builder - Drop the `s_banner` snippet - Click on the column with text - Move the cursor a bit (stay inside the column) - Bug: The hover overlay is shown in addition to the "resize" overlay task-5946671 ### [FIX] html_builder: keep oberver of overlays when removing hover one Commit 53ae0a9f646808632ca1ca396466e1c0bb5a73c7 adds overlays on hover on elements with option. To adapt the size, it adds them to the resize observer with the other overlay. But when the hover overlay is removed, it removed the element from the observer even if it was also used for another overlay. This commit only removes the element targetted by the hover overlay from the observer if there is no other overlays for that same element. There is no issues the other way because the hover overlay disappears for any action that would remove the other overlays. Steps to reproduce: - Open website builder - Click on the "Contact Us" button in the header - Click in the blank space in the sidebar - Press `escape` - Bug: The overlay moves away from the button task-5942812 ### [FIX] html_builder: refresh overlays when document resizes When the iframe is resized because the user opens the builder, or hides the sidebar, the overlays were not always correctly following the elements which they were targetting. This commit adds a resize observer on the document. This observer makes the listener for `resize` events and implementation of `on_mobile_preview_clicked` both redundant, thus they are removed. Steps to reproduce: - Open the website builder while moving the pointer over a column in the footer - Bug: the hover overlay moves not following the column - Find (or create) a page with no options on any element covering the whole page, but with elements with options, whose size are not affected by the size of the page. - Open website builder - Click on the element with the option - Click in the blank space in the sidebar - Press `escape` - Bug: The overlay moves away from the element task-5942812
This update resolves a problem where salary inputs needed manual triggering, preventing accurate calculations for advance salary recovery. The team has reorganized the data files to make the triggering process clearer and removed a redundant file, ensuring correct salary calculations are now automatic.
Original PR description
Purpose: the salary inputs have to be manually triggered, which causes issues when it comes to populating the salary input for the advance salary recovery. Fix: moved the function `update_properties_definition_domain` to each salary structure data file to be more obvoius and removed `l10n_tr_hr_payroll_data` as the file wasn't in the manifest task-id: 5912475 Forward-Port-Of: odoo/enterprise#106576