Tuesday, August 25, 2026
24 changes · master
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:
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