Daily updates from Odoo
Tuesday, August 11, 2026
28 changes · master
Enhancements to existing features
Colombian electronic invoice reports now place the DIAN authorization information correctly when using the new compact layout. Odoo Studio also recognizes this layout, helping businesses use the new report style without losing required compliance details.
Original PR description
Adds the xpath for the DIAN authorization block to accommodate the new report layout: compact. Add the view for studio. task-6294364 Community PR: https://github.com/odoo/odoo/pull/279698
Belgian payroll users now see XML generation errors as a warning at the top of the 274.xx report screen. The related XLSX fields automatically realign when the error message is removed, keeping the form easier to read and use.
Original PR description
[IMP] l10n_be_hr_payroll: 274.xx xml report generation display error . If XML generation error is there, we show in the top as a warning . XLSX Field and file is realigned automatically when the error field is removed task-6422011
This update aligns several Odoo Enterprise apps with a newer internal way of building database queries. It should improve long-term reliability and maintainability without changing day-to-day user workflows.
Original PR description
https://github.com/odoo/odoo/pull/281422
Belgian payroll setup guidance now shows the correct 9-digit ONSS registration number format. Demo company and ONSS numbers were also corrected, reducing confusion during configuration, testing, or demonstrations.
Original PR description
The placeholder for the ONSS registration number was misleading as it had 10 digits instead of 9. This updates the placeholder to 083012308 and corrects the ONSS and company numbers in the Belgian demo data. Task-6421257
The customer view no longer shows a redundant subscription statistic. This reduces visual clutter and makes partner records easier to scan without removing core subscription functionality.
Original PR description
Remove the sale_subscription statistic hook from res.partner to reduce the space taken by application statistics in partner views. task-6385576
Resolved issues and error corrections
Overtime time-off entries in Belgian payroll will no longer be incorrectly marked as sickness relapses after a recent sick leave. The relapse check now only considers actual sickness leave types, improving payroll accuracy and reducing manual corrections.
Original PR description
Before this commit, "_compute_can_relapse" scoped its computation to any Belgian, HR-validated leave, regardless of its work entry type. As a result, creating an overtime time-off entry shortly after a validated sick leave would incorrectly trigger the "Sickness relapse" field on the overtime entry, since it fell within the legal relapse window of the previous sick leave. Add a check on `work_entry_type_id.code` to the initial filter so only actual sickness leaves (LEAVE110, LEAVE214, LEAVE280) are considered for the relapse computation. Task: 6415930
This update corrects demo payroll data so Belgian employee records are linked to the right company instead of defaulting to a US company. It also ensures required languages and payroll warning checks are handled correctly, reducing access errors during demo payslip generation.
Original PR description
Task #6453043
Fixed an issue in Belgian payroll where voluntary overtime could fail when an employee had overtime across multiple work days. This helps payroll processing complete reliably and reduces manual corrections for affected payslips.
Original PR description
Forward-Port-Of: odoo/enterprise#127407 Forward-Port-Of: odoo/enterprise#127378
This fix prevents Philippine payroll validation from failing when older or test dates do not have a matching tax office rule parameter. Regular payroll use remains unchanged, while unusual historical data or automated tests can proceed without unnecessary errors.
Original PR description
While in regular usage the current solution works; the constrains may break if during tests and other flows where the date could be far in the past. To avoid such issues; we will not raise if the rule param is not found and instead simply return early. Runbot error 945678
Belgian payroll declarations without XML no longer trigger an online schema download during validation. This prevents database setup from failing on systems without internet access while keeping normal validation for declarations that do include XML.
Original PR description
Before this commit, the validation state compute downloaded the XSD from socialsecurity.be even for a declaration with no XML to validate, so the database initialisation crashed on a host without internet. The download came with odoo/enterprise#104908 and only shows up once the test_l10n_be_hr_payroll_account demo data is installed, since that demo creates a DMFA without any XML. After this commit, the schema is fetched only when there is an XML, and empty declarations are just marked as normal. task-6460394
The Belgian payroll configuration has been adjusted so a related action appears in the payroll configuration area instead of the general settings area. This helps payroll users find the relevant option in the expected place and reduces confusion during setup.
Original PR description
Task: 6461789
This fix ensures Indian payroll calculations are only applied to employees using the Indian localization. It prevents irrelevant Indian payroll fields from appearing in change logs for employees managed under other country rules, such as Belgium.
Original PR description
[FIX] l10n_in: fix some l10n_in fields computed for other localizations
Bug reproduction:
1 - in localhost install below modules:
→ l10n_in_hr_payroll,l10n_be_hr_payroll,l10n_be_hr_contract_salary
2 - Select BE, IN localizations, but as active one select Belgium. 3 - Go to employee, Laura.
4 - Change her wage to 8000
5 - In the chatter, you will see some indian fields are tracked.
→ Shouldn't be, Laura is Belgium, only BE fields should be tracked
Bug cause:
1 - In the hr.version of l10n_in_hr_payroll:
→ there isn't enough caution in compute methods for other l18ns.
→ e.g., _l10n_in_get_montly_wage returns self.wage
→ self.wage is 8000 and that function leads to positive computations
Bug solution:
1 - Non-indian versions are carefully handled in compute methods
task-6411960
Forward-Port-Of: odoo/enterprise#125350System administrators can once again delete any equity transaction, even when they are not listed as the seller or subscriber. This restores the intended administrative control and prevents support issues caused by blocked cleanup or correction tasks.
Original PR description
Before this PR https://github.com/odoo/enterprise/pull/120158 system admin had the access to delete any transaction (which was intended). The PR however made admins no longer able to delete a transaction that they don't belong to as seller or subscriber. This PR fixes this issue by allowing admins to delete any transaction. opw-6413350 Forward-Port-Of: odoo/enterprise#126672
Bank reconciliation now safely handles imported statement lines whose payment reference contains only spaces. This prevents an unexpected error when setting accounts and keeps reconciliation workflows running smoothly even with imperfect imported data.
Original PR description
When reconciling bank statements with an account, the system will look for past statement lines already reconciled with that account and create a reconciliation model based on common substring in…
When reconciling bank statements with an account, the system will look for past statement lines already reconciled with that account and create a reconciliation model based on common substring in payment_ref. If this payment refs contains only spaces (eg. ' '), it will trigger an index out of range traceback. This is explained by the fact that spaces are striped then '' is considered as False in some filtering leaving the list empty. From the UI, putting ' ' is not supposed to be possible because spaces are striped before write but there is many ways to import statement lines which may lead to this hence the decision of handling this scenario to make the code more robust. Steps to reproduce: 1/ Create two statement lines with payment_ref as ' ' (you can force it using a write) 2/ Click "Set account" on first one and pick 100000 Issued Capital 3/ Do the same for the second statement line => Traceback In this commit, we do not check for common substring if there is less than two labels. opw-6379977 Forward-Port-Of: odoo/enterprise#126729 Forward-Port-Of: odoo/enterprise#125779
This fix makes an automated product merge test consistently choose the intended main product before merging. It prevents random test failures caused by unreliable creation-date ordering, improving build stability without changing customer-facing behavior.
Original PR description
Version: - saas-19.4 Steps to reproduce: - Run the test_merge_success_single_variant test case multiple times with different products created each time. Issue: The master record is selected based on its creation date, but that ordering is not always reliable. As a result, the wrong product may be chosen as the master,causing the incorrect product to be archived and the runbot test to fail. Fix: Before merging, we now manually set product 1 as the master. This makes the test predictable and stops the failures. Build error - 941476 Forward-Port-Of: odoo/enterprise#125180
This fix clears cached routing information so barcode-related test overrides are correctly applied when larger test suites run. It helps prevent false test failures in inventory and picking barcode workflows, improving release stability without changing day-to-day user behavior.
Original PR description
test_barcode_create_serials_in_batch_with_single_scan keeps failing on master and 19.4 as call_count !=2, but instead = 0 This does not happen when running only the tests in stock_barcode but instead when you run a larger suite of tests such as the following: https://runbot.odoo.com/runbot/build/119533820 Once a route is hit it is stored in the cache, causing the later override to be missed. [Runbot-238760](https://runbot.odoo.com/odoo/error/238760) Forward-Port-Of: odoo/enterprise#126122
The accounting reconciliation process now uses an existing optimized database lookup more reliably. This should improve performance when matching unreconciled accounting entries, especially for larger accounting datasets, without changing user-facing workflows.
Original PR description
We have a very efficient index for searching unreconciled lines on known accounts. Let's use it.
```python
_unreconciled_index = models.Index("(account_id, partner_id) WHERE reconciled IS NOT TRUE")
```
Before this change, the query planner didn't recognize the index because of its definition being slightly different wrt the null values.
Forward-Port-Of: odoo/enterprise#127093This fix prevents a restaurant appointment test from ending with unsaved changes left open. It makes automated checks more reliable and reduces random test failures without changing customer-facing behavior.
Original PR description
The `test_appointment_kanban_view` tour test was randomly failing with the following error: `AssertionError: Tour finished with a dirty form view being open.` This occurred because the tour ended right after clearing a date field on a form, leaving the form in a "dirty" (unsaved changes) state. This commit fixes the issue by adding a final step to the tour that clicks the cancel/discard button. Forward-Port-Of: odoo/enterprise#109633
A bug prevented the helpful tip in the timesheet leaderboard from being shown to users. This fix restores the tip so employees can see the intended guidance while using the leaderboard.
Original PR description
The tip inside the timesheet leaderboard was never visible due to incorrect function arguments assignment. This commit fixes the issue. task-6448478 Forward-Port-Of: odoo/enterprise#126792
Features or functions removed from Odoo
An outdated automated test for structured payment references was removed because the related behavior is no longer supported after a prior change. This has no direct impact on users; it keeps the accounting test suite aligned with current functionality.
Original PR description
After merging pr #117256 the behavior for creating auto reconcile models for structured reference is no longer working so the test for checking that behavior should be removed. This was an FP request to use contains instead of regex in auto reconcile model creation because it was too complicated for users. no task id Forward-Port-Of: odoo/enterprise#126733 Forward-Port-Of: odoo/enterprise#126635
This change removes an obsolete product reference from Helpdesk Stock because it was not shown to users and was not filled in automatically. It simplifies the related Helpdesk, Repair, Stock, and Accounting flows without changing visible business processes.
Original PR description
Removed dead code using the product_id in the helpdesk_stock module as the field is not displayed anywhere in the interface and not set automatically. task-4353526
Code cleanup and technical improvements
This update refreshes part of the Sign document page’s internal setup so it works correctly with the newer interface framework. It helps ensure signing documents initialize at the right time without changing the signing experience for users.
Original PR description
The two `useLayoutEffect` call-sites in `sign/.../document_signable.js` were already migrated to native OWL3 APIs and merged in odoo/enterprise#121285 (landed `c1ba215c0e0`, 2026-07-03), then…
The two `useLayoutEffect` call-sites in `sign/.../document_signable.js` were already migrated to native OWL3 APIs and merged in odoo/enterprise#121285 (landed `c1ba215c0e0`, 2026-07-03), then re-introduced by `2dbde0eb232` — the t-ref → Owl 3 signals migration (odoo/enterprise#123261, authored 2026-07-02, landed 2026-07-19, i.e. written against the pre-migration code and resolved in its favour). This is **not** a revert of the signals work. #121285 could turn the first effect into a plain `onMounted` because the parent element was available by then; that no longer holds. The backend now passes `parent` as a `signal(null)` t-ref which is only populated on mount, so both effects have to re-run when it lands. Both therefore become native `useEffect`s, subscribed through a tracked `getParentEl()` read. `getDataFromHTML` and the geolocation branch both reach the parent through `resolveRefEl`, which UNTRACKS — so it cannot be what subscribes them, and the explicit tracked read is what makes the effects re-fire on mount. Community: odoo/odoo#281132
Belgian payroll assimilation calculations now rely on configurable rule categories and work entry types instead of fixed internal lists. This makes the payroll setup easier to maintain and reduces the risk of future updates requiring code changes.
Original PR description
Assimilations are computed based on a hardcoded list of time types. In this PR, we remove the class methods used to return these hardcoded lists, and instead, we use rule categories and work entry types. __ task-6316440
This update modernizes internal Documents app code to stay compatible with the next Odoo web framework version. Users should not see functional changes, but the change helps keep document selection, drag-and-drop, and bulk actions reliable over time.
Original PR description
Removes deprecated `useLayoutEffect` (OWL3) from three `documents` components. Combines three individually-reviewed changes into one PR; each is kept as its own commit. - **documents_action** (`documents_action.js`) — `useLayoutEffect` → `onMounted` + `onPatched` with a manual `[targetRecords, ui.isSmall]` diff (native `useEffect` stops firing after the first selection settles). Was #121060. - **documents_drop_zone** (`documents_drop_zone.js/.xml`) — `useLayoutEffect` → `useListener` on the ref getter + a `signal(0)` scroll offset; adds test coverage. Was #121066. - **documents_renderer_mixin** (`documents_renderer_mixin.js`) — `useLayoutEffect` → `computed()` signals for `recordsToDelete` / `recordsToArchive`; adds test coverage. Was #121063. Supersedes #121060, #121066, #121063.
This update adjusts how customization record identifiers are prepared before being saved, making them compatible with newer database handling. It also aligns accounting report data type handling with stored field definitions, reducing the risk of technical errors without changing day-to-day user workflows.
Original PR description
The value should be of the type to insert to use with SQL wrapper. https://github.com/odoo/odoo/pull/281121
The room booking screens were updated as part of Odoo's move to a newer interface framework. This is an internal modernization that helps keep the room booking feature compatible and maintainable without changing the expected user experience.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
This update streamlines how several Odoo apps manage shared interface settings behind the scenes. It reduces duplicate technical mechanisms, making future maintenance easier without introducing a visible change for everyday users.
Original PR description
This commit unifies `useSubEnv` and `useChildSubEnv` and removes the latest. The unification simplifies the env management. we can now use `useEnv` anywhere even in a plugin. `useChildEnv` was meant to be used in plugins but it can now be replaced by `useEnv`. `provideEnv` is also removed, there was no occurence and it existed only because of the compatibility layer.
The website generator was updated to align with the newer interface framework used by Odoo. This is an internal modernization that helps keep the module maintainable during the platform migration, with no expected change for day-to-day users.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`. Community: https://github.com/odoo/odoo/pull/273883