Daily updates from Odoo
Monday, August 10, 2026
6 changes · 19.0
Resolved issues and error corrections
Portal users now see their pending signature count decrease after they sign a document. This prevents confusion by ensuring the portal dashboard only counts documents still awaiting action from that specific user.
Original PR description
Version: 18.0 Steps to reproduce: - Create a sign request with two signers. - Assign the first signature to a portal user. - Log in as the portal user and sign the document. Issue: After signing, the to-sign count in the portal does not decrease. This is because the query only checks the overall sign request state instead of the individual signer's item state, so the count remains unchanged Fix: Added an item level state check to the count query so it only counts items that are still pending for that specific user. Task ID: 6412976 Forward-Port-Of: odoo/enterprise#125632
Fixes an error that could occur when users turned the No Follow-Up setting on or off for invoices paid in multiple installments. This keeps the Follow-Up Report usable when some installments are already settled and others remain open.
Original PR description
Steps to Reproduce: 1. Configure Payment Term (Accounting > Configuration > Payment Terms) containing multiple installments. 2. Create a Customer Invoice with this Payment Term. 3. Post the invoice.…
Steps to Reproduce:
1. Configure Payment Term (Accounting > Configuration > Payment Terms) containing multiple installments.
2. Create a Customer Invoice with this Payment Term.
3. Post the invoice.
4. Register a payment and fully reconcile one of the installments.
5. Navigate to the customer's Follow-Up Report (Accounting > Reporting > Partner Ledger > Report: Follow-Up Report).
6. Navigate to remaining open installment/account move line for that invoice.
7. Turn On or Off the No Follow-Up toggle for the invoice.
An error occurs when enabling or disabling the No Follow-Up toggle.
Issue:
Enabling or disabling the No Follow-Up toggle on a remaining open installment in the Follow-Up Report raises a server error when the invoice contains multiple installments and one or more installments are already fully reconciled.
Root Cause:
The Follow-Up Report only loads and sends non-fully reconciled account move lines from the JavaScript side through all_line_ids. In action_toggle_no_followup(), when the selected line belongs to an invoice, the code retrieves all receivable/payable lines of the invoice, including fully reconciled installments:
```
move.line_ids.filtered(
lambda line: line.account_type in ('asset_receivable', 'liability_payable'),
)
```
The method then attempts to map every receivable/payable line to a report line ID using aml_id_to_line_id. Since fully reconciled installments are not present in all_line_ids, they are missing from the mapping dictionary, causing a KeyError when accessing:
`aml_id_to_line_id[line.id]
`
Fix:
Restricted the impacted lines to those present in the report by adding a check that the account move line exists in aml_id_to_line_id before performing the mapping:
```
lambda line: line.account_type in ('asset_receivable', 'liability_payable')
and line.id in aml_id_to_line_id
```
opw-6245448
Forward-Port-Of: odoo/enterprise#126156Timesheets now use each employee's scheduled weekly hours when checking weekly totals, rather than comparing part-time schedules against a full-time reference. This prevents correct timesheets from being incorrectly marked as under target for employees on flexible or reduced schedules.
Original PR description
Root cause: For an employee on a flexible working schedule, the weekly overtime shown in the timesheet grid compares the entered total against the full time equivalent of the schedule instead of its…
Root cause: For an employee on a flexible working schedule, the weekly overtime shown in the timesheet grid compares the entered total against the full time equivalent of the schedule instead of its own weekly hours. The target is sent by _count_daily_working_hours: https://github.com/odoo/enterprise/blob/27f3a05ca8a5ad6e8d4537dac4f613e60931f0cd/timesheet_grid/models/hr_employee.py#L117-L119 It reads full_time_required_hours, but since https://github.com/odoo/odoo/commit/5cb102546ea4370b4fe5e4a4f37cccdc90c263fd this field holds the company full time reference used to compute the work time rate, and the hours the schedule actually expects per week are on hours_per_week. So for a part time schedule at 80% of a 42 hours full time, the grid expects 42 hours instead of 33h36 and the weekly total shows in red with a wrong negative overtime. Fix: In _count_daily_working_hours, send the hours_per_week of the calendar as the weekly target and keep full_time_required_hours as a fallback when it is not set. For a full time schedule both fields hold the same value so nothing changes there. The result key stays the same so the grid renderers need no change. Steps to reproduce: 1. Go to Employees > Configuration > Working Schedules and create a schedule with Schedule Type Flexible, Full Time Equivalent 42:00 and Total 33:36 hours per week 2. Assign this schedule to an employee linked to a user 3. As that user, go to Timesheets > My Timesheets 4. On a past week, log 6:44 on Monday and 6:43 from Tuesday to Friday on a project 5. Check the Time Spent weekly total => the weekly total 33:36 shows in red with a -8:24 overtime while the employee worked exactly the 33h36 expected by the schedule Ticket [link](https://www.odoo.com/odoo/project.task/6352965) opw-6352965
This fixes an issue where Indian payroll fields were calculated and shown in employee change logs even when Belgium was the active localization. The change ensures Indian payroll calculations only apply to Indian employee records, keeping payroll tracking relevant and avoiding confusing chatter entries.
Original PR description
[FIX] l10n_in: fix some l10n_in fields computed for other localizations
Bug reproduction:
1 - in localhost install below modules:
→ l10n_in_hr_payroll,l10n_be_hr_payroll,l10n_be_hr_contract_salary
2 - Select BE, IN localizations, but as active one select Belgium. 3 - Go to employee, Laura.
4 - Change her wage to 8000
5 - In the chatter, you will see some indian fields are tracked.
→ Shouldn't be, Laura is Belgium, only BE fields should be tracked
Bug cause:
1 - In the hr.version of l10n_in_hr_payroll:
→ there isn't enough caution in compute methods for other l18ns.
→ e.g., _l10n_in_get_montly_wage returns self.wage
→ self.wage is 8000 and that function leads to positive computations
Bug solution:
1 - Non-indian versions are carefully handled in compute methods
task-6411960This fix helps Odoo use an existing database shortcut when looking for unreconciled accounting entries tied to known accounts. As a result, bank statement matching and reconciliation-related searches can run more efficiently without changing user workflows.
Original PR description
We have a very efficient index for searching unreconciled lines on known accounts. Let's use it.
```python
_unreconciled_index = models.Index("(account_id, partner_id) WHERE reconciled IS NOT TRUE")
```
Before this change, the query planner didn't recognize the index because of its definition being slightly different wrt the null values.The Shop Floor view now preserves the intended order of work orders after refreshes or filter changes. This prevents confusing reshuffling and keeps production teams seeing work orders ordered by status and scheduled start date.
Original PR description
Records already in cache are intended to be sorted by their position in `recordCacheIds` to preserve the previously computed display order. However, `recordCacheIds` stores database record ids (`resId`), and currently the cache lookup incorrectly uses `id` instead. As a result, every lookup returns `-1`, and could lead to inconsistent ordering. Steps to reproduce: 1. Create several manufacturing orders with work orders assigned to the same work center. 2. Give the work orders different states and scheduled start dates. 3. Open Shop Floor and display that work center. 4. Refresh the view or change a filter so the records are recomputed. It should use `resId` so the previously computed display order remains, which is based on state and scheduled start date. Related: odoo/enterprise#74421 opw-6402233 Forward-Port-Of: odoo/enterprise#125928