Thursday, September 25, 2025
24 changes · master
Resolved issues and error corrections
Opening Inventory Valuation no longer fails when a company has no valuation account configured. This prevents an error screen and lets users continue working while configuration is incomplete.
Original PR description
Issue before this commit: ========================= Currently, when opening the Inventory Valuation menu without setting a Valuation Account in the settings, the system raises the error: `Cannot read…
Issue before this commit: ========================= Currently, when opening the Inventory Valuation menu without setting a Valuation Account in the settings, the system raises the error: `Cannot read properties of undefined (reading 'display_name').` Steps to Reproduce: ========================= - Install the account and stock_account modules. - Switch to another company where the default Valuation Account is not set. - Create a warehouse and a product with a cost. - Create and validate a receipt for that product. - Open the Inventory Valuation menu → traceback occurs. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/224479), a new valuation report was added. At the [mentioned line](https://github.com/odoo/odoo/pull/224479/files#diff-8afed36c6f80919b83630d39c78510289ec8fecc632735d26824a84a517a1b7dR60), it's assumes the account always exists and attempts to access display_name directly, leading to the error. With This Commit: ========================= We ensure that display_name is only accessed if the account exists, preventing the traceback. Forward-Port-Of: odoo/odoo#227470
This fixes an issue in the stock forecast view where merged cells on the first line could cause an error instead of showing the forecast details. Users can now view affected product forecasts reliably when sales orders create merged forecast rows.
Original PR description
Ensure correct initialization of lastIndex and mergeLinesData to also cover the case where line 0 is part of a merge. Current behavior before PR: - `Caused by: TypeError: this.mergesLinesData[lastIndex] is undefined` - `TypeError: Cannot read properties of undefined (reading 'rowcount')` Desired behavior after PR is merged: lastIndex and mergesLinesData[lastIndex] are correctly initialized on first line too To reproduce: On a product with OnHand quantity, create multiple SO so that the first cell of the first lines are merged. <img width="1896" height="230" alt="image" src="https://github.com/user-attachments/assets/d8eb550a-e9c8-4dbf-ade7-046f83b370ae" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227437
CRM salesperson selection now shows the chosen user name without extra team leader markup appearing as plain text. Team leader indicators remain available in the suggestion list, improving clarity while keeping the selected field clean.
Original PR description
When suggesting records, the `Many2XAutocomplete` component relies on the `web_name_search` method to fetch data. This method returns a dictionary with two keys: `display_name` and…
When suggesting records, the `Many2XAutocomplete` component relies on the `web_name_search` method to fetch data. This method returns a dictionary with two keys: `display_name` and `__formatted_display_name`. The latter is used as the label for suggestions, while `display_name` is used when selecting a record or as a fallback if no formatted value is available. In the `many2one_avatar_leader_user` field, the suggestions currently include the `--(Team Leader)--` markup. However, this markup is also shown in the selected record, where it appears as raw text since markups are not rendered in that context. Step to reproduce the issue: 1. Open a lead on CRM 2. Click on the "Salesperson" field 3. Select "Mitchell Admin" 4. Click on the "Salesperson" field 5. Select "Mitchell Admin" => The field displays `Mitchell Admin --(Team Leader)--` TO BE: The field should display `Mitchell Admin` without markup. To fix this, we will update the `_compute_display_name` override on the `res.users` model in CRM so that markups are added only when the `formatted_display_name` context key is set to `True`. Currently, both `display_name` and `__formatted_display_name` are computed through `_compute_display_name`. The difference is that the `web_name_search` method explicitly sets the context key `formatted_display_name` to `True` when computing `__formatted_display_name`. With this commit, the `_compute_display_name` method will add the `--(Team Leader)--` markup only when computing `__formatted_display_name`. The widget `many2one_avatar_leader_user` should then not show any markup when selecting a record from the suggestions. Task-5093192 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227539
Date, datetime, and date range fields now correctly apply values provided by the system, even when the value matches the original entry. This prevents forms from showing an outdated typed value when business rules or automatic updates re-apply a date.
Original PR description
This commit allows date (i.e. date, datetime & daterange) fields to apply a value from the props (e.g. coming from an `onchange`), even if that value is the same as the initial one. Before this commit, it was not possible due to the fact that the date service responsible for the reactivity of the field was updating the input in an incorrect order, causing the field to display the 'input' value, and not the one enforced by the props. Task 4978896 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#227321 Forward-Port-Of: odoo/odoo#225841
This change adds test coverage to ensure quantity-based pricelist discounts continue to display correctly on eCommerce product pages. It helps prevent regressions where customers might not see the discounted price when changing quantities online.
Original PR description
Manual forward-port of the test added in f9c4001d7df3, to prevent regression of pricelist discounts price not getting displayed in eCommerce. opw-5037669 Forward-Port-Of: odoo/odoo#226949
This fix restores a missing database index used by inventory rules. It helps keep upgrade logs accurate and avoids unnecessary confusion during system upgrades, with no expected change to day-to-day user workflows.
Original PR description
due to conflict on this forward port https://github.com/odoo/odoo/pull/113045 ``index=True`` was removed according to this pr https://github.com/odoo/odoo/pull/90531 So, adding it back during upgrade it shows misleading logs ``` 2025-08-26 22:19:25,039 23 INFO db_3112946 odoo.schema: Keep unexpected index stock_rule_company_id_index on table stock_rule ``` opw-5052223 upg-3112946 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226268
This fixes a missing style file in the HTML builder so section content is properly hidden while users position a background image. The change restores the intended editing experience and prevents confusing visual overlap during background adjustments.
Original PR description
__Current behavior before commit:__ [A PR] renamed the `.inside.*` files to `.edit.*`. However [the forward-port] of another PR introduced a new `.inside.*` file (i.e. `background_position_overlay.inside.scss`) but it was merged after the former one. This SCSS file is used to make the content of the section invisible when positioning its background image. But it is currently not included in the asset. __Description of the fix:__ Rename `background_position_overlay.inside.scss` to `background_position_overlay.edit.scss` to include it in `html_builder.assets_inside_builder_iframe` [A PR]: https://github.com/odoo/odoo/pull/224094 [the forward-port]: https://github.com/odoo/odoo/pull/226901 task-5111606 Forward-Port-Of: odoo/odoo#228113
Resetting a user's Odoo Calendar no longer triggers an error when the reset includes calendar events the user cannot normally edit. This makes Google Calendar reset operations complete reliably without unnecessary permission-related interruptions.
Original PR description
Before this commit, when resetting the Odoo Calendar of an user, it would trigger a ValidationError for updating events that the current user wasn't able to update, even though it was not an updated per se, but just a deletion of it in Odoo. After this commit, we no longer trigger that ValidationError during resets of Odoo Calendars, fixing the error. task-5103918 Forward-Port-Of: odoo/odoo#228195 Forward-Port-Of: odoo/odoo#227991
Fixed an issue where the progress indicator shown while completing a survey displayed only part of its text. Users now see the full progress message, making survey completion clearer and less confusing.
Original PR description
Issue: When filling in a survey, the progress in the bottom right of the page does not show progress correctly. Only part of the text appears. Cause: Part of the text is not encompassed by any tag, so they are a loose node. Because this javascript code has migrated to the OWL framework these loose nodes are not rendered directly anymore. Solution: Encapsulate all the text in spans Task-5062196 Forward-Port-Of: odoo/odoo#227227
This fixes an issue in the Website builder where Share snippet icons could not be changed when the snippet was placed after another snippet. Business users can now reliably customize social sharing icons as expected while designing website pages.
Original PR description
Steps to reproduce: - Add an "Image-Text" snippet on the page. - Drop the "Share" snippet below the image. - Double click on an icon to change it. -> Problem: the icon can not be changed Note: in the above steps to reproduce, an important think is that the "Share" snippet is not the first snippet that is dropped. The problem is that the icons and the title of the snippet were added in the `extra_contenteditable_handlers` resource. The handler of this resource takes the elements of `force_editable_selector` that are inside the `root` (that is the column of the snippet if the "Share" snippet is the second dropped snippet) and checks for other elements. Because they are no elements remaining after checking for elements of the `force_editable_selector` resource, the system does not correctly add the `contenteditable` attribute on those elements. task-5107669 Forward-Port-Of: odoo/odoo#228339
The point of sale payment screen now properly disables the Validate button on mobile when no payment method is selected. This helps prevent staff from accidentally trying to confirm incomplete payments and improves consistency between mobile and desktop use.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. task-id: 5072759 enterprise PR: https://github.com/odoo/enterprise/pull/94100 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228249 Forward-Port-Of: odoo/odoo#225917
The Stock app now hides the 'Move a Pack' button when package handling is not enabled. This prevents users from seeing an action that should not be available under their current inventory settings, reducing confusion.
Original PR description
As the button is added though an override of the ListRenderer, there was no check on the group made on the button, meaning that even if the 'Packages' setting wasn't activated, the button would still appear. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227640
The kiosk online payment page now displays only one background instead of duplicating it behind the QR code payment section. This creates a cleaner, less confusing checkout screen for customers using self-order payment.
Original PR description
pos_online_* = pos_online_payment_self_order This commit ensures that only one background is displayed on the kiosk online payment page. The background is correctly displayed in 'pos_self_order.PaymentPage', and it should not be displayed again in the “Scan the QR code to pay” subcomponent. <img width="688" height="485" alt="Screenshot 2025-09-24 at 13 49 00" src="https://github.com/user-attachments/assets/e521ffce-82db-4900-828a-5d086fa9b4ac" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228424
This fix delays loading VAT validation resources until they are actually needed in partner autocomplete. It helps avoid unnecessary background work while keeping VAT checks safe when users navigate away or the screen changes.
Original PR description
Before the commit [1], jsvat was only lazy loaded when needed. After that commit jsvat is now lazy loaded as soon as a widget using `usePartnerAutocomplete` appears in a view. This commit reverts the previous fix and, to addresses the original issue by ensuring that the checkVATNumber method so that it is only used if the component is still active. Note that, the same technique is used on the hook `useService` 1: https://github.com/odoo/odoo/commit/d452da2ea7a66c67769669ecafac361bddd9ca18 part-of task-id 5106517
Creating analytic items linked to zero-value invoices no longer causes the accounting system to crash. This helps users save accounting records reliably even when an invoice has no balance.
Original PR description
The system will crash with error when try to create a analytic item. **Steps to Produce:-** 1. Install the `Accounting` module with demo data. 2. Go to `Settings > enable Analytic Accounting`. 3.…
The system will crash with error when try to create a analytic item. **Steps to Produce:-** 1. Install the `Accounting` module with demo data. 2. Go to `Settings > enable Analytic Accounting`. 3. Navigate to `Accounting > Customers > Invoices`. 4. Create a new invoice with total amount = 0 and confirm it. 5. Go to Accounting > Accounting > Transactions > Analytic Items. 6. Create a new Analytic Item and: - Set a value in the `Project` field. - Under the `Accounting` section, select the `Journal Item` linked to the last created 0-amount invoice and save. **Error:-** `ZeroDivisionError: float division by zero` **Cause:-** - At [1], when `line.balance` is 0.0 (for example, when a journal item is defined with a total of 0.0), the system raises an error. **Solution:-** - Added a condition to compute only when line.balance exists; otherwise,set the value to 100. [1]: https://github.com/odoo/odoo/blob/dff2423ac320fdb97d6bf1f106dc84be1d71cac2/addons/account/models/account_move_line.py#L3248-L3251 **sentry-6844926153** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226148 Forward-Port-Of: odoo/odoo#225068
The bank reconciliation action now avoids using desktop-only behavior on mobile screens, where a different view is shown. This prevents users from seeing an error when tapping the reconcile button on phones or small screens.
Original PR description
When clicking on the reconcile button in mobile, the js_class of the custom list view is never triggered because, in small screens (aka. "mobile"), by default, kanban views are used instead of list views (or at least take precedence). To avoid having a traceback, we will keep the custom behavior in desktop only no task id Forward-Port-Of: odoo/enterprise#95145
Users without HR permissions could see an empty employee list because an employee photo field triggered an access error. The view now limits that photo field for those users, keeping the work order employee list usable until the underlying HR issue is resolved.
Original PR description
HR use an access right on field. However they have an issue with the avatar field that return an error while it should not. Until they provide a fix limit the avatar field when the user don't have the hr user group. Forward-Port-Of: odoo/enterprise#95424
General Ledger PDF reports now show longer company names in the footer instead of cutting them off after a short limit. The footer spacing was also adjusted so the longer name fits cleanly on printed reports, improving document presentation for companies with longer legal names.
Original PR description
**Steps to reproduce:** 1. Install the Accounting module. 2. Set a company name longer than 24 characters. 3. Go to Accounting → Reporting → General Ledger. 4. Print the report → in the PDF footer,…
**Steps to reproduce:** 1. Install the Accounting module. 2. Set a company name longer than 24 characters. 3. Go to Accounting → Reporting → General Ledger. 4. Print the report → in the PDF footer, the company name is truncated. **Issue:** - The company name in the General Ledger report footer is cut off if it exceeds 24 characters. **Cause:** - The footer uses a static value limited to 24 characters: https://github.com/odoo/enterprise/blob/08564f3312c255f2f3ab95cef5a9bfc57727bd1f/account_reports/models/account_report.py#L5850-L5860 **Solution:** - Increased the footer text limit from 24 to 80 characters. - Adjusted page margin by changing `'data-report-margin-bottom': 15` → `'data-report-margin-bottom': 20` to ensure proper spacing for longer company names in the PDF. **After Apply Solution** <img width="1038" height="86" alt="After solution" src="https://github.com/user-attachments/assets/51ece47c-1950-4a54-8be3-f7ac2bbd8a0d" /> **Before Without Solution** <img width="1050" height="66" alt="Before Solution" src="https://github.com/user-attachments/assets/a13b9132-bf04-422a-8e32-1db5225afc33" /> opw - 5025972 Forward-Port-Of: odoo/enterprise#94535
Scheduled account report emails no longer fail when a partner included in a pending batch has been deleted before processing. The system now keeps only existing partners in the batch, helping automatic statement delivery continue reliably.
Original PR description
When a partner included in a batch send is deleted before the cron "Send account reports automatically" runs, the cron fails because the partner no longer exists. Steps to reproduce: 1. Create partner A and a draft invoice linked to it 2. Go to Partner Ledger and select Customer Statement report 3. Click on Send and validate - Ensure the scheduled action is not executed immediately (e.g. by deactivating it) 4. Delete partner A 5. Run the cron "Send account reports automatically" -> Cron fails with "Record does not exist or has been deleted" This fix ensures only existing partners are kept for processing. opw-5085571 Forward-Port-Of: odoo/enterprise#95127
This fix ensures helpdesk tickets appear correctly in timesheet reports when they should. It corrects a previous report update that did not target the existing report field properly, helping users see complete ticket-related time information.
Original PR description
Description of the issue/feature this PR addresses: The previous commit attempted to extend the timesheet report to display tickets by using position="attributes" on a new . This approach does not work in Odoo reports because position="attributes" can only modify existing elements. There is no indication that the behavior of not displaying tickets was intentional, so this PR corrects that implementation. Current behavior before PR: The previous fix did not correctly locate the existing element for task/project info. Desired behavior after PR is merged: The existing is correctly found and updated to include show_ticket in its t-if. Forward-Port-Of: odoo/enterprise#95206
Customers buying subscriptions through the e-commerce checkout are now informed that their payment details will be saved for automatic renewals. This aligns the online shop experience with the portal flow and improves transparency around recurring payments.
Original PR description
Before this commit, when the customers paid a subscription on the portal, they would get the following information: Your payment details will be saved for automatic renewals. When they would pay on the e-commerce, the token would be saved but they would not be notified. task 4808806
This fix ensures that using the left and right arrow keys inside a dropdown does not accidentally trigger actions elsewhere in the interface. It makes keyboard navigation more predictable and prevents unexpected UI changes while users are selecting dropdown options.
Original PR description
This commit prevents arrowleft and arrowright hotkeys to trigger on other parts of the UI when navigating a dropdown. Community: https://github.com/odoo/odoo/pull/226604 Task: [5048895](https://www.odoo.com/odoo/project.task/5048895) Forward-Port-Of: odoo/enterprise#94478
Quality checks now use the unit of measure entered on the receipt line when it differs from the product default. This helps teams review inspections with the correct operational quantity and avoids confusion during receiving.
Original PR description
Steps to reproduce: - Create a storable product “P1” with UoM = Unit - Create a quality point: - Control per: Quantity - Operation type: Receipt - Product: P1 - Create a receipt of 1 unit of P1 - Mark as "To Do" - Open the detailed operations (SML) and update the UoM to Dozen - Go to the quality check Issue: The UoM of the quality check is still "Unit" instead of "Dozen", because the field was related to `product_id.uom_id`. Fix: Compute the UoM from the stock move line if available, otherwise fall back to the product's default UoM. opw-5080657
Users can no longer try to send a WhatsApp message without selecting a template. This prevents an application error and guides users to complete the required message setup before sending.
Original PR description
Currently, an error occurs when the user attempts to send a whatsapp message without selecting a template. **Steps to Reproduce:** 1. Configure a WhatsApp Business Account and synchronize the…
Currently, an error occurs when the user attempts to send a whatsapp message without selecting a template. **Steps to Reproduce:** 1. Configure a WhatsApp Business Account and synchronize the templates. 2. Open any contact and click the **WhatsApp** button next to the phone number. 3. Remove the template and click **Send Message**. **Error:** `ValueError - Expected singleton: whatsapp.template()` **Cause:** At [1], it attempts to fetch the formatted body and header from the template ID. Since no template is selected, it results in an error. **Fix:** This commit makes the field `wa_template_id` required, preventing users from sending a whatsapp message without a template. In stable versions, raise a validation error if a user attempts to send a message without selecting a template. [1] - https://github.com/odoo/enterprise/blob/fff9ad7999d4ff13adf899b2517e750a36c1261a/whatsapp/wizard/whatsapp_composer.py#L319 sentry-6854466874 Forward-Port-Of: odoo/enterprise#93898