Tuesday, August 25, 2026
42 changes · master
Enhancements to existing features
The option to quickly create KSeF certificates has been removed from the Polish EDI settings. This reduces confusion and helps users follow the intended certificate setup process more reliably.
Original PR description
The `quick create` option for KSeF certificates is confusing and unnecessarily annoying to use. Remove it. task-6299175 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website setup assistant now identifies the selected color palette by name when giving an AI recommendation. This makes the palette choice clearer and helps users understand why the suggested colors fit their business.
Original PR description
Steps to reproduce: - Start website creation with the configurator. - Reach the color palette selection step. => The AI recommendation does not name the selected palette. Before this commit, the recommendation described suitable colors without identifying the corresponding palette. After this commit, the recommendation names the selected palette and explains why it fits the business context. task-6484260 Forward-Port-Of: odoo/odoo#283773
Digest tips in Helpdesk and Planning now use clearer, more user-friendly wording and local illustrations. Timesheet Grid also gains a new Timesheets Assistant tip, helping users better discover useful productivity guidance.
Original PR description
*_ = planning,timesheet_grid,project_enterprise_hr_todo - Refine the Helpdesk and Planning digest tips with clearer, more user-friendly text and local illustrations, and introduce a new Timesheets Assistant tip in Timesheet Grid. task-5488231
Updated descriptions for several website-related tools so the AI website builder can better find and use the right backend actions. This improves how the builder understands available website, email marketing, shop, wishlist, and e-learning capabilities without changing customer-facing features.
Original PR description
*: website_mail, website_mass_mailing, website_sale, website_slides Enterprise PR allows AI website builder to search and use backend controllers. To make it work better we improve docstrings of some useful controllers. task-6144157
This update tidies and standardizes the General Settings screens across several Odoo apps, making labels, layout, and help links more consistent. Business users should see a clearer and more polished configuration experience for integrations such as OAuth, Google services, reCAPTCHA, Cloudflare Turnstile, Unsplash, events, mail, products, and digest emails.
Original PR description
*= auth_oauth,base_geolocalize,digest,event,google_address_autocomplete, google_recaptcha,mail,product,web_unsplash,website_cf_turnstile Clean up and standardize the General Settings: - Replace several inline tutorial links and buttons with the standard `documentation` attribute on `<setting>` tags. - Adjust alignment, label formatting, and column grid widths for various integration settings (OAuth, Google reCAPTCHA, Cloudflare Turnstile, Unsplash, Google Places). - Set consistent labeling (removing colons from field labels) for better UI integration. - Rename the digest field label from 'Digest Email' to 'Template' for clarity. task-6370222 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The messaging interface now uses standard Material Symbols instead of a custom-made icon. This makes the interface easier to maintain and keeps icons more consistent across Odoo as the shared icon library expands.
Original PR description
This commit replaces the previously custom-made icon with a Material Icon one. Due to a previously quite limited pool of icon, a custom SVG was designed to match the desired result. Now that we migrated to Material Symbols, we do have more options and more refined, we can remove the custom asset and rely on the icons library instead. task-6488490 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Sales app now shows a refreshed illustration on the Services & Material empty screen. This improves the first-use experience by making the page feel clearer and more polished when there is no content yet.
Original PR description
This PR introduces a new illustration for the Services & Material empty screen. task-6341698 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The general settings pages have been aligned for a more consistent and easier-to-read experience across inter-company rules, barcode lookup, and Mapbox configuration. This improves clarity for users configuring company transactions, warehouses, receipts, API keys, and related enterprise options.
Original PR description
*= sale_purchase_stock_inter_company_rules, product_barcodelookup,account_inter_company_rules Align and standardize the general settings : - Standardize layout, labels, and spacing for Inter-Company Transactions rules (in account, sale, purchase, and stock settings). - Adjust column spacing and input placeholders (e.g., adding examples for receipts/warehouse). - Clean up Mapbox settings and barcode lookup API Key fields to use consistent branding, classes, and alignment. task-6370222
This update corrects several small visual issues in Documents, Spreadsheets, Gantt views, and Studio. Users will see more appropriate icons and cleaner spacing, making navigation and actions easier to understand.
Original PR description
PR community: https://github.com/odoo/odoo/pull/283265 *: documents, spreadsheet_edition, web_gantt, web_studio __What__ - Use `view_timeline` for the gantt view, in both the view switcher and the studio view types, instead of the unrelated `clear_all` and `checklist` icons. - Add the missing `oi` classes on the list dimensions visibility icon, which was rendered without the icon font. - Space the documents list action icons with a `gap` instead of a trailing margin, so no extra space is left after the last one. task-6377407
Resolved issues and error corrections
Sales screens now show colons after short stacked field labels, making the labels easier to read and visually consistent. This is a small polish fix that improves clarity without changing any business workflow.
Original PR description
Improve the aesthetic of labels of stacked fields by adding colons at the end e.g., M -> M:
Code cleanup and technical improvements
The mail and point of sale sound effect handling was reorganized into a plugin structure. This is an internal cleanup that should make future changes easier and safer without changing day-to-day user behavior.
Original PR description
In this commit, we convert the sound_effects_service to a plugin.
This update fixes an error that could occur when users edited the body text of a social post. It helps keep social post editing stable and prevents interruptions while composing or updating content.
Original PR description
Bug === Since https://github.com/odoo/odoo/commit/059ac6523aae20257811b2d49872bf9e66d29266 , a traceback is raised when editing the body of a text field with `onchange_on_keydown`. This happen in social when editing the post body. Task-6323897
This fixes an issue where directional icons were not mirrored for right-to-left language users. The change improves visual consistency and usability for customers using languages such as Arabic or Hebrew.
Original PR description
__Problem__
In RTL, the directional icons listed in `$oi-custom-rtl-icons` and
`$ms-rtl-icons` are not mirrored.
__Reason__
In `icons.scss`, the generated selectors omit `&`, so
`#{$rtl-selectors}` compiles to `.o_rtl .oi [data-icon="..."]`, a
descendant selector matching nothing instead of the icon element.
Caused by: odoo/odoo@1fb6d5825b
__Fix__
Prefix each generated selector with `&`.Sale order templates no longer reference an outdated display component for line descriptions. This prevents potential display or editing issues while keeping the existing behavior for sections, notes, and product lines unchanged.
Original PR description
This commit removes the use of the `section_and_note_text` widget on the `name` field of sale order template lines. The use of widget was introduced in 2097904d681dc77a69e75a6f91abf2836da17b1a but the widget itself was removed in 737860187c9a369099eaffff5d1db1dc0ef6a243. Since the `name` field is always rendered using a `TextField`, regardless of whether the line is a section, note, or product line, the `section_and_note_text` widget is no longer needed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website shop add-to-cart button is now truly disabled when unavailable, rather than only appearing disabled. This prevents shoppers from selecting it with a keyboard and accidentally adding products when the action should not be available.
Original PR description
The "Add to cart" button had no disabled attribute, only a class name. It was possible to focus the button by keyboard and click on it by pressing Enter. Now, add_to_cart button has a disabled attribute when it is disabled, which prevents users for focusing it with their keyboard. Task-6009931
The recycle records list now displays the actual record ID in the ID column instead of repeating the record name. This removes confusion for users reviewing recycled records while keeping the row click behavior unchanged.
Original PR description
In the recycle records list, the "ID" column showed the name of the record instead of its ID, repeating what the Record Name column already displayed. This appeared when res_id became a reference field, as those fields are shown as a link to the record by default. The column shows the record ID again, as before. Clicking a row still opens the original record. task-6462808 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 fixes an internal website test that could fail depending on which website-related apps were installed. The change makes the test target the intended website snippet area more precisely, improving reliability without changing customer-facing behavior.
Original PR description
Selector added in [1] wasn't specific enough because in some cases it targeted both normal and inner snippets. It checked to see that the last draggable snippet was the "Debug" group, but in cases when the selector matched 2 elements it naturally failed. It matched 2 elements when we had only website installed, as when we also had website_sale installed, in the "inner content" snippets the last child would be a disabled payment snippet, as it couldn't be dropped to the present popup. We fix this by targeting only the last child of the `#snippet_groups` snippets. [1]: https://github.com/odoo/odoo/commit/ec117d700345152132a685c470309127df460be0 runbot-946264
Sales order screens now use shorter labels for stacked fields so columns no longer become unnecessarily wide. This makes order lines easier to scan and returns the layout closer to its previous compact size.
Original PR description
The addition of stacked fields made that the width of some columns in the so to be too big. That's why now, instead of the full label, we use abbreviations as labels in stacked fields. Also, we managed to bring the columns to their initial size by deleting the width options.
This fix prevents some Odoo interface actions from failing when users interact with the page while parts of it are still loading. It adds safeguards so early clicks or keyboard actions do not trigger errors, improving stability in the website builder and general web interface.
Original PR description
useListener (unlike useExternalListener) attaches its DOM listener during setup(), before the component mounts. When setup() has an async gap (onWillStart awaiting an RPC), these callbacks could fire before mount and dereference refs/state that only exist after onMounted, throwing a TypeError. PR [1] converted a lot of useExternalListener into useListener. This commit adds a safeguard in some of those useListener callbacks that can crash if called too early. [1] https://github.com/odoo/odoo/pull/269501/ 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
In Point of Sale, the order details popup now closes automatically when a user chooses to edit a payment. This prevents the popup from blocking the payment screen, making the checkout correction flow clearer and less confusing for staff.
Original PR description
Steps to reproduce: ----------- - Validate an order, then open it from the ticket screen - Open the order details popup, click "Edit Payment" - Redirected to PaymentScreen, but the order details popup stays open on top of it Cause: --------- OrderDetailsDialog (opened via the dialog service) and PaymentScreen (opened via pos.navigate) are two separate stacks. Navigating to PaymentScreen does not close the dialog. Fix: -------------- Call dialog.closeAll() before pos.editPayment(order) in the editPayment callback passed to OrderDetailsDialog, so the dialog closes before navigating to PaymentScreen. task-6463084 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#283266 Forward-Port-Of: odoo/odoo#281960
Website editors can now directly edit more parts of mega menu templates, such as footer areas and logo containers. This fixes a limitation in the website builder and makes menu customization smoother without needing technical workarounds.
Original PR description
### Issue: Some elements in mega menu templates are not editable inline in the website builder. ### Steps to reproduce: - Go to Website > Site > Menu Editor and add a mega menu item. - Edit the mega menu and set its template (e.g. 'Thumbnails' or 'Logos'). - Try to inline edit certain sections (e.g. footer or logos container). ### Reason: `BuilderContentEditablePlugin` does not apply `contenteditable="true"` to these elements because they do not match any of the selectors defined in `content_editable_selectors`. ### Fix: Add missing element classes to `content_editable_selectors` so that these elements become editable inline. task-[6116253](https://www.odoo.com/odoo/project/974/tasks/6116253) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#283975 Forward-Port-Of: odoo/odoo#263021
Opening the command palette with rapid clicks no longer causes an error. This makes the search experience more reliable for users who double-click or interact quickly with the sidebar.
Original PR description
Steps to reproduce: 1. Open Knowledge. 2. From the sidebar, double-click the Search button. 3. Observe the traceback. Cause: Rapid interactions, such as double-clicks or fast consecutive clicks, can trigger the outside-click handler while the component's DOM reference is not yet available. In this case, `this.root()` returns `undefined`, and calling `.contains()` on it raises a traceback. Fix: Guard the root element before calling `.contains()` to ensure the element is available before accessing it.
This update corrects how Odoo detects when the email queue manager is running as a scheduled job, so progress is recorded as intended. It also adds clearer logging of the email sending limit to help support teams investigate silent email queue failures, especially those related to memory limits.
Original PR description
The changes introduced by https://github.com/odoo/odoo/commit/19d5367862528979abdcd411095f18d36bdbe7b8 aimed at aligning the mailing cron job logic with the new `_commit_progress` system. While doing…
The changes introduced by https://github.com/odoo/odoo/commit/19d5367862528979abdcd411095f18d36bdbe7b8 aimed at aligning the mailing cron job logic with the new `_commit_progress` system.
While doing so, it accidentally added an if condition based on `self.env.get('ir_cron')`, which will always return False and never run the progress commit as intended.
To address this, in this PR:
- we change the condition to `if self.env.context.get('cron_id'):`, the cron_id context variable being set when the method was called from a scheduled action
- additionally we take the occassion to add an info log that outputs the computed send limit at the time the method was triggered. This will make it easier to investigate the logs ad-hoc in situations where the "Mail: Email Queue Manager" cron job fails silently because of a memory limit error. A high send limit (batch_size) increases the chances of memory errors proportionally. Knowing what the exact sending limit was at a given point in time makes investigation easier when trying to build a sequence of past events that could explain issues related to email sending.
OPW-6396087
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#283402
Forward-Port-Of: odoo/odoo#282892This fix updates the Mail module to use the current progress-tracking method when processing outgoing messages. It prevents unnecessary warning tracebacks from appearing in server logs during automated mail queue processing, making monitoring cleaner without changing user-facing behavior.
Original PR description
Since 19.0 `_notify_progress`` is deprecated in favor of `_commit_progress``. See: https://github.com/odoo/odoo/commit/ee337934f9885834d95592946f435c6e1c8ef970 Currently, the mail compose wizard still calls an explicit _notify_progress followed by an explicit commit. This leads to warning tracebacks being dumped into the server logs (for example everytime the "Mail Marketing: Process queue" cron runs). We replace it with an equivalent `_commit_progress` call, which should log the progress and implicitly take care of the cursor commit. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#282926
Credit card and cash journal statement lists can now open individual statements in form view. This fixes a navigation issue that prevented users from reviewing statement details directly from the accounting dashboard.
Original PR description
Issue: When opening the credit card statements list view from clicking the "Statements" button in the accounting dashboard of a credit card journal, the resulting list view does not allow clicking on any of the items to enter the form view Steps to reproduce: 1. Create a credit card journal and some credit card statements 2. Go to the accounting dashboard, and click on the button with three dots to the upper right of the credit card journal card and click "Statements" 3. Try to click on any of the statements in the list view and it won’t open any of them Cause: The window action for credit card journals (action_credit_statement_tree) was missing the form view in the view_mode Solution: Add form to the view_mode of action_credit_statement_tree. The cash journal bank statements window action (action_view_bank_statement_tree) was also missing the form view, so it was added as well opw-6449315 Forward-Port-Of: odoo/odoo#282816
The VoIP softphone now updates agenda groups, call history labels, and due-date colours automatically when a user leaves it open overnight. This prevents outdated “Today” or “Yesterday” information from staying on screen and helps users see accurate call and task timing.
Original PR description
Enterprise counterpart of "[FIX] mail: refresh what derives from today at midnight", which explains why a rendered value cannot read the clock. Before this commit, a softphone left open across midnight keeps grouping its agenda and its call history under "Today" and "Yesterday", keeps the colour of yesterday's due date, and keeps labelling a call "Today, 5:00 PM". This commit reads the day off the store in the agenda, the history and the call date widget. https://github.com/odoo/odoo/pull/282991
The data cleaning lists now show the actual record ID in the ID column instead of duplicating the record name. This restores the expected view and helps users distinguish records more clearly while keeping row clicks linked to the original record.
Original PR description
In the deduplication and field cleaning lists, the "ID" column showed the name of the record instead of its ID, repeating what the Record Name column already displayed. This appeared when res_id became a reference field, as those fields are shown as a link to the record by default. The column shows the record ID again, as before. Clicking a row still opens the original record. task-6462808
Fixes an issue where Sign fields connected through related records were not recognized properly, causing values to appear without the correct formatting. This helps signed documents show linked information more accurately and consistently for users.
Original PR description
A sign item type can be linked to a field through a relation. In that case the field definition was looked up using the whole path as a field name of the base model, which never matches, so no definition was found and the value was filled as is, without any formatting based on the field type. Resolve the path first so the definition is fetched on its last model. task-6454994
This fixes a crash in the Journal Audit report and its Italian Libro Giornale variant when optional review information is not available. Users can now open and use these reports reliably even when that review column is not configured.
Original PR description
'to_review' is an optional custom line key use by the Journal Audit report. It is set using the value of a dedicated report column, which contains a count of db rows, and is therefore always an integer. In l10n_it_reports, a variant of the Journal Audit report is introduced, the Libro Giornale. That report does not define a column to compute 'to_review'. Because of that, the root report's _custom_line_postprocessor doesn't assign any value to the key in the line dict and on client side, when trying to evalute the to_review signal, we try to call undefined as a function, causing a crash.
This fix prevents the VoIP Call Flow editor from repeatedly reacting to its own updates, which could cause unstable behavior when schedules are changed. It restores the intended safeguards so call flow changes are handled reliably without affecting the wider VoIP experience.
Original PR description
OWL3's useEffect takes one argument, so the OWL2 deps callback is dropped: extendSchedule() could re-enter on the record mutations it had just caused. Came in with the Call Flow editor, odoo/enterprise#107700. Effects kept: they do async and imperative model work, not derivation, so useOnChange restores all three declared dependency lists verbatim.
The automated self-order confirmation check was updated to match the revised payment screen layout. This keeps internal quality checks aligned with the current customer payment experience and helps prevent false test failures.
Original PR description
Before this commit, the self-order confirmation tour asserted the amount-due copy "Pay $ 2.53 at the counter" as a single string. This commit fixes the now-failing step to match the community payment processing screens small redesign, which splits that into a "To pay at the counter" label and a separate amount, by asserting the amount span directly. task-6341668 requires: https://github.com/odoo/odoo/pull/276232
Users can now create WhatsApp templates directly while configuring server actions, reducing setup friction. This fixes an interface limitation and makes WhatsApp automation easier to manage.
Original PR description
Allow creation of whatsapp templates via the many2one in action server. part-of-task-4976562
The update makes an automated check for German point-of-sale certification wait until the product screen is fully ready before continuing. This reduces random test failures in validation systems, helping keep releases and related changes from being blocked by unrelated instability.
Original PR description
we face this error when running tour `FiskalyTour` with linked pr (which is completely independent of this module) and should not fail, but this can be considered as non-deterministic. waiting/confirming that product-screen is shown, before making the next move, solves the issue. build link: https://runbot.odoo.com/runbot/batch/2696526/build/121430872?debug=1 Forward-Port-Of: odoo/enterprise#128733 Forward-Port-Of: odoo/enterprise#127902
A display issue in the bank reconciliation quick create form has been corrected after a recent interface styling change. The fields now use the full available width, making the form easier and more reliable to use.
Original PR description
There was a change in the css since owl3, the quick create was impacted. By adding w-100 to the two fields, the problem is solved. no task id Forward-Port-Of: odoo/enterprise#123293
This update replaces an older internal mechanism in the web interface with the newer approach required for the Owl 3 migration. It helps keep the user interface code current and easier to maintain without introducing expected business workflow changes.
Original PR description
As part of the Owl 3 migration, this pr aims to replace **onWillUpdateProps** hook with the appropriate Owl 3 alternatives. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The way sound effects are handled has been reorganized behind the scenes. This should make the system easier to maintain and extend without changing the day-to-day user experience.
Original PR description
In this commit, we convert the sound_effects_service to a plugin.
The web module was updated to replace deprecated component update logic with the newer approach required for Owl 3. This is an internal modernization that helps keep the user interface framework maintainable and ready for future upgrades, with minimal expected day-to-day impact.
Original PR description
As part of the Owl 3 migration, replace deprecated onWillUpdateProps hooks with the appropriate Owl 3 alternatives. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change updates internal web interface code as part of Odoo's migration to a newer frontend framework version. It helps keep the web client maintainable and ready for future improvements without changing day-to-day user workflows.
Original PR description
As part of the Owl 3 migration, this pr aims to replace **onWillUpdateProps** hook with the appropriate Owl 3 alternatives. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This cleanup removes outdated internal hooks from Odoo's bus messaging service that are no longer needed. It reduces maintenance complexity for developers without changing normal user-facing behavior.
Original PR description
- `_onMessage` is test only and was necessary when the bus service API was hidden within the service function. Now that it's a plugin class, we can patch whatever we want during test without exposing a dedicated function. - `trigger` function is a leftover from the widget system, only called at one place for the wrong reasons (use a dedicated bus or env's bus instead). 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 update replaces outdated internal web interface code with the newer approach required for the Owl 3 migration. It helps keep Odoo's web client maintainable and ready for future framework upgrades without changing business workflows.
Original PR description
As part of the Owl 3 migration, replace deprecated onWillUpdateProps hooks with the appropriate Owl 3 alternatives. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo’s interface behavior and keyboard shortcut handling were reorganized behind the scenes to use a newer plugin-based structure. This keeps existing behavior compatible while making future maintenance and updates easier across many business apps.
Original PR description
Commit 1: [REF] web,*: convert ui service to plugin *: hr_attendance,hr_expense,html_builder,html_editor,im_livechat,lunch, mail,point_of_sale,pos_restaurant,pos_self_order,project,survey, web_tour,website,website_event_track,website_sale,website_slides In this commit, we rewrite the ui service as a plugin. For legacy purposes, we keep the ui service (as a service). Commit 2: [REF] web,*: convert hotkey service to plugin *: account,analytic,barcodes,html_builder,html_editor,mail,product,stock,survey, website,website_blog In this commit, we rewrite the hotkey service as a plugin. For legacy purposes, we keep the hotkey service (as a service).
This update reorganizes how the system manages interface behavior and keyboard shortcuts behind the scenes. Existing behavior is preserved for compatibility, while the change makes these shared capabilities easier to maintain across Odoo apps.
Original PR description
Commit 1: [REF] *: convert ui service to plugin *: account_accountant,account_online_synchronization,documents, frontdesk,hr_payroll,knowledge,stock_barcode,voip,web_studio In this commit, we rewrite the ui service as a plugin. For legacy purposes, we keep the ui service (as a service). Commit 2: [REF] *: convert hotkey service to plugin *: documents,knowledge,web_grid,ai In this commit, we rewrite the hotkey service as a plugin. For legacy purposes, we keep the hotkey service (as a service).