Wednesday, July 8, 2026
39 changes · 19.0
Resolved issues and error corrections
A test related to Italian electronic invoicing withholding was corrected after a previously merged change. This is an internal quality fix that helps ensure the feature remains reliably validated without changing business workflows.
Original PR description
This commit just want to correct a test of a PR already merged. Original commit: 78ffb5a2e63401123e4506056493e52cf3e69953 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#274062
Updated test data to use a valid Belgian VAT number so automated checks remain stable with newer validation libraries. This reduces false test failures and helps keep invoice import quality checks consistent across environments.
Original PR description
The previous Belgian VAT is rejected by newer versions of `python-stdnum`. Replace it with a valid VAT so the test behaves consistently across environments. Forward-Port-Of: odoo/odoo#274402
The link editor now keeps URL suggestions within the visible screen on mobile devices. This prevents awkward horizontal overflow and makes adding links in Notes easier for users on smaller screens.
Original PR description
Step to reproduce: - Open Notes - Open the link popover - Type a URL in the URL input field Description of the issue/: - On mobile devices, URL autocomplete suggestions overflow the viewport. Cause: - The autocomplete suggestions container has a max-width of 600px. - On smaller screens, the container does not shrink to fit the available width, causing it to overflow the viewport. Solution: - Add width: 100% to the autocomplete suggestions container so it adapts to the available screen width on smaller devices while still respecting the existing max-width on larger screens. task-6201175 Forward-Port-Of: odoo/odoo#271925 Forward-Port-Of: odoo/odoo#269493
Restaurant self-orders no longer make tables appear occupied on the floor plan. This keeps staff table availability views accurate and helps avoid confusion during service.
Original PR description
Before this commit - ----------------------- Self-orders marked tables as occupied on the floor plan. After this commit - ------------------ Self-orders no longer mark tables as occupied on the floor plan. Task-6361454 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an accounting preview issue where journal entries could show the debit amount in both debit and credit columns when no currency was provided. This helps users review accounting entries with accurate credit values before posting or processing them.
Original PR description
In _move_dict_to_preview_vals(), when no currency is provided, the credit column falls back to the line's debit value, so any caller omitting currency_id would show the debit amount in both columns of the journal entry preview. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269335
Expiry warning messages now show the entered lot name when validating incoming receipts, even before the lot record has been created. This avoids confusing messages like "False, False" and helps warehouse users confirm expired or past-removal-date products accurately.
Original PR description
From saas-18.4, the expiration confirmation wizard can be triggered not only from expired lots, but also from stock move lines whose `removal_date` has passed. For incoming receipts, tracked products…
From saas-18.4, the expiration confirmation wizard can be triggered not only from expired lots, but also from stock move lines whose `removal_date` has passed. For incoming receipts, tracked products use the `lot_name` field when the user is entering the lot. The corresponding `lot_id` is only created later once the receipt is validated. As a result, it is possible for the expiration confirmation wizard to be displayed before the lot exists. In this situation, it attempts to display the product and lot information using `lot_id`, which is still empty, causing the message to show "False, False" instead of the actual lot name entered by the user. It should use the move line information as a fallback when no `lot_id` has been created yet so it still displays the correct product and lot name. Steps to reproduce 1. Enable Product Expiry. 2. Create a storable product with: - Tracking: By Lots - Use Expiration Date: enabled - Removal Time > 0 3. Create a receipt for the product. 4. Open Detailed Operations. 5. Enter a new lot number in the Lot/Serial Number field. 6. Ensure the removal date is in the past and validate the receipt. Related Tickets: opw-6303140 Forward-Port-Of: odoo/odoo#273143
Odoo will now continue checking Turkish Nilvera e-invoices that temporarily show an Unknown status. This prevents invoices from remaining unresolved after Nilvera later updates them to their final status, improving follow-up reliability for affected businesses.
Original PR description
## Short fix summary:
Nilvera reports `Unknown` as a normal, transient `StatusCode` value (their own e-Archive API docs
list the enum as `unknown`/`waiting`/`succeed`/`error`) right after a document is sent, before their
daily batch resolves the final status. But `_cron_nilvera_get_invoice_status`'s search domain only
matches `l10n_tr_nilvera_send_status in ('waiting', 'sent')`, so once an invoice lands on `unknown` it
is never polled again — even after Nilvera later resolves the real status on their side. This adds
`unknown` to that domain so these invoices keep getting polled until Nilvera reports a final status.
task-6328589
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#274494
Forward-Port-Of: odoo/odoo#274311This fix makes an automated test for the HTML editor toolbar more reliable by avoiding timing-related failures caused by browser event handling. It helps reduce false alarms in testing and supports smoother validation of future editor changes.
Original PR description
### Description of the issue/feature this PR addresses: - Resolve non-deterministic failures in the 'toolbar should not open between double and triple click' Hoot test. - Because browser-level selectionchange events are dispatched asynchronously in the event loop, asserting on the presence of `.o-we-toolbar` in the DOM leads to timing race conditions. ### Solution: - Resolves the flakiness by introducing a wrapper method `triggerDebouncedUpdateToolbar` in `ToolbarPlugin` and refactoring the test to track method call sequences instead of asserting on DOM elements. This verifies the scheduled debounced updates in a deterministic sequence. task: https://runbot.odoo.com/odoo/error/243145 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#274348 Forward-Port-Of: odoo/odoo#273303
The print button on customer invoices is being restored to its primary placement after a previous change made it less prominent by mistake. This helps users find the print action more easily, while keeping the secondary treatment only for invoices that have already been sent.
Original PR description
In task-6269645, the print button on customer invoices was set to secondary instead of primary. This is a mistake and it's confusing, so it's being reverted in this commit because it only needs to be secondary if the move is sent. task-6357618 Forward-Port-Of: odoo/odoo#273953
This update corrects demo data setup for the electronic invoicing proxy client so the right demo user configuration is used. It helps avoid confusion or incorrect behavior in demo environments without affecting normal customer operations.
Original PR description
The system parameter is already brought to demo in account_peppol module. But the current users are not for pdp. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272462
The Event registration desk now refreshes attendee information whenever the registration summary window is closed. This prevents outdated attendee statuses from remaining visible when users close the window with Escape or by clicking outside it, improving accuracy in both Kanban and List views.
Original PR description
**Current behavior before PR:** Closing the Registration Summary dialog by pressing **Escape** or clicking outside the dialog does not refresh the Registration Desk view. As a result, the attendee state is not reflected until the view is manually reloaded. **Desired behavior after PR is merged:** The Registration Desk view is refreshed whenever the Registration Summary dialog is closed, regardless of whether it is closed using the **Close** button, by pressing **Escape**, or by clicking outside the dialog. This ensures the attendee information is always updated in both the Kanban and List views. Task - [#6333829](https://www.odoo.com/odoo/project.task/6333829) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272699
The stock forecast report now opens correctly for archived products instead of showing an error. This helps users review historical or inactive inventory items without interruption, with empty or zero values shown when product details are unavailable.
Original PR description
Version: ---------- - 19.0+ Steps to reproduce: ------------------- - Install `stock` module - Create a storable product - Update its on-hand quantity - Archive the product - Open the Forecast report…
Version: ---------- - 19.0+ Steps to reproduce: ------------------- - Install `stock` module - Create a storable product - Update its on-hand quantity - Archive the product - Open the Forecast report using smart button Issue: ------ - Opening the forecast report for an archived product crashes the page with: ``` TypeError: Cannot read properties of undefined (reading 'uom') ```` ## Cause: - When a product template is archived, its variants are archived as well. - While opening the forecast report, the backend retrieves the archived product template using `browse()`: [https://github.com/odoo/odoo/blob/f3b317310b84edb073009f7d15d7fec002f3ccf0/addons/stock/report/stock_forecasted.py#L63-L64](https://github.com/odoo/odoo/blob/f3b317310b84edb073009f7d15d7fec002f3ccf0/addons/stock/report/stock_forecasted.py#L63-L64) Although `browse()` successfully returns the archived template record, accessing the relational field `product_variant_ids` still respects the default `active_test=True` context. As a result, all archived variants are filtered out and an empty product recordset is returned. This causes the frontend `ForecastedHeader` component to receive an empty `products` object: [https://github.com/odoo/odoo/blob/f3b317310b84edb073009f7d15d7fec002f3ccf0/addons/stock/static/src/stock_forecasted/forecasted_header.js#L74-L76](https://github.com/odoo/odoo/blob/f3b317310b84edb073009f7d15d7fec002f3ccf0/addons/stock/static/src/stock_forecasted/forecasted_header.js#L74-L76) The getters `uom`, `leadTime`, and `leadTimeShort` then attempt to access properties from: Since the object is empty, the expression evaluates to `undefined`. Attempting to read `.uom` (or related properties) on `undefined` raises a JavaScript traceback. Solution: ---------- - Safeguard the `uom`, and `leadTime`, getters in `ForecastedHeader` to properly handle empty product data. - This prevents the crash and allows the forecast report to load correctly for archived products, showing empty/zero forecast values instead. --- opw-6219999 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Long blog post titles now wrap properly instead of stretching the page sideways. This prevents unnecessary horizontal scrolling and keeps blog pages easier to read for visitors.
Original PR description
Long blog post titles caused the page to overflow horizontally, displaying an unnecessary scrollbar. This fix ensures long titles wrap correctly, avoiding horizontal scrolling while keeping the text intact. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix allows users to delete an expense even when it has an attachment. It removes a blocker in expense cleanup and helps teams keep their expense records accurate without manual workarounds.
Original PR description
To reproduce: - Create an expense - Add an attachment - Try to delete the expense --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#274710
The point-of-sale invoice toggle now checks whether the company is in India before running India-specific logic. This prevents errors in non-Indian setups and keeps checkout workflows stable across test and business environments.
Original PR description
Toggle invoice button was making a call in IN localization even when not in a IN country. This was causing an error in runbot 940146. This commit fixes the issue by checking if the country is IN before making the call. In `pos_settle_due` the method signature was not correct. The linked enterprise commit also fix it.
Deleting a custom field could trigger an unrelated access error when the Website module checked whether fields were used in website forms. The fix makes that internal check run consistently regardless of the current user's permissions, so administrators can delete fields without being blocked by unrelated module access rules.
Original PR description
# How to reproduce - Install the Website module - Install another module that has atleast one model with one html field, sanitize=Flase or sanitize_form=False and groups - Remove the field's group…
# How to reproduce - Install the Website module - Install another module that has atleast one model with one html field, sanitize=Flase or sanitize_form=False and groups - Remove the field's group from the current user - Enable dev mode - Go to Settings > Technical > Database Structure > Models - Pick any model (e.g. sale.order.line) - Add a field to that model & Save - Delete the added field & Save > Note : Significantly harder to reproduce since : https://github.com/odoo/odoo/commit/9a336bbb94b0a4266d84f7554c024c3abd2d1e7c I am not sure a field as mentionned in the steps exists # The problem An access error is raised for the module wich access rights were removed, even if the module is not linked in any way with the picked model # Cause of the issue Deleting the field will endup calling the `unlink()` method of `BaseModel` on the `ir.model.fields` record. This function triggers all `@api.delete` methods defined on the model : https://github.com/odoo/odoo/blob/5538132d9d14c4cc5031fc50ac0388ad2ab0fc92/odoo/models.py#L4548-L4552 This will call the this method : https://github.com/odoo/odoo/blob/5538132d9d14c4cc5031fc50ac0388ad2ab0fc92/addons/website/models/website_form.py#L153-L154 That was introduced by : https://github.com/odoo/odoo/commit/c0a827519844ec43537e4487f6abe358bb82ba9a Which prevents a field from being deleted if it is actively used in any website form. But this method does a search on every model return by `_get_html_fields` which may contains models that are not accessible by the user, so we get an access error. # Proposed solution Since `_check_if_used_in_website_form` should perform the same independently from the user, we can do the search in sudo opw-6231951 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#274332 Forward-Port-Of: odoo/odoo#265781
The account type dropdown now uses the correct dark mode background when users create or edit accounting records. This fixes a visual inconsistency, making the accounting form easier to read and more polished for users working in dark mode.
Original PR description
Steps to reproduce: - Install `account` module - Enable dark mode - Open `view_account_form` to create a record - On the Accounting page, open type dropdown - The dropdown background remains in light mode This commit applies $dropdown-bg on `o_field_account_type_selection` as in odoo/odoo@0cd148eb389078c896aaa719af5733d05377fd1c Forward-Port-Of: odoo/odoo#274327 Forward-Port-Of: odoo/odoo#271352
This fix makes error details from electronic invoicing proxy responses visible to users instead of only showing a generic error type. It helps customers and support teams understand what went wrong more quickly and take the right corrective action.
Original PR description
Currently, if you have an error in the response, we don't try to get the error message, we just give the type of error. Let us do that. Partial fw-port of https://github.com/odoo/odoo/commit/4bfe16cd45828a864a159b566d7983246e7e03a5 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an intermittent issue in the HR test flow where date selections could overlap because the calendar had not finished updating. The change makes the automated test wait for dates to be fully applied, improving test reliability without changing day-to-day user functionality.
Original PR description
There is a problem with version dates overlapping in the test tour. Delay was added to wait for the next month to load. task-6365181 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
Editing an existing message now keeps its original message category instead of automatically changing it to a comment. This prevents unintended changes to message records when users or portal visitors update message content.
Original PR description
Set message_type as 'comment' only when creating a new message. Updating content should not change it. Task-6368820 Part of Task-3704380
Marketing Automation now shows the correct reason when a participant leaves a campaign because they no longer match the campaign filter. This avoids misleading users with a “Record deleted” message when the underlying CRM record still exists.
Original PR description
`sync_participants` calls `action_set_unlink` on every participant whose record is no longer in the campaign domain, and `action_set_unlink` writes "Record deleted" on each scheduled trace. The…
`sync_participants` calls `action_set_unlink` on every participant whose record is no longer in the campaign domain, and `action_set_unlink` writes "Record deleted" on each scheduled trace. The removed bucket also contains records that still exist but no longer match the campaign filter, so the cancelled trace dialog shows "Record deleted" even when the record was only filtered out. In `sync_participants`, the to_remove participants are split between those whose record still exists in the database (filtered out by the campaign domain) and those whose record was actually deleted. `action_set_unlink` accepts an optional `trace_message` argument, defaulting to "Record deleted", and the filtered-out batch passes "Record no longer matches campaign filter" so the cancelled trace dialog reflects the real cause. Steps to reproduce: 1. Install Marketing Automation and CRM. 2. Open Marketing Automation, create a campaign on Lead with filter Stage = New. 3. Add a begin activity to the workflow. 4. Open CRM, create a Lead in the New stage. 5. Back in the campaign, click Generate Participants. 6. In the CRM pipeline, drag the Lead from New to Qualified. 7. Back in the campaign, click Generate Participants again. 8. Open the Participants smart button, click the participant for the moved Lead. 9. Click the cancelled activity in the workflow timeline. => The activity dialog shows "Error message: Record deleted" although the Lead still exists. Ticket [link](https://www.odoo.com/odoo/project/49/tasks/6251264) opw-6251264
Popover content now looks more consistent and easier to use in dark mode. Secondary buttons stand out as clickable actions, and forms inside popovers better match the surrounding popover background.
Original PR description
Before this commit, content like form & secondary button rendered inside popovers had inconsistent styling in dark mode: - secondary buttons did not stand out properly from the popover background, making them look like plain text blocks rather than actionable buttons; - forms rendered inside popovers (such as the multi-create popover) kept their default background, which visually clashed with the popover background. This commit fixes these issues by: - adding dedicated secondary button background colors for popovers, including hover state; - aligning form backgrounds inside popovers with the popover background. task-6249985
Twitter/X posts now save the reply count provided by the platform API. This lets users see comment activity alongside other engagement metrics, giving a more complete view of post performance.
Original PR description
Twitter/X tweet metrics returned by the API include the number of replies in the `public_metrics.reply_count` field. This commit stores that value on social stream posts so the comments count can be displayed alongside other engagement metrics. API Documentation: https://docs.x.com/x-api/fundamentals/metrics#post-metrics Task-6251172 Forward-Port-Of: odoo/enterprise#120182
The Belgian POS blackbox daily report now targets the report period more reliably when applying its customization. This reduces the risk of report display issues if the underlying report layout changes.
Original PR description
In this commit: - Use the report period id in the inherited xpath instead of relying on the template structure. Community PR : https://github.com/odoo/odoo/pull/251425 Task [link](https://www.odoo.com/odoo/project.task/5980266) task-5980266
Facebook GIFs now appear in the comments modal of the social feed instead of showing as missing content. Since Facebook provides a still image and video link rather than the original GIF, users see the preview image and can click it to open the animation on Facebook.
Original PR description
Bug === When opening the comments modal of the feed view, the GIF images are not visible. Technical ========= The API does not return the GIF, it only returns the MP4 and the JPG. So we show the fixed image, and when clicking on it, it opens the video on Facebook. Task-6241607 Forward-Port-Of: odoo/enterprise#122871 Forward-Port-Of: odoo/enterprise#118619
This update fixes an automated test for field service reports that could fail because subtasks were checked in an unpredictable order. Sorting the tasks makes the test reliable again, helping maintain confidence in future updates without changing user-facing behavior.
Original PR description
Steps to Reproduce --- 1. Install industry_fsm_report. 2. Run the test test_subtasks_worksheet_template_id_duplicate Issue --- The test fails because it relies on positional index assertions (child_ids[0] and child_ids[1]). Since child_ids is now returned with the ordering (id desc), the subtasks are processed in a different order during copy, causing the assertions to no longer match the expected records. Fix --- Sort both the original and duplicated subtask recordsets by name. task-5966684 Forward-Port-Of: odoo/enterprise#123035
A small compatibility issue was fixed in the Expense Stripe integration so it works correctly with newer Python warning behavior. This helps prevent avoidable failures in environments using Python 3.13 or later, with no expected change to normal user workflows.
Original PR description
This commit fixes a missing message for a deprecated decorator introduced in commit odoo/enterprise@19693fd465ef8aff26896be1a2ab27486019e05e. This was failing only when the standard `warnings.deprecated` implementation was used (provided natively in Python 3.13+). runbot-941402
A small safeguard was restored in Knowledge to prevent a crash when a popover closes at the same time another action is running. This improves reliability for automated flows and users interacting with Knowledge dropdowns, without changing visible functionality.
Original PR description
This commit is a followup of [1] which made some tours fail ramdomly because of a crash. The crash occurred when `this.activeEl` was falsy, presumably because the popover was already closed. This commit only prevents the issue by adding a safe guard (which was there before [1] though). This commit is actually a backport of [2], which already fixed the issue as of saas-19.2 [1] https://github.com/odoo/enterprise/pull/114168 [2] https://github.com/odoo/enterprise/pull/115483 Runbot error~242907
The POS will now show the standard IoT connection method by default instead of incorrectly showing WebRTC before any IoT action has happened. This avoids confusing users when their IoT image does not support WebRTC, while still allowing WebRTC to appear once it is actually used.
Original PR description
Before this commit, the connection status for the IoT HTTP service was defaulting to "webrtc", at least until the first IoT call is made. This would lead to WebRTC being shown as the connection type in the POS even when using a new IoT image that doesn't support it. After this commit, we use "longpolling" as the default status, which is supported by all IoT images. If WebRTC is being used, that status will be set after the first action is performed. task-6366366
Knowledge article PDF downloads now exclude on-screen navigation menus and avoid showing scrollbars in the printed output. This makes exported articles look cleaner and more professional, especially for longer content or when the browser is zoomed in.
Original PR description
The Download PDF option of an article prints the page with the browser. On screen, the article body is inside .o_scroll_view_lg, which scrolls when the content is longer than the screen:…
The Download PDF option of an article prints the page with the browser. On screen, the article body is inside .o_scroll_view_lg, which scrolls when the content is longer than the screen: https://github.com/odoo/enterprise/blob/79f8defa04476e1b939dc8bb5449a775137aed62/knowledge/static/src/scss/knowledge_views.scss#L170-L177 The print stylesheet used to force overflow: visible on every div, so this container did not scroll when printing. It also hid every child of the body except the action manager, so the navbar and open dropdowns were left out of the print. Commit https://github.com/odoo/enterprise/commit/69612c80ea0aec5ccf2c2857449da03e61273457 rewrote knowledge_print.scss to scope its rules to the Knowledge view and removed both rules. The scroll container now keeps its fixed height and its scrollbar when printing, so the scrollbar is drawn in the print preview and on every page of the PDF. The dropdown opened to reach Download PDF is printed on top of the article when it overlaps the page area, which happens when the browser is zoomed in. Add overflow: visible to the print rule of knowledge_print.scss that already targets .o_scroll_view and .o_scroll_view_lg with position: static. That rule exists to undo the screen positioning of the scroll containers when printing, so the overflow reset belongs there. Its selector is also more specific than the screen one, so the value applies without !important, like position: static already does. Restore the rule that hides the body children other than the action manager, scoped to the Knowledge view like the rest of the file since the print stylesheet is now loaded on every page. Before: <img width="497" height="703" alt="image" src="https://github.com/user-attachments/assets/44aa3366-3fc8-4382-8aa2-84625fa4b6d8" /> After: <img width="497" height="703" alt="image" src="https://github.com/user-attachments/assets/8b6eb2bc-37a3-4666-b871-0e6149c41fea" /> Steps to reproduce: 1. Open the Knowledge app and create an article 2. Paste enough text in the article to fill more than one PDF page 3. Zoom the browser to 200% 4. Click the three dots in the top right corner, then Download PDF 5. Check the print preview or the saved PDF => A scrollbar is drawn on the right edge of every page and the dropdown menu is printed on top of the article Ticket [link](https://www.odoo.com/odoo/project.task/6279174) opw-6279174
This update prevents delivery tracking from failing when EasyPost returns an empty tracker value. Users can continue working without seeing an error caused by incomplete carrier tracking data.
Original PR description
The PR https://github.com/odoo/enterprise/pull/111833 handled the specific case when the tracker data is missing from the EasyPost response, however in certain cases `tracker` key exists, but it has a `None` value, which leads to a traceback when trying to access the stock move:
```
File "/home/odoo/src/enterprise/18.0/delivery_easypost/models/easypost_request.py", line 392, in get_tracking_link
public_url = shipment.get('tracker', {}).get('public_url')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
```
This commit provides a fallback to avoid getting the error from the side of the user.
opw-6270242
Forward-Port-Of: odoo/enterprise#119400This fix keeps Knowledge page interactions working consistently after a browser behavior change in Chrome 150. It prevents internal scrolling actions from changing their expected result, reducing the risk of small interface issues for users on newer Chrome versions.
Original PR description
Since Chrome 150, scrolling methods like `scrollIntoView()` return a Promise instead of `undefined`. This commit adds block braces to ensure the action returns `undefined` and keeps the same behavior as before. Reference: - https://chromestatus.com/feature/5082138340491264 - https://chromium.googlesource.com/chromium/src/+/50f3e3d0a9bc02aad8b8161dbdd59046991dd2c7 runbot-941309 Forward-Port-Of: odoo/enterprise#123231 Forward-Port-Of: odoo/enterprise#123031
Grid views grouped by selection fields now show the user-friendly label in the list title when opening details from the cell magnifier. This prevents confusing technical values from appearing to users and makes grouped data easier to understand.
Original PR description
When grouping a grid view by a selection field and clicking on the cell magnifier, the list title showed the technical name (e.g. non_billable) instead of the display name (e.g. "Non Billable"). This commit adds a condition specifically for selection fields, ensuring that their display names are used. task-5980035 Forward-Port-Of: odoo/enterprise#122303 Forward-Port-Of: odoo/enterprise#120894
This update corrects a missing message text in the Stripe expense integration. It helps ensure users see the intended guidance or notification when working with Stripe-related expense categories.
Original PR description
Add missing string runbot-941402
The French Intrastat export wizard now opens only the journal entries related to missing required Intrastat values. This prevents users from being sent to all journal entries and makes it faster to correct export-blocking issues.
Original PR description
Steps to reproduce: 1. Have a French company with intrastat report module installed 2. Create and validate a bill to another EU country, without filling out at least one of the required intrastat fields 3. Go to the intrastat report, and export it as XML DEBWEB2 4. In the export wizard, click on the internal links on the warning messages Issues: 1. In the Intrastat report in French localization, when there are missing values detected in the export, the Export Wizard shows internal links that lead to every journal entries - instead of showing only the relevant entries. The warning banner on the report uses the action action_invalid_code_moves which has a domain to limit what is shown on the view form. However in the method _fill_value_errors there was no domain. opw-6215339 Forward-Port-Of: odoo/enterprise#117997
The point of sale payment screen now only runs India-specific invoice logic when the company is actually in India. This prevents avoidable errors in automated checks and keeps the invoice toggle working reliably for other countries.
Original PR description
Toggle invoice button was making a call in IN localization even when not in a IN country. This was causing an error in runbot 940146. This commit fixes the issue by checking if the country is IN before making the call. In `pos_settle_due` the method signature was not correct.
Fixes a crash that happened when users clicked the “Restrict to User” or “Restrict to Resources” fields on appointment slots. The broken filter was removed because it did not provide useful filtering and prevented the form from working correctly.
Original PR description
Clicking the "Restrict to User" or "Restrict to Resources" field on a slot crashed with:
invalid input syntax for type integer: "appointment_type_id.staff_user_ids"
The field domain was a quoted string instead of a list, so it was passed through as a literal value. Remove the domain: it never filtered anything and only broke the form.
opw-6349497
Forward-Port-Of: odoo/enterprise#122651Blank US checks now include the same stub lines as pre-printed checks, making printed checks easier to read and process. The check bottom layout was also adjusted so blank checks fit correctly on one page.
Original PR description
See individual commits. task-6359599 Forward-Port-Of: odoo/enterprise#123144
Fixed an issue where enabling FedEx return labels caused the original outgoing shipment to be treated like a return, leaving its reference field blank. Outbound FedEx labels now keep their reference information, making shipments easier to identify and track.
Original PR description
Issue ----- When setting the delivery method to create return labels aswell, the reference (`REF`) field is not present on the original outbound shipment. <img width="438" height="148" alt="image" src="https://github.com/user-attachments/assets/42acce7b-6177-4f8f-81d3-ad6dfd3e4bb2" /> Steps to reproduce ----- - Setup Fedex - Enable returns - Create a product (set weight) - Create a delivery for the product - Set carrier as Fedex - Validate delivery - Open the label > REF field is empty Cause ----- Fedex doesn't include references on the label of returns. When the option for returns is enabled, the outbound shipment is marked as a "Courtesy return". It doesn't make sense to specify a return reason on the original shipment. Expected outcome (after fix) ---- <img width="428" height="146" alt="image" src="https://github.com/user-attachments/assets/0d22e147-da90-4aa4-b3ca-2d996c7cc147" /> ----- Ticket: opw-6101620