Daily updates from Odoo
Thursday, October 30, 2025
21 changes · master
New functionality added to Odoo
The recruitment AI feature has been separated into its own bridge module. This keeps the recruitment app cleaner while preserving AI-assisted candidate refusal workflows where the new module is installed.
Original PR description
Task-5079755 Forward-Port-Of: odoo/enterprise#95167
Enhancements to existing features
The bank reconciliation screen now reopens the chatter on the last statement line the user selected when moving back and forth. This saves time and reduces friction for accounting teams reviewing or reconciling bank statement lines.
Original PR description
This commit ensures that the bank reconciliation widget chatter shows the last selected statement line when the user navigates back and forth to the widget chatter. It does so by storing the statement line in the session storage. task-5114688 Forward-Port-Of: odoo/enterprise#96051
Demo employee data for Egypt, Jordan, Saudi Arabia, and Turkey payroll has been updated to include work addresses. This makes sample payroll setups more complete and realistic for testing, demonstrations, and evaluation.
Original PR description
Added the work address for employees in demo data of eg, jo, tr, and sa hr payroll. Task-5075966
This update adjusts payroll localization tests to match the current employee contract template workflow. It helps ensure contract templates continue loading correctly across multiple country payroll modules, reducing the risk of payroll setup regressions.
Original PR description
Update contract template whitelist unit tests to stop using hr.version.wizard and assert contract template loading via the employee’s contract_template_id onchange instead. task-5022102
The employee form no longer shows a separate extra hours checkbox because overtime is already managed through company settings. The extra hours field now appears only when an overtime ruleset is configured, making employee setup simpler and less redundant.
Original PR description
The extra hours checkbox in the employee form view was redundant, since overtime rules are already configured through the settings. This change removes the checkbox and makes the visibility of the extra hours field dependent on whether an overtime ruleset is defined. task-5082639 Forward-Port-Of: odoo/enterprise#94572
The product form now shows UrbanPiper-specific options only after an UrbanPiper point of sale is selected. This reduces clutter and makes setup clearer with improved labels and placeholders for food delivery-related details.
Original PR description
In this commit: --- - Improved visibility logic for UrbanPiper-related fields. - Now, fields like Meal Type, Is Recommended, Is Alcoholic, and Aggregators are only visible once a UrbanPiper: Point of Sale is selected. - Updated field labels and placeholders for better clarity. task-5215536
Resolved issues and error corrections
A supporting spreadsheet filter check was moved to the shared Odoo codebase where it is now needed. This prevents issues when community features use spreadsheet-style global filter operators without the enterprise-only declaration.
Original PR description
THe method `has_searchable_parent_relation` was declared in spreadsheet_edition but it's been used in Odoo community since the introduction of operators for the global filters in http://github.com/odoo/odoo/pull/215217. Task-5189262 Forward-Port-Of: odoo/enterprise#97938
A payroll accounting test for the United Arab Emirates localization was updated so its test user always has the needed payroll permissions. This prevents environment-specific test failures when demo data is not installed, improving reliability of automated validation.
Original PR description
The test `TestPayslipValidation` in `l10n_ae_hr_payroll_account` was failing on runbot without demo data:
AccessError: You are not allowed to access 'HR Work Entry Type'
This happens because the test user does not belong to a group with access to `hr.work.entry.type`. With demo data, the user inherits the necessary rights, but without demo data it fails.
This commit explicitly grants the test user the `hr_payroll.group_hr_payroll_user` group to ensure consistent access across environments.
[RB-232462](https://runbot.odoo.com/odoo/error/232462)
Forward-Port-Of: odoo/enterprise#96102Companies in Belgium that are not subject to VAT can now connect to CodaBox even when their VAT number is marked as non-applicable. The system will use the company registry number instead, reducing setup issues for eligible businesses.
Original PR description
If a company is not subject to taxes, they may not have a VAT number. In that case, the field can be left empty, such that the Company Registry is used instead for the CodaBox connection. However, the case where "/" (Non Applicable) was used as the VAT number was handled. This commit now handles VAT="/" in the same way it handles no VAT at all by using the company registry as a fallback. The commit also cleans up how the company ID is used to avoid duplicated code by creating a computed field. opw-5164155 Forward-Port-Of: odoo/enterprise#98277 Forward-Port-Of: odoo/enterprise#98025
Opening the duplicate transactions wizard without a linked journal no longer causes an error. This improves reliability for Accounting users and prevents an unexpected crash in a setup or administrative view.
Original PR description
When user opens the ``account.duplicate.transaction.wizard.form`` view, a traceback appears.
Steps to reproduce the error:
- Install ``Accounting`` module
- Using Open View, Open ``account.duplicate.transaction.wizard.form`` view
Traceback:
```py
UndefinedFunction: operator does not exist: integer = boolean
LINE 5: WHERE st_line.journal_id = false
^
```
https://github.com/odoo/enterprise/blob/8146cfc7b47ba8536f0fa5208cc69685371b55b8/account_online_synchronization/models/account_journal.py#L278
When the view is opened, the ``_compute_provider_duplicate_ids`` method is triggered,
which calls ``_get_provider_duplicate_transactions`` method.
Since no journal is linked to the wizard, it will raise the traceback from the above line.
ref: 218e8a365b153a202d062152ff69234482bcccf2
sentry-6943450225
Forward-Port-Of: odoo/enterprise#97196This fix aligns Enterprise and Studio navigation behavior with a related core platform change. It helps ensure page state is updated at the right time when screens load, reducing the risk of inconsistent navigation in the web interface.
Original PR description
*web_enterprise,web_studio This commit is the counter-part of odoo/odoo#233446 which changes the way the router state is updated by the action service when an action is mounted into the DOM. Some tests could be adapted and/or simplified.
This fix prevents users from creating a new workplace directly from certain employee and contract screens when that shortcut could trigger an error. Users can still select existing workplaces, reducing confusion and avoiding failed data entry in Swiss payroll workflows.
Original PR description
The _rec_name was previously set to partner_id, causing type errors when typing a new workplace name in a Many2one field. Couldn't change it to anything else, as one should have to create a new field in that stable version and this is not the best practice. As a workaround, the corresponding field in the l10n_ch_hr_contract_views.xml is removed from it the quick_create to prevent the creation of new names on the fly. task-5043056 Forward-Port-Of: odoo/enterprise#98173 Forward-Port-Of: odoo/enterprise#93424
The Chilean electronic invoicing process now selects a single matching company when multiple companies share the same tax ID. This avoids processing errors for organizations with branches or duplicate tax identifiers.
Original PR description
Before this commit, if multiple companies shared the same RUT (VAT), for example companies with branches, searching a recipient could return more than one company record. This could lead to errors when accessing variables that expect a single record. To prevent this issue, the search is now limited to one company record. OPW-5128543 Forward-Port-Of: odoo/enterprise#98352
Deleting a signer role from a Sign template now works correctly even when that role includes linked radio buttons. This prevents an error that could interrupt template editing and improves reliability for users preparing documents for signature.
Original PR description
Before this commit, when deleting a Signer role that already had a radio button dropped in the Template, it would trigger a traceback since the were trying to delete radio buttons individually. This was problematic because radio buttons are deleted in chain, so when deleting the first, we already delete all the remaining radio buttons and its chain link. After this commit, no issue is raised anymore when deleting a signer role, as radio buttons already deleted are now skipped in the code. task-5130925 Forward-Port-Of: odoo/enterprise#96097
The Sign app now creates new signer fields in a more reliable order, avoiding occasional display issues caused by timing delays. This helps users add signers without inconsistent or missing form elements.
Original PR description
Refactor setTimeout usage in sign_template_sidebar.js to prevent non-deterministic behavior. The previous implementation introduced potential timing issues by relying on a fixed 100ms delay, causing span and input components to not render consistently. The refactored code ensures proper rendering order and resolves the timing-related problem. task-4926187 Forward-Port-Of: odoo/enterprise#89741
Changing a contact's email address only from uppercase to lowercase, or the reverse, no longer triggers previously sent signature requests to be emailed again. This prevents duplicate messages to customers and reduces confusion around already issued signing requests.
Original PR description
Before this commit, when changing the partner email to uppercase or lowercase, it would resend sign requests emails for each previously sent signed request to that email. After this commit, we don't resend anymore the sign requests emails after a case sensitive email change of a partner. task-4844230 Forward-Port-Of: odoo/enterprise#87112
Appointment shared links now handle invalid booking URL entries gracefully instead of triggering an error. This prevents users from being blocked by a crash when an incorrect extra link is entered, improving reliability during appointment setup.
Original PR description
This error occurs when a user provides an invalid URL (e.g., one containing characters like “:”, “..”, etc.) in the link field. Steps to reproduce: --- - Install `appointment` module - Appointment >…
This error occurs when a user provides an invalid URL (e.g., one containing characters like “:”, “..”, etc.) in the link field. Steps to reproduce: --- - Install `appointment` module - Appointment > Shared Links > New - Fill `Appointment Types` > Link: `testurl:` (provide wrong link in Extra link) Traceback: --- `ValueError: Extra URL must use same scheme and host as base, and begin with base path` At [1], this error occurs because during computation, the method calls `urljoin`. If the URL contains a colon (e.g., ‘:’), it is compared with the base URL, and when they differ, a `ValueError` is intentionally raised at [2]. This leads to the observed error. This commit resolves the issue by catching the error when an invalid URL is provided. [1]: https://github.com/odoo/enterprise/blob/fc931c81ca7b2ebad220cf057e15583e046810b9/appointment/models/appointment_invite.py#L280 [2]: https://github.com/odoo/odoo/blob/9900375bc0bac2754150fd8cd6a1e45ecad8da83/odoo/tools/urls.py#L55-L58 sentry-6941171133 Forward-Port-Of: odoo/enterprise#97353
This fixes an automated test that was failing because it depended on parts of the system that were not actually available in its test setup. The test now uses available related apps, helping keep the validation pipeline reliable without changing customer-facing behavior.
Original PR description
Purpose: -------- Commit [1] added a test tour relying on the ai_app app which is not a dependency of test_discuss_full_enterprise (only ai is). This commit replaces usages of the views of the ai_app by the views of crm and im_livechat, which are dependencies of the module. Fixes https://runbot.odoo.com/odoo/runbot.build.error/233603 [1]: https://github.com/odoo/enterprise/commit/a7b6eb985e85477f38f15c0e269c2b5ae10d37f6 Forward-Port-Of: odoo/enterprise#98371
This update adjusts spreadsheet edition tests so they remain reliable after recent styling changes. It helps ensure list and pivot spreadsheet autofill behavior continues to be validated without affecting day-to-day users.
Code cleanup and technical improvements
This update cleans up automated test files by removing unnecessary grouping labels that duplicated file names or could be misleading. It does not change product behavior, but makes the test suite easier for developers to read and maintain.
Original PR description
This commit removes test files using a single 'describe' call to wrap its tests, with a name being either redundant with the test file itself or is too misleading.
Regular expression used to find isolated suites:
```js
/^\s*import.*(?:\n(?!describe\()(?!test\().*)+\ndescribe\("[\w\s.]+",.*(?:\n(?!describe\().*)+\n\}\);\n(?!\n)/
```
Tip for reviewers: tick **"Hide whitespace"** when reviewing diff
<img width="237" height="205" alt="image" src="https://github.com/user-attachments/assets/373f7cc6-5e0e-4599-968a-39aad8fac2f0" />
Community: https://github.com/odoo/odoo/pull/233006
Forward-Port-Of: odoo/enterprise#98254
Forward-Port-Of: odoo/enterprise#98046Unused Python code was removed from Point of Sale and related localization and integration modules. This cleanup reduces maintenance overhead without changing expected business behavior.
Original PR description
Remove useless python dead code in point_of_sale and submodules. task-id: 5006039 community PR: https://github.com/odoo/odoo/pull/224984