Daily updates from Odoo
Thursday, September 18, 2025
7 changes · 18.0
Enhancements to existing features
Accounting KPI summaries now include posted bank journal entries linked to unreconciled bank statements. This gives businesses a more accurate view of pending bank activity and improves confidence in financial reporting metrics.
Original PR description
### [REF] account: reorganize kpi.provider tests The account test_kpi_provider was already getting complicated, and this commit aims to simplify it by breaking it into smaller tests that show more clearly what is expected. Task-id: 5062431 ### [IMP] account: make kpi.provider report unreconciled bank statements The `kpi.provider:get_account_kpi_summary` method should include posted moves of a bank journal that are related to an unreconciled bank statement. Task-id: 5062431 Forward-Port-Of: odoo/odoo#227661 Forward-Port-Of: odoo/odoo#227605
Resolved issues and error corrections
Payroll users with Administrator access can now cancel completed payslips as intended. This removes an incorrect permission check that blocked authorized payroll staff and interrupted normal payroll corrections.
Original PR description
steps to reproduce: ------------------- 1. Install payroll 2. Create a user and grant "Administrator" access to Payroll. 3. Log in as the new user and try to cancel a 'Done' payslip. issue: ------ A UserError is raised: "Cannot cancel a payslip that is done." observation: ------------ A user with Payroll "Administrator" access is unable to cancel a payroll payslip cause of the issue: ------------------- During cancellation, the system checks whether the user is "Admin" instead of verifying if the user has Payroll "Administrator" access. https://github.com/odoo/enterprise/blob/13832d80570956e504e1c09f41acbeb0bc4baedc/hr_payroll/models/hr_payslip.py#L509-L513 solution: ---------- Check that the user has Payroll "Administrator" access. opw-5040029 Forward-Port-Of: odoo/enterprise#93831
This fix makes automated invoice date checks for Mexican electronic invoicing less sensitive to tiny timing differences. It helps avoid false test failures without changing customer-facing invoicing behavior.
Original PR description
ignored micro-seconds in CFDI date assertion to avoid test failure build_error-223223
This update prevents an error that could occur when a customer has open carts on multiple eCommerce sites and changes their address. Loyalty rewards and cart pricing are now recalculated safely across multiple carts, helping customers continue checkout without interruption.
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have 2 eCommerce sites; 2. have a user with an open cart in both sites; 3. have a reward applied in one or both of carts; 4. have a fiscal position applicable…
Versions -------- - 16.0+ Steps ----- 1. Have 2 eCommerce sites; 2. have a user with an open cart in both sites; 3. have a reward applied in one or both of carts; 4. have a fiscal position applicable to the user's address; 5. change the user's country to one with a different fiscal position. Issue ----- > ValueError: Expected singleton: sale.order(1, 2) Cause ----- As of commit ede8846987a98, fiscal positions get recomputed on address changes. When a fiscal position changes, the `_recompute_prices` method gets called on all open carts. This method does not include an `ensure_one` check, so it should be able to handle multiple sales orders. However, the `sale_loyalty` override will call `_update_programs_and_rewards` on `self` if any reward line is encountered. This method does have an `ensure_one` check, leading to the error. Solution -------- Rewrite the override as a loop, so it can handle multiple records in `self`. opw-5017669 Forward-Port-Of: odoo/odoo#224225
Purchase entries in India's GSTR-3B report now include credit notes, receipts, and other relevant purchase records so totals are accurate. Purchase-related lines were also removed from the POS-specific report area because point-of-sale activity is not related to purchase records, reducing incorrect reporting.
Original PR description
Currently, purchase entries are not displaying the correct data because the credit notes and receipts were not included. This PR removes purchase-related data from `l10n_in_reports_gstr_pos` (as POS has no relation to purchase records) and ensures that credit note data and other purchase records are properly displayed in the GSTR-3B report. **opw**-5079401 Forward-Port-Of: odoo/enterprise#95027 Forward-Port-Of: odoo/enterprise#94582
This fix prevents Odoo's core data loading process from crashing in rare cases involving invalid or mixed record references. It improves system stability and consistency without changing normal user workflows.
Original PR description
This commit addresses two corner cases that cause `fetch()` to crash: Mixing new and real records: - Issue: If a recordset contains both new and real records, `fetch()` raises an `AccessError`. - Rationale: While we typically assume that new and real records are never mixed, certain recordset operations can inadvertently lead to this state. Handling this case improves the overall robustness of the ORM. Using `False` as a record id: - Issue: Using a record with a `False` id, such as `browse([False])`, causes a SQL error when `fetch()` is called. - Rationale: Other operations, like `browse([False]).name`, work without crashing. To ensure consistency across the ORM, `fetch()` should also handle `False` ids without error.
This fix ensures Odoo VoIP sends the correct connection information when using secure web calling. As a result, users can reliably receive incoming calls in setups that use secure WSS connections.
Original PR description
### Before this PR Using voip with WSS, it can't receive calls because the current transport is not sent to the PBX. ### After this PR: The right transport is sent