Thursday, August 28, 2025
19 changes · 18.0
Enhancements to existing features
This update changes onboarding screen titles so they can be included in translation files. It helps businesses provide a more complete localized experience for users in different languages.
Original PR description
Since `name` attribute is not translatable in XML views and even can not be added to TRANSLATED_ATTRIBS, `string` must be used instead of `name` attribute, in order to make the text exportable to `po` file. 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
Resolved issues and error corrections
This fix makes website SEO tools more reliable by preventing errors when Google suggestions are unavailable or when a page has no description. Business users should see fewer interruptions when editing or previewing SEO settings.
Original PR description
Ensure the Google suggest fallback always returns a JSON list, even on IOError, instead of raising a serialization traceback. JS (SEOPreview): guard against undefined/empty descriptions with optional chaining and default empty string to avoid runtime errors. opw-4963552 Forward-Port-Of: odoo/odoo#224424
Code cleanup and technical improvements
This refactor simplifies how Odoo modules avoid heavy recalculations when new stored computed fields are added during installation. It makes the setup process easier for developers to understand and helps reduce the risk of memory issues on large databases, without changing day-to-day user workflows.
Kit products are now excluded from quantity-on-hand filter results when their computed stock does not match the selected criteria. This prevents users from seeing misleading product search results in manufacturing and inventory workflows.
Original PR description
#### Issue: - When filtering products on "Quantity on hand", kits may appear when they shouldn't #### Step to reproduce: - with MRP - create a new product - create a BoM for this product as kit - make sure you have product of the BoM on hand - go to product - add filters: - "Quantity on hand" > 1 - "Quantity on hand" < *less_than_you_have* #### Current behavior: - kit appears #### Expected behavior: - kit doesn't show #### Cause: - kit were filtered has having both 0 quantity (as unstored product) and their quantity (computed from stock of BoM products). Therefore they were compliant with both filter. #### Solution: - remove kits from products compliant with the filter if they don't comply with the filter with their computed quantity opw-4967763 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221224
Opening All Orders from the customer list no longer clears the currently selected customer in Point of Sale. This avoids extra re-selection steps and keeps checkout workflows smoother for cashiers.
Original PR description
Before this commit, opening the All Orders from the partner list would reset the selected partner. As a result, the user had to reselect the partner after returning, which disrupted the workflow. opw-4972314 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents Odoo Discuss calls from showing an error when a user leaves or crashes at the same moment another participant joins. It makes call handling more reliable in rare timing situations, reducing unexpected interruptions for users.
Original PR description
Before this commit, since https://github.com/odoo/odoo/pull/200981, a race condition could occur where the call is over when the the rtc session matching a track event is obtained. This could occur if you crash or leave at the moment another user arrives. You could get a track event from the SFU, wait for the rtc session record from Odoo, leave te call, finally get the rtc session from odoo. This would lead to a traceback as this handler expected that the call was still ongoing.
Purchase orders created from sales that include dropshipped products now correctly show the related project. This helps teams keep purchasing activity connected to the customer project for easier tracking and coordination.
Original PR description
### Steps to Reproduce:
- Create Product 1:
- Type: Goods
- Routes: Dropship and Buy
- Create Product 2:
- Type: Service
- Create on Order: Project & Task
- Create Sale Order and Confirm
- Open Purchase Order
- Check Project
### Issue:
When the product's route is set to Dropship the project was not being set on the purchase order.
### Fix:
This commit ensures that the project associated with the sale order is now correctly set on the purchase order.
### Technical Issue:
There is no direct bridge module between sale_project and stock_dropshipping, so we are setting the project_id from sale_project module.
task-4690044Fixed an issue where users could not open the full event list from the calendar when many events were scheduled on a non-working day. The “show more” link now opens the expected event list instead of triggering the event creation popover, making busy off-day schedules easier to review.
Original PR description
**PROBLEM** If you add a lot of daily event on a off-day, the "show more" link to show all events is not clickable. Clicking bring the event creation popover. **REPRO STEPS** 1. install calendar and hr. 2. on a off day (grey background) in the week or day view, add events until the "show more" link shows up. 3. click on it, and notice the event creation popover pops up instead of the event list popover. **CAUSE** FullCalendar css class fc-non-business have a zindex of 1, a div with this class is "above" the link. **FIX** Removing a line that removed the css class fc-daygrid-more-link to the "more-link" element. Modifying css to keep the style consistent even with this new class. opw-4844719
Printing long stock reception reports now keeps each table row together on a single PDF page. This prevents confusing, cut-off allocation lines when warehouse teams print reports with many product entries.
Original PR description
### Issue: - In the settings enable reception report. - Create a storable product with a product name of length 60. - Create and confirm a delivery with 20+ lines of 1 x that product. - Create and…
### Issue: - In the settings enable reception report. - Create a storable product with a product name of length 60. - Create and confirm a delivery with 20+ lines of 1 x that product. - Create and confirm a PO with 20+ lines referring to 1 x that product. - Validate the receipt > Allocation smart button > Assign all. - Click on print and open the PDF. #### > The last row of the first page is cut in half at the end of the page and the beginning of the next one. ### Cause of the issue: The class `o_report_reception` is used both in the view of the reception report `ReceptionReportMain`: https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/static/src/components/reception_report_main/stock_reception_report_main.xml#L16 and its printed version: https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/report/report_stock_reception.xml#L43-L44 However, when the report becomes too big (many lines), the class did not allow the user to scroll down the view and a fix has been implemented adding the overflow-y style to the class see https://github.com/odoo/odoo/commit/d8a19285939fb31f6d34290cb8138d402e93024b https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/static/src/scss/report_stock_reception.scss#L3 The issue being that wkhtmltopdf relies on the size of the table to determine if a row should be displayed on a page or an other one and if you can scroll down he will apparently not do his job correctly. opw-4824221 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224434
This fixes a test setup issue in the subcontracting dropshipping area by ensuring product category accounts are filled in before they are used. It helps keep automated validation stable and prevents false failures in Odoo's development pipeline.
Original PR description
…dard_perpetual_anglosaxon_ordered_return_internal_aml test this PR fixes the runbot error 230451 introduced by the test of PR https://github.com/odoo/odoo/pull/221009 fix : populate the accounts of the category before using them Forward-Port-Of: odoo/odoo#224183
Customers using the self-order menu are now returned to the same place in the product list after viewing a product with options. This avoids forcing them to scroll from the top again, making browsing and ordering smoother.
Original PR description
Steps to reproduce issue: 1. In the self order product list, scroll down to a product that has options and click on it; 2. The app now takes you to the product's page; 3. Click back; 4. You are not on the product list page, at the top, instead of at the position where you last were The issue is that the product list page should "remember" what product was last clicked and automatically scroll back down to it. There are 2 things that are causing this issue. The first is an improper use of `useChildRef` and the second is a wrong computation of the position to which we should actually scroll. Both issues are fixed in this commit. Task: 4274299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spanish VAT Record Books exported from the Generic Tax Report now show dates in the expected day/month/year format. This prevents confusion for Spanish users and aligns the Excel report with local date conventions.
Original PR description
Changed date format from MM/dd/yyyy to dd/MM/yyyy in reports. An issue with the date formatting for the exported Excel file of the Generic Tax Return report for Spain. In the XLSX file, the dates are generated in the mm/dd/yyyy but they should be generated in the dd/mm/yyyy format. Steps to reproduce this error: 1. Create a new database using Odoo version 18. 2. Activate the module: “Spain - Accounting (PGCE 2008)” (l10n_es). 3. Create a new company and set Spain as the country. 4. Create a new quotation and select the company created in step 3. 5. Confirm the invoice generated from the quotation. 6. Go to Accounting → Reporting → Tax Report and select "Generic Tax Report". 7. Click the gear icon and select "VAT Record Books (XLSX)". <img width="960" height="540" alt="Ticket_Image_Editing (14)" src="https://github.com/user-attachments/assets/7ef6b8ec-4c31-4d4a-8724-d197fa177bf2" /> OPW https://www.odoo.com/es_ES/my/tasks/5010210 MT-10457 @moduon
This fix ensures the 'Return for Exchange' button keeps the intended visibility rules in rental stock return workflows. It helps prevent users from seeing or using the button in situations where it should remain hidden.
Original PR description
Adapt the xpath to make sure the invisible condition on the 'Return for Exchange' button is not overriden. tasks 4748294 & 4778066
The French Intrastat reporting module no longer limits auto-installation based on company country settings. This helps ensure newly added localizations can automatically receive their related reporting module when appropriate.
Original PR description
Specifiying countries in the manifest will only auto-install the module if at least one company is in one of the countries. This is not wanted as, if someone already has a company with it's reports module, and we add a new localization. We want that new localization to auto-install it's reports module.
The PLM dashboard now counts only the engineering change approvals that are actually waiting for the current user. This prevents inflated personal approval counts when another approver still needs to act or when the user already approved earlier.
Original PR description
The dashboard of PLM displays for each ECO type the number of validations pending in general, and the validations waiting for me specifically. The latter has been incorrectly computed for quite some time, as it computes how many ECOs exists where I am an approver and an approval is waiting - but there is no guarantee that the waiting approval is one of mine; it might be that I am a past approver of the ECO and that another approval (waiting for somebody else than me) exists, or that two approval are required on the same stage (one by me, one by somebody else) and I already approved. This commit switches the computation around by looking for pending approvals waiting for me, and then get the number of (non-archived) ECOs bound to them. Forward-Port-Of: odoo/enterprise#92348
This fixes an issue where records that had been softly deleted could still appear in mail-related data lookups. It helps keep users from seeing outdated or removed information, including in related VoIP call handling.
The Peruvian electronic purchase report now places detraction information in the SUNAT-required additional information columns. This helps businesses submit compliant TXT reports and reduces the risk of reporting format issues.
Original PR description
According to the Annex N.°8 of RS 040-2022/SUNAT (page 20 of https://www.sunat.gob.pe/legislacion/superin/2022/anexo-040-2022.pdf), detraction informations are considered as additional informations and should be displayed in columns 42 and 43. This commit moves detraction infos from columns 38, 39 to columns 42, 43. opw-4860530 Forward-Port-Of: odoo/enterprise#93044
For Swiss companies, employee records now hide the standard Time Off and Back On buttons and show the Swiss-specific Absences option instead. This helps payroll and HR users access the correct local absence workflow and avoids confusion from buttons that do not apply to Swiss requirements.
Original PR description
For Swiss companies, the standard "Time Off" and "Back On" smart buttons from the hr_holidays module should be hidden and replaced with a custom "Absences" button that provides Swiss-specific functionality. task-5029240
Original PR description
This commit adds a hook called on the `_auto_init` method to be called whenever a new computed stored field should not be computed when installing the module containing it. It is common for a new model to add an `_auto_init` extension method to create the column of a new computed stored field to prevent it from being computed. This is usually done to prevent MemoryError on large databases. The way it has been written is however not intuitive, as one would have to know non-existent columns are going to be computed when the column is created, and the way we have been preventing them would not be understood normally without reading the comments. This refactor makes it clear from the hook method name that we are adding fields that we intend to skip computation on, and is less complex and much more easier to understand at first glance. related-enterprise-PR: https://github.com/odoo/enterprise/pull/93193 task-5031330
This update simplifies how Odoo skips expensive background calculations when installing modules with certain stored computed fields. It helps reduce the risk of memory issues on large databases while making the setup logic easier for developers to understand and maintain.
Original PR description
This commit adds a hook called on the `_auto_init` method to be called whenever a new computed stored field should not be computed when installing the module containing it. It is common for a new model to add an `_auto_init` extension method to create the column of a new computed stored field to prevent it from being computed. This is usually done to prevent MemoryError on large databases. The way it has been written is however not intuitive, as one would have to know non-existent columns are going to be computed when the column is created, and the way we have been preventing them would not be understood normally without reading the comments. This refactor makes it clear from the hook method name that we are adding fields that we intend to skip computation on, and is less complex and much more easier to understand at first glance. related-community-PR: https://github.com/odoo/odoo/pull/224218 task-5031330