Friday, November 7, 2025
26 changes · 19.0
Enhancements to existing features
This update adds automated testing for self-order flows that send orders to an IoT preparation printer. It helps ensure printing behavior keeps working reliably and reduces the risk of regressions in restaurant and kiosk setups.
Original PR description
This commit adds a tour to check that the self order can send an order on an IoT preparation printer.
This update makes the language import/export command easier to use by showing a helpful hint when a language is not yet installed. It also broadens language matching so users can find the right language using either the standard code or ISO code, reducing confusion around similar language file names.
Original PR description
When exporting/importing a language with the i18n export/import CLI tool we might forget installing the language in the database first. By providing a hint on how to do that, the user can easily copy the command to install it in his database and continue in what he was doing. We see that Python also gives similar hints when you make typos in a method name for example, so it is good to follow that fashion. A change has been added to also allow the search of languages for the command, with the `code`, other then only with `iso_code`.
This update adjusts the sale PDF quote builder tests so they do not depend on the exact names of sales order states. It helps the test suite remain reliable when another module customizes those state labels, reducing false failures without changing customer-facing behavior.
Original PR description
### Description of the issue/feature this PR addresses: This ensures that `sale_pdf_quote_builder` tests pass even if a third party module that renames `sale.order` `state` selections has been installed. ### Current behavior before PR: Tests fail. ### Desired behavior after PR is merged: Tests pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232760
Resolved issues and error corrections
This change fixes an issue where printed expense reports using the DIN5008 format showed the title twice. It adds the correct report title so the PDF displays cleanly and consistently for users in affected localizations.
Original PR description
Issue: Expense title is duplicated when printing an expense report for localizations using the DIN5008 standard. Steps to reproduce: - Install German localization - Create a new expense report - Print the expense report PDF -> Title is duplicated Cause: DIN5008 reports tries to load a value `din5008_document_title` in their header and fallbacks to report's name With this commit, we add a bridge module to extend the expense sheet report and set the `din5008_document_title` to `Expenses Report`. opw-4314414 Forward-Port-Of: odoo/odoo#234686 Forward-Port-Of: odoo/odoo#212923
Miscellaneous changes
task-5184489 Related: https://github.com/odoo/odoo/pull/233275 Forward-Port-Of: odoo/enterprise#98949 Forward-Port-Of: odoo/enterprise#98193
Original PR description
task-5184489 Related: https://github.com/odoo/odoo/pull/233275 Forward-Port-Of: odoo/enterprise#98949 Forward-Port-Of: odoo/enterprise#98193
Conversation transcript files now render with the correct layout when downloaded. This fixes visible table borders and misaligned content, making the exported document easier to read and more professional-looking.
Original PR description
**Purpose of this PR :** Previously, downloading the conversation transcript file produced rendering issues, such as a misaligned layout and visible table borders. This commit updates the rendering template by applying the `table-borderless` class, required by `web.basic_layout` to suppress table borders. It also replaces flex with inline-block to ensure the chatBubble displays correctly. This issue occurred because the `table-borderless` class was not used and flex was applied when generating the PDF. **Before Image:** <img width="628" height="609" alt="render_bug" src="https://github.com/user-attachments/assets/020bb072-8eed-407a-aa1f-f6bc8efb9086" /> **After Image:** <img width="599" height="600" alt="render_fix" src="https://github.com/user-attachments/assets/d2a1f74d-c2a4-48a1-b3e1-3e344f53af78" /> Task-5012010
This change fixes an issue in the editor where selecting table cells from right to left or bottom to top in Firefox could lose the first selected cell. It makes backward table selections work consistently, improving the editing experience for users working with tables.
Original PR description
Steps to Reproduce: 1. Create a table in the editor (Firefox). 2. Select table cells backward (right → left or bottom → top). Description of the issue this PR addresses: - The first selected cell does not remain selected in Firefox when extending the selection backward. task-5094832 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234579 Forward-Port-Of: odoo/odoo#227694
Archived bank reconciliation models will no longer be shown in the list of available matching rules. This helps users avoid selecting outdated rules and keeps the reconciliation screen cleaner and more accurate.
Original PR description
Steps to reproduce: ------------------- 1. Install Accounting (with demo data). 2. Go to Accounting > Dashboard and open the "Bank" journal. 3. Click on any unreconciled line and open the dropdown menu. 4. Select “Manage models” and archive one of the reconcile models. 5. Return to the bank journal and open any unreconciled line. Issue: ------- Archived reconcile models are still shown in the available model list. Cause: ------ The [SQL query](https://github.com/odoo/enterprise/blob/6615de3100ac1192039a5f276df278c543f2fabb/account_accountant/models/account_reconcile_model.py#L47-L118 ) does not filter out inactive reconcile models. Solution: ---------- Add a condition to include only active models. opw-5189700 Forward-Port-Of: odoo/enterprise#98372
This update corrects how check amounts are written out in words for Philippine payments when the amount includes cents. It removes the incorrect "ONLY" ending in those cases and standardizes the wording for decimals, helping ensure checks are formatted properly and match local requirements.
Original PR description
In phillipines, if any amount has centovas (decimal amount), the amount in words cannot contain 'ONLY' in the end. Additionally, changed 'And' -> 'and' for decimal amount. **task**-5155953 Forward-Port-Of: odoo/enterprise#98535
Opening the avatar popover for an archived employee no longer triggers an error. The system now correctly reads archived employee data, so users can view these records without interruption.
Original PR description
**Steps to reproduce:** - Open the Planning app. - Archive an employee. - Open the archived employee's avatar popover. **Current behavior before PR:** Opening the popover raised an error because `get_avatar_card_data` returned an empty list for archived records. This occurred since `search_read` ignored inactive records by default. **Desired behavior after PR is merged:** The method now uses `read` instead, ensuring archived records are properly handled without error. enterprise PR: https://github.com/odoo/enterprise/pull/98230 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231184
The Planning app now safely handles missing employee data when opening an avatar popover. This prevents traceback errors and avoids interruptions when viewing archived employees.
Original PR description
Purpose of this PR: A guard has been added in the override of `get_avatar_card_data` to handle empty results and prevent traceback errors when data is missing. community PR: [odoo/odoo#231184](https://github.com/odoo/odoo/pull/231184) Forward-Port-Of: odoo/enterprise#98230
This change corrects how Odoo checks whether certain linked fields should be indexed. It now recognizes inherited fields properly, so performance-related indexing guidance is applied to the field that actually needs it. This helps avoid missing important indexing recommendations in models built through inheritance.
Original PR description
Many2one fields that originated from an `inherits` model were not linted for indexing if they were an inverse to a One2many field, because those fields on the inverse model have `store=False`. The Many2one field that needs to be indexed is the one on the delegated model. This commit fixes this by always getting the `base_field` for the inverse field - if it's an inherited field, it will use the source field; if not, it will use the field itself. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234621 Forward-Port-Of: odoo/odoo#234530
The test setup now creates a fresh loyalty program instead of reactivating an existing one. This prevents old reward rules from coming back unexpectedly and makes the tests more reliable.
Original PR description
## Versions 18.3+ ## Issue Tests fail due to free product rewards being reintroduced when a loyalty program is reactivated. ## Cause Reactivating a loyalty program also reactivates its child records, including default rewards. See: https://github.com/odoo/odoo/blob/f03ff6d9b727a22e3b250a5c9cc875b9f1f16263/addons/loyalty/models/loyalty_program.py#L513-L518 ## Fix Create a new loyalty program instead of reactivating an existing one. runbot-232709 Forward-Port-Of: odoo/odoo#228012
This update prevents the website search bar input from being edited while the page is in edit mode in Firefox. It resolves a browser-specific issue that could cause the search bar to be altered incorrectly, keeping the editing experience consistent across browsers.
Original PR description
Since the [html_builder refactoring], it's possible to type something inside of an input while in the edit mode on Firefox, which is not the expected behavior and which is not the case in other browsers, for example, Chrome. Steps to see the issue: - Open Website and start editing - Drop a searchbar - Click on the input - Type something => It will remove the searchbar and add text to the searchbar button. This happens because of the different behavior on Chrome and Firefox of `pointer-events`. When the input has `pointer-events` set to `none` Chrome blocks any activity on it, including `beforeinput` events, but Firefox doesn't. This commit fixes this problem making the input not `contenteditable`. task-5144517 [html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 Forward-Port-Of: odoo/odoo#230764
Point of Sale popups no longer show an extra OK button when the modal style is used. This makes the interface cleaner and avoids confusing users with duplicate actions.
Original PR description
Before this commit: - An extra `ok` button was displayed in popups that contain the modal class. After this commit: - The extra `ok` button has been removed. task-4919745
When a pay run is created directly from a payslip, its date range now starts from the payslip’s own period instead of the current month. This reduces manual corrections and helps payroll records stay aligned with the payslip being processed.
Original PR description
When creating a pay run directly from the payslip form view, the pay run dates now default to the payslip's period dates instead of the current month. task-5236811
This change prevents Odoo from refreshing stored product data when nothing has actually changed. It reduces wasted processing during product variant creation, which helps keep product operations a bit faster and more efficient.
Original PR description
Description of the issue/feature this PR addresses: Method `product.template._create_variant_ids()` triggers a `write()` on `product.product.product_template_attribute_value_ids` which will, in turn, invalidate the cache. This cache invalidation is unnecessary if the new value is the same as the old value. 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#233677
The mobile search panel now uses colors that better fit dark mode. This makes the interface easier to read and more consistent for users who work in dark mode on smaller screens.
Original PR description
This commit adapts colors of search_panel for mobile in dark mode. | Before | After | |--------|--------| | <img width="904" height="1022" alt="image" src="https://github.com/user-attachments/assets/9136de22-3ce1-40e3-bb79-8f87c8ee2bf8" /> | <img width="372" height="653" alt="Capture d’écran 2025-10-29 à 08 37 39" src="https://github.com/user-attachments/assets/6aff402b-6dc8-46ce-8e2a-d55887374f51" /> | Requires: - https://github.com/odoo/odoo/pull/234361 task-5121027 Forward-Port-Of: odoo/enterprise#98248
This change fixes an error that could appear when users copy an invitation link from the Picture-in-Picture call window. The link now copies normally to the clipboard, improving the experience and avoiding confusing error tracebacks.
Original PR description
**Current behavior before PR:** Attempting to copy the invitation link from the Picture-in-Picture (PIP) window results in a traceback error, indicating that the document is not focused. **Desired behavior after PR is merged:** Copying the invitation link from the PIP (Picture-in-Picture) window no longer triggers a traceback error and successfully copies the link to the user's clipboard. task-[5149370](https://www.odoo.com/odoo/project/1519/tasks/5149370) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Ask AI snippet will no longer automatically grab focus when a page reloads in fullscreen mode. This keeps the page from jumping to the widget unexpectedly, while still preserving the ability to return focus to the input after an AI response.
Original PR description
Scenario: - add "Ask AI" snippet on bottom of a page - reload the page Result: we get autofocused on the "Ask AI" snippet if the snippet is in "Fullscreen" configuration. Fix: avoid the initial focus but keep the code so we re-focus on the input after AI answer. opw-5153332
The mobile search panel now uses the correct background color in both light and dark themes. This improves readability and keeps the bottom sheet view consistent with the rest of the interface.
Original PR description
This commit adjusts the search_panel background color so it adapts correctly to both light and dark modes on mobile. It only affects the "bottom sheet" use case. task-5121027 Requires: - https://github.com/odoo/enterprise/pull/98248 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234361
This update prevents an error when Odoo Fin transactions include a field that the import process does not expect. As a result, missing transactions can be fetched more reliably without interrupting the user with a traceback.
Original PR description
… missing transactions The field `end_to_end_uuid` was introduced in `account_iso20022` on the bank statement line model but is absent from the corresponding transient model used by `account_online_synchronization`. When a transaction payload from OdooFin includes this field, processing it raises a traceback because the field does not exist on the transient model. This commit drops the `end_to_end_uuid` key from incoming transactions to avoid the error. task-5223434
The Time Off allocation form no longer shows a past-due warning for allocations that are actually scheduled in the future. This corrects a confusing message so users only see the warning when an allocation really ends in the past.
Original PR description
steps to reproduce:
- Go to Time Off > Allocations
- Create new allocation
- Set `date_from` and `date_to` (future dates)
- Notice the warning 'The allocated days cannot be used, because the allocation is set to finish in the past' appears incorrectly
cause:
- The warning visibility condition used literal string `'today'` instead of proper date comparison, causing incorrect evaluation in view expressions.
fix:
- Replace `'today'` string with `context_today().strftime('%Y-%m-%d')` in the invisible condition.
- This ensures the warning only appears when `date_to` is actually in the past.
task-5009365When someone is invited to a meeting, they now receive only the meeting invitation card instead of both that card and an extra channel notification. This makes the experience clearer and reduces redundant alerts for recipients.
Original PR description
Before this PR, when inviting someone to a meeting, they received both a call invitation card and a channel invited notification, which was redundant. This change removes the duplicate notification, keeping only the call invitation card for clarity. <img width="613" height="200" alt="image" src="https://github.com/user-attachments/assets/dd525c84-4ee4-4961-88e5-a17cf3938785" /> part of task- [5227387](https://www.odoo.com/odoo/project/1519/tasks/5227387) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The live chat dashboard now calculates the rating percentage only from sessions that were actually rated. This prevents unrated chats from lowering or skewing the reported score, making the dashboard more reliable for business reviews.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ Before this change, the live chat rating percentage in the dashboard included sessions that were not rated, which made the overall rating misleading. While the sessions reporting view allowed filtering on "rating is set", the dashboard did not provide this option. **Current behavior before PR:** --------------------------------- - Unrated sessions are included in the dashboard rating percentage - The percentage is misleading compared to the sessions reporting view **Desired behavior after PR is merged:** ----------------------------------------- - The dashboard rating percentage only considers sessions with a rating - Unrated sessions are excluded, resulting in a more accurate rating display **Task:** 5048700 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227474
task-5184489 Related: https://github.com/odoo/enterprise/pull/98193 Forward-Port-Of: odoo/odoo#234625 Forward-Port-Of: odoo/odoo#233275
Original PR description
task-5184489 Related: https://github.com/odoo/enterprise/pull/98193 Forward-Port-Of: odoo/odoo#234625 Forward-Port-Of: odoo/odoo#233275