Daily updates from Odoo
Monday, September 1, 2025
23 changes · master
Resolved issues and error corrections
This fix makes the French VAT report wizard handle incomplete draft records safely, avoiding crashes during automated checks or setup flows. It ensures VAT amounts are recalculated when key report dates or report selections change, improving reliability without changing the visible reporting workflow.
Original PR description
steps to reproduce the issue : 1- install l10n_fr_hr_payroll_account without demo data 2- and run this test .test_computed_fields_without_dependencies Added a dependencies using…
steps to reproduce the issue :
1- install l10n_fr_hr_payroll_account without demo data
2- and run this test .test_computed_fields_without_dependencies
Added a dependencies using @api.depends('report_id', 'date_from', 'date_to') on the _compute_vat_amount method to ensure automatic re-evaluation when any of these fields change.
In test_computed_fields_without_dependencies, the record is created using model.new(), which means required fields like report_id, date_from, and date_to may not be set yet. This caused a crash due to ensure_one() on an empty report_id.
Even though these fields are required, they are not automatically filled when using model.new() (unlike saved records).
Also introduced early exits by setting default values (vat_amount = 0.0, is_vat_due = False) and skipping computation when any of the required fields (report_id, date_from, date_to) or result VAT lines are missing because of ensure_one() in options.
These safeguards prevent errors in the test
build_error-115299
Forward-Port-Of: odoo/enterprise#87608Bank statements can now be created even when a bank journal has no outstanding receipt or payment account configured. This prevents an error that blocked users during statement creation in Accounting.
Original PR description
**Steps to reproduce:** - Install Accounting - Make sure that no outstanding receipt/payment account is configured on the Bank journal - Go to the Bank journal - Create a new statement **Issue:** A traceback is raised while executing a SQL query. **Cause:** A IN condition is evaluated with an empty tuple: `AND aml.account_id IN ()` This is due to the fact that there is no outstanding account. **Solution:** Only execute the SQL query if there is an outstanding account. opw-5039931 Forward-Port-Of: odoo/enterprise#93091
The Estonian tax report XML export now avoids creating duplicate 22% tax transaction entries. It combines the relevant report line balances into a single XML entry, helping businesses submit cleaner and more accurate tax reports.
Original PR description
Before this pr: - There are two transactions22 entries were introduced because we are having two report lines for 22% tax computation, one with '1' tag, which is valid till 31 June 2025, and another one with '1_2' tag, which is valid from 1 July 2025. After this pr: - The balance computation during export to XML is now adding the balance of both line '1' and '1_2' into line '1' only. - So now we do not need an extra transactions22 entry in the XML tax report. - We are keeping both report lines for now, but the XML report will have only one entry with the total sum of balances in both report lines Related PR: https://github.com/odoo/enterprise/pull/91364 Forward-Port-Of: odoo/enterprise#93298 Forward-Port-Of: odoo/enterprise#92662
The French VAT reporting process now uses the correct account when creating reimbursement entries. This helps ensure reimbursement accounting is posted accurately and reduces the need for manual corrections.
Original PR description
This commit will change the account used for the reimbursement move. task-4932427 Forward-Port-Of: odoo/enterprise#91212
The timesheet leaderboard now correctly shows the tip of the day when the leaderboard feature is enabled. This restores expected guidance for users viewing leaderboard dialogs and timer grid screens.
Original PR description
Steps to Reproduce: -- - Open timesheet module - Go to setting and enabled leaderboard feature - Open leaderboard dialog and there you will be able to see tip of the day is not visible Issue: -- The issue was even after enabling the leaderboard feature the tip of the day was not visible inside the leaderboard dialog which is unexpected behaviour. Cause: -- The root cause was inside the getLeaderboardData method call where we were not fetching tip from the orm call and the issue is caused by this PR https://github.com/odoo/enterprise/pull/78541 Fix: -- To resolve this, I have include tip while making orm call also store that tip value inside leaderboardData task-4981767 Forward-Port-Of: odoo/enterprise#92811
Fixes an issue where Mexican sales orders could show zero invoiced quantity after an invoice cancellation was completed through CFDI. The sales order now updates its invoiced quantities when the CFDI status changes, helping keep order and billing records accurate.
Original PR description
How to reproduce the issue: In l10n_mx: 1. Create a sale order. 2. Create an invoice from the SO, with yesterday’s date, and send it to the CFDI. 3. Lock the period at yesterday’s date. 4. Request the invoice cancellation with the “01” method. This creates a new invoice — confirm it. 5. Create a credit note for the original invoice. 6. Retry sending the cancel request to the CFDI; the CFDI state is now cancelled for the original invoice. On the original SO, the quantity invoiced is 0 despite the CFDI state of the original invoice being cancelled. This commit forces a recompute of the quantity invoiced when the CFDI state changes. Since _compute_qty_invoiced uses _get_invoice_lines, which filters out invoices in sent state, only lines from invoices in cancelled state will be taken into account. opw-4910139 Forward-Port-Of: odoo/enterprise#93480 Forward-Port-Of: odoo/enterprise#91924
Gantt popover cards now show standard labels such as Name, Start, and Stop in the user's selected language. This improves the experience for non-English users when viewing custom Gantt menus created through Studio.
Original PR description
Steps to Reproduce: - Change the language to something other than English. - Create a new menu in the Appointment module using Studio. - Link that menu with the existing model (Resource Time of…
Steps to Reproduce: - Change the language to something other than English. - Create a new menu in the Appointment module using Studio. - Link that menu with the existing model (Resource Time of Detail). - Save the changes and add the Gantt view - Save the changes and close Studio. - View this new menu in the Gantt view Issue: - When clicking onto the kanban popover card for any record, the labels will remain as "Name" , "Start" , and "Stop" in English, and it will not translate. Reason: - [1] changed the rendering of default kanban card templates from XML to JS. This changed the default template to be static. Fix: - Add a call to the translation core tool "_t" on the three labels upon their generation in _getKanbanViewParams(). This ensures that the arch template that is generated is translated correctly into the user's set language. [1] : b2e31239041e6b7850888a3ae070c3f8a40ea5ee [opw-4861899](https://www.odoo.com/odoo/my-tasks/4861899) Forward-Port-Of: odoo/enterprise#90605
Replacing work entries in the Gantt view now correctly creates a new entry using the selected type and the appropriate duration. This helps HR users avoid incorrect work entry totals when updating employee schedules, including empty days where expected working hours are used.
Original PR description
task-5043872
The AI command palette now avoids repeated background lookups while a user types. This prevents flickering and makes the command palette feel steadier and more responsive.
Original PR description
Previously, when typing in the command palette with the AI module installed, the system called `get_ask_ai_agent` on every keystroke. This caused flickering in the command palette. Now, the rpc call is made only once to retrieve the id and name, avoiding repeated calls while typing. task-4997566
This fixes Italian POS receipts so change given back to customers is not sent to fiscal printers as a negative payment. This helps ensure orders are accepted by fiscal printers and properly reported to the authorities.
Original PR description
Before this commit, specifying the payment method used to give back the change in a POS order would lead to the fiscal printer receiving a negative payment as input, which is not supported, thus leading to the order not being treated by the fiscal printer (so not reported to the government). Only the payments with is_change=true where filtered out. I am now adding a filter to only keep the positive payments in the receipt, as the fiscal printer is computing the change itself. opw-4931671 Forward-Port-Of: odoo/enterprise#91794
This update resolves an access problem that could prevent authorized HR users from viewing or using a UAE payroll salary field. The field is now limited to the appropriate HR user group, reducing errors during payroll work.
Original PR description
Issue: - Getting access error on l10n_ae_total_salary as no group defined in the field. Fix: - Added group hr.group_hr_user to this field. task-5028831
This update removes an unnecessary duplicate country field from account reports and restores the ability to edit the main country setting where needed. It also makes automatic generation default correctly for tax return types, helping reduce setup mistakes.
Original PR description
this field is no longer needed since the field country_id contains the necessary information. Also, makes the field country_id readonly=False, it was originally the case and got changed when switched to a computed field Finally, change the recently added field auto_generate to a computed field since we want the default value to be True if it is of category "Tax Return".
Fixes an issue that could block users from deleting a generated bank statement line when the related journal entry used multiple reconciliation rules. This helps accounting users correct bank reconciliations without encountering an unexpected error.
Original PR description
Currently, an error occurs when trying to remove a move line from a bank statement line if the journal entry contains lines with different reconciliation models. **Steps to Reproduce:** 1. Install…
Currently, an error occurs when trying to remove a move line from a bank statement line if the journal entry contains lines with different reconciliation models. **Steps to Reproduce:** 1. Install the Accounting module. 2. Duplicate the "Internal Transfer" reconciliation model. 3. Accounting dashboard > click on Bank > create new record. 4. Add the invoice, apply "Internal Transfer" reconciliation model. 5. Edit the balance of the line to lower, apply duplicated model(Internal Transfers (copy)). 6. Try deleting the generated Liquidity Transfer line. (Refer [this video](https://drive.google.com/file/d/1cz80Q5325x3rqYUlGahVzFIXH2iqrbRF/view?usp=drive_link) for steps to reproduce.) **Error:** ValueError - Expected singleton: account.reconcile.model(8, 6) **Cause:** In the method `delete_reconciled_line` at [1], the `reco_model_id` is fetched from `self.move_id.line_ids.reconcile_model_id`. If the move contains lines linked to multiple reconcile models, this causes a singleton error during subsequent processing. **Fix:** This commit uses the already computed `move_lines_to_remove` to retrieve `reconcile_model_id` instead of accessing it from `self.move_id.line_ids`, which may result in a multi-recordset. [1] - https://github.com/odoo/enterprise/blob/89aa58029a79928788277489414f8192aa5353e4/account_accountant/models/account_bank_statement.py#L1041-L1049 sentry-6781788260 Forward-Port-Of: odoo/enterprise#91619
The automated purchase and rental comparison test now checks the redesigned comparison bottom bar instead of an old removed button. This keeps quality checks aligned with the current shopping experience and helps prevent false test failures.
Original PR description
This PR fixes an issue with the comparison tour, which was still looking for `product_comparison_button`, which was removed in the comparison redesign. It now uses the new bottom bar component instead. task-4911142
Kenyan e-invoicing checks now ignore cancelled or draft credit notes when validating quantities and amounts against the original invoice. This prevents incorrect blocking errors when businesses create replacement credit notes after cancelling earlier ones.
Original PR description
[FIX] l10_ke_edi_edi_oscu: ensure quantity and monetary values checks are performed on reconciled reversals only. Fixes a behavior where the checks performed on the credit notes related to their quantities and monetary values include non reconciled credit notes. Steps to reproduce: 1 - activate `l10n_ke` on some company. 2 - Create an invoice. 3 - Create a partial or full credit note ( this one will be reconciled with the invoice automatically ) 4 - cancel the credit note or reset it to draft. 5 - create another credit note where the quantities and/or monetary values exceed that of the invoice if summed up with the cancelled credit note. Following the steps will result in an error message saying that the monetary value or quantities on the credit notes exceed that of the invoice. The correct behavior is to simply not count any credit note that isn't explicitly reconciled with the invoice. opw-4779976 Forward-Port-Of: odoo/enterprise#92319
Sales commission reports now use the right database access mode when preparing report data. This prevents warnings or failures when users open commission reports, improving reliability without changing report content.
Original PR description
Since https://github.com/odoo/enterprise/pull/88646 a temporary table is created to speed up computation of commission report. As dislayng the report is creating and dropping the temporary table, it is not compatible anymore with a read only cursor. This commit ensure that a read write cursor is used to prevent warning and errors. task-4982555 Forward-Port-Of: odoo/enterprise#91352
This fix avoids unnecessary warning messages when automated tests create document records from reports that only look like PDFs. It keeps test logs cleaner and reduces noise for teams validating document and accounting workflows.
Original PR description
Following the activation by default of account document synchronization, a lot of tests now create indirectly documents. In test mode, IrActionsReport._pre_render_qweb_pdf renders pdf as html but with the pdf mime type leading to a warning when this fake pdf is provided to documents_document._get_is_multipage method. In odoo/enterprise#90662, we have prevented _get_is_multipage to emit a warning by turning it in an info log when in testing mode, and we detect that the document content is actually a html content. Unfortunately, at that time, pypdf was not emitting a warning so we have done that check when an error happens. To solve the problem we check the content before sending it to pypdf to avoid the pypdf warning. Task-5052041
Fixed an issue where users saw an Aadhaar warning popup unnecessarily when editing signer settings with multiple documents uploaded. Users can now assign roles and save signer changes without irrelevant interruptions.
Original PR description
**Vession:** - saas-18.5 **Steps to reproduce:** - Add Signer - Click three dot menu - Click Edit - Change something / nothing - Save **Issue:** - When multiple documents are uploaded, the Aadhaar popup always appears when opening the signer settings panel. **Solution:** - Added a condition to check for multiple documents and roles before showing the Aadhaar popup. **Impact:** - Now you can upload multiple documents, assign roles, and save without seeing unnecessary warnings. task-5051317
This fixes a payroll settings issue so Croatia-specific configuration options are tied to the correct country. It helps ensure businesses see the appropriate payroll settings for their localization and avoids confusion from incorrect country targeting.
Original PR description
ref - https://github.com/odoo/enterprise/pull/83609
Receipts now correctly show the order tracking number when a point-of-sale setup uses a preparation display or preparation printer. This helps staff and customers match receipts with prepared orders more reliably.
Original PR description
- Ensure the `tracking_number` is dipslayed on receipts for config which use a preparation dipslay or a preparation printer. task-id: 4922308 community PR: https://github.com/odoo/odoo/pull/222094 Forward-Port-Of: odoo/enterprise#93318 Forward-Port-Of: odoo/enterprise#91833
Payslip calculations for terminated employees in Egyptian payroll now continue even when the employee has no annual leave allocation. Instead of crashing, the system treats the remaining leave as zero, helping payroll teams process final payslips reliably.
Original PR description
When computing payslips for terminated employees (archived) with no annual leave allocations, the method `_l10n_eg_get_annual_remaining_leaves` raised a traceback due to missing allocation data. This fix ensures the method safely handles employees without allocations by returning 0 remaining leaves instead of crashing. This guarantees payslip computation works correctly for employees with no leave allocations. task-5026406 Forward-Port-Of: odoo/enterprise#92777
Default values for tax return types are now applied when companies and return types are created, rather than only during initial chart setup. This prevents missing or incorrect defaults when country-specific reporting modules are installed later, improving consistency for accounting compliance setups.
Original PR description
Before the company dependent default values for the return types were set only during the ```_post_load_data``` of the chart template. The issue with this way is that when we install a l10n for instance 10n_be_reports which add new return types, l10n_be would create a new company then trigger the _post_load_data function on return types that existed at that time. The only problem is that return types from l10n_be_reports are still not installed. The change here is that we set the default value on the creation of the company and return type.
Fixed an issue where returning a rental order linked to a Point of Sale picking could incorrectly increase the delivered quantity. This helps keep rental order records accurate after PoS settlement and return workflows.
Original PR description
**Issue:** Before this commit, the qty_delivered was wrong when using the Return button when a Picking was made in PoS **Cause:** The `_compute_qty_delivered` method in `pos_sale` adds `pos_line.qty`…
**Issue:** Before this commit, the qty_delivered was wrong when using the Return button when a Picking was made in PoS **Cause:** The `_compute_qty_delivered` method in `pos_sale` adds `pos_line.qty` to the related `sale_line` each time it runs When there is no PoS order, the method add 0 to the line, so the expected behavior work But when you have a PoS Picking, a quantity was added to `qty_delivered` each time the `rental.order.wizard` is used The issue also occured earlier when the `flush_all()` is called in `_process_order()` **Fix:** There is already a `_compute_qty_delivered` method in `pos_sale_stock_renting` that override the `qty_delivered` But it's restricted by `_are_rental_pickings_enabled()` That's not necessary because we don't use any `stock.picking` in the `_compute_qty_delivered` function, only `stock.move` so we removed that verification To make the code working, we also need to extend the _get_outgoing_incoming_moves() results Because there were also block by a `_are_rental_pickings_enabled()` condition even if there is only moves here We need all the moves to calculate `qty_delivered` properly **Steps to reproduce:** - Create a New Product "Rental PoS" that Can be Rented - Create and confirm a New Rental Order, with any customer and your product - Open a PoS Session - Click on Quotation/Order - Choose the last Order and Settle the order - Click on Yes (to confirm import to PoS) - Click on Payment, select Cash and Pay - Go in the Backend, and to your RO - Click Return and Validate - Before the fix, the Delivered should be 2.0 opw-4877019 Forward-Port-Of: odoo/enterprise#93406 Forward-Port-Of: odoo/enterprise#90510