Daily updates from Odoo
Monday, November 17, 2025
38 changes
2 changes
Enhancements to existing features
This update makes certain links in contract and payslip screens open the correct related record views. It improves navigation for HR users by sending them directly to the expected employee or contract information instead of an incorrect page.
Original PR description
The contract template form view is now written on the formview_action directly. This is a backport of https://github.com/odoo/enterprise/pull/97463 task-5082709
This change makes HR version records open in the most appropriate screen. Contract templates now open in the contract template view, while employee-related records open in the employee form with the right context, making navigation smoother and less confusing.
Original PR description
If the version record is a contract template, redirect to the version contract template view. Otherwise, redirect to the employee form view with the version_id in the context. This is a backport of https://github.com/odoo/enterprise/pull/97463 task-5082709 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
2 changes
Enhancements to existing features
This update prevents FEC imports from using excessive memory when matching imported entries to existing partners. Odoo now loads only the partner details needed for the match, which helps large imports complete more reliably.
Original PR description
### Description: When importing an FEC, Odoo will fetch all the partners to link the new imported records to the existing partners. The issue is that it triggers the prefetching of all the fields of the partners (304k partners in their case), causing a memory error. To avoid that, we can just fetch the field that we need (e.g. "name" and "ref"). ### Reference: opw-5153555 Forward-Port-Of: odoo/enterprise#98483
The IoT Box technical information now includes a clickable link to the exact source commit used in the image. This makes it easier to verify which build is running and speeds up troubleshooting and support checks.
Original PR description
To ease checking the HEAD commit on the IoT Box, we now compute the github url to the commit, and redirect to it clicking on the hash in the technical information tab. Forward-Port-Of: odoo/enterprise#99539 Forward-Port-Of: odoo/enterprise#99422
25 changes
Enhancements to existing features
Payroll labels and descriptions were updated to improve clarity and consistency across the core payroll app and several country-specific payroll localizations. This helps payroll users see more accurate translated wording in day-to-day payroll setup and processing.
Original PR description
task-4571722
The point of sale payment screen now hides the remaining or change status when the amount is zero. This reduces unnecessary information at checkout and makes the payment flow clearer for cashiers.
Original PR description
Before this commit : ------------ - Payment screen always showed Remaining or Change even when the amount was 0. After this commit : --------------- - Payment screen no longer shows the status section when the amount is 0. ------------------------------------------------- Task-5266175 Related PR-https://github.com/odoo/odoo/pull/235929
Users now see a clear banner when a spreadsheet is in the trash, and they can restore it directly from the spreadsheet view. Trashed spreadsheets are protected from edits, helping prevent accidental work on files that were meant to be removed.
Original PR description
Current behavior before PR: - When a spreadsheet was moved to trash, it remained editable. - No banner or notification indicated that the file was in trash. - Users could not restore a trashed spreadsheet directly from the view. Desired behavior after PR is merged: - Rename `isReadonly` variable to `hasWriteAccess` for clarity - Trashed spreadsheets become read-only. - A banner is displayed indicating the file is in trash, with a button to take it out of trash. - Updates are not real-time for other active users, but editing a trashed file raises a UserError. Task: [5030282](https://www.odoo.com/odoo/2328/tasks/5030282)
Adds realistic sample data for field service tasks covered by warranty. This helps teams demonstrate and test how warranty-related service work should be handled in the system.
Original PR description
This commit introduces demo data specifically designed for tasks that are covered under warranty within the industry_fsm_sale module. The purpose of this addition is to enhance the testing and demonstration capabilities by providing realistic examples of how warranty-related tasks should be managed within the system. task: 3853356
Field service users can now open an itinerary or call a customer directly from Gantt and calendar schedule popovers. This reduces extra clicks and helps teams coordinate visits faster without opening each task form.
Original PR description
_ *: industry_fsm, voip, gantt In this commit, we have made the process smoother for FSM users. Now, they can directly open the map or make a call from the Gantt popover, so there is no need to open the form view. task-3617833
Field service task chatter now shows how far timer start and stop times are from the planned task dates. This makes it easier for users and managers to quickly see whether work time was tracked in line with the schedule.
Original PR description
Added the time difference between start and stop times in the FSM task chatter.this helps users easily identify whether the timer was used according to the planned dates. Example: - Timer started at: 01/23/2025 15:11:29 AM (hh:mm before/after the start date) - Timer stopped at: 01/23/2025 15:11:43 AM (hh:mm before/after the end date) task-4510245
When users enable Do Not Disturb, incoming calls no longer make the softphone pop up, reducing interruptions during focused work. The calling status text was also clarified so users can better understand when a call is still being placed.
Original PR description
Before this commit, enabling `Do Not Disturb` mode only muted incoming rings, but the softphone still popped up on incoming calls, which could be distracting. Now, when `Do Not Disturb` is active, the softphone is not displayed at all. task-5262271 Forward-Port-Of: odoo/enterprise#99409
Knowledge article links now open a preview popover instead of immediately navigating away, helping users confirm the target content before opening it. The update also improves article link previews by showing the correct title, supporting summaries and cover previews where available, and preventing crashes in link handling.
Original PR description
This PR addresses the following: - Updated command link appearance to use btn-secondary styling. - Fixed /link to correctly display titles in previews and prevent crashes. - Ensured clicking on article links triggers a proper link preview popover. Task-4624296
This update modernizes internal VoIP calling code by replacing an outdated programming utility. It helps keep call handling and AI-related VoIP features compatible with the latest platform standards without changing the user experience.
Original PR description
Commit [1] deprecated the `Deferred` util. This commit replaces its usage in voip apps. [1]: https://github.com/odoo/odoo/commit/2067b860d2168ff581434f21b49355af92d09780
UAE payroll now applies the latest GPSSA and ADPF pension contribution rules for national employees. Contributions are calculated using the employee enrolment date, company sector, salary thresholds, and the company’s emirate, improving compliance and payroll accuracy.
Original PR description
Purpose: - Update UAE social insurance calculation for nationals to comply with the latest GPSSA and ADPF rules, ensuring correct contribution rates based on employee enrolment date, sector type, gross salary thresholds, and emirate of the company. Changes: - Updated "Social Insurance Company Contribution" and "Social Insurance Employee Contribution" salary rules logic. - Changed emirate determination to use the company address instead of the employee's personal address. GPSSA (All Emirates except Abu Dhabi): - If Pension Enrolment Date is before 31 Oct 2023 → Employee: 5%, Company: 15% (non-private) / 12.5% (private). - If on or after 31 Oct 2023 → Employee: 11%, Company: 15% (non-private) / 12.5% (private, gross < 20k). ADPF (Abu Dhabi): - If Pension Enrollment Date is before 1 Dec 2023 → Employee: 5%, Company: 15%. - If on or after 1 Dec 2023 → Employee: 11%, Company: 15%. Task-4991327
The Attendance Gantt view has been adjusted so the right fields are shown or hidden based on the newly introduced access group. This helps ensure users see the attendance information appropriate to their permissions without changing core workflows.
Original PR description
Update the Gantt form view's visibility attributes to accommodate the newly added field based on the new access group. Task: 4815633
The Twitter/X user search in Odoo Social now uses a search-focused endpoint instead of only checking for an exact username match. This makes it easier for users to find and select the correct Twitter/X account when setting up or managing social accounts.
Original PR description
This commit changes the endpoint used in the twtitter_get_user_by_username method to allow the user to properly search for a user on Twitter/X. The old endpoint didn't allow a proper search as it only returned a singular element. This means that we didn't do a proper search per se but only checked if the username provided existed. By now using `/2/users/search`, the user can properly search for a specific user on Twitter/X. task-5170291
The Indian payroll dashboard now warns when employees are missing required LWF numbers, helping payroll teams catch compliance data gaps earlier. Demo data was also adjusted and a dashboard pay run label was clarified for a cleaner user experience.
Original PR description
Add a dashboard warning for missing employees with LWF numbers. Remove the ESIC number from the demo data of employee Alisha Sharma. Change the string of the dashboard payrun. task-5222433
Payroll officers can now see and manage employee contract offers directly from the employee form. This removes the need to grant recruitment permissions just so payroll teams can handle offer-related work.
Original PR description
Previously, the "Offers" smart button on the employee form was only available to recruitment users. This limited visibility for payroll officers who also need access to contract offers. This commit: - Changes the button visibility to `hr_payroll.group_hr_payroll_user` in `hr_employee_views.xml`. - Adds missing access rights in `ir.model.access.csv` for `hr.group_hr_user` (inherited by payroll users). - Updates the module manifest to include the new security CSV. The goal is to ensure payroll users can access and manage offers directly without requiring recruitment rights. task-5085078
The payroll dashboard warning now checks for duplicate payslips across all relevant payslips, not just those in the latest batch. This helps payroll teams spot potential duplicate payments more reliably before processing payroll.
Original PR description
- update the warning to include all the payslip not only the ones on the last batch Task: 5186729
Companies can now choose whether employee payslips are emailed when they are validated, when they are paid, or not sent automatically. This helps payroll teams align payslip delivery with local practices and company policies.
Original PR description
Currently, employees receive the payslips through email right when the payslip is validated (When the journal entry is created), but in some countries, that should not be the case, as they expect receiving the payslip after it is actually paid. This commit allows the company to decide when payslips are sent, either on validation or on payment or never. Task-ID: 5168943
The fleet mobility card field is now limited to Belgian payroll and fleet localization screens. This keeps country-specific employee and fleet information visible only where it applies, reducing confusion for users in other countries.
Original PR description
Added a the mobility card field to the belgian localisation to make it exclusive to belgium after removing it from the hr_employee common vue. task - 5176316 Community PR : 232873
The Payroll work entry type screens have been reorganized to make setup easier to understand, with clearer sections, labels, tooltips, placeholders, and useful list filters. The change also removes redundant internal fields and updates related payroll, attendance, planning, holidays, and localization logic so the new category-based setup stays consistent.
Original PR description
The Work Entry Type form view needed to be refactored. The form view is now split into new groups (computation, display, exports code, benegit eligibility and description). Tooltips and placeholders…
The Work Entry Type form view needed to be refactored. The form view is now split into new groups (computation, display, exports code, benegit eligibility and description). Tooltips and placeholders have been added to avoid further confusion of the fields, and some naming repetition has been removed (e.g.: "Partena Code" under the "Exports Code" group). Some hidden columns and some filters have been added to the list view. Here is a visualization of all the visual changes that needed to be done: https://app.excalidraw.com/l/65VNwvy7c4X/4LJSOZo8W3D `_is_unforeseen` (and anything related to it) has been deleted, since it was not used anywhere. After the UI cleanup, some views became unused. I had to remove them in migrations. `is_leave` (and its mirrror, `is_work`) are redundant, especially now that we want to use a selection field instead. So I had to remove them both and replace every single one of their occurences in the code by a new selection field named `category`. A migration making sure `category` reflects the old `is_leave` needed to be put in place. Due to having to do some back and forth in how to handle `is_work`, I found some issues (unused file, bad `querySelector`, etc.) with the `boolean_radio` widget. Fixes of this widget are thus included in this PR. task-5162567
Indonesian payroll benefit inputs are now handled through salary rules, aligning them with the newer flexible benefits system. This makes payroll configuration more consistent and keeps related payroll inputs together for easier administration.
Original PR description
purpose: adapting the new system of flexible benefits coming from salary rules for id localization - removed the records in `hr.payslip.input.type` and converted them into corresponding salary rules - changed the tests in `test_salary_rule` to use salary rules instead of other inputs task-id: 5122371
The Documents module tests now wait more reliably for error messages before checking them. This reduces random test failures in automated checks, helping teams trust build results and avoid unnecessary investigation time.
Original PR description
The `unhandledrejection` event is triggered asynchronously in JS. Once this event is triggered, the error is handled and an error dialog might be displayed, depending on the type or error being thrown. In several tests, after throwing an error, we only waited for an animation frame before asserting the presence of the error dialog. This only works if the `unhandledrejection` event is fired before the next animation frame, which isn't guaranteed. When it is not the case, the test fails because the error dialog is not there yet. We already had to fix that kind of issues multiple times, after impacted tests were caught failing non deterministically on runbot (e.g. [1][2][3]). This commit fixes several other occurrences of the faulty pattern, which haven't been spotted yet but could have non deterministically failed as well. [1] https://github.com/odoo/odoo/pull/178491 [2] https://github.com/odoo/odoo/pull/235446 [3] https://github.com/odoo/odoo/pull/235464
Removed unused access group markers from accounting-related client-side templates because they were not being applied there. This simplifies the code without changing what users see or how permissions work.
Original PR description
The `groups` attribute in used in the QWeb template to display nodes based on access groups. This attribute is only available on server-side templates. This commit removes the useless `groups` attributes from client-side (aka. `static`) templates as they are not applied anyway.
The payroll wording has been updated from "Salary Structure" to "Pay Structure" across payroll-related screens and documents. This makes the terminology clearer and more consistent for HR and payroll users without changing payroll calculations or business processes.
Original PR description
*: hr_contract_salary_payroll, l10n_in_hr_payroll - Renamed the "Salary Structure" label to "Pay Structure". task-5262042
This update refreshes the UAE payroll setup with clearer company demo data, adjusted payroll structures and salary rules, and an Emirati working schedule aligned with the local timezone. It also improves how work addresses are determined so payroll settings better follow the logged-in company.
Original PR description
The cleanup includes: -Changing the company name to "My Emirati company". -Adjustments in payroll structures and salary rules. -New working schedule for Emirati company has been created to follow the Emirati timezone. -Improvements in the payroll module description. -Editing the logic behind the work address calculation to follow the logged-in company.
The Belgian payroll 273S report is easier to use with clearer year display, faster line creation, and improved generate buttons. These changes reduce confusion and streamline report preparation for payroll users, while ensuring records are linked to the correct company.
Original PR description
- Corrected display of Year field (removed thousand separators formatting) - New button now adds a new line directly - Extended binary_field widget to a custom widget for generate buttons - Added company id field - task-5167073
The Indian Payroll Reports menu has been reorganized so report entries appear in alphabetical order. This makes the list cleaner, easier to scan, and more consistent for payroll users.
Original PR description
Before: - The menu item of Indian Payroll Reports was not in order. After: - Arranged all Indian Payroll Reports in alphabetical order. Impact: - Keeps the reports list clean and consistent. task-5222845
7 changes
Enhancements to existing features
Employees can now view and select a VoIP provider themselves instead of relying on an administrator for every change. This makes provider switching simpler while still keeping the information they can access limited to what they need.
Original PR description
We now allow base.group_user to have read access to voip.provider so that user can change provider by themselves. Note that the visible fields to base.group_user are still limited. Task-5262635
This update adds a button to create a CFDI for all payslips in a payroll run at once, instead of handling them one by one. It helps payroll teams complete Mexican payroll reporting faster and with less manual work.
Original PR description
This adds a button to generate a CFDI for the whole payrun when ready. Task: 5224206
This update refreshes the automatic database backup module and its supporting files to align with the latest v19 codebase. It helps keep backup scheduling, notifications, and related documentation current so system backups remain reliable and easier to maintain.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Maintenance app is being updated so equipment opens in a table-style list by default instead of separate cards. This makes it easier for teams to scan, compare, and manage equipment details at a glance while keeping the same underlying features.
Original PR description
Thanks for asking me to work on this. I will get started on it and keep this PR's description up to date as I form a plan and make progress. <!-- START COPILOT CODING AGENT SUFFIX --> <details>…
Thanks for asking me to work on this. I will get started on it and keep this PR's description up to date as I form a plan and make progress. <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > In the maintenance module (addons/maintenance) for Odoo 18, change the equipment view from individual blocks (kanban view) to a table format (list/tree view) as the default view. > > The changes should: > 1. Modify the equipment action in addons/maintenance to set the tree/list view as the default view instead of kanban > 2. Update the view mode order to prioritize list/tree view over kanban view > 3. The tree view should display equipment in a table format with columns including: equipment name, category, equipment location, serial number, model, effective date, cost, and responsible person > 4. Keep all existing functionality intact - just change the default display format from kanban blocks to a table > > Files that likely need modification: > - addons/maintenance/views/maintenance_views.xml (to set default view mode) > - Any action definitions for equipment that currently default to kanban view > > The goal is to show all equipment in a table/grid format for better overview and management instead of individual card blocks. </details> *This pull request was created as a result of the following prompt from Copilot chat.* > In the maintenance module (addons/maintenance) for Odoo 18, change the equipment view from individual blocks (kanban view) to a table format (list/tree view) as the default view. > > The changes should: > 1. Modify the equipment action in addons/maintenance to set the tree/list view as the default view instead of kanban > 2. Update the view mode order to prioritize list/tree view over kanban view > 3. The tree view should display equipment in a table format with columns including: equipment name, category, equipment location, serial number, model, effective date, cost, and responsible person > 4. Keep all existing functionality intact - just change the default display format from kanban blocks to a table > > Files that likely need modification: > - addons/maintenance/views/maintenance_views.xml (to set default view mode) > - Any action definitions for equipment that currently default to kanban view > > The goal is to show all equipment in a table/grid format for better overview and management instead of individual card blocks. <!-- START COPILOT CODING AGENT TIPS --> --- 💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.
This update makes sure that links from payroll and contract screens open the correct employee or contract forms. It improves navigation for users by sending them to the intended record view instead of an incorrect or outdated one.
Original PR description
The contract template form view is now written on the formview_action directly. This is a backport of https://github.com/odoo/enterprise/pull/97463 task-5082709 Forward-Port-Of: odoo/enterprise#99486
When users open a version record in HR, they are now sent to the most relevant screen: contract templates open in the contract template view, while employee-related versions open in the employee form with the correct version already selected. This makes navigation more accurate and reduces confusion when reviewing or editing HR version data.
Original PR description
If the version record is a contract template, redirect to the version contract template view. Otherwise, redirect to the employee form view with the version_id in the context. This is a backport of https://github.com/odoo/enterprise/pull/97463 task-5082709 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235691
This update brings the Spanish tax return feature into version 19.0, aligning it with the newer product version. It keeps the existing BOE reporting options working, so businesses gain the new return process without losing current compliance workflows.
Original PR description
The tax return functionality was added in master in https://github.com/odoo/enterprise/pull/90615. This PR backports the functionality in 19.0 while preserving the previous BOE functionalities as per stable policy. An upgrade PR allows for a fallback to master behavor : https://github.com/odoo/upgrade/pull/8602. task-5113840
2 changes
Enhancements to existing features
The Peppol registration wizard now shows the warning only after an endpoint has been entered, reducing unnecessary alerts during setup. It also removes an outdated placeholder and a migration-related change, making the registration flow clearer and easier to use.
Original PR description
In the Peppol Registration Wizard: - Warning banner should only show up when endpoint as been filled - Remove placeholder - Remove the "in" migration Ref PR for master: odoo/odoo#234088 Task [link](https://www.odoo.com/odoo/project/967/tasks/5170831?debug=assets) task-5170831 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can once again mark individual invoice lines as “No Follow-Up” so they are excluded from reminder emails and reports. This restores a common accounting workflow and avoids sending follow-ups for amounts that should not be chased, while keeping the partner’s follow-up status accurate.
Original PR description
During the rework of the follow-up report, we removed the "No Follow-Up" field from journal items, making it impossible to exclude individual journal items from triggering a follow-up. In this commit…
During the rework of the follow-up report, we removed the "No Follow-Up" field from journal items, making it impossible to exclude individual journal items from triggering a follow-up. In this commit we do the following: - Re-introduce a field for that, since it is a common requirement to be able to exclude individual items from the follow-up reports. The field is stored on the journal item, but can also be toggled from the journal entry. In case of multiple installments on the invoice, toggling the field on one installment will toggle it for all installments. - Adapt the Follow-Up Report and Customer Statement variants of the Partner Ledger to add a toggle for the "No Follow-Up" field on each report line, that toggles the field on the corresponding journal item(s). - Prevent the follow-up status on the partner to change when all of the overdue journal items are marked as "No Follow-Up". - Make sure users can toggle the "No Follow-Up" setting on the invoice level when opening the "Overdue Invoices" view from the partner's "Accounting" tab. - Make sure all receivable/payable lines without a due date (either from a manual miscellaneous entry or a PoS entry) are put under the "Due" section in the Follow-Up Report instead of the "Overdue" section. Since there is no due date, they can't be overdue. - Make sure the PDF and XLSX exports of the Follow-Up Report don't include the "No Follow-Up" lines, and the customer follow up email only includes the amount of the other lines. Backport of https://github.com/odoo/enterprise/commit/74b9d2ef17e4f9a217db8432d886de2eca4baef9 and https://github.com/odoo/odoo/commit/2789a0fbfa358c5c164e44380c2a4a10e5679615 Task: 5138378 Upgrade PR → https://github.com/odoo/upgrade/pull/8864