Daily updates from Odoo
Tuesday, January 13, 2026
30 changes · master
New functionality added to Odoo
This update introduces a standard tax configuration for Colombian companies requiring 'Auto-Withholding' tax. It simplifies the process by pre-defining the necessary accounting distributions (+100% to account 135515, -100% to 236575) to ensure accurate tax calculations and compliance, eliminating manual errors.
Original PR description
Colombian companies often require "Auto-Withholdings", where the seller must withhold tax from themselves. Configuring this manually is error-prone due to the specific +100/-100 distribution required to neutralize the invoice total. This commit adds a standard "VAT Self-Withholding 1.2%" tax to the localization data to serve as a functional reference. It is pre-configured with: - A new "VAT Self Withholding" tax group. - Repartition lines distributing +100% to account 135515 and -100% to account 236575. This ensures users have a ready-to-use example that handles the accounting movements correctly without affecting the invoice total. task-5430248
Enhancements to existing features
This update streamlines HR data management by consolidating view definitions for HR versions. Previously, separate views were used, but now they’ve been moved to the base HR module and inherited, simplifying maintenance and ensuring consistency across the Odoo Enterprise system. This change improves efficiency and reduces potential conflicts.
Original PR description
Since now hr_attendance needs to use almost the same list and search views for hr.version, the views are now moved to base hr and inherited. Related: https://github.com/odoo/odoo/pull/236555 Task-5189039
This update increases the length of partner names displayed on VoIP call forms, preventing text from being cut off. It also addresses mobile view issues, specifically preventing phone number wrapping and ensuring buttons align correctly on smaller screens. This enhances the user experience and ensures consistent display across devices.
Original PR description
[[IMP] voip: increase partner name field length + fix mobile issues](https://github.com/odoo/enterprise/pull/102876/changes/7f720734bfb0877576c1c90f87fef9288ab9d658) This commit increase the length of the `partner_id` field on the `voip.call` form view as the name gets cropped if it's long. It also makes the field in a smaller font on smaller screens. There were also some issues on the mobile view that were fixed: 1. The phone number was wrapped in a bad look when the screen is too narrow. Now, no text inside the phone field is wrapped. 2. Buttons next to the phone number were not wrapped on narrow screens , so they went beyond the screen. This commit ~~with the community PR: https://github.com/odoo/odoo/pull/241543~~ fixes it by adding an option to the phone field specifying whether we want to wrap the content of it or not. Task-5437330 ~~Community: https://github.com/odoo/odoo/pull/241543~~
This update simplifies the form used to manage document templates accessed through the Odoo interface. Previously, the form displayed unnecessary fields, creating a confusing experience. This change streamlines the form to only show relevant information, improving usability and clarity for users.
Original PR description
When opening the template properties from the editor cog menu, the standard form displays many fields that are not relevant in this context. This commit introduces a simplified form view showing only the necessary fields to improve clarity and UX. task-5428495
This update enhances the employee appraisal process by displaying a helpful empty search screen when no employees match a search query. This provides a clearer visual cue to the user, improving the overall user experience within the appraisal module. The change addresses a previous issue where no feedback was provided during unsuccessful searches.
Original PR description
## Issue & Reproducing steps See [community-229238](https://github.com/odoo/odoo/pull/229238) ## Purpose Display an empty search screen when a search in not successfull from the `hr_appraisal` employee selection. To display this empty search helper: - Go to appraisal app - Click on `Goal` menu - Create a new goal then click on `Save as Template` - Go back to goals - Click on `Open Library` button - Select the created template and click on `Continue` - Run a search with no result to see the helper appear. [community-229238](https://github.com/odoo/odoo/pull/229238) [task-4879557](https://www.odoo.com/odoo/action-4043/4879557)
This update removes outdated jQuery code from the hr_contract_salary module, streamlining the application and potentially improving performance. This change aligns with recent updates to Odoo's interaction framework, enhancing the overall user experience. The update was driven by a task to modernize the module's codebase.
Original PR description
This PR replaces all the Jquery code left in hr_contract_salary with plain JS. It follows this 87f9ff0a40694ae4b755da3dcf819a517aa9560d in which the public widgets have been replaced with interactions. task-5187485
This update enhances the Odoo search view by allowing related filters to be grouped together, reducing clutter and improving the user experience. The change collapses multiple filter options into a single, parent filter, making it easier to find specific search criteria. This improves usability and efficiency for users.
Original PR description
In some search views the list of filters can be huge which impairs the readability.
This commit adds support for inner filters in `<search/>` allowing them to be collapsed into a parent filter, reducing the number of visible entries in the search view.
The logic for date filters was partially merged with the one for inner filters since the syntax is the same.
It can be used inside a search arch as such:
```xml
<search>
<filter string="Priority">
<filter string="Urgent" domain="[('priority', '=', 3)]" name="urgent_priority"/>
<filter string="High" domain="[('priority', '=', 2)]" name="high_priority"/>
<filter string="Medium " domain="[('priority', '=', 1)]" name="medium_priority"/>
<filter string="Low" domain="[('priority', '=', 0)]" name="low_priority"/>
</filter>
</search>
```
task-5232012This pull request makes small visual updates to the DMFA views within the HR payroll module. These changes focus on improving the overall look and feel, making the interface more user-friendly and easier to navigate. This enhances the employee experience when managing digital certificates.
Original PR description
Small visual changes to forms and list views to improve the look and feel of the DMFA views. task-5166541
Resolved issues and error corrections
This update resolves an inconsistency in the SLSP reports, ensuring data is displayed in a predictable order. The change adds a standard sorting method to the database queries, preventing future test failures and improving report reliability. This ensures accurate reporting for Philippine tax compliance.
Original PR description
A recent test was added that tests the lines of the SLSP reports. Up until now, all tests were either testing specific lines (not the report structure) or the export, which uses different queries. This new test is now failing inconsistently due to the order in which the data is being displayed. We add default orderby in SQL queries of the SLSP (using the models default orderby) in order to make the order consistent and avoid further issues. Forward-Port-Of: odoo/enterprise#103925
This update simplifies the Point of Sale interface by removing a confusing option. Specifically, when the POS IoT module is enabled, the system now correctly displays both IP address and IoT options for device selection. This ensures a cleaner and more intuitive user experience for sales staff.
Original PR description
When there is only one choice in the selection of `use_type` (IP address or IOT), we hide it in the form. But when there is two choice (so, when pos_iot is installed), we show the two options. community pr: https://github.com/odoo/odoo/pull/242790
This update fixes a visual inconsistency in the HR appraisal module by aligning progressbar headers and content to the left. This ensures a cleaner and more professional appearance, particularly when the application is displayed in right-to-left languages.
Original PR description
**Progressbar** columns currently have **right-aligned headers**, which results in visual inconsistency. This change enforces **left alignment** for both the **progressbar headers** and their **column content** to ensure a clearer and more consistent layout. When rendered in an **RTL (right-to-left)** format, the headers and content are aligned to the **right** accordingly, consistent with the alignment of other fields in that format. Community: https://github.com/odoo/odoo/pull/241053 task-5248253
This update resolves a technical issue where the 'Mark as Ready' order completion process in UrbanPiper POS was failing, resulting in an 'undefined street' error. The fix ensures that the system correctly checks if a customer is assigned before completing the order, preventing this error and improving order processing reliability.
Original PR description
Steps to produce: ==== - Place an online delivery order through urbanpiper - Edit the order and remove customer - Complete the order as Marks as Ready - Print Reciept Issue: ==== - TB occurs stating undefined street Fix: ==== - Check whether partner is assigned or not task-5407001 Forward-Port-Of: odoo/enterprise#103736 Forward-Port-Of: odoo/enterprise#102100
This update corrects a discrepancy in the employment bonus calculations for the Belgian HR payroll module, ensuring accurate figures up to March 2026. This change addresses a technical adjustment to comply with updated Belgian tax regulations, guaranteeing accurate payroll reporting for our Belgian clients. The fix impacts the calculation of bonus payments.
Original PR description
Forward-Port-Of: odoo/enterprise#103820
This update fixes an issue where refund alerts were triggered incorrectly due to rounding differences in order totals. The change ensures that the system accurately compares refund amounts to original order amounts, preventing false alerts and improving the reliability of the POS system. This ensures accurate financial reporting and reduces potential customer service issues.
Original PR description
Before this commit, if the total amount of the order had rounding differences compared to the sum of its lines, the system could incorrectly trigger an alert stating that the refund amount exceeds the original order amount. This was due to a direct comparison between the two amounts without considering potential rounding issues. opw-5402240 Forward-Port-Of: odoo/enterprise#103758 Forward-Port-Of: odoo/enterprise#102224
This update resolves a display issue within the sign flow where the third dropdown option in the style list menu was not appearing correctly. The fix ensures that the system waits for font data to load before presenting the full menu selection, preventing a single option from being displayed intermittently. This improves the user experience during the sign process.
Original PR description
In this tour, when we want to select the third dropdown item in style list menu, we must wait that the rpc get_fonts/ is done, or else, it has only one item in the menu. When the menu is opened before the call is completed, there is only one style. When it is opened after, there is all styles loaded. runbot-error-id~232652 Forward-Port-Of: odoo/enterprise#103813
This update ensures that timesheet timers accurately reflect the task they're associated with when viewed in the list view. Previously, timers defaulted to the user's favorite project instead of the specific task, leading to inaccurate time tracking. This fix corrects this behavior.
Original PR description
### Issue: When looking at the list of timesheet for a task, we can start the time but the timer have default values that don't correspond to the task. ### Cause: `startTimer` in the `timesheetTimerService` is called from the timesheet timer hook without vals. It then makes an orm call to `action_start_new_timesheet_timer` to retrieve the fields (project or task) but as nothing is given in the vals, the selected project is the one returned by `_get_favorite_project_id()`. ### Solution: Get the context of the list view to retrieve the task or the project and input it in `vals`. opw-5342525 Forward-Port-Of: odoo/enterprise#103922 Forward-Port-Of: odoo/enterprise#102152
This update resolves a performance issue related to appointment scheduling within the HR module. Refactoring the HR system and moving employee data to a new model required a slight adjustment to database queries to ensure accurate scheduling calculations. This change improves the speed and efficiency of appointment slot availability.
Original PR description
Since hr has been refactored and lot of hr.employee fields moved to hr.version model, we have to increase Querycount by one as now _slot_availability_prepare_users_values_workhours function calls for hr.version together with hr.employee to get all the right values. Original function flamegraph  Since https://github.com/odoo/odoo/pull/202869, extra call for hr.version when we are trying to read employees[0].resource_calendar_id  Fixing [Runbot error 226700](https://runbot.odoo.com/odoo/error/226700)
This update corrects a persistent warning about duplicate payslips that appeared after deleting one. The fix ensures a payslip is first cancelled before deletion, preventing the warning from incorrectly triggering. This improves payroll accuracy and reduces potential user confusion.
Original PR description
### Steps to reproduce: - Create two payslips for the same employee for the same period. - Delete one of them; the duplicate warning still appears on the other payslip. ### Fix: - Before deleting a payslip, first cancel it so the current payslip can be skipped while checking for duplicate payslips. - Then invalidate the issue fields of the current payslip, which indirectly recompute the warning for duplicate payslips. task: 5427473
This update corrects a technical issue where the CFDI button was incorrectly displayed on payruns that didn't include Mexican payroll data. The change adds a check to ensure Mexican payslips are present before determining CFDI requirements, preventing the button from appearing unnecessarily. This improves the user experience and avoids potential confusion.
Original PR description
Before this commit, the computed fields `l10n_mx_cfdi_primary` and `l10n_mx_cfdi_secondary` would return True for payruns containing only non-Mexican payslips. This happened because `all()` returns True for empty iterables, causing the CFDI button to appear on payruns that have no Mexican payslips. This commit: - Adds explicit check for Mexican payslips existence before evaluating the CFDI state conditions - Hides `l10n_mx_edi_cfdi_origin` field for non-Mexican payslips - Adds test coverage for CFDI visibility on non-Mexican payruns task-5478038 Forward-Port-Of: odoo/enterprise#103783
This update resolves an issue where the attendance app would crash when an employee didn't have a linked calendar. The fix ensures the app handles employees with flexible schedules properly, preventing errors and improving overall usability. This change ensures all employees can accurately record their attendance.
Original PR description
Steps to reproduce: - Create an employee - Remove the calendar to have fully flex - Open the attendance app -> traceback When an employee has no resource calendar (resource_calendar_id=False), the _gantt_unavailability method would crash with a TypeError when trying to create a ZoneInfo from calendar.tz (which is False/None). This fix adds a check to skip calendar periods where the calendar is not set, consistent with how flexible calendars are already handled. task-5462208 Forward-Port-Of: odoo/enterprise#103243
This update ensures the databases module's app icon is consistent with official branding guidelines. The change corrects previous inconsistencies, maintaining a professional and aligned user experience. This is a minor visual improvement.
Original PR description
There were a few inconsistencies on the databases module's app icon. These have been corrected to align with the app icon guidelines. task-5186170
This update clarifies the terminology used for payroll input types, renaming 'Other Input Types' and 'Payslip Other Input Types' to 'Salary Input Types'. This change enhances user understanding and simplifies the payroll setup process, reducing potential confusion.
Original PR description
Updated the Input type for better clarity and easier understanding for users: - '**Other Input Types**' : 'Salary Input Types' - '**Payslip Other Input Types**' : 'Salary Input Types' **task-5474028** Forward-Port-Of: odoo/enterprise#103632
This update corrects a display issue where archived recurring plans continued to show up as pricing options on the website. The fix ensures that only active plans are considered when displaying pricing, improving the user experience and preventing outdated information from being presented. This change ensures accurate product pricing for customers.
Original PR description
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car…
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car Leasing (SUB)`. **Issue:** - Even after archiving the Monthly recurring plan, its pricing still appears on the website product page. **Root cause:** - At [1], when searching for a suitable recurring price, the system does not filter out pricing records belonging to archived recurring plans. - As a result, inactive plans are still considered during pricing selection. **Solution:** - In this fix, we ensure that recurring plan pricing is included only if the related plan is active. - Archived plans are now ignored, preventing them from appearing on the website. [1]: https://github.com/odoo/enterprise/blob/25edaac85f8fd1699bb78163b01efb966e7fb680/sale_subscription/models/sale_subscription_pricing.py#L78-L79 before <img width="340" height="184" alt="recurring_plan_before" src="https://github.com/user-attachments/assets/abac39fb-5765-4bc4-aec3-87eef7135a18" /> after <img width="337" height="168" alt="recurring_plan_after" src="https://github.com/user-attachments/assets/35ee92e8-e66b-4612-add3-58b277560ea5" /> **opw-5266333** Forward-Port-Of: odoo/enterprise#103473 Forward-Port-Of: odoo/enterprise#100587
This update ensures that eTIMS configuration warnings are only displayed for companies operating in Kenya. Previously, warnings were shown for all companies, causing confusion. This change streamlines validation and ensures warnings are relevant to users working within the Kenyan eTIMS requirements.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update resolves minor issues with the German Point of Sale certification process. Specifically, it now correctly transmits net values instead of gross values, includes previously prepared cash statement business cases, and ensures amounts are formatted precisely for Fiskaly's system. This improves the accuracy and reliability of the reporting.
Original PR description
In this commit: ------------------ - Transferred **net value** instead of **gross value** for `price_per_unit`. - Included **cash statement business cases** that were prepared earlier but not sent to Fiskaly. - Ensured all **amount fields are sent as strings** to Fiskaly. - Fixed rounding precision using `toFixed()` to maintain **2–5 decimal places**, as required by Fiskaly (e.g., `4.70` should not become `4.7`). - Adjusted logic for **customer account payments** to send the **adjusted order amount** instead of the original total. task: 5122652 Forward-Port-Of: odoo/enterprise#99643
This update resolves an issue where hosts with basic FrontDesk access couldn't check out visitors. The system has been updated to allow hosts to view and check out visitors assigned to them, improving usability and efficiency. This change ensures all hosts can perform the core FrontDesk function.
Original PR description
Before: * Hosts with only FrontDesk user access could receive the checkout email but got an access error when clicking “Check Out Visitor.” * They couldn’t read the visitor record because the rule only checked station responsible users. * The visitor is able to add the new button in the visitor menu. After: * Updated the access rule to also allow hosts to see visitors where they are listed as the host. * The visitor which is not responsible to station can't create new records Impact: * Hosts with user access can now open the visitor record and check out the visitor without any errors. task- 5373026
This update fixes a potential issue with how Odoo tours interact with the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup steps, the system now ensures the API call is fully executed before attempting to mock it, preventing delays or permission errors. This improves tour reliability and performance.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update resolves an issue where the IoT test button incorrectly displayed a 'success' status even when errors occurred during communication. The fix standardizes the data format used for IoT responses, ensuring accurate status reporting and preventing misleading feedback for users. This improves the reliability of the IoT device monitoring feature.
Original PR description
This commit fixes several situations where a positive status would be given by the test button despite the presence of an error: - If the websocket connection was used but there was a timeout - If the websocket connection was used but there was any other error - If any 6-digit error code was returned when using the stable IoT box To fix these issues, we stop using the `data['message']` field, since it gets ignored by the websocket confirmation controller. We now use the same result format as the other requests (and the stable IoT box). We also add a check for the `"timeout"` that we receive when a websocket request times out. Forward-Port-Of: odoo/enterprise#103963 Forward-Port-Of: odoo/enterprise#103817
This update ensures that thumbnails are correctly updated for requests shared publicly. Previously, public users couldn't update thumbnails on associated documents, even when they had access to the request itself. This change resolves a discrepancy in access permissions, guaranteeing consistent thumbnail updates regardless of user access levels.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
Miscellaneous changes
This pull request explores a preliminary change to temporarily disable certain menus within the Odoo Enterprise platform. This is a proof-of-concept (POC) to investigate potential performance improvements and streamline the user interface. The changes are currently contained within development branches and are not yet live.