Friday, August 28, 2026
23 changes · master
Enhancements to existing features
Odoo now handles very large groups of records more efficiently by deciding when to reduce automatic preloading based on the original list size. This should lower unnecessary database work and improve performance in areas that process many records, such as accounting, mail, point of sale, exports, website, and attachments.
Original PR description
The previous approach was splicing the recordset in the __iter__ into batches of record with prefetch_ids equal in size to PREFETCH_MAX. This resulted in the iterator not being able to differentiate…
The previous approach was splicing the recordset in the __iter__ into batches of record with prefetch_ids equal in size to PREFETCH_MAX. This resulted in the iterator not being able to differentiate whether it comes from a large recordset or not. Which made the caching method to be used for this recordset not known as we dont have enough information on the recordset when it reaches the fetch. This made way for a lot of ad hoc fixes to detect earlier when the recordset is big enough to disable the prefetching. Currently, the slicing is removed so checking on the size of the original recordset can be done directly with getting the size of the prefetch_ids. This means that we can disable the prefetching for large recordsets on the fly without needing to change the context on a specific recordset. This also allows us to have a smaller callstack and lower number of queries per recordset. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The employee Overtime button now opens a pivot table instead of a collapsed list, making overtime information visible immediately. This helps payroll and HR users review overtime by type and month without manually expanding grouped records.
Original PR description
The employee's "Overtime" smart button opened an hr.leave list view grouped (collapsed) by year then type, so nothing was visible until every group was manually expanded. This commit replaces it with a Pivot view (work entry type rows, month columns, duration in hours as measure) and swaps the old group-by search defaults for the search view's existing "this year" filter default, so the button actually shows data on open. Task 6498778
This update improves how large sets of records are handled during German DATEV CSV exports. It helps reduce unnecessary system load, making large exports more efficient and reliable for businesses processing significant accounting data.
Spreadsheet pivots now prevent users from inserting configurations that rely on unsupported relation fields with non-numeric IDs. This avoids broken pivot tables and guides users with clearer disabled controls and tooltips.
Original PR description
Prevent inserting a pivot into a spreadsheet when it contains groupbys on relations whose IDs are not numeric (e.g. account.root uses string IDs), as the pivot table engine does not support them. The insert button is now disabled with an appropriate tooltip, and the layout configurator filters out blacklisted relations from the dimension field selector. Task: 6023622
This update improves how company configuration is shared across branch structures in Odoo. It helps businesses keep related branches aligned with common settings, reducing duplicate setup and making administration more consistent.
Original PR description
task-6341281 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
Belgian payroll settings can now be shared more consistently across company branches. This reduces duplicate setup work and helps keep payroll configuration aligned for businesses operating with multiple branches.
Original PR description
task-6341281
Employees who join after the BPJS Kesehatan billing cut-off will no longer have that contribution taken from their first payslip. The missed amount is tracked as arrears so it can be included in a later payslip, improving payroll fairness and accuracy.
Original PR description
Employees who join after the BPJS Kesehatan billing cut-off should not be charged on their first payslip. Any missed contribution is carried forward as arrears and can be included on the following payslip. task-6002251
The payroll dashboard now shows warning cards much faster by reusing the last known browser-saved state while updated checks run in the background. It also fixes a crash that could happen after dismissing all warnings when upcoming pay run dates were displayed.
Original PR description
Payroll warnings on the dashboard were loaded one by one, blocking the page until every warning finished computing and giving a poor first-load experience. Warnings now render instantly from the…
Payroll warnings on the dashboard were loaded one by one, blocking the page until every warning finished computing and giving a poor first-load experience. Warnings now render instantly from the browser's local store of the last known state, while the real computation still runs per warning in the background: - On a fresh browser, warnings load progressively as before, and get stored locally once computed. - On a later visit, stored warnings appear instantly with a spinner while they recompute in the background. - Once recomputed, a card updates in place, fades out if no longer valid, or fades in at the correct date if newly valid. Bug fix:- Steps to reproduce:- 1. Set schedule on payroll dashboard. 2. Dismiss every warning. 3. On dismissing last warning throws a traceback. Root cause:- `DashboardEmptyScreen` passed the raw closing_date value straight from the RPC response into formatDateLabel, which calls date.diff(...) assuming a Luxon DateTime. The RPC layer serializes it as a plain ISO string, so formatDateLabel crashed with "date.diff is not a function" any time the empty-dashboard screen rendered with upcoming pay runs. Fix:- added new method `formatClosingDate` to format `closingDate` seperately. task-[6240120](https://www.odoo.com/odoo/project/1251/tasks/6240120)
Assistant Rules screens for timesheets have been redesigned to make them easier to read, search, and manage. The update improves consistency across list, kanban, form, and search views, with supporting cleanup that should make the feature more reliable and maintainable.
Original PR description
This PR overhauls the list, kanban, form and search views of the Assistant Rules for clarity and consistency, along with a few related fixes and cleanups on the `aw.rule` model. Task-6116508
New project document folders now automatically inherit the available actions configured on their parent folder, making setup easier across projects. Folder access is also aligned with project visibility, and internal project followers are synchronized as folder members when visibility changes.
Original PR description
- This commit makes the newly created project's document folder have the parent folder's available embedded actions enabled by default. It is done to easily enable actions for all the project folders. - The visibility of the project impacts the internal access of the related folder. Here is the mapping of the project's visibility with the document's rights: | Visibility | Internal Access | |--------|--------| | Invited Internal Users | None | | Invited Internal and Portal Users | None | | All Internal Users | Editor | | All Internal Users and Invited portal users | Editor | Also, when the project's visibility changes, the members of the related document folder are also synchronized with the project's internal followers users. Task-6025723
Turkish payroll has been updated to apply the 2026 SGK social security contribution rules, including new minimum and ceiling checks for the SSI contribution base. The change also simplifies how employee and employer contributions are calculated and lets companies apply the relevant employer incentive reduction.
Original PR description
Update Turkish payroll localization to reflect 2026 SGK regulatory parameters and restructure SSI contribution rules: - Consolidate employee SSI contribution (Disability 9%, Health 5%, Short-Term 0%, Unemployment 1%) under a single salary rule (SSIEDED). - Consolidate employer SSI contribution (Disability 12%, Health 7.5%, Short-Term 2.25%, Unemployment 2%) under a single salary rule (SSICDED). - Remove obsolete standalone unemployment salary rules (SSIDED and SSIUCDED) and their related rule parameter. - Add SSI base amount minimum and update the SSI base ceiling rule parameters, and clamp the SSI contribution base between them. - Add l10n_tr_incentive_tier field on res.company and res.config.settings (0, 2, or 5 points) to deduct incentive points from the employer SSI contribution rate. **task-6397284**
Belgian payroll now better supports economic unemployment compensation, including specific handling for CP302 and clearer separation for CP200 employees. This helps payroll teams apply the right compensation rules and receive a reminder when required inputs are missing.
Original PR description
This commit adds the rules to support economic unemployment for CP302 and updates the existing setup. Key changes: * Add the 'ECONOMIC_UNEMPLOYMENT_BASE' category to better group economic and temporary unemployment rules. * Split the EUC rule into two separate rules: - 'EUC_CP200': For CP200 employees (uses a property input). - 'EUC': For all other joint committees. * Add a warning for 'EUC_CP200' to remind the user to set the input, which defaults to 0.0. * Rename the 'EUB' and 'EUT' rules to fit the new changes, and include the necessary upgrade script. * Add tests for the new rules and calculations. Task #6365138
Deleting an account now benefits from added database indexes in Accounting and Point of Sale. This reduces delays caused by background dependency checks, improving responsiveness for users managing account records.
Original PR description
Without these indexes, the foreign key check when deleting an account can take a long time. Forward-Port-Of: odoo/odoo#284780
HR users can now see which employees and material resources are linked to a working schedule directly from smart buttons. When a schedule is shared across employees, the system warns users and offers to duplicate it for the current employee, reducing accidental changes that affect multiple people.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: . Add a smart button that list the employees linked to the working schedule . Add a smart button that list the material resources linked to the working schedule . Show a “Shared Across Employees” warning when navigating from the Employee model, with an option to duplicate and edit the record for the current employee, automatically linking the newly created record to that employee. task-6106525 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Turkish Nilvera e-invoice users no longer need a separate step to retrieve the official PDF once an invoice is accepted. The status sync now also fetches the PDF for successful invoices, handles additional successful commercial invoice statuses, and allows retrying sync when the status is unknown.
Original PR description
Getting the official Nilvera PDF on an invoice took three steps: wait for the status cron to run, wait for the invoice to be accepted by GİB, then click "Fetch Nilvera e-invoice PDF". The sync button…
Getting the official Nilvera PDF on an invoice took three steps: wait for the status cron to run, wait for the invoice to be accepted by GİB, then click "Fetch Nilvera e-invoice PDF". The sync button next to the Nilvera status only refreshed the status and stopped there, so the user had to come back to the invoice later for the document itself. Fetch the PDF right after the status refresh for the invoices that came back successful, and drop the now redundant button from the form view. Pending invoices are filtered out beforehand so they are not polled a second time by the PDF routine. A commercial invoice does not stay on 'succeed'. Once GİB accepts it and the recipient answers, the status is overwritten with 'commercial_approved' or 'commercial_answered_automatically', and both are terminal successes. Group the three in a constant and use it at every PDF gate. In the PDF routine those invoices previously matched none of the status branches, so they were dropped without being fetched, reported pending or reported failed. 'commercial_rejected' stays out: a rejection is not a success, and its PDF is already fetched by the rejection handler. Also show the sync button when the status is "Unknown": e-archive invoices stay unknown until GİB generates its report at 20:00 GMT+3, which is precisely when the user wants to poll again. The status cron already covers that status, the view was the odd one out. task-6434404 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spreadsheet users can now create a new global filter directly from the related filters area in the side panel. When a field is selected, the filter editor opens with relevant fields already filled in, reducing manual setup and making spreadsheet filtering faster.
Original PR description
Task: 6079698
Turkish e-Archive invoices can now identify e-commerce sales and include the required payment, website, shipment, and delivery details. This helps businesses comply with GiB requirements and prevents invoice export when mandatory e-commerce information is missing.
Original PR description
Purpose: Turkiye e-Archive regulations require invoices generated from e-commerce sales to include specific tracking and fulfillment information. Previously, the system did not distinguish between…
Purpose:
Turkiye e-Archive regulations require invoices generated from e-commerce sales
to include specific tracking and fulfillment information. Previously, the system
did not distinguish between standard sales and e-commerce sales, which is
required by GiB.
Modifications:
-Introduced stored computed field `l10n_tr_sales_type`('normal', 'website') on
'account.move', allowing users to control whether e-commerce nodes are included.
-Made `l10n_tr_sales_type` and `l10n_tr_gib_invoice_type` required when
`l10n_tr_nilvera_customer_status = 'earchive'`.
-Updated e-Archive XML generation to automatically inject required e-commerce
nodes when `l10n_tr_sales_type` is set to 'website'.
-Added validation checks to block export if required e-commerce details are missing.
Key additions for e-commerce sales include:
-Identifies the order as e-commerce sale and includes specific website domain.
-Adds payment details such as agent name, method used (e.g., Credit Card, Wire
Transfer, Payment Provider), and payment date.
-Includes logistics data like carrier/driver name, Tax ID (VKN/TCKN), and
shipment/delivery date.
Related Upgrade PR: https://github.com/odoo/upgrade/pull/10981
task-6236315This update adds checks to ensure payroll rule data files are kept up to date for several country localizations. It helps reduce payroll configuration inconsistencies and supports more reliable payslip processing in Bangladesh, Kuwait, Indonesia, Iraq, Oman, Romania, and Pakistan.
Original PR description
. Add check that the rules data files are updated on localizations . Add _get_data_files_to_update() method for bd, kw, id, iq, om, ro, pk localizations task-6456276
This update improves the website shop pickup experience by refining how warehouse pickup locations and exceptional closing information are shown. Customers should get clearer information when choosing where to collect an order, reducing confusion and support questions.
Original PR description
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
Holiday pay payslips now hide day-tracking details that are not useful in the salary computation view, making the screen easier for payroll users to read. Related time-off values are also clearly labeled in days, reducing confusion when reviewing Belgian payroll calculations.
Original PR description
This commit improves the user experience with the following changes: - Hide "Right to time off", "Time off already taken", and "Additional Vacation Taken" inputs from the "Salary Computation" tab on Holiday Pay N and N-1 payslips. - Set the display visibility rule for these fields to "Never". - Add a "Days" unit to the "Time off", "Right to time off", and "Additional Vacation Taken" rules. Task: 6222665
Notifications have been refreshed to be smaller, clearer, and easier to follow. A new progress bar shows when a notification will disappear, improving the user experience across several Odoo apps.
Original PR description
A big part of the notification behaviour that was in the notification service has been move to the component "Notification". With this comes also a visual cleaning of the notification. Smaller, more compact and with a progress bar that show when the notification will disappear. TASK-ID: 4334047
The Manufacturing Order Overview now includes subcontracted production details, making it easier for users to understand outsourced manufacturing steps alongside regular production information. This improves visibility for teams managing subcontracting through purchase and manufacturing workflows.
Original PR description
Handle subcontracted productions in MO Overview. task: 5225952 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Manufacturing order overviews now include a planning simulation that considers work center availability, similar to the existing bill of materials overview. This helps business users assess scheduling feasibility earlier without changing component availability assumptions.
Original PR description
Simulate planning in MO Overview task: 4455170 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr