Daily updates from Odoo
Thursday, August 13, 2026
28 changes
3 changes
Enhancements to existing features
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
Original PR description
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
This commit adds a "Reload Data" button to the traceback dialog for PWA applications. When clicked, the user is asked to confirm the action. Once confirmed, all locally stored browser data is cleared, allowing the POS to recover from errors caused by corrupted or outdated local data. task-6388234 Forward-Port-Of: odoo/odoo#282150 Forward-Port-Of: odoo/odoo#276559
Original PR description
This commit adds a "Reload Data" button to the traceback dialog for PWA applications. When clicked, the user is asked to confirm the action. Once confirmed, all locally stored browser data is cleared, allowing the POS to recover from errors caused by corrupted or outdated local data. task-6388234 Forward-Port-Of: odoo/odoo#282150 Forward-Port-Of: odoo/odoo#276559
…h lookup _search_phone_mobile_search previously searched only raw number fields returned by _phone_get_number_fields (e.g. mobile, phone). E164-normalized phone_sanitized was ignored, so searching by a sanitized value could miss records that had no match on the raw fields. This commit: - Extracts _phone_get_searchable_fields() so that both init() and _search_phone_mobile_search build the same searchable field list, appending phone_sanitized alongside mobile/phone when available. - Add
Original PR description
…h lookup _search_phone_mobile_search previously searched only raw number fields returned by _phone_get_number_fields (e.g. mobile, phone). E164-normalized phone_sanitized was ignored, so searching by a sanitized value could miss records that had no match on the raw fields. This commit: - Extracts _phone_get_searchable_fields() so that both init() and _search_phone_mobile_search build the same searchable field list, appending phone_sanitized alongside mobile/phone when available. - Adds expression indexes for phone_sanitized in init() so the REGEXP_REPLACE-based queries hit indexes instead of scanning tables. - Guards init() with self._auto to prevent index creation on AbstractModel subclasses that lack a physical table. Task-6395518 ENTPR: odoo/enterprise#124797 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#281598 Forward-Port-Of: odoo/odoo#278018
2 changes
Enhancements to existing features
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
Original PR description
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
This commit adds a "Reload Data" button to the traceback dialog for PWA applications. When clicked, the user is asked to confirm the action. Once confirmed, all locally stored browser data is cleared, allowing the POS to recover from errors caused by corrupted or outdated local data. task-6388234 Forward-Port-Of: odoo/odoo#281734 Forward-Port-Of: odoo/odoo#276559
Original PR description
This commit adds a "Reload Data" button to the traceback dialog for PWA applications. When clicked, the user is asked to confirm the action. Once confirmed, all locally stored browser data is cleared, allowing the POS to recover from errors caused by corrupted or outdated local data. task-6388234 Forward-Port-Of: odoo/odoo#281734 Forward-Port-Of: odoo/odoo#276559
2 changes
Enhancements to existing features
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
Original PR description
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
This commit adds a "Reload Data" button to the traceback dialog for PWA applications. When clicked, the user is asked to confirm the action. Once confirmed, all locally stored browser data is cleared, allowing the POS to recover from errors caused by corrupted or outdated local data. task-6388234 Forward-Port-Of: odoo/odoo#281734 Forward-Port-Of: odoo/odoo#276559
Original PR description
This commit adds a "Reload Data" button to the traceback dialog for PWA applications. When clicked, the user is asked to confirm the action. Once confirmed, all locally stored browser data is cleared, allowing the POS to recover from errors caused by corrupted or outdated local data. task-6388234 Forward-Port-Of: odoo/odoo#281734 Forward-Port-Of: odoo/odoo#276559
5 changes
Enhancements to existing features
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
Original PR description
Add account 2284 GBRT Tax Payable and rework the GBRT tax distribution to book to it against 6771 Taxes & dues. Update the Traditional Chinese tax descriptions and remove the 0% Deemed Sales tax. task-6427283 Forward-Port-Of: odoo/odoo#281109
Before this commit: - Refund orders of scheduled (with shipping date) orders always generated a new picking with negative quantities, even when the original delivery had not been completed. - This could lead to incorrect stock movements and negative quantity computations for undelivered pickings. After this commit: - When processing a refund of a scheduled (with shipping date) order, the behavior now depends on the state of the original picking: - If the picking has already been del
Original PR description
Before this commit:
- Refund orders of scheduled (with shipping date) orders always generated a new picking with negative quantities, even when the original delivery had not been completed.
- This could lead to incorrect stock movements and negative quantity computations for undelivered pickings.
After this commit:
- When processing a refund of a scheduled (with shipping date) order, the behavior now depends on the state of the original picking:
- If the picking has already been delivered, a return picking is created with the corresponding negative quantities.
- If the picking has not been delivered, the original picking is updated instead:
- The picking is cancelled for a full refund.
- Refunded product moves are removed from the picking for a partial refund.
- This prevents unnecessary negative stock movements and ensures stock operations remain consistent with the delivery status.
Task-5902424
Forward-Port-Of: odoo/odoo#271506This 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#281742
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#281742
Steps to reproduce: 0. Link a Stripe terminal to a payment method and add the payment method to a kiosk pos.config 1. Select products and initiate payment 3. Stripe error - TypeError: Cannot set properties of undefined(setting 'stripecardpresentnetwork') Paymentline uiState is never initialized because pos_stripe/static/src/overrides/models/pos_payment.js is missing from the payment_terminals bundles and is therefore never loaded in kiosk mode. This commit ensures that the file is loaded
Original PR description
Steps to reproduce: 0. Link a Stripe terminal to a payment method and add the payment method to a kiosk pos.config 1. Select products and initiate payment 3. Stripe error - TypeError: Cannot set properties of undefined(setting 'stripecardpresentnetwork') Paymentline uiState is never initialized because pos_stripe/static/src/overrides/models/pos_payment.js is missing from the payment_terminals bundles and is therefore never loaded in kiosk mode. This commit ensures that the file is loaded and that the PosPayment setup() is completed. opw-6419140 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
### [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) Forward-Port-Of: odoo/odoo#281029 Forward-Port-Of: odoo/odoo#242765
11 changes
Enhancements to existing features
This update improves Belgian payroll handling for Joint Committee 302 employees who are paid through tips. It adds the related payroll rules, employee and contract settings, warnings, reporting data, and validation coverage so payroll teams can process these cases more accurately.
Original PR description
Task: 6037567
VoIP calls now coordinate across open browser tabs so that when a call is answered or brought forward, other tabs automatically place their sessions on hold. This helps prevent overlapping calls or audio conflicts and makes the calling experience more reliable for users working with multiple tabs.
Original PR description
Put sessions on hold in other tabs when a call is accepted or promoted. The shared worker now tracks connected clients and assigns each tab a unique userAgentKey. When a session is promoted to front, the worker broadcasts HOLD_ALL_SESSIONS to every tab. The receiving tab ignores broadcasts matching its own userAgentKey. task-5973023
Payroll rules and related country-specific payroll modules were updated to remove an outdated paid amount setting. This simplifies payroll configuration and helps keep payslip calculations consistent across localizations.
Original PR description
task-6186326
Belgian payroll now avoids applying flat-rate withholding tax to double holiday pay and 13th month payslips when the employee's regular monthly tax situation indicates no tax is due. This helps prevent over-withholding in eligible cases while keeping the tax calculation aligned with normal payslip rules.
Original PR description
This commit adds an exemption that skips the flat-rate professional withholding tax on double holiday and 13th month payslips when two conditions both hold: no cumulated PP from regular monthly payslips this year, and the theoretical monthly tax on base salary plus 1/12 of the exceptional gross works out to zero. That theoretical tax is simulated the same way as a real monthly payslip, including the flat-rate professional fees and transport tax deductions, so it does not overstate what the employee actually owes. It also pulls the bareme bracket logic into its own method so both the standard and theoretical paths can share it. task-6322148
Belgian payroll cash register settings now appear when the selected employer category allows Joint Committee 302, instead of depending on whether an employee is already assigned to that committee. This makes the settings available earlier and keeps payroll configuration aligned with the employer category setup.
Original PR description
Cash register settings are currently displayed only when the company has an employee assigned to Joint Committee 302. This makes their availability depend on the employee configuration. The employer category already defines the allowed joint committees. Base the visibility on whether the selected category allows Joint Committee 302, making the settings available as soon as the relevant payroll configuration is selected. Task: 6395308
Users can still add appointment events to external calendars such as Google, Outlook, Apple, and iCal, but the responsibility is now handled by the Calendar app instead of Appointment. This centralizes the feature so calendar links can be reused more consistently across appointment-related communications.
Original PR description
Moving the possibility for users to add a calendar event to their iCal/Outlook/Apple or Google calendars from appointment to calendar. Task-6218949
Turkish payroll now calculates severance pay and provisions based on an employee's departure date and reason, rather than whether the employee record is archived. Several internal salary rule lines are hidden from display, and manual deduction/addition labels are renamed to clearer business terms.
Original PR description
- Severance Pay and Severance Provision now trigger on the employee's departure date and departure reason instead of the employee being archived. - Set visibility to NEVER for: Previous Months Gross, Previous Months Paid Tax, Gross From Net, SSI Company Contribution, SSI (unemployment) Company Contribution, Taxable Salary, Current Month Actual Deducted Tax (Pre Exempt), Expected Net Salary. - Rename Manual Deductions -> Other Deductions, Manual Additions -> Other Allowances. task-6459874
UrbanPiper order screens now present order details and information popups more clearly for point-of-sale users. Demo data also includes rider information, making examples more realistic and easier to understand during setup or testing.
Original PR description
In this commit: ================ - Improved the Order Details and Order Info popup UI for UrbanPiper orders. - Enriched demo data by including rider info task-6053362
Belgian payroll settings now show the letter prefix next to each FFE code option. This makes it easier for users to identify and select the correct code, reducing confusion during payroll configuration.
Original PR description
Prefix the FFE code selection field labels with their corresponding letters (C, B, N, O).
Signature request activities now show key details such as the reference, requester, signers, and documents, making it easier to understand what needs attention. Completion messages on linked records are cleaner and include a link to the signed document plus the signer list, helping users quickly find final signed files.
Original PR description
Show the request reference, creator, signers, and documents on the activity card, add an icon to the "View" button, and post a cleaner completion message on the linked document with a link to the signed document and the list of signers (attaching the documents only, not the certificate). task-6127862
The payroll and payroll accounting setup data used for internal population and benchmarking has been adapted to a newer format. This keeps HR payroll test and demo data generation aligned with the broader platform changes, supporting smoother maintenance and validation.
Original PR description
See community PR https://github.com/odoo/odoo/pull/276538 for more info. task-6303351
1 change
Enhancements to existing features
When a Bulgarian VAT return is validated, the system now automatically creates and attaches the required monthly SAF-T General Ledger, purchase, and sales report files alongside the PDF. This reduces manual work for large companies and helps them meet Bulgaria's monthly tax reporting requirements more reliably.
Original PR description
Bulgaria made it mandatory for large companies to present a monthly file
to report their VAT to the administration. To streamline that process,
when the VAT return is validated and PDF is added to the attachments,
the monthly General Ledger SAF-T file, the POKUPKI Purchase Report and
PRODAGBI Sale Report are produced and added as well.
Simplify the report file download error wizard's visuals and descriptions to improve readability.
task-60079631 change
Enhancements to existing features
The `create_calendar_meeting` field on `hr.leave.type` allows users to choose if leave requests created with a given time off type generate a corresponding entry in the Calendar app. However, this field was not displayed on the form view. This commit adds `create_calendar_meeting` to the `hr.leave.type` form view inside the configuration section, along with dedicated help text explaining its behavior. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
The `create_calendar_meeting` field on `hr.leave.type` allows users to choose if leave requests created with a given time off type generate a corresponding entry in the Calendar app. However, this field was not displayed on the form view. This commit adds `create_calendar_meeting` to the `hr.leave.type` form view inside the configuration section, along with dedicated help text explaining its behavior. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#280593
3 changes
Enhancements to existing features
The Dutch payroll module now includes the 2026 income tax rates for residents. This helps payroll calculations stay aligned with upcoming tax requirements and supports accurate employee payslips.
Original PR description
Added 2026 values for the residents' income tax rates rule parameter. task-6462877
General Ledger Excel exports now group accounts into smarter batches instead of processing each account separately. This reduces export time for companies with large accounting datasets while keeping memory usage under control.
Original PR description
### Description of the issue/feature this PR addresses: This PR optimizes the XLSX export process for large accounting reports by implementing a "smarter" batching strategy. Three months ago, a…
### Description of the issue/feature this PR addresses: This PR optimizes the XLSX export process for large accounting reports by implementing a "smarter" batching strategy. Three months ago, a batching mechanism was introduced to prevent memory errors during large exports. However, that implementation batched every single account individually. While this solved the memory consumption issue, it introduced a significant performance regression: processing thousands of tiny batches one-by-one is extremely slow due to the overhead of repeated report engine calls. This change introduces a weighted batching system that groups multiple accounts together into a single batch until a maximum line threshold is reached. This strikes an ideal balance between low memory usage and high execution speed. ### Current behavior before PR: The system uses _get_accounts_with_move_lines to retrieve a list of accounts. The export logic iterates through every account individually, creating a separate batch for each one. For reports with many accounts (even those with few moves), the overhead of calling the report engine for every single account causes the export to take an excessive amount of time. Memory usage is low, but time performance is poor. ### Desired behavior after PR is merged: The new _get_account_ids_and_weights_with_move_lines method fetches both the account IDs and the count of moves (weight) associated with them in a single SQL query. The _build_account_batches method packs accounts sequentially into batches of up to 500,000 lines. Small accounts are grouped together. Large "mega-accounts" that exceed the limit are isolated into their own batches to prevent memory spikes. _get_accounts_with_move_lines is deprecated. It is effectively superseded by the more informative weighted query, providing the data necessary for the smarter partition logic. ### Benchmarks | # Move Lines | Before | After | | --- |---|---| | ~5.6million | Times Out | 32sec | | ~3.5million| Times Out | 11sec | ### References #103329 opw-6077972 opw-5723374 opw-5950806 opw-5915227 opw-6066290 opw-5914983 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The `create_calendar_meeting` field on `hr.leave.type` allows users to choose if leave requests created with a given time off type generate a corresponding entry in the Calendar app. However, this field was not displayed on the form view. This commit adds `create_calendar_meeting` to the `hr.leave.type` form view inside the configuration section, along with dedicated help text explaining its behavior. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
The `create_calendar_meeting` field on `hr.leave.type` allows users to choose if leave requests created with a given time off type generate a corresponding entry in the Calendar app. However, this field was not displayed on the form view. This commit adds `create_calendar_meeting` to the `hr.leave.type` form view inside the configuration section, along with dedicated help text explaining its behavior. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr