Tuesday, August 26, 2025
23 changes · saas-18.3
Resolved issues and error corrections
This fix makes automated checks for two-factor authentication wait until the web client is fully ready before interacting with it. It reduces false test failures and improves confidence in release validation without changing user-facing behavior.
Original PR description
Code and issue at hand are very similar to odoo/odoo#212102 so implement the same "fix" to synchronise the tour on the web client being ready, though technically the first two calls are just "wait a bit" then "wait a bit more" (wait until DOMContentLoaded, then until next frame, then until next event loop). At which point we wait until the event bus has fully connected to the server before moving on to interact with the client for real. It does seem to reliably wait sufficiently long for the issue to go away so works for me... Backport of #224066 https://runbot.odoo.com/odoo/error/181862 Forward-Port-Of: odoo/odoo#224161
The Point of Sale now reuses an existing empty, unfinished order when staff tap “New order” from the receipt screen. This prevents the system from accumulating unnecessary blank orders, keeping sessions cleaner and reducing clutter.
Original PR description
- When clicking `New order` on the receipt screen, we now want to reuse an empty order (not finalized and no order lines) before creating a new one. This avoids creating many useless empty orders. task-id: 5003010 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222786 Forward-Port-Of: odoo/odoo#222276
This fix prevents errors when creating, updating, or validating work entries for employees with fully flexible schedules. It helps payroll and HR processes continue smoothly when no specific working calendar is assigned.
Original PR description
When we validate/write/create a work entry for an employee with a fully flexible working schedule, we can encounter a traceback when trying to call `_attendance_intervals_batch` on a non-existing calendar. To rectify this issue, we continue in the loop when no calendar is set. opw-4979974 opw-4968312 Forward-Port-Of: odoo/odoo#222752
This fixes an issue where the Threads social media icon could be selected in an email marketing snippet but would not appear after the email was sent. Marketing emails now display the icon correctly, helping campaigns show the intended social links.
Original PR description
Problem: When adding the Threads icon to an email marketing snippet and sending the email, the icon does not appear in the received email. Solution: Add support for the newly added icons from commit 21db1065aee9b403a316389f306c865cc47354ed (same fix as commit 7e9466e27d61fa8ece43d2238e1570dc3e65337a). Steps to reproduce: - Add the Threads icon to an email marketing snippet. - Send a test email. - Observe that the icon is not visible in the received email. opw-5024970 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale now handles product searches while offline more gracefully. Instead of showing an unexpected error screen, it reports the connection problem as expected, helping store staff understand that the issue is connectivity-related.
Original PR description
- Fix issue that was causing a traceback when searching for products in offline mode. Now when we search a product in offline mode, we get the `ConnectionLostError` as before instead of a traceback. task-id: 5008058 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222761
This fix adds a short wait before automated Point of Sale menu buttons are clicked during testing. It helps prevent false build failures caused by the test acting before the interface is ready, improving reliability without changing business features.
Original PR description
steps to reproduce: 1. in multi enterprise 2. run the tour `test_02_others` added a wait step for the menu buttons before clicking the menu button in the `chrome_util.js` file. build_error-229618 Forward-Port-Of: odoo/odoo#217939
Fixes an issue that could prevent users from deleting a bank account from a customer or partner record. The duplicate bank account check now ignores empty results, avoiding an error and making account maintenance smoother.
Original PR description
Currently an error occurs when we try to remove bank accounts from a partner. **Steps to reproduce:** - Install `accountant` (with demo), Go to customers and create a new one with random name. -…
Currently an error occurs when we try to remove bank accounts from a partner.
**Steps to reproduce:**
- Install `accountant` (with demo), Go to customers and create a new one with random name.
- Under accounting tab add a new bank account with an acc number, bank and save.
- Now remove the bank account record.
**Error:**
`AttributeError: 'NoneType' object has no attribute 'origin'`
**Cause:**
- The error occurs because of the SQL query [1] returning None values in the `id2duplicates` dict, somewhat like `{1: [None]}`, this caused the browse [2] to assign `None` to the `duplicate_bank_partner_ids`.
- While recording snapshots for diff checking in onchange system the none value will be stored like`None: {display_name:{}}` and when the line [3] tries to access `id_.origin` where `id_` is None and causes the error.
**Solution:**
- Added a condition which makes sure null values are not accounted. (The Join is added to makes sure that the correct `partner_id` is fetched.)
[1]: https://github.com/odoo/odoo/blob/04ba4e4a51843701dd42a3f0243add50b3ac0c79/addons/account/models/res_partner_bank.py#L71-L85
[2]: https://github.com/odoo/odoo/blob/04ba4e4a51843701dd42a3f0243add50b3ac0c79/addons/account/models/res_partner_bank.py#L88
[3]: https://github.com/odoo/odoo/blob/04ba4e4a51843701dd42a3f0243add50b3ac0c79/addons/web/models/models.py#L1173
sentry-6748249363
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#219455Discount lines in Dutch e-invoices now use the required reason text instead of a reason code. This avoids validation warnings under the Dutch NLCIUS rules and helps invoices pass compliance checks more smoothly.
Original PR description
NLCIUS rule BR-NL-32 triggers a warning if the AllowanceChargeReasonCode rather than the AllowanceChargeReason is present on an invoice line AllowanceCharge. We don't handle this correctly at the moment for discounts, because in that case the UBL 2.0 builder adds an reason code but not a reason. This commit ensures that the reason rather than the reason code is specified in NLCIUS in the case of a discount. opw-4997704 Forward-Port-Of: odoo/odoo#223072
The web editor now shows the Bluesky social media icon correctly. This ensures website visitors see the intended social link branding instead of a broken or incorrect icon.
Original PR description
The bluesky icon was not rendering correctly because it is not on the version of fontawesome that we are using. Added a change similar to other social media icons that are not on the version that we are using with the already existing bluesky icon that was in the fonts folder. opw-5024970
This fix ensures Canary Islands withholding taxes in the Spanish localization are classified under the correct withholding category instead of the default taxable category. Businesses get more accurate tax grouping and reporting in Odoo Accounting.
Original PR description
Steps to reproduce: - Install `l10n_es' - Go to accounting -> settings and load any package for the Canary Islands - Go to Accounting → Configuration → Taxes - Group by “Tax Type (Spain)” Observation: - 'Withholding' taxes should have type 'retencion' instead of 'Sujeto' Issue: - After this commit, https://github.com/odoo-dev/odoo/commit/643496b337c2edc9c56c76f72aec12021358f631 withholding taxes brings back but not set a l10n_es_type(Tax Type(Spain)), so it's default type to 'Sujeto' Solution: - Add `l10n_es_type` column in the data file and assign 'retencion' to withholding taxes. opw-5000677 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
The editor now clears the previous file selection before opening the file picker again. This prevents a previously chosen file from being uploaded and inserted if the user cancels a later file upload.
Original PR description
Currently, the upload local files service does not reset the file input it uses to handle file uploads. As a result, two consecutive uses of the `/file` command can produce undesirable side effects: Steps to reproduce: 1. Use the `/file` command 2. In the OS file picker, select a file and click on the "open" button. 3. Use the `/file` command 4. In the OS file picker, click on the "cancel" button => The system re-uploads the file loaded at step 2 and inserts a file block for that file in the editor. When clicking on the "cancel" button, we should not insert or upload any attachment. This commit fixes this issue by clearing the file input of the upload local file service before re-prompting the user to select a file. This should guarantee that we do not re-upload the previously selected file. Task-4989809 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222794
Shared project users are now sent back to the correct project when leaving a task edit screen. This prevents confusion and reduces the chance of users working in the wrong project view.
Original PR description
Steps to Reproduce: ------------- 1. Install project and create two projects and tasks. 2. Share both projects with edit access. 3. Edit a task from the portal view (Back to edit mode) then click the (back to tasks) button. 4. Instead of the correct project the page redirects to the another project kanban view. Issue: -------------- - When redirecting to a task from project sharing (edit mode – task form view) it redirects to a different project’s kanban view instead of the actual project. Cause: ------------- - In the portal view the URL is hardcoded with `id=1` instead of dynamically using the correct project ID. Fix: --------------- - pass the correct `project_id` in the URL instead of using a hardcoded value. The issue occurred from this PR-https://github.com/odoo/odoo/pull/174648 task-5031632 Forward-Port-Of: odoo/odoo#224005
This fix prevents errors when users merge contacts and then work with multiple contact records in the Peppol invoicing setup. It ensures each contact is processed separately, making contact management more reliable for businesses using Peppol e-invoicing.
Original PR description
**Steps to Reproduce:** 1. Install `account_peppol` and `contacts`. 2. Open the Contacts app (list view). 3. Select any two contacts and click on "Merge" from the "Actions" menu. 4. Open any of the merged contacts in form view. 5. Close the form view and click on "Add a line". 6. Select multiple records. **Error:** ValueError - Expected singleton: res.partner(11, 9) **Cause:** The method `_compute_available_peppol_eas` accesses `self.available_peppol_eas` directly. When multiple `res.partner` records were involved, it will raised a singleton error. **Fix:** Loop over each partner to compute `available_peppol_eas` for each. This prevents the singleton error when multiple records are processed. sentry-6807787390 Forward-Port-Of: odoo/odoo#223547
This fix restores the intended rule for showing QR codes on Saudi Arabia invoice reports after it was accidentally omitted during a forward-port. Businesses using Saudi localization will see QR codes appear only under the correct conditions, supporting accurate local invoice presentation.
Original PR description
In this commit: https://github.com/odoo/odoo/commit/fdb37c9aa3d2c6002b42e87ebd14afd280ebd03f We changed the condition to display the qr code, but the change was lost in the forward port task-5039596 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224051
Fixed a layout issue in the Employees app where very wide resume content could cause the skills table to cover resume entries and action buttons. Users can now view and manage resume information reliably even when large tables are added to descriptions.
Original PR description
Steps to reproduce:
1- Go on employee app
2- Click on resume section
3- Click on Add on resume tab
4- Put on description a big table with at least 20 columns
5- Save
The resume table and the buttons "add", "delete" with be hidden by the skill table.
Reason:
The skill table element is too wide
Solution:
The skill table's width is fixed and is contained in resume section element
task-4881917
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#217926This fix makes a restaurant point-of-sale payment test wait until an order is fully synced before it finishes. It reduces false test failures and helps keep release validation more stable.
Original PR description
### Issue: - In `test_14_pos_payment_sync`, the tour could end before the order was synced to the server, causing errors in later steps. ### Fix: - Added steps to wait until the sync is done before finishing the tour. Runbot Error: 113594, 181563 Task: 4974068 Forward-Port-Of: odoo/odoo#223983 Forward-Port-Of: odoo/odoo#222581
Appointment events can now correctly receive video call redirection links when several events are processed at the same time. This prevents an error that could interrupt appointment handling and improves reliability for users managing multiple calendar events.
Original PR description
When computing `videocall_redirection`, the method `get_base_url()` was called directly on a recordset containing multiple `calendar.event` records. Since `get_base_url()` expects a singleton, this raised the error: Traceback: --- `ValueError: Expected singleton or no record: calendar.event(4, 6, 1, 5)` This commit ensures the computation is done per record, avoiding the singleton issue and allowing correct videocall redirection values to be set on multiple events. Reference review: https://github.com/odoo/enterprise/pull/53569#discussion_r1543135425 sentry-6819406171 Forward-Port-Of: odoo/enterprise#92717
An automated website sales subscription test was updated to look for the correct page heading after a recent layout change. This helps keep quality checks passing and reduces the risk of delayed releases caused by a false test failure.
Original PR description
Since the div has been changed to h6 the tour is failing as it is unable to find the element in the dom. Changing the trigger in the tour to check h6 instead of div runbot-error-110627
This fix prevents Point of Sale from showing an error when an order is missing or no longer available. It improves reliability for staff handling customer orders and due settlements by avoiding an unnecessary interruption.
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
The contract salary offer screen now hides the signature request button when the current user cannot access any related signature requests. This prevents users from clicking a button that would lead to an error, while keeping it visible for signature administrators and authorized users.
Original PR description
Before this PR, when logged in as a different user from the one responsible for counter-signing the contract, the smart button still showed, and clicking on it caused an error. This PR fixes that, by hiding the smart button when there are no accessible signature requests. Note that sign admins will still be able to see the smart button; users with access to the signature request. Task-4966129 Forward-Port-Of: odoo/enterprise#90819
Swiss payroll ELM transmissions now include contact person details only when all required contact fields are provided. This prevents incomplete contact information from being sent, reducing the risk of declaration errors or rejected submissions.
Original PR description
Contact person information should only be transmitted if all 3 fields are filled Forward-Port-Of: odoo/enterprise#93084
Invoice OCR now chooses the most relevant customer or supplier when several partner records share the same VAT number. This avoids random matches, helping invoices link to the correct business contact more reliably.
Original PR description
It's possible that multiple partners are sharing the same VAT number, for example, when multiple addresses are set on it (each address will be a child `res.partner` with the same VAT number). Previously, when the OCR matched such partners from their VAT number, it would select one "at random" (based on the default sort of `res.partner`). Now, it will match the one with the highest supplier/customer rank. opw-[4954057](https://www.odoo.com/odoo/49/tasks/4954057) Forward-Port-Of: odoo/enterprise#92398
A new automated test verifies that analytic rules are applied correctly when reconciling bank payments with early payment discounts. This helps ensure discount-related accounting lines receive the right analytic allocation, matching the behavior of manually registered payments.
Original PR description
This commit adds a test for the following issue: - Configure an early discount payment term (e.g., 2/7 Net 30). - Configure the analytic distribution model with the account used when a discount is granted (e.g., 657000 on the BE fiscal position). - Create an invoice using the early discount payment term. - On bank reconciliation, register the transaction taking into account the early payment discount (e.g., 98% of the invoice amount_total). On the third line with account 657000, corresponding to the early discount payment, the analytic distribution model does not apply. In contrast, when manually registering a payment for the invoice, the analytic is correctly applied. community pr: https://github.com/odoo/odoo/pull/217933 opw-4868986 Forward-Port-Of: odoo/enterprise#90641