Tuesday, August 5, 2025
22 changes · saas-18.4
Resolved issues and error corrections
This update fixes a missing test setup for the Romanian e-invoicing module that caused an automated web test to fail. It helps keep quality checks stable so future changes can be validated reliably without false failures.
Original PR description
A legacy JS test is currently failing due to a server request not being mocked. This commit thus adds the mocked request. Run the following test to trigger the error: .test_qunit_desktop[web_editor > web_editor > insert a new banner] error-build-230029 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents an error when users start a product return from Helpdesk and then clear the selected delivery. The return workflow now handles an empty delivery field gracefully, reducing interruptions for support and warehouse teams.
Original PR description
step to reproduce : create a sales order with a service and a consumable product deliver the consumable product enable the 'returns' feature on your helpdesk team create a helpdesk ticket in this team select the customer and the SOL you created click on return empty the delivery field => traceback source of the issue : Setting the delivery_id field to false triggers a compute, in which an ensure one is later call on the delivery_id. Since the delivery is empty, it triggers an error. Solution : When the compute is triggered, we can prevent the rest of the code execution when the picking is set to False. task - 4935957 Forward-Port-Of: odoo/odoo#221160
Fixes an issue where changing the website cookie banner from the classic layout to a popup could corrupt part of the displayed message. This keeps the cookie notice content intact when editors switch layouts, preventing confusing text from appearing on published pages.
Original PR description
Before this commit, switching from the classic cookie layout to popup caused the text contained in the cookie to be lost. It replaced part of it with [Object list]. Reason: When switching from jQuery to native JS, some bugs were introduced into the code base. - ReplaceChild does not accept lists as input. - QuerySelectorAll does not return TextNodes. How to reproduce: - Go to edit mode on the website. - Click on the cookie bar. - Switch the layout to discreet. - Switch the layout to popup. Before this commit: Part of the cookie navbar content is replaced by “[Object list]”. After this commit: The content is not modified. 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
This fix prevents the website/page editor from crashing when users type a minus sign at the end or middle of a numeric field. Numeric entries are now cleaned more consistently, making sidebar editing more reliable and reducing interruptions while configuring page elements.
Original PR description
Before this commit, adding a "-" in a numeric input in the edit mode sidebar would sometime open a traceback. This was due to the "-" that was allowed for negative value, but could be present anywhere in the string and wouldn't be removed.
This commit removes all non-leading "-" in the input to solve the issue.
Steps to reproduce:
- Drop a form
- Click on it
- In the "width" field, put "-300"
nothing happen
- In the "width" field, put "300-"
an error occur when you type "-"The remote work location setup now handles cases where the date field is left empty instead of showing an error. This helps employees and managers use the calendar location wizard without interruptions from accidental missing dates.
Original PR description
Currently, an error occurs if the date is missing when setting a work location via the calendar. **Steps to reproduce:** - Install the `hr` module. - Activate the **Remote Work** feature from the…
Currently, an error occurs if the date is missing when setting a work location via the calendar. **Steps to reproduce:** - Install the `hr` module. - Activate the **Remote Work** feature from the employee settings. - Open the Calendar (Month view), hover over a date, and click **Set Location** (or location icon). - Remove the date in the wizard and unfocus the field. **Error:** `AttributeError - 'bool' object has no attribute 'strftime'` This error occurs when the `date` field is `False`, and `_compute_day_week_string` attempts to call `strftime()` on a boolean value - [1]. After addressing the compute function issue, saving the record without a date results in another issue during employee location setup, where `weekday()` is called on a boolean - [2]. [1] - https://github.com/odoo/odoo/blob/e787d0a642bd710a8a80f8abc660c3ff4a385740/addons/hr_homeworking/wizard/homework_location_wizard.py#L25 [2] - https://github.com/odoo/odoo/blob/e787d0a642bd710a8a80f8abc660c3ff4a385740/addons/hr_homeworking/wizard/homework_location_wizard.py#L35 This commit prevent the computation if the `date` field is not set. Sentry - 6658596690 Forward-Port-Of: odoo/odoo#213308
Jordanian e-invoices now automatically remove spaces, plus signs, and other non-number characters from buyer phone numbers before submission. This helps invoices pass JoFotara validation and reduces failed submissions caused by common phone number formatting.
Original PR description
Strip all non-digit characters from the partner phone so that the UBL XML complies with JoFotara’s XSD which requires `^[0-9]{1,15}$`. This prevents validation errors when submitting e‑invoices.
Steps to reproduce:
- Install l10n_jo_edi
- Set partner phone to “+962 79 123 4567”
- Create & post an invoice
- Send to JoFotara
OPW-[4945688](https://www.odoo.com/odoo/my-tasks/4945688)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#221484
Forward-Port-Of: odoo/odoo#220357The website builder now responds more reliably to touch, pen, and mouse input across different devices. This fixes interaction issues that could affect users working on hybrid laptops or tablets.
Original PR description
Before this commit, builder components used mouse events (e.g. `onMouseEnter`) which could fail on hybrid devices like laptops used in tablet mode. After this commit, builder components use pointer events (e.g. `onPointerEnter`) supporting a broader class of inputs. task-4367641
This update reorganizes lengthy automated tests for list editing so they are less likely to fail because of slow test infrastructure. It does not change customer-facing behavior, but helps keep development validation more stable and dependable.
Original PR description
Those tests were too long to be grouped in a single `it` as it would sometime hit the time limit when the runbot was too slow. Putting each of them in separate `it` significantly reduces the likelihood of the issue to occur. runbot-230411 Forward-Port-Of: odoo/odoo#221354 Forward-Port-Of: odoo/odoo#221197
Sending a gamification challenge report in Individual Goals mode could fail when some goal data was missing. The update adds a safe default so the report email can be generated reliably instead of showing an error.
Original PR description
[FIX] gamification: prevent key error exception
To reproduce:
=============
1. Navigate to Settings > Gamification Tools > Challenges.
2. Create a new challenge or open any existing active challenge.
3. Set the Display Mode to Individual Goals, and then click on Send Report.
Problem:
=========
Accessing line['full_suffix'] directly raised an exception
when the key was missing, causing the template rendering to fail.
https://github.com/odoo/odoo/blob/cd5f29b8b50ef4228be8f58a02bb328548208f77/addons/gamification/data/mail_template_data.xml#L175C1-L175C92
Solution:
=========
Use line.setdefault('full_suffix', '') to ensure the key exists with
a default empty string, preventing errors and allowing the template
to render smoothly.
opw-4909617.
Forward-Port-Of: odoo/odoo#219018This fix improves how editable content is handled inside website page sections. It helps prevent editing controls or content areas from being placed incorrectly when a section itself is not editable, reducing layout or editing issues for users building pages.
Original PR description
… if section is in an editable
The accounting matching widget now excludes bank statement lines that have already been assigned to a regular account. This prevents users from seeing already-handled statement lines as possible invoice matches, reducing confusion and reconciliation mistakes.
Original PR description
Create a bank statement line with partner A Assign it to a random account Create an invoice with partner A Confirm it. => The statement line appears It should not, it has been assigned. Only lines that are still on the suspense account should be taken into account --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220356
Barcode scanning with GS1 rules now handles invalid date values without causing an application error. This prevents interruptions for users when a malformed barcode is scanned and keeps the workflow moving smoothly.
Original PR description
**Current behavior:** Traceback if an invalid date is input in the barcode scanner where a gs1 rule is matched and expects a numerical date representation. **Expected behavior:** No traceback **Steps to reproduce:** 1. enable gs1 nomenclature, scan a barcode from the main menu like: `15123456` -> `15` should precede a date like: 'yy-mm-dd' opw-4825538 Forward-Port-Of: odoo/odoo#217663
In collaborative editing, another user's avatar is now positioned so it does not cover the toggle control in toggle lists. This keeps shared document editing clearer and prevents users from losing access to the toggle button while collaborating.
Original PR description
Problem: In collaboration mode, if another user's selection is on a toggle list, their avatar may overlap and hide the toggle button. Solution: When handling toggle lists, calculate the avatar position based on the toggle block itself rather than the nearest block. Before: <img width="743" height="368" alt="image" src="https://github.com/user-attachments/assets/72363e2b-184c-40ad-aff9-848b6c784783" /> After: <img width="601" height="386" alt="image" src="https://github.com/user-attachments/assets/4eb5549e-cbf0-45c3-8b7a-c78b6dd6ce3c" /> Steps to reproduce: - Add a toggle list - Open the same document in a second tab - In one tab, select content inside the toggle list - In the other tab, observe the avatar position - The avatar overlaps the toggle button opw-4921845 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221028
Invoice and sales email notifications no longer show “False” in the subtitle when sent to invoice-address contacts without a contact name. This keeps customer-facing emails professional and avoids confusion for recipients.
Original PR description
**Steps to reproduce:** 1. Install *Accounting* and *Contacts*. 2. Create a company contact with a name & address. 3. Add a child contact: Type = “Invoice address” **Leave the Contact Name blank** 4. Configure an outgoing mail server. 5. Create & confirm a customer invoice for created invoice‑address contact. 6. Click Send, send the invoice email, and check subtitle — it displays `False`. **Issue:** - When the invoice is emailed to a contact without a name, the email subtitle shows False, for example: `INV/2025/00006 - False` **Note: Same issue for Sales** **Cause:** - The rendering logic only checked that `partner_id` existed, not whether `partner_id.name` was non‑empty - Since name was not mandatory for address-type Invoice Address, this resulted in `False` appearing in the email subtitle. **Solution:** - Add an check for the validity of partner_id.name when generating the email subtitle. **opw-4939158** Forward-Port-Of: odoo/odoo#219881
A missing step was added to the employee skills walkthrough so it opens the Resume tab before continuing. This helps ensure the automated check runs reliably in configurations without demo data, reducing false build failures.
Original PR description
step to reproduce: 1. install l10n_ch_hr_payroll_account 2. without demo 3. run test SkillsTestUI.test_ui added missing step is to go to resume tab in the tour build_error_181683 Forward-Port-Of: odoo/odoo#221364 Forward-Port-Of: odoo/odoo#214578
This fix prevents an error when users clear the delivery field while processing a product return from a helpdesk ticket. It keeps the return workflow stable by waiting until a valid delivery is selected before recalculating related information.
Original PR description
step to reproduce : create a sales order with a service and a consumable product deliver the consumable product enable the 'returns' feature on your helpdesk team create a helpdesk ticket in this team select the customer and the SOL you created click on return empty the delivery field => traceback source of the issue : Setting the delivery_id field to false triggers a compute, in which an ensure one is later call on the delivery_id. Since the delivery is empty, it triggers an error. Solution : The field 'delivery_id' is required. So we can simply prevent the execution of the compute when the delivery is set to false and wait for the user to put a new value to trigger the compute correctly. task - 4935957 Forward-Port-Of: odoo/enterprise#90496
This fix ensures the Indian GST reports test can create the GSTR1 report without being blocked by access permissions. It helps keep automated validation stable for India localization reporting, reducing false build failures.
Original PR description
steps to reproduce: 1. Install l10n_in_reports module. 2. Run the test `TestReports.test_hsn_schema_change_gstr1_json`. this is required to avoid permission issues when creating the GSTR1 report in the test. build_error-223245 Forward-Port-Of: odoo/enterprise#90969 Forward-Port-Of: odoo/enterprise#89116
This fix removes duplicated rental planning logic so rental order lines use one consistent process for creating planning slots. It helps preserve expected rental scheduling behavior and reduces the risk of inconsistent planning results after recent changes.
Original PR description
Before this commit, since the merge of #91164, `_planning_slot_vals_list` method is duplicated in sale_renting_planning/models/sale_order_line.py file. This commit merges the both methods together to keep the behavior added in the one initially introduced before the fix merged.
The stool demo data now uses the correct color attributes instead of mismatched material values. This makes the demo Bill of Materials and assembly steps clearer and prevents incorrect product variant links in demonstrations or testing.
Original PR description
Versions -------- - saas-18.4+ Steps ----- 1. Install demo data; 2. open the Stool BoM; 3. check assembly steps. Issue ----- Mismatch between product attribute colors & materials. Cause ----- Commit f7ad739fd4b4 updated product attribute demo data. It replaced color with materials, and didn't account for attribute ordering being alphabetical instead of by time of creation. Solution -------- Change material attributes back to color attributes for stool demo data, and order attributes alphabetically to prevent confusion. Also provide unique references to product attribute value records to ensure the correct attribute value gets linked to the BoM lines. opw-4989005
Subscription sales orders can now be previewed even when no salesperson is assigned. This prevents an error that blocked administrators from reviewing customer orders created through the website checkout.
Original PR description
**Steps to reproduce:** 1. Install sale_subscription, payment_demo and eCommerce 2. Go to Website → Configuration → Settings and clear the Salesperson field 3. Create a subscription product with…
**Steps to reproduce:** 1. Install sale_subscription, payment_demo and eCommerce 2. Go to Website → Configuration → Settings and clear the Salesperson field 3. Create a subscription product with recurring plan and publish it. 4. Place an order for this product as a portal user and complete payment. 5. Log back in as admin, open the related Sale Order, and click Preview **Issue:** A traceback occurs:- ```"ValueError: Expected singleton: res.users()"``` This happens in _prepare_partner_addresses because user_id is not set on the Sale Order. **Cause:** https://github.com/odoo/enterprise/blob/6b449769d4bf2cdf6517a026706fd6ea55832975/sale_subscription/controllers/portal.py#L233 The code calls has_group on order_sudo.user_id without checking if user_id exists, leading to an empty recordset and singleton error. **Solution:** Add a fallback to handle cases where user_id is not defined, defaulting to False for multiple_addresses_enabled. opw-4947508 Forward-Port-Of: odoo/enterprise#91013
The Luxembourg and Romania reporting modules now only install automatically when the Accountant app is already selected. This avoids unexpectedly using the free app choice for Accountant when users choose another app in those countries.
Original PR description
When choosing one app free in these countries, Accountant is automatically installed. This should only be the case when Accountant is the one app free. Fix: Change the auto-install dependencies to ensure that these modules are only installed when Accountant is already installed. Forward-Port-Of: odoo/enterprise#91662 Forward-Port-Of: odoo/enterprise#91627
This fixes an issue where editing a signing template could replace a field popup title with the field's placeholder text. Users reusing templates will now see the correct field names or types, reducing confusion and preventing template corruption.
Original PR description
### Steps to reproduce:
- Create a document using a sign template.
- Add a new field or modify the placeholder of an existing one.
- Validate the changes.
- Notice title is replaced by the value entered in placeholder.
### Issue:
After editing a template that has already been used in a signed document, the title of each sign item popup is unexpectedly replaced with the value
entered in the placeholder for that item. This corrupts the template and results
in incorrect title of sign itme being shown when the template is reused.
### Cause:
The issue occurs because the title was being updated with the placeholder of that particular sign item.
### Solution:
Added a prop for title of sign item in SignCustomPopover so that we can make the title as name of the sign item or the type like ('Name', 'Text', 'Signature') rather than the placeholder of the sign item.
---
task-4872963
Forward-Port-Of: odoo/enterprise#91551
Forward-Port-Of: odoo/enterprise#90348