Wednesday, August 13, 2025
25 changes · saas-18.4
New functionality added to Odoo
This change adds test coverage for a specific undo scenario in the HTML editor where repeated text changes can affect history tracking. It helps reduce the risk of regressions in editing behavior, ensuring users can rely on undo actions working consistently.
Original PR description
there is already this todo that seems to be aware of it > @todo: this removes mutation records that change the node reference.
Enhancements to existing features
Reconciliation matching rules now handle negative “between” amounts correctly whether users enter the lower or higher value first. This reduces confusion when setting up accounting automation and helps bank statement lines match as expected.
Original PR description
Before this commit, when having the match amount in between with negative amount we had the min and max amount. Some user were confused that since the amount are negative the min and max need to be inverted. To solve that we rewrite the way the match amount were dealt to use a case when that will enable to have an in between that works in both ways (min, max and max, min) notask-id Forward-Port-Of: odoo/enterprise#91628
Resolved issues and error corrections
This fix prevents text areas from appearing in multiple live chat tabs at the same time during tests. It also corrects which field is checked for synchronized values, helping ensure live chat settings behave reliably.
Original PR description
Fix the unexpected behavior that the textareas in different tabs were both rendered by specifying the tab used in blur event. This commit also fixes the wrong target chosen for checking the sync value. runbot-230896 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When a user deletes a reply in Odoo Discuss or Mail, the removed message no longer keeps showing the original parent message reference. This keeps conversations cleaner and avoids confusing users with leftover reply context for content that has been deleted.
Original PR description
**Current behavior before PR:** When a user replies to a message and then deletes it, the message body changes to 'This message has been removed.' However, the mention of the parent message remains visible. **Desired behavior after PR is merged:** The parent message mention is no longer shown if the message is deleted. Task-4593293 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222488 Forward-Port-Of: odoo/odoo#198768
This fixes an issue in the HTML editor where replacing text with the same content could be ignored incorrectly when the text was part of newly added content. The change helps ensure editor history and undo behavior remain reliable after recent website builder updates.
This fix prevents upgrade errors when one app changes a shared field to be company-specific while another app is being updated. It helps keep database upgrades reliable and reduces the risk of interruptions during module updates.
Original PR description
before this commit: if module_A has a field ``company_dependent=False`` and module_B override it to ``company_dependent=True`` When -u module_A, there would be an error since ORM tries to convert column type of the field from varchar/integer/boolean... to jsonb This commit will add a patch to the field in the ORM registry if the field was company dependent before upgrade. 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#222701 Forward-Port-Of: odoo/odoo#220983
This fixes an issue in the website editor where removing a parallax scroll effect from a cover section could also remove its color filter. Users can now adjust scroll effects without accidentally changing the visual styling of their page.
Original PR description
After this [commit], we'd have an issue when we tried to remove the parallax (set the scroll effect to none) and had a color filter. To reproduce the problem: - Open Website and start editing; - Drop a `cover` snippet and click on it; - Set the scroll effect to None => The color filter is removed. This commit follows the [html_builder refactoring]. [commit]: https://github.com/odoo/odoo/commit/eea7216e5e366c2 [html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb
This fix prevents an error when a user presses Enter in chat group search before slow-loading results are ready. Users can continue using messaging search without seeing a disruptive JavaScript crash during brief network delays.
Original PR description
Description of the issue/feature this PR addresses: --- **Reason for PR** When a user searches for a chat group, if the network is slow and the search results have not yet been loaded, pressing **Enter** will cause the system to attempt to access the `unselectable` property of an `option` variable that is not yet initialized. This leads to the following error: ``` Uncaught Javascript Error: undefined is not an object (evaluating 'option.unselectable') ``` This PR adds handling to prevent the error when data has not been fully loaded. --- Current behavior before PR: https://github.com/user-attachments/assets/de3964c7-ff83-4f94-bc1a-cb8e09bfb62f --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222576
Fixed an issue where computing geolocation for a contact without a name could fail with an error. Users can now run address-based geolocation on incomplete contact records without interruption, and messages identify affected contacts more clearly.
Original PR description
<b>Steps to reproduce:</b> 1. Install base_geolocalize and Contacts > Go to Contacts. 2. Create a new contact or select an existing one (Individual). 3. Go to Contacts & Addresses > Add, leave all…
<b>Steps to reproduce:</b>
1. Install base_geolocalize and Contacts > Go to Contacts.
2. Create a new contact or select an existing one (Individual).
3. Go to Contacts & Addresses > Add, leave all fields empty, then Save & Close.
4. Open the newly created sub-contact > Partner Assignment > Geolocation
5. Click "Compute based on address".
<b>Issue:</b>
- Traceback is raised during geolocation computation if the sub-contact has no name Instead of Displaying.
<b>Cause:</b>
- If a partner does not have a name, the value is False.
- The join() operation results in a TypeError because False cannot be concatenated with strings.
<b>Problematic line:</b>
`'message': _('No match found for %(partner_names)s address(es).', partner_names=', '.join(partners_not_geo_localized.mapped('name')))`
<b>Solution:</b>
- Replaced `name` with `display_name` to ensure all elements passed to`join()` are strings.
This also improves readability in the UI when identifying partners without proper names.
opw-4930258
Forward-Port-Of: odoo/odoo#222317
Forward-Port-Of: odoo/odoo#218292The website editor now handles failed link preview requests gracefully, such as when an external site blocks access. This prevents error screens when users preview social media or other external links while editing website content.
Original PR description
Problem: When a fetch request fails (e.g., due to CORS restrictions), a traceback occurs in the editor. Solution: Catch errors on `await this.props.getInternalMetaData`. Steps to reproduce: - Go to Website - Change the footer to "Links" - Click on a social media link to preview > A traceback occurs opw-4979674 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Some automated website tests for carousel autoplay are being turned off temporarily because timing behavior is currently inconsistent. This avoids unreliable test failures while the underlying carousel timing issue is investigated, with no direct change to customer-facing website features.
Original PR description
The first slide of a carousel after loading the page seems to happen after more than 3s, even when the interval is set to 3s. While waiting for a fix for these tests, they are temporarily disabled. task-4367641
This fix prevents the live chat bubble from overlapping the floating shopping bar on mobile product pages. Shoppers now see and can use the floating bar consistently, whether or not a pricelist is active.
Original PR description
In odoo/odoo@860dccec53cb0940212fe7d9161c7e3c805867f7 the floating toolbar layout was introduced, but there was an issue with the livechat bubble which was overlapping the floating bar on mobile when there was no priceslit (error with the calc()). This PR fixes this issue by displaying the floatingbar above the livechat bubble, taking the same style when there is a pricelist or not. task-4966406 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221568
Reconciliation rules that only define an amount match can now be suggested for bank statement lines. This helps finance teams automate more bank reconciliation cases instead of handling them manually.
Original PR description
Before this commit, having a reco model with a match amount alone was never applied to statement line since the can_be_proposed field was False. This commit will add the match_amount to the compute notask-id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221733
This fixes an issue where an emptied, protected link such as a website header button could become impossible to type into. Users can now delete and re-enter button or link text without getting stuck after editing or reopening the page.
Original PR description
In case a link is unremovable, the `zwnbsp`s (aka feffs) added on the edges of a link may be missing one inside if the link is empty. With only one feff inside the link, the user cannot move the cursor inside it Steps to reproduce: - Delete the content of an unremovable link (for example the "Contact Us" button in header of website) - Use the arrows with shift key to extend selection (`shift+right`) - Press delete - Bug: user cannot write anything inside the button Alternative: - Delete the content of an unremovable link - Save and reopen - Bug: user cannot write anything inside the button task-4954763
This fixes an incorrect label for the user group related to creating products. The change helps administrators see the right permission name, reducing confusion when managing product access settings.
Incoming return slips now show the proper destination address instead of placeholder demo text. This prevents confusion for warehouse teams and customers when printing return documentation for received products.
Original PR description
Issue ----- Incoming return slips have a "Demo Address and Name" text instead of the correct destination address. <img width="928" height="658" alt="image"…
Issue ----- Incoming return slips have a "Demo Address and Name" text instead of the correct destination address. <img width="928" height="658" alt="image" src="https://github.com/user-attachments/assets/6ff0a5e7-f1ee-4faa-a22b-76ec8f2f7a28" /> Steps to reproduce ----- - Create a receipt for a product - Print its return slip Cause ----- By default, the address is taken from the pickings location_id -> warehouse_id -> partner_id. For incoming pickings, the warehouse is the vendor one, with no associated partner. In such cases, the partner can be found directly on the picking itself with the partner_id field. Note ----- To render t-fields, qweb first applies a `rsplit` before evaluating the expression, see https://github.com/odoo/odoo/blob/cb1c761777e84d96f82c4f754586795509ce1b3d/odoo/addons/base/models/ir_qweb.py#L2015-L2016 With this in mind, using parentheses and moving `.partner_id` outside of them seems like the most readable way to go about it. ----- Ticket: opw-4660716 Forward-Port-Of: odoo/odoo#221807 Forward-Port-Of: odoo/odoo#219011
Steps to reproduce: 1. Install 'l10n_it' and 'accounting' from apps. 2. Enable debug mode. 3. Activate the Italian language and set it for the current user. 4. Go to Accounting > Customers / Vendors > Invoice / Bill > Electronic Invoicing tab Observation: When the Italian language is active, the 'Electronic Invoicing' tab and the fields within it are not translated. Issue: Missing translations in the PO file. Solution: Added the missing translations for the fields in the PO file.
Original PR description
Steps to reproduce: 1. Install 'l10n_it' and 'accounting' from apps. 2. Enable debug mode. 3. Activate the Italian language and set it for the current user. 4. Go to Accounting > Customers / Vendors > Invoice / Bill > Electronic Invoicing tab Observation: When the Italian language is active, the 'Electronic Invoicing' tab and the fields within it are not translated. Issue: Missing translations in the PO file. Solution: Added the missing translations for the fields in the PO file. opw-4937464 Forward-Port-Of: odoo/odoo#222322
This fix ensures subscription effective dates are properly saved when orders are processed. It prevents cases where a date appeared to be set but was not written to the database, improving reliability for subscription records.
Original PR description
Since https://github.com/odoo/enterprise/commit/ff8e55ed83d4905584b7ea10b60ded0d7afbd0cf setting the effective date is done in a precommit hook. Problem, the precommit don't automatically flush. The value set in the cache may be never reflected in the database. Solution: Explicitly flush in the precommit hook Forward-Port-Of: odoo/enterprise#92283
This fixes an issue in the Documents app where a sharing email template referred to information that is not available on document access records. The correction helps prevent errors when the template is created during upgrades, improving reliability for document sharing setup.
Original PR description
As `documents.access` records do not have `create_uid`, it isn't possible to reference it. This only comes up now as we've fixed the upgrade scripts to actually create this record (in odoo/upgrade#7959). Task-4480388
This update ensures point-of-sale order totals in the Mexican electronic invoicing flow are rounded using the currency's official precision. It prevents valid fully discounted orders from being incorrectly blocked by a validation error caused by tiny rounding differences.
Original PR description
Issue: With specific prices and discounts, we can get an rounding issue that does not pass the Validation Error. Purpose of this PR: To round the amount total based on the currency's rounding precision to pass the check. Steps to Reproduce on Runbot: install pos, l10n_mx create products prices with 75.00 and 60.00 respectively. create discount 100% on order change decimal accuracy to 3, change tax to Include with Price create PoS order with products and apply discount receive ValidationError even though the amount total should be rounded to 0.0. opw-4944830 Forward-Port-Of: odoo/enterprise#92141
This fix ensures stock quantity update notification tests include an email address so notifications can be sent correctly. It helps prevent failures around stock move updates when required contact details are missing.
Original PR description
Updating the initial demand of a stock move notify the users. Without email address, the notification cannot be send. As the email address of the admin user is only fill in the demo data, this commit adds one specially for the test. runbot: 226778 Forward-Port-Of: odoo/enterprise#91103 Forward-Port-Of: odoo/enterprise#89722
The Argentina electronic invoicing test setup will now stop retrying after a small number of failed connection attempts instead of looping indefinitely. This reduces wasted testing time and avoids repeatedly hitting external services when they are unavailable.
Original PR description
In 18.0 and above test hasn't worked in months, half the time it fails because pretty much nothing works in it and half the time it's because it keeps looping on trying to set up the connection and failing (possibly because we're getting blacklisted due to how much spamming we do). For now restrict to just trying 5 times (per class since it's called from a `setUpClass`) with an exponential backoff. This may yet end up in removing the entire test directory as it doesn't seem like anyone cares. Forward-Port-Of: odoo/enterprise#92226 Forward-Port-Of: odoo/enterprise#92207
This fix updates demo employee records so they use the correct payroll structure type in several country-specific payroll modules. It helps ensure sample payroll data behaves as expected during demonstrations, testing, and evaluations.
Original PR description
Some employees on demo data don't have the correct structure type. This solves this issue. Task: 4890507
The accounting reports test suite now avoids applying unsupported grouping checks to reports that use external calculation logic. This keeps complex localized tax reports, such as Luxembourg annexes, from failing automated validation due to rules that do not apply to them.
Original PR description
The corresponding community PR (https://github.com/odoo/odoo/pull/221407) contains a fix that requires the _validate_engine constraint to reject any groupby value for the 'external' engine. Therefore, it is now needed that the test ensuring non-stored related fields can be used in groupby is adapted in order to also exclude those expressions when changing the groupby value of the lines using a custom engine on any of their expressions. Without that, complex reports like the annexes of the Luxembourgese tax report fail the test. Forward-Port-Of: odoo/enterprise#92096
Field service users can once again open outgoing stock pickings in a map view. This restores the expected enterprise-only map option after a related community fix, helping teams plan and visualize delivery routes more easily.
Original PR description
This commit is the continuity of the fix made in community. The issue fixed in community was the map view cannot be defined in the view mode of an action since the map view only exists in enterprise. This commit overrides the method defined in community to add the map view as before. Related PR: odoo/odoo#222003 Forward-Port-Of: odoo/enterprise#92032