Daily updates from Odoo
Monday, June 22, 2026
34 changes · master
New functionality added to Odoo
This update enhances the way our website displays appointment information to search engines and other online platforms. By adding Schema.org microdata, we're helping potential customers find our services more easily and accurately through search results. This improves visibility and potentially drives more leads.
This update adds the ability to associate contract dates with user groups within the HR payroll system. This allows for more precise tracking and reporting of employee contracts, improving payroll accuracy and compliance. The change impacts multiple localization modules.
Original PR description
Add the contract dates to the group_hr_user. Task: 6303353
This update introduces an AI-powered tool to automatically rename documents, streamlining document management. The previous demo tool has been removed, and the new system uses a standardized naming convention ([ORIGIN]-[SENDER]-[DOC_TYPE]-[DATE]) to ensure consistent document organization. This improves data clarity and efficiency.
Original PR description
This commit introduces a new AI-powered tool for automatically renaming documents, replacing the previous demo tool which has been removed along with its data. Key changes: - Added a standard default prompt for document renaming that follows the naming convention: [ORIGIN]-[SENDER]-[DOC_TYPE]-[DATE]. - Removed the obsolete demo renaming tool and its associated demo data. - Updated demo data of `documents_ai` bridges to make the demo prompt more readible task-5860839
Enhancements to existing features
This update improves the user experience by ensuring that clicking the budget icon on project overviews directly opens the budget action. Previously, this icon was inactive. This change streamlines the process of accessing project budgets, making it easier for users to manage financial planning.
Original PR description
**Before this commit:** - In the project overview, there's a button that indicates whether a budget has been set for a particular project. - Currently, clicking this button does not trigger any action. **After this commit:** - Clicking the budget icon on a project overview now opens the budget action. **Task-4841050**
This update removes an unnecessary abstraction layer in the SGK Hiring report process. The previous abstract model was deemed redundant as it was only used in one place, leading to a simpler and more maintainable codebase. This change improves efficiency and reduces complexity.
Original PR description
Previously, we had an SGK abstract model that was used by the SGK Hiring report. The idea was that we might extend its functionality to other models in the future, improving code readability and maintainability. However, it turns out that there is currently no benefit to having an abstract model, as it is only used in one place. Therefore, this change removes the unnecessary abstraction and keeps the implementation simpler. Task: TBD
This pull request makes minor improvements to the user experience within the MRP modules (mrp_plm, mrp_workorder, quality_mrp). Specifically, the 'Review Changes' button has been simplified for better clarity and the wording of the work order timer setting has been updated for improved understanding. These changes enhance usability and streamline workflows.
Original PR description
Minor UI tweaks for MRP submodules: * 'Review Changes' smart button renamed to simply 'Review' in PLM form view. * Reworded description for the WO timer setting. Built atop #112997. Task ID: [6152764](https://www.odoo.com/odoo/my-tasks/6152764)
This update enhances the layout of the MRP BOM line view by aligning the 'Bom Version' and 'Product Version' columns with their corresponding 'Final Product' and 'Bill of Material' counterparts. This change improves clarity and consistency for users reviewing BOM information, mirroring a previous update in the Odoo Community.
Original PR description
The 'Bom Version' and 'Product Version' columns positions are switched to match their 'Final Product' and 'Bill of Material' counterparts on the same view (see PR 262691 on Odoo Community). Task: 6113304
This update adjusts the Peru withholding module's test cases to align with current business practices. Previously, tests incorrectly generated withholding payments without associated bill taxes. Now, tests accurately reflect the real-world workflow of creating withholding amounts from bill taxes, streamlining the payment process.
Original PR description
As the should_withhold_tax field is being replaced by withhold, the Peru withholding module must be updated accordingly. In Peru, withholding can only be deducted when withholding taxes are applied on bills. However, the existing tests were creating withholding payments without adding withholding taxes on the bill and were manually providing withholding line values when creating the payment wizard. This no longer reflects the actual business flow. This commit updates the test cases to follow the real-world workflow by creating withholding amounts from bill taxes and letting the payment wizard generate the withholding lines accordingly. task-5438849 com:https://github.com/odoo/odoo/pull/266946 upg:https://github.com/odoo/upgrade/pull/10436
This update improves the marketing automation form by aligning its settings with a recent design change. The Autofocus plugin has been moved to a more accessible location, allowing it to be used in mass email campaigns. This ensures a smoother user experience for creating and managing marketing emails.
Original PR description
This PR updates marketing_automation overrides for the mailing form view to match the new structure of the view, and moves the Autofocus plugin from knowledge to html_editor to make it available in mass_mailing. task-5976317
This update simplifies the systray check-in process by aligning it with backend attendance settings. Previously, check-in was triggered by attendance status, but now it's controlled solely through backend configurations. This change streamlines the process and reduces complexity.
Original PR description
[IMP] hr_work_entry_attendance: systray check_in appearance adjustment Systray check-in was available when the employee or user is attendance based but now, it will only depends on attendance check-in from backend setting. So, no need to look to attendance_based now. task - 6309593
This update improves reporting for Belgian payroll runs by renaming and reorganizing key data fields. Specifically, it adds information on NSSO contributions and withholding taxes, providing a more complete picture of Belgian pay run data. This change is limited to the Belgium localization.
Original PR description
This PR expected only applies to Belgium Localization. There are fews changes in this view: - Rename Employer cost to Total Cost - Remove Gross - Add NSSO Contribution - Add Witholding taxes This changes to provide important information on belgian pay run task: 6290433
Resolved issues and error corrections
This update adds a validation check to ensure employees have a defined work schedule (resource calendar and hours per week). This prevents issues with the DMFA process, ensuring accurate payroll calculations and data integrity. It's a necessary step to maintain the reliability of employee data within the HR module.
Original PR description
Added an @api.constrains check on resource_calendar_id and hours_per_week. Raises a translated ValidationError if both fields are left empty. Added validation since it's causing issue with DMFA. task-6296689
This update resolves an issue where sending NFC-e invoices would halt the POS synchronization process when IAP credits were exhausted. The change prevents the system from blocking POS updates, ensuring continued functionality even when IAP credit limits are reached. This improves reliability and prevents disruptions to sales operations.
Original PR description
When sending an NFC-e, tax calculation is done by calling Avatax through IAP. If the IAP account has no credits left, iap_jsonrpc() raises an InsufficientCreditError. opw-6290857 Forward-Port-Of: odoo/enterprise#120700
This update resolves a minor issue where deleting an Obox didn't properly remove associated queue records, leading to potential data inconsistencies. It also corrects a bug where duplicate device identifiers caused incorrect device updates. This ensures accurate device tracking and management within the Obox system.
Original PR description
This commit fixes two minor bugs: 1. Deleting an Obox record does not delete the queue records associated with it. If you link an Obox with the same serial again, the old queue actions are linked to with the smart button, but don't actually link to the new Obox record. 2. If an Obox discovers a device with the same identifier as an existing device linked to a different Obox, the device is not added, instead updating the other device.
This update resolves an issue causing instability in the systray highlight test. The team replaced a complex, temporary workaround with a more reliable implementation of the `useEffect` hook. This ensures the test consistently passes, improving the overall stability of the timesheet grid functionality.
Original PR description
This PR fixes the systray highlight test by using a simplified version of the old implementation of the `useEffect` hook instead of the setTimeout hack
This update resolves an issue where an incorrect amount was being duplicated in the Balance Sheet report for French financial statements. The fix involves adjusting a journal entry to accurately reflect partner accounts and eliminate the double-counting of 45 accounts under 'Borrowings and Similar Liabilities'.
Original PR description
1. Create a journal entry with: -> 455100 Partners/Associates - Current Accounts - Principal → Credit -> 512001 Bank → Debit 2. Navigate to Accounting → Reporting → Balance Sheet. -> Observe that the amount of the journal entry appears twice in the Balance Sheet: 1. Under Borrowings and Similar Liabilities 2. Under Partners' Current Accounts 45 accounts should not be included under borrowings and similar liabilities opw-6271305 Forward-Port-Of: odoo/enterprise#120282
This update corrects a previous issue where fully settled customers with past pay-later payments were incorrectly prevented from seeing their customer statements. The fix now checks for any past pay-later payment lines, ensuring the statement button remains visible even after the customer's total balance is paid off. This improves the user experience for all customers.
Original PR description
The override of _compute_has_moves was checking `total_due != 0` to set `has_moves` on for PoS pay_later customers. Once the customer is fully settled however, `total_due` is 0 and the check does not pass anymore, so `has_moves` goes back to `False` and the Customer Statement button hides for them, even though they had past pay_later payment lines. The fix is to check directly for any past pay_later `pos.payment` instead, which covers the cases where partner had used pay_later payment methods before, regardless if they have settled their total due or not. opw-6173760 Forward-Port-Of: odoo/enterprise#120911 Forward-Port-Of: odoo/enterprise#116536
This update adds a required field for UNECE code to UoM units, resolving previous issues with UBL/CII validation. This ensures Odoo correctly handles international trade documents and improves compliance with industry standards. It addresses a limitation in the previous static mapping approach.
Original PR description
Before this PR, we mapped UoMs with UNECE codes using a static dictionary. However, due to this static nature, some UoMs were missing the UNECE code, which created validation issues for UBL/CII. To address this issue, we introduce a new UNECE code field on UoM, which will be utilised by the UBL/CII for setting unitCode on Quantity nodes. task-6171459 Community PR - https://github.com/odoo/odoo/pull/261975 Upgrade PR - https://github.com/odoo/upgrade/pull/10091
This update fixes an error in the l10n_ph withholding tax report that was incorrectly adding a negative sign. The change has been reverted to use balances directly, ensuring accurate reporting of withholding taxes and aligning with how the system handles signed amounts. This improves the reliability of tax reporting.
Original PR description
A negative sign was added in the tax report of l10n_ph. This should not have been changed. The reason for the change was to set the balance negate of the tag, but this is incorrect. We therefore revert this change and remove the absolute value and balance negate from the query in the withholding tax report. Relying on these to force sign changes is incorrect. We can instead use balances directly: - `tax_base_amount` is used natively (signed). - `balance` is negated for the report presentation (to show credit-side withholding as positive).
This update resolves an issue where the rental and subscription status badges were overlapping in the sales order view. The fix replaces a positioning method with a simpler float-end approach, ensuring both badges are correctly displayed without interference. This improves the visual clarity of sales orders.
Original PR description
Steps to produce: --- - Install the `Rental` and `Subscription` modules. - Create a rental product and a subscription product. - Create a sales order containing both products and set a rental period.…
Steps to produce: --- - Install the `Rental` and `Subscription` modules. - Create a rental product and a subscription product. - Create a sales order containing both products and set a rental period. - Confirm the sales order. Issue: --- - The rental status badge overlaps the subscription status badge. Root cause: --- - The rental status badge uses the position-absolute CSS class to place it at the end of the header. When the subscription status badge is also displayed in the same area, both badges are positioned at the same location, causing them to overlap. - After [commit], this issue is introduced. Solution: --- - Replace position-absolute with float-end so the badges remain right-aligned without overlapping. [commit]: https://github.com/odoo/enterprise/commit/32ab15dc1f26af0e3d510ec859b1ec428068e9b5 Before: --- <img width="122" height="64" alt="image" src="https://github.com/user-attachments/assets/e6b47c9e-ed59-4a4b-a95c-0318cc43660e" /> After: --- <img width="175" height="57" alt="image" src="https://github.com/user-attachments/assets/ea98f7a1-67f6-4b2b-b699-1f2cd3376d8f" /> opw-6295212 --- Forward-Port-Of: odoo/enterprise#120660
This update fixes alignment issues within the Timesheet Assistant, specifically in the 'By Project' and 'Chronological' views. The changes ensure that descriptions and times are displayed correctly, even with lengthy project details, and adds a necessary margin to the 'No time recorded' section for better visual clarity.
Original PR description
# [FIX] timesheet_grid: alignment issues in assistant This commit resolves the following alignment issues in the Timesheet Assistant: - View "By Project", the time wraps if description too long - View "Chronological", the time wraps if descriptions too long and project / task is not truncated - No timesheet recorded does not have a margin start # [FIX] sale_timesheet_enterprise: alignment issues in assistant This commit adds margin start on the "No (non-)billable time recorded" information. task-6264756 Forward-Port-Of: odoo/enterprise#121054 Forward-Port-Of: odoo/enterprise#120608
This update fixes an issue where timesheet settings (specifically, whether a project is billable) would reset after the timesheet systray was closed and reopened. Now, the selected billable status is correctly saved and retained, ensuring accurate tracking of billable hours. This improves the reliability of timesheet data.
Original PR description
## Behavior before PR 1. Open the timesheet systray. 2. Select a billable project. 3. Toggle the is_billable field. 4. Close and reopen the systray. 5. The is_billable value resets to its default instead of keeping the updated value. ## Expected Behavior After this PR The systray now correctly retains the is_billable value after being closed and reopened. ### Technical Notes The issue occurred because the systray view loads a sudo record that triggers compute methods, which overwrite the stored is_billable value. The fix ensures that after compute methods run, the saved is_billable value is preserved. Forward-Port-Of: odoo/enterprise#121087 Forward-Port-Of: odoo/enterprise#119681
This update resolves an issue in the Data Cleaning app where record IDs were incorrectly summed and displayed alongside group names, leading to truncated names and inaccurate counts. The fix removes the automatic summation of IDs in grouped list views, ensuring correct group names and counts are shown.
Original PR description
## Issue In the *Data Cleaning* app, when grouping records, the record IDs are summed up and appear right next to the name of each group, which: 1. truncates the name and count of the groups 2. does…
## Issue
In the *Data Cleaning* app, when grouping records, the record IDs are summed up and appear right next to the name of each group, which:
1. truncates the name and count of the groups
2. does not make sense (summing up IDs is pointless)
<img width="709" height="374" alt="6166623-before" src="https://github.com/user-attachments/assets/9d80b1ec-49c0-4b7f-8c6e-53846f9e433e" />
## Steps to reproduce
1. Install *Data Cleaning* (`data_cleaning`)
2. In Data Cleaning > Configuration > Field Cleaning, create a new rule (or edit an existing one):
- Any name
- Model: *Contact*
- Rule:
- Field to Clean: *Name (Contact)*
- Action: *Set Type Case* - Case: *All Uppercase*
4. Click the *Clean* button in the upper left corner
5. In Data Cleaning > Field Cleaning, group the records by any field (e.g., *Field*)
6. **The name of the group (_Name (Contact)_) is truncated, making it and the record count unreadable. This is due to the sum of _Record ID_ being displayed in the same row, even though that information is irrelevant.**
## Cause
The *Record ID* (`res_id`) field is an Integer field defined [here](https://github.com/odoo/enterprise/blob/3603afdd5c0d19c9276f3855156be4040ab5717d/data_cleaning/models/data_cleaning_record.py#L20). By default, Integer fields have the `sum` aggregator:
https://github.com/odoo/odoo/blob/681610c002a310f1c73fc2e5bec8d3dae27bc4a7/odoo/orm/fields_numeric.py#L17-L23
This causes the IDs to be summed up and appear in the group headers.
## After
<img width="740" height="370" alt="6166623-after" src="https://github.com/user-attachments/assets/a42d8f58-06dc-4308-8b6f-1ab09e8034f8" />
related: https://github.com/odoo/odoo/pull/265163
opw-6166623
Forward-Port-Of: odoo/enterprise#115492This update resolves an issue preventing the correct export of balance sheet data in XML format for Luxembourg companies. The system now automatically includes a 'date_from' field, aligning with changes in the Odoo 19.2 version, ensuring accurate financial reporting.
Original PR description
Steps to reproduce: - setup a LU company - go to balance sheet - export the xml file - validate the wizard -> Traceback, because the code expects the options to contain the date_from, which is no longer the case since 19.2 as the balance sheet has by default only a date_to. The solution is therefore to define it for the export to the beginning of the fiscal year. Forward-Port-Of: odoo/enterprise#120843
This update resolves an issue where focusing on the end date within a daterange widget incorrectly modified the start date. The fix ensures that the correct date field is updated when a user interacts with the input fields, improving data accuracy and preventing unintended changes.
Original PR description
When a daterange widget is used (e.g., `deferred_start_date` coupled with `deferred_end_date`), focusing on the end date input was incorrectly modifying the start date field. This occurred because the `focusin` event was resolving the field name from the parent widget rather than the specific input focused. This commit updates `onFocusFieldWidget` and `getFullFieldName` to accept and evaluate the specific `event.target`. For `o_field_daterange` widgets, it now extracts the correct field name from the target's `data-field` attribute, ensuring the correct date field is updated. opw-6250048 Forward-Port-Of: odoo/enterprise#121099 Forward-Port-Of: odoo/enterprise#120684
This update clarifies timesheet tracking by changing the AW rule to display the name of the GitHub Pull Request instead of its ID. This provides better context for users, making it easier to link PRs to the relevant project or task within the Timesheets Assistant.
Original PR description
Before this commit, the AW Rule used in Timesheets Assistant will display the id of the Github Pull request and the repository but that information is not always clear for the user to know which project/task is related to that PR. This commit changes the AW rule for Github to display the name of the pull request instead to have more context to easily match the project/task to the event created by that rule. task-6306166 Forward-Port-Of: odoo/enterprise#121231 Forward-Port-Of: odoo/enterprise#120676
This update resolves an issue where new tasks created through Timesheets Assistant rules were incorrectly set as private. The fix ensures that tasks are always associated with the selected project, improving workflow and data organization within the Timesheets module. This prevents confusion and ensures accurate task tracking.
Original PR description
Steps to reproduce: - Install Timesheets and enable Timesheets Assistant. - Go to Timesheets -> Configuration -> Assistant Rules. - Open an existing rule or create a new one. - Select a Project and enter a new Task name. Issue 1: - Click Create. - The task is created as a private task, and the project is cleared. Issue 2: - Click Create and Edit. - Remove the project and save. - The task is saved as a private task. Cause: - When using Create, the `default_project_id` from the context is not applied, so the task is created as a private task. - When using Create and Edit, users can remove the prefilled project before saving, which also results in a private task. Fix: - Pass `default_project_id` and `form_view_ref='project.view_task_form_res_partner'` in the context. This prefills the project and makes it required when creating a task. task-6293306 Forward-Port-Of: odoo/enterprise#121188 Forward-Port-Of: odoo/enterprise#120862
This update ensures that cancelled and no-show appointment bookings now correctly appear as 'free' in the calendar, rather than 'busy'. Previously, the calendar incorrectly marked these bookings as occupied. This change improves the accuracy of appointment scheduling and reduces confusion for users.
Original PR description
When an appointment booking status is changed to `cancelled` or `no_show`, the calendar event could remain marked as `busy`. This commit updates the appointment event synchronization so `show_as` is set to `free` for cancelled and no-show bookings, and restored to `busy` when the booking goes back to an active appointment state. task-6108930
This update corrects a technical issue where the wage types menu domain wasn't updated after changes to payroll rules. This ensures the menu accurately reflects the new capabilities of wage types, allowing for correct payroll calculations. It's a minor fix to maintain payroll accuracy.
Original PR description
After the change to rules that allowed them to be used in multiple structures, the domain for the wage types menu was not updated. This commit fixes it.
This update resolves an issue preventing accurate wage calculations within the Chinese payroll module. The fix corrects a domain filter, ensuring that the correct wage types are applied to employee payrolls. This ensures payroll processing is functioning as intended.
Original PR description
Oversight of c2f18f3de7ebaa418ae24b73dd4be7483972bbaf
A recent update altered how Odoo designates the default website based on sequence number. This change caused a test to fail because a newly created website was incorrectly set as the default. This commit resolves the test by adjusting the website sequence number, ensuring the test continues to run successfully.
Original PR description
The community PR connected to this PR changed the website behaviour such that the website with the lowest sequence is considered to be the default one. After this change, `test_helpdesk_team_visibility` fails. This happens because the test creates a website with the lowest sequence number which now immediately becomes the default one. This was not intended, and it breaks the test. This commit fixes the test by using an higher sequence number such that the newly created website does not get set as the default website. Community PR: https://github.com/odoo/odoo/pull/225335 Upgrade PR: https://github.com/odoo/upgrade/pull/9434 task-5028180
This update resolves a minor issue with the Enterprise version of Odoo's VoIP system. Specifically, it adapts the system to ensure proper subscription handling during startup, improving reliability. This change ensures a smoother and more stable experience for users.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/270281
This update resolves a problem where the point-of-sale tour was incorrectly proceeding before order preparation data was fully synchronized. This prevented accurate testing and could lead to inconsistent results. The fix ensures preparation synchronization completes before the tour continues, improving the reliability of the testing process.
Original PR description
The `applyBestComboMultiQty` tour was proceeding before the order synchronization and preparation requests had completed. This introduced timing-related inconsistencies in `test_apply_best_combo_multi_qty`, causing assertions to occasionally run against incomplete data. Add the required `waitRequest` steps to ensure preparation synchronization is finished before advancing to the next tour actions. Runbot Error-[939058](https://runbot.odoo.com/odoo/error/939058)
Code cleanup and technical improvements
This update ensures that references to the fragment query string functionality are accurate as it's being reorganized within Odoo. This change is part of a larger effort to improve the internal structure of the code and maintain consistency across modules. It ensures the social media integrations continue to function correctly.
Original PR description
The aim of this commit is to keep referencing fragment_to_query_string correctly as it is moved into `http.py`. task-id: 6071808 Forward-Port-Of: odoo/enterprise#121195 Forward-Port-Of: odoo/enterprise#121019