Tuesday, August 12, 2025
20 changes · saas-18.4
Enhancements to existing features
Odoo IoT now ignores network-shared printers identified as passthrough devices. This helps avoid sending print jobs to printers that depend on another computer being online, reducing failed printing attempts.
Original PR description
If a printer has 'PASSTHRU' in its identifier, it means that it's shared by another computer on the network. If this computer is down, it will be impossible to print. Enterprise PR: odoo/enterprise#91725
This update adjusts website testing flows related to translating text options, helping ensure the translation experience continues to work as expected. It supports ongoing reliability for website editing and multilingual content without changing day-to-day user workflows.
Original PR description
translate_text_options --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The accounting reports test process now avoids repeatedly changing the same accounting entries during balance sheet checks. This reduces unnecessary test work and helps keep validation faster and more efficient without changing business functionality.
Original PR description
In `test_balance_sheet_balanced`, during the balance test the case first sets a bunch of lines to `posted`, then sets them (back?) to `draft`. However this is done per report, even though in the default mode the amls involved don't change between reports. Not only that, but since f2100c2654a068fe197025aecc605fdada3a919a each CoA's test case is within a savepoint, so the AMLs get reverted implicitly. Hence rejigger the thing to activate the relevant AMLs while setting up localization if not in `IDENTIFY_INCORRECT_ACCOUNTS` mode, that way we don't even pay for the activation, let alone do so repeatedly for each report we test. Backport of odoo/enterprise#88485 Forward-Port-Of: odoo/enterprise#91640
Users will now see a warning when an IoT printer is shared through another computer on the network. This helps avoid printing disruptions by making clear that the printer will not work if that other computer is turned off.
Original PR description
If a printer has 'passthru' in its identifier, it means that it is shared by another computer on the network. We now warn users that it will not work when this computer is off. odoo/odoo#221932
Resolved issues and error corrections
This update adds automated checks to protect a previous fix in the website editor. It helps ensure drag-and-drop editing does not incorrectly mark unrelated page elements as changed, reducing the risk of accidental save issues in future updates.
Original PR description
As a follow-up of commit [1] (then modified by [2]), which prevented the drag and drop to mark unwanted elements as dirty, this commit adds tests to make sure the fix is okay and to secure this behavior so nothing else can break it. [1]: 6fdf188fdf5cfdc11e5e1a8429d0a652054344de [2]: 42f14bf17042d6b53858e362eea7f06aacf49702 task-4367641
Code cleanup and technical improvements
This update reorganizes internal tests so the HTML builder can be tested without pulling in website-related dependencies. It also standardizes how test snippets are prepared, making future maintenance easier and reducing the chance of test instability.
Original PR description
**Description of the issue/feature this PR addresses** The `block_tab` test module was previously located within the `website/builder` test suite, causing unnecessary dependencies when testing `html_builder`. Additionally, test snippet setups within `block_tab` were inconsistent across the suite and difficult to read or maintain. **Current behavior before PR** - `block_tab` tests are part of the `website/builder` test suite. - Running `html_builder` tests requires loading website-related dependencies. - Test snippet setup varies between tests and is harder to follow. **Desired behavior after PR is merged** - `block_tab` tests are moved into the `html_builder` test suite. - `html_builder` can be tested independently without `website` dependencies. - Test snippet setup is standardized via a flexible helper, making it easier to implement and read. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where certain website elements, such as the shopping cart icon in the header, lost their media editing controls while editing a page. Users can now replace those media elements without accidentally making the icon text-editable.
Original PR description
Following this [commit], in some cases we need to have .o_editable_media class while the element is not editable itself. In order to do this, we shouldn't filter out elements again based on `force_not_editable_selector`s, but rather just not set element's contenteditable to true, when the element matches those selectors, then the .o_editable_media will be added successfully. To see the issue: - open website and start editing - inspect the cart icon in the header => It's missing the .o_editable_media class. Related to task-4367641 [commit]: https://github.com/odoo/odoo/commit/b455ea85853df
Website popup tests now wait for the actual show and hide events instead of relying on animation timing. This reduces false test failures and helps keep website changes safer to release.
Original PR description
The tests for showing and hiding popups were prone to failure as they relied on timing for the animation to complete. With this commit, we properly wait for the bootstrap event that is triggered when the popup is shown/hidden before continuing with the test task-4367641
Invoice PDFs sent by email now use the same customized file name as invoices printed manually. This avoids confusion for customers and keeps emailed documents consistent with the company’s report settings.
Original PR description
**Steps to reproduce**: - install the `accounting` module. - Go to `Settings -> Technical -> Actions -> Reports -> Invoice or Invoice without payment` - Change the printed report name - Try to print…
**Steps to reproduce**:
- install the `accounting` module.
- Go to `Settings -> Technical -> Actions -> Reports -> Invoice or Invoice without payment`
- Change the printed report name
- Try to print the report via the print menu (gear icon -> print) -> The report is shown with the new updated name.
- Try sending the invoice the regular way -> the attached invoice has the default name, Odoo ignores the changes.
**Observation**:
When printing the invoice manually, the file name correctly reflects the custom name configured in the report action. However, when sending the invoice by email, the attachment file name does not match the updated name and remains hardcoded.
**Issue**:
The email attachment file name is hardcoded in the mail sending logic. in the method:
```python
def _get_invoice_report_filename(self, extension='pdf'):
self.ensure_one()
return f'{self.name.replace('/', '_')}.{extension}'
```
It does not dynamically fetch the updated report name from the configured report action.
**Solution**:
When a custom report template is configured on the customer on field `(invoice_template_pdf_report_id)`, the system now dynamically uses the corresponding name from the report action for the email attachment.
opw-4923035
Forward-Port-Of: odoo/odoo#219279Quotation PDFs now correctly show zero values for custom number fields instead of leaving those fields blank. This prevents confusion for customers and sales teams when a quoted value is intentionally set to zero.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Using Studio, add an integer or float field to the sale order form; 2. upload a PDF using forms as a quotation header[^1]; 3. add a mapping of the form field to the studio field; 4. create a quoation using the header; 5. have the studio field be 0; 6. print quotation. [^1]: e.g. `tests/files/test_forms.pdf` Issue ----- The form field where the zero should be displayed is empty. Cause ----- When formatting values, it returns an empty string for any falsy value whose field isn't of type boolean or monetary. Solution -------- If the value is falsy, only return the empty string if the field type is not integer or float, this way, the zero value will get formatted in the final `else` as a string value (same as non-zero numeric values). opw-4937052 Forward-Port-Of: odoo/odoo#222487
This update corrects dependency declarations for the website and HTML builder areas so related features load with the components they need. It helps prevent setup or runtime issues in the website editing experience caused by missing or incorrect module dependencies.
Original PR description
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
Manufacturing unbuild operations now respect the decimal precision configured for the product's unit of measure. This prevents quantities with more than two decimals from being rounded or blocked, improving accuracy for products measured with finer precision.
Original PR description
Steps to reproduce the bug:
- Set the decimal precision and rounding accuracy for the unit of measure to more than 2 digits (e.g. 3)
- Create a storable product “P1”
- Create a manufacturing order to produce 1.234 units
- Confirm and validate it
- Try to unbuild the MO
Problem:
The unbuild form does not respect the product's UoM decimal precision, allowing only 2 digits for product_qty.
opw-4818591
Forward-Port-Of: odoo/odoo#220308
Forward-Port-Of: odoo/odoo#211944This fix ensures live chat visitors see the correct sender name in mail and chat messages. It prevents blank or missing names by using the live chat-friendly display name consistently.
Original PR description
Before this commit, using author.name directly could lead to not showing anything to livechat visitors. This is because the information is not send to the visitor. By using the authorName getter, we leverable the override in livechat and correctly use the livechat_username. task-4965911 Forward-Port-Of: odoo/odoo#221761 Forward-Port-Of: odoo/odoo#220104
This fixes a website editor issue where changing an image's position in a parallax cover section could distort the image size and placement. Business users editing website pages should now get predictable visual results when adjusting image positioning with scroll effects enabled.
Original PR description
Following the [html_builder refactoring], we had the issue with image's background overlay when we were changing its background position, which happened because the parallax interaction would change image's dimensions. To reproduce the issue: - open website, start editing - drop the `s_cover parallax` snippet and click on it - change its Scroll Effect option to "Zoom In" - Click on the Image Position option's crosshair => Observe that the image's dimensions and position are messed up. [html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb
Creating or editing a milestone from the All Tasks screen now automatically keeps the related project information. This prevents an unnecessary required-field error and lets users save milestones without extra manual steps.
Original PR description
### Steps to Reproduce: - Install sale project - Go to All Tasks - Open any task create and edit a new milestone and click on save ### Issue: - A required field error is raised because `project_id` is not set by default. - It should not be the case. ### Cause: - The `milestone_id` field's attributes are overridden in `sale_project`. - The context is missing `default_project_id` when accessing the milestone from the "All Tasks" view. ### Fix: - Passed project_id as default_project_id when opening milestone form. task-4953620 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220735
A flaky automated test in the barcode stock transfer flow was stabilized by waiting for the destination location update to appear on screen before continuing. This reduces random test failures and helps keep stock barcode releases more reliable without changing user-facing behavior.
Original PR description
A non-deterministic error has been occurring across all versions starting from 18.0 when running the `test_split_line_on_destination_scan`. problem: The issue lies in one of the steps of the tour,…
A non-deterministic error has been occurring across all versions starting from 18.0 when running the
`test_split_line_on_destination_scan`.
problem:
The issue lies in one of the steps of the tour, where the destination location of the remaining quantity is changed from WH/Stock to shelf1 (LOC-01-01-00). Right after this change, the test proceeds to assertLineDestinationLocation. However, the test step was previously waiting for the presence of the .o_validate_page.btn-primary element — an element that is already visible before the destination location update is actually applied. As a result, the tour sometimes skips to the next step prematurely, without ensuring the location change has occurred, leading to test failure.
Fix:
We replaced the trigger .o_validate_page.btn-primary with a more reliable condition: waiting for an element containing the destination text .../Section 1 (.o_line_destination_location:contains(".../Section 1")). This ensures that the step only proceeds once the destination update has been reflected in the UI.
Runbot-145458
Forward-Port-Of: odoo/enterprise#92006
Forward-Port-Of: odoo/enterprise#91927The Approvals app now handles cases where the same person appears more than once as an approver on a request. This prevents a traceback when users open My Requests and keeps approval workflows accessible.
Original PR description
#### Reproduce Approvals app -> My Approvals -> My Requests (Traceback Error) #### Issue The demo data contains a duplicate record for an approver (the user is set as default approver for the approval category and added again as record in xml data), so the request had 2 approvers with the same user. #### Fix Get the first record of filtered approvers for current user if there are many. task-4984137
The Spanish VAT record book export now recognizes the 0.26% and 1% equivalence surcharge purchase taxes. This prevents an error when exporting VAT books for invoices using these rates, helping Spanish companies complete tax reporting reliably.
Original PR description
Added to SURCHARGE_TAX_EQUIVALENT taxes 0.26% SE and 1% SE When using the Odoo VAT book (location Spain) and we have an invoice with the taxes 0.26% SE (0,26% Recargo Equivalencia Compras) 1% SE (1%…
Added to SURCHARGE_TAX_EQUIVALENT taxes 0.26% SE and 1% SE When using the Odoo VAT book (location Spain) and we have an invoice with the taxes 0.26% SE (0,26% Recargo Equivalencia Compras) 1% SE (1% Recargo Equivalencia Compras). a KeyError error occurs <img width="1147" height="517" alt="Captura desde 2025-07-30 09-37-13" src="https://github.com/user-attachments/assets/771fcf6e-efed-4e79-a1d4-a133c7072c2a" /> 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. In the company’s “Sales & Purchase” tab, set the Fiscal Position to "Equivalence surcharge". 5. Create a new quotation and select the company created in step 3. 6. Add a product with the following taxes: 0.26% and 2% VAT (G). 7. Add another product with the following taxes: 1% (SE) and 7.5% VAT (G). 8. Confirm the invoice generated from the quotation. 9. Go to Accounting → Reporting → Tax Report and select "Generic Tax Report". 10. Click the gear icon and select "VAT Record Books (XLSX)". OPW https://www.odoo.com/es_ES/my/tasks/4981807 @jco-odoo please review. Thank you! MT-10457 @moduon Forward-Port-Of: odoo/enterprise#92116
The US Payroll leave type setup screen now includes the intended fields and uses the correct label. This helps payroll administrators see and configure the required leave information without missing options.
Original PR description
Before this commit, the modification of the leave type views was not introduced in the manifest, resulting in the fields being absent from the view. This commit corrects the label as well as introduces that view in the manifest Forward-Port-Of: odoo/enterprise#87423
Automatic currency rate updates from the UAE Central Bank now include the Sudanese Pound. This ensures businesses using SDG receive current exchange rates without manual correction.
Original PR description
**Steps to reproduce**: 1. Install the `account` and `l10n_ae` modules. 2. Go to `Invoicing → Configuration → Currencies` and activate the `Sudanese Pound (SDG)` currency. 3. Navigate to `Settings → Invoicing → Currencies → Automatic Currency Rates`. 4. Select `[AE] Central Bank of the UAE` as the currency provider and manually fetch rates. <img width="463" height="181" alt="image" src="https://github.com/user-attachments/assets/31257e2e-8360-4cdb-877e-2ea41487ddea" /> 5. Return to the Currencies list. **Observed behavior**: - The rate for the `Sudanese Pound (SDG)` is not updated. **Root cause**: - The `SDG` currency is missing from the `MAP_CURRENCIES` dictionary, so the provider doesn't fetch its rate. **Solution**: - Add the missing `SDG` currency mapping to `MAP_CURRENCIES`. opw-4869204 Forward-Port-Of: odoo/enterprise#91790