Friday, May 8, 2026
27 changes · saas-19.2
New functionality added to Odoo
This update allows users to download General Ledger reports in CSV format. This provides greater flexibility for analyzing financial data and integrating it with other business systems. This enhancement improves reporting capabilities and data accessibility.
Original PR description
task-5734354 Forward-Port-Of: odoo/enterprise#115903 Forward-Port-Of: odoo/enterprise#107638
Enhancements to existing features
This update improves the demo data for Odoo's Brazil localization (l10n_br) module. The changes ensure the demo data accurately reflects Brazil's tax and business regulations, making it more reliable for testing and showcasing the module's functionality. This update primarily impacts the demonstration of the l10n_br module.
Original PR description
Updated Brazil Product and company demo data to ensure accurate testing task-6159933 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261636
Resolved issues and error corrections
This update automatically refreshes payment screens when the PIS (Payment Initiation System) status changes. Previously, users had to manually refresh the page to see the updated status, which is now seamless. This improves the user experience and ensures accurate payment information is always displayed.
Original PR description
There were some buttons like sign payment that were visible even when the PIS status was signed which needed a manual page refresh for the update to reflect, now it's reflected automatically on the PIS status change. task-5417365 Forward-Port-Of: odoo/enterprise#116427 Forward-Port-Of: odoo/enterprise#114299
Features or functions removed from Odoo
This update removes outdated code from the welcome page related to call preview streams. Previously, the welcome page handled stream management, but this has been updated to a more efficient system. This cleanup improves the stability and performance of the welcome page.
Original PR description
**Purpose of this PR:** Since odoo#228382, the welcome page no longer manages call preview media streams itself. `CallPreview` now handles both stream cleanup on destroy and the `getUserMedia` race that could happen when leaving the page while permission was still pending. The `isClosed` flag was introduced in odoo#179690 to guard that race in `WelcomePage`, but it became obsolete after the refactor and the assignment was not cleaned up. This commit removes the unused assignment from the welcome page. Forward-Port-Of: odoo/odoo#263216
This update improves the accuracy of the Brazil demo data within Odoo Enterprise. The changes to product and company data ensure that testing of the l10n_br_avatax module runs smoothly and reflects current Brazilian tax regulations. This supports ongoing development and validation of the Brazil localization features.
Original PR description
Updated Brazil Product and company demo data to ensure accurate testing task-6159933 Forward-Port-Of: odoo/enterprise#115361
This update fixes a visual inconsistency in the Point of Sale (POS) interface. Previously, combo products and regular products had different card styles. Now, both product and combo product cards have a unified background style, creating a more consistent and professional look for the customer experience. This improves the overall usability and presentation of products within the POS system.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
This update resolves an issue that prevented users from reconciling bank statements on smaller screens (like mobile devices). The fix ensures that the correct data is passed to the bank reconciliation dialog, preventing a technical error that would have blocked the process. This improves usability for all users.
Original PR description
When clicking on the "Reconcile" button of a bank statement line on a small screen (ex: mobile) threw an OwlError "Invalid props for component 'KanbanController': unknown key 'bankRecInfo'". BankRecSelectCreateDialog injected `bankRecInfo` into `baseViewProps`, which is spread into the embedded view regardless of its type. On desktop the embedded view is a list (patched to accept `bankRecInfo`), but on small screens SelectCreateDialog falls back to a kanban view, whose controller does not declare that prop, triggering Owl's props validation. Only forward `bankRecInfo` when the inner view is a list by overriding `viewProps` instead of mutating `baseViewProps`. Steps to reproduce: - Enable the developer mode. - Open Bank Reconciliation. - Resize the window to a small/mobile width (or open from a mobile device). - On a statement line, click the "Reconcile" button to open the dialog. - OwlError is thrown opw-6070573 Forward-Port-Of: odoo/enterprise#114298
This update resolves an issue where the filmstrip height on the shop page was inconsistent when images were missing. The fix ensures a consistent height for all filmstrip designs, regardless of whether an image is present. A placeholder image is now displayed when no image is available, improving the overall visual appearance.
Original PR description
This commit fixes two issues regarding the filmstrip in the /shop page : - Adding a minimum height to the elements of the `default` and `bordered` designs, so that their heights remain consistent…
This commit fixes two issues regarding the filmstrip in the /shop page : - Adding a minimum height to the elements of the `default` and `bordered` designs, so that their heights remain consistent whether they contain an image or not. - Display a placeholder image for the `images` filmstrip if empty. task-5491550 | Before | After | |--------|--------| | <img width="613" height="103" alt="image" src="https://github.com/user-attachments/assets/852ef2ce-6265-4622-9e30-4e8112bbf264" /> | <img width="618" height="114" alt="image" src="https://github.com/user-attachments/assets/0933c0c2-a669-4236-9148-a25226214ce6" /> | | <img width="718" height="164" alt="image" src="https://github.com/user-attachments/assets/ac1b8d91-44fa-4ce0-8ddb-beba271a2423" /> | <img width="718" height="164" alt="image" src="https://github.com/user-attachments/assets/8676e9f9-074b-40e9-a75b-76561437c081" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263118 Forward-Port-Of: odoo/odoo#255543
This update resolves an issue where internal transfers using multi-step routes were incorrectly flagging a missing delivery carrier. The fix ensures that carrier validation is skipped for internal movements, streamlining the process and preventing unnecessary errors. This improves the efficiency of internal stock transfers within the RO company.
Original PR description
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method…
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method `_compute_l10n_ro_edi_stock_enable` was overridden to check for `not picking.batch_id` However, for multi-step delivery routes, internal pickings still triggered the carrier validation, as no check on the `picking_type` was performed ### Steps to reproduce: - Install `l10n_ro_edi_stock_batch` with demo data and switch to RO Company - In Settings, enable `Multi-Step Routes` - Set the RO Warehouse's Outgoing Shipments to `Pick then Deliver (2 steps)` - Create a Product (e.g. RO product) - Create a Delivery Method (e.g. RO Delivery, Partner: Any, Delivery Product: RO Product) - Create and Confirm a Sale Order for the RO Product - From the Sale Order, click Delivery and validate the picking ### Before the fix, internal transfers raised: `The picking RO Co/PICK/00001 is missing a delivery carrier.` enterprise-PR: https://github.com/odoo/enterprise/pull/114166 opw-5925087 Forward-Port-Of: odoo/odoo#263036 Forward-Port-Of: odoo/odoo#257293
This update resolves an issue that prevented users from modifying warehouse routes in the Romanian (RO) accounting version of Odoo. The fix addresses a coding error that occurred when updating routes, causing a system crash. This ensures users can now correctly manage warehouse routes without encountering this disruption.
Original PR description
### Issue: When changing the routes of a Romanian warehouse, an error is raised, blocking any modification of multi-step routes ### Cause: The code attempts to access `in_type_id` from `warehouse_data` However, when updating routes, `warehouse_data` is empty in the method `_create_or_update_sequences_and_picking_types` This leads to a crash because the code assumes that `warehouse_data` always contains `in_type_id` and `out_type_id` Additionally, even if the data were present, it would result in creating duplicate `stock.picking.type` records ### Steps to reproduce: - Install `l10n_ro_saft_stock` with demo data and switch to `RO Company` - Enable `Multi-steps Routes` in Settings - Try to modify Incoming or Outgoing Shipments on a warehouse - When saving, the following error is raised: "Oh snap! in_type_id" odoo-pr: https://github.com/odoo/odoo/pull/257293 opw-5925087 Forward-Port-Of: odoo/enterprise#114166
This update fixes an issue where a child contact's zipcode was incorrectly overriding a parent's manually entered zipcode. The change ensures that child contact zipcodes always reflect the parent's city's zipcode, maintaining accurate address information. This prevents inconsistencies and ensures data integrity.
Original PR description
Currently, when a res.parter is given a parent, base_address_extended runs _onchange_city_id. This sees the city change and alters the zipcode to match the city's zipcode. However, this field can be…
Currently, when a res.parter is given a parent, base_address_extended runs _onchange_city_id. This sees the city change and alters the zipcode to match the city's zipcode. However, this field can be manually altered to differ from the city's zipcode. Thus, when a parent has a city, the zipcode will override the manually entered zipcode for a child contact. This commit solves this by checking for the parent's zipcode before blindly setting it to the city's zipcode. Steps to reproduce: 1. Install `base_address_extended` 2. Enable "Enforce Cities" on a country `(res.country)` 3. Add a city to that country with a zipcode of 123 4. Create a new contact (parent) and select the configured country 5. Select the city (the zipcode will fill in from the city's zipcode) 6. Overwrite the zipcode with 456 7. Save the contact (parent) 8. Create a new contact (child) 9. Set the company to the parent contact and save 10. The zipcode of the child will be the city's zip (123), not the parents' zip (456), thus the addresses will be different, and the child contact type will be 'other' opw-6131280 closes #262651 Forward-Port-Of: odoo/odoo#262651
This update fixes an issue where inbox users were receiving push notifications with escaped characters instead of the intended content. The change ensures that push notifications display the correct, unescaped text, improving the user experience and clarity of notifications. This resolves a visual inconsistency in how task notifications are presented.
Original PR description
**Steps to reproduce:** Log in as admin and ensure notifications are handled in Odoo. Enable push notifications and the 'Task Created' subtype for a project. As a second user, create a new task in…
**Steps to reproduce:** Log in as admin and ensure notifications are handled in Odoo. Enable push notifications and the 'Task Created' subtype for a project. As a second user, create a new task in that project. **Current behavior before PR:** admin received escaped content in the push notification (e.g., `A new task has been created in the "Project Name" project`) **Cause:** For inbox users, we send a client-side push notification using `previewText` as the body. This field returns a markup object containing escaped characters, which are converted to a string when passed to the notification body. Since the notification body only accepts plain text, these characters are displayed literally to the user. **Desired behavior after PR is merged:** admin receives the unescaped content in the push notification. (e.g., `A new task has been created in the "Project Name" project`) task-5112810 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263187 Forward-Port-Of: odoo/odoo#240331
This update resolves a problem that prevented the demo data for the MRP Subcontracting module from loading correctly in Odoo 19. The fix ensures that the correct product template record is used, resolving an error related to mismatched IDs. This ensures that the demo data functions as intended.
Original PR description
Steps to reproduce: - Initialize an empty database with demo data enabled - Install mrp_subcontracting Problem: The product.product `product_delivery_02` record does not share the same #ID as the product.template `product_delivery_02_product_template` record. This leads to an error when loading the demo data. This errors only started with Odoo v19. Solution: Use the right product.template `product_delivery_02_product_template` record. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262949
This update fixes a discrepancy in how the invoiced quantity is calculated for sales orders, particularly when dealing with packaged products. Previously, rounding differences led to an inaccurate displayed quantity. The change ensures consistent rounding for both invoiced and delivered quantities, improving the accuracy of sales reporting.
Original PR description
Steps to reproduce: --- - Install the `Sales and Inventory` modules. - Enable `Units of Measure & Packagings` from Settings. - Go to `Sales > Configuration > Products > Units & Packagings.` - Create…
Steps to reproduce: --- - Install the `Sales and Inventory` modules. - Enable `Units of Measure & Packagings` from Settings. - Go to `Sales > Configuration > Products > Units & Packagings.` - Create a new unit > Pack of 12 with quantity 12 and unit Units. - Create a new product > enable Track Inventory, set Quantity On Hand to 100, and in the `sales` tab, under `Upsell & Cross-Sell`, set `packaging` as` Pack of 12`. - Create a Sales Order > add the product and set the quantity to 3, with a unit Pack of 12. - Confirm the order and validate the delivery. - Create and confirm the invoice. - Return `1 unit` from the delivery and validate it. - From the invoice, create a `credit note` with quantity 1 unit and confirm it. - Go back to the Sales Order. Issue: --- - On the Sales Order: `Delivered Quantity` shows` 2.92` while `Invoiced Quantity` shows `2.91`. Root cause: --- - At [1] & [2], in `_compute_qty_invoiced`, the `_compute_quantity` method is called without specifying a `rounding_method`, so it defaults to `UP` (1/12 rounded to 0.09), while `_compute_qty_delivered` explicitly uses `HALF-UP` (1/12 rounded to 0.08), leading to inconsistent rounding. Solution: --- - In this PR, the same rounding method (HALF-UP) is applied when computing the invoiced quantity to ensure consistency with the delivered quantity. [1]https://github.com/odoo/odoo/blob/64c1f1a7d3b24ca613d0b29a2412f1094fea08d9/addons/sale/models/sale_order_line.py#L896-L912 [2]https://github.com/odoo/odoo/blob/64c1f1a7d3b24ca613d0b29a2412f1094fea08d9/addons/sale_stock/models/sale_order_line.py#L193-L209 opw-6073690 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263011 Forward-Port-Of: odoo/odoo#258024
This update resolves an issue where users without full project access were unable to view project details. The fix adds a temporary `sudo()` call to grant access, allowing timesheet users to correctly see project information. This ensures all users can access the project details they need.
Original PR description
### Steps to reproduce: - Download 'Sales', 'Project', 'Employees', and 'Timesheets' apps - Create an employee and link them to a user that doesn't have any access rights except to 'Timesheets =…
### Steps to reproduce:
- Download 'Sales', 'Project', 'Employees', and 'Timesheets' apps
- Create an employee and link them to a user that doesn't have any access rights except to 'Timesheets = User:own timesheets'
- In Sales, create a service with the following specifications:
- 'Create on Order' is 'Project'
- 'Invoicing Policy' is 'Based on Timesheets'
- Create a new quotation that requests this service and click 'Confirm'
- In 'Project' > 'Configuration' > 'Projects', choose the newly created project and add a line that has the new employee in the 'Invoicing' tab
- Log in as that employee and go to 'Timesheets'
- Create a new entry for the newly created project
- Click the project's name
> Access Error: You are not allowed to access 'Collaborators in project shared'
(project.collaborator) records.
### Cause of Issue:
This happens because the user doesn't have access rights to the 'Project' app, hence they don't have access to `collaborator_ids` which are retrieved here. https://github.com/odoo/odoo/blob/3dfb2849acd899ccbf4048f2a15dff3c74aed96d/addons/project/models/project_project.py#L1113-L1120
### Fix:
Since an access to the 'Projects' app isn't necessary to view a project assigned to you, `sudo()` is necessary for hr_timesheet users without project access rights.
opw-6074833
Forward-Port-Of: odoo/odoo#263152
Forward-Port-Of: odoo/odoo#258370This update resolves a technical issue with a unit test related to LDAP authentication, which was leaving data remnants in the database. Switching to a simpler `HttpCase` approach ensures the test runs correctly and paves the way for adding another test to address a related bug.
Original PR description
The unit test is tagged `-standard` and `database_breaking` because it was leaving left overs in the database. Using an `HttpCase` over a `BaseCase` solves that issue in addition to make the code way simpler. We want to resurrect this unit test class because we plan to add another unit test in that class for a bug fix. Forward-Port-Of: odoo/odoo#262288 Forward-Port-Of: odoo/odoo#261743
This update streamlines the process of translating website views within Odoo Enterprise. Previously, translations were handled in a complex way, but a recent change in how views are retrieved has made this unnecessary. This optimization improves performance and simplifies the system.
Original PR description
Reverts commit b0d4aba as changes to the way views are fetched removes the need for the changes included in the fix.
This pull request streamlines website translations by removing unnecessary code changes. The core update to how views are retrieved has eliminated the need for a previous fix, resulting in a more efficient and focused approach to translating website content. This improves performance and reduces complexity.
Original PR description
Reverts commit 492da35 as changes to the way views are fetched removes the need for the changes included in the fix.
This update corrects a misleading validation error that appeared when using the translation button on Sale Order Templates. Previously, users received an incorrect error message instead of guidance on required fields. The fix ensures the system correctly handles nested records, providing accurate feedback during translation setup.
Original PR description
Steps to reproduce: * Enable multiple languages * Go to Sale Order Templates and create a new template * Add a product line, then click the translate button on the description field * A confusing…
Steps to reproduce: * Enable multiple languages * Go to Sale Order Templates and create a new template * Add a product line, then click the translate button on the description field * A confusing validation error appears for missing `sale_order_template_id` Issue: * Instead of highlighting the missing required fields on the sale order template form view, it raises a misleading validation error on `sale_order_template_id` Cause: * `useTranslationDialog` always attempts to save the passed record directly. In O2M list views, the field can belong to a nested relational record, so the correct behavior is to save the root record instead. Affected Version: 17.0 Before: <img width="1919" height="1014" alt="image" src="https://github.com/user-attachments/assets/cd61381d-289a-4df4-bdf2-7881fa851939" /> After: <img width="1920" height="887" alt="image" src="https://github.com/user-attachments/assets/5218c74b-c024-4994-b816-cb7ae69b420f" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262988 Forward-Port-Of: odoo/odoo#262755
This update fixes a frustrating issue where clicking 'Discard' in the Sign Template would cause a distracting flicker and a complex reload. Now, the discard process happens seamlessly within the existing page, providing a smoother and more reliable user experience for signing documents.
Original PR description
Before this commit, clicking Discard in Sign Template reloaded the action/PDF iframe, which caused flicker. The discard flow was also more complex than needed and field normalization was noisy. After this commit, discard now happens in place: we fetch fresh sign items/radio sets, reset fields inside the existing iframe, and keep the page mounted with no reload. task-6121560 Forward-Port-Of: odoo/enterprise#114702 Forward-Port-Of: odoo/enterprise#113853
This update corrects a bug where child contacts linked to Spanish companies were incorrectly identified as companies themselves. The change ensures that only companies with their own commercial entities are recognized as such, aligning with Spanish tax regulations. This improves data accuracy for Spanish businesses.
Original PR description
Problem: When l10n_es is installed, child contacts of a Spanish company are incorrectly considered as companies as well. Steps to reproduce: 1. Install l10n_es 2. Create a company with a Spanish VAT number (e.g. ESA12345678) 3. Create a child contact under that company 4. The child contact will be incorrectly considered as a company Cause: If l10n_es is installed, any partner with a Spanish VAT number is considered as a company. Since child contacts share the same VAT as their company, they would be considered as companies as well, which is not correct. However, a partner should only be considered as a company if they are their own commercial entity. https://github.com/odoo/odoo/blob/e6bd6b106c376336594edd868c09505032008ac1/odoo/addons/base/models/res_partner.py#L819 Similar to https://github.com/odoo/enterprise/commit/3536cdd opw-6132064 Forward-Port-Of: odoo/odoo#262713
This update fixes a bug in how tax reports calculate balances. Previously, a leading hyphen in a tax tag formula caused incorrect results, consistently showing a zero balance. Now, the system correctly interprets a hyphenated tag as a negative balance, ensuring accurate report calculations.
Original PR description
When writing a new formula on a tax_tags expression, if the tag is not shared by other expressions, the tag should be renamed accordingly. Before this commit, when the new formula started with a '-' sign, the tag ended up with that same '-' at the beginning of its name. This was wrong: from 19.0 on, a tax tags formula starting with '-' means we want to negate the balance of the move lines having that tag. Because of that, when computing the report, the expression would look for a tag without the '-' in its name, not find it and essentially always compute a result of 0. Forward-Port-Of: odoo/odoo#262059
This update resolves a technical issue that could cause errors when closing all conversations in Odoo. The fix prevents a re-render from triggering a traceback, ensuring a smoother and more reliable chat closing experience. This improves overall system stability.
Original PR description
When closing all conversations from ChatHub, setting `confirmCloseResolver` to `null` in `_canClose()` starts a re-render of ChatHub and ChatWindow, but the render does not complete and `requestClose()` continues. During this flow, `close()` deletes the chat window, and when the re-render of ChatWindow actions continues, the call and camera-call action name callbacks try to access `channel.hasRtcSessionActive`, causing a traceback. This commit fixes the issue by adding optional chaining on channel in the name functions of the call and camera-call thread actions. Task-[6120744](https://www.odoo.com/odoo/project/1519/tasks/6120744) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a potential issue where the mobile app could unexpectedly log users out due to automatic session rotation. Specifically, it allows the mobile app to temporarily bypass session rotation for certain requests, like those made through webviews, ensuring a smoother user experience. This change doesn't introduce any security risks.
Original PR description
The session id rotates softly every 3 hours For some features, the mobile app sometimes does requests "outside" of the mobile app, through a webview for instance, and if the session rotation interval…
The session id rotates softly every 3 hours For some features, the mobile app sometimes does requests "outside" of the mobile app, through a webview for instance, and if the session rotation interval is reached at that moment, it rotates the session and the `set-cookie` instruction setting the new session cookie is received by the webview only, it's not propagated back to the mobile app. Then, this could lead for the user to be logged out of the mobile app if the soft automatic session rotation happens at the very unfortunate moment the request through that webview happens. For instance, the mobile app uses a webview to download attachments. If the session rotation happened during that request, the mobile app doesn't receive the `set-cookie` header and doesn't receive the new session id, leading for the user to be logged out of the mobile app. This revision aims to provide an option for the mobile app to temporary skip the session rotation for a specific request, such as the requests done through the webview during downloads. This option to be able to disable the rotation is not a security threat: If an attacker passes that header to disable the interval session rotation, he would avoid the session to be changed every 3 hours, but if he wouldn't he would still receive the new session id every 3 hours. The session rotation is for legitimate user / computer to rotate their session every 3 hours so that in case of data leak of their browser cookies, there is a chance the session cookie is already no longer valid when published on the public web. Legitimate users have no benefit using this option header to disable the rotation. Forward-Port-Of: odoo/odoo#263325
This update resolves an issue where payment reminders wouldn't display correctly when the 'Payment' module wasn't installed. The fix ensures the system checks for the necessary 'payment.method' model before attempting to use it, preventing template rendering errors. This ensures payment reminders function properly regardless of the installed modules.
Original PR description
Repro steps: 1. Initialize a new DB 2. Install account_followup module without payment module 3. Go to Email templates > Payment reminder 4. Click on Preview You will get an error Failed to render QWeb template for Mail Template: 'Payment Reminder' (ID: 9) Target Model: res.partner Language context: en_US Error: Error while render the template KeyError: 'payment.method' Root cause: The method `_show_pay_now_button` that was being called in the template email_template_followup_1 was using self.env['payment.method'] even tho payment module is not a dependency of account_followup Fix: The introduced fix ensures that 'payment.method' model exists before attempting to use it build_error-243030 Forward-Port-Of: odoo/enterprise#116692 Forward-Port-Of: odoo/enterprise#116079
This update resolves an issue preventing users from correctly booking appointments with multiple participants when flexible scheduling and capacity limits are enabled. The fix corrects a technical error related to how appointment slots are generated, ensuring the booking process functions as intended.
Original PR description
### Steps to reproduce: - Download "Appointment" and "Website" - Configure an appointment to be booked by resource with multiple seats and manage capacity - Set the schedule to be flexible and configure valid time slots - Go to the booking page and select the number of participants > Traceback: cannot unpack non-iterable bool object ### Cause of Issue: The `_get_appointment_slots` method unpacks the `appointment_slots_force_month` directly: https://github.com/odoo/enterprise/blob/4ca3dddaeadeb6c937d555cc4da8fb4bb61fea35/appointment/models/appointment_type.py#L871 Since the `appointment_slots_force_month` value was explicitly set to `False` in https://github.com/odoo/enterprise/blob/4ca3dddaeadeb6c937d555cc4da8fb4bb61fea35/appointment/controllers/appointment.py#L1063-L1070 the unpacking operation failed because it tried to unpack a boolean instead of a tuple. opw-6197653 Forward-Port-Of: odoo/enterprise#116671 Forward-Port-Of: odoo/enterprise#116613
The budget report now accurately displays financial data without duplicate analytic lines. This change addresses an issue caused by a recent performance optimization of the budget report query, which inadvertently created duplicate entries. The fix ensures data integrity and reliable reporting.
Original PR description
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item…
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item (linked to Analytic Account A). - Open the budget report and remove the default "open budget" filter. Duplicate amounts appear in the pivot view and duplicate lines appear in the list view. #### Cause: In #104299, the query in `_get_aal_query` was refactored for performance to avoid a single query with an OR condition in the LEFT JOIN. It was replaced by two separate queries combined with `UNION ALL`. This caused some lines to be captured by both queries, resulting in duplicates in the final report. #### Fix: Use three separate queries, each with specific filter conditions to guarantee unique results: Q1 - Analytic lines with no matching budget line. Q2 - Analytic lines matched to a budget line with no company (null-company). Q3 - Analytic lines matched to a company-specific budget line. OPW-6051696 Forward-Port-Of: odoo/enterprise#116612