Thursday, June 26, 2025
8 changes
2 changes
Resolved issues and error corrections
The IoT printer list now consistently keeps the same printer when duplicate printers share the same IP address and device ID. This prevents printers from appearing or disappearing randomly in the device list, improving reliability for users managing connected printers.
Original PR description
There was a flaw in the printer deduplication logic that meant that in the case where we have two printers with the same IP and the same device-id, the printer that was returned could change randomly with each `get_devices` call. The result was the printers appearing and disappearing randomly in the device list. We fix this by sorting the list of printers first. If multiple printers could be chosen, we take the first one based on identifier. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website forms with many conditional visibility rules now load much faster. The change avoids repeated recalculation of the same form information, reducing delays for visitors and improving the form experience.
Original PR description
**Problem** Before this commit, the `Form` interaction handled visibility calculations inefficiently. Large forms making massive use of visibility conditions could take seconds to be loaded. The function `getFormDataIncludingDisabledFields` (see [1]) was called more often than necessary, leading to the entire form being cloned for every single entry being checked. **Solution** This commit introduces a simple caching mechanism for the form data. The cached value is updated via `getFormDataIncludingDisabledFields` only at the start of the interaction and when receiving user input (debounced). [1] https://github.com/odoo/odoo/pull/213643 task-4367641
6 changes
Resolved issues and error corrections
Merging purchase orders that include note or section lines now completes without triggering an error. This prevents users from being blocked when consolidating purchase orders, improving reliability in the purchasing workflow.
Original PR description
Steps to reproduce the bug:
- Create two purchase orders and add a note
- Try to merge them
Problem:
A traceback is triggered:
```
ValueError: AttributeError("'int' object has no attribute
'total_seconds'") while evaluating 'if records:\n
action = records.action_merge()'
```
opw-4890120Sales orders that create multiple service projects now reuse the intended analytic account instead of creating extra ones. This keeps project accounting cleaner and avoids redundant records when timesheets are enabled.
Original PR description
Prior to this commit, when a sale order was created with some service products configured to generate projects at SO confirmation, we would generate an analytic account per project instead of just one for all the generated projects. As a result, we would get redundant analytic accounts, which is not desirable. This is because we were creating the new projects without specifying the analytic account that would be set to it (because we would assume that the project would be first created without AA, then we would populate it later). The issue is that if `hr_timesheet` is installed, every new project is by default timesheetable, so that it generates an AA automatically at creation of the project (see `create()` method of `hr_timesheet`) To mitigate that, we now specify the analytic account to be used when creating the projects that have to be generated from `_timesheet_create_project()`. version-18.0 task-4854817
PDF versions of accounting reports now display correctly when using right-to-left languages, even with many columns. This prevents report content from being cut off, making printed Aged Payable and similar reports usable for RTL-language users.
Original PR description
Steps to reproduce: - Set language to RTL Orientation - Go to Accounting > Reporting > Aged Payable - Add multiple columns to report - Print as PDF Issue: When enough columns have been added to the report, the report will overflow the right side of the page Cause: Wkhtmltopdf does not correctly shrink the table if the direction is specified on the body of the document opw-4746361
Recurring field service tasks created from subscription sales now keep the related sales order item. This helps teams maintain accurate links between repeat service work and the customer order, avoiding missing sales context on follow-up tasks.
Original PR description
Steps to reproduce
- install `industry_fsm_sale_subscription`
- go to settings -> enable `recurring task`
- create product with following configs :
* enable `subscription`
* product type : `service`
* create on order `task`
* project `Field service`

- create a SO with this product
- go to `Tasks` smart button
- select the task and mark it done
- open the second task, from "recurring tasks" smart button
Obervation: in newly created task `Sales Order Item` is not linked
Issue:
- after this commit odoo/enterprise@be201cd ,sale fields are not copied for fsm task. while this is true for simple tasks, we would require such fields to be copied for recurrence tasks
Fix:
- allow sale fields to be copied for recurring tasks
opw-4875830Fixes an issue in Barcode receipts where removing serial-numbered product lines could remove the wrong serial number. This prevents valid serial numbers from being incorrectly marked as already used when warehouse staff re-enter them.
Original PR description
Steps to reproduce: - Install Purchase, Stock and Barcode apps - Create a product tracked by serial number - Create a PO of this product and confirm it (demand 3) - Open Barcode application for the PO's receipt - Start entering serial numbers for the 3 products - For each line, use the decrement button and remove all 3 lines - Make sure the last removed line is not the first scanned serial - Re-enter the serial number of the last removed line Issue: The parent line of the 3 sublines has the lot_name fixed on the first scanned serial_number. So when decrementing the last_line, it will always use the virtual_id of the first serial_number scanned, leading to decrementing the wrong serial number. It starts showing that the next scanned number is already used, because it wasn't properly removed in the first place. opw-4646765
The timer now correctly resumes from the paused point instead of counting the time spent paused. This helps users and managers rely on accurate time tracking for work logs, billing, and productivity reporting.
Original PR description
Before this commit, when a timer was paused and then resumed, it incorrectly included the paused duration in the time. This commit ensures the timer resumes from the paused time using the initial offset, resulting in accurate time tracking. task-4734681