Thursday, August 7, 2025
11 changes · 18.0
Enhancements to existing features
This update adds shared automated checks for point-of-sale localization modules across multiple countries. It helps ensure country-specific POS requirements keep working consistently, reducing the risk of regressions in localized sales flows.
Original PR description
Thi commit add a generic tour that can be run in all pos l10n_modules. In some cases it requires some extra steps, this can be done with hooks. The hooks will execute different steps depending on the country the tour is run in. opw-4606788
This update adds automated testing support for Point of Sale setups that use the Belgian blackbox. It helps ensure the POS works correctly in this compliance-specific environment, reducing the risk of issues during validation or use.
Original PR description
This commit introduces the possibility to add tours to test the POS when using a Belgian blackbox. This is useful to verify the functionality of the POS system in a blackbox environment.
Resolved issues and error corrections
This update fixes the layout of work address fields on the employee form so state, city, and ZIP appear neatly on the same line. It improves readability and data entry consistency for users managing employee work addresses.
Original PR description
Task ID: 5002920 Description of the issue/feature this PR addresses: Align state, city, and zip fields horizontally on employee form Current behavior before PR: Not alignment in tab Employee > Work address as per fields state, city, and zip Desired behavior after PR is merged: Fields aligned
Creating or confirming a payment no longer fails when a payment method has no name. The system now safely treats the missing name as blank, allowing payment processing to continue without disrupting users.
Original PR description
Currently, a traceback occurs when the user tries to create a payment with a payment method line having no name. To reproduce this issue: 1) Install `Invoicing` 2) Open the `Bank` journal outgoing…
Currently, a traceback occurs when the user tries to create a payment with a payment method line having no name. To reproduce this issue: 1) Install `Invoicing` 2) Open the `Bank` journal outgoing payments from `configuration/journals` 3) Remove the `name` of the first payment method 4) Now create a new payment with type as `send` and journals as `Bank` from `Customers/ Payments` 5) Confirm it Error:- ``` TypeError: sequence item 0: expected str instance, bool found ``` This issue arises because we get the `paymnet_method_line_id.name` value as False. When the user removes the name of that `payment_method_line_id`. https://github.com/odoo/odoo/blob/3485abaa313263ea1946b9bdbffec5928d31fd72/addons/account/models/account_payment.py#L279 This leads to a traceback when `join()` is used between an empty string and a bool value. https://github.com/odoo/odoo/blob/3485abaa313263ea1946b9bdbffec5928d31fd72/addons/account/models/account_payment.py#L337 To resolve this issue, we can give a fallback value of an empty string. sentry-6067383068
When customer invoice numbers are resequenced, the related payment reference is now refreshed to match the updated invoice name. This prevents mismatched details when invoices are sent to customers and helps avoid payment confusion.
Original PR description
<b>Steps to reproduce:</b> 1. Go to Invoicing > Turn on debug mode. 2. Select a customer invoice and click on Actions > Resequence. 3. After resequencing, observe the "Other Info" tab — the payment reference remains unchanged. 4. Click "Send" on the invoice — the displayed invoice name differs from the payment reference. <b>Issue:</b> - The `payment_reference` field is not updated after the invoice `name` is resequenced. <b>Cause:</b> - The existing logic does not computes for `payment_reference`. Since resequencing updates the `name` without updating `payment_reference`, it remains outdated. <b>Solution:</b> - Manually compute the `payment_reference` for posted customer invoices after resequencing, using `_get_invoice_computed_reference()`. <b>opw-4903455</b>
Fixes an issue where quickly adding and removing carousel slides in the website editor could cause an error. This makes editing carousel content more reliable and prevents interruptions for website editors.
Original PR description
Previously, when rapidly adding and removing slides in the Carousel snippet (s_carousel), a JavaScript traceback would occur under certain conditions. Step to reproduce: 1. Drag and Drop a Carousel Snippet (s_carousel) on the page. 2. Rapidly `add -> remove -> add` slides button in editor. 3. Traceback occurs. Cause: - The issue occurred because the currently active slide was passed as the target to activate a snippet. During rapid DOM changes, the active slide could be destroyed or not yet rendered, resulting in a race condition and JavaScript error. Solution: - Additional guards have been added in the `_activateSnippet` function to ensure the `editorToEnable` target is still present in the DOM. task-4270369 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214721
This change prevents an access error that could occur when an employee without Time Off permissions changed a leave request from paid time off to sick leave. It helps ensure regular users can submit and adjust time off requests without being blocked by an internal overtime field.
Original PR description
Steps: ([demo](https://drive.google.com/file/d/1nphgXlAc_w3z0oE7ickuTaGhl5khLhxo/view?usp=drive_link)) - Remove Time Off access to "Demo" user - Login as demo - Request a "Paid Time Off" - Change the Request time off type to "Sick" Actual result: - overtime_id field access error Expected result: - no error Caused by: https://github.com/odoo/odoo/pull/207780 opw-4929659 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218095
The system now keeps the standard expiration message when an account is expiring for upsell-related reasons. This avoids showing renewal-specific wording in cases where it does not apply, making the message clearer for users.
Original PR description
Upsell expiration are not handled the same way as renewal expiration, so we can keep the default expiration message for any expiration reasons other than a renewal Forward-Port-Of: odoo/enterprise#91795 Forward-Port-Of: odoo/enterprise#91730
When warehouse staff split a reserved package during barcode processing, the new line now correctly keeps the original source package. This prevents missing package information and helps ensure partial deliveries are tracked accurately.
Original PR description
### Before this PR: - Put a package in WH/Stock with quantity 100 - Create delivery for partial quantity for example 50 - Go to app barcode - Try to split the package into two different packages scanning another destination Package - The splitted line will be created with empty package instead of the package already reserved before ### After this PR: Scanning another destination package , the new line created splitting the old one will have the package_id
The VoIP call timer now uses consistent device-side timing so it does not show a negative duration when server and user device clocks differ. This avoids confusing call displays and makes call duration tracking more reliable for users.
Original PR description
It was reported that the timer for the call would sometimes start as a negative number. Examining the code that computes it suggests that the timestamp sent by the server was a few seconds in the future compared to luxon.DateTime.now() (client time). This discrepancy is most likely due to the clock skew between the client and the server. This commit adapts the code so that it only computes time based on client-side values, effectively preventing clock skew issues. Task-4930666 Forward-Port-Of: odoo/enterprise#91738
Hong Kong payroll payslips now use the employee's regular name when surname and first name are not provided. This prevents payslips from showing an empty or incorrect legal name value, improving clarity for payroll users.
Original PR description
Explanation: In hong kong payroll, the legal name is joined by surname and first name. However both fields are not madatory therefore it will display False on Payslip. After this commit, it will display the name field when both surname and first name are not used. opw-4944968