Daily updates from Odoo
Friday, July 24, 2026
36 changes
6 changes
Enhancements to existing features
When users choose a project in the timesheet timer, Odoo now automatically fills in the task they most recently logged time on for that project. Helpdesk projects get the same convenience for tickets, helping users start timers faster while still allowing them to choose a different item in one click.
Original PR description
When selecting a project in the timesheet timer, the task on which the user most recently logged time for that project is now prefilled, as they are most likely to keep logging time on it. If not, selecting a different task only requires one click. For Helpdesk projects, where the timer shows the ticket field instead of the task field, the most recently timesheeted ticket is prefilled in the same way. task-6359030 Forward-Port-Of: odoo/enterprise#124010
The employee time-off Gantt view now loads availability information in grouped batches and only for the requested date range. This makes large employee schedules much faster to open, reducing wait times from several seconds to around one second in the reported case.
Original PR description
At odoo, our friendly kitchen chef needs to know who is off on any given day. To know that, they use the holiday gantt view and display all employees and check the sum. For 200+ employees working at GR2, `get_gantt_data` takes 7+ seconds `_unavailable_intervals_batch` is called for each individual version, which means it's not batched. Ultimatly, it leads to lots of sql queries that could be grouped together. With this commit, the calls are batched per calendar before: ~7s after: ~900ms-1s Forward-Port-Of: odoo/enterprise#125385 Forward-Port-Of: odoo/enterprise#124820
Since [website builder refactor], a date field or a datetime that appears in the page is not editable from website builder. This commit re-introduces the ability to do so. [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-6230582 Forward-Port-Of: odoo/odoo#277849 Forward-Port-Of: odoo/odoo#270325
Original PR description
Since [website builder refactor], a date field or a datetime that appears in the page is not editable from website builder. This commit re-introduces the ability to do so. [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-6230582 Forward-Port-Of: odoo/odoo#277849 Forward-Port-Of: odoo/odoo#270325
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266388
Original PR description
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266388
Task: 6167605 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#277060 Forward-Port-Of: odoo/odoo#261793
Original PR description
Task: 6167605 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#277060 Forward-Port-Of: odoo/odoo#261793
This commit adds `company_register` VAT Registry (VAT ID) to the invoice header for [legal reasons](https://lex.uz/ru/docs/4948595#5225819). Also, the condition for `TIN` has been updated to be 14 digits if the contact is a person and 9 digits if it is a company. task-6205255 Forward-Port-Of: odoo/odoo#273885
Original PR description
This commit adds `company_register` VAT Registry (VAT ID) to the invoice header for [legal reasons](https://lex.uz/ru/docs/4948595#5225819). Also, the condition for `TIN` has been updated to be 14 digits if the contact is a person and 9 digits if it is a company. task-6205255 Forward-Port-Of: odoo/odoo#273885
7 changes
Enhancements to existing features
When a user selects a project in the timesheet timer, Odoo now automatically fills in the task they most recently logged time on for that project. Helpdesk projects get the same convenience by preselecting the most recently used ticket, reducing clicks for recurring time entries.
Original PR description
When selecting a project in the timesheet timer, the task on which the user most recently logged time for that project is now prefilled, as they are most likely to keep logging time on it. If not, selecting a different task only requires one click. For Helpdesk projects, where the timer shows the ticket field instead of the task field, the most recently timesheeted ticket is prefilled in the same way. task-6359030 Forward-Port-Of: odoo/enterprise#124010
Spreadsheet users can now show the readable name of a selected global filter value, such as a customer name, instead of only its internal ID. This makes spreadsheet reports easier to understand and share with business users.
Original PR description
Before this commit: If you use ODOO.FILTER.VALUE and have a customer set in the global filter, it returns the id of the customer. That can be useful in some cases but in others you might simply want the label. Task: 6167605 Forward-Port-Of: odoo/enterprise#121004 Forward-Port-Of: odoo/enterprise#115984
The employee time off planning view now loads absence data in larger batches and only for the requested date range. This makes the view much faster for teams with many employees, reducing wait times from several seconds to around one second in large scenarios.
Original PR description
At odoo, our friendly kitchen chef needs to know who is off on any given day. To know that, they use the holiday gantt view and display all employees and check the sum. For 200+ employees working at GR2, `get_gantt_data` takes 7+ seconds `_unavailable_intervals_batch` is called for each individual version, which means it's not batched. Ultimatly, it leads to lots of sql queries that could be grouped together. With this commit, the calls are batched per calendar before: ~7s after: ~900ms-1s Forward-Port-Of: odoo/enterprise#124820
The ActivityWatch suggestions panel now shows total tracked time per project and a grand total across all suggestions. This gives users a clearer view of their logged hours directly in the timesheet workflow, helping them review and validate time entries more easily.
Original PR description
This commit introduces new time tracking metrics to the ActivityWatch suggestions panel to improve user visibility into their tracked hours. **Enhancements:** - Added the total duration per project in the By Project grouped view. - Added a grand total footer for all suggestions at the bottom of the list. task-6088877 Forward-Port-Of: odoo/enterprise#114772
Task: 6167605 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#270801 Forward-Port-Of: odoo/odoo#261793
Original PR description
Task: 6167605 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#270801 Forward-Port-Of: odoo/odoo#261793
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266388
Original PR description
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266388
This commit adds `company_register` VAT Registry (VAT ID) to the invoice header for [legal reasons](https://lex.uz/ru/docs/4948595#5225819). Also, the condition for `TIN` has been updated to be 14 digits if the contact is a person and 9 digits if it is a company. task-6205255 Forward-Port-Of: odoo/odoo#273885
Original PR description
This commit adds `company_register` VAT Registry (VAT ID) to the invoice header for [legal reasons](https://lex.uz/ru/docs/4948595#5225819). Also, the condition for `TIN` has been updated to be 14 digits if the contact is a person and 9 digits if it is a company. task-6205255 Forward-Port-Of: odoo/odoo#273885
2 changes
Enhancements to existing features
Spreadsheet users can now display the readable name of a selected global filter, such as a customer name, instead of only its internal ID. This makes spreadsheet reports easier to understand and share with business users.
Original PR description
Before this commit: If you use ODOO.FILTER.VALUE and have a customer set in the global filter, it returns the id of the customer. That can be useful in some cases but in others you might simply want the label. Task: 6167605 Forward-Port-Of: odoo/enterprise#121004 Forward-Port-Of: odoo/enterprise#115984
Task: 6167605 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#270801 Forward-Port-Of: odoo/odoo#261793
Original PR description
Task: 6167605 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#270801 Forward-Port-Of: odoo/odoo#261793
5 changes
Enhancements to existing features
Belgian VAT return users can once again add comments to the XML file generated for submission. This restores a previously available option that had been removed by mistake, helping businesses include needed context with their tax filing.
Original PR description
This feature had been mistakenly removed. Forward-Port-Of: odoo/enterprise#124865
Before this commit, when an authentication process was ongoing it was not very clear to the user This commit adds a banner to warn the user to not cancel the ongoing process or it will be aborted. task-6372665 Forward-Port-Of: odoo/odoo#277074 Forward-Port-Of: odoo/odoo#275230
Original PR description
Before this commit, when an authentication process was ongoing it was not very clear to the user This commit adds a banner to warn the user to not cancel the ongoing process or it will be aborted. task-6372665 Forward-Port-Of: odoo/odoo#277074 Forward-Port-Of: odoo/odoo#275230
In some cases, you want to redirect a record with ModelConverter, whatever the slug value. E.g. /shop/old-name-1 => /shop/alt-product-10 /shop/new-name-1 => /shop/alt-product-10 /fr/shop/nom-1 => /shop/alternatif-product-10 /de/shop/produktname-1 => /de/shop/produktname-10 In this case, adding only one redirect /shop/1 => /shop/10 covers the need to support all the translated slugs and the old name that we remember. On odoo.com we have this need e.g. when we archive a
Original PR description
In some cases, you want to redirect a record with ModelConverter, whatever the slug value.
E.g. /shop/old-name-1 => /shop/alt-product-10
/shop/new-name-1 => /shop/alt-product-10
/fr/shop/nom-1 => /shop/alternatif-product-10
/de/shop/produktname-1 => /de/shop/produktname-10
In this case, adding only one redirect /shop/1 => /shop/10 covers the need to support all the translated slugs and the old name that we remember.
On odoo.com we have this need e.g. when we archive a Job Position, we create a redirect, but in some cases the job position is translated or has been renamed and we don't remember all the old urls. With this change, we will be able to redirect all old urls, translated urls, ... with only one redirect.
/jobs/10 -> /explore-more-opportunities-with-us
task-6391567
Forward-Port-Of: odoo/odoo#276515After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266388
Original PR description
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266388
This commit adds `company_register` VAT Registry (VAT ID) to the invoice header for [legal reasons](https://lex.uz/ru/docs/4948595#5225819). Also, the condition for `TIN` has been updated to be 14 digits if the contact is a person and 9 digits if it is a company. task-6205255 Upgrade PR: https://github.com/odoo/upgrade/pull/10679 Forward-Port-Of: odoo/odoo#273885
Original PR description
This commit adds `company_register` VAT Registry (VAT ID) to the invoice header for [legal reasons](https://lex.uz/ru/docs/4948595#5225819). Also, the condition for `TIN` has been updated to be 14 digits if the contact is a person and 9 digits if it is a company. task-6205255 Upgrade PR: https://github.com/odoo/upgrade/pull/10679 Forward-Port-Of: odoo/odoo#273885
1 change
Enhancements to existing features
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#278177 Forward-Port-Of: odoo/odoo#266397
Original PR description
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#278177 Forward-Port-Of: odoo/odoo#266397
13 changes
Enhancements to existing features
The Chile and Mexico e-invoicing checkout flows now pass the current order into checkout step preparation. This helps ensure category-based extra checkout steps are applied correctly for localized online sales.
Original PR description
Pass `order` to `_get_checkout_step_values` in l10n-specific checkout controllers to support the extra-step category restriction. Community PR: https://github.com/odoo/odoo/pull/258042
Payroll users can now correct an entire validated or paid pay run in one action instead of manually reverting and recreating each payslip. The system creates a linked correction pay run with the necessary reversal and draft corrected payslips, improving efficiency and traceability at batch level.
Original PR description
There was previously no way to correct a complete pay run once it was validated or paid. Users had to manually revert and recreate payslips one by one, with no traceability at the batch level. Add a "Correct" action on validated (or paid) pay runs. Triggering it: - Creates a new pay run covering the same period, structure, and company as the original. - Reuses the existing per-payslip refund/correction logic (_action_refund_payslips/_action_correct_payslips) to generate, for each original payslip, a reverted payslip (validated) and a draft corrected payslip, both linked to their origin. - Moves all reverted and corrected payslips into the new pay run and routes the user directly to its Payslips step. Task: 6352855
Users can now create batch payments from the payment wizard even when the payment method is not SEPA. SEPA payments keep the existing flow, ISO payments can generate downloadable XML without initiation, and other methods can still be grouped into batches.
Original PR description
Since the new payment initiation features, we added a wizard in the payment list view to allow users to create a batch or start a payment initiation. But this was only possible for SEPA payments. This commit allows users to create batch payments from this wizard with any payment methods. This works like so: - If SEPA payment -> same as before - If any ISO payment -> Not allowed to initiate the payment but can download XML - If any other methods -> Just allowed to create a batch without XML task-6272798 Forward-Port-Of: odoo/enterprise#120976
Clicking a phone number now follows the company’s mobile calling preference when VoIP cannot place the call. Users may see the softphone to check connectivity, open the native phone dialer, or choose between options, reducing confusion and accidental duplicate actions.
Original PR description
…ability When the user clicks a phone number in a PhoneField widget but VoIP is not available (canCall = false), the behavior now depends on the how_to_call_on_mobile setting: - "voip": show the softphone so the user can check the connection - "phone": fall back to the base class default (native dialer) - "ask": show a selection dialog for the user to choose We also backport the code to prevent double click from [1]. [1]: https://github.com/odoo/enterprise/commit/fa6c8747d69ffee25a7f308d26baca8500226784 Forward-Port-Of: odoo/enterprise#123065
This update adjusts how product tags are managed in the AI website sales tools after related product page changes. It helps keep product editing and website product options working reliably as the underlying layout evolves.
Original PR description
**Purpose:** The template for the parent view "product.product_template_form_view" was modified with the product tags moving to another page. Then the field "l10n_pe_edi_tariff_fraction" cannot depend on the product tags position anymore. Task-5215982 See also: - https://github.com/odoo/odoo/pull/237565
When a user selects a project in the timesheet timer, Odoo now automatically fills in the task they most recently logged time on for that project. For Helpdesk projects, the same behavior applies to the most recent ticket, helping users start timers faster while still allowing easy changes.
Original PR description
When selecting a project in the timesheet timer, the task on which the user most recently logged time for that project is now prefilled, as they are most likely to keep logging time on it. If not, selecting a different task only requires one click. For Helpdesk projects, where the timer shows the ticket field instead of the task field, the most recently timesheeted ticket is prefilled in the same way. task-6359030 Forward-Port-Of: odoo/enterprise#124010
Self-order kiosk orders that will be paid at the counter are no longer sent to the Belgian blackbox before payment is completed. This prevents premature fiscal registration and supports mixed self-order payment flows more reliably.
Original PR description
This commits adapts the code in confirmation_page.js to not send the order to the blackbox from the kiosk if the order is not in paid state. task-id: 5960666 Forward-Port-Of: odoo/enterprise#123699 Forward-Port-Of: odoo/enterprise#117585
Uruguayan e-invoicing now lets users mark products as non-billable directly on the product record. This helps businesses report items such as manual rounding adjustments correctly to the tax authority using the required non-billable indicators.
Original PR description
Purpose: In UY e-invoicing, the DGI defines indicators 6 (positive non-billable) and 7 (negative non-billable). Currently, Odoo only supports down payment flows utilizing these indicators. However, indicators 6 and 7 are commonly used for other business cases, such as manual rounding adjustments. To support other flows outside of down payment, an explicit product-level flag is added to represent non-billable items/services in UY. Users will be able to set a product as non-billable in the Accounting tab. When an invoice containing non-billable products is sent to the DGII, it will be sent with the appropriate indicators, 6 or 7 and aggregated into MontoNf node of the CFE document. task-5904238
The automated clickbot now also verifies that screens meant to work offline still behave correctly when the network is unavailable. Several dashboards and views now open faster by showing cached information first, helping users avoid waiting while fresh data loads.
Original PR description
The clickbot only ever exercised the app while online. It now also checks that the views marked as available offline still work correctly once the network is cut, catching regressions that only show up in offline mode. task-id 6366264
The Employee Gantt view in Manufacturing now shows only employees who are currently assigned to active work orders or who worked on one in the last 30 days. This reduces clutter and helps planners focus on the employees most relevant to current production work.
Original PR description
Before, in Employee Gantt in MRP module, all employees of the company were shown, even if they have never done a work order. Now, the following employees are visible: - Employees currently assigned to any work order (not done, not cancelled) - Employee assigned to any work order in the last 30 days task-6276316
Event staff can now print attendee badges in A4 PDF format directly from the registration desk. The update also extends badge printing support to Point of Sale, making on-site event check-in and badge handling more flexible.
Original PR description
This PR adds the support for A4 pdf badge printing through the registration desk. Requested for OXP in Kenya See https://github.com/odoo/odoo/pull/275021 Forward-Port-Of: odoo/enterprise#123799 Forward-Port-Of: odoo/enterprise#123478
Spreadsheet users can now retrieve the visible label of a global filter, such as a customer name, instead of only its internal ID. This makes spreadsheet reports easier to read and share when filter values need to be displayed in a business-friendly way.
Original PR description
Before this commit: If you use ODOO.FILTER.VALUE and have a customer set in the global filter, it returns the id of the customer. That can be useful in some cases but in others you might simply want the label. Task: 6167605 Forward-Port-Of: odoo/enterprise#124746 Forward-Port-Of: odoo/enterprise#115984
Localized bank account details are now shown in a more consistent position across several country-specific modules. This keeps important banking and partner information grouped logically, making forms easier to review and maintain.
Original PR description
Since we have partner_id now on top of holder_name, we want to anchor localization specific fields on top of partner_id instead of holder_name. task-6275796
1 change
Enhancements to existing features
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266397
Original PR description
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778 Forward-Port-Of: odoo/odoo#266397
1 change
Enhancements to existing features
### [FIX] website: fix GMaps deprecation console warning for s_google_map Google deprecated the synchronous script loader for initializing the Maps JS API. This caused browser console warnings. The fix adopts Google's official `importLibrary()` bootstrap pattern, which loads map libraries (places, maps, marker) lazily on demand rather than all at once.The version is updated to `v=weekly`, which Google recommends as it receives updates weekly versus quarterly for version numbers(`v=num
Original PR description
### [FIX] website: fix GMaps deprecation console warning for s_google_map Google deprecated the synchronous script loader for initializing the Maps JS API. This caused browser console warnings. The…
### [FIX] website: fix GMaps deprecation console warning for s_google_map Google deprecated the synchronous script loader for initializing the Maps JS API. This caused browser console warnings. The fix adopts Google's official `importLibrary()` bootstrap pattern, which loads map libraries (places, maps, marker) lazily on demand rather than all at once.The version is updated to `v=weekly`, which Google recommends as it receives updates weekly versus quarterly for version numbers(`v=number`). Steps to reproduce: 1. Add the `s_google_map` snippet(not the`s_map`, enable debug mode) 2. Open the browser console and observe the deprecation warning ### [IMP] website: warn user to reload after GMaps config changes Switching from the legacy Google Maps APIs to the new APIs requires enabling additional services in Google Cloud. Existing maps using the legacy API continue to work, but when an admin edits a map without a proper configuration, the `GoogleMapAPIKeyDialog` dialog opens. Google Maps configuration changes (API key update or enabling services) do not take effect during the current editor session because the Maps JavaScript API is loaded at page initialization. Before this commit, such misconfigurations (disabled services or invalid API keys) only triggered a dialog showing a generic Google Maps error. After this commit, a notification informs the user that the page must be reloaded for configuration changes to take effect. The setup instructions are also updated to reference the "Places API (NEW)" service. ### [IMP] website: replace deprecated Places API calls in GPS picker The GPS picker relied on `PlacesService.nearbySearch` and `getDetails`, which are part of the deprecated Places API. The new places API replaces these with `Place.searchNearby` and `fetchFields`. Error handling is consolidated into a single try/catch since the new Places API throws on failure rather than returning a status code, removing the need for `PlacesServiceStatus` checks. ### [IMP] website, *: replace deprecated Google Autocomplete *: website_form_project google.maps.places.Autocomplete is deprecated in the new Places API. The replacement (`AutocompleteSuggestion.fetchAutocompleteSuggestions`) does not fire DOM events, making it incompatible with the old event-listener pattern used in GPSPicker. A new Owl component (`PlacesAutoComplete`) is introduced to wrap the new API, built on top of the existing `AutoCompleteWithPages`. References: https://developers.google.com/maps/documentation/javascript/load-maps-js-api https://developers.google.com/maps/documentation/javascript/advanced-markers/migration https://developers.google.com/maps/documentation/javascript/legacy/places-migration-overview task-[4441041](https://www.odoo.com/odoo/project/974/tasks/4441041)