Monday, September 14, 2026
33 changes · master
Enhancements to existing features
Tax closing accounts are now configured on tax return types instead of being repeated across individual tax groups. This makes setup easier to find, reduces duplication across country localizations, and restores the onboarding wizard for setting return periods.
Original PR description
task-6237033 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Manufacturing users can now record an extra cost directly on a bill of materials. This cost is included in BoM and manufacturing order overviews and their printed PDFs, giving clearer visibility into total production costs including subcontracting costs after confirmation.
Original PR description
This commit adds a field so the user can define an `extra cost` for a manufacturing BoM. This value will be added to the reporting in the enterpise module. Also will this commit display the extra cost in the BoM Overview, MO Overview and the printed pdf's of those overviews. Additionally will the extra cost from subcontracting also show up in the overview once the MO is confirmed. Task-6542702
Tax return closing accounts are now configured on shared return types instead of separate setup flows, making configuration more consistent across companies and localizations. The redundant configuration wizard was removed, while settings remain available through return type configuration and accounting settings.
Original PR description
task-6237033
Odoo Studio users can now move notebook pages to a new position using drag and drop. This avoids deleting and recreating tabs with their content, making form customization faster and less error-prone.
Original PR description
When a page is defined in the UI; it is not possible to entierly move it. It needs to me removed and re-ceated at the right place with all of its content. This commit allows users to reorder notebook pages with drag&drop. task-6526153 Co-authored-by: Lucas Perais (lpe) <lpe@odoo.com>
Visitors can now join a public discussion channel directly from the channel page header instead of opening the sidebar and finding the Follow button. This makes joining public conversations easier while still limiting the action to visitors who have an identified user or guest profile.
Original PR description
Before this commit, the only way to join a channel from its public page is the Follow button of the channel tab, which requires the visitor to open the sidebar and find the channel there. This commit moves the `join-channel` thread action to the bundle the public page loads, so the channel header offers it there too. Its call becomes `joinRpc()` on the channel, shared with the Follow button, and sends the visitor's user id or guest id. Note that the action stays hidden until the visitor has a persona, as an anonymous visitor has no guest record to add as a member.
Production analysis reports now include extra costs defined on Bills of Materials in key cost totals and averages. This gives business users a more complete view of manufacturing costs for planning, monitoring, and decision-making.
Original PR description
This PR adds an extra cost field to BoM's and in this commit the following values are updated to include this extra cost in the `Report/Production Analysis`: - `Expected Total Cost / Unit` - `Average Total Cost` - `Total Cost` Also a field is added in the report to display the `Extra Cost` Task-5259448
Inventory accounting now prepares product value records using product, lot, and stock movement information. This makes valuation data more complete and easier to manage through updated screens and related record handling.
Original PR description
Adapt product value model Create product value from product/lot/move Adapt user interface with all required fields/functionalities Also added ondelete cascade on product.value and on stock.move as already present on stock.move.line task: 5362246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Scheduled call activities now prefill an editable phone number for single records and save the chosen number on the activity. The update prevents accidental overwrites of existing contact phone numbers, keeps batch scheduling record-specific, and makes call numbers easier to copy and use.
Original PR description
Prefill single-record Call activities with an editable phone number and persist the chosen value on the activity. Keep batch values record-specific. Fill only a blank, uniquely related contact when the user changes the prefilled number. Never overwrite an existing phone or let automation copy an untouched prefill. Render the number as selectable text, show Copy on hover or focus, and place Call immediately before Done. Task-6538978 Enterprise: https://github.com/odoo/enterprise/pull/130805
Users can now enter duration-based formulas directly in time fields, such as adding or subtracting 30 minutes or combining hours and minutes. This makes bulk edits and day-to-day time entry faster and more accurate because calculations are applied consistently per record.
Original PR description
The float_time widget can now use formulas that use "duration" (e.g.: =2h+30m-45m or -=30m) All arithmetic operators are supported (+, -, * and /), by reusing the existing ArithmeticOperation machinery instead of custom logic. This also means an increment (e.g. +=30m) is applied individually on each record when editing several records at once, instead of forcing the same value on all of them. It's using parseFloatTime under the hood, so the operation accepts everything that you could put in the field. (2h 30m or 2:30 or 2.5) task-6481324 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Pakistan localization settings now manage the IP address service in the base Pakistan module, making it available more consistently across related features. Point-of-sale settings now show the IP address field, and POS invoice reporting uses the correct Odoo service endpoint for more reliable connectivity.
Original PR description
Moved the IAP address system parameter to the base `l10n_pk` module. Also added the IP address field to the POS settings view. Additionally, fixed the endpoint targeted by `l10n_pk_edi_pos`, which was incorrectly set to `iap.odoo.com`. The proxy should be `iap-services.odoo.com`, consistently with `l10n_pk_edi`. task-6569742 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Loan accounting entries are now posted on the first day of the relevant month instead of waiting for the payment due date, while avoiding dates before the loan begins. This improves cash and profit-and-loss visibility, reduces month-end workload, and supports faster automatic reconciliation.
Original PR description
Previously, loan journal entries were posted based on the payment due date. There is no need to wait until the due date since loan details are fixed and known in advanced. Additionally, posting the loan entries on the first of the month reduces month-end bottlenecks, allows for better Cash and P&L visibility, and allows instant auto-reconciliation. Modifications: - Modified `action_confirm` to calculate the accounting date and set journal entries to the first of the month (without pre-dating the loan start date) - Set due date (`date_maturity`) on the short term account line of main payment entry. - Updated the reclassification reversal move to post exactly one month after the accounting date using `relativedelta(months=1, day=1)`. Task-6237907
Scheduled call activities now align with the updated call action experience, making phone numbers easier to select while still supporting native dialer fallback. The VoIP scheduling dialog also uses a cleaner editable phone input without an extra call button, reducing confusion for users.
Original PR description
Community renders scheduled Call numbers as selectable text and exposes an explicit Call action. Adapt the Enterprise and VoIP tests to that action, keep the native-dialer fallback, and use a formatted editable phone input without a call button in the VoIP schedule dialog. Task-6538978 Community: https://github.com/odoo/odoo/pull/287192
Quality managers can now validate stock transfers, manufacturing orders, and repair orders even when some quality checks are still pending. This helps avoid operational delays when checks take longer, while still allowing quality controls to be completed afterward.
Original PR description
Quality checks must currently be completed before validating pickings, manufacturing orders, or repair orders. However, some checks can take a significant amount of time, causing unnecessary bottlenecks in the workflow when immediate validation is required. Allow quality managers to validate these documents with pending checks so that quality controls can be completed after the fact. Enterprise PR: odoo/enterprise#129545 Task-6365390 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
Quality managers can now validate transfers, manufacturing orders, and repair orders even when some quality checks are still pending. This helps avoid operational delays when immediate validation is needed, while still allowing the checks to be completed afterward.
Original PR description
Quality checks must currently be completed before validating pickings, manufacturing orders, or repair orders. However, some checks can take a significant amount of time, causing unnecessary bottlenecks in the workflow when immediate validation is required. Allow quality managers to validate these documents with pending checks so that quality controls can be completed after the fact. Community PR: odoo/odoo#285240 [Task-6365390](https://www.odoo.com/odoo/966/tasks/6365390)
Updates Belgian payroll termination fee calculations so meal vouchers and withholding taxes are based on more accurate salary, work schedule, public holiday, and time-off data. This helps produce more compliant final payslips and related payroll declarations for departing employees.
Original PR description
## Meal Vouchers In the meal voucher rule for terminations fees structure: 1. correct the quantity from 220 to number_of_days_per_week * 52 - 10 (public holidays) - time-off allocation (paid time off + extra legal). 2. correct the result: meal_voucher_amount - meal_voucher_employee_share ## Withholding taxes 1. Creation of a new rule: Reference Salary = BASIC2 + YEAREND_BONUS + VARIABLE_SALARY + RESIDENCE + EXPATRIATE + PAY_VARIABLE_SALARY + ATN_CAR_TERM 2. Redefinition of the Yearly taxable salary for Termination fees: Reference Salary - ONSS 3. Redefinition of withholding taxes: Yearly taxable salary (Termination fees) - children exoneration - ONSS __ task-6247703
Belgian payroll configuration now requires the company sector to be filled in. This helps prevent payroll calculation errors for outplacement and payslip reductions that depend on the sector information.
Original PR description
The l10n_be_sector field is essential for computing outplacements and payslip reductions. Making it mandatory during the configuration of the company prevents computational errors. task-6560105
Mobile VoIP users now see a clear option to enable audio when microphone access is missing or blocked. This helps users resolve call audio permission issues directly from the softphone menu, while keeping desktop audio device selection unchanged.
Original PR description
Commit [1] restored audio device selection while in a call, improving the softphone top-left dropdown menu that was reviewed at [2], breaking a bit what was introduced at [3] and [4]. The mobile UI…
Commit [1] restored audio device selection while in a call, improving the softphone top-left dropdown menu that was reviewed at [2], breaking a bit what was introduced at [3] and [4]. The mobile UI regarding audio settings was still to restore though. Indeed, before [2], it made sense: there was a dedicated audio button that showed an error if the microphone was not accepted (yet) or blocked and, on mobile, clicking on it would open the permission dialog with indication how to fix the browser-side error if any. Now, since [2] (and [1]), the error icon is still shown... but on mobile there is no entry to have those permission dialogs. This commit restores that. - Desktop, microphone error: show an error icon (both on the top-left dropdown and on the audio settings entry). The audio settings entry allows device selection. - Desktop, no microphone error: no error icon, still the audio settings entry to allow device selection. - Mobile, microphone error: show an error icon on the top-left dropdown, and a "Enable Audio" entry with an error icon in the dropdown. Click on that opens the permission dialogs. - Mobile, no microphone error: no error icon and no audio settings entry (we still keep device selection disabled on mobile as not supported by the vast majority of mobile browsers). [1]: https://github.com/odoo/enterprise/commit/7250e8dda350019f739b91fa6cc7533395ec45da [2]: https://github.com/odoo/enterprise/commit/763bfc77cfae341d95967fa04dd514bd3095cb9d [3]: https://github.com/odoo/enterprise/commit/35d0ce76818e4e6efc8ab502aa03d8047e0c880e [4]: https://github.com/odoo/enterprise/commit/e964e4b28604f32550566ad1b9f17aed89653597 Related to task-6533808
Belgian payroll can now correctly handle the same worker being employed by more than one company in the same database. This prevents duplicate employee relationship conflicts and avoids mixing payroll declarations or employment periods between companies.
Original PR description
The dimona relation represents a relation between a worker (identified by their NISS) and an employer. Before this commit, the relation model had a unique(name) constraint, where name is the NISS of the employee. Notably, this constraint was company-unaware; this meant that a person who was employed be 2 companies in the same database would effectively break the constraint, and their 2nd relation could never be saved in the database properly. This commit scopes the unicity constraint per company and ensures that computed fields are scoped by company to avoid accidentally linking declarations/periods/relations together across different companies.
Kanban list-style cards have been standardized across several Odoo apps to provide a more consistent and polished user experience. The update aligns these views with the newer Frost design and removes layout conflicts that could affect visual cues such as selection tooltips and colored borders.
Original PR description
*: base_automation, hr_holidays, hr_recruitment, mass_mailing, survey, website Several Kanban views previously duplicated card-list rendering customizations. This commit fine-tunes the layout to…
*: base_automation, hr_holidays, hr_recruitment, mass_mailing, survey, website Several Kanban views previously duplicated card-list rendering customizations. This commit fine-tunes the layout to match the Frost design and standardizes it with the `o_kanban_list` class. It also replaces the `::after` pseudo-element with `::before` to avoid conflicts between the Kanban card's colored border and the selection tooltip. task-6528164 Requires: - https://github.com/odoo/enterprise/pull/131237 | Before | After | |--------|--------| | <img width="1437" height="449" alt="Screenshot 2026-09-11 at 13 13 20" src="https://github.com/user-attachments/assets/ee414f87-96f8-49e5-93eb-aa3d08f31c51" /> | <img width="1439" height="458" alt="Screenshot 2026-09-11 at 13 13 14" src="https://github.com/user-attachments/assets/a33dc71d-2316-4f08-b520-db437f503be3" /> | | <img width="1428" height="603" alt="Screenshot 2026-09-11 at 13 14 18" src="https://github.com/user-attachments/assets/da645979-e8f2-4849-98d7-db7a51d40a11" /> | <img width="1427" height="535" alt="Screenshot 2026-09-11 at 13 14 09" src="https://github.com/user-attachments/assets/3f208b19-7475-4426-8d67-13a71aeabac7" /> | | <img width="1438" height="582" alt="Screenshot 2026-09-11 at 13 14 35" src="https://github.com/user-attachments/assets/8c47cfb8-50f9-4019-b8ef-104a9f49f703" /> | <img width="1440" height="516" alt="Screenshot 2026-09-11 at 13 14 43" src="https://github.com/user-attachments/assets/6e47647d-4257-40d0-9f97-c63ae3c7e474" /> | | <img width="1429" height="754" alt="Screenshot 2026-09-11 at 13 14 57" src="https://github.com/user-attachments/assets/eba0a087-0864-4287-9359-4d654ca1e2e8" /> | <img width="1438" height="576" alt="Screenshot 2026-09-11 at 13 14 53" src="https://github.com/user-attachments/assets/496dd898-607a-4f48-9026-587278c75ddb" /> | | <img width="1438" height="430" alt="Screenshot 2026-09-11 at 13 15 17" src="https://github.com/user-attachments/assets/f543a688-91c1-4f24-8d17-ca0bb13d230b" /> | <img width="1437" height="426" alt="Screenshot 2026-09-11 at 13 15 32" src="https://github.com/user-attachments/assets/235f262b-5545-40d9-a735-5f01c7368610" /> | | <img width="1430" height="685" alt="Screenshot 2026-09-11 at 13 16 31" src="https://github.com/user-attachments/assets/764a54db-284d-4782-a516-f0caf0f4d234" /> | <img width="1440" height="557" alt="Screenshot 2026-09-11 at 13 15 57" src="https://github.com/user-attachments/assets/7141872c-acc3-4435-8667-10adbeee6110" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian reporting now includes an added check related to VAT deductibility. This helps businesses improve the accuracy of tax reporting and reduce the risk of incorrect VAT treatment.
Original PR description
task-6180199
Appointment types and Sign templates now use a more consistent Kanban list layout aligned with the updated Frost design. This reduces visual inconsistencies between screens and makes list-style cards easier to scan for users.
Original PR description
*: appointment Several Kanban views previously duplicated card-list rendering customizations. This commit fine-tunes the layout to match the Frost design and standardizes it with the `o_kanban_list` class. task-6528164 Requires: - https://github.com/odoo/odoo/pull/287821 | Before | After | |--------|--------| | <img width="1440" height="687" alt="Screenshot 2026-09-11 at 13 16 44" src="https://github.com/user-attachments/assets/9e2a5bf6-7357-45c9-b913-07435b77a3be" /> | <img width="1442" height="652" alt="Screenshot 2026-09-11 at 13 16 43" src="https://github.com/user-attachments/assets/9e8a1ca0-3655-482f-b283-3c6ed83fd607" /> | | <img width="1437" height="424" alt="Screenshot 2026-09-11 at 13 17 03" src="https://github.com/user-attachments/assets/19f2b418-5301-4efc-818b-9b2f2e68185a" /> | <img width="1437" height="454" alt="Screenshot 2026-09-11 at 13 17 13" src="https://github.com/user-attachments/assets/2000b1a1-d823-4fc1-b6fc-ebac07963d35" /> |
Documents and folders uploaded under employee or project records are now automatically connected to the related record, reducing manual linking and making files easier to find. The update also shows the linked record in the folder details panel, while preserving existing links in several move, copy, and deletion scenarios.
Original PR description
Documents uploaded in a folder were not automatically linked to the folder's related record. The record's folder is now automatically linked to the record on create/update, and documents inherit the…
Documents uploaded in a folder were not automatically linked to the folder's related record. The record's folder is now automatically linked to the record on create/update, and documents inherit the link from their parent folder. Add create/write/unlink hooks in DocumentsMixin to auto-link folders to records. Activated (_documents_must_link_folder) for hr.employee and project.project. Propagation rules: - Re-linking a folder propagates to unlinked child folders only. - Moving an unlinked folder under a linked one inherits the link and propagates to unlinked descendants (folders + docs). - Propagation stops at linked or non-writable folders (barriers). - Unlinking does not propagate; descendants keep their existing link. - Copies (and their descendants) inherit from the destination parent, not the source. - Shortcuts never inherit res_model/res_id automatically. UI: linked record now displayed on folders in the details panel. Limitations: - The details panel allows an editor to unlink a folder from its record or re-link it to another record, even while the original record still holds a reference to that folder (ex.: an employee through hr_employee_folder_id). The link can be restored from the same panel, but no server-side constraint prevents the desync. - Changing a record's folder (ex.: a project's documents_folder_id) links the new folder to the record but does not clear the link on the previous one; the old folder retains its res_model/res_id, which may be intentional (e.g. yearly archive folders) or not depending on the use case. If the new folder is already linked to a different record, a user error is raised (folders cannot be linked to multiple records). - Deleting a record clears res_model/res_id on all linked documents, but only those also linked to an attachment are moved to the Trash. Note: no folder link sync on bridge activation/deactivation (toggle removal planned). Task-6310302
Belgian payroll payslips now include overtime hours directly on the printed payslip. This makes it easier for employees and payroll teams to review overtime details clearly without checking separate payroll records.
Original PR description
task~6467985
Belgian payroll now separates worked days by premium pay options so payroll users can see which hours belong to each premium category on payslips. It also improves sickness relapse handling and ensures certain non-monthly-pay time is deducted from normal hours instead of added on top, helping produce more accurate payroll results.
Original PR description
Steps to reproduce: - Encode Attendance time entries carrying premium pay options. - Compute the payslip and open the Worked Days tab. All the attendances would land on one line, so the options are invisible and the hours behind them cannot be told apart. This is now fixed. Also: Time on a type that is not "Added to Monthly Pay" is taken out of the normal hours instead of adding on top of them. Task 6445439 https://github.com/odoo/upgrade/pull/11070
Payroll users now receive a warning before starting a pay run when employee data, attendance, or time off records may be incomplete or invalid. This helps teams review and correct issues early, while still allowing them to continue if they choose to ignore the warning.
Original PR description
Before starting a pay run, the user should be warned about: - Employee with missing or erroneous data - Unapproved attendances for based on attendance employees - No time off at all for the period - No attendance for an employee based on attendance - Time off not validated A wizard pop up when the user clicks on the "Start Pay Run" button and when one of the previous conditions are met. Allowing the user to see the faulty records and either fix them or ignore the warning and continue with the pay run. task-6530800
Belgian payroll now supports holiday certificates for workers as well as employees. This helps calculate worker holiday entitlement and holiday pay recovery according to ONVA rules, reducing manual handling and improving compliance.
Original PR description
## Purpose Belgian holiday attestations currently only support employee certificates. Worker certificates follow different rules because holiday pay is paid by the holiday fund (ONVA), and holiday…
## Purpose Belgian holiday attestations currently only support employee certificates. Worker certificates follow different rules because holiday pay is paid by the holiday fund (ONVA), and holiday entitlement is determined using the worker conversion table. This PR adds complete support for worker holiday attestations when registering a certificate from a previous employer. ## Changes - Add an employee/worker type to holiday attestations. - Allow entering the total holiday pay from a worker certificate. - Compute worker leave entitlement using the ONVA conversion table for a five-day full-time week. - First convert worked and assimilated days to that five-day full-time equivalent with the formula A × 5/R × Q/S, look the result up in the table, then convert the entitlement to the employee's current working schedule. - Apply the configurable 1% holiday-fund solidarity contribution to recoverable simple and double holiday pay. - Recover holiday pay only when the certificate belongs to a former worker who is currently an employee. - Use the worker time-off work entry type when the person is still a worker, without employer holiday-pay recovery. - Adapt the holiday-attest form view to the selected certificate type. Task-5979520
Belgian payroll users can now manage paid time off allocation again from employee list and kanban views. December payroll checks now warn when remaining time off balances or postponed amounts may affect allocations, helping payroll teams close year-end runs more accurately.
Belgian payroll now works correctly with the employee departure screen so activity plans can be created during a departure process. This helps HR teams organize follow-up tasks more smoothly when an employee leaves.
Original PR description
Update of l10n_be_hr_payroll to correctly use the notebook in employee departure view defined in hr module. task-6233311 odoo/odoo#288008
Accounting reports can now use a consolidation availability setting so they appear only when multiple companies are selected and the report is affected by more than one company. This keeps single-company report views cleaner while ensuring consolidation-related reports remain available in multi-company contexts.
Original PR description
With the related enterpise pr, add a new variant availability "consolidation" which makes the report visible only if it is impacted by several companies (company selector has at least 2 companies selected and options['companies'] is more than 1. This new type of variant should prioritize the other types in the selection. task-6398453 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286730
Accounting reports now include a consolidation availability option so relevant report variants appear when multiple companies are selected. This helps multi-company users see the right consolidation-related reports by default while keeping country- or chart-specific variants tied to the main company.
Original PR description
1) Add a new variant availability "consolidation" which makes the report visible only if it is impacted by several companies (company selector has at least 2 companies selected and options['companies'] is more than 1. This new type of variant should prioritize the other types in the selection. 2) Activate by default the "consolidation" filter in multi-company. 3) In multi-company, the variants of availability type "Coa match" or "Country match" should only be visible if they match the main company, not the secondary ones. task-6398453 Forward-Port-Of: odoo/enterprise#130484
AI assistant conversations now show clearer progress updates while an answer is being prepared, replacing vague thinking messages with current activity statuses. Users can optionally reveal step-by-step details, helping them understand what the assistant is doing without cluttering the default chat view.
Original PR description
Purpose: -------- When the agent is generating an answer, it can now send "intermediary" messages. These messages allow the agent to explain what he is doing on each turn, (such as "I will now search for leads in the qualified stage"). Additionally, the "thinking" messages have been replace by a "tool status". This tool status is generated by the agent itself on each tool call, and shows what the agent is currently doing (such as "Reassigning new leads"). The intermediary messages are hidden by default, but can be shown either by clicking on the "current tool status", or by enabling the "Show steps" option in the composer's "More options" menu. In debug mode, these intermediary messages contain technical information. Tool calls will also be logged in between these intermediary messages. To do so, the tool should return a dict with `summary` entry with an icon and some text. Task-6272649
The Planning search view has been reorganized and simplified across related Planning apps. This should make it easier for users to find and filter planning slots consistently across field service, holidays, HR skills, projects, sales, and timesheet-related workflows.
Original PR description
In this commit, we refactor and clean the search view of Planning. task-6507326
Field Service reports generated from planning slots can now show the equipment used during an intervention, including its name and serial number. This gives customers and service teams clearer documentation of what equipment was involved in each visit.
Original PR description
Before this commit, when a user created a Field Service planning slot that included equipment, the generated report did not display any information related to that equipment. After This Commit, reports generated from planning slots can now include an equipment section, allowing users to see the equipment name and serial number used in the context of the field service. task-[6460149](https://www.odoo.com/odoo/project/4105/tasks/6460149)