Thursday, June 26, 2025
16 changes
3 changes
Enhancements to existing features
Installing the main AI module now also installs the related AI Fields and AI Server Actions features. This makes setup simpler and ensures users get the full AI experience without needing to install extra modules separately.
Original PR description
Improving UX by adding all of the AI related functionalities when AI module is installed. issue ticket task-4855178 Divagations --- In the future (19.0) the ai_fields and ai_server_actions modules should be merged into the ai module. with ticket task-4889610
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
4 changes
New functionality added to Odoo
Users can now resend or cancel failed WhatsApp messages directly from the failed message indicator. This helps teams recover from delivery issues without losing failure details, even after original WhatsApp message records are cleaned up.
Original PR description
PURPOSE This commit allows users to manage failed or bounced WhatsApp messages by resending or canceling them, similar to mail, sms notifications. SPECIFICATION A new WhatsApp Resend composer lets users resend or cancel failed messages. Users can access this option from the WhatsApp icon on failed messages. Task-4267356
9 changes
New functionality added to Odoo
This change adds a new health plan data area and links it to CRM leads, allowing teams to capture and view health plan information during customer follow-up. It can help sales or service teams organize health-plan-related opportunities more consistently.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- 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
Enhancements to existing features
Sales subscriptions now show a clear warning when an overdue subscription is at risk of being automatically closed if it is not billed soon. This helps teams act earlier to prevent unintended subscription closures and potential revenue loss.
Original PR description
This commit adds an alert-info warning that the subscription is overdue and will be automatically closed by the system if it is not billed soon. Technically speaking, when the subscription has the `next_invoice_date` older than its `end_date` AND it is currently with in-progress state, this alert will be shown. task-4243863
The spreadsheet interface has been reorganized to make common actions easier to find and the top bar clearer to use. Users now see collaboration presence more directly, while saving and sharing-related options are placed in more intuitive locations, improving day-to-day spreadsheet editing.
Original PR description
Task: 4812824
This update advances the Colombian electronic invoicing and DIAN integration setup based on the current specification work. It improves configuration, demo data, invoice screens, templates, and supporting validation logic so Colombian localization flows can be tested and prepared more reliably.
Original PR description
implemented points 1-3 in spec
Enhancements to existing features
When an online payment provider is activated, Odoo now automatically assigns the appropriate outstanding account to the payment method it creates. This keeps online payment setup consistent with invoicing rules and reduces manual accounting configuration for integrated providers.
Original PR description
In this PR: - When activating an Online Payment provider that creates a payment.method.line in a journal, automatically assign an Outstanding account to the payment method. - Uses the existing Outstanding Account resolution method from Invoicing module to ensure consistency across the system. - Applied to all Online Payment Providers that rely on provider integration, excluding manual payment providers without external integrations. task-4826385
Australian payroll rule parameters have been updated for the 2025 period to keep payroll calculations aligned with current requirements. This helps businesses using Australian payroll process payslips with the latest applicable values.
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