Daily updates from Odoo
Tuesday, June 9, 2026
35 changes · master
New functionality added to Odoo
This update improves the Timesheets Assistant by adding a new rule that suggests entries like "Working on <drawing>" based on Excalidraw drawings. This allows users to more easily and quickly record their time spent on projects using this popular drawing tool, streamlining timesheet creation.
Original PR description
This commit adds an `aw.rule` covering Excalidraw. Timesheets Assistant can suggest "Working on <drawing>" entries. task-6267748
This update enhances Odoo's email functionality by adding support for GIFs. Users can now include animated GIFs in their email communications, improving engagement and visual appeal. This change allows for richer and more dynamic email marketing and communication within the Odoo platform.
Original PR description
Task-5491965
This update adds a 'Job Position' field to the resource search view within the Planning module. This allows users to more easily filter and group resources by their job role, improving search efficiency and organization. This change does not affect material resources.
Original PR description
In this commit, we add the job position (`job_id`) field to the resource views in Planning. The search more popup on resources will display it by default, and users will be able to filter and group by it. Importantly, this is not added to the Configurations -> Materials menu because this does not apply to material resources. task-6164222
Enhancements to existing features
This update enhances the partner VAT listing report by grouping results first by VAT number. This change provides a clearer and more accurate view of partner VAT information, especially when multiple partners share the same VAT number, improving data visibility.
Original PR description
Add another level of grouping to the partner vat listing report to group first by vat number as there might be different partners sharing the same vat so it is more appropriate and better for visibility to have them grouped by vat. task-6133010
This update aligns the subtotal fields within subscription sales orders with the existing margin layout, creating a more visually consistent and professional appearance. This change improves the overall presentation of sales order totals, enhancing the user experience for sales teams and customers. It’s a minor improvement focused on aesthetics and clarity.
Original PR description
Adapt subscription subtotal fields layout to match the margin section style and improve consistency in the sales order totals area. Community PR:https://github.com/odoo/odoo/pull/264260 Upgrade PR:https://github.com/odoo/upgrade/pull/10384 task-5887493
This update adjusts the minimum training time off threshold in the HR payroll system, effective September 1st, 2025. This change ensures compliance with updated Belgian regulations regarding training time off allowances. It also includes minor updates to time type definitions.
Original PR description
Adding a new parameter value for `rule_parameter_training_time_off_threshold` starting from September 1st, 2025. task-6230171
This update improves how commission losses are calculated for employees working on public holidays. The system now correctly determines the loss based on whether the employee joined during the current year (using daily average commissions) or during the current month (using monthly commissions divided by worked days).
Original PR description
Loss on commissions for public holiday must be handled differently when the employee arrived during the current year. If he arrived during the current year, the loss on commission must be the daily average commissions on the current year. If he arrived during the current month, the loss on commission must be this month commissions / number of worked days. task-6246944
Resolved issues and error corrections
This update removes unnecessary code from the timesheet grid component. Previously, unused data passed to the grid rows has been removed, streamlining the component and improving performance. This change ensures the timesheet grid is more efficient and maintainable.
Original PR description
Currently, we are not passing the relation props to the Many2OneGridRow component. Therefore, it is unused and has been removed. task: 4461272
This update simplifies the process of creating invoices for subscriptions by removing redundant logic previously handled by the Sales module. The change ensures Sales remains responsible for its button conditions, making the system more stable and easier to maintain. This improves the overall reliability of subscription billing.
Original PR description
Subscription used to override the Sales "Create Invoice" button to inject its own rules. That forced us to re-implement Sales visibility logic and keep it in sync, which is fragile and easy to miss when Sales evolves. Keep Sales in charge of its own button conditions and add a dedicated Subscription button only when needed. This preserves upstream behavior while still enabling subscription-specific flows. task-6208702 See also: - https://github.com/odoo/odoo/pull/263868
This update corrects a previous issue where the 'Add reaction' button was incorrectly displayed on all messages in the Odoo Chatter interface. The fix ensures the button's visibility is properly controlled, preventing a confusing user experience. This was a regression caused by a previous code change.
Original PR description
Before this commit, message action "Add a reaction" was always visible on all messages in chatter. This is a regression made by [1], in which the `Message.isActive` getter was overridden and mistakenly passed `undefined` as props to the `QuickReactionMenu`, which made it display the button. This commit fixes the issue by enforcing `Boolean()` on `Message.isActive`, so that this is properly provided to `QuickReactionMenu` to enforce its visibility state. https://github.com/odoo/odoo/pull/268832 [1]: https://github.com/odoo/enterprise/pull/110501 Before / After <img width="543" height="332" alt="Screenshot 2026-06-08 at 12 20 40" src="https://github.com/user-attachments/assets/92db46fd-f3d8-4d26-847e-c972e8103c83" /> <img width="527" height="313" alt="Screenshot 2026-06-08 at 12 20 53" src="https://github.com/user-attachments/assets/b49d18c2-b601-4567-872b-ceeb02ca1996" />
This update resolves an issue where PDF documents received via email were incorrectly displayed with a duplicate iframe preview. The fix ensures that the document preview accurately shows the PDF content, addressing a visual inconsistency. This improvement enhances the user experience when viewing documents attached to emails.
Original PR description
**Steps to reproduce:** - Install documents_account - Set up alias to catch incoming mails - Receive a mail with xml attachement which can be previewed as pdf - Go to Documents app - Click on the…
**Steps to reproduce:** - Install documents_account - Set up alias to catch incoming mails - Receive a mail with xml attachement which can be previewed as pdf - Go to Documents app - Click on the document preview - Preview is split in two iframes, both with the same content (pdf) **Issue:** Due to the `isPdf` patch the attachment can match multiple types for the preview (pdf and text) as both getter return `true`. ``` <iframe t-if="state.file.isPdf" ... <iframe t-if="state.file.isText" ... ``` It also seems that xml received by mail are imported as text, which is why the issue doesn't happen when manually uploading the same xml file. **Fix:** Ensure that if the document is matching `isPdf`, it doesn't trigger the second iframe with `isText`. Also it seems fixed in 19.0 as the text iframe is replaced by this xpath: `<xpath expr="//iframe[@t-if='state.file.isText']" position="replace">` which was added for https://github.com/odoo/enterprise/commit/de614ee5e9a087d49939c65c0118ae6164c7b31b related patch: https://github.com/odoo/enterprise/commit/ffcdd2275c8bf564e15151ccbcaf3965ed968450 opw-6018536 Forward-Port-Of: odoo/enterprise#118863 Forward-Port-Of: odoo/enterprise#112041
This update fixes a bug that prevented recent ratings from appearing in the Helpdesk rating dashboard. The change now uses the current date and time for searches, ensuring that ratings created within the last seven days are accurately reflected. This improves the accuracy of reporting and provides a more complete view of customer feedback.
Original PR description
Before this commit, the ratings created the current date at 23h will not been taken into account in helpdesk rating dashboard. This commit uses datetime.now() instead of date.today() to search the ratings in the last 7 seven days. runbot-error-230905 Forward-Port-Of: odoo/enterprise#119035
This update fixes a technical error that was preventing warning messages from being logged correctly within the IoT module. The issue stemmed from how data was being passed to the logging function, and this change ensures all warning messages are now properly recorded.
Original PR description
Error: ``` TypeError: Logger._log() got an unexpected keyword argument 'ip' ``` Cause: - The `**new_iot_record` unpacks the dictionary into keyword arguments for `Logger._log()` instead of supplying it as the value for the third `%s` placeholder in the warning message, causing the error because `_log()` doesn't accept keywords such as `version` or `ip`. sentry-7522168864 Forward-Port-Of: odoo/enterprise#119494
This update resolves a bug where the 'Reset Selected Work Entries' function in payroll was unexpectedly deleting work entries. The issue stemmed from incorrect time zone handling, which caused the system to incorrectly identify and remove entries. The fix ensures accurate work entry management regardless of employee time zones.
Original PR description
Setup: Set the work entry source to attendance for an employee with active contract and change his timezone so that it differs from the working schedule one. Reset previous/next day delete Work Entry (payroll) - Step to reproduce: after an attendance was created, go to "Work Entries" in payroll, select the previous/next day and hit "Reset Selected Work Entries". The Work Entry will disappear. - Cause: domain to nullify using wrong tz - Solution: adjust domain to use calendar tz - Test: testing positive ans negative tz in hr_work_entry_attendance (enterprise) Task: 6072325 Forward-Port-Of: odoo/enterprise#118940 Forward-Port-Of: odoo/enterprise#114148
A technical issue preventing users from configuring billing targets within the Timesheets module has been resolved. This change ensures that users can correctly set billing rates for employee time entries, improving the accuracy of billing data. The fix addresses a problem related to a required field within the Timesheets configuration.
Original PR description
… of employees Prerequisites to reproduce: - Enable `Billing Rate Indicators` in timesheets. - Change timesheet access of user to `User: all timesheets` - Remove Employee access Steps to Reproduce: - In Timesheets app, from configuration go to `Billing Time Targets` - Click on view button on any row Issue: - A traceback breaking the flow. Reason: - We use `hr_presence_status` widget which requires `work_location_type` field, change made from https://github.com/odoo/odoo/commit/0496ed10636c7b2dfde7038a43494d4edbd9f95b. - Thus unavailability of field causing the traceback. Fix: - Add a related field for work_location_type from which we get the value. Forward-Port-Of: odoo/enterprise#97502
This update corrects a previous issue in the overtime tour by changing the tracking method field from a dropdown to a checkbox. This simplifies the process for employees and administrators, ensuring consistent and accurate overtime tracking. The change also includes improvements to the tour's execution flow.
Original PR description
The tour previously matched the tracking method field with his previous implementation, where it was a dropdown selection, while now is a checkbox. task-6197878 Forward-Port-Of: odoo/enterprise#116733
This update resolves a bug that prevented users from creating new social media posts when no social account was configured. The fix prevents a crash caused by attempting to measure the width of a read-only text area, ensuring a smoother post creation experience.
Original PR description
Steps to reproduce: 1. Install social module 2. Keep no social account set 3. Create a new post by social media > posts menu > new Issue: We got a traceback saying: `OwlError: An error occured in the owl lifecycle (see this Error's "cause" property) TypeError: Cannot read properties of null (reading 'getBoundingClientRect')` Cause: When no social account is set, the message field renders in read-only mode, so the <textarea> is never mounted, and textareaRef.el is null. The useEffect tracking the textarea's width fires and crashes. https://github.com/odoo/enterprise/blob/77be4285785f9d8a462b99b23185a9aefeae4482/social/views/social_post_template_views.xml#L37-L41 Solution: Add a null guard on textareaEl inside the useEffect callback so that the width computation is skipped when the textarea is not present in the DOM. opw-6218431 Forward-Port-Of: odoo/enterprise#117599
This update optimizes the timesheet grid by preventing unnecessary reloading of the entire form when you switch focus between the timer and other fields. This results in a smoother, faster experience for users entering and editing their timesheets. It’s a small but important improvement for efficiency.
Original PR description
This PR prevents re-rendering the whole systray form view when focusing in and out of the timer field. We instead handle the focus in the widget, ensuring only the field itself re-renders. Task-6251180 Forward-Port-Of: odoo/enterprise#118820 Forward-Port-Of: odoo/enterprise#118524
This update fixes an issue where the ICP export generated inconsistent XML reports by using values from multiple company contexts. The change ensures a single, reliable company context is used, improving the accuracy and clarity of the exported data. This resolves potential confusion and ensures data integrity for reporting.
Original PR description
Description of the issue this commit addresses: The ICP export could mix values from different company contexts. In some cases, the main identifier and the fiscal entity division value did not come from the same source, which could create confusing or inconsistent XML output. --- Desired behavior after this commit is merged: This commit makes the ICP export use one consistent company context for identifier values, reuses precomputed values when available, and avoids overwriting them with unrelated defaults. --- task-6065382 Forward-Port-Of: odoo/enterprise#119549 Forward-Port-Of: odoo/enterprise#112995
This update resolves minor issues impacting payroll calculations for Philippine employees. Specifically, it corrects data group assignments and ensures accurate display of payroll information, improving the reliability of payroll processing. The changes also align with testing requirements for data updates.
Original PR description
- Fixes a small issue with the computation of the amounts, by updating the compute dependencies and following the parent view example of using force_save on the fields. - Correct the invisible condition on the rate fields to properly hide the column itself and not its content. - Correct the group set on the daily wage field of the employee model, which should be the payroll user group and not the hr user group - As required by test_hr_payroll_data_updatable, update the salary structure to not be no-update.
This update corrects a technical issue in the Swiss Balance Sheet reporting, specifically within the Equity section. It now accurately separates legal reserve and retained earnings, providing a clearer and more compliant financial report. The 'Annual profit or loss' field is now used solely for informational purposes.
Original PR description
Fix the Equity section in the Swiss Balance Sheet. Adding a new line 'Profit / Loss brought forward' for the result brought forward, that allows to separate the legal reserve and the results. The new structure for the equity section is: - Share, corporate or foundation capital - Legal reserve - Retained earnings - Profit / Loss brought forward - Previous years' unallocated profit or loss - Treasury shares The 'Annual profit or annual loss' is now purely indicative and is not taken into account in the equity computation, as the amounts in this section are considered in the new Retained Earnings section. task-6220525 Forward-Port-Of: odoo/enterprise#119625 Forward-Port-Of: odoo/enterprise#117601
This update resolves an issue where clicking on social media posts (Facebook, Instagram, YouTube) without comments would cause a system crash. The fix ensures that the comments dialog opens correctly for these posts, improving the user experience. It also aligns the appearance of comments counters for different social media types.
Original PR description
*=social_youtube,social_instagram,social_facebook,social_twitter, social_linkedin **How to reproduce:** - Open the Social Marketing feed. - Click a Facebook, Instagram, or YouTube stream post with no…
*=social_youtube,social_instagram,social_facebook,social_twitter, social_linkedin **How to reproduce:** - Open the Social Marketing feed. - Click a Facebook, Instagram, or YouTube stream post with no comments. **Issue:** - A traceback is raised because the click handler tries to call `click()` on a missing comments element. - The comments dialog does not open. **Cause:** - The kanban record click handler forwards clicks to `.o_social_comments`. - For some media, the comments counter is not rendered when the post has zero comments. - See: https://github.com/odoo/enterprise/commit/0293d3e839825a4333882e831960050070b02ba6 **Fix:** - Make the shared handler detect when the comments element is missing. - Delegate that case to media-specific handlers so Facebook, Instagram, and YouTube can open their comments dialog directly. - This commit also hides the X and LinkedIn comments counters when there are no comments, aligning them with the other social media cards. Task-6113089 Forward-Port-Of: odoo/enterprise#118006
This update fixes a potential error that could cause the system to crash when calculating rental availability for products with start and return dates. Specifically, it prevents issues arising from conflicting date ranges between the cart and the product page, ensuring accurate availability displays.
Original PR description
Preventing traceback on incompatible dates between the cart and the product page. How to reproduce: 1. Add to cart a product with periodicity Hours/Days with a start date = return date (e.g.: Projector). 2. Go to the product page of a product configured with Pickup > Return (e.g.: Premium Bike, Luxury Room) 3. Traceback, as we try to get the availabilities on a negative period. start date > end date, as both dates are equals and the time is set from the Pickup and Return fields. Forward-Port-Of: odoo/enterprise#119570 Forward-Port-Of: odoo/enterprise#119480
This update resolves a failed test within the Odoo payroll system. The change involved making payroll warning data updatable, ensuring the system's accuracy and stability. This fix prevents potential issues with payroll calculations and reporting.
Original PR description
In this commit, we fixed a failed test by setting some payroll warnings updatable. task-6247204
This update fixes an error in the calculation of a specific employee contribution (cotisation_812) related to end-of-collaboration payslips for Belgian employees. The previous calculation was incorrect, leading to inaccurate contribution amounts. This change ensures accurate reporting of these contributions, aligning with Belgian tax regulations.
Original PR description
* = l10n_be_hr_payroll, test_l10n_be_hr_payroll_account
STEP TO REPRODUCE:
------------------
1- Log into a belgium company
2- click on "End of collaboration" for an employee with a ANNUAL_SALARY_REVALUED equal to 52248.52
3- Generate the termination payslip
4- Check the cotisation_812 value:
this value will be equal at 1/2 * 1/100 * TERM_BASIC and not 1/100 * TERM_BASICThis update resolves an issue where the 'Sign Now' button wasn't appearing for internal users who were eligible to sign documents. The fix ensures the button is displayed correctly based on whether a signing order is in place, improving the user experience for internal signers.
Original PR description
Version: - saas-19.4 Steps to reproduce: - Create a sign request for an internal user. - Open the sign document from the Sign app. Issue: - The Sign Now button is not visible even when the current user is one of the signers. Cause: - The button visibility logic does not correctly check whether the current user is allowed to sign the document. Solution: - Show the Sign Now button when the current user is one of the pending signers and no signing order is configured. - If signing order is configured, show the button only when it is the current user's turn to sign. task-6267257
This update resolves a visual issue where the 'attendance-based' checkbox on employee payroll forms was missing its label and help text. The fix correctly positioned the field within the schedule group, ensuring it appears as intended for employees. This improves the usability of the payroll process.
Original PR description
[FIX] hr_work_entry_attendance: fix attendance_based checkbox Reproduction: Install hr_work_entry_attendance, employee form view, payroll tab, there is no label and help in the checkbox of attendance_based Bug cause: The field is added to the just after schedule group but indeed it should be added inside of the schedule group. Since it has not above group in view, it was not appearing properly. Solution: I put the field inside to the schedule group. task - 6284137
This update resolves a visual issue with the Frontdesk welcome screen, ensuring the privacy notice design adapts correctly to different content. This improves the user experience and maintains consistent branding within the Frontdesk module.
Original PR description
This PR fixes several visual issues caused the privacy notice design to be not tailored to any type of possible content. task-6022341
Features or functions removed from Odoo
This update simplifies the user experience by removing the 'Request Document' button from the activity overview. Previously, this button was confusingly placed, as it was used for scheduling activities rather than viewing them. This change ensures a cleaner and more intuitive activity overview for all users.
Original PR description
Purpose ======= - The request document should not be in the activity overview, as it is more like scheduling an activity rather than viewing the activity. Specification =============== - Remove the `Request Document` button from the activity overview to maintain consistency. Task-5424205
Code cleanup and technical improvements
This update simplifies the configuration of UOM views across various Odoo modules by renaming XML IDs. This change eliminates potential confusion between UOM and product UOM views, ensuring a cleaner and more consistent system. It’s a routine maintenance update to improve internal development processes.
Original PR description
This PR renames `uom.uom` xml ids to remove existing confusion with `product.uom` views and to match naming conventions. Community PR: https://github.com/odoo/odoo/pull/262588 Upgrade PR: https://github.com/odoo/upgrade/pull/10183 Task-6148914
This update simplifies automated tour steps within Odoo by removing unnecessary code and configurations. Specifically, it eliminates redundant wrappers and keys that weren't relevant in the test environment, resulting in a cleaner and more efficient codebase. This improves the overall performance and maintainability of the automated tour system.
Original PR description
In automatic tour steps, remove: - `_t()` and `markup()` wrappers (not needed in test context) - `tooltipPosition` keys (not relevant in automatic mode) - empty `run` functions
This update resolves an issue related to the rendering of account reports by replacing an outdated JavaScript technique. The change ensures the reports load and function correctly, addressing a potential performance bottleneck. This update aligns with best practices and avoids deprecated code.
Original PR description
Replaces useLayoutEffect with onPatched (useEffect was tried but fires before onPatched; setTimeout and Promise.resolve() chaining were also attempted to defer the call, but all microtask tricks still run before onPatched, where child field inputs are not yet focusable) WHY: useLayoutEffect is deprecated in OWL3[REF] : Replace useLayoutEffect Community PR: https://github.com/odoo/odoo/pull/268040
This update adjusts the helpdesk view to accommodate a change in how 'rotting field' widgets are organized. This improves the user interface and ensures the helpdesk functionality continues to operate smoothly. The change was driven by a task to streamline the helpdesk experience.
Original PR description
This commit adapts the helpdesk view to the split of rotting field widgets. Spotted in task~5262907
This update simplifies the codebase by removing the `useState` dependency, a component previously used for compatibility. The team has provided migration tooling and addressed the remaining instances of `useState`. This change improves code maintainability and efficiency.
Original PR description
In Owl3, uses of `useState` or replace with `proxy`. This commit removes `useState` from the compatibility layer, provides tooling for the migration in `owl3-migration` and removes the last uses of `useState`. *: ai, knowledge, obox, web_gantt
This update enhances the stability and reliability of Odoo's Web Studio module by utilizing 'contextvars'. These contextvars allow for more robust data handling within the editor, preventing potential issues and improving the overall user experience. This change focuses on internal improvements within Web Studio.
Original PR description
https://github.com/odoo/odoo/pull/256613