Daily updates from Odoo
Wednesday, July 8, 2026
12 changes · master
New functionality added to Odoo
Singapore companies can now use SFRS-compliant balance sheet and profit and loss reports directly in Odoo. This helps local businesses prepare financial statements aligned with Singapore reporting requirements with less manual setup.
Original PR description
Add the SFRS-compliant balance sheet and profit and loss reports for the Singapore localization. task-6159102
Enhancements to existing features
The Philippine payroll module now defines which payroll data should be kept up to date automatically. This helps ensure standard salary rules stay current through the scheduled payroll update process, reducing manual maintenance for customers.
Original PR description
Currently, the "Payroll: Update data" cron doesn't work for HK payroll as we never set up the _get_data_files_to_update. We can set up the list of data files to keep up to date to better support our users by automatically keeping non-edited salary rules up to date. task-6360470 Forward-Port-Of: odoo/enterprise#122781
Resolved issues and error corrections
Creating a worksheet template from Field Service and opening it in Studio now correctly links the new template back to the related task or project. This prevents users from losing the selected worksheet setup after closing Studio and returning to their work.
Original PR description
Steps to reproduce: - Open Field Service - Go to any task and create a work sheet on the fly - In the wizard click on Design Template - Close the studio and go back to task Issue: - You can see that…
Steps to reproduce: - Open Field Service - Go to any task and create a work sheet on the fly - In the wizard click on Design Template - Close the studio and go back to task Issue: - You can see that the newly created worksheet is not set Cause: - The reason for not getting set is due to fact that worksheet template is created after we click on Design Template which is a widget of view_widgets. - Therefore the field doesn't get dirty and doesn't get saved. Solution: - By sending a ORM write method that links the worksheet based on res_id and res_model. Technical: - The primary cause the problem occurs is that the worksheet template id is not getting created so worksheet_template_id in the respective model(i.e., project.task or project.project for now) is not getting dirty and the record (project.task or project.project) is not getting saved. - The worksheet template when clicked on "Design Template" button is created with in the widget which redirects to Studio for designing template. - We give the user/dev a chance to pass changed/tampered field name with in the context. - While trying to link worksheet template we check if we received field name from context or else go with default name "worksheet_template_id". - If the write(linnking fails) when throw a error notification as "The worksheet template field name seems to be tampered with, pass it in the context as <b>default_worksheet_template_field_name</b>" Also the only fly creation of worksheet is available only in industry_fsm_report but when it added in other modules such as maintenance this cause the same problem in all the other modules as well when we add Design Template Button. task-3871593
Creating a worksheet template from a service task now properly attaches it to the task after returning from the design screen. This prevents users from losing their newly created worksheet selection and helps the same flow work reliably in other worksheet-enabled areas such as maintenance.
Original PR description
Steps to reproduce: - Open Field Service - Go to any task and create a work sheet on the fly - In the wizard click on Design Template - Close the studio and go back to task Issue: - You can see that the newly created worksheet is not set Cause: - The reason for not getting set is due to fact that worksheet template is created after we click on Design Template which is a widget of view_widgets. - Therefore the field doesn't get dirty and doesn't get saved. Solution: - By sending a ORM write method that links the worksheet based on res_id and res_model. Also the only fly creation of worksheet is available only in industry_fsm_report but when it added in other modules such as maintenance this cause the same problem in all the other modules as well. task-3871593
Fixed an error that occurred when users clicked the AI button while preparing a signature request. This ensures the signature sending workflow remains usable and avoids disruption for users relying on AI assistance in the wizard.
Original PR description
Version: saas-19.3 Steps to Reproduce: 1. Open a sign template and click "Send" 2. Click the AI button in the wizard Issue: Clicking the AI button raises ValueError: "The record must inherit from 'mail.thread'". Cause: `sign.template` does not inherit `mail.thread`, but interfaceKey `mail_composer` requires it. Fix: Added `get interfaceKey()` to `MailComposerChatGPT` so subclasses can override it. `SignAIButton` in `sign_ai` overrides interfaceKey to `html_field_record`. Taskid: 6303226 Forward-Port-Of: odoo/enterprise#120659
Users can now audit Balance Sheet values when the report is grouped by analytic account without encountering an error. This keeps financial report drill-downs reliable and prevents interruptions during accounting analysis.
Original PR description
Currently an error occurs when user tries to audit a cell when Balance Sheet is grouped by an analytic acccount. Steps to replicate: - Install accountant with demo data and turn on Analytic…
Currently an error occurs when user tries to audit a cell when Balance Sheet is grouped by an analytic acccount.
Steps to replicate:
- Install accountant with demo data and turn on Analytic Accounting.
- Open Balance Sheet Report > Group By an Analytic Account > Click on Any Value under an Analytic Account Column.
Error:
```
File '/home/odoo/src/enterprise/saas-19.3/account_reports/models/account_report.py', line 2876, in dispatch_report_action
return report_method(model, *args)
File '/home/odoo/src/enterprise/saas-19.3/account_reports/models/balance_sheet.py', line 28, in action_audit_cell
action['context'].update({
AttributeError: 'str' object has no attribute 'update'
```
Cause:
- When clicking on a report cell, `dispatch_report_action()` calls `action_audit_cell()` of the corresponding report (Balance Sheet in this case) which in turn calls `action_audit_cell()` of `account.analytic.report`.
- When the flow reaches [1], the window action for analytic items is fetched, where its [context] is returned as a string instead of a dictionary.
- This action is then received [here] with `context` as a string, and attempting to update it results in an error.
Solution:
- Converted the string to dict using `literal_eval()`.
[1]: https://github.com/odoo/enterprise/blob/a26981667361839ad38f45da5a6f23ae8e6478f1/account_reports/models/account_analytic_report.py#L208
[context]: https://github.com/odoo/odoo/blob/824446b65cbe3850f88f56090f0473f0e94bf4f3/addons/account/views/account_analytic_line_views.xml#L88-L91
[here]: https://github.com/odoo/enterprise/blob/b5f884a49344aa097c20fc128e9d290b97970f1a/account_reports/models/balance_sheet.py#L28
opw-6311673
sentry-7513784149
Forward-Port-Of: odoo/enterprise#120734Order changes in Point of Sale are now sent to preparation displays, so kitchen or preparation teams see the latest order information without missing updates. This helps reduce confusion and keeps fulfillment aligned with what was changed at the register.
Original PR description
Before this commit, when an order change was updated, the pdis were not notified of the change. This commit adds a call to the `_send_load_orders_message` method of the pdis to notify them of the change. Forward-Port-Of: odoo/enterprise#122592
Restaurant preparation displays are now updated when a combo meal is split back into individual items, without printing duplicate kitchen tickets or triggering unnecessary alerts. The fix also ensures course labels appear on floating orders and that displays only receive items from their configured product categories.
Original PR description
Issue: Breaking a combo back into individual lines was not notifying the preparation display. Fix: breakCombo now go through sendOrderInPreparation (with byPassPrint) the preparation display is updated and no ticket is printed. To avoid triggering a sound and a kitchen ticket for a reorganization the kitchen already knows about, thread a `silent` context flag through sendOrderInPreparation down to _send_load_orders_message. Forward-Port-Of: odoo/enterprise#118690
EC Sales List returns are now generated for each company in a tax unit using that company's own VAT number, instead of combining all members under the tax unit VAT number. This helps businesses submit the correct declarations for each legal entity and avoid consolidated reporting where it is not expected.
Original PR description
Issue: The EC Sales List return is currently generated under the tax unit VAT number, consolidating all member entities into a single declaration. Expected: The EC Sales List return must be generated individually per member entity, each under their own VAT number, even when those entities belong to a tax Unit. Fix: Apply tax unit only if report's multi company filter is `tax_units`. Ref: https://github.com/odoo/enterprise/blob/07e8aba8604319747a5925c83576095ce9a63f9e/account_reports/models/account_return.py#L316-L317 task-6069402 Forward-Port-Of: odoo/enterprise#115974
Fixes Envia delivery insurance so insured shipments communicate the insurance service in the format Envia expects. This helps ensure customers using insured Envia delivery methods receive the correct insurance documentation when validating deliveries.
Original PR description
Issue ----- Insurance set on the delivery method is not correctly being communicated to Envia. Steps to reproduce ----- - Create a MX company - Set up Envia - Fedex Nacional Economico (ground) - 10% insurance - Create a MX client - Create a product (with some weight) - Create a SO using the delivery method & confirm - Validate the picking > No insurance pdf is being printed Cause ----- We are passing the insurance value as a `insurance` field on the shipment, which is not what the API expects. We should instead pass it in `additionalServices` as shown in the example of https://docs.envia.com/docs/additional-services#how-to-add-services-to-a-shipment ----- Ticket: opw-5254952 Forward-Port-Of: odoo/enterprise#121691 Forward-Port-Of: odoo/enterprise#118966
This fix prevents small rounding differences in attendance calculations from creating overlapping overtime entries. It helps ensure employee work entries remain accurate, especially for overnight shifts or shifts ending around midnight.
Original PR description
__Issue:__ `duration` is rounded to 3 decimals (~1.8s drift) while `time_stop` is exact, so the back-projected start could land before midnight on overnight overtime or middle of the day causing overlaps with the previous line Example: - time_start = 03/05 00:00:00 - time_stop = 03/05 07:07:14 actual duration 7h07m14s gets stored as `duration = 7.121` (= 7h07m15.6s) after `round(_, 3)`. Back-projection yields `datetime_start = 07:07:14 - 7.121h = 02/05 23:59:58`, overlapping by ~2s with the prior line ending at `02/05 23:59:59.999`. __Fix:__ Sort lines by `time_stop` within each date and clamp `datetime_start` to the previously emitted interval's stop when the two intervals genuinely intersect. opw-6170828 Forward-Port-Of: odoo/enterprise#122509 Forward-Port-Of: odoo/enterprise#116565
Swiss payroll now automatically computes the required 2050 salary rule value during ELM transmission. This reduces manual payroll corrections and helps ensure Swiss salary reporting is more accurate.
Original PR description
task-5166226 Forward-Port-Of: odoo/enterprise#108047 Forward-Port-Of: odoo/enterprise#103453