Friday, August 21, 2026
58 changes · master
Enhancements to existing features
The US sales tax report now captures more complete sales tax details, including exempt, non-taxable, taxable amounts, and tax rates by jurisdiction. This helps businesses prepare more accurate state-level tax reports and lays groundwork for future e-filing support in Odoo, including automated Avalara-based configuration.
Original PR description
*: account Purpose: Improve and enhance the US tax report framework to eventually support future e-filing directly within Odoo. To do so, the US sales tax report needs to capture all relevant…
*: account Purpose: Improve and enhance the US tax report framework to eventually support future e-filing directly within Odoo. To do so, the US sales tax report needs to capture all relevant information, such as exempt sales, taxable sales, non-taxable sales, and the tax rate. It supports both Avalara and non-Avalara users. Configuration: Users can configure taxes specifically for the US jurisdiction by setting the jurisdiction type, the following information required by the type (state, county, city). If the tax is an exempt or nontaxable of a standard tax rate, then it can be added to the standard tax rate on its exempt and nontaxable tax field. For Avalara users, the configuration is automatically handled based on the Avalara response. The following tax types are supported: - Fully exempt taxes (ex. 0% exempt tax) - Fully nontaxable taxes (ex. 0% nontaxable tax) - Rate-reduction taxes (ex. 6% rate reduced to 4% tax) Report: The US tax report will organize the taxes based on its state. Per state, it lists the taxes in order based on its jurisdiction type: state, special, county, city. The header will total the columns based on the base lines to avoid double-counting. Per tax row, the column values include its linked exempt and nontaxable taxes. - Gross should be a sum of exempt, nontaxable, and taxable values. - Exempt displays the amount that are exempted. - Nontaxable displays the amount that are nontaxable. - Taxable displays the amount that are taxable. **Note: Rate-reduced taxes will not have its own row and are aggregated into its parent tax. Additional changes: To support city jurisdiction type on taxes, the res.city.csv file needs to be moved from l10n_us_hr_payroll to l10n_us for access. task-6223342 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refreshes the core web interface library used by Odoo. It helps keep the platform aligned with the latest framework improvements, supporting maintainability and future user interface enhancements without introducing a direct business workflow change.
Original PR description
Release notes: ttps://github.com/odoo/owl/releases/tag/v3.0.0-alpha.46 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 Forward-Port-Of: odoo/odoo#282871
The Point of Sale customer display can now open directly on a connected secondary screen when the browser supports it and permission is granted. If that is not possible, it still opens normally on the same device, giving shops a smoother customer-facing display setup without disrupting existing workflows.
Original PR description
In this commit: ================= When a secondary screen is detected via the `Multi-Screen Window Placement API`, the customer display opens there; otherwise it falls back to opening in a new window on the same device. The Multi-Screen Window Placement API (`window.getScreenDetails()`) lets the browser report all connected displays along with their position and size, so the customer display window can be placed precisely on an external screen instead of just opening on the same monitor as the POS. It requires user permission and is only supported in Chromium-based browsers, so the feature gracefully falls back to opening on the same device when the API is unavailable, no secondary screen is found, or permission is denied. Task: 6305983
The mail interface now supports customized tab views in areas like discussions and the messaging menu. This gives teams more flexibility to organize communication views in ways that better fit their workflows.
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
The Attendance menu now avoids an unnecessary data request when opened. This should make the check-in/check-out menu feel more responsive without changing how employees use it.
Original PR description
This avoids a useless blocking rpc call when opening the systray. Task-6131386 Forward-Port-Of: odoo/odoo#278153 Forward-Port-Of: odoo/odoo#269797
The user invitation email template in the signup flow has been improved. This helps make invitations clearer and more effective for recipients who need to activate or access their accounts.
Original PR description
task-id:6470158 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update expands automated checks for several onboarding flows and fixes issues those checks uncovered, including outdated screen targets and unreliable form entry behavior. This helps make first-time setup experiences in apps like Frontdesk, Expenses, Appointments, Subscriptions, Payroll, and Sales more dependable for users.
Original PR description
Add frontdesk_tour, hr_expense_extract_tour, appointment_tour, sale_subscription_tour and payroll_tours to the onboarding tours test, fixing the tours themselves where the robot-mode replay uncovered real bugs: obsolete selectors, incomplete many2one selections, dirty-form-on-save races, and (for payroll_tours) a full rewrite of the contract-creation flow to match the hr.version model that replaced the old hr.contract-based UI. Also fix searchOrCreateMany2X: always type the field value explicitly in the "Create and edit" dialog instead of relying on its async pre-fill on desktop, which can lose the race against the next tour step on heavier form views. 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
Sales users can now adjust the quantity or unit of a section or subsection once, and Odoo applies the change across all related order lines. This makes large quotes and sales orders faster to update, while keeping section quantities and units visible in order previews and PDFs when relevant.
Original PR description
Currently, there is no way to quickly update all quantities within a section or subsection at once. This change introduces a new quantity field displayed on sections and subsections when hovering…
Currently, there is no way to quickly update all quantities within a section or subsection at once. This change introduces a new quantity field displayed on sections and subsections when hovering over them. When this value is modified, a multiplier is computed (new value / old value) and applied to every line within the corresponding section or subsection. For example, if the quantity of a subsection is changed from 6 to 3, all quantities of the lines under that subsection are divided by 2. The same behavior is implemented for the unit column. If the unit of a section or subsection is changed and a conversion factor can be determined between the two units, that factor is applied to all lines within the corresponding section or subsection. For example, changing from m^2 to cm^2 divide all subline quantities by 10,000. Furthermore, if a section is configured to hide the composition, we still display the unit and quantity in the PDF and preview. If the user changes the unit or quantity of a section or subsection, we also display them on pdf and preview. We do all these changes on order but not on invoice. Enterprise PR: https://github.com/odoo/enterprise/pull/127420 Upgrade PR: https://github.com/odoo/upgrade/pull/10417 task-6075605
HR users can now create employee versions for several employees at the same time through a guided wizard. This reduces repetitive work and helps teams manage employee record changes more efficiently across groups of staff.
Original PR description
This commit introduces a new wizard in the HR module that allows users to create employee versions for multiple employees at once. TaskID: 6471477
Website pages can now have translated URLs, so visitors see localized page addresses and are redirected to the right language version. This improves multilingual website navigation, menu behavior, and language setup reliability for businesses running localized sites.
Original PR description
[IMP] website: enable to translate static page url The goal of this commit is to add the possibility to translate page url. Here is an example to illustrate the case: A website page has the url…
[IMP] website: enable to translate static page url The goal of this commit is to add the possibility to translate page url. Here is an example to illustrate the case: A website page has the url `/page-en`. If the user adds "French (BE)" as a language on its website, he can now translate the `page-en` website url into `page-fr`. If the language of the website and its default language is English, the url of the page will be `/page-en` but if the language of the website is French, the url of the page will be `/fr_BE/page-fr`. If the language of the website is in English and the user is searching for `/page-fr`, the system detects that the requested page exists but redirects the user to the English version of the page as the language of the website is in English. However, if the user is searching for `/fr_BE/page-fr`, it will be redirected to the French version of the page and the language of the website will switch to French whatever the original language of the website was. When a user translates a url, it is slugified and made unique. Concerning the website homepage url, if it is a page url, it has to be the one of the default website language. When a user modifies a page url, the website homepage url is updated if the modification of the url is done in the website default language and if the original url was the default website url. This commit also modifies the url field of the `website.menu` model: the `required` and `default` properties are removed; if a menu is linked to a page, no `url` is needed at record creation. However, the `compute` method of the field fallbacks on `#` and a `constrains` has been added on the `url` to ensure it is always set. The field is also not stored: as the `url` might be the one of the website page that could be translated, it should be recomputed each time we access it. Because a menu url could be the one of an external url, another field `manual_url` is introduced to store it. task-3355343 ------------------------------------------------------------------------------------------------------------------------------------- [FIX] website: reload web client when installing new language Steps to reproduce: - On a website with only 'English' installed, enter in edit mode and add a new language. - Go to 'Site' > 'This page' > 'Properties'. - Hover the 'Page URL' field -> It is not possible to translate the url. The problem is that, when a new language is installed, the iframe is reloaded but not the web client. Due to it, `TranslationButton` has a wrong version of `localization`. task-3355343 ------------------------------------------------------------------------------------------------------------------------------------- [IMP] website: correctly display the redirect button at url change Now that the url can be translated, we only want the redirect button to appear if the url has been changed in the website default language. task-3355343 ------------------------------------------------------------------------------------------------------------------------------------- [IMP] website: update cache to avoid extra SQL queries Since [1], the `all_menus` variable contains website specific menus and generic menus (not linked to a website). However, the `_update_cache()` of `child_id` was only applied on website specific menus. The problem is that due to the previous commits, the `url` field of `website.menu` is not a stored field anymore and depends on `child_id`. Because `_compute_visible()` in `website_sale` requires the menu's url, an extra SQL query was triggered to determine the `child_id` of the generic menus. To solve the problem, this commit performs the `_update_cache()` of `child_id` on all the generic and specific menus at `_compute_menu()` of a specific website. [1]: https://github.com/odoo/odoo/commit/aa5bbab0183b1d61d64bd2292cacbff82befeaf1 task-3355343 ------------------------------------------------------------------------------------------------------------------------------------- [IMP] website: only rewrite page url for internal links Steps to reproduce: - Create a new page and add it to the website menu. - Edit the menu item and change its URL to an external one (e.g. https://www.odoo.com/). - Save. -> Clicking on the menu item does not open the external url. Because the menu is linked to a page, changing the menu url rewrites the page url. This is not the expected behavior if the new url is external. Note that this problem became visible thanks to the previous commits that made menu url not stored. Indeed, before those commits, changing the menu url still rewrote the page url but as the url was a stored field of the menu record, clicking on the menu led to the external url. task-3355343
This update makes a small internal improvement to Odoo's test tooling around translation checks. It helps maintain development quality without changing day-to-day user workflows.
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
This change reduces unnecessary database work when Odoo checks internal data constraints during startup. By grouping updates together, registry initialization can run more efficiently without changing business behavior.
Original PR description
Constraint reflection loaded the xmlid of every unchanged constraint individually. It also updated xmlids separately for each reflected model, causing unnecessary queries during registry initialization. Return every reflected constraint record and collect their xmlids across all requested models before updating them in a single batch. task-6484654 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Kanban cards no longer show their action menu when displayed inside a selection dialog. This keeps the selection experience cleaner and prevents users from seeing actions that are not relevant in that context.
Original PR description
In this commit, we hide the kanban card menu only when rendered in a SelectCreateDialog. Task~6452824
The help and participant-list messages have been updated to be clearer for users. The option to leave a conversation is now handled consistently through the conversation action menu rather than a typed command, with wording that fits all conversation types.
Original PR description
* = im_livechat Updated `/help` description and `/who` message. Moved leave conversation eligibility logic to channel model. Renamed "Leave Channel" to "Leave Conversation" so that it works for all channel types. Removed /leave command. task-[6008262](https://www.odoo.com/odoo/project/1519/tasks/6008262) enterprise: https://github.com/odoo/enterprise/pull/112959
This update improves how Odoo recalculates inventory values and cost of goods sold when past purchases, bills, landed costs, manufacturing, subcontracting, or dropshipping events change. Businesses get clearer audit trails and more accurate margins because historic cost impacts are replayed into the related stock and accounting entries instead of being lumped into broad period-end adjustments.
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
Time off requests that span multiple calendar days are now treated as multi-day ranges even if only one working day is deducted. This prevents employees from incorrectly choosing morning or afternoon options for requests that cover a broader date range.
Original PR description
Purpose: When taking a range which results in only 1 day taken (because it overlaps with a non working day or another time off), you only see the selector of morning / afternoon like for a unique day, but you shouldn't be able to select morning or afternoon. - changed the computed field `last_several_days` to indicate lasting for several calendar days task-id: 6456270 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website forms now automatically include required fields when a form action is changed to a less-common model, preventing silent submission failures. Long single-choice fields are shown as dropdowns for easier use, and empty date fields display cleanly instead of showing undefined values.
Original PR description
Selecting an action from "More Models" emptied the form: those models have no registered fields, unlike curated actions. Without the model's mandatory fields, the form silently fails at submission. Now those fields are added and flagged model-required (non-removable), so the form stays submittable. task-4952094
The tasks dashboard now uses conditional formatting to make important values and trends easier to spot at a glance. This helps managers review timesheet-related task information more quickly and identify areas that may need attention.
Original PR description
This commit adds some conditional formatting on the tasks dashboard. Task: 6478487 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
Spreadsheet scorecards now define their main value and baseline using formula syntax, making them more consistent with spreadsheet behavior. This improves reliability and clarity when scorecards are configured or displayed, including in dashboard views.
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
Manufacturing teams can now update the recorded work order duration for a specific employee. This helps keep employee time logs accurate for production tracking and related costing.
Original PR description
Now the work order duration for a specific employee can be updated.
The employee setup screen now hides the Time Off and History buttons until an employee record has been saved. This reduces confusion during onboarding by only showing actions that are relevant and usable.
Original PR description
Currently, during the creation of first employee, we can see Time Off smartbutton displayed even the employee record isn't saved and also History smartbutton displayed when only 1 versions. This PR is expected to update the visibility of these buttons: - Time off -> Displayed only after the employee record has been saved. - History -> Displayed only when the employee record has been saved. task-6438703 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
Backend refund orders now follow the same limits as the Point of Sale frontend. Staff can still adjust quantities, delete lines, add customer notes, and specify lots, but cannot change key commercial details such as products, prices, discounts, or add new lines, reducing refund errors and inconsistencies.
Original PR description
In the frontend the refund process is limited to only certain actions/ modifications. However if you refund from the backend multiple fields are editable. Currently you are allowed to change the product, its unit price, the discount, add a new product line,... We block all those actions and we keep: - editing the quantity - deleting order line - customer note (why not?) - lot (allows to specify which lot we return) task-6445165
The employee form now shows a Discuss chat option directly next to the employee name, making it easier to start or access conversations from the employee record. This improves day-to-day HR collaboration by placing communication closer to the employee details users are already viewing.
Original PR description
Add the `hr_employee_chat` widget directly inside the header next to the employee name field in the employee form view. Task: 6409961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Date filters in the search bar now include quick choices like Today, This Week, This Month, This Quarter, and This Year, with arrows to move to the previous or next period without reopening menus. This makes planning, reporting, and reviewing records by time period faster while reducing duplicated custom filters across apps.
Original PR description
## Navigable smart-date filters in the search bar <img align="right" width="382" height="328" alt="image" src="https://github.com/user-attachments/assets/6e527849-0837-412e-aba3-bbddd6bab59c" /> ###…
## Navigable smart-date filters in the search bar <img align="right" width="382" height="328" alt="image" src="https://github.com/user-attachments/assets/6e527849-0837-412e-aba3-bbddd6bab59c" /> ### What Date filters (`<filter date=.../>`) now offer built-in smart-date options — **Today**, **This Week**, **This Month**, **This Quarter**, **This Year** — and each active one gets **prev/next arrows** to shift the period on the fly from the searchbar facet (eg. `This Week` → last week → next week). We keep the existing month and quarter features, and also add a new **"Custom Date…"** shortcut in each date-filter menu, opening the editor pre-filled with the right field. <br> ### Why Filtering by a relative date range was a common need, that devs were hardcoding in views (see commit `[REM] *: remove duplicate relative ranges from filters`). Furthemore, other views (eg. gantt view, custom accounting views...) also had this navigable filter logic (but as an extra section below the search bar). We decided to integrate that feature at the framework level, allowing users to navigate filters faster for example when planning day-by-day or reviewing quarter-by-quarter, while saving vertical space compared to a gantt-style navigator. (we keep the existing gantt view navigator for now as it has a couple more features, it was just an example) ### Also - Active relative filters keep their menu section **unfolded**, so the selected option stays visible w. - Period options and smart dates are **mutually exclusive** — picking one clears the other. ### Notes - Smart-date facets are **not** click-to-edit like other facets (intentional) ### Technical - Decided to model the new relative filter type as a top level filter even if its always a children of a date filter. I did this because it makes it easier to add custom behavior with the existing code structure (domain, label, navigation..). The only downside is that it makes it a bit more complex to display. task#6260555 Documentation PR: https://github.com/odoo/documentation/pull/18866 Enterprise PR: https://github.com/odoo/enterprise/pull/122986 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The emoji picker is now easier to use with clearer search guidance, a better-positioned search icon, and a quick button to clear searches. Frequently used emojis also stay in a stable order while the picker is open, making selection more predictable for users.
Original PR description
This commit improves the emoji picker UX by: - changing the search placeholder to 'Find the perfect emoji'. - moving the search icon to the left. - adding an `oi-filled` button to clear the emoji picker search. - preventing frequent emojis from being reordered while the picker is open. Task-[5879855](https://www.odoo.com/odoo/project/1519/tasks/5879855) <img width="337" height="407" alt="image" src="https://github.com/user-attachments/assets/cb832b4e-376b-4a1f-9d0b-b308186e2eb2" /> <img width="337" height="407" alt="image" src="https://github.com/user-attachments/assets/70652df6-a64f-4dd6-b589-00854d0f54b7" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website editors now manage mega menus directly from each menu item using a checkbox instead of a separate add action. The update also adds easier content drop areas and a blank template, making it faster to build and customize large navigation menus.
Original PR description
1. Remove + mega menu item and make it a checkbox on menu item instead 2. Add dropzones before & after each template 3. Remove size on the editor for mega menu and rely on general layout 4. Add a blank template last task-6171291 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds automated checks for the Mollie payment option in Odoo Point of Sale. These tests help reduce the risk of future changes breaking Mollie card payment handling, improving reliability for businesses using this payment provider.
Original PR description
This commit adds both Python and JS unit tests for the Mollie POS payment method. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#282259 Forward-Port-Of: odoo/odoo#281742
The US sales tax report now captures a fuller breakdown of gross, exempt, nontaxable, and taxable sales by jurisdiction, helping businesses prepare for more complete sales tax compliance reporting. Avalara users get this configuration automatically from Avalara responses, while non-Avalara users can configure US tax jurisdictions manually.
Original PR description
*: hr_payroll, reports, reports_avatax Purpose: Improve and enhance the US tax report framework to eventually support future e-filing directly within Odoo. To do so, the US sales tax report needs to…
*: hr_payroll, reports, reports_avatax Purpose: Improve and enhance the US tax report framework to eventually support future e-filing directly within Odoo. To do so, the US sales tax report needs to capture all relevant information, such as exempt sales, taxable sales, non-taxable sales, and the tax rate. It supports both Avalara and non-Avalara users. Configuration: Users can configure taxes specifically for the US jurisdiction by setting the jurisdiction type, the following information required by the type (state, county, city). If the tax is an exempt or nontaxable of a standard tax rate, then it can be added to the standard tax rate on its exempt and nontaxable tax field. For Avalara users, the configuration is automatically handled based on the Avalara response. The following tax types are supported: - Fully exempt taxes (ex. 0% exempt tax) - Fully nontaxable taxes (ex. 0% nontaxable tax) - Rate-reduction taxes (ex. 6% rate reduced to 4% tax) Report: The US tax report will organize the taxes based on its state. Per state, it lists the taxes in order based on its jurisdiction type: state, special, county, city. The header will total the columns based on the base lines to avoid double-counting. Per tax row, the column values include its linked exempt and nontaxable taxes. - Gross should be a sum of exempt, nontaxable, and taxable values. - Exempt displays the amount that are exempted. - Nontaxable displays the amount that are nontaxable. - Taxable displays the amount that are taxable. **Note: Rate-reduced taxes will not have its own row and are aggregated into its parent tax. task-6223342
The employee Gantt view in Manufacturing work orders now shows the progress bar again. This makes it easier for teams to quickly see work progress and plan shop floor capacity without opening extra details.
Original PR description
Since 19.4 the progress bar has been hidden for employee gantt. This commit makes sure it is visible. task-6459190 Forward-Port-Of: odoo/enterprise#127647
Cached website generation requests now schedule a quick follow-up process instead of calling webhooks immediately. This helps ensure downstream notifications happen after generation is safely saved, without tying up system workers.
Original PR description
When a request is cached a webhook won't be called because if we did it immediatly it might arrive before the generator commited. And we don't want to delay the webhook call to not stall a worker just for that. So we simply scheldule a trigger if a request was cached. Forward-Port-Of: odoo/enterprise#128206
Helpdesk field service teams can now plan interventions from the standard Planning view, see all shifts, and open scheduled work filtered to the current ticket. The update also separates scheduled and completed shift counts, making it easier to understand upcoming and finished work at a glance.
Original PR description
- "Plan Intervention" now opens the standard Planning view showing all shifts. - "Scheduled" opens the Planning view filtered on the current ticket. - Open the Gantt view on the next scheduled shift, or the most recent shift when no upcoming shift exists. - Display scheduled and completed shift counts separately. task-6267783
Worksheet section titles are now shown when worksheets are printed as PDFs and viewed in the portal. This preserves the worksheet structure for customers and field service users, making forms easier to read while keeping folded sections working as before.
Original PR description
Previously, worksheet sections were not displayed in printed PDFs or on the portal UI, causing the worksheet structure to be lost. This change ensures that section titles are rendered in both the printed PDF and the portal UI while preserving the existing behavior for folded sections. task-6314616
The timesheet timer menu now loads more quickly by avoiding repeated background requests and reusing information that has already been prepared. This should make opening and using the timesheet systray feel smoother, especially for users who track time frequently.
Original PR description
This PR removes some blocking RPC calls and caches information to make the loading of the systray as lightweight as possible. Changes include: - Move `field_get` to the lazy session info, so the field metadata is available client-side without a dedicated round-trip. - Cache the pre-filled form: it does not change as long as the task / project context stays the same, so it is computed once and reused. - Drop the `get_server_time` RPC and rely on the client-side clock. - Add a client-side systray cache service to avoid redundant requests. Task-6131386 Forward-Port-Of: odoo/enterprise#125368 Forward-Port-Of: odoo/enterprise#120429
The account selection wizard in online bank synchronization now displays its text with better alignment. This makes the setup screen easier to read and gives users a more polished experience when connecting accounts.
Original PR description
No task ID
The VoIP softphone now opens directly to a pre-filled keypad when launched from a form with an available phone number. Calls made without changing that number are automatically logged against the related record, helping teams save time and keep customer activity history accurate.
Original PR description
``` [IMP] voip: auto-fill keypad with partner phone and create call activity on form record When the softphone is opened from the systray while a form view is active, automatically switch to the keypad tab and pre-fill the partner's phone number if the record has a partner_id with a phone field. Falls back to the record's own phone fields (via _phone_get_number_fields) when no linked partner is found or the partner has no phone number. If the user dials the pre-filled number without modification, the form record context (res_id, res_model) is passed to makeCall so that a phonecall activity is created and linked to that record. ``` Task-6365445
UK companies now submit HMRC VAT returns from the tax return itself instead of the tax report screen. This makes the filing process more intuitive and avoids generating unnecessary returns from the UK tax report.
Original PR description
Before this commit: - The tax return submission to HMRC for UK companies is done in the tax report view itself. - Even the returns are being generated for the UK tax report, but the filing process is handled in the tax report, which is unintuitive. After this commit: - The UK tax return filing to HMRC has been moved to the tax return itself. - So there are no more useless returns generated for the UK tax report. Related Upgrade PR: https://github.com/odoo/upgrade/pull/10198 Task-5865605
Rental sales order sections now align with recent sales order layout changes, allowing quantity and unit fields to be managed consistently for grouped section items. This helps keep rental order editing reliable and coherent after the related community update.
Original PR description
We added quantity and UoM fields on the section to easily update all elements of a section. To do this, we stack two fields in a `<column>` tag. To stay consistent, we need to retarget all XPath expressions referencing `<field>` to `<column>`. Community PR: https://github.com/odoo/odoo/pull/267933 Upgrade PR: https://github.com/odoo/upgrade/pull/10417 task-6075605
Website editor users will now see an AI badge next to individual blocks that were generated or changed with AI. This helps set expectations that some standard editing options may behave differently for those blocks.
Original PR description
This commit shows an icon next to the name of snippets edited with the AI so users know standard builder options may behave differently. The flag `containsAiContent` was only set on the zone, but the icon is shown per snippet, so it is now stamped on each generated block instead. task-6251800
Belgian payroll now includes salary rules for handling gift vouchers. This helps payroll teams calculate and report these benefits more consistently within Odoo.
Original PR description
Task: 6424079
The PLM engineering change process now makes product and BoM version updates clearer and easier to complete. Users can see where products are used, update related parent items during approval, and work with a simpler ECO form, reducing manual tracking and improving change control.
Original PR description
PLM ECOs are currently centered around BoM revisions, while product versioning and parent-product impact tracking remain difficult to manage from the ECO flow. This change improves the ECO workflow…
PLM ECOs are currently centered around BoM revisions, while product versioning and parent-product impact tracking remain difficult to manage from the ECO flow. This change improves the ECO workflow around product and BoM revisions by making version updates explicit, exposing where a product is used, and simplifying the ECO form. This commit's changes: - Add Product Revision and New Product Introduction ECO types using the standard PLM stages. - Remove the ECO Apply On/type selection field and rely on the selected product and optional BoM instead. - Replace the separate Update Version action with an Update Versions wizard opened from Apply Changes. - Allow the wizard to update the product, revised BoM, parent products, and parent BoMs, with chatter logs on all updated records. - Apply the ECO from the version wizard. - Add Used In navigation on ECOs to show parent products that use the ECO product through active BoM hierarchies. - Add Versions navigation on products to show products linked through BoM revision chains. - Keep BoM selection optional on ECOs and show "No BoM Change" when no BoM is selected. - Simplify the ECO form by hiding the ECO type when only one type exists, moving the kanban state into the title area, and simplifying the Revision smart button. - Remove obsolete PLM document kanban code after the document refactor. - Adapt PLM workorder integrations after removing the ECO `type` field. - Extend tests for ECO version updates. task-6213679
The Belgian payroll module now includes a salary rule for calculating an additional net salary component. This helps payroll teams handle this type of compensation more directly and consistently within Odoo.
Original PR description
This commit introduces a new salary rule to the Belgian HR payroll module, allowing for the calculation of an additional net salary component. task-6409188
This update makes VoIP call flow configuration easier by simplifying key forms, improving record selection, and making call group and queue names clearer. It also improves audio message handling with easier upload, recording, text-to-speech preview, and fixes stale node data after edits.
The salary configurator now avoids duplicate background work and reduces database lookups when users update salary offers or benefits. This should make salary simulations faster and more efficient without changing the user-facing process.
Original PR description
In the salary configurator (`/update_salary` and `/onchange_benefit` routes), `create_new_version()` was executing a redundant second call to `offer._get_version()`. This caused an extra dummy `hr.employee` and `hr.version` record to be created in memory, triggering an unnecessary nested `hr_version_context` savepoint. Fix: Pass the existing `version.payroll_properties` record into `create_new_version()` directly to avoid the second `_get_version()` call and eliminate the nested savepoint cycle. `_get_compute_results()` was executing multiple separate `search()` queries on `hr.contract.salary.resume` for different value types. Combine these searches into a single query per request to reduce database round-trips. Task: 6226629
This update streamlines Odoo VoIP setup and daily use by simplifying call flows, queues, groups, IVR, voicemail, audio messages, and user forwarding settings. It also improves phone number onboarding notices and fixes several issues where call flow nodes or audio settings could become outdated or invalid, making configuration more reliable for users.
WhatsApp conversations now keep at least one internal agent assigned by hiding options that would let the final agent leave. This helps ensure customer conversations remain accessible, supported, and manageable by the business.
Original PR description
Prevent last agent from leaving the conversation by hiding the Leave conversation action and /leave channel command. This prevents scenarios where a Whatsapp channel becomes orphaned with only the external Whatsapp customer remaining, which would make the conversation inaccessible and unmanageable. task-[6008262](https://www.odoo.com/odoo/project/1519/tasks/6008262) community: https://github.com/odoo/odoo/pull/257521
Time off requests made from the Gantt view now handle multi-day date ranges more consistently. When a selected range effectively counts as one working day due to weekends, non-working days, or overlapping leave, users are no longer shown misleading half-day choices.
Original PR description
Purpose: When taking a range which results in only 1 day taken (because it overlaps with a non working day or another time off), you only see the selector of morning / afternoon like for a unique day, but you shouldn't be able to select morning or afternoon. - added selection for request periods in the gantt for day ranges similar to the one in form view task-id: 6456270
Updates internal website editing tests so they continue to reflect a recent form behavior change. This helps maintain release quality without changing the customer-facing website experience.
Original PR description
A form action change now fetches the model's authorized fields (see the change in community), so stub that RPC to keep the tests passing. task-4952094
Helpdesk reports and ticket groupings now show the total time spent instead of the average time. This gives managers a clearer view of workload and effort across tickets, periods, and reporting groups.
Original PR description
Previously, the average number of hours spent was displayed in the Ticket Analysis and SLA Status Analysis reports. The grouped view in both My Tickets and All Tickets also showed the average time rather than the total time, making it difficult to understand the actual time spent. From this commit onward, the total time spent will be displayed instead of the average. This provides a clearer view of how much time has been spent over a specific period or based on the selected grouping criteria. Task-4652757
Helpdesk and timesheet dashboards now use conditional formatting to make important values stand out automatically. This helps teams spot trends, exceptions, or areas needing attention more quickly when reviewing dashboard data.
Original PR description
…d CF This commit adds some conditional formatting on the helpesk and timesheet dashboards. Task: 6478487
The manufacturing work order time log dialog now updates the employee's total logged time instead of only the most recent entry. This makes the displayed time better match what users expect and reduces confusion when tracking work on production tasks.
Original PR description
Before, the update time log dialog was targeting the last employee time log entry, causing confusion as it didn't match the total time spent on the task. The employee total time is defined as the sum of its time log entries without checking if they overlap, unlike the work order duration. Task-6467195
WhatsApp message templates can now use meaningful placeholder names, such as customer name, instead of only numbered fields. This makes templates easier to read and keeps Odoo compatible with newer WhatsApp Cloud API template formats.
Original PR description
This commit introduces support for named parameters in WhatsApp templates, allowing users to use descriptive placeholders like `{{customer_name}}` in addition to the standard positional `{{1}}` format.
This change ensures compatibility with newer template formats supported by the WhatsApp Cloud API and improves template clarity.
Documentation: https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview#parameter-formats
Task-5871301Return types must now always have a workflow selected, preventing configurations that could make return screens inaccessible. This reinforces the intended setup and helps avoid broken return processing caused by an empty workflow value.
Original PR description
It should have been since the beginning. Since setting it to None entirely breaks the returns (views are not accessible anymore), we assume no one was doing that, and don't merge add an upgrade script to this PR.
Financial report filter choices are now remembered separately for the companies currently selected, rather than using the user's default company. This helps users working across multiple companies return to reports with the right saved settings and reduces confusion from reused filters.
Original PR description
Report options are cached in the HTTP session for future reaccess, so that previously selected filter values can be restored. To do that, we relied on a cache key, built from the report targeted by the option triggering the loading and the user's default company. Using the default company doesn't make sense: this company is very unlikely to change (it's just the default that opens when logging in). What was probably intended with that line was to depend on the active company. We fix that, and now depend on the companies in the selector (which don't especially match what is taken into account by the report, but we consider it's enough like this, as it's simpler and should be equivalent in actual cases and not just theoretical testing).
Payroll setup now offers a clearer closing-date selection, including the 15th of the month, ordered from month-end backwards. Employee onboarding screens show only relevant actions at the right time, and missing employer category warnings appear earlier on the dashboard so payroll issues can be addressed before payslip processing.
Original PR description
In this PR expected to update Payroll closing date in payroll config, where before picking the day of payroll fells weird because of the order and also not possible to choose the 15 og the month. Update to list all possible options from the last day ot the month below in decreasing order. During creation first employee, there are smartbuttone that better to show with specific condition - Salary adjustment -> Displayed only when an active contract exists. - Time off -> Displayed only after the employee record has been saved. - History -> Displayed only when the employee record has been saved. Update warning missing employer category, where before only visible in the payslip. Display the warning on the dashboard so users are awated upfront than discovering it later on Individual payslip. task-6438703
Appointment rescheduling now keeps the existing booking active until the user confirms a new date, time, or resource. This prevents accidental cancellations when users abandon rescheduling, while paid appointments continue to follow the existing non-reschedulable flow.
Original PR description
**Purpose:** Currently, when we reschedule an appointment, current booking gets cancelled. It has the same flow as cancelling appointment. **Specifications:** When a user reschedules an appointment, the old booking should only be deleted after the user selects a new slot. If the user does not select a new slot, the existing appointment should remain unchanged. Users should only be allowed to update the date, time, or resource of the appointment. After confirming the new slot, the old appointment will be updated, and the user will be redirected to the appointment details page for the new slot. The current flow will remain the same for paid appointments, they are not reschedulable. For cancel appointments, we changed the flow to open the cancellation page instead of letting users select new slots. Task-5913349
Rescheduling tasks in the Gantt view now keeps the same number of working hours between the planned start and end dates. This helps project schedules remain accurate when tasks are moved, reducing manual corrections for planners and managers.
Original PR description
When rescheduling tasks from gantt view, we should keep the number of working hours between the start and end dates of the task when rescheduling it --- task-5376423
Australian payroll can now include post-tax deductions on payslips that reduce net salary without being reported through Single Touch Payroll. The change also supports separate accounting treatment for different deduction types and refreshes year-to-date opening balances when new salary rules are added.
Original PR description
This commit allows post tax deductions to be added to the payslip without impacting STP. This also allows automatically creating opening balances entries for new salary rules. task - 6236042 Forward-Port-Of: odoo/enterprise#119952
Search date filters now include ready-made choices like Today, This Week, This Month, This Quarter, and This Year, with arrows to move to the previous or next period directly from the search bar. This makes it faster for users to review work, planning, reports, or records by date without needing custom filters in each view.
Original PR description
## Navigable smart-date filters in the search bar <img align="right" width="382" height="328" alt="image" src="https://github.com/user-attachments/assets/6e527849-0837-412e-aba3-bbddd6bab59c" /> ###…
## Navigable smart-date filters in the search bar <img align="right" width="382" height="328" alt="image" src="https://github.com/user-attachments/assets/6e527849-0837-412e-aba3-bbddd6bab59c" /> ### What Date filters (`<filter date=.../>`) now offer built-in smart-date options — **Today**, **This Week**, **This Month**, **This Quarter**, **This Year** — and each active one gets **prev/next arrows** to shift the period on the fly from the searchbar facet (eg. `This Week` → last week → next week). We keep the existing month and quarter features, and also add a new **"Custom Date…"** shortcut in each date-filter menu, opening the editor pre-filled with the right field. <br> ### Why Filtering by a relative date range was a common need, that devs were hardcoding in views (see commit `[REM] *: remove duplicate relative ranges from filters`). Furthemore, other views (eg. gantt view, custom accounting views...) also had this navigable filter logic (but as an extra section below the search bar). We decided to integrate that feature at the framework level, allowing users to navigate filters faster for example when planning day-by-day or reviewing quarter-by-quarter, while saving vertical space compared to a gantt-style navigator. ### Also - Active relative filters keep their menu section **unfolded**, so the selected option stays visible. - Period options and smart dates are **mutually exclusive** — picking one clears the other. ### Notes - Smart-date facets are **not** click-to-edit like other facets (intentional) ### Technical - Decided to model the new relative filter type as a top level filter even if its always a children of a date filter. I did this because it makes it easier to add custom behavior with the existing code structure (domain, label, navigation..). The only downside is that it makes it a bit more complex to display. task#6260555 Documentation PR: https://github.com/odoo/documentation/pull/18866 Community PR: https://github.com/odoo/enterprise/pull/122986 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr