Thursday, February 26, 2026
12 changes · 17.0
Enhancements to existing features
This update simplifies the process of creating bank accounts within Odoo. Previously, bank account creation was fragmented; this change consolidates the process, making it more efficient for users and reducing potential errors. This improvement ensures consistent and accurate bank account management across the system.
Original PR description
Forward-Port-Of: odoo/odoo#249983
This update reduces the cost of running tests by consolidating setup steps and suppressing unnecessary logging. Specifically, expensive password creation and email logging within tests have been addressed, leading to faster test execution times and improved system performance.
Original PR description
- move a bunch of expensive setUp to setUpClass - backport #152378 to avoid password keying in 17.0 also
This update streamlines the process of setting up tests for Odoo's payroll and timesheet modules. By centralizing test setup within classes, the team has improved the efficiency and reliability of automated testing. This change reduces the time spent on repetitive tasks and ensures more consistent test results.
This update optimizes how Odoo handles locale data, reducing unnecessary file system access. Previously, Odoo created many locale objects without actually using their data, leading to performance issues. This change adds a caching mechanism to prevent redundant checks, improving overall system speed and efficiency.
Original PR description
`babel.Locale.parse` checks if a locale is valid by calling `os.path.exists` on the resolved filename for the locale (this is done in `babel.localedata.exists`). Babel does have a locale cache which it checks, but currently that cache is only populated when the locale is actually loaded[^1], therefore in cases where we instantiate a significant number of locales but never actually need to load locale data (e.g. formatting a significant number of datetimes, in qweb, using only non-localised patterns) this results in severe FS traffic for no reason. [^1]: python-babel/babel#1254 has been submitted to fix this issue
Resolved issues and error corrections
This update streamlines the process of adding and locating bank accounts within Odoo Enterprise. Previously, the system handled bank account creation inconsistently, leading to potential errors. This change ensures a more reliable and unified approach to managing bank account information across various modules.
Original PR description
*: account_invoice_extract,hr_constract_salary,payment_sepa_direct_debit Forward-Port-Of: odoo/enterprise#108238
Documentation and clarification updates
This pull request updates legal documentation related to Mega-ramo, ensuring compliance with Odoo's contribution guidelines. It includes a signature confirmation acknowledging acceptance of the CLA terms. This change primarily addresses a legal requirement and does not impact Odoo's functionality.
Original PR description
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
This update corrects a bug where the website's 'scroll to top' links (e.g., '#top') were broken due to incorrect URL processing. The fix ensures these links function correctly, providing a seamless user experience for navigating to the top of the page. A new test confirms this resolution.
Original PR description
__Before commit:__ Menu items with anchor URLs (e.g., `#my-anchor`) are prefixed with the current page's path. This is correct for page-specific anchors but breaks generic ones like `#top` and `#bottom`. A menu with the URL `#top` becomes `/current-page#top`, preventing it from functioning as a universal "scroll to top" link. __Cause:__ The server-side logic for processing menu URLs does not differentiate between page-specific anchors and generic anchors like `#top` or `#bottom`, treating all anchor links as belonging to the current page. __Fix:__ In the `save` method, exclude `#top` and `#bottom` from the logic that prefixes anchors with the current page's URL. This ensures these special anchors, typically set on the header and footer, work consistently across the entire website. A new unit test verifies that `#top` and `#bottom` menu URLs are saved correctly without being prefixed. task-5941115
This update resolves an issue where Odoo's website loading process was delayed in Firefox 148. By using empty iframes, the system now loads website templates more efficiently and synchronously, eliminating a previous dependency on Firefox's specific behavior. This ensures a smoother user experience across Firefox versions.
Original PR description
Firefox 148 fixed the behavior of `about:blank` documents, as explained in their [release notes]: > The initial about:blank document is now Web-compatible. If the first > navigation of a browsing context goes to about:blank, it completes > synchronously and is no longer replaced by a second parser-generated > document. Commit [e079602] added the new page dialog in website, and used empty iframes to load each page template. Before Firefox' fix, it meant we had to wait the recreation of the 2nd document before proceeding. This is no longer the case in Firefox >= 148. [release notes]: https://www.firefox.com/firefox/148.0/releasenotes/ [e079602]: https://github.com/odoo/odoo/commit/e0796020ee0c3188e1e9d9fa077de73a2211c6f7
This update corrects a display issue in the Planning app's Gantt chart. Previously, shift durations were incorrectly truncated when spanning over a day, leading to inaccurate hour representation. This fix removes outdated logic, ensuring shift durations are displayed correctly regardless of their length.
Original PR description
### Issue: The pill name contains the hours when it spans over the next day for less than 3 hours but not if more than 3 hours. ### Steps to reproduce: - Go to Planning app - Create a shift for an…
### Issue: The pill name contains the hours when it spans over the next day for less than 3 hours but not if more than 3 hours. ### Steps to reproduce: - Go to Planning app - Create a shift for an employee from 3pm to 2am (over two days) - The hours of the shift are displayed - Modify the shift end to 3am - The hours of the shift aren't displayed ### Cause: Before the refactor adapting the gantt view to OWL, when a shift spanned over two days less than three hours, then the gantt view truncated the pill to display it in only one day. (see [`_snapToGrid()`](https://github.com/odoo/enterprise/blame/a16b2ef569903c0ae5803c169dbd68acd0141fe1/web_gantt/static/src/js/gantt_row.js#L1044-L1072)) The same logic was done for the computation of the pill's name in [this commit](https://github.com/odoo/enterprise/commit/98a86cbacf484646f486e4648788cfa53cc9648c). But as the pills are no longer truncated since 17.0, the computation of pill names is faulty. ### Solution: We remove the checks of the 3-hour margin. This also makes the variable `spanMoreThanOneDay` useless, so we delete it. opw-5881532
This update fixes a discrepancy in how the system maps CPV codes to billing documents for Romania (RO). Previously, the incorrect code 'CPV' was used, which is now corrected to 'STI' according to PEPPOL standards. This ensures accurate billing and compliance with Romanian tax regulations.
Original PR description
The value of `ItemClassificationCode/listID` that corresponds to `CPV` classification is `STI` not `CPV`. See https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL7143/ task-5416833
This update resolves a 500 error that occurred when users attempted to edit their information in the portal with a company lacking a country setting. The fix ensures the system correctly handles missing country data, preventing the error and allowing users to save their information. This improves the overall portal experience for all users.
Original PR description
How to reproduce:
- Create a company with no country
- Set a contact's company to that company
- Grant portal access to that contact
- Login as that contact
- Go to the edit information tab
- Leave some of the required fields (Phone, Street & City) empty
- Click on save
The problem:
The page displays an error 500
Why:
When you try to submit the form with some required field missing, the page will try to evaluate this expression : 'int(country_id)''. But since this commit (https://github.com/odoo/odoo/commit/d6d6bee087fe2d3dc17974054353430c2662aecf), the post variable country_id is set to "False" if the partner has no country. 'int("False")' will then raise an error.
opw-5867975
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update corrects a technical issue that could cause inconsistencies between payroll lines and the overall payslip data. The change ensures that all payroll calculations and reporting remain accurate, preventing potential discrepancies and errors in employee payments. This improves the reliability of our payroll processing.