Wednesday, July 2, 2025
22 changes · master
Enhancements to existing features
WhatsApp conversations now include a “View Contact” action that opens the related contact profile directly. This helps users quickly access customer or operator details from a chat without navigating away manually.
Original PR description
For whatsapp conversations: Add a "View Contact" action that opens the whatsapp users partner form view. Community: https://github.com/odoo/odoo/pull/203079 task-4607618
Companies using Argentine electronic invoicing can now choose to show an “Operation Subject to Withholding” note on eligible invoice, credit note, and debit note PDFs. This helps businesses include the required withholding indication on type A and M documents when it applies, without forcing it for everyone.
Original PR description
In this PR: Add a company setting to show the legend 'Operation Subject to Withholding' on Invoice, Credit Note, and Debit Note PDFs of type A and M. Setting: Add Withholding Legend to Invoice PDF Field: l10n_ar_show_withholding_legend (per company) Shows the legend below the document letter when enabled. task-4837529
This change makes subscription stock tests choose the correct delivery record even when creation dates are not predictable. It helps keep automated checks stable and reduces false test failures without changing business workflows.
Original PR description
Linked to https://github.com/odoo/odoo/pull/171895. Test `simulate_period` was filtering only by date to get the last picking, but that was wrong. We should consider the two cases: 1st. Get the last picking created inside simulate_period(), independently of its date, as we cannot guarantee it will have the freezed date. 2nd. Only check for date in case picking was already created previously.
This update removes leftover development tasks from recent tax return improvements so the master branch stays aligned with Odoo's stable release policy. It affects accounting reports and Belgian VAT/Intrastat reporting cleanup, with minimal direct impact for day-to-day users.
Original PR description
Some leftover of the tax return misc improvements. Those were to be removed in master to not break the stable policy. See https://github.com/odoo/enterprise/pull/87351
Resolved issues and error corrections
Users who work with inventory and helpdesk but do not have sales permissions can now create repair-related tickets without seeing an access error. The change avoids checking a sales field when the user is not allowed to view it, keeping the workflow available while respecting permissions.
Original PR description
### Before this PR If an user has only inventory, helpdesk group and it does not have "sales" permission , the error "you have not access on this field sale_order_id" appear. It appears because on helpdesk_sale that field is restricted to two specific groups. In the same module that fields is popped out during copy , but in the prepare of helpdesk_repair is accessed without checking permission ### After this PR The field is not accessed if it has no permission Forward-Port-Of: odoo/enterprise#86514
Features or functions removed from Odoo
This update aligns Enterprise with related Community changes by removing references to an internal field that no longer exists. It also cleans up Helpdesk configuration by dropping an index setting that was ignored, reducing confusion without changing user-facing behavior.
Original PR description
#### [REM] base: remove complete_name from ir.model.fields Change tests because ir.model.fields.complete_name has been removed in community. #### [IMP] helpdesk: remove ignored index attribute Only trigram index is possible on translated fields. Since we add the warning in community version, remove ignored index attribute of helpdesk.sla.name https://github.com/odoo/odoo/pull/216355 https://github.com/odoo/upgrade/pull/7966
Code cleanup and technical improvements
The VoIP keypad search tests were reorganized into smaller, easier-to-maintain checks. This reduces the chance of unreliable automated test results and helps keep future VoIP changes safer to deliver.
Original PR description
This commit splits the "search for name" test into smaller tests for clarity and readability. It also removes the use of `edit` in test and uses `insertText` instead in order for the tests to be deterministic. This test was introduced in: https://github.com/odoo/enterprise/pull/87328 Forward-Port-Of: odoo/enterprise#89102
Miscellaneous changes
Before this commut, the static props of delivery_button was not defined. This commit adds empty static props to the DeliveryButton component. Forward-Port-Of: odoo/enterprise#87714 Forward-Port-Of: odoo/enterprise#87511
Original PR description
Before this commut, the static props of delivery_button was not defined. This commit adds empty static props to the DeliveryButton component. Forward-Port-Of: odoo/enterprise#87714 Forward-Port-Of: odoo/enterprise#87511
The employee form now shows Hong Kong-specific rental information only where relevant and restores the MPF payroll section layout. This prevents confusion for employees in other countries and ensures Hong Kong payroll details can be viewed correctly.
Original PR description
Fixes some issues with the employee view following recent updates. - the field l10n_hk_rental_id was visible to other countries - the whole mpf section was kept in a group, which broke the whole view
The Partner Ledger partner filter now includes company contacts even when they have a parent company. This helps users find and select the correct business partners when reviewing partner ledger reports.
Original PR description
Steps to reproduce - create a company - add a contact to this company - go to its contact form and transform this contact from Individual to Company - go to the Partner Ledger - open Partner filtering dropdown list Current behavior - show company and individual with no parent Expected behavior - show individual with no parents and all the companies - Company with parent company seems to be the expected behavior since 2016. If there is one, the Parent company appear in the contact form as defined [there](https://github.com/odoo/odoo/blob/9b03d99fd0174bd67c8ea30e5fd2c26fb2ad2467/odoo/addons/base/views/res_partner_views.xml#L168) opw-4729020 Forward-Port-Of: odoo/enterprise#87017
The Appraisals app now hides the configuration button for users who do not have permission to access it. This prevents confusion and keeps users from seeing options they cannot use.
Original PR description
This PR aims to hide the configuration button, if the user has no access in appraisal app task-4825879
This fix makes the Belgian payroll accounting eco voucher test reliable when only the relevant test module is installed, not just in full test environments. It helps prevent false build failures and keeps release validation more dependable.
Original PR description
Before this commit this test test_eco_vouchers was only working with all modules installed (classic runbot build) but was failing in singleapp mode (with just test_l10n_be_hr_payroll_account).
With this commit this test works as expected in both of them. (and with/)
Caused by:
```py
reference_year = fields.Selection(
selection='_get_years', string='Reference Year', required=True,
default=lambda x: str(fields.Date.today().year + 1 if fields.Date.today().month > 5 else fields.Date.today().year))
....
def _get_years(self):
today = fields.Date.today()
current_reference_year = today.year + 1 if today.month > 5 else today.year
return [(str(i), i) for i in range(current_reference_year, current_reference_year - 5, -1)]
```
A solution was to use freezetime
runbot error linked: https://runbot.odoo.com/odoo/runbot.build.error/226389
Forward-Port-Of: odoo/enterprise#86887This fix updates automated tests so they behave correctly whether the timesheet grid feature is installed or not. It helps keep project planning and timesheet-related quality checks reliable without changing day-to-day user workflows.
Original PR description
After this commit https://github.com/odoo/enterprise/pull/74528/commits/c0af404c2b3e08ec92243f4c070f915833b4a538 some tests are failing when we don't have timesheet_grid module installed as the allocated hours will get recomputed so the behavior will be different. To fix this we moved all of the tests that test allocated hours value to timesheet_grid and adapted another test to check whether we have the timesheet_grid module installed or not and upon this check we change the value that we are checking. runbot-115003 Forward-Port-Of: odoo/enterprise#88429 Forward-Port-Of: odoo/enterprise#81643
Urban Piper receipt headers now show the delivery identifier clearly when printed. This prevents confusion during order handoff and delivery tracking by making the identifier readable on physical receipts.
Original PR description
- When printing urban piper receipt the delivery identifier was not correctly rendered in the receipt header. - This is caused by the `text-muted` class on the element, which is causing the text to be too light to be correctly printed. task-id: 4881459 Forward-Port-Of: odoo/enterprise#88763 Forward-Port-Of: odoo/enterprise#88113
Installing Sales Planning no longer fails if the standard Hours unit of measure was previously deleted. The module now restores that required unit when needed and prevents it from being removed while Sales Planning depends on it.
Original PR description
Steps to reproduce: --- - Install `sale_management` module - Enable `Units of Measure & Packagings` - Delete `Hours` in Units & Packagings - Install `sale_planning` module Traceback: --- ```…
Steps to reproduce:
---
- Install `sale_management` module
- Enable `Units of Measure & Packagings`
- Delete `Hours` in Units & Packagings
- Install `sale_planning` module
Traceback:
---
```
ValueError: External ID not found in the system: uom.product_uom_hour
ParseError: while parsing /home/odoo/src/enterprise/saas-18.2/sale_planning/views/planning_role_views.xml:26, somewhere inside <record id="planning_role_view_tree_inherit_sale_planning" model="ir.ui.view">
<field name="name">planning.role.list.inherit.sale.planning</field>
<field name="model">planning.role</field>
<field name="inherit_id" ref="planning.planning_role_view_tree"/>
<field name="arch" type="xml">
<field name="resource_ids" position="after">
<field name="product_ids" widget="many2many_tags" placeholder="e.g. Cleaning Services" domain="[('planning_role_id', '=', False), ('type', '=', 'service'), ('sale_ok', '=', True)]" context="{ 'default_type': 'service', 'default_planning_enabled': True, 'default_planning_role_id': id, 'default_uom_id': %(uom.product_uom_hour)d, }"/>
</field>
</field>
</record>
```
The error occurred at [1] because the user deleted `Hours` from `Units & Packagings` before attempting to install the other module.
This commit resolves the issue by calling the `ensure_uom_hours` method before updating the `Hours` unit of measure in the data file. This method ensures the UoM is recreated if it no longer exists in the database.
[1]- https://github.com/odoo/enterprise/blob/adfa1ff2ee56b8d43666cd7c2565d6e9430aae48/sale_planning/views/planning_role_views.xml#L38
sentry-6595283261
Forward-Port-Of: odoo/enterprise#89046
Forward-Port-Of: odoo/enterprise#85286Updated payroll test demo data to use a Belgium-specific time off type. This prevents access errors when opening employee records in the Belgian payroll accounting test setup.
Original PR description
This commit fixes an issue in the demo data. A time off allocation was done using a time off type that is not in Belgium. This caused access error when trying to access the employee. This commit fixes the issue by changing the time off type to a belgian one. task-4896664 Forward-Port-Of: odoo/enterprise#88604
Printed payslips now display title-style salary rule lines with the correct formatting. This makes payroll documents clearer and more professional when generated for employees or records.
Original PR description
### Steps to reproduce: - Generate and print a payslip after marking a salary rule line as a title. ### Fix: - Added conditional styles and classes to fix the issue. task-4780481 Forward-Port-Of: odoo/enterprise#85607
Adds automated checks to confirm that date-based rentals count the full rental period correctly, such as January 1 to January 2 counting as two days. This helps prevent pricing or availability mistakes from returning in future updates.
Original PR description
Adds a tour that ensure date-based rental durations are set correctly, i.e. renting from 2025-01-01 to 2025-01-02 should result in a rental period of 2 days. This should prevent commits like 574e111 (reverted by 5982e11) from introducing faulty logic. Forward-Port-Of: odoo/enterprise#88950 Forward-Port-Of: odoo/enterprise#88264
The timesheet grid code was reorganized to use safer, cleaner markup handling. This reduces internal security warnings in automated checks without changing the user-facing timesheet experience.
Original PR description
Use markup template and html functions to make the code cleaner and safer while no longer triggering ci/security flag.
The Helpdesk Forum ticket creation code was cleaned up to use safer standard formatting methods. This reduces false security alerts in automated checks without changing the user experience.
Original PR description
Use markup template and html functions to make the code cleaner and safer while no longer triggering ci/security flag.
This update removes an outdated search view setting across multiple Odoo Enterprise apps. The change helps keep the interface configuration consistent with the main Odoo platform and reduces maintenance overhead without changing day-to-day functionality.
Original PR description
Remove all the occurrences of expand attribute from search view. Community PR : https://github.com/odoo/odoo/pull/215362 task-4840720
Web Studio has been updated to work with recent platform service changes for field information loading and tree processing. This keeps report editing and view editing tools aligned with the latest Odoo framework without introducing new user-facing behavior.
Original PR description
In https://github.com/odoo/odoo/pull/216038: - the hook useLoadFieldInfo has been removed and a corresponding function loadFieldInfo has been added in the field service. - a new service tree_processor has been added Here we adapt web_studio to those changes.