Daily updates from Odoo
Thursday, July 30, 2026
31 changes
8 changes
Enhancements to existing features
TikTok Shop configuration is now found under the new Marketplaces menu. This makes marketplace-related setup easier to find and keeps sales channel settings organized in one place.
Original PR description
- Move tiktok shop configuration to the new 'Marketplaces' menu PR Ref: https://github.com/odoo/enterprise/pull/113307
Chilean electronic documents can include a maximum of four company activities, but the system previously allowed more. This update limits the selection to four, helping prevent rejected electronic invoices and delivery-related documents.
Original PR description
The Chilean XML schema supports maximum of 4 activities (l10n_cl_company_activity_ids), but we allow to add more than that. If this happens, it causes rejections since electronic documents are being sent with more than 4 options selected, and returning rejection errors. Adding constraint to limit l10n_cl_company_activity_ids task-id: 6329320 Forward-Port-Of: odoo/enterprise#126026 Forward-Port-Of: odoo/enterprise#123856
Belgian payroll bicycle reimbursement amounts are updated for the rates effective from October 1, 2026. This helps payroll teams apply the correct tax-exempt allowance of €0.32 per km, capped at €12.80 per day.
Original PR description
This PR updates the Belgian bicycle reimbursement rates to reflect the amounts applicable from October 1, 2026. ### Changes - Increase the bicycle reimbursement rate from the previous amount to €0.32/km. - Increase the maximum daily tax-exempt reimbursement to €12.80/day. These values are aligned with the latest Belgian regulations and are required for payroll calculations from October 1, 2026. Task-6385742 Forward-Port-Of: odoo/enterprise#125862 Forward-Port-Of: odoo/enterprise#124481
Pakistan payroll calculations have been updated to use the 2026 income tax brackets. The previous extra tax surcharge mechanism has been removed, helping payroll teams apply the latest tax rules more accurately.
Original PR description
[IMP] l10n_pk_hr_payroll: update 2026 tax brackets . tax brackets are updated . extra tax surcharge mechanism is deleted task-6401729 Forward-Port-Of: odoo/enterprise#125711 Forward-Port-Of: odoo/enterprise#124988
Give clearer, more accurately attributed error messages, and add validation to catch classification code / General Public TIN mismatches before they reach MyInvois. task-4651934 Forward-Port-Of: odoo/odoo#278805 Forward-Port-Of: odoo/odoo#278208
Original PR description
Give clearer, more accurately attributed error messages, and add validation to catch classification code / General Public TIN mismatches before they reach MyInvois. task-4651934 Forward-Port-Of: odoo/odoo#278805 Forward-Port-Of: odoo/odoo#278208
Version: owl v3.0.0-alpha.45 Release notes: https://github.com/odoo/owl/releases/tag/v3.0.0-alpha.45 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
Original PR description
Version: owl v3.0.0-alpha.45 Release notes: https://github.com/odoo/owl/releases/tag/v3.0.0-alpha.45 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
This PR adapts the update dialog to fit the new update logic which is individual to every iot box related PR: https://github.com/odoo/odoo/pull/278661 Forward-Port-Of: odoo/odoo#278914
Original PR description
This PR adapts the update dialog to fit the new update logic which is individual to every iot box related PR: https://github.com/odoo/odoo/pull/278661 Forward-Port-Of: odoo/odoo#278914
1) Previously, we were supposing that only one <cbc:Description> tag could be found on InvoiceLine item. After checking the UBL XSD, I found we could have multiple Description tags for one item. 2) The import order of <cbc:Name> and <cbc:Description> on the invoice line now has been changed to be more accurate and prevent loss of information. The export has been adapted to this change too. Now, we export the actual description written by the user. task-6153895 --- I confirm I have sig
Original PR description
1) Previously, we were supposing that only one <cbc:Description> tag could be found on InvoiceLine item. After checking the UBL XSD, I found we could have multiple Description tags for one item. 2) The import order of <cbc:Name> and <cbc:Description> on the invoice line now has been changed to be more accurate and prevent loss of information. The export has been adapted to this change too. Now, we export the actual description written by the user. task-6153895 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#275089 Forward-Port-Of: odoo/odoo#261949
3 changes
Enhancements to existing features
Pakistan payroll calculations have been updated to use the latest 2026 income tax brackets. The prior extra tax surcharge mechanism has been removed, helping payroll results stay aligned with current tax rules.
Original PR description
[IMP] l10n_pk_hr_payroll: update 2026 tax brackets . tax brackets are updated . extra tax surcharge mechanism is deleted task-6401729 Forward-Port-Of: odoo/enterprise#125711 Forward-Port-Of: odoo/enterprise#124988
The timesheet Timeline view now lists assistant suggestions in true chronological order instead of sorting them by title. It also shows each suggestion's start time, making it easier for users to review and enter work in the correct sequence.
Original PR description
Forward-Port-Of: odoo/enterprise#122862
This PR adapts the update dialog to fit the new update logic which is individual to every iot box related PR: https://github.com/odoo/odoo/pull/278661 Forward-Port-Of: odoo/odoo#278914
Original PR description
This PR adapts the update dialog to fit the new update logic which is individual to every iot box related PR: https://github.com/odoo/odoo/pull/278661 Forward-Port-Of: odoo/odoo#278914
1 change
Enhancements to existing features
If a list item has a selection blocker, the user can be stuck and forced to move to the previous or next block instead of being able to continue to edit the list item. To get around this, this commit allows selection placeholders in list items. task-6394918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#278323
Original PR description
If a list item has a selection blocker, the user can be stuck and forced to move to the previous or next block instead of being able to continue to edit the list item. To get around this, this commit allows selection placeholders in list items. task-6394918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#278323
18 changes
Enhancements to existing features
Partner pages are simplified by removing an extra subscription statistic, freeing space for more relevant information. Appointment teams also gain a feedback email and ratings flow to collect and review customer satisfaction after visits.
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
Spreadsheet formulas now do more preparation once upfront instead of repeating it every time a function runs. This should make spreadsheet evaluation faster, especially in documents and survey-related spreadsheets with many formulas.
Original PR description
…tion at compile time A number of checks and pre/post processing is done for each executed function. Some of it can be known at compile time since it only depends on the function and the number of arguments. With this commit, we pre-compute a number of things only once at compile time to minimize what is done when executing the function. This also opens the door to moving vectorization at compile time as well, which could again improve perf. Task: 6254300
Payroll will no longer automatically set the current driver of a company car based on employee benefits. Instead, employees who choose or receive a car through their contract are marked as the future driver, preventing the car from being offered to others and avoiding unnecessary task creation for payroll officers.
Original PR description
. Remove the auto-assignment of the Driver based on the payroll benefits . If an employee signs a contract and selects the car or the car gets added to the employee's benefits, he should become the car's future driver . Don't offer in the salary configurator cars for which the future driver is filled . Don't generate a task every time the payroll officer assigns a new driver to the car task-6425360
Spreadsheet users now have a dedicated side panel to review unused pivots and lists instead of triggering checks from the Data menu. This keeps large spreadsheets more responsive and improves detection of unused items across formulas in cells, charts, and other spreadsheet features.
Original PR description
This commit replace the `Unused pivot/list` warning in the `Data` topbar menu by a dedicated side panel. Checking which pivot is unused is an expansive operation, and is not frankly important, removing the pivots only cleans up the JSON. Doing it every time we open the menu can make the menu very slow on big spreadsheets. There was also a problem on how we were checking which pivot was unused. Only the formulas in the cells were checked, not the formulas of cfs/charts/... This commit introduce a new `FormulaProvider` to the core plugins, so they can register their formulas. Task: [6185119](https://www.odoo.com/web#id=6185119&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
Shopfloor handling for continuous production has been tightened to avoid creating backorders for now. Users must specify the quantity being produced before closing a manufacturing order, helping prevent inaccurate production records.
Original PR description
In this commit we continue refining continuous production: - No backorder via shopfloor for cont production (for now). - Finishing a WO will not update the qty_producing. Note: Continuous flag on boms were commented out from some tests until the solution to unblock WO's mark as done for continuous production boms is thoroughly discussed. For now, an error is thrown if the user isn't specifying a quantity producing before closing off (producing) the MO through shopfloor. Task: 6384174
The partner follow-up list now hides the Last Reminder column by default because it is not useful for most users. This reduces visual clutter and helps users focus on the information they typically need.
Original PR description
The `Last Reminder` column is not relevant for most users and its position in the partner list makes it unnecessary noise. Hide the column by default. Task-6420573
The TikTok Shop configuration is now located under the new Marketplaces menu. This makes marketplace setup easier to find and keeps related sales channel settings grouped together.
Original PR description
- Move tiktok shop configuration to the new 'Marketplaces' menu PR Ref: https://github.com/odoo/enterprise/pull/113307 Forward-Port-Of: odoo/enterprise#125953
Payroll users can now move several payslips from a pay run to off-cycle processing in one action. This reduces repetitive manual work and makes handling payroll exceptions faster and more efficient.
Original PR description
- Currently, payslips can only be sent to off-cycle one at a time from the Payrun list view using button. - There's no way to send multiple payslips to off-cycle at once. - Add a "Send to Off-Cycle" action to allow sending multiple payslips to off-cycle in a single operation in payrun. task-6320059
Belgian payroll now uses the Belgian reference calendar consistently when calculating work time rates and related payroll values. This improves accuracy for salary offers, payslips, attendance, time off allocation, and payroll reporting while aligning tests with the updated approach.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: . Remove standard_calendar_id field and use l10n_be_reference_calendar_id instead for BE. . Use l10n_be_reference_calendar_id instead of company.resource_calendar_id on all computations. . Use version work_time_rate directly instead of version.resource_calendar.work_time_rate to use the reference_calendar_id instead of company_calendar_id . `Resource_Calendar` Model uses the company_hours as reference to compute the work_time_rate . `Version` Model Calendar uses the ref_calendar_hours as reference to compute the work_time_rate . Both `Resource_Calendar` & `Version` Models ignore computations of the work_time_rate for the `Variable Calendars` . Approximate version.work_time_rate to a precision of two decimal places. . Update the corresponding tests task-6292597
Large accounting reports now load and scroll more reliably by only displaying the rows currently visible on screen and reducing unnecessary page elements. This helps prevent browser slowdowns or crashes when users work with thousands of report lines, while keeping the same report experience.
Original PR description
Introduced in https://github.com/odoo/enterprise/pull/96974, this is a new load more mechanism that loads all the new lines. When trying to display 3000+ lines in the browser it would crash as too…
Introduced in https://github.com/odoo/enterprise/pull/96974, this is a new load more mechanism that loads all the new lines. When trying to display 3000+ lines in the browser it would crash as too many components were getting created and the DOM was overloaded. To solve this issue, a virtual grid is used to only render the lines inside the user view (plus a margin of 0.5 view on top + bottom). However, the report lines were not made to be created, updated and deleted this often. The creation and suppression were improved by always keeping the same number of lines rendered. This is done by using a list of lines to display and hiding lines that don't need to be displayed anymore. Since the lines all have a similar height, this number should always stabilize at (user view height) * 2 / 31px. A lot of expensive computations were done when displaying or rendering the lines, such as lines searched or the account status badge. Instead, we opt to calculate them when they are displayed and then store them to not be computed again. A big part of the remaining time is taken by the reactivity system, which greatly increases the time taken and the memory used. This was partially solved by: removing useless reactivity on the controller in different components caching the custom components and templates on the controller. marking the lines as a raw Object to remove the proxy objects of the reactivity which takes a lot of memory and time. This also introduces a lot of breaking changes: - cachedFilterOptions and options are now a signal of a proxy so they need () after accessing them. - virtual lines are a proxy with signal for the primitives so accessing a primitive such as level needs (). - some functions were moved as computed to help reduce the number of renders of components. - using "key" in virtual_line/virtual_cell is advised against since keys are always added and never removed (instead test for the value of the primitive, for example instead of "level" in line use line.level?.()) However, if the key points to an array and not an object, the length is reactive since we want to easily support t-for for arrays. task-5478504
This update standardizes how extra electronic invoicing options are handled when sending account moves for Mexican localization. It helps prevent inconsistent behavior caused by the same information being treated in different formats, improving reliability for affected invoicing workflows.
Original PR description
make extra_edis a list, as it was a list, a set or a dict depending on how we get datas task-4916311
Planning entries now provide a clearer link to related field service sales information, including services and materials. This helps users move from a planned service visit to its associated commercial details more quickly, reducing navigation effort.
Original PR description
task-6140146
Spreadsheet users get a smoother experience after updates to the underlying spreadsheet engine. Large spreadsheets should open key menus faster, and unused pivot/list cleanup is moved into a dedicated side panel so it no longer slows down regular menu use.
Original PR description
See https://github.com/odoo/odoo/pull/279306
Accountants can now create a vehicle directly from a bill using a simplified dialog with only the essential details. When the bill is confirmed, the vehicle purchase value is automatically aligned with the related fixed asset value, reducing manual work and data-entry errors.
Original PR description
- When buying a car, creating a fixed asset in a bill, you are required to select a car. If the car is not there yet, you have to create one to link it to the fixed asset. The creation form is too long and complicated for an account. In this commit: - When selecting the create and edit option, we open a simple dialogue to create The car with the most basic information. - When the bill is confirmed, we set the purchase value equal to the fixed asset value of that vehicle. task-5380674
Belgian payroll now narrows the employee sub-type choices using both the employer category and the employee type. This reduces irrelevant options and automatically selects the sub-type when there is only one valid match, helping avoid payroll setup mistakes.
Original PR description
The Sub-type (formerly "Worker code") selector was only filtered by employer category, so DIMONA category "OTH" shared by both Workers and Employees left irrelevant codes selectable. l10n.be.worker.code now carries employee_type_ids (m2m), mirrored as hr.employee.type.l10n_be_worker_code_ids (replacing the old single default worker_code_id), so the Sub-type domain filters by employer category and employee type together. When exactly one sub-type (code) matches, the field is auto-filled and made readonly. Task-6365032
This update limits Chilean company activities on electronic documents to the maximum supported by Chile's XML requirements. It helps prevent document submission rejections caused by selecting more than four activities.
Original PR description
The Chilean XML schema supports maximum of 4 activities (l10n_cl_company_activity_ids), but we allow to add more than that. If this happens, it causes rejections since electronic documents are being sent with more than 4 options selected, and returning rejection errors. Adding constraint to limit l10n_cl_company_activity_ids task-id: 6329320 Forward-Port-Of: odoo/enterprise#126026 Forward-Port-Of: odoo/enterprise#123856
Brazilian fiscal reform settings were updated to match Avalara API changes by removing an obsolete CBS/IBS taxpayer option. Presumed credit rates now appear automatically for Simplified tax regime users, default to zero, and warn users when configured under other regimes.
Original PR description
The cbsIbsTaxPayer attribute driven by this field no longer exists in the Avalara API. The presumed credit rates (pCredCBSSN/pCredIBSSN) are now shown whenever the tax regime is Simplified, default to zero, and a warning is shown when rates remain configured under another regime. task-6396740
Pakistan payroll tax calculations are updated to use the 2026 income tax brackets. The previous extra tax surcharge mechanism has been removed, helping payroll results align with the latest tax rules.
Original PR description
[IMP] l10n_pk_hr_payroll: update 2026 tax brackets . tax brackets are updated . extra tax surcharge mechanism is deleted task-6401729 Forward-Port-Of: odoo/enterprise#125711 Forward-Port-Of: odoo/enterprise#124988
1 change
Enhancements to existing features
Supersedes #275986 and fixes its approach: that PR updates the withholding rates **in place** on the existing tax records (`ret_10_income_person`, `ret_10_income_rent`, `ret_2_income_person`, and repurposes `ret_2_income_transfer` into a different concept). Those records exist in production databases with posted history behind them, and the pre-law rates remain legally applicable to operations dated before the law's entry into force, so rewriting them breaks prior-period postings, corrections an
Original PR description
Supersedes #275986 and fixes its approach: that PR updates the withholding rates **in place** on the existing tax records (`ret_10_income_person`, `ret_10_income_rent`, `ret_2_income_person`, and…
Supersedes #275986 and fixes its approach: that PR updates the withholding rates **in place** on the existing tax records (`ret_10_income_person`, `ret_10_income_rent`, `ret_2_income_person`, and repurposes `ret_2_income_transfer` into a different concept). Those records exist in production databases with posted history behind them, and the pre-law rates remain legally applicable to operations dated before the law's entry into force, so rewriting them breaks prior-period postings, corrections and reports. Following the approach used for equivalent legal rate changes in other localizations on stable branches (`l10n_ee`, `l10n_sk`, `l10n_fi`), this PR adds **new taxes** for the new rates, keeps the pre-law taxes active, archives the superseded 27% remittance withholding, gives the new 15% withholding its own payable account instead of reusing the one tied to L253-12, and leaves the module authorship untouched.
## Description
Dominican Republic Law 30-26 ("medidas pro-crecimiento económico, simplificación fiscal y mitigación de la crisis internacional"), enacted on June 18, 2026, amends several provisions of the Tax Code that affect taxes shipped with the `l10n_do` chart template:
| Concept | Before | After | Effective |
|---|---|---|---|
| ISR withholding on fees/services provided by individuals (art. 309 b) | 10% | 15% (payment on account) | July 2026 |
| ISR withholding on rents paid to individuals (art. 309 a) | 10% | 15% (single and final) | July 2026 |
| ISR withholding on payments abroad for software licenses/subscriptions, royalties, online advertising and cloud data storage (arts. 305-1 / 305-2) | 27% (general remittance rate) | 15% (single and final) | June 18, 2026 |
| ISR withholding on technical services provided by individuals (art. 309 rate over the 20% presumed base of art. 70, Regulation 139-98) | 2% effective | 3% effective | July 1, 2026 (DGII notice 10-26) |
Changes:
- New taxes `ret_15_income_person` and `ret_15_income_rent`. The pre-law 10% taxes are kept active since their rates remain applicable to operations dated before the law.
- New taxes `ret_3_income_person` and `ret_3_income_transfer` for the effective 3% withholding on technical services, posting to a new payable account `l10n_do_21030311` ("Other Withholdings (L30-26)") since their pre-law counterparts' accounts are tied to previous regulations; the pre-law 2% taxes also remain active.
- New tax `ret_15_income_remittance_tech`, posting to a new payable account `l10n_do_21030310` ("ISR Withheld on Remittances Abroad (L30-26)"), since the existing remittance account is tied to L253-12.
- `ret_27_income_remittance` is deactivated in the template, superseded by the new reduced withholding.
The new tax names follow the module's existing convention of tagging the enforcing law (as with "(L253-12)").
No changes are needed in the tax report: the ISR withholding taxes only distribute to payable accounts, without tax grids.
Scope note: Law 30-26 also raises the tax on checks and electronic transfers from 1.5‰ to 2.0‰ (art. 382 of Law 288-04, as amended), deliberately left out here: it is not an invoiceable tax — banks withhold it directly on account debits, so it is handled outside invoice accounting.
References:
- https://presidencia.gob.do/leyes/ley-30-26
- https://www.hacienda.gob.do/ley-30-26-no-dispone-impuestos-por-suscripciones-de-ciudadanos-a-plataformas-digitales-reduce-de-27-a-15-la-retencion-a-empresas-que-contratan-servicios-tecnologicos-en-el-exterior/