Monday, September 14, 2026
58 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
The Kanban group settings cog now matches the round quick-add button beside it. This creates a more consistent and polished interface with no change to business workflows.
Original PR description
Before this commit, the group config cog was a btn-light rounded rect while the quick add button next to it was a circle. This commit reuses o_btn_circle for the cog. requires: https://github.com/odoo/enterprise/pull/131254 task-6541909 --- 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
The AI assistant no longer needs to keep a single request open while it works through answers and tool actions. Conversations can continue through secure background callbacks, support delegated sub-tasks, and keep users updated in the browser more reliably.
Original PR description
Previously, we kept an HTTP request open while the agent went through successive model rounds and tool calls. The worker waited for each model response until the conversation finished or paused for…
Previously, we kept an HTTP request open while the agent went through
successive model rounds and tool calls. The worker waited for each model
response until the conversation finished or paused for an interaction.
We now store the pending work on ai.session and advance the conversation
across separate requests, each using its normal transaction boundary:
- /ai/start_session_advance starts an exchange from a new user message.
- /ai/completion_result_ready receives the model result from IAP, then
runs tools or finishes the exchange.
- /ai/resume_pending_interaction continues a paused tool batch from a
user or browser response.
```text
[ 1. Start / Resume Request ]
|
v
[ 2. Save Request & Commit ] <---------------+
| |
Submit Request | | Next Round
v |
[ 3. Asynchronous IAP Processing ] |
| |
HTTP callback to webhook |
v |
[ 4. Process Result & Run Tools ] -----------+
|
+----> [ 5. Final Answer / Pause ]
|
+----> [ 6. Child Session (Subagent) ]
|
(Same loop, steps 2-6)
|
(Result to parent batch)
```
Requests are saved before commit and submitted to IAP afterward, ensuring
their state is visible when the result arrives. IAP delivers model results
through signed HTTP requests to our webhook endpoint. The signature and
request UUID are checked before we restore the saved user and context
and process the response. Tool calls still run synchronously within
that request.
Agents can now delegate work through tools that start or continue child
sessions. Each child has its own conversation history and uses the same
loop, including further delegation. Its result returns to the parent's
pending tool batch, which continues once the required results arrive.
The browser now receives messages, loop state, pending interactions, and
client tools through the bus instead of the response stream. User and
browser responses resume the saved tool batch, with client tools
targeted to the requesting tab.
Existing AI integrations and tests are adapted to the webhook-driven flow.
TASK-ID: 5153883
Co-Authored-By: Andrzej(pian) <pian@odoo.com>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>
The Kanban group configuration cog now uses the same secondary button styling as related controls. This creates a more consistent visual experience while removing redundant styling rules.
Original PR description
Before this commit, the circle style was only applied to the kanban quick add button, repeating classes o_btn_circle already provides. This commit applies btn-secondary to the group config cog too and drops the redundant ones. requires: https://github.com/odoo/odoo/pull/287845 task-6541909
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
The Discuss app now separates personal settings from broader configuration options by grouping Notifications and Voice & Video under a dedicated User Settings section. This makes the menu easier to understand and more consistent with other Odoo apps.
Original PR description
Before this commit, the "Configuration" menu contain items that were both global on Discuss application and user-specific settings. This contributes to making the app not as intuitive as it should. The "Configuration" menu is meant to reflect consistently the other "Configuration" menu items in other apps, which are meant to make global configurations on the app. This worked for all but the menu items "Notifications" and "Voice & Video" that are clearly settings affecting only the current user. This commit improves by moving "Notifications" and "Voice & Video" menu items to their dedicated "User Settings" group, still inside the Configuration menu. Task-6560201 <img width="454" height="262" alt="Screenshot 2026-09-08 at 23 12 57" src="https://github.com/user-attachments/assets/84f670ea-d277-4b90-93f2-369dd7e698fa" />
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
Website editors can now translate chart descriptions used for accessibility. This helps multilingual websites provide clearer, localized descriptions for visitors using assistive technologies.
Original PR description
It was possible to add a description (aria-label) to a chart, but not to translate it. This commit makes it translatable.
Odoo Sign can now let signers apply their own qualified electronic signature through itsme, instead of only sealing completed documents with the company certificate. This strengthens legal assurance for signed documents and preserves each signer’s contribution as the document progresses through the signing process.
Original PR description
Until now the completed document was signed with the company certificate only. An identity check like `itsme` told us who the signer was, but the signature on the file stayed the company one. The signer can now sign with their own qualified certificate. The file then carries their signature and not only the company one. For that, the completed document is now built with incremental updates over the original file. Each signer's values are added as a new revision, so a signature already on the file stays valid when the next signer adds theirs. The qualified signature is made by a service running on its own server. It shows the signer the document before signing it. That service is added in odoo/iap-apps#1890 and the `itsme` role needs it. task-4951149
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
The Indian time off module now uses clearer names for sandwich leave policy options and updates the related tooltip. This makes the policy settings easier for HR users to understand without changing underlying leave calculations.
Original PR description
The names of sandwich leave policy selections are updated. The tooltip is renamed. task-6538163 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
When users create a resource from a specific working schedule, Odoo now keeps that schedule selected instead of replacing it with the company's default schedule. This reduces manual corrections and helps ensure new resources are assigned to the intended calendar from the start.
Original PR description
When creating a new resource from a working schedule stat button, `default_calendar_id` is provided in the action context. However, on form initialization, `_onchange_company_id` overwrites `calendar_id` with `company_id.resource_calendar_id`. Check for `default_calendar_id` in the context inside `_onchange_company_id` to preserve the pre-selected calendar when creating resources from a schedule. task-6515306 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update makes it easier for businesses with multiple companies to move goods between warehouses without creating matching sales and purchase documents each time. It also improves visibility and valuation of these inter-company transfers, helping teams track stock movement and internal recharging more accurately.
Original PR description
Improves inter-company flows by reducing the friction in multi-company settings, as well as allowing easier inter-company transfers without going through SO <-> PO inter-company transactions. Summary…
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.
Inter-company sales and purchase flows now stay better aligned when quantities, prices, discounts, or display lines change. Related deliveries and receipts are linked more consistently, reducing manual follow-up and improving visibility across companies.
Original PR description
Summary of the changes: - Update inter-company transaction settings to remove intercompany user / warehouse / picking type - Now when the intercompany sync is active, it will link moves from the SO <-> PO pickings through the `move_dest_ids`/`move_orig_ids`, the same way they would be linked through an inter-company resupply - Correctly updates and notify the corresponding SO/PO when a quantity/price/discount is updated on a PO/SO line. - Minor updates to follow the changes made in community Task-4816396
The Belgian payroll flow no longer shows the working schedule change wizard when an employee has a contract but no payslip. This reduces unnecessary interruptions for payroll or HR users when schedule changes do not require payslip-related handling.
Original PR description
Normally, when we change the working schedule of the employee (the one with different work_rate) that has a contract:
- working schedule wizard was appearing
Now when the employee does not have a payslip, we don't open that wizard
task-6562466The accounting field that describes deductible percentages now has clearer wording. This helps internal tools and AI interpret it correctly and avoid confusing it with other VAT or fiscal deductibility concepts.
Original PR description
Provides a better description to the field deductible_percentage to help AI understand its meaning and differentiate it from other deductibility features such as partial VAT deductibility or fiscal categories. task-6180199 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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
The Kanban column quick-create area has been updated to better match Odoo’s new Frost design, giving users a more polished and consistent interface. Button borders in grouped controls now display correctly when users hover or click, improving visual clarity during everyday interactions.
Original PR description
### Bring hover buttons to the front in input-group Prior to this PR, when several buttons were defined within an input-group, their borders could overlap incorrectly on hover. This PR ensures that the entire border around a button remains visible when it's hovered, just as it does when the button is focused. ### Fine-tunes `column_quick_create` design This PR updates the design of the `column_quick_create` component to match the new Frost design. task-6533946 | Before | After | |--------|--------| | <img width="722" height="419" alt="Screenshot 2026-09-07 at 10 27 33" src="https://github.com/user-attachments/assets/449018cf-3190-4c85-b2ec-629b855f5536" /> | <img width="725" height="425" alt="Screenshot 2026-09-07 at 10 28 22" src="https://github.com/user-attachments/assets/915ee7a1-1818-40cc-a3fb-695ea27235cc" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The editor toolbar now uses more intuitive icons for text color, image preview, and image resizing. This makes common editing actions easier to recognize and helps users work more confidently in content editing screens.
Original PR description
- The `text_fields` icon is replaced by a simple Arial font "A" for the text color selector. | Before | After | | :---: | :---: | |<img width="222" height="79" alt="image" src="https://github.com/user-attachments/assets/1ac02ca2-4a6e-4eb5-a68e-7f396572de91" />| <img width="219" height="75" alt="image" src="https://github.com/user-attachments/assets/c9092f92-837a-41f0-abbb-b6218c423368" /> | - The image preview button is now a magnifying glass. - The image resizing button is now represented by the `resize` icon instead of `expand_content`. | Before | After | | :---: | :---: | | <img width="314" height="77" alt="image" src="https://github.com/user-attachments/assets/f8e7b942-2821-4e52-b470-52377144f795" /> | <img width="327" height="72" alt="image" src="https://github.com/user-attachments/assets/87e90b4e-ac5d-4df8-9e4f-17dad8ca28d7" /> | task-6472088
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" /> |
This update adds an internal explanation for how a Belgian payroll dependent-related field is calculated compared with what users see in the interface. It helps developers avoid confusion when maintaining the payroll rules, with no direct change to employee or payroll behavior.
Original PR description
The `dependent_juniors` field was a bit confusing as the computation did not reflect the UI. This commit adds a comment to clarify things for developers.
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
The helpdesk gift card portal now uses Odoo's standard message loading flow instead of a separate older route. This helps keep the customer portal experience consistent and easier to maintain, with minimal visible change for users.
Original PR description
This commit replaces `/mail/chatter_fetch` with `/mail/thread/messages` in order to reuse the base mail code in portal as much as possible. part of task-3599659 [Community PR](https://github.com/odoo/odoo/pull/182334)
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
The CRM pipeline switcher now uses the shorter label "All Teams" instead of "All Sales Teams". This improves readability and helps the interface fit better on smaller screens.
Original PR description
Reword the "All Sales Teams" label of the pipe switcher to "All Teams" to shorten it and have a better display on smaller screen sizes. Task-6568144 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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
The accounting reporting screens were updated as part of a technical cleanup of the underlying interface framework. This should help keep financial reports and return-related views easier to maintain and ready for future improvements, with little expected day-to-day impact for users.
The Frontdesk app now appears in the app overview between Lunch and Expenses. This makes the app list more logically ordered and easier for users to navigate.
Original PR description
In this PR we have updated the sequence of the **Frontdesk** app so that it appears between the **Lunch** and **Expenses** apps in the overview. Task-6568726
Payroll users are now warned when changing an employee version that is tied to validated payslips. They can either create a new version from a chosen date or deliberately correct the current version, reducing the risk of accidental changes to payroll history.
Original PR description
**Description :-** This PR introduces a front-to-back version control mechanism for the version records (hr.employee / hr.version). When an end-user attempts to modify a version that is protected…
**Description :-**
This PR introduces a front-to-back version control mechanism for the version records (hr.employee / hr.version). When an end-user attempts to modify a version that is protected with validated payslips, the system intercepts the modification in real-time and prompts the user with an interactive confirmation dialog (VersionUpdateDialog).
The user can choose between two operational modes:-
. Create New Version: Closes the current version and creates a new active hr.version record incorporating the modified fields, and relinks the employee.
. Correct Current Version: Bypasses version splitting and applies modifications directly to the active version record (displaying a warning regarding payslip impacts).
**Implementation :-**
The feature is implemented cleanly by inheriting the base hr form view (hr_employee_version_form) and extending HrEmployeeFormController without using global record patching, onRecordChanged() method overridden to intercepts the version updates flow
1. [ Field Modification on the version form view ]
│
▼
2. Controller Interception (onRecordChanged)
│ • check the version status via RPC: action_check_version_status
│ • Halts execution flow with an asynchronous Promise wrapper
│
▼
3. Interactive Protection Prompt (VersionUpdateDialog)
│ • Renders responsive options ("Create New Version" vs "Correct Current Version")
│ • Captures effective start date for new versions
│
▼
4. Promise Resolution & State Caching
│ • Apply: Resolves selection object { mode, dateStart } -> Cached in this.versionChoice
│ • Discard / Close: Resolves null -> Triggers record.discard() to revert pending edits
│
▼
5. Intercepted Save Execution (save())
│ • Mode A ("create_new_version"): RPC calls action_create_version_from_update,
│ resets old record state, and reloads view model to the new version.
│ • Mode B ("correct_current_version"): Executes standard ORM write via super.save().
▼
6. Apply the changes
task-6482857Belgian 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
Obox queues can now be linked back to the point of sale orders that created them, making it easier for teams to investigate queue issues. The related Obox and queue screens were also improved so staff can review this information more clearly.
Original PR description
In order to debug obox queue creation linked to pos orders. Also improve views of Obox queue and Obox.
The AI website assistant now gets clear feedback when page or CSS edits fail, so it can correct issues instead of assuming changes worked. It also uses a dedicated, validated process for creating website forms, making forms more reliable, editable in the website builder, and better suited for advanced flows like multi-step wizards and live calculations.
Original PR description
Previously, the "Apply HTML to Page" and "Write Custom CSS" tools blinded the agent to actual edit failures by always returning a success string. Additionally, the agent hand-wrote form markup, which…
Previously, the "Apply HTML to Page" and "Write Custom CSS" tools blinded the agent to actual edit failures by always returning a success string. Additionally, the agent hand-wrote form markup, which frequently resulted in broken forms that were not editable in Odoo's website builder or missed a destination. This commit introduces comprehensive edit reporting and a dedicated tool to safely handle webforms: - Edit Reporting: The HTML and CSS tools now return a `client_tool`entry (`website_apply_html`, `website_reload_css`). The builder applies the actions and returns a detailed report (success/errors, dropped elements, post-edit content, duration). - Edit Webform Tool: Form work is now handled by a dedicated tool rather than raw HTML edits. Specs (actions, fields, visibility, layouts) are validated server-side and applied via the builder's form plugin machinery. Raw form HTML in the standard apply tool is now explicitly rejected. - JSON Form Context: Webforms are exposed to the agent as JSON under `website_page.forms` instead of raw HTML, replacing the markup with a marker. The tool result returns the updated form in the same JSON shape. - Advanced Primitives: The webform tool supports multi-step forms, choice display variants, sliders, and computed fields. - Skill Updates: The agent's instructions are updated to check edit reports, retry failed actions, and steer wizards/live totals towards the new form primitives instead of hand-building them. task-6251785
Website forms can now offer multi-step flows, improved choice displays, sliders for numeric answers, and live calculated totals. This helps businesses create clearer, more interactive forms while also resolving issues that could disrupt saving forms or editing builder lists.
Original PR description
Forms gain four building primitives: multi-step layout (step containers with runtime-inserted Previous/Next navigation, a dots/bar progress indicator and per-step validation), buttons/boxed display variants for choice fields with an explicit checked state and focus ring, a slider display for number fields with a keyboard-editable value input, and a computed field type displaying a live total from a declarative formula over field values and option weights. Also fixes saving a form containing an unnamed field (the whitelist computation crashed on the empty name) and stops the builder list from clobbering item ids when a non-display_name column is edited. task-6251785
The mail app is being prepared so AI agents can show intermediary updates before their final response. This groundwork supports a smoother future experience by making conversations feel more transparent while an AI reply is being generated.
Original PR description
Purpose: -------- In the related enterprise PR, agents will be able to send intermediary messages before sending their final response. This commit introduces new getters that are overridden in that PR. Task-6272649
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)
This temporary change prepares the Discuss/mail messaging area to handle intermediary AI-generated messages in conversations. It is an internal preparation step, so business users should not see a major immediate change, but it supports upcoming AI-assisted communication features.
Original PR description
[This PR will be dropped when https://github.com/odoo/odoo/pull/283207 is merged]
Improves inter-company flows by reducing the friction in multi-company settings, as well as allowing easier inter-company transfers without going through SO <-> PO inter-company transactions. Summary of the changes: - Always set the right `inter-warehouse transit`/ `inter-company transit` locations to warehouse partners - Refactor the way resupply from warehouse to warehouse works - Now always consists of 3 rules, regardless of the delivery steps, but now make use of the push delivery routes. - If more than one company is accessible, warehouse from other companies can be selected for resupply - Allow to select a warehouse from another company as the SO's warehouse and trigger its delivery from there. - Allow to select a warehouse from another company as the PO's warehouse and trigger its receipt from there. - When computing a move's value, if the product came from a previous company, then use the value it had there when leaving the company. - Add a favorite filter in Move Analysis to better track these new inter-company transfers Task-4816396 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr