Daily updates from Odoo
Tuesday, November 18, 2025
57 changes
8 changes
Resolved issues and error corrections
This change makes the web client more resilient when a browser no longer exposes the platform information it used to provide. By checking for the feature instead of assuming it is always present, Odoo avoids unnecessary errors and improves compatibility with modern browsers.
Original PR description
This commit uses "Feature detection" to avoid some error when the platform key is not available from navigator. > The platform property indicates the platform/OS the browser is running on. > Theoretically this information is useful for detecting the browser and serving code to work around browser-specific bugs or lack of feature support. However, this is unreliable and is not recommended for the reasons given in User-Agent reduction and Browser detection using the user agent. > Feature detection is a much more reliable strategy. https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Testing/Feature_detection task-4420689 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235958
The employee org chart button now opens the Hierarchy view on mobile devices instead of the Kanban view. This makes the org chart work as expected on smaller screens and helps users quickly see reporting lines.
Original PR description
Steps to Reproduce: - Open an employee record. - Set managers for the employee. - Open the employee’s form view on mobile. - Click org chart stat button. Before: - On mobile, the org chart button opened the Kanban view by default. After: - On mobile, the org chart button now opens the Hierarchy view by default. task-5245129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235228
This change prevents long product attribute values from spilling outside the product card in the catalog view. It keeps the layout tidy and consistent, so users can browse and select products without the screen becoming misaligned or harder to use.
Original PR description
Steps to reproduce: 1. Go to Products > Create a new product. 2. Add or create a new attribute with a long text value. 3. Go to Sales > Open any quotation. 4. In the sale order line, click on…
Steps to reproduce: 1. Go to Products > Create a new product. 2. Add or create a new attribute with a long text value. 3. Go to Sales > Open any quotation. 4. In the sale order line, click on "Catalog" and search for the created product. Issue: - The product image and attribute value text overflow outside the product card in the kanban view, causing layout misalignment and breaking the UI design. <img width="647" height="225" alt="image" src="https://github.com/user-attachments/assets/afc592bb-e25a-4d81-882b-0e7cc7ad1064" /> Cause: - The inner div containing the attribute text lacked overflow control, allowing long text to exceed the container width and pushing other elements. Solution: - Added the Bootstrap class `overflow-hidden` to the div element to ensure the image and text remain properly contained within the card layout. <img width="587" height="171" alt="image" src="https://github.com/user-attachments/assets/580ce1e5-42bd-4c2d-b6bf-14315759626d" /> opw-5222002 Forward-Port-Of: odoo/odoo#235680 Forward-Port-Of: odoo/odoo#235214
This change fixes an intermittent issue in the manufacturing work order tour by making the “Add Component” flow more stable. It also ensures the intended product appears first, which helps the process run consistently during tests and for users following the same steps.
Original PR description
The search in the "Add Component" dialog caused a re-render race, making the tour ``test_add_component_from_shop_foor_in_multi_step_manufacturing`` fail intermittently. This fix removes the search steps and marks the “Courage” product as favorite so it appears first in the catalog. runbot-227694 Forward-Port-Of: odoo/enterprise#92403
This change fixes an automated HR test that was failing because it did not set a contract start date before running date calculations. It ensures the test runs reliably on the targeted branch and helps prevent false failures in the validation pipeline.
Original PR description
The test_version_cron_update_no_fields from hr/tests/test_hr_employee.py didn't pass on runbot saas-18.4 due to the lack of explicitly defined start date of contract leading to an error when trying to substract False to a datetime object. I explicitly added a contract_date_start on the hr.version creation and modified the assigning line as the create_version function returns the new version object but doesn't attribute it to the employee directly. Runbot error: 233590 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects the website builder test setup so it works consistently in Firefox. It prevents a test-only behavior from blocking builder tests, which helps keep automated testing reliable across browsers.
Original PR description
In the website builder test suite, Chrome doesn't load the initial iframe (we load a dummy iframe instead) and never goes through `preparePublicRootReady` from the `WebsiteBuilderClientAction`. On the contrary, Firefox does load the initial iframe. We already have a partial fix for it in the html_builder test helpers (see `originalIframeLoaded`), but it stopped working at some point. As Firefox loads the iframe and goes through `preparePublicRootReady`, it re-assigns `this.publicRootReady` to a deferred that is never resolved in tests, which prevents any Hoot builder test from working. Solution: completely override `preparePublicRootReady` with an empty method in tests. task-5266212
When viewing a module’s information page, tabbed sections in the index.html file are now clickable and behave as expected. This brings the module info experience in line with the behavior users already see in the Odoo app store, making it easier to review content in organized sections.
Original PR description
* Before: if we have a block contain multiple tab in index.html file we can not click on it to switch between tab, unlike the behiviour in odoo apps store description https://github.com/user-attachments/assets/ab7f8213-2112-46e2-bb72-5e01cc1f7883 * After: Make the nav tabs work as it should be https://github.com/user-attachments/assets/12c05abc-84f6-495e-ae5b-b6eca4d81a92 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 Forward-Port-Of: odoo/odoo#186568
This update adjusts Swiss payroll transmission tests so they can run without requiring accounting-specific setup on the payslip structure. It makes the test data more self-contained and reliable, which helps prevent unrelated accounting settings from causing payroll test failures.
Original PR description
Forward-Port-Of: odoo/enterprise#99264 Forward-Port-Of: odoo/enterprise#98672
11 changes
Resolved issues and error corrections
This update avoids a browser-side error when the system no longer provides the platform information the app previously checked. It makes the web client more resilient across browsers and devices by using a safer way to detect features instead of relying on browser-identification data.
Original PR description
This commit uses "Feature detection" to avoid some error when the platform key is not available from navigator. > The platform property indicates the platform/OS the browser is running on. > Theoretically this information is useful for detecting the browser and serving code to work around browser-specific bugs or lack of feature support. However, this is unreliable and is not recommended for the reasons given in User-Agent reduction and Browser detection using the user agent. > Feature detection is a much more reliable strategy. https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Testing/Feature_detection task-4420689 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235958
This fix corrects where two Indonesian QRIS configuration fields are inserted in the bank form, so they no longer end up inside a hidden section. As a result, users can now see and fill in the QRIS API key and MID when configuring local payment settings.
Original PR description
**Description of the issue/feature this PR addresses:** This issue occurs because the XPath targeting the `currency_id` field is placed inside a `<div>` that becomes invisible under certain conditions. The `view_partner_bank_form_inherit_hr` view is loaded first due to its sequence, and the `l10n_id` view is applied afterward, causing the QRIS fields to be inserted into that hidden `<div>` from `view_partner_bank_form_inherit_hr`. **Current behavior before PR:** The fields l10n_id_qris_api_key and l10n_id_qris_mid are not visible. **Desired behavior after PR is merged:** The fields l10n_id_qris_api_key and l10n_id_qris_mid are visible by changing XPath target Task: [5247678](https://www.odoo.com/odoo/project.task/5247678) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235949
This change makes the Swiss payroll transmission tests independent from accounting setup details, so they no longer rely on a specific journal being present on the payroll structure. It helps keep automated tests stable and reduces the risk of unrelated configuration causing failures.
Original PR description
Forward-Port-Of: odoo/enterprise#99264 Forward-Port-Of: odoo/enterprise#98672
This change prevents the voice system from trying to reconnect when a user leaves the page normally. It avoids a conflict between two logout-related network requests, which could otherwise cause errors during sign-out or page unload.
Original PR description
On page unload, two conflicting things happen: - A REGISTER request with expires=0 is sent to invalidate the registration - The WebSocket disconnects, triggering the reconnection mechanism that attempts to reissue a registration These two concurrent and conflicting REGISTER requests result in the following error: > RequestPendingError: REGISTER request already in progress, waiting for final response This commit prevents the reconnection mechanism from occurring in the event of a "natural" disconnection, such as one triggered by a page unload. This way, the two conflicting REGISTER requests aren't sent on page unload. [Task-5261940](https://www.odoo.com/odoo/project/5778/tasks/5261940) Forward-Port-Of: odoo/enterprise#99560 Forward-Port-Of: odoo/enterprise#99376
This change fixes an intermittent failure in the manufacturing work order tour. It removes a search step that could cause timing issues and makes the target product appear first, so the test runs more reliably.
Original PR description
The search in the "Add Component" dialog caused a re-render race, making the tour ``test_add_component_from_shop_foor_in_multi_step_manufacturing`` fail intermittently. This fix removes the search steps and marks the “Courage” product as favorite so it appears first in the catalog. runbot-227694 Forward-Port-Of: odoo/enterprise#92403
This update restores the ability to delete highlighted digits in the VoIP softphone when the selection starts at the beginning of the input. It keeps the safety checks that prevent unwanted cursor issues while making backspace work as expected again.
Original PR description
This commit fixes a regression introduced in commit [1] prevented deleting when a selection began at index 0; extend the guard so the numpad (keypad) backspace still removes the highlighted characters while keeping the cursor-safety logic. [1]: https://github.com/odoo/enterprise/commit/73b01fa5e1f56d4ab71d67760b15942fb2fa0e31 task-5217676 Forward-Port-Of: odoo/enterprise#99515 Forward-Port-Of: odoo/enterprise#99358
The test suite was updated so a payment-related test only runs when the Accountant module is available. This avoids false failures in setups where that module is not installed and the tested behavior is not supported.
Original PR description
Some new tests weren't checking if the accountant module were installed. Without that module installed, those tests make no sense as the behaviour expected (possibility to create payments without creating an entry) is not present unless `accountant` is installed
This change restores tab switching in module information pages when the index.html file contains multiple tabs. It makes the behavior consistent with the Odoo Apps Store description view, so users can navigate the content as expected.
Original PR description
* Before: if we have a block contain multiple tab in index.html file we can not click on it to switch between tab, unlike the behiviour in odoo apps store description https://github.com/user-attachments/assets/ab7f8213-2112-46e2-bb72-5e01cc1f7883 * After: Make the nav tabs work as it should be https://github.com/user-attachments/assets/12c05abc-84f6-495e-ae5b-b6eca4d81a92 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 Forward-Port-Of: odoo/odoo#186568
Vendor batch payments will now use the correct sequence number when they are created and validated. This prevents vendor batches from being labeled with the wrong incoming-payment number, which could cause confusion and make tracking harder.
Original PR description
Currently when creating a vendor batch payment, the system may incorrectly use the inbound batch payment sequence to generate the batch name Steps to reproduce: - Create a Vendor payment. - Create a Vendor batch payment, add the payment, validate it. Issue: Name has been set using the incoming batch payment sequence This occurs because `batch_type` is set to readonly when a payment is added to the list. As result, the current batch type is never sent to the backend that will use the default 'inbound'. opw-5128426 Forward-Port-Of: odoo/enterprise#99570
Fixed an issue where the expand/collapse button in email-style messages could appear without its icon. This makes long quoted emails easier to read and interact with inside the chatter and portal views.
Original PR description
Before this commit, when a message is of type "email" and contains parts are in foldable with more/less (like `<quote>`), the icon of the button for fold/unfold is missing. This happens because the icon is `.oi` and requires `odoo_ui_icons`. Message of type "email" have their content inside a shadow DOM, because we want to preserve the style of email inside the web client, at least in white theme. Shadow-DOM prevents the parent document to pass `odoo_ui_icons` thus the Shadow-DOM could not apply expected style on `.oi` icons. This commit fixes the issue by passing the required CSS as stylesheet to the shadow DOM, so that `.oi` icons are working inside the shadow DOM of message content of type "email".
This fix ensures mail records correctly update when they are deleted or restored. It improves the reliability of the messaging interface by keeping record status in sync with the latest changes.
Original PR description
The `exists` function of mail records is not reactive. Indeed, it uses a symbol, stored on the proxy internal field which is not observed. This commit fixes the issue by storing it on the record and ensuring we write on the full proxy when the record is deleted. 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 Forward-Port-Of: odoo/odoo#236159 Forward-Port-Of: odoo/odoo#236042
3 changes
Resolved issues and error corrections
This change makes the manufacturing test flow more reliable by removing a search step that could refresh the screen at the wrong moment. It also ensures the intended product appears first in the catalog, reducing intermittent failures in the add-component process.
Original PR description
The search in the "Add Component" dialog caused a re-render race, making the tour ``test_add_component_from_shop_foor_in_multi_step_manufacturing`` fail intermittently. This fix removes the search steps and marks the “Courage” product as favorite so it appears first in the catalog. runbot-227694 Forward-Port-Of: odoo/enterprise#92403
This change prevents the phone system from trying to register twice when a user leaves a page. It avoids an error during page unload, making sign-out and navigation smoother and more reliable.
Original PR description
On page unload, two conflicting things happen: - A REGISTER request with expires=0 is sent to invalidate the registration - The WebSocket disconnects, triggering the reconnection mechanism that attempts to reissue a registration These two concurrent and conflicting REGISTER requests result in the following error: > RequestPendingError: REGISTER request already in progress, waiting for final response This commit prevents the reconnection mechanism from occurring in the event of a "natural" disconnection, such as one triggered by a page unload. This way, the two conflicting REGISTER requests aren't sent on page unload. [Task-5261940](https://www.odoo.com/odoo/project/5778/tasks/5261940) Forward-Port-Of: odoo/enterprise#99560 Forward-Port-Of: odoo/enterprise#99376
Fixes an issue where locking a document in the preview did not refresh the available actions in the menu. Users will now see the correct options right away after changing a document’s lock status, avoiding confusion and inconsistent behavior.
Original PR description
Steps to reproduce =================== - Preview any documents. - Click on the actions menu and lock the document. - Now go to the actions menu again. => The set of options is not updated. Technical =========== - The action menu, which we are using inside the file previewer, is passed explicitly inside the FileViewer component of the document. We were using the `record.load()`, which will not have any effect on the FileViewer component and that's why the action menu was not updating. After this commit ================== - Used the `this._notifyChange()` method, which closes the preview and loads the model to align with the same behaviour as other actions. Task-4988116
9 changes
Resolved issues and error corrections
The OCR process will no longer automatically change a customer invoice into a sale receipt when the Sale Receipt option is not enabled. This prevents documents from being categorized into a disabled workflow and helps keep invoice processing aligned with company settings.
Original PR description
If the "Sale Receipt" setting isn't enabled, the OCR should never automatically switch a customer invoice to a sale receipt. task-[5265382](https://www.odoo.com/odoo/project.task/5265382) Forward-Port-Of: odoo/enterprise#99522
This fix ensures automated tests properly finish drag-and-drop actions before ending. It helps prevent false test failures and supports more stable quality checks for scheduling-related features.
Original PR description
Since drag sequences are automatically canceled at the end of tests, 'cancel' or 'drop' calls should be properly awaited before the end of a test. This commit ensures that these actions are properly finished before a test ends. Community: https://github.com/odoo/odoo/pull/235359 Forward-Port-Of: odoo/enterprise#99634 Forward-Port-Of: odoo/enterprise#99369
This fix restores the ability to add reactions to messages when using Discuss on a mobile device. It improves day-to-day collaboration by making quick responses work consistently across desktop and mobile.
Original PR description
Task-4607436 Task-5261880 https://github.com/odoo/odoo/pull/235852 Forward-Port-Of: odoo/enterprise#99588
VoIP contact search now avoids checking mobile phone matches until at least three characters are entered. This prevents error messages from appearing while users type the first few digits or letters, making the search experience smoother.
Original PR description
`phone_mobile_search` doesn't allow you to search for less than 3 characters. This commit excludes `phone_mobile_search` from the search domain when there are less than 3 characters. This avoids triggering an UserError on the first characters typed. Forward-Port-Of: odoo/enterprise#99626 Forward-Port-Of: odoo/enterprise#99548
Fixes an issue where switching variants on subscription products in the online shop could trigger an error when no pricing was available. The system now handles missing pricing safely, helping customers browse subscription product options without interruption.
Original PR description
Step to reproduce: - install website_sale_subscription - create a product, add few variants and tick 'Subscriptions' option. - open that product from /shop - toggle between variants Cause: - In case the pricing is not present, 'False' is passed(not an iterable) - `_onChangeCombinationSubscription` expects a iterable, causing traceback Fix: - we pass empty list instead of False opw-5241612 Forward-Port-Of: odoo/enterprise#99160
Studio no longer crashes when users edit JSON-based fields such as analytic distribution. The update lets these fields handle placeholder settings correctly, improving reliability when customizing forms.
Original PR description
When trying to edit the `analytic_distribution` field using Studio, the following traceback occurred: `Caused by: TypeError: Cannot read properties of undefined (reading 'subOptions')` This happened because the new option `placeholder_field` was [introduced](https://github.com/odoo/odoo/commit/6620ebbd184de6f106fceb4427a081b61d97296a) for dynamic placeholders in widget. However, there was no support declared for `placeholder` inside the `FIELD_TYPE_ATTRIBUTES` definition for the `json` field type. This commit adds `EDITABLE_FIELD_ATTRIBUTES.placeholder` to the `json` field type, allowing widgets on JSON fields to correctly handle `placeholder_field` options without causing a Studio crash. opw - 5180896 upg - 3249816 Forward-Port-Of: odoo/enterprise#98526
The VoIP keypad now keeps numbers inserted in the intended place when users tap digits after moving the cursor. This prevents dialing errors on Android when the phone keyboard is hidden and the input loses focus.
Original PR description
Keypad input now reads selection from the persisted model whenever the DOM selection isn't trustworthy, particularly on Android where the input blurs to hide the keyboard, so digits typed at any cursor location stay in place. task-5241464
The appointment booking error message now clearly includes the appointment type name when there are not enough seats available. This makes the issue easier for users to understand and resolve when saving appointments without resources.
Original PR description
Currently, when creating a new appointment with a specified number of people but no resources, saving the record triggers a UserError that does not display the appointment type name. Issue: 2 seats are missing to be able to book the appointment.type(1,): Table (30) <img width="1813" height="776" alt="image" src="https://github.com/user-attachments/assets/f87f45de-3552-47bb-b34c-fcc06cea425f" /> Solution: 2 seats are missing to be able to book the Table: Table (30) <img width="1769" height="905" alt="image" src="https://github.com/user-attachments/assets/04188071-be67-4500-b720-039ee7a27c2e" /> Forward-Port-Of: odoo/enterprise#99646
This fixes an issue where portal users could see an error when sending an attachment in a live chat with an agent. The change ensures the user availability field is properly set, helping chats continue smoothly without interruption.
Original PR description
Bug === As portal, open a live chat with an agent, and try to send an attachment. An error will be raised because of `offline_since` (which is not initialized in the compute). Task-4687269
17 changes
Resolved issues and error corrections
This update prevents an error when customers switch between product variants on subscription products in the shop. If no pricing is available, the system now sends an empty list instead of a missing value, avoiding a traceback and keeping the product page working smoothly.
Original PR description
Step to reproduce: - install website_sale_subscription - create a product, add few variants and tick 'Subscriptions' option. - open that product from /shop - toggle between variants Cause: - In case the pricing is not present, 'False' is passed(not an iterable) - `_onChangeCombinationSubscription` expects a iterable, causing traceback Fix: - we pass empty list instead of False opw-5241612 Forward-Port-Of: odoo/enterprise#99160
This change makes the mobile message reaction test more stable by waiting for the full conversation to finish loading before checking reactions. It also corrects how reaction updates are stored so user reactions are handled consistently instead of being misread as replacements.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/235852 Test was recently unskipped for test coverage of the fix, but there were non-deterministic failures of this test on runbot: ``` Failed to find 1…
Follow-up of https://github.com/odoo/odoo/pull/235852
Test was recently unskipped for test coverage of the fix, but there were non-deterministic failures of this test on runbot:
```
Failed to find 1 of ".o-mail-MessageReaction:contains('😀')" (Timeout of 3 seconds). Found 0 instead.
```
This happens because conversation has a single message, and the last message is fetched twice: once at init_messaging of the pinned conversation, and another one when loading the message list. The test was awaiting presence of message before adding reactions, but while adding a reaction it's possible to have 2nd fetch of message overwriting the message reactions from a prior `ADD`, leading to failed assertion below that there's no message reactions.
This commit fixes the issue by awaiting the whole message list render thanks to awaiting the 2 messages on UI and not just the 1st one.
Also the to_store format of message reaction was poorly formatted, which lead to "ADD" command being treated as a "REPLACE" instead. This commit also fixes this issue, as the client-side code of message reaction is designed to receive "ADD" commands.This update makes the field selector in spreadsheet pivot side panels respect debug mode. As a result, users can search and see technical field names when working in debug mode, which helps with configuration and troubleshooting.
Original PR description
Steps to reproduce: - Activate debug mode - Insert a pivot in a spreadsheet - In the side panel, click on "Add column" => the component is not in debug mode, so the technical name cannot be searched and is not displayed Task: 5264589
This fix ensures transparent PNG images in the Website image gallery display with a white thumbnail background instead of a black square. It improves the visual appearance of galleries and keeps page editing results consistent and polished.
Original PR description
Steps to reproduce: - Go to Website and click Edit. - Drag and drop an "Image Gallery" snippet onto the page. - Enable the "Squared Miniatures" option. - Add a PNG image with a transparent background to the gallery. Before this commit, thumbnails had a black square background. After this commit, thumbnails have a white background. task-5189020
This update fixes a misleading error shown in Point of Sale when communication with the Blackbox times out. Users will now see a more accurate message, which reduces confusion and helps support teams diagnose the real issue faster.
Original PR description
Before this commit, in the case when there is a timeout communicating with the Blackbox in the POS, an incorrect error message was shown stating that "The IoT Box is connected but the Fiscal Data Module isn't". This message should only be shown when we receive a reply from the IoT box, but it tells us it cannot find the Blackbox. <img width="695" height="240" alt="image" src="https://github.com/user-attachments/assets/ec011f4a-42dd-4ffd-8741-350032897471" /> Forward-Port-Of: odoo/enterprise#99652
This change makes the manufacturing training/test flow more reliable by removing a step that could cause the screen to refresh at the wrong time. It also ensures the intended product appears first, preventing intermittent failures during the add-component process.
Original PR description
The search in the "Add Component" dialog caused a re-render race, making the tour ``test_add_component_from_shop_foor_in_multi_step_manufacturing`` fail intermittently. This fix removes the search steps and marks the “Courage” product as favorite so it appears first in the catalog. runbot-227694 Forward-Port-Of: odoo/enterprise#92403
This change prevents the VOIP system from trying to reconnect when a user leaves the page normally. It avoids a conflict between two registration actions, which could otherwise trigger errors during page unload.
Original PR description
On page unload, two conflicting things happen: - A REGISTER request with expires=0 is sent to invalidate the registration - The WebSocket disconnects, triggering the reconnection mechanism that attempts to reissue a registration These two concurrent and conflicting REGISTER requests result in the following error: > RequestPendingError: REGISTER request already in progress, waiting for final response This commit prevents the reconnection mechanism from occurring in the event of a "natural" disconnection, such as one triggered by a page unload. This way, the two conflicting REGISTER requests aren't sent on page unload. [Task-5261940](https://www.odoo.com/odoo/project/5778/tasks/5261940) Forward-Port-Of: odoo/enterprise#99560 Forward-Port-Of: odoo/enterprise#99376
Draft payslips could raise an error when their period date was cleared. This fix lets users remove the date safely and includes an automated test to prevent the issue from coming back.
Original PR description
When removing the date in a draft payslip an exception was raised. This was fixed and a test was added to check the flow. Related to odoo/odoo#231247 task-5159666 Forward-Port-Of: odoo/enterprise#97013
The invoice form now avoids showing an empty section that could shift labels and fields out of alignment. This keeps the layout consistent for users in the affected accounting setup, especially when currency options are not available.
Original PR description
### Issue: In a certain case, the div `journal_div` has nothing inside and is displayed. This causes the form view to be offsetted. ### Steps to reproduce: - Install "l10n_ar" and switch to an…
### Issue:
In a certain case, the div `journal_div` has nothing inside and is displayed. This causes the form view to be offsetted.
### Steps to reproduce:
- Install "l10n_ar" and switch to an Argentinian company
- The user must not have the group `base.group_multi_currency`
- Settings > Currencies and deactivate the USD
- Make sure you only have one Sales journal
- Create an invoice
- The field 'Result' is offsetted
### Cause:
The div `journal_div` is constructed like this:
```xml
<div name="journal_div" class="d-flex">
<field name="journal_id"
invisible="not show_journal"/>
<div name="currency_div"
groups="base.group_multi_currency">
...
</div>
</div>
```
In the case `show_journal = False` and the user doesn't have the group `base.group_multi_currency`, then `journal_div` is empty, but it's still displayed.
It will take the place of a label, this means that the next field label will be in the "input" column and its input in the "label" column.
### Solution:
We need to not display the `div` when `show_journal = False` AND the user doesn't have the group `base.group_multi_currency`. This is not possible.
A possible fix would be to add a non-stored computed field just like `show_journal` to show or not the div.
This commit chose to fix this with CSS: do not display `journal_div` if it's empty. This is also more secure in the case where a customization added things in the div.
Before this commit:
<img width="1048" height="273" alt="image" src="https://github.com/user-attachments/assets/04062527-ee8d-463c-9768-72f0680c922d" />
After this commit:
<img width="1052" height="221" alt="image" src="https://github.com/user-attachments/assets/30b4f169-f4c0-485f-b895-b8d33bfd1fa6" />
opw-5221931The Due button on a partner record will now stay visible whenever the partner has at least one invoice, even if their balance is currently zero. This makes it easier for users to quickly access customer financial information and statements without the shortcut disappearing unexpectedly.
Original PR description
The `Due Button` on `res.partner` is a convenient shortcut to access the partner’s current financial situation, especially the Customer Statement report. Even if the partner has no outstanding balance, the shortcut remains useful. So in this commit, we update the visibility logic of the `Due Button` so it appears as long as the partner has at least one `invoice (in/out)` linked to them. This means the button will remain visible even when the total `due amount is `zero`, ensuring the shortcut is always accessible. Task-5264512
The employee and contract form now makes it clear that leaving the pay category field empty means the employee will not be included in pay runs. This helps avoid confusion and reduces the risk of employees being unintentionally left out of payroll processing.
Original PR description
The pay run field is now optional on employee profiles and contract templates, and therefore such employees are not included in pay runs. This commit makes the placeholder for the field indicate that the employee will be excluded from pay runs. Task-5237800
This change makes server-side call disconnections behave the same way regardless of how they happen. Users will now get a log entry and a notification every time, which makes the experience more predictable and easier to understand.
Original PR description
Before this commit, when a rtc session was removed by the server, the behavior was different depending on the notification flow, this commit makes it so that server disconnections are treated the same way, with a log entry and a notification.
This update fixes a few display issues in the Appointment app. It moves the guest option to a more natural position in the booking form and corrects the visibility of the “Add Closing Day(s)” button so it appears only where it should, reducing confusion for users managing bookings and availability.
Original PR description
Purpose ======= Fix various interface issues related to the appointment app following the Testing Days for v19. Specification =========== - Placing add guests button after registration questions on…
Purpose ======= Fix various interface issues related to the appointment app following the Testing Days for v19. Specification =========== - Placing add guests button after registration questions on front-end. Following the addition of a phone question type (odoo/enterprise#82973), the user phone input at registration is in the list of questions and not at the top of the form in the base user information section anymore. The Add Guests feature can thus be displayed before the phone number which seems a bit odd. Fixing the issue by moving the Add Guests feature at the end of the form, after the list of questions. - Fix the "Add Closing Day(s)" button visibility. The button should be visible on every resource views (gantt, calendar, list), and should be invisible on every staff booking views (gantt, calendar, list). Currently, the button is visible on the list view for staff bookings, it should not. The button is also not present on the calendar view for resource bookings, it should be. Task-5079021
This change limits the width of thread previews shown under messages in the inbox and discussion views. It makes the message itself stand out more clearly and keeps long previews from taking over the layout.
Original PR description
Before this commit, thread preview below message in message list may took lots of width. This is a problem because the thread preview could be more visible than the message itself. This commit fixes the issue by having a max-width on the thread preview from a message, similar max-width as a link preview. Before <img width="903" height="723" alt="Screenshot 2025-11-18 at 16 10 56" src="https://github.com/user-attachments/assets/1b493eb9-6fe9-4150-bc77-a524337286f7" /> After <img width="902" height="738" alt="Screenshot 2025-11-18 at 16 21 32" src="https://github.com/user-attachments/assets/757c81df-3aec-4d96-a8ab-3bfccef13157" />
This update adjusts how check messages are shown so they appear on a single, cleaner line instead of wrapping awkwardly. It makes the report interface look more consistent and easier to read, without changing the underlying business logic.
Original PR description
Multi-line messages for checks are displayed on multiples lines starting in 19.0. This is ugly and we fix this so every checks have a similar look. Before: <img width="368" height="103" alt="image" src="https://github.com/user-attachments/assets/67bb84f9-ac61-4c0d-84ba-b8a886763546" /> After: <img width="337" height="74" alt="image" src="https://github.com/user-attachments/assets/4f45b368-cf60-4b46-b10a-dd1b75ceb9f9" />
Users can now customize the size style of multiple mega menus and have those choices saved correctly. Previously, only the first mega menu kept its style change, which could lead to inconsistent website design after saving.
Original PR description
The implementation of `save_handlers` for mega menus only saved the classes of the first mega menu found. Thus, customization of the "Size" of the second menu was not saved. This commit change the handler to select all mega menus. Steps to reproduce: - Open website builder - Create multiple mega menus - Set "Size" to "Narrow" on each mega menu - Save - Bug: Only the first mega menu is narrow task-5248206 Fixes #234222 Forward-Port-Of: odoo/odoo#234911
This update fixes a bug that prevented file uploads from working after users interacted with elements inside shadow-root components. It improves the reliability of automated UI tests and other interactions in screens that use this web structure.
Original PR description
Before this commit, using 'setInputFile' after interacting with an element contained in any shadow root would not work ("no input has been interacted with" error).
This commit allows the listeners responsible for detecting clicks/focus on file inputs to handle the shadow root cases properly.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#2359617 changes
Resolved issues and error corrections
This update makes Odoo’s Mollie payment options match what a new Mollie account actually supports by default. It also removes Sofort from the available linked methods because Mollie is discontinuing that payment option, helping prevent unsupported or unavailable payment choices from showing up to users.
Original PR description
**[FIX] payment_mollie: remove iDEAL from the default payment methods** When a new Mollie account is created, it only accepts card payments out of the box. In Odoo, both the Cards and iDEAL payment methods were activated by default upon enabling the payment provider, while iDEAL required manual activation from Mollie's dashboard. --- **[FIX] payment_mollie: remove Sofort from the linked payment methods** See https://help.mollie.com/hc/en-us/articles/20904206772626-SOFORT-Deprecation-30-September-2024ard. Forward-Port-Of: odoo/odoo#236044
This fix makes the event dot easier to see when an event is displayed with a hatched style. It also ensures the correct styling is applied consistently in views like Planning, even when the Calendar app is not installed.
Original PR description
When pills are hatched (unpublished event) in the calendar view (eg. planning) the `o_event_dot` is barely visible. Additionally the styling to display the dot as outlined on hatched event is wrongly scoped in `/calendar` with the calendar status styling. It should be in the view instead. Otherwise, for the planning module which doesn't depend on calendar, the styling is not applied if calendar is not installed, rendering the filled dot. task-3916768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235286
The import screen now shows the same formatting options for CSV files whether the file extension is written as .csv or .CSV. This removes an inconsistency that could confuse users during file imports, while keeping the import itself working as before.
Original PR description
Before this fix, the import side panel displayed the formatting options only when the uploaded file had a lowercase .csv extension. Files with an uppercase .CSV extension could still be imported but did not show the format selection section, leading to inconsistent behavior. This commit updates the condition to perform a case-insensitive comparison on the file extension. Task-5145031 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235061
This fix restores clickable tab navigation in module information pages when the page contains multiple tabs. It brings the behavior in line with the app store description view, making it easier for users to browse module details.
Original PR description
* Before: if we have a block contain multiple tab in index.html file we can not click on it to switch between tab, unlike the behiviour in odoo apps store description https://github.com/user-attachments/assets/ab7f8213-2112-46e2-bb72-5e01cc1f7883 * After: Make the nav tabs work as it should be https://github.com/user-attachments/assets/12c05abc-84f6-495e-ae5b-b6eca4d81a92 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 Forward-Port-Of: odoo/odoo#186568
This update corrects a testing issue in Point of Sale localization flows so automated checks run reliably again. It helps prevent failed builds and makes sure country-specific POS features continue to be validated properly.
Original PR description
Fix runbot issue runbot-233183
This update removes a step that closed the Point of Sale during an automated localization tour because that action was unstable and often caused failures. The result is a more reliable and faster test process, which helps reduce interruptions during development and validation.
Original PR description
backport of : https://github.com/odoo/odoo/pull/231884 Remove the closing of the PoS in the tour as it is really unstable and fail a lot. It's mostly due to the fact that the PoS take a long time to close with a lost of modules installed. This will also make the tour faster. runbot-233183
This change comments out a small part of the US payroll module to avoid a failing automated test. It helps keep the test suite stable without changing the business behavior seen by users.
2 changes
Resolved issues and error corrections
This fix restores clickable tabs in module information pages, so users can move between sections in an index.html description just like they can in the Odoo Apps Store. It improves the browsing experience and removes a small but frustrating display issue.
Original PR description
* Before: if we have a block contain multiple tab in index.html file we can not click on it to switch between tab, unlike the behiviour in odoo apps store description * After: Make the nav tabs work as it should be 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 fix removes empty space that appeared in Delivery and Batch Transfer lists and details. It makes the screens look cleaner and prevents unused columns from taking up room when their related information is hidden.
Original PR description
Issue: Blank, unused columns showed in Deliveries and Batch Transfers. Repro Steps: Open Deliveries and see a right-side gap . Open Batch Transfers list and see a right-side gap. Open a Batch Transfer details shows left-side gap. Cause: Rows were hidden, but their table columns stayed visible, so space was still reserved. Fix: Deliveries: hide the rescheduling popover column and the activity indicator column at the column level. Batch Transfers list: hide the activity indicator column at the column level. Batch Transfer Detailed: hide the three quality-check button columns at the column level when the batch has no checks to do (keep row-level visibility when shown). opw-5031933