Daily updates from Odoo
Thursday, January 29, 2026
6 changes · 17.0
Resolved issues and error corrections
This update fixes an issue where the work order planning views would lose their dependency links after a page refresh. The change ensures that the correct view, including dependency links, is always displayed, regardless of page reload. This improves the accuracy of production planning.
Original PR description
**Behaviour:** When accessing the Planning by Production/Workcenter views from the menu, a server action checks if the work order dependencies setting is enabled, and if yes, it will change the ref…
**Behaviour:** When accessing the Planning by Production/Workcenter views from the menu, a server action checks if the work order dependencies setting is enabled, and if yes, it will change the ref of the default gantt view to another view which handles dependencies. However, when reloading the page, the server action is not accessed anymore which will result in the default view being loaded and the dependencies not being represented. This behaviour is fixed starting from 18.2 with this commit ( https://github.com/odoo/odoo/commit/b663a6e3dbda6eda84e4a6b051acfc8511476cd3 ) that ensures that if a page is reloaded the current action's state is restored as it was. Applying this commit to previous versions would not comply with stable policy, the current solution is to override the get_views method to make sure the presence of the setting is checked and the correct view is applied whenever that page is loaded. **Steps to reproduce:** - Check Work Orders->Work Order Dependencies in the Manufacturing settings - Create a Product - Create a Bill of materials with two components - Check Operation Dependencies in the Miscellaneous tab - Create two operations, and make one of them blocked by the other - Create a Manufacturing order for the product then click confirm then Plan - In the Planning dropdown menu, select Planning by Production (workcenter works aswell) - You will see the two operations with an arrow linking them. - Refresh the page - The arrow will have disapeared opw-5477803
This update corrects inaccuracies in the Spanish tax reporting formulas (Mod390) for 2025. The changes align with the latest regulations from the Agencia Tributaria, ensuring accurate reporting and compliance. This fix addresses a critical error impacting tax calculations.
Original PR description
Currently report line formulas for box 33 and 34 are wrong, as they are not according to the regulation. https://sede.agenciatributaria.gob.es/static_files/Sede/Procedimiento_ayuda/G412/Instrucciones_modelo_390-2025.pdf Box 33 is missing the sum of 27, 29, 649 and 31 Box 34 is missing the sum of 28, 30, 650 and 32 Updating mod390 report for 2025 opw-5498345
This update fixes a misclassification of account 649 in the French Profit and Loss report. The change aligns the report with French accounting standards (PCG 2025 & 2026), ensuring accurate financial reporting for French businesses using Odoo. This improves the report's compliance and reliability.
Original PR description
## Issue In the *Profit and Loss* report for the French localization (`l10n_fr_reports`), the account 649 was mentioned in the *"Reversals of provisions (and depreciation), expense transfers"*…
## Issue
In the *Profit and Loss* report for the French localization (`l10n_fr_reports`), the account 649 was mentioned in the *"Reversals of provisions (and depreciation), expense transfers"* section, instead of *"Wages and salaries"* and *"Social security charges"*. This classification is described in the *"Recueil des normes comptables françaises"* (Versions [2025](https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/Reglements/Recueils/PCG_Janvier2025/Recueil-NF-Janvier-2025.pdf) and [2026](https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/recueil/RECEUIL-PCG-2026-AVEC-COUVERTURE.pdf)).
## Steps to reproduce
1. Install *France - Accounting Reports* (`l10n_fr_reports`)
2. Go to the *Profit and Loss* report
3. In debug mode, click the information buttons on the following rows:
- *Reversals of provisions (and depreciation), expense tranfers*: **649 is mentioned**
- *Wages and salaries*: **649 is not mentioned**
- *Social security charges*: **649 is not mentioned**
## Note
The account 649 was added at the beginning of the formula for the *"Wages and salaries"* section in order to respect a logical order. In the *"Social security charges"* formula, since no logical order appears to be used, the account was added at the end.
opw-5724559This update resolves an issue where modifying the quantity of a subcontracting receipt could lead to incorrect quantities displayed on the move line. The fix addresses a problem triggered by a BOM modification after a purchase order is created, ensuring accurate stock tracking within the subcontracting process.
Original PR description
**Issue** In subcontracting, if a BOM is modified after the creation of a PO, then modifying the move quantity of the associated receipt can lead to inconsistency between move and move line…
**Issue** In subcontracting, if a BOM is modified after the creation of a PO, then modifying the move quantity of the associated receipt can lead to inconsistency between move and move line quantities. **Steps to reproduce** - Create a subcontracting BOM of a final product using 1 component product - Create a PO of the final product for a quantity of 10 and confirm it - Modify the BOM to use 2 component products instead - Go to the receipt of the PO and modify the quantity to 2 and validate it - Click on the move line of the receipt -> The displayed quantity is 10 instead of 2 **Cause** Setting the quantity triggers this line: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/stock_move.py#L78-L78 which calls: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/stock_move.py#L107 Since the BOM has been modified, a `consumption_issues` is detected and `_update_finished_move()` won't be called: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/mrp_production.py#L86-L89 And since the returned action is not used when calling `subcontracting_record_component`, `_update_finished_move()` won't be called later neither, which is the method responsible for updating the move line quantities: https://github.com/odoo/odoo/blob/c496235b9520b2a33040174974de7d37e74b0580/addons/mrp_subcontracting/models/mrp_production.py#L142-L146 **Solution** Since the consumption issue actions are ignored in this case, just skipped it and avoid inconsistencies. opw-5493577
This update fixes an issue where invalid responses from the Zatca system were causing user tracebacks. The change now includes better error handling and checks the length of CSR fields before sending data, addressing a new requirement from Zatca regarding CSR field lengths. This ensures smoother onboarding for users in Saudi Arabia.
Original PR description
Previously, it was assumed that if no 'error' or 'errors' key was present that means we've received a valid response for obtaining CCSID or PCSID. But sometimes the error is not sent with those keys, and the binarySecurityToken is missing, therefore a traceback is shown to the user because the invalid requests passes through the validation unnoticed. This kind of response is the result of a new change introduced by zatca requiring csr fields to be at most 64 characters long. This commit improves the error handling mechanism of CSID responses, to show the user an informative message, and handles the length check for csr fields on the client side before sending to zatca. task-5347269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where attendance overlaps weren't being correctly counted towards hourly accrual plans. The change adjusts how attendances are processed to accurately reflect worked time, ensuring employees receive the correct accrual amounts. This improves the reliability of time-off calculations.
Original PR description
### Issue: Attendances overlapping on two days are ignored for hourly accrual plans based on attendances. ### Steps to reproduce: - Install 'hr_holidays_attendance' - In Time Off > Configuration >…
### Issue: Attendances overlapping on two days are ignored for hourly accrual plans based on attendances. ### Steps to reproduce: - Install 'hr_holidays_attendance' - In Time Off > Configuration > Accrual Plan, create a new plan - Based on worked time - Hourly rule - Attendances as Source - In Management > Allocations, create an allocation for an employee using the new accrual plan - Create an Attendance for this employee in the period of the Accrual Plan - Check-in at 22pm for example - Check-out at 7am - Run the cron "Accrual Time Off: Updates the number of time off" - The Allocation ignores the worked time from the attendance ### Cause: `_get_accrual_plan_level_work_entry_prorata()` is called on each day of the accrual period. So `start_dt` is `datetime.datetime(2026, 1, 2, 0, 0)` and `end_dt` is `datetime.datetime(2026, 1, 3, 0, 0)` for example. This means that the search will always excludes attendances overlapping on two days. https://github.com/odoo/odoo/blob/26f3026ed45cc409cd7f67fa219d44f1adbac9b7/addons/hr_holidays_attendance/models/hr_leave_allocation.py#L79-L83 ### Solution: To count the attendances on several days, we need to split these attendances by day because `_get_accrual_plan_level_work_entry_prorata()` is only called with an interval of one day from midnight to midnight. First we get all attendances overlapping with the day by changing the domain in the search. Then we could simply take the difference between `max(attendance.check_in, start_dt)` and `min(attendance.check_out, end_dt)` but we also need to remove the lunch breaks (they were not counted in `attendance.worked_hours`). This would mean duplicating the code present in `_compute_worked_hours()`. To avoid this we create a new method for `hr.attendance` named `_get_worked_hours_in_range()`. That returns the number of hours worked due to this attendance in a given time frame. This new method can be used in both cases to get the needed value. opw-5172669