Daily updates from Odoo
Monday, August 3, 2026
11 changes · master
Enhancements to existing features
The appointment scheduling module was adjusted to stay aligned with related changes in the community version. This helps keep the enterprise feature consistent and easier to maintain, with minimal expected impact for users.
Original PR description
Adjust override definition based on community PR. task-6349421
VoIP activity scheduling was simplified behind the scenes so related contacts, leads, tickets, employees, tasks, sales orders, and subscriptions stay aligned more reliably. This reduces maintenance complexity and helps keep the scheduling experience consistent across VoIP-connected business apps.
Original PR description
… fields Remove all @api.onchange in favor of compute/inverse fields for MailActivitySchedule wizards across voip and voip_* modules. Key changes: · Rename res_model_field_selection → res_model_selection, use pure model name keys (e.g. "crm.lead") instead of "model/field" format · Rename _get_res_model_field_selection → _selection_res_model · Convert contact_id, lead_id, ticket_id, employee_id, task_id, sale_order_id, and subscription_id to compute + inverse fields · Replace all onchange logic with compute (default values) and inverse (res_ids sync) methods
Resolved issues and error corrections
Ecuadorian invoice printouts now show the company logo in the header again. The header layout was slightly adjusted so the logo fits cleanly within the existing invoice format.
Original PR description
### Issue: In 19.3, the EC invoice header completely replaces the standard header in `report_invoice_document` after commit `08d17cc49c` The company logo was not included in the custom header, leaving invoices without a logo ### Cause: The logo was simply missing from the header template ### Fix: The logo is added and some header elements are resized (`h5` → `h6`, reduced margin) to keep the layout within the existing paper format without requiring a new one ### Steps to reproduce: - Install `l10n_ec_edi` with demo data - Open and print any invoice Before the fix, the company logo is missing from the header opw-6377830 Forward-Port-Of: odoo/enterprise#125469
Users in single-company setups can now change the journal on depreciation models when no company was previously set. This removes a configuration blocker that prevented asset depreciation settings from being updated correctly.
Original PR description
When no company is set on a depreciation model, we only display the `journal_placeholder_id` field which is readonly. But in a single company environment, the 'company_id` field is hidden, therefore it becames impossible to change the journal for depreciation models. Fix: Always display the `company_id` field, but we remove the warning in the onchange when we are in a single company environment. opw-6299390 Forward-Port-Of: odoo/enterprise#121518
The Belgian payroll help text for spouse fiscal status thresholds has been corrected to reduce ambiguity and help users apply the right status. The update also includes the 2026 low-income threshold, supporting more accurate payroll handling for upcoming fiscal rules.
Original PR description
The spouse fiscal status thresholds help text was not accurate enough and could lead to misinterpretation. This commit updates the help text to provide a more accurate description of the thresholds, and adds the low income threshold for 2026. task-6320606
The ESG module now declares a required dependency that it was already using behind the scenes. This prevents automated tests and module loading checks from failing, with no expected change for everyday users.
Original PR description
Before this commit, the esg cog menu imports @base_import/import_records/import_records while esg does not depend on base_import. This goes unnoticed in the backend, where every installed module lands in the same bundle, but a Hoot test file only loads the modules of the dependency closure of its addon, so the first test suite added to esg dies on "error while registering suite". This commit adds the missing dependency. base_import is auto installed on top of web, so it is already there in every database.
This change makes a Swedish Point of Sale test finish its order creation consistently. It reduces random test failures, helping keep automated checks stable without changing day-to-day user behavior.
Original PR description
## Issue The tour `test_l10n_se_pos_01` does not consistently create its `pos_order`. This leads to the following assert failing:…
## Issue The tour `test_l10n_se_pos_01` does not consistently create its `pos_order`. This leads to the following assert failing: https://github.com/odoo/enterprise/blob/0f6f6fac892bc8cec477160a790d52fbf053be99/l10n_se_pos/tests/test_se_pos.py#L40-L42 ## Steps to reproduce 1. Install `l10n_se_pos` 2. Run the test `test_l10n_se_pos_01` 3. **The test fails non-deterministically** ## Fix We use `clickNextOrder()` at the end of the tour to ensure the creation of the order, like other tests already do (e.g., [FinishResidualOrder](https://github.com/odoo/odoo/blob/7fc645e5a3fad9255432e7cc68d47bd0971d3d77/addons/pos_restaurant/static/tests/tours/pos_restaurant_tour.js#L676-L677), [test_name_preset_skip_screen](https://github.com/odoo/odoo/blob/7fc645e5a3fad9255432e7cc68d47bd0971d3d77/addons/pos_restaurant/static/tests/tours/pos_restaurant_tour.js#L1333-L1334), [PosOrderCreationTourPdis](https://github.com/odoo/enterprise/blob/08d5172a8c3310af0c51e18a281c544f83f5aed7/pos_enterprise/static/tests/tours/point_of_sale/pos_tour.js#L141-L142), ...). runbot-238568 Forward-Port-Of: odoo/enterprise#125672
This fix ensures Swiss payroll amounts are rounded directly to the required 0.05 precision instead of using an unreliable manual workaround. It prevents tiny calculation differences from affecting salary declarations and helps payroll reports stay accurate and consistent.
Original PR description
In multiple places within l10n_ch_hr_payroll_elm we use float_round to a precision of 0.01 but then manually round to 0.05 precision. 1. Open a python terminal 2. Enter 1000 % 0.05 >= 0.025 3. See this results to true, even though it shouldn't Fix this by using float_round with a precision of 0.05 instead. https://github.com/odoo/enterprise/blob/7f9cd01ff3dd470b06ae176982fd042243be8f3c/l10n_ch_hr_payroll_elm/models/hr_payslip.py#L102-L105 The change to `ema_declaration.json` is needed as previously it was expected that there was a small difference between salary over the months due to the odd rounding (a difference of like 0.000000000001). Adding the new rounding makes the values equal and test_ema_declaration_2023_01 would fail due to changeSalary no longer being in the computed dict. All the way to master! opw-6322937 Forward-Port-Of: odoo/enterprise#121401
The batch payment screen now refreshes the online payment status when users move between records. This prevents outdated status information from being shown, helping users see whether each payment has been signed or is still pending.
Original PR description
To display the `payment_online_status` field, we use a widget called `account_online_payment_refresh_button`. The issue is that the widget don't update the field value when switching from one record to another. Steps to reproduce: 1. Create 2 batch payments 2. Do a payment initiation with the first one, and sign it 3. Do another payment initiation with the second one, but don't sign it. 4. Open 1 batch, and try to switch records with the pager 5. You should see the value is not updated task-6420585 Forward-Port-Of: odoo/enterprise#126278 Forward-Port-Of: odoo/enterprise#125643
Code cleanup and technical improvements
This update standardizes how several enterprise modules describe the data they send to the mail interface, making future changes safer and easier to maintain. It also fixes an issue where one AI prompt setting was sent under the wrong name and therefore was not used by the client.
Original PR description
Enterprise counterpart of "[REF] mail, *: declare the store fields a payload fills", which explains the why and the placement rule. This also fixes are_prompt_from_local_storage, sent under a name the client never reads, so the value landed nowhere. https://github.com/odoo/odoo/pull/279131
The Point of Sale routing layer was reworked to use the newer plugin approach across several related POS modules. This is an internal modernization that helps keep POS screens, appointments, IoT, restaurant, settlement, and delivery integrations compatible with the latest frontend framework.
Original PR description
Convert router service owl2 to owl3 plugin.