Tuesday, June 9, 2026
17 changes · saas-19.2
Resolved issues and error corrections
This update fixes an issue where sale order prices weren't accurately displayed in invoicing. The system was previously using product prices instead of the specific price set for each sale order line. This change ensures that users always see the correct price when viewing sale order details, improving invoicing accuracy and reporting.
Original PR description
Steps to reproduce: - - Create a Sale Order with two sale order lines for the same product. - Set different prices on each SOL (e.g. 20 and 40). - Open the related project and go to the Invoicing tab. - Search for the Sale Order Lines. Issue: - Displayed price uses the product price instead of the SOL price. Cause: - The display name formatting used `product_id.lst_price`. Solution: - Use `price_unit` from the sale order line to show the correct price. task-5966799 Forward-Port-Of: odoo/odoo#250554
This update resolves a bug that prevented users from generating planning reports when grouping by departments instead of resources. The fix ensures that the system correctly identifies a resource when grouping by other methods, preventing an error and allowing reports to be printed successfully.
Original PR description
## Steps to Reproduce: 1. Install the Planning module. 2. Planning > Group by "Department". 4. Click Actions > Print. ## Error: `AttributeError - 'bool' object has no attribute 'id'` ## Cause: When the planning is grouped by other than `resource_ids`, `resource` is set to False. Later, then accessing the ID leads to an error. ## Fix: When the planning is not grouped by resource, use the first resource assigned to the slot instead of False. sentry-7536432202
This update optimizes Odoo's styling process, specifically reducing the time it takes to recalculate styles in large tables like the Accounting Balances Sheets. By removing unnecessary selectors, the system now responds faster to window resizing, scrolling, and sorting, leading to a smoother user experience.
Original PR description
Adapt selector to remove the :has value since it not needed to have the effect applied. This reduces work during the "Recalculate Style" phase (for example when hovering rows in large tables such as the Accounting > Balances Sheets). It lowers recalculation time during window resizes, heavy scrolling, and table sorting by preventing broad selector matches and limiting style checks to elements with the specific class. This commit is a follow up of https://github.com/odoo-dev/enterprise/commit/8aa63b3c726d825e68430bb0a64a54c1b58d6af7 Note: We also fixes the scss button variable not correctly overided Forward-Port-Of: odoo/enterprise#119521
This update prevents managers from overriding the card details when approving card expenses. Previously, setting a manager on a card expense would be cleared upon approval, causing confusion. Now, card expenses are read-only for managers, streamlining the expense approval process and ensuring accurate control via the card itself.
Original PR description
**Issue** If a manager was manually set on a card expense after it was created, it would be cleared when the expense was approved. **Change** Make the field readonly for card expenses, the idea is that the manager shouldn't need to approve card expenses since they are able to control them via the card itself. opw-6045587 Forward-Port-Of: odoo/enterprise#112593
This update ensures that work orders can only be assigned to employees specifically authorized for the relevant workcenter. Previously, all employees were selectable, regardless of workcenter permissions. This change improves efficiency and accuracy by limiting assignments to qualified personnel.
Original PR description
Add domain on `employee_assigned_ids` to restrict selectable employees based on the workcenter configuration. If `all_employees_allowed` is True, no filter is applied. Otherwise, only employees listed in `allowed_employees` are selectable. opw-6208602 Forward-Port-Of: odoo/enterprise#117876
This update resolves a minor issue where the displayed name for the Sendcloud website delivery module had a typo ("Sendcould"). The underlying functionality remains unchanged as all other references use the correct spelling. This ensures accurate module identification and a consistent user experience.
Original PR description
The displayed name contained a typo ("Sendcould" instead of "Sendcloud") All other references already use the correct spelling, so no further changes were necessary.
opw-6239003
Forward-Port-Of: odoo/enterprise#118416
Forward-Port-Of: odoo/enterprise#118223This update fixes an issue where the field service report was displaying incorrect information. The report now accurately shows the Planning Shift name and start date, which were automatically populated when a shift is created. This change ensures the report provides the correct details for service interventions.
Original PR description
…port title - Removed the 't-if' condition containing 'doc.name', as 'doc.name' now refers to the Planning Shift name following the changes introduced in v19.2. - The report now displays 'start_datetime', which is automatically populated when a Planning Shift is created. - As a result, the 't-if' condition is no longer necessary. - This change aligns with the new behavior introduced in v19.2 and effectively replaces the Task name that was previously displayed before the report was migrated from 'project.task' to 'planning.slot'. Task-ID: 6284967
This update fixes a persistent memory leak within the Odoo test suite. The issue stemmed from an unintended override of the test environment, leading to unnecessary resource consumption. The solution ensures proper cleanup after tests, preventing future memory problems.
Original PR description
Since [1], there was a memory leak in the test suite due to the path of `rpc._rpc`. This override was leaking the env and all services in every module sets created by hoot. In stable, we simply hook on the `after` callback to cleanup the patch, thus removing the reference to the env and services. In master, with owl3, the strategy will be to put the patch in a Plugin, which has a cleanup function that is executed automatically when the App is destroyed, i.e. after each test. [1] odoo/odoo#248852 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 fixes a reporting issue by now logging a specific message when new business partners are created through the Google or Microsoft Calendar sync. Previously, all new partners received a generic message. This change provides clearer tracking of partners originating from calendar integrations, aiding in data analysis and troubleshooting.
Original PR description
Before we were logging the new created partners default message. Now we log custom message indicating that this partner was created from Calendar sync. task-6177363 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#264392
This update resolves a problem in the account module's testing process. The tests were failing due to leftover account transactions that weren't being properly cleaned up. By canceling payments before removing these transactions, the tests now run correctly and provide accurate results.
Original PR description
The KPI provider test setup could leave some account moves behind when running with all modules and demo data installed. These leftover moves were then detected by subsequent test steps, causing incorrect numbers and test failures. This commit ensures the targeted moves are removed to provide an empty test environment. Payments need to be canceled first; otherwise unlinking the moves raises a ValidationError. [runbot-939456](https://runbot.odoo.com/odoo/error/939456) Forward-Port-Of: odoo/odoo#268151
This update allows Odoo to correctly validate Turkish VAT invoices issued to non-taxpayers or overseas customers, following Turkish regulations. Previously, invoices using standard placeholder VAT numbers were incorrectly rejected. This change ensures accurate VAT processing for Turkish businesses while maintaining existing validation rules.
Original PR description
- Turkish regulations allow the usage of special placeholder identifiers for invoices issued to non-taxpayer end consumers and overseas customers, where providing a real TCKN/VKN is not mandatory. - Although Odoo already referenced these identifiers in the VAT format help message (`11111111111` for TCKN and `2222222222` for VKN), they were still rejected by the Turkish VAT validation logic because they do not pass the standard `stdnum` checks. - This commit extends the Turkish VAT validation to explicitly allow these GİB-approved placeholder identifiers while preserving the existing standard VAT validation behavior and Nilvera test environment exceptions. taskID-6237629 Forward-Port-Of: odoo/odoo#268225
This update fixes a technical issue where the ‘Configuration’ menu item within the Contracts module was being incorrectly positioned due to a low sequence value. This caused conflicts with other modules and disrupted the standard Odoo menu hierarchy. Adjusting the sequence ensures the Contracts menu remains in its intended last position, maintaining a consistent and predictable user experience.
Original PR description
## Description of the issue/feature this PR addresses The “Configuration” menu item defined by the *Contracts* module uses a very low sequence value, causing menu ordering conflicts when other…
## Description of the issue/feature this PR addresses The “Configuration” menu item defined by the *Contracts* module uses a very low sequence value, causing menu ordering conflicts when other modules (e.g. [OCA](https://github.com/OCA/partner-contact/pull/2202/files)) add menu items in the same section. This affects not only external modules but also internal ones that add menu items under *Contacts*. ## Current behavior before PR When other modules add new menu items to *Contacts*, the *Configuration* menu moves out of its intended last position, breaking Odoo’s default menu hierarchy. <img width="467" height="148" alt="Behavior before PR:" src="https://github.com/user-attachments/assets/4cb6e3bb-00c0-4636-87de-c51b572dc42c" /> ## Desired behavior after PR is merged The sequence of the *Configuration* menu item is adjusted so that it always remains last, aligning with Odoo’s default menu hierarchy and avoiding friction between modules. <img width="467" height="148" alt="Behavior after PR is merged" src="https://github.com/user-attachments/assets/314c2556-5f2b-403d-af8d-ab550bff41a9" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234909
This update resolves a frustrating issue where carousels would automatically cycle while users were editing website pages. The fix prevents this cycling in edit mode, ensuring a smoother and more stable editing experience. This improvement simplifies the editing process and reduces user frustration.
Original PR description
Commit [3ba3e45] paused carousels upon focus, and resumed it upon focusout. However, that behavior should be disabled in edit mode, as cycling is disabled (moving through the slides is only done manually). Otherwise, the carousel cycles and, after each slide, takes the focus, which makes editing the page a nightmare. [3ba3e45]: https://github.com/odoo/odoo/commit/3ba3e45b2ab995412e1a7ced2c46b9294dc353b8 task-6264462 Forward-Port-Of: odoo/odoo#268628 Forward-Port-Of: odoo/odoo#268046
A recent issue prevented the correct generation of PDF reports when fillable forms were completely empty. This update fixes a technical error that caused a crash when attempting to create a PDF with no data, ensuring reports are always generated correctly. This improves the reliability of our PDF output.
Original PR description
Version: 19.0 Issue: - Uploading a fillable PDF with no filled-in values caused an error. Cause: - When all form fields are empty, nothing is drawn on the ReportLab overlay canvas, producing a 0-page PDF. - Calling getPage(0) on an empty page list raised an IndexError. Fix: - Skip the page merge when the overlay has no pages to avoid the IndexError on empty fillable forms. Forward-Port-Of: odoo/enterprise#119677
This update corrects a bug in the account reports module that caused the growth comparison percentage to fluctuate when users switched the order of reporting periods. The fix ensures the calculation remains consistent regardless of the period order, providing more reliable financial reporting. This improves the accuracy of growth analysis.
Original PR description
The feature had originally been implemnted at a time where the period_order couldn't be modified, and always corresponded to what we call 'descending' now. Because of that, we assumed the column at index 0 was always the most recent period ; which caused the growth comparison percentage to change when switching period order. Forward-Port-Of: odoo/enterprise#119280 Forward-Port-Of: odoo/enterprise#118835
This update addresses a change in how Chrome 148 displays Sundays when using the th_TH locale. The code has been adjusted to accommodate the browser's updated Intl API, ensuring consistent and accurate date formatting for Thai users. This resolves a minor visual discrepancy.
Original PR description
Chrome 148 changed the display format for Sundays in the th_TH locale. This commit modifies the test to expect either the full or abbreviated day name, depending on what the browser Intl API actually returns. Forward-Port-Of: odoo/enterprise#119708
This update resolves a test failure caused by incorrectly formatted data being passed to the system. Specifically, raw PDF content was mistakenly treated as base64, leading to an error. This fix ensures that data is correctly encoded, improving test reliability.
Original PR description
This commit fixes an error when running the `test_employee_job_change` test on Python 3.14, which is stricter about base64 validation. Ultimately, the root issue was that raw PDF content was being passed when a base64 representation was actually expected (which is obviously invalid base64). runbot-938173 Forward-Port-Of: odoo/enterprise#119786 Forward-Port-Of: odoo/enterprise#118523