Monday, June 22, 2026
22 changes · master
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)