Daily updates from Odoo
Thursday, July 23, 2026
32 changes
7 changes
Enhancements to existing features
Users can now create payment batches from the payment list wizard for payment methods beyond SEPA. SEPA payments keep the existing process, ISO payments can produce downloadable XML without payment initiation, and other methods can be grouped into batches without XML.
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
Event registration desks can now print attendee badges as A4 PDF documents, making badge handling easier for events that use standard paper printers. The same badge printing option is also available from Point of Sale, supporting smoother on-site operations for large events such as OXP Kenya.
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#123478
Motivation ---------- Each database served keeps a full registry in a process-wide LRU. The LRU is bounded by a count, so on a server hosting thousands of databases the number of retained registries follows traffic rather than memory pressure. Their combined footprint can push a worker past its virtual-memory soft limit, at which point it is killed and restarted. On a server with ~2500 databases, the soft limit is reached at ~180 resident databases while the LRU could still hold ~210, so HT
Original PR description
Motivation ---------- Each database served keeps a full registry in a process-wide LRU. The LRU is bounded by a count, so on a server hosting thousands of databases the number of retained registries…
Motivation ---------- Each database served keeps a full registry in a process-wide LRU. The LRU is bounded by a count, so on a server hosting thousands of databases the number of retained registries follows traffic rather than memory pressure. Their combined footprint can push a worker past its virtual-memory soft limit, at which point it is killed and restarted. On a server with ~2500 databases, the soft limit is reached at ~180 resident databases while the LRU could still hold ~210, so HTTP workers were being recycled under normal load. Tracking usage -------------- Every request for a registry goes through the single lookup in the registry constructor, which now stamps it with a monotonic timestamp; the stamp is also set when a registry is first built. Collecting idle registries -------------------------- A collection pass drops every registry whose last use is older than the configured idle timeout. It runs at the end of registry loading, so it fires periodically as databases come and go. Registries that are still loading are skipped, so a concurrent build is never collected. Dropping a registry only detaches it from the LRU: a request still holding a reference keeps working, and the next lookup rebuilds it. The timeout is read from ODOO_REGISTRY_MAX_IDLE_TIMEOUT, in seconds; a value of zero, the default, disables the mechanism so behaviour is unchanged unless it is opted into. Results ------- With a five-minute timeout on the same ~2500-database server, the HTTP workers settle at around 40 resident registries instead of saturating memory on the long run. The gevent worker, which sees every web client reconnect at startup and briefly fills the LRU with ~150 databases, releases most of them on the first pass, reclaiming the memory. On a real-life SaaS server with 64GB of RAM, that frees up to ~10GB which were previously taken by unused registries in the LRU. It comes at the expense of extra registry recomputes, but on the other hand workers do not reach their virtual memory limit anymore. 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
Unlink operations are logged by default, which is useful for auditing most records. However, unlink operations on last interest records and cron triggers happen frequently and provide little auditing value. This PR mutes the unlink logger for these records to avoid filling the logs with repetitive entries, especially when a large number of messages are posted in parallel. task-6400122 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
Unlink operations are logged by default, which is useful for auditing most records. However, unlink operations on last interest records and cron triggers happen frequently and provide little auditing value. This PR mutes the unlink logger for these records to avoid filling the logs with repetitive entries, especially when a large number of messages are posted in parallel. task-6400122 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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
Release notes: https://github.com/odoo/owl/releases/tag/v3.0.0-alpha.44 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
Original PR description
Release notes: https://github.com/odoo/owl/releases/tag/v3.0.0-alpha.44 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
Servers would return a 403 because we annoy them for downloading the WSDL/XSD at every call. opw-6237180 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#276755 Forward-Port-Of: odoo/odoo#267482
Original PR description
Servers would return a 403 because we annoy them for downloading the WSDL/XSD at every call. opw-6237180 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#276755 Forward-Port-Of: odoo/odoo#267482
6 changes
Enhancements to existing features
Users can now create batch payments from the payment wizard for all payment methods, not only SEPA. SEPA payments keep the existing flow, ISO payments can generate downloadable XML without direct initiation, and other methods can be grouped into batches without XML.
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
The timesheet timer menu now loads more quickly by reducing repeated background requests and reusing information that does not change during the same task or project context. This should make opening the timer from the systray feel more responsive for users who track time regularly.
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#120429
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#276515Since [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#277408 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#277408 Forward-Port-Of: odoo/odoo#270325
This avoids a useless blocking rpc call when opening the systray. Task-6131386 Forward-Port-Of: odoo/odoo#269797
Original PR description
This avoids a useless blocking rpc call when opening the systray. Task-6131386 Forward-Port-Of: odoo/odoo#269797
6 changes
Enhancements to existing features
French VAT declarations now handle SIRET numbers even when users enter spaces, preventing avoidable submission failures. The update also adds a warning for incorrectly formatted bank account numbers, helping users correct payment details before sending declarations.
Original PR description
This commit resolves an issue where VAT declarations failed when the provided SIRET number included spaces. Since check_siret verifies the format, we now strip all spaces from the input. Additionally, this commit introduces a validation for bank account numbers, ensuring that we warn the user if the account number is wrongly formatted. task-6253745 Forward-Port-Of: odoo/enterprise#124718 Forward-Port-Of: odoo/enterprise#120689
When users choose a project in the timesheet timer, the system now automatically suggests the task they most recently logged time on for that project. For Helpdesk projects, it similarly suggests the most recent ticket, helping users continue work 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
The employee time-off planning view now loads absence information much faster for large teams by grouping background data requests and limiting records to the selected date range. This helps managers and operational teams quickly see who is away without long waiting times.
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
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#277408 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#277408 Forward-Port-Of: odoo/odoo#270325
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#2765151 change
Enhancements to existing features
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. Upgrade PR: https://github.com/odoo/upgrade/pull/10679 task-6205255
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. Upgrade PR: https://github.com/odoo/upgrade/pull/10679 task-6205255
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
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
8 changes
Enhancements to existing features
Philippine localization now avoids duplicating partner name details by deriving first, middle, and last names from the main name while still allowing updates when needed. Branch codes are left blank by default and safely fall back to standard values for reporting, reducing manual data cleanup while keeping tax reports usable.
Original PR description
Clean up the fields stored on the res.partner model. The first, middle and last name fields are now computed with inverses, to avoid storing the name twice in the database and reduce manual work. The branch code is now left empty by default, with fallbacks to '000' when needed to generate a report. It is still automatically computed from the VAT number if possible. task-6146199
Users can again export dynamic folder views from Documents into spreadsheets and Knowledge link settings, making it easier to reuse up-to-date document views. The change also protects folder access tokens from being exposed through Knowledge view settings.
Original PR description
It is convenient to export a dynamic view of a folder in both spreadsheet and knowledge links settings. Care is taken to avoid leaking access folders tokens through the search panel/model's state in knowledge. Task-5180137
The quick product creation window in the website editor has been redesigned so product details and images are easier to manage. When editing a product image, users are now taken directly to the media manager, making the process smoother and less cramped.
Original PR description
In the website editor, it is possible to quickly add a new product. However, the opened view looks bad, especially when adding an image, as everything is squeezed. This commit improves the UI and opens the media manager when editing the image. Community: https://github.com/odoo/odoo/pull/278040 task-6307166
Loans can now include analytic accounts so loan-related journal entries reflect the correct analytic distribution. This helps businesses track loan costs and allocations more accurately in their reporting.
Original PR description
Similar to assets, users need the ability to add analytic accounts to loans so that the analytic distribution impacts the generated journal entries. Task-4575979
POS operators can now see self-order counts in the same notification area as other order status updates, making it easier to monitor incoming activity. The update also adds an option to temporarily snooze the self-order service for a chosen period, giving staff more control during busy or unavailable times.
Original PR description
In this commit: ------------------ - Unified the order status notification widget to display self-order counts within the same widget. - Implemented a toggle to snooze the self-order service for a specified duration. task: 6110229 Community PR: https://github.com/odoo/odoo/pull/261677 Upgrade PR: https://github.com/odoo/upgrade/pull/10064
The Knowledge app now handles popover context automatically instead of passing it manually in comment and sidebar components. This simplifies the underlying implementation and should make future maintenance safer without changing the user experience.
Original PR description
This commit removes the env given to usePopover. usePopover and useOwnedDialogs now get the current owl scope by themselves (with an option) and propagates it to the popover.
Odoo Box device records now include a connection type, making it easier for users to match each record with the corresponding physical device. This improves day-to-day identification and support for connected devices.
Original PR description
We added a connection type to help users find which record corresponds to which actual device. see odoo/obox#203 task-6332387
Users can now enable or disable each AI provider independently of whether an API key is saved. This makes AI configuration easier to manage and improves feedback when API keys are missing or invalid.
Original PR description
Prior to this PR, user had to delete the API key set in order to disable the corresponding provider option in the AI config view. With this PR, we removed the compute method to allow the enable/disable provider option independently from the API key value. Additionally, reworded error messages when API keys are unable and added custom messages when provided API key is invalid. task: 6331248
1 change
Enhancements to existing features
Belgian VAT return users can once again add comments to the XML file before submitting or locking the return. This restores a previously available capability that had been removed by mistake, helping businesses include required context with their VAT filings.
Original PR description
This feature had been mistakenly removed.
2 changes
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
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
Law 30-26, enacted on June 18, 2026, amends the Dominican Tax Code and introduces new rates that only apply to operations dated after its entry into force: - The ISR withholding on fees, commissions and other remunerations for services provided by individuals raises from 10% to 15%, as a payment on account (art. 309 b, as amended by art. 17 of the law). - The ISR withholding on rents paid to individuals raises from 10% to 15%, as a single and final payment (art. 309 a). - A reduced 15% sing
Original PR description
Law 30-26, enacted on June 18, 2026, amends the Dominican Tax Code and introduces new rates that only apply to operations dated after its entry into force: - The ISR withholding on fees, commissions…
Law 30-26, enacted on June 18, 2026, amends the Dominican Tax Code and introduces new rates that only apply to operations dated after its entry into force: - The ISR withholding on fees, commissions and other remunerations for services provided by individuals raises from 10% to 15%, as a payment on account (art. 309 b, as amended by art. 17 of the law). - The ISR withholding on rents paid to individuals raises from 10% to 15%, as a single and final payment (art. 309 a). - A reduced 15% single and final ISR withholding replaces the general 27% remittance withholding for payments abroad of software licenses and subscriptions, royalties, online advertising and cloud data storage services (arts. 305-1 and 305-2, effective June 18, 2026). - The tax on checks and electronic transfers raises from 1.5 to 2.0 per thousand (0.20%), effective July 3, 2026 (art. 382 of Law 288-04, as amended). The previous rates remain applicable to operations prior to the entry into force of the law, so the existing taxes are kept unchanged and the new rates are added as separate taxes. 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