Daily updates from Odoo
Monday, August 10, 2026
29 changes · master
Enhancements to existing features
Shared document links now keep the user's current context, including the active spreadsheet sheet, even when redirects occur. This helps recipients land directly on the intended sheet instead of needing to navigate there manually.
Original PR description
## Description of the issue/feature this PR addresses: Current behavior before PR: - Fragment parameters in document URLs (such as the active sheet) were lost during redirects, causing the client to lose its current state. Changes introduced: - Redirects now preserve fragment parameters generically, so URL state is maintained without needing feature-specific controller logic. - Shareable document links now include the current `sheet_id` as a URL parameter. Desired behavior after PR is merged: - When a shared document link is opened, the correct sheet is restored automatically, preserving the user’s context. Task: [4760176](https://www.odoo.com/odoo/project/2328/tasks/4760176)
Spreadsheet dashboard definitions were updated so key values and baselines use the latest formula format. This keeps dashboards working consistently across accounting, CRM, helpdesk, payroll, recruitment, marketing, manufacturing, purchasing, rentals, and documents reporting.
Original PR description
…formula syntax "keyValue" and "baseline" are now formulas and need an "=" symbol Task: 6343843
Document sorting with AI is now available without requiring a Studio subscription. This makes the AI sorting capability easier to access for document workflows and removes an unnecessary paid dependency.
Original PR description
Purpose ======= We changed our mind, and we should be able to sort documents with AI without having to pay for studio. Revert of bc15543b5ce563bdddb54198eaaf00a5c8d01e54 Task-6383816 Forward-Port-Of: odoo/enterprise#126796
Website users can now use the ALT+H keyboard shortcut on frontend pages to jump directly to the backend homepage. This makes navigation faster for users who move between the public website and administrative areas.
Original PR description
This PR adds an "ALT+H" shortcut on the frontend pages to jump straight to the backend homepage. task-5347435
US payroll calculations now use the date employees are paid, rather than the pay period end date, for year-to-date totals and tax reporting. This helps ensure year-end payslips paid in January are reported in the correct tax year, improving W-2 accuracy.
Original PR description
*: l10n_us_ Purpose: For the US official tax reporting (e.g. W-2), the totals are computed based on the date when the payslip was paid out to the employees, not the pay period in which the wages were earned. It is necessary because a very likely occurrence of a December payslip being paid out in January of the following year must count towards the W-2 of the following year. Current Behavior: The US salary rules and related year-to-date calculations are computed based on the closing date of the pay period. Expected Behavior: The US salary rules and related year-to-date calculations are computed based on the paid_date of the payslip. task-5450399
The employee list shown when creating a Pay Run is now less cluttered because the Termination column is hidden by default. Users can still access it from the Options menu when needed, keeping important payroll details available without crowding the main view.
Original PR description
Before, when creating a Pay Run, the Termination column was always visible. Since it is not frequently used, we moved it to the Options menu to reduce clutter. Task-6449701
Existing spreadsheet dashboards across several business apps have been refreshed to use the newer carousel data view experience. This makes dashboard navigation and presentation more modern while keeping the underlying dashboard content unchanged.
Original PR description
This task aims to update existing dashboards to use new carousel data views. Task: 6412458
Belgian payroll users can now see the replacement amount directly in the worked days section of a payslip. This makes absence valuations clearer and reduces the need to rely on generated reports to understand how amounts were calculated.
Original PR description
Period valuations for absences were only computed when generating reports, making it unclear for users how amounts were determined. This adds a "Replacement Amount" column to the worked days tab of the payslip to display the period valuation. Task-6377538
Australian payroll pay runs now show superannuation contributions and tax withholding directly in the payslip list, along with totals at the top of the pay run. This helps payroll teams review key employer contribution and withholding amounts faster without opening individual payslips.
Original PR description
super contribution column (SUPER + SUPER.CONTRIBUTION lines) is shown in the payrun's view
. in the list view of payslips
tax withholding column is shown in the payrun's view
. in the list view of payslips
Total of super contributions and tax withholding is shown in the top of the payrun view
task-6423860Odoo now creates tracking log messages in batches when many records are updated at once, instead of processing each record separately. This improves performance for large updates while preserving attachments and tracking details for each document.
Original PR description
When tracked fields change on many records without a subtype change, each record's tracking message was logged individually through `_message_log`, resulting in one `_message_create` call per record. Grouping the logs by author and going through `_message_log_batch` creates all the messages of a batch in a single `_message_create` call. To allow this, `_message_log_batch` now takes `attachment_ids` and `tracking_values` as dicts keyed by record id instead of flat values, lifting the previous limitation that batch logs could not carry attachments or tracking values for more than one document. task-6354178
When logging a VoIP call, Odoo now automatically suggests the business record the user already has open, reducing manual selection and helping calls get linked to the right customer, ticket, project, or document. The update also prevents access errors for non-HR users when call logging touches HR-related options.
Original PR description
When log a call, if the user has a opened form of a record, we will try select this record in the log call wizard. Task-[6204862](https://www.odoo.com/odoo/5778/tasks/6204862)
Belgian payroll users can now correct previously submitted 281.10 and 281.45 forms using the Belcotax reference number. The system also warns teams when payroll changes make submitted forms inconsistent, helping them identify and handle corrections on time.
Original PR description
Task: 5470512
Belgian payroll dashboards now warn when an employee has Dimona declarations that are not yet covered by a payslip, even though a pay run exists without that employee. This helps payroll teams spot missing payslips sooner and reduce compliance or processing oversights.
Original PR description
This commit adds a dashboard warning for employees that have dimonas not covered by any payslip yet a payrun exists in which they are not included. task- 6201337
Resolved issues and error corrections
TikTok Shop orders that arrive without a payment timestamp, such as Cash On Delivery orders, can now be created and synchronized instead of failing. The system temporarily uses the order creation time and marks payment as pending, then updates the order once TikTok provides the payment confirmation time.
Original PR description
**Issue**
- TikTok Shop orders may be received without any `paid_time` value in the returned API data, particularly for _Cash On Delivery ([COD](https://seller-ph.tiktok.com/university/essay?knowledge_id=10004482&lang=en)) payments.
- When creating the order, `_create_order_from_data` accessed `order_data[‘paid_time’]` directly, which triggered a `KeyError` and prevented all orders from being fully synchronised.
**Changes**
- When creating an order, if `paid_time` is missing from the data provided by TikTok:
-> `date_order` is initialised with `create_time` as a fallback
-> The new field `tiktok_payment_pending` is set to `True` to mark the order as awaiting payment confirmation.
- During subsequent synchronisations, if `paid_time` is now provided by TikTok for a pending order,
-> `date_order` is updated with the new provided timestamp and the `tiktok_payment_pending` flag is reset.
opw-6440127
Forward-Port-Of: odoo/enterprise#126797The UAE payroll employee profile now restricts the MOHRE skill level field to HR users only. This prevents non-HR employees from seeing HR-specific information on public employee profiles and resolves the reported access issue.
Original PR description
add group `hr.group_hr_user` to `l10n_ae_mohre_skill_level` to make sure it's hidden for non-hr users in the public employee profile fixes https://runbot.odoo.com/odoo/error/242024 opw-242024 Forward-Port-Of: odoo/enterprise#125452
Tax return deadline dates in account report emails are now shown using the recipient's locale settings. This prevents confusion caused by unfamiliar date formats and makes deadline communications clearer for international users.
Original PR description
The date was not formatted according to the user's locale. Forward-Port-Of: odoo/enterprise#127317
Belgian payroll now calculates employment bonuses correctly for both full-time and part-time employees. This improves payroll accuracy and helps align payslips and social security reporting with official Belgian guidance.
Original PR description
[IMP] l10n_be: fix the calculation of employement bonus A According to the document: https://www.socialsecurity.be/employer/instructions/dmfa/fr/latest/instructions/deductions/workers_reductions/workbonus.html We were calculating the employement bonus A according to S = (W/H) x U calculation in the document. But it is only for part-time workers. Now, we consider full time cases as well and the final result is accurate. task - 6334065
The EPF Summary report now calculates EPS contributions based on basic salary, in line with Indian payroll rules. This helps payroll teams avoid incorrect statutory contribution amounts in reporting.
Original PR description
**Steps to Reproduce** - Create an Indian employee. - Create a payslip for this employee. - Go to **Payroll > Reporting > EPF-ECR Report**. - Create a new report with the report type **EPF Summary**. **Before This Commit** - For the EPS contribution, we were calculating `min(15,000, EPF)` and then applying **8.33%** to the resulting amount. - This resulted in an incorrect EPS contribution amount. **After This Commit** - According to Indian payroll rules, the EPS contribution is calculated as 8.33% of `min(15,000, Basic Salary)`, rather than `8.33% of the EPF amount`. - This commit corrects the EPS contribution calculation accordingly. Task: [6442399](https://www.odoo.com/odoo/project/1251/tasks/6442399) Forward-Port-Of: odoo/enterprise#126608
Activity Watch can now use a task ID captured directly from a configured rule pattern, such as one found in a page URL or window title. This makes timesheet suggestions more accurate when the task is already visible in the activity name, reducing reliance on less precise guessing from past activity.
Original PR description
Before this commit, when the task_id to link to activity watch can be found in the URL or window/tab name but it is not possible for the user to create a regex to be able to automatically say to the system the task_id is found in the event name recorded by activity watch. This commit adds the possibility to define `task_id` group name inside the regex to be able to take that information instead of searching which task is linked to that event based on previous key event or the frequency of the current user. task-[6384029](https://www.odoo.com/odoo/project.task/6384029) Forward-Port-Of: odoo/enterprise#126588 Forward-Port-Of: odoo/enterprise#124113
This update makes a small correction in the referenced module to improve reliability. The pull request details do not provide enough information to identify the specific business process affected, so the expected impact appears limited.
Automatic values inserted into salary contract and signature documents now keep valid zero values instead of turning them into blanks. Decimal values are also rounded properly, helping business documents show accurate amounts.
Original PR description
Before this commit, falsy values were always set to '' even when they corresponded to numbers. Moreover, floats values were not rounded. Forward-Port-Of: odoo/enterprise#127064 Forward-Port-Of: odoo/enterprise#121640
This fix makes cash basis report tests use the configured outstanding receipts account instead of assuming a fixed account code. It helps prevent false test failures when account codes differ between database setups, improving reliability without changing business functionality.
Original PR description
Description of the issue this commit addresses: Commit 63f5646cfd75 made the tests use the default outstanding account but hard-coded code 101403. In an all-module database, generated account codes depend on existing accounts, so Outstanding Receipts may use code 101404 and make otherwise correct report assertions fail. --- Desired behavior after this commit is merged: This commit derives the expected report line name from the configured outstanding receipts account, making the assertions independent of its generated code. --- runbot-[231581](https://runbot.odoo.com/odoo/error/231581) Forward-Port-Of: odoo/enterprise#126743 Forward-Port-Of: odoo/enterprise#125652
This update improves how the Belgian payroll module calculates DMFA reported days, especially for employees working 40-hour weeks. It helps prevent overstated day totals in payroll declarations, improving reporting accuracy and reducing correction work.
Original PR description
Currently, there is problem with DMFA Number of days Computation, If we have case where the employee working hour is 40h/week, the calculations mentioned in report 67.5 days, which is too many, In this PR, expected to update the number of days on DMFA computations task-6432418
The tax return view now adjusts its status bar layout to match the number of states shown. This prevents broken or misaligned cards for country-specific tax returns, such as Indian reports with four states.
Original PR description
…te counts Steps to reproduce: - Install l10n_in_reports and select an Indian company - Go to the tax return and set a date in the past --> The state bar layout breaks because there are 4 states, but the CSS grid was previously hardcoded to a maximum of 3 columns. Cause: The CSS `--columns` rule assumed a maximum of 3 states across return cards. When 4 states are present, the grid columns shift or break. Fix: Calculate the maximum state count across all visible records in the kanban renderer (`maxStateCount`) and set it as a CSS variable on the parent container. This ensures all cards in the view align consistently to the maximum number of states present without hardcoding column counts.
The Point of Sale appointment booking Gantt view now loads capacity information when it first opens. This prevents attendee labels from showing confusing placeholder text like "undefinedp" and makes booking details clearer for staff.
Original PR description
Steps to reproduce : - Open PoS and navigate to the Booking view (Gantt View). - Create a booking or view existing bookings / time-off leaves on the Gantt chart. - Observe 'undefinedp' appended to attendee names on Gantt pills (e.g. 'Billy Fox undefinedp'). Issue : 'undefinedp' is displayed on Gantt view pills instead of the correct capacity. Cause : Capacity information was not being fetched during the initial Gantt view rendering. Fix : Ensured capacity data is fetched during initial Gantt view loading so guest capacity displays properly on Gantt pills. Task ID: 6405279
This fixes an issue in the Timesheet timer form where clicking Save or Reset could trigger an error instead of completing the action. The change helps users record or adjust time entries without interruption.
Original PR description
469a7d200ce ([FIX] timesheet_grid: focus on description input, odoo/enterprise#125993) was forward-ported from saas-19.4 onto master a day after 6d3c12624e4 had turned `descriptionFieldRef` into a `signal.ref()`, which has no `.el`: clicking Save or Reset in the timesheet timer form throws on `undefined.querySelector` in onPatched -- the very refocus the original fix was adding. The read is correct on the back branches, where the ref is still a `useRef()`; call the ref on master.
Website Studio now ignores automatic cleanup edits when deciding whether a user has made changes. This helps prevent the system from treating background formatting updates as user edits, reducing false change prompts or unnecessary save behavior.
Original PR description
Automatic mutations done by `normalize` are now marked with `isAutomatic`. This commit ignore those in `on_pending_mutations_staged_handlers`.
Code cleanup and technical improvements
This change updates how report filters are built internally, aligning enterprise reporting modules with a shared query-handling improvement. It should not change day-to-day workflows, but helps keep reporting code more consistent and maintainable.
Original PR description
https://github.com/odoo/odoo/pull/281077
German Elster tax submission features have been moved into the main German reports module instead of staying in a separate add-on. This simplifies setup and maintenance while keeping the same reporting capability available in one place.
Original PR description
After introducing the module l10n_de_reports_elster in 19.0 ( PR: https://github.com/odoo/enterprise/pull/121805 ), we need to merge it in l10n_de_reports in master as it doesn't make sense to keep this module as a standalone module. l10n_de_reports_elster is now part of l10n_de_reports. task-6396219