Thursday, July 3, 2025
28 changes · master
Enhancements to existing features
Tax return setup has been streamlined so country-specific returns can be created automatically from their configuration. This reduces duplicate setup work and makes it easier to maintain reporting across many localizations while preserving flexibility for custom cases.
Original PR description
Previously, we had to define the return type in data and also instanciate it in Python. Now, we can specify the country_code when defining the return type which will allow it to be created in the base function generate_all_returns, if it's not specified it can still be created by hand with a custom override of the function. task-4841751
The bank reconciliation widget no longer shows a link to the bank journal entry when that entry is simply the bank transaction itself. This reduces clutter and helps users focus on relevant reconciliation information.
Original PR description
Before this PR: Link to the bank journal entry was shown in bank reco widget. After this PR: If the journal entry linked is the bank itself, then it will not be shown in bank reco widget. task-4872789 Forward-Port-Of: odoo/enterprise#87753
The stock barcode app's automated tests were moved to a newer testing framework. This helps maintain reliability for barcode picking workflows without changing day-to-day user behavior.
Original PR description
This commit converts and adds the QUnit tests into the HOOT suite. task-4028356
Demo employee records for Laurie Poiret and Max Durand now use the Belgian CP200 salary structure instead of a US setup. This makes Belgian payroll demo data more accurate and helps users see the right configuration for Belgian employees.
Original PR description
In the demo data, Laurie Poiret and Max Durand had the US structure type by default. This commit sets their structure type to CP200 as they belong to the belgian company. task-4879577
Salary configurator labels and terms now translate correctly when users switch from English to another language. This improves the experience for multilingual HR teams by reducing untranslated text in contract salary setup screens.
Original PR description
Originally, some terms remain untranslated when changing the language from English. Thus, those terms have been adjusted to adhere to automatic translation
Spreadsheet filters have been aligned with a recent change so relation filters now rely on the underlying record identifiers rather than display names. This keeps spreadsheet behavior consistent and helps prevent mismatches when records have similar or changing names.
Original PR description
This commit updates the tests to align with the changes made in the `ODOO.FILTER.VALUE` formula, as the value returned by the formula for a relation filter is now the technical value (ids) instead of the display value. Task: 4910291
Once a salary offer is generated, users can access available offers through the related smart button. This makes generated offers easier to find and reduces confusion in the recruitment and employee salary workflow.
Original PR description
Since an offer is generated, a user can access the available offers from the smart button Task: 4762685
Resolved issues and error corrections
The point of sale preparation display no longer shows an error when an order is marked done quickly in debug mode. This improves reliability for teams using preparation screens by avoiding a disruptive crash in a specific timing case.
Original PR description
Steps to reproduce: - Open a preparation display in debug mode - Make an order that will appear on the preparation display - Click on the done button before 5 seconds - Traceback will appear 5 seconds after the order was received Issue: When receiving an order useDelayedValueChange is called in the setup of the Orderline component. This method will try to access the props after a timeout. When the preparation orders are deleted in debug mode, the states are deleted from the front end. Since the props of orderline are the preparation state linked to it a traceback arises. Fix: A check is added to check if the state record exists. Forward-Port-Of: odoo/enterprise#88136
This fixes an issue where the journal entry shortcut could disappear when creating a draft entry for one payslip inside a batch. Payroll users can now reliably access related journal entries even when other payslips in the batch are not yet completed.
Original PR description
**Steps:** - Install the hr_payroll_account module - Navigate to the payroll menu and open a batch payslip. - Select a batch containing two or more payslips and create a draft entry for any single…
**Steps:** - Install the hr_payroll_account module - Navigate to the payroll menu and open a batch payslip. - Select a batch containing two or more payslips and create a draft entry for any single payslip in the batch. --- **Description of the issue/feature this PR addresses:** When a draft entry is created for a single payslip within a batch, the journal smart button becomes invisible. --- **Cause:** The issue occurs during the account move creation process. When generating an account move for a batch payslip, the process checks the status of all payslips in the batch. If any payslip is not in the done state, the account move is not created, resulting in the journal smart button not appearing. --- **Fix:** This PR adjusts the account move creation logic to allow account moves to be created for batch payslips, ensuring the journal smart button remains visible even if some payslips are not in the done state. task-4440533 Forward-Port-Of: odoo/enterprise#76681
The scheduled payroll data update has been adjusted to run once per week instead of more frequently. This reduces unnecessary background processing while keeping payroll-related data refreshed on a regular cadence.
Original PR description
Forward-Port-Of: odoo/enterprise#88564 Forward-Port-Of: odoo/enterprise#88492
The salary configurator will now show Belgium-specific minimum wage warnings only for employees in Belgian companies. This prevents irrelevant wage alerts from appearing for employees in other countries when the Belgian localization is installed.
Original PR description
The warning for a basic wage below minimum level appears for non Belgian employees, such as L10N_US, because the L10N_BE was installed. The logic for the warning has been limited to be applied only on Belgian companies. Task #4907771 Forward-Port-Of: odoo/enterprise#88939
The Kenyan payroll SHIF/NHIF report now selects payslips for the exact month chosen, preventing payslips from one month appearing in another month's report. The wizard text was also simplified by removing a confusing line about the selection period.
Original PR description
- load payslip according to the Month value, currently, may payslip appears on june selection - remove the line 'the selection will cover ...' task-4775801 Forward-Port-Of: odoo/enterprise#89128 Forward-Port-Of: odoo/enterprise#85609
Helpdesk email conversations now handle external recipients more reliably in automated checks. This helps ensure customer and external-contact replies include the right people while avoiding unnecessary alias recipients.
Original PR description
See community PR for more details. Task- Forward-Port-Of: odoo/enterprise#88900
A small typo in the Avalara tax integration was corrected so the system no longer calls a non-existent shared process during tax commitment. This is an internal reliability fix with no expected change to normal user workflows, but it helps avoid future errors in tax handling logic.
Original PR description
This is a typo from the most recent refactor [1]. The commit hook is specific to US avatax, there is no corresponding super().commit_external_taxes so this can be removed all together. This didn't break any tests because (at least with the standard code), super()._uncommit_external_taxes is an empty method that does nothing. [1] https://github.com/odoo/enterprise/pull/82623 Forward-Port-Of: odoo/enterprise#89216
Corrects how UK Bacs direct debit instruction data is returned so the system receives the expected values. This helps prevent processing errors introduced by a previous change and keeps direct debit workflows reliable.
Original PR description
Fix for b0083240ed6e0688f3ab2fe46916d71a6e08c06a where we returned a list of dicts instead of a dict of values.
Point of Sale users connected to UrbanPiper will no longer see the same online or offline status notification again after reloading the POS. This removes a duplicate alert and makes the checkout session experience smoother for staff.
Original PR description
Steps: ==== - Configured UrbanPiper credentials in `pos.config` and selected platform providers (e.g., Ubereats, Justeat). - On session start, a pop-up confirms the store is online on enabled platforms. - Reload the pos Issue : ==== - The same pop-up appeared again on POS reload, leading to a poor user experience. Fix: ==== - Removed duplicate call from `pos.store` that triggered provider status notifications unnecessarily. - Enhances user experience by preventing repeated popups on session reload. task-4879125 Forward-Port-Of: odoo/enterprise#88027
This fixes an internal reference so payroll expense records are handled as expenses rather than payslips. It helps avoid incorrect payroll-expense processing and supports more reliable payslip calculations.
Original PR description
this commit fixes wrong reference to `hr.payslip`. `payslip_expenses` should be a recordset of `hr.expense` and not `hr.payslip`. Forward-Port-Of: odoo/enterprise#89068 Forward-Port-Of: odoo/enterprise#88994
The Swedish SIE4 import now ignores extra object details that are not needed when importing transactions. This prevents those details from being mistaken for transaction balances, reducing the risk of incorrect accounting data during import.
Original PR description
The aim of this commit is ignoring the whole object list when we import transactions. The object list is represented by the elements between `{}` [[1]]. As we don't need these elements, we do ignore them to avoid a potential issue where we identify an element from this object list as the transaction's balance.
opw-4868415
[1]: https://sie.se/wp-content/uploads/2020/05/SIE_filformat_ver_4B_ENGLISH.pdf
Forward-Port-Of: odoo/enterprise#88892
Forward-Port-Of: odoo/enterprise#88784The Help menu now shows only the helpdesk teams assigned to the website a visitor is using. This prevents teams from other websites appearing in the wrong place, reducing confusion for visitors and staff managing support requests.
Original PR description
**Steps to Reproduce:** 1. Install the website_helpdesk module. 2. Create a Helpdesk Team A with 'Website Form' enabled, and set the website to 'My website' 3. Create another Helpdesk Team B with 'Website Form' enabled, and Set website to 'My website2' 4. Navigate to Website → Help menu on "My Website". **Observation:** - Both Helpdesk teams appear on "My Website", even though Team B is linked to "My Website 2". **Issue:** - The current domain filter only checks if the Website Form is enabled. - It doesn't restrict teams to the current website, so all teams are visible. https://github.com/odoo/enterprise/blob/b191f16abb5913893a228ccc4eedb8a2242a0298/website_helpdesk/controllers/main.py#L22 **Solution:** - Update the domain to filter on the website ID, to ensure only helpdesk teams related to the current website are shown. OPW-4673939 Forward-Port-Of: odoo/enterprise#88169
This fixes a mobile VoIP keypad issue where typing the first digit could place it at the end instead of the cursor position. Users entering phone numbers on mobile should now see more predictable and accurate input behavior.
Original PR description
This commit fixes a bug that caused the cursor in the keypad input to be displaced when typing on mobile. So, the first entered number was always to the end. This happens because the `on-touchend` event was calling another event (click) which may involve some changes in the UI that caused this. Steps to produce the bug: 1. Open VoIP wizard from mobile. 2. try to add numbers to the keypad. 3. You will see that the first number is always at the end. Forward-Port-Of: odoo/enterprise#89151
Adds test coverage to ensure employee records are created using the correct company context. This helps prevent payroll-related employee data, such as US social security number validation, from being checked against the wrong company setup.
Original PR description
This commit contains the test for commit f36104c17e0ac3cde788d195aab9394a35545d43 The test is in l10n_us_hr_payroll and not in hr as we need the ssnid constraint task-4897733 Forward-Port-Of: odoo/enterprise#88733
Features or functions removed from Odoo
Test tour delay settings that only apply in debug mode were removed from several modules. This keeps the codebase cleaner and helps prevent future additions of settings that do not affect normal product behavior.
Original PR description
In this commit, we remove the step_delay from the start_tour because since commit 968703b8f6e189aa1, step_delay is only used in debug mode. To avoid adding it to the codebase, we also add a warning.
Code cleanup and technical improvements
This update consolidates two related image capture components used in Quality and IoT workflows, removing unused legacy code. It helps keep the system easier to maintain while preserving the existing picture-taking experience for users.
Original PR description
This commit was part of the effort of removing code that is no longer relevant, as well as removing legacy code (QUnit tests). Because the tablet_image field was not used in a standalone way, it could be removed and its code moved to the widget that was extending it, iot_picture. The existing QUnit test has been converted to the HOOT test suite. task-4028356
The field service project form now uses Odoo’s own dropdown menu instead of a Bootstrap-based component. This supports the broader effort to reduce reliance on external interface components, making the backend easier to maintain without changing the business workflow.
Original PR description
As we try to remove as much as possible our dependency on Bootstrap components for the backend, this commit adapts code to the change made in community to replace the Project's templates dropdown by using our own implementation instead of the Bootstrap's one. task-4277543
The Documents app’s “New” menu has been rebuilt using Odoo’s own dropdown component instead of Bootstrap. This supports the broader effort to reduce third-party interface dependencies while keeping the document creation experience consistent for users.
Original PR description
As we try to remove as much as possible our dependency on Bootstrap components for the backend, this commit rewrites the Documents' "new" dropdown by using our own implementation instead of the Bootstrap's one. task-4277543
Miscellaneous changes
Before this commit, there was a traceback error when importing Winbooks having a different sign on the balance in company currency and foreign currency. There was a frozendict error in the `import_wizard/_import_move()`. ### Steps to reproduce: - Choose a Belgium company - Import a Winbooks file having a different sign on the balance in company currency and foreign currency - Adapt account in Chart of Account if needed - The traceback should be triggered What happens is that the record
Original PR description
Before this commit, there was a traceback error when importing Winbooks having a different sign on the balance in company currency and foreign currency. There was a frozendict error in the `import_wizard/_import_move()`. ### Steps to reproduce: - Choose a Belgium company - Import a Winbooks file having a different sign on the balance in company currency and foreign currency - Adapt account in Chart of Account if needed - The traceback should be triggered What happens is that the record where added to a list, then the app tries to change `'CURRAMOUNT'` value to 0. But it was a frozendict item, so it create an error. I replace the record added to the list with a copy version that can be mutated. opw-4794471 Forward-Port-Of: odoo/enterprise#87484
If not specified, the field `youtube_video_category_id` was treated as readonly by default. This commit explicitly sets readonly: false, ensuring that the field is editable. This prevents the value from being lost during posting, as it will now be correctly written to the database. Part of PR: #83571 opw-4646432 Forward-Port-Of: odoo/enterprise#87969
Original PR description
If not specified, the field `youtube_video_category_id` was treated as readonly by default. This commit explicitly sets readonly: false, ensuring that the field is editable. This prevents the value from being lost during posting, as it will now be correctly written to the database. Part of PR: #83571 opw-4646432 Forward-Port-Of: odoo/enterprise#87969
Steps to reproduce: 1. install `l10n_at_pos` module 2. run `test_10_neutralize` test adding missing commas in the `neutralize.sql` file to ensure proper SQL syntax. Error [link](https://runbot.odoo.com/odoo/error/181676) build_error-181676 Forward-Port-Of: odoo/enterprise#87975
Original PR description
Steps to reproduce: 1. install `l10n_at_pos` module 2. run `test_10_neutralize` test adding missing commas in the `neutralize.sql` file to ensure proper SQL syntax. Error [link](https://runbot.odoo.com/odoo/error/181676) build_error-181676 Forward-Port-Of: odoo/enterprise#87975