Friday, August 22, 2025
14 changes · saas-18.2
Resolved issues and error corrections
This fix adjusts where message actions appear on internal log notes written by the current user. The actions now appear in a more consistent and expected position next to the date, improving readability and usability in message threads.
Original PR description
**Purpose of this PR:** Fix the position of message actions on log notes authored by the current user. Messages authored by self appear on the right side of the thread. This PR mirrors the action placement logic so that, like messages from others (which show actions to the right of the date), self-authored messages show actions to the left of the date. Before: <img width="392" height="638" alt="image" src="https://github.com/user-attachments/assets/8b66c98f-3e00-47c8-abf3-ee62169ed499" /> After: <img width="392" height="638" alt="image" src="https://github.com/user-attachments/assets/d1a425da-fb0c-4793-a080-735286bc2bb9" /> task-[4689357](https://www.odoo.com/odoo/project/1519/tasks/4689357) Forward-Port-Of: odoo/odoo#216520
This fixes how accounting entries are paired during reconciliation when multiple partners are involved. Matching debit and credit lines by partner first helps keep behind-the-scenes reconciliation amounts accurate and easier to audit, without changing the normal user workflow.
Original PR description
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Accounting / Journals / Journal Entries" - Create the following MISC entries in this order: 1) | Account | Partner | Debit | Credit…
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Accounting / Journals / Journal Entries" - Create the following MISC entries in this order: 1) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner A | 1000 | 0 | | Account X | Partner A | 0 | 1000 | 2) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner B | 1001 | 0 | | Account X | Partner B | 0 | 1001 | 3) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner C | 1002 | 0 | | Account X | Partner C | 0 | 1002 | 4) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner C | 0 | 1002 | | Account X | Partner C | 1002 | 0 | 5) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner B | 0 | 1001 | | Account X | Partner B | 1001 | 0 | 6) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner A | 0 | 1000 | | Account X | Partner A | 1000 | 0 | - Go to "Accounting / Accounting / Journals / Journal Items" - Select the 6 created lines linked to the Receivable Account - Reconcile them **Issue:** The 6 lines are fully reconciled, but when checking the amounts of the partial reconcile records (not visible in the UI), the debit and credit amounts are matched by their actual order. So, the first debit line of 1000 is matched with the first credit line of 1002, which results in a residual credit of 2 that is then matched with the second debit line of 1001, which leads to a residual debit of 999 and so on. This generates weird amounts in the partial reconcile records. **Solution:** In the case there are several lines with different partners, the lines can be sorted by partner to try to match the lines with the same partner together. opw-449356 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223512
The web test runner now handles missing excluded test or suite IDs more quietly, avoiding unnecessary Runbot build failures when addons differ between builds. Developers can still see relevant information when an included ID is missing, while routine ignored exclusions no longer disrupt automated checks.
Original PR description
Before this commit, URL test/suite IDs were warned in the console if they didn't match any test/suite registered by the test runner. This is an issue for Runbot which runs sub-builds with the same URL parameters regardless of the installed addons, which repeatedly fails such builds. This commit changes the warning to a regular log, so that these builds stop failing, while still allowing a developer to get the information that an ID has been removed/ignored. runbot [230082](https://runbot.odoo.com/odoo/runbot.build.error/230082) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223242
This fixes an internal test setup issue that occurred when demo data is not installed and the administrator account has no email address. It helps keep automated checks reliable for subcontracting and dropshipping flows without changing business functionality.
Original PR description
This issue comes from [216633](https://github.com/odoo/odoo/pull/216633) Administrator doesn't have an email address without demo data since [185809](https://github.com/odoo/odoo/pull/185809). This causes an error in no demo build for the test `test_kit_dropshipped_change_qty_SO` because it requires a sender's email address configured. Runbot - [229621](https://runbot.odoo.com/odoo/error/229621)
This fix makes an automated public channel chat test more reliable by ensuring each repeated test run checks the correct message. It reduces false failures in validation systems, helping keep releases moving without changing the customer-facing chat experience.
Original PR description
This tour had many race conditions in the past and keeps having them. Some of them are actually due to the fact the tour is ran twice, but the selectors completely ignore this fact, leading to unexpected results. The message body is now updated before the second run to avoid confusion and the selectors are adapted to always target the message of the current run. Also remove the reload for emojis as they are showing immediately after being added. Also remove the useless comments that makes the test twice as long to read and to understand. https://runbot.odoo.com/odoo/runbot.build.error/230901 Forward-Port-Of: odoo/odoo#223807
This update prevents warning messages when Odoo runs with newer Python documentation libraries. It keeps the existing behavior while ensuring compatibility with both older and newer supported environments.
Original PR description
Odoo 17.0 supports Python ≥3.11, which installs docutils==0.20.1. This version deprecates `Node.traverse()` in favor of `Node.findall()`. To avoid deprecation warnings and ensure compatibility with both docutils 0.17 and 0.20.1, this patch uses `findall()` if available and falls back to `traverse()` otherwise. This change is backward-compatible and safe to cherry-pick to >= 18.0. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222000
Fixed an issue that could stop users from downloading calendar invites for planning shifts without an assigned employee. The export now uses a fallback timezone, avoiding an error and keeping shift invitations accessible.
Original PR description
Currently, an error occurs when a user tries to export a calendar invite (ICS) for a planning shift that has no assigned resource. **Steps to reproduce:** - Install the `planning` module. - Go to `Planning > New`, and click `Publish & Send`. - Enable developer mode and go to `Settings > Technical > Email > Emails`. - Open the latest email record and click `iCal/Outlook`. **Error:** `AttributeError: 'bool' object has no attribute 'upper'` **Root Cause:** At [1], when no employee is assigned to the shift, `slot.employee_id` is `empty`, so `slot.employee_id.tz` is `False`, which leads to an error. This commit ensures a valid timezone is always used by selecting the current user's timezone or 'UTC' when the shift has no assigned employee. [1] https://github.com/odoo/enterprise/blob/13ce65b8ca61f9a825f2876e2727cddfae83f894/planning/controllers/main.py#L355 sentry-6781639319 Forward-Port-Of: odoo/enterprise#91889
Portal users can now group their helpdesk tickets by customer without running into an access error. This improves the ticket browsing experience for invited external users while keeping existing customer access rules intact.
Original PR description
**Issue:**
When logged in as a portal user, grouping tickets by 'Customer' raises an
access error, as portal user can only read partner records if:
```
[('id', 'child_of', user.commercial_partner_id.id)]
```
As defined in rule here:
https://github.com/odoo/odoo/blob/68a156030c366fbbf6b0841e1e2688a571355bf2/odoo/addons/base/security/base_security.xml#L22-L30
**Steps to reproduce:**
- Navigate a helpdesk team and set tickets to be visible to Invited portal
users and all internal users.
- Add a portal user as a follower to one of the team's tickets.
- Log in as the portal user, navigate to Tickets, and group by Customer.
An access error is raised
opw-4969684
Forward-Port-Of: odoo/enterprise#92603Payroll screens now show Python code correctly for salary rules and rule parameters. This helps payroll administrators review and maintain calculation logic without confusing formatting issues.
Original PR description
Forward-Port-Of: odoo/enterprise#92902 Forward-Port-Of: odoo/enterprise#91811
FedEx shipping requests now remove the country prefix from province or state codes when required. This helps prevent shipment validation issues for addresses in countries where local region codes normally include the country code.
Original PR description
Before this commit: The province code for some countries includes the country code too. FedEx expects a two letter code in the request. For example, the standard code for Stockholms lan is "SE-AB" and the code FedEx expects is "AB". After this commit: The country code is excluded from the province code. opw-4984662 Forward-Port-Of: odoo/enterprise#92650
Fixes an issue in the online shop where changing a product variant could cause the subscription plan selector to use an outdated option during automated checks. This makes the subscription purchase flow more stable and reduces false failures in testing.
Original PR description
The subscription plan selection gets removed and replaced (static template website_sale_subscription.SubscriptionPricingSelect) So the change of value occurs, but on the wrong select. This was happening as when changing the variant we will replace the plan_select in the widget with another template and since this will happen before the RPC set the plan_id that we are choosing as the default one we will actually have the old select option back on the dom to be selected. https://github.com/odoo/enterprise/blob/82593f9932e92800251d18453b0c73e5ce9b5ec0/website_sale_subscription/static/src/js/variant_mixin.js#L35-L41 We are setting the select option to the old one after replacing it. This commit introduces a delay to prevent the test to fail (which happened most of the time) runbot-error-110627 Forward-Port-Of: odoo/enterprise#86639
The point of sale flow now avoids a crash when an expected order record is unavailable. This helps staff continue settlement activities without being interrupted by an error in this edge case.
Original PR description
Before this commit, accessing the order amount caused an error if the order was not defined. opw-5027426 Forward-Port-Of: odoo/enterprise#92736
Odoo Studio no longer crashes when a button points to a server action that has since been deleted. This keeps users able to open and edit Studio views instead of being blocked by an error.
Original PR description
The error is triggered when a user configures a button to execute a serveraction, deletes the associated server action, and then attempts to edit the button. This causes a failure at the line `self.env.ref(str_action)` due to the missing external ID. **Steps to reproduce:** * Install `crm` and `web_studio` * crm > Form View> Studio > `Add a button`> Run a server Action > Enrich * Settings > Technical > Actions > Server Actions > `Enrich` > Delete it * crm > Form View > Studio `ValueError: External ID not found in the system: crm_iap_enrich.action_enrich_mail` **Solution:** * Return `False` when the referenced server action cannot be found or has been removed. **Sentry-6608495874** Forward-Port-Of: odoo/enterprise#89218
The Denmark RSU module display name was updated to match the naming style used by other Denmark-related modules. This is a small consistency fix that helps users recognize and navigate Danish localization features more easily.
Original PR description
This commit will edit the name of the module to be consistent with the other denmark modules no task id Forward-Port-Of: odoo/enterprise#92759