Daily updates from Odoo
Saturday, February 28, 2026
16 changes · master
New functionality added to Odoo
This update adds support for Bancontact Pay via QR code payments in our Point of Sale system. Customers can now pay by scanning a QR code generated by the POS, aligning with growing trends in Belgium and the evolution of payment methods. Internal changes ensure consistent payment processing across all POS systems.
Original PR description
..., pos_iot, pos_iot_six, pos_iot_worldline, pos_settle_due, pos_tyro --- Task: [#4875917](https://www.odoo.com/odoo/project/1737/tasks/4875917) --- This commit introduces a new payment method type, `external_qr`, to handle QR-based payment flows directly in the Point of Sale. With the widespread adoption of QR code payments in Belgium and the evolution of Payconiq under Wero (Bancontact Pay), POS systems need native support for these new payment experiences. A new module, `pos_bancontact_pay`, is added to provide a full integration with the Bancontact Pay platform, allowing customers to pay by scanning a QR code generated in the POS. The module manages the creation, verification, and tracking of these payments. Some internal refactoring was also done to align the payment terminal logic with this new `external_qr` method type and ensure consistency across payment flows in POS.
This update allows payroll officers to select between standard and instant delivery methods for SEPA payments, offering greater flexibility in salary disbursement. This change aligns with evolving payment regulations and provides a more efficient process for delivering salaries to employees in Europe. It improves the overall payroll processing experience.
Original PR description
Payroll officers can now choose between standard or instant salary delivery when processing SEPA payments. Task: 5109368
This update adds support for accessing real-time currency exchange rates from the Central Bank of Cuba (BCC). This allows Odoo to accurately reflect the current value of Cuban currency for transactions and reporting, expanding financial reporting capabilities.
Original PR description
This commit introduces a new exchange rate provider for the Central Bank of Cuba (BCC). - Implement new exchange rate provider for Central Bank of Cuba (BCC) - Retrieve rates from official BCC source - Reference: https://www.bc.gob.cu/tasas-de-cambio (official published data and documentation) - Parse and normalize published currency values - Support multiple rate types (official, public, special)" Forward-Port-Of: odoo/enterprise#108789 Forward-Port-Of: odoo/enterprise#108367
Enhancements to existing features
This update simplifies the employee salary configuration by removing irrelevant fields and restricting access to certain settings. Specifically, the 'Seniority at Hiring' input is now only available for Belgian companies, and demo data related to school and car plate information has been removed. This improves data accuracy and reduces complexity for Belgian users.
Original PR description
- Remove the School and Private Car Plate inputs from the employee salary configurator. - Restrict the "Seniority at Hiring" input to Belgian companies only. - Remove demo data and tour references related to study_school and private_car_plate. task-5420271
This update standardizes the appearance of progress bars across Odoo Enterprise, aligning with Bootstrap's design and adapting for dark mode. This simplifies the user interface and reduces the amount of code needed to maintain the progress bar style.
Original PR description
This commit implements a minor update to progress bars. Customized progress bars have been replaced with Bootstrap standard styles with some adapation for the dark mode. This change streamlines the visual consistency but also reduces the CSS footprint. Community PR: https://github.com/odoo/odoo/pull/151758 task-3605453
This update enhances the reliability of call management by allowing calls to be ended before they start, using client-side timestamps for greater accuracy and responsiveness. This eliminates a previous dependency on server response times, improving system stability and reducing potential delays. It also streamlines code maintenance and improves readability.
Original PR description
There are 2 commits in that PR: # [REF] voip(_ai): align Session and Registerer conventions Harmonize Session and Registerer to ease maintenance and readability: - Rename _sipSession to…
There are 2 commits in that PR: # [REF] voip(_ai): align Session and Registerer conventions Harmonize Session and Registerer to ease maintenance and readability: - Rename _sipSession to __sipJsSession in Session, matching the convention used in Registerer and UserAgent. - Unify the stateChange listener pattern across both classes. - Store isRegistered on the Registerer and trigger a bus notification on change, similarly to what is done in Session. # [IMP] voip: allow end_call before start_call with explicit timestamps Both start_call and end_call now accept an explicit `at` timestamp, captured on the client at event time. New state transitions (calling/missed → terminated) allow end_call to proceed independently of start_call, with placeholder logic to reconcile start_date and duration regardless of arrival order. This removes the need to wait for start_call's response before ending a call, improving system reliability in case the server becomes unreachable. Using client-side timestamps also improves the accuracy of start_date and duration, as they reflect the actual event times rather than when the server processed the requests. Preparatory work for task-4917399.
This update streamlines the user experience by changing how notification settings are accessed from the Discuss sidebar. Previously, settings opened in a dialog, now they open in a dropdown, creating a more consistent and user-friendly interface.
Original PR description
Before this PR, opening the notification settings from the thread action in the Discuss sidebar displayed them in a dialog, making the UI inconsistent with other thread actions. After this PR, the notification settings open in a dropdown instead of a dialog, ensuring a more consistent and streamlined user experience. community: https://github.com/odoo/odoo/pull/247352 task-5936685 Forward-Port-Of: odoo/enterprise#108523
This update simplifies account organization by replacing account groups with a parent account hierarchy. This change addresses previous limitations related to code ranges and reporting, offering a more flexible and user-friendly approach for financial reporting across different countries and business needs. It improves clarity and reduces complexity in how accounts are categorized.
Original PR description
Problems of account groups: 1. It's defined by code range. This means that it forces the use of codes and it creates the constraint that an account must be within a code range to be part of a group. This makes sense in countries like Belgium where there is a normalized plan, but this is a problem in countries where there is no normalized plan or in countries where the use of codes is optional (eg. USA). 2. It shows the code in front of the group in accounting reports (not always desirable). 3. It's difficult to discover. 4. It doesn't allow to use a group as an "intermediary account" in the hierarchy. (eg. using the account "Automobile" on a bill even though "Automobile" is a parent). 5. It doesn't display the CoA hierarchy. task-5055586
Resolved issues and error corrections
This update resolves a potential issue during database upgrades in the Odoo Enterprise payroll module. Previously, removing a payroll rule could cause upgrade scripts to fail. This fix ensures that upgrade scripts continue to function correctly even if a rule has been deleted, improving the reliability of database updates.
Original PR description
This method is used in various places, including when upgrading a database. When doing so, it is done in a post upgrade script. If later one of the updated rules is removed, the pre-script removing it will run before the post script trying to update it, causing the migration to fail as the update method tries to browse a falsy value. This updates the `update_properties_definition_domain` method so that it ignores falsy values when browsing, allowing previous upgrade scripts to run even if the referred rule has been since deleted. Forward-Port-Of: odoo/enterprise#102964
This update removes the 'amount' column from the worked days tab in payroll reports for the United Arab Emirates (AE) and Saudi Arabia (SA) localizations. This change aligns with local reporting requirements and simplifies the reports for users in these regions, improving clarity and accuracy.
Original PR description
The amount column should be removed from worked days tab for AE and SA localizations. task - 5111183
This update fixes a bug where deleting a partially signed offer would incorrectly delete the associated employee. The change ensures the employee is only deleted when the offer is archived and has no other active offers, preventing data inconsistencies. This improves data integrity and reduces the risk of lost employee records.
Original PR description
Version – saas-18.4 ### Issue: When an applicant has both a partially signed offer and a fully signed offer, deleting the partially signed one also deletes the employee that was created from the…
Version – saas-18.4 ### Issue: When an applicant has both a partially signed offer and a fully signed offer, deleting the partially signed one also deletes the employee that was created from the fully signed offer. ### Steps to Reproduce: - Create two offers for an applicant. - Fully sign the first offer and partially sign the second one. - Delete the partially signed offer. The employee created from the fully signed offer is also deleted. ### Cause: Due to this issue, the employee record is incorrectly deleted from the system, which is not expected behavior. ### Fix: Improved the employee deletion logic by deleting the employee only when: - the employee is archived, and - they do not have any other offers besides the one being deleted. ### Impact: The employee will no longer be deleted when another partially signed offer for the same applicant is removed. --- Task – 5347109 Forward-Port-Of: odoo/enterprise#108634 Forward-Port-Of: odoo/enterprise#100991
This update resolves an issue where the system incorrectly identified the currency of multiple journals with the same IBAN. The fix ensures that CODA transactions are now accurately routed to the correct journal based on its currency, improving financial accuracy and reducing potential errors in multi-currency accounting. This was a critical fix impacting financial reporting.
Original PR description
When having multiple journals with the same IBAN, but different currencies, upon fetching and dispatching the CODA into the right journals, the currency of the journal was not correctly taken into account as the condition was incorrect. This commit fixes this condition which was introduced in [^1] such that the right journal, with the right currency is correctly chosen. [^1]: 4fda4fb5353ed9c14dbc023ab7d07fabd3c06e98 opw-5723017 Forward-Port-Of: odoo/enterprise#108952 Forward-Port-Of: odoo/enterprise#108677
This update resolves an issue preventing the correct display of supplier names in SAF-T reports. The fix ensures that the system accurately identifies suppliers by incorporating depreciation lines alongside journal entries, addressing a discrepancy caused by bills posted in previous months.
Original PR description
**Steps to reproduce:** - Install l10n_ro_saft - Switch to a Romanian company (e.g. RO Company) - Create an asset model: * Method: Straight Line * Duration: 12 Months - Configure a "Fixed Assets"…
**Steps to reproduce:** - Install l10n_ro_saft - Switch to a Romanian company (e.g. RO Company) - Create an asset model: * Method: Straight Line * Duration: 12 Months - Configure a "Fixed Assets" account: * Automate Asset: Create and validate * Asset Model: [the asset model created above] - Create a bill: * Vendor: [create a new vendor] * Bill Date: [last month] * Invoice Line: [A line with the fixed asset account] - Confirm the bill - Go to "Accounting / Reporting / Audit Reports / General Ledger" - Select the current month (The fixed asset account should be present) - In the cog menu, select "SAF-T (D406 Asset Declaration)" **Issue:** A traceback is raised while trying to display the name of a supplier. **Cause:** To display the supplier name of an asset, a dict having the id of the customer or supplier as key (i.e. partner_detail_map) is used. This dict is build by getting the list of all partners linked to a posted journal item on an asset (or liability) account in the period of the report. In this case, it's the current month. However, the created bill has been posted the month before. So no journal item is found for the vendor that has been created just for the bill and therefore there is no key for him in the dict, which leads to the error when trying to get the id of the supplier of the asset in the dict. **Solution:** Instead of just fetching the posted entries linked to a receivable or payable account in order to get the list of the potential customers and suppliers, we also fetch the depreciation lines that are linked to an asset account and can still be in draft. opw-5499918 Forward-Port-Of: odoo/enterprise#109051 Forward-Port-Of: odoo/enterprise#105987
Features or functions removed from Odoo
This update simplifies the kitchen display by removing product reference information for restaurant and bar orders. This change streamlines the display for kitchen staff, improving efficiency. Product references will still be shown on the display for retail orders.
Original PR description
Following this commit: ==== - Product reference will no longer be shown in kitchen display for orders related to restaurant/bar config. - For retail config, we will continue showing product reference. task-5920462 Related PR : https://github.com/odoo/odoo/pull/248603
Code cleanup and technical improvements
This update standardizes how partner addresses are formatted across Odoo, eliminating duplicate formatting logic in various modules. By centralizing this process in the base, we ensure consistency and reduce potential errors in address data, improving data accuracy and reporting.
Original PR description
Before this commit: --- - Default address formatting could include unwanted blank lines when fields were empty. - Many modules/localization duplicated logic to get `clean` or `inline` address. In this commit: --- - Centralize address rendering logic in base to avoid duplicated formatting across modules. task-5455694
This update adds `.this` to template variables to align with upcoming OWL3 requirements. This change is a necessary preparation step to ensure compatibility with the new OWL3 rendering context, which will require this syntax for accessing component variables. It impacts several modules to ensure a smooth transition.
Original PR description
In preparation for OWL3, where template variables will need to use `.this` to target component variables, we add `.this` to template variables that are targetting the component.
Community PR: https://github.com/odoo/odoo/pull/250416
Script PR: odoo/odoo#247965
task: OWL3 prep - add this. to template variables
THIS_TARGETS = ["ai", "currency", "data", "digest", "delivery", "event", "fleet", "frontdesk", "gamification",
"google", "helpdesk"]