Tuesday, March 10, 2026
31 changes · saas-19.2
Enhancements to existing features
This update enhances the time off search feature within Odoo, making it easier for users to find and filter time off requests. A new 'In Contract' filter has been added, and the search results are now grouped by employee, improving organization. The default grouping has also been adjusted to exclude refused time off requests in the overview search view.
Original PR description
Time Off states are grouped under `Status`. Added new filter `In Contract`. Added back groupby by Employee. Added default groupby exclude refused in Time Off < overview search view. task-5941368
Resolved issues and error corrections
This update refines the visual style of polls within the Discuss feature, enhancing readability and user experience. Specifically, it addresses minor spacing issues, adjusts text and icon sizes for a cleaner look, and removes the 'Select' subtitle when a poll is closed.
Original PR description
- improved spacing (around card, between items, etc.) - small size and opacity / muted tweaks on text and icons - don't show "Select" subtitle when poll has closed Before / After <img width="1618" height="578" alt="Screenshot 2026-03-04 at 18 33 44" src="https://github.com/user-attachments/assets/bef827cd-d9f6-4067-8f77-4f3e17f6f73f" /> <img width="1581" height="571" alt="Screenshot 2026-03-04 at 18 32 51" src="https://github.com/user-attachments/assets/aeb9af94-5095-4784-8b87-d06876c52ba3" /> Forward-Port-Of: odoo/odoo#252074
This update fixes a visual issue where the "Permission Needed" label in the device selector on the public discuss page appeared misaligned or overflowed on smaller screens. The change ensures the label displays correctly and adapts to different screen sizes, improving the overall user experience across desktop and mobile devices.
Original PR description
**Description of the issue this PR addresses:** Ensure the `Permission Needed` label in the device selector on the discuss public page displays correctly and remains properly aligned when device…
**Description of the issue this PR addresses:** Ensure the `Permission Needed` label in the device selector on the discuss public page displays correctly and remains properly aligned when device permissions are not granted. **Current behavior before PR:** - Since this [PR](https://github.com/odoo/odoo/pull/247838), the label could appear misaligned or overflow the button on smaller screens, causing UI inconsistencies on both desktop and mobile. **Desired behavior after PR is merged:** - The label stays properly aligned and adapts correctly to the available space, preventing UI glitches across screen sizes. task-[6007860](https://www.odoo.com/odoo/project/1519/tasks/6007860) Before [Larger and Smaller Devices]: <img width="639" height="49" alt="image" src="https://github.com/user-attachments/assets/1cd1e240-0f40-42f9-bf93-823add81878f" /> <img width="343" height="39" alt="image" src="https://github.com/user-attachments/assets/a7a0f920-39e3-4bb3-a647-461c94cab395" /> After [Larger and Smaller Devices]: <img width="638" height="47" alt="image" src="https://github.com/user-attachments/assets/16aa419b-2190-4fd1-a459-8a376d90c349" /> <img width="425" height="41" alt="image" src="https://github.com/user-attachments/assets/fb245378-c04b-4dd8-8c5b-39ad4adefadf" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where meeting dates displayed in the CRM were incorrectly showing a day after the scheduled meeting. The fix aligns the displayed date with the user's timezone setting, ensuring accurate meeting information. This improves the user experience and prevents confusion regarding meeting times.
Original PR description
# How to reproduce - Use a browser extension to manage your browser's timezone - Set your browser's timezone to a timezone with quite a big delay (like "America/Grand_Turk" if you live in Europe) -…
# How to reproduce - Use a browser extension to manage your browser's timezone - Set your browser's timezone to a timezone with quite a big delay (like "America/Grand_Turk" if you live in Europe) - Go to the form view of an opportunity - Click on the smart button for meetings (Should be "No Meeting" if it is a new Opportunity) - In the calendar view, add a new meeting for very late in the day (Example : 2026-02-10 22:00:00 => 23:00:00) - Go back to the opportunity for view # The problem The date displayed is a day after the meeting that was just set up. Taking back our example, the date displayed would be 2026-02-11 # Why The calendar view uses the browser's timezone to manage the dates. The smart button does not. It is not possible to make the smart button use the browser's timezone, atleast in a clean way. That is because the smart button's data is managed by a python template, which does not have access to the browser's data. Trying to change the data displayed by the framework would be clunky as the html would need to be edited directly. The fix that I implemented follows what the hr_appraisal module does for it's smart button with a date: use the timezone set in the user's preferences. opw-5898520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251840 Forward-Port-Of: odoo/odoo#247984
This update resolves a technical issue that previously caused errors during the replenishment process in MRP, purchase stock, and stock dropshipping modules. The fix improves stability and reliability of these key inventory management functions.
Original PR description
Fix 705e27a caused a `Singleton Error`, which was then addressed in cd66456. This commit improves the follow up fix and adds a test. Forward-Port-Of: odoo/odoo#250983
This update resolves an issue where tip calculations in Point of Sale were incorrect when the decimal separator in Odoo settings was changed. The fix ensures the NumberBuffer service dynamically retrieves the correct decimal separator, preventing stale data from causing calculation errors. This improves the accuracy of tip amounts for all users.
Original PR description
Steps to reproduce: 1. Open the Point of Sale. 2. In Odoo Settings, change the Decimal Separator (e.g., from '.' to ','). 3. Go back to the PoS and add a Tip. 4. Observe that the tip math is wrong. Cause: The 'NumberBuffer' service is a singleton initialized at PoS startup. During initial setup, it caches the decimal point from 'services.localization.decimalPoint' into 'this.defaultDecimalPoint'. Because the service is a singleton, this value remains stale if settings are changed without a server refresh. When the 'NumberPopup' is opened, it uses the cached stale separator, causing parsing issues in methods like 'addTip'. Solution: Modify the 'NumberBuffer' service to fetch the decimal separator directly from the 'localization' service during the '_setUp' process. opw-5895622 Forward-Port-Of: odoo/odoo#247769
This update resolves an issue where the 'Return' button incorrectly appeared on picking forms, even when the picking hadn't been completed. The fix ensures the button is only visible when the picking is in the 'Done' state or linked to a sales or purchase order. This prevents confusion and ensures users only initiate returns when appropriate.
Original PR description
_*= sale_stock, purchase_stock Steps to Reproduce: - Create a Helpdesk ticket. - Click Replace, and the picking form opens. - Add product lines to the picking to deliver to the customer. - Observe that the Return button is visible and shows a warning when clicked, even though the picking is not in Done state. Cause: - When `stock_account` is installed, the Return button visibility is overridden to always show (`invisible=0`), ignoring the original condition (`state != 'done'`). Solution: - Restore the Return button visibility to its original condition so it’s only shown when the picking is Done or when picking is linked to any PO or SO. task-5075584 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242473
This pull request reverts a recent change to the HR employee module. This action was taken to adhere to our stable release policy and address a breaking change. The previous change has now been rolled back to ensure stability and prevent potential disruptions for our users.
Original PR description
Breaking stable policy 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#252789
A recent test failure in the Sale-MRP module has been resolved. This change added a necessary user group permission to the test environment, allowing it to correctly access and test the 'tracking' field on product forms. This ensures the tests run reliably and helps maintain the stability of the Sale-MRP functionality.
Original PR description
Runbot Error: https://runbot.odoo.com/odoo/runbot.build.error/240918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where sending digest emails would fail when a company didn't have a website configured. The fix prevents a key error by checking if a website exists before attempting to access website-related data. This ensures digest emails can be sent reliably for all companies, regardless of their website setup.
Original PR description
When a company has no website configured, sending a digest email raises a traceback. Steps to reproduce the error: - Install ``website`` module - Create a new company and switch to it - Create a new digest email > In KPIs, Enable Visitors > Add recipient > Save - Click on Send Now button Traceback: ```py KeyError: res.company(1,) ``` https://github.com/odoo/odoo/blob/dee3fdee0326db032d95639eb8ee9386bb1762d4/addons/website/models/digest.py#L49-L59 If no website exists for the company, ``websites_per_company`` becomes an empty dictionary. Therefore, accessing ``websites_per_company[company]`` raises the above traceback. sentry-7239108433 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248981
This update fixes a minor usability issue in the sale timesheet module. Previously, the 'Billing Type' setting for billable projects was hidden within a muted description field, making it easy for users to miss. Now, the field is clearly visible, ensuring users can easily adjust billing settings when needed.
Original PR description
Before this commit, when the project is billable, the user can also alter Billing type. However, that field is in muted and displayed inside the description of billable feature and so the user could miss he could alter a field inside that description. This commit makes sure billing type field is no longer in muted to correctly show the field can be edited. task-5994180
This update optimizes the calculation of sales planning data by ensuring that planning fields are only computed for sales orders directly related to planning activities. Previously, all sales orders were processed, which was inefficient. This change improves performance and resource usage within the sale planning module.
Original PR description
Before this commit, the compute of planning_hours_to_plan and planning_hours_planned fields computes for all SOLs even the ones which are not related to planning. This commit makes sure the both computes calcules the planning field for the SOLs which are related to planning, that is: - SOL is linked to a product with planning_enabled set to True - or at least one planning slot has the SOL set. Issue detected during a fix of migration script of task-5258989
This update automatically deletes task assignment email notifications, preventing them from piling up in the system. Previously, these emails were retained indefinitely, which could impact performance and storage. This change ensures a cleaner and more efficient system.
Original PR description
Task assignment notification emails (sent via message_notify when a user is assigned to a project task) were configured with mail_auto_delete=False, causing them to accumulate in the mail.mail table indefinitely. These are transient notifications that don't need to be retained after sending. Forward-Port-Of: odoo/odoo#251853
Previously, users couldn't search for tasks assigned to them within the Odoo portal. This fix resolves that issue, allowing users to easily find and manage tasks assigned to them directly from the portal interface. This improves efficiency and ensures users can quickly locate and work on their assigned tasks.
Original PR description
Description of the issue/feature this PR addresses: - On the portal task, "Search In Assignees" always returns no tasks. <img width="1482" height="979" alt="Screenshot 2026-02-04 at 23 02 53" src="https://github.com/user-attachments/assets/263429b4-0c32-4323-bf88-2dfaf2115181" /> <img width="1430" height="943" alt="image" src="https://github.com/user-attachments/assets/3c196cc1-f12d-4064-838d-8e29914e5fab" /> Current behavior before PR: - Cannot search for tasks in the portal by assignee. Desired behavior after PR is merged: - Can search for tasks in the portal by assignee. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247239
This update fixes a visual imbalance in the layout of Knowledge articles within the Odoo system. The change ensures consistent spacing on both sides of the editor content, resulting in a more professional and balanced appearance. This improves the overall user experience for viewing and editing articles.
Original PR description
The Knowledge article layout shows a visual imbalance due to asymmetric horizontal spacing in the editor content. This change makes the horizontal spacing consistent on both sides, improving the overall visual balance while maintaining proper spacing and layout consistency. Task-5222643 Forward-Port-Of: odoo/enterprise#108437
This update enhances the payroll system's ability to find worker codes by incorporating DMFA and egov3 codes alongside the previous display name search. This change improves accuracy and efficiency in matching worker codes, streamlining payroll processing.
Original PR description
before when searching for worker code it only used display name now it uses dmfa, egov3 codes Task#6020172
This update resolves a bug that prevented users from deleting employee leave report records within the reporting module. The system was incorrectly attempting to delete a record that doesn't have a corresponding database table. This fix ensures that the delete function works as expected, preventing data inconsistencies.
Original PR description
When the user tries to perform delete operation on the ``hr.leave.employee.report`` model, a traceback appears. Steps to reproduce the error: - Install ``hr_holidays`` module with demo data - Go to > Time Off > Reporting > by Employee > Switch to Graph View - Click on any record > Select any record > Actions > Delete Traceback: ```py UndefinedTable: relation "hr_leave_employee_report" does not exist ``` ``hr.leave.employee.report`` model is ``_auto=False``, meaning that no database table is created for this model. When the user attempts to delete a record of that model, It will lead to the above traceback. sentry-7202115608 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247315
This update fixes a visual issue in the chart granularity select dropdown in Chrome, particularly in dark mode. The changes ensure the icon is clearly visible and horizontally aligned with the label, providing a better user experience. This improves the overall appearance and usability of the dashboard.
Original PR description
## Description of the issue/feature this PR addresses: Current behavior before PR: - In Chrome, the select dropdown showed label and picker icon stacked vertically. - In dark mode, the picker icon was not clearly visible due to a change in picker color. Desired behavior after PR is merged: - Use flex + align-items: center to align label and icon horizontally. - Use a fixed spreadsheet color for the icon to ensure visibility. - Add a transition for smooth picker icon rotation. Task: [5418157](https://www.odoo.com/odoo/project/2328/tasks/5418157) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251100
This update prevents the appearance of the "...") button in the members panel for regular users. Previously, this button was visible even when users couldn't perform any actions on channel members, leading to an empty popover. This change improves the user experience by removing unnecessary options.
Original PR description
Partial backport of https://github.com/odoo/odoo/pull/246580 Before this commit, the button "..." on channel members was visible even for non-owner / admins. Normal members cannot make any action on members, so there's no point in showing this button: clicking on it shows an empty popover. This commit prevents the showing of this button when member has no actions. Before / After <img width="244" height="223" alt="Screenshot 2026-03-06 at 12 50 59" src="https://github.com/user-attachments/assets/2257e27a-33b3-4c33-94a7-0d81dff3e0a9" /> <img width="244" height="206" alt="Screenshot 2026-03-06 at 12 51 21" src="https://github.com/user-attachments/assets/6da655a3-30b4-430b-bdf6-7c2316674ebc" /> Forward-Port-Of: odoo/odoo#252439
This update fixes an issue preventing the IoT box's Wi-Fi access point from connecting. The problem was resolved by changing the Wi-Fi standard to 802.11a, which is compatible with modern Wi-Fi equipment. This ensures consistent connectivity for IoT box configurations.
Original PR description
Before this commit, the `hostapd` Wi-Fi access point that is started to allow configuring the Wi-Fi network on the IoT box could not be connected to when using the latest images. The exact cause is unknown, but the Odoo code has not changed so it seems to be due to an OS or driver update. After this commit, we set the Wi-Fi mode to 802.11a, which enables modern Wi-Fi standards on the AP, whereas before it defaulted to 802.11b which is the oldest Wi-Fi standard. This change makes the network visible and able to be connected to. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252404
This update resolves a problem that prevented users from creating spreadsheets with date filters. The issue occurred when the 'Spreadsheet Account' module was active. This change ensures the system correctly handles spreadsheets without the 'Spreadsheet Account' module, improving spreadsheet functionality.
Original PR description
Steps to reproduce: - Install Spreadsheet and Accounting - If `spreadsheet_edition_account` is installed, uninstall it - Go to Spreadsheets, create a new one and add a "Date" global filter => Traceback This commit fixes the issue by handling the case where no fiscal year is not installed. Task: 6002612 Forward-Port-Of: odoo/odoo#251919
This update optimizes the process of linking analytic lines to invoices during reinvoicing. Previously, the system always performed a search for analytic lines, even when no related sale order lines existed, leading to unnecessary queries. Now, the system directly returns an empty recordset when no reinvoicable sale order lines are found, improving performance and efficiency.
Original PR description
Description of the issue/feature this PR addresses: When retrieving analytic lines to link for reinvoicing, the method performs a search even when there are no reinvoicable sale order lines associated with the invoice lines. Current behavior before PR: The method always executes an account.analytic.line search using the domain returned by _analytic_line_domain_get_invoiced_lines, even when no reinvoicable sale order lines are found. This results in an unnecessary query that will always return an empty recordset. Desired behavior after PR is merged: If no reinvoicable sale order lines are found, the method directly returns an empty account.analytic.line recordset, avoiding the extra query and slightly improving performance. part of: https://github.com/odoo/enterprise/pull/108685 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents invoice generation errors when subscriptions include both standard products and timesheet-based services. The fix ensures that invoices can be created correctly even if a timesheet service hasn't been delivered, avoiding a previous crash. This improves the reliability of subscription invoicing.
Original PR description
**Issue:** When generating an invoice for a subscription that contains a mix of regular products (invoiced on order) and timesheet-based services (invoiced on delivery), a traceback can occur if the…
**Issue:** When generating an invoice for a subscription that contains a mix of regular products (invoiced on order) and timesheet-based services (invoiced on delivery), a traceback can occur if the timesheet service has 0 delivered quantity. **Cause:** During the invoice creation process, `_get_reinvoiced_analytic_lines_to_link` iterates over the newly created invoice lines to link analytic lines. It filters the linked sale order lines using `_is_line_reinvoicable()`. If the invoice only contains standard products (because the timesheet line was skipped due to 0 delivery), `so_lines` evaluates to an empty recordset. then calling `_get_range_dates` causes a treace beack because it needs to ensure that ther is at least 1 order `self.ensure_one()` **Fix:** Added a safeguard (`if not so_lines: continue`) inside the loop. If an invoice line does not contain any reinvoicable sale order lines, it is now safely skipped, allowing standard subscription lines to be invoiced alongside undelivered timesheet lines without crashing. task: 5966725
This update resolves an issue where autofilling pivot formulas in certain situations caused errors and incorrect data formatting. Specifically, it prevented crashes and ensured that positional formulas worked as expected when referencing dimensions perpendicular to the header. This enhancement improves the reliability and accuracy of pivot table reports.
Original PR description
If we autofill a positional pivot formula in the dimension perpendicular to the positional header, it would not work correctly: - We would crash if the position wasn't in the original pivot table - We would drop the positional part otherwise (`"#country_id", 1` would become `"country_id", 25`). Task: [5909266](https://www.odoo.com/web#id=5909266&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update resolves a technical issue preventing the correct display of sales timesheet slots within the planning module. The fix ensures that the planning module integrates seamlessly with the sale timesheet, improving the accuracy of time tracking data. This resolves a minor visual discrepancy.
Original PR description
Steps to reproduce: - Install sale_timesheet & planning; - Install planning_field_service_sale_timesheet; Traceback: Element `'<xpath expr="//field[@name='project_id']">'` cannot be located in parent view This commit fixes the inheritance of the planning.slot tree views.
This update ensures the background color of the 'Discuss' dropdown in the Odoo dark theme matches other dropdowns, resolving a visual inconsistency. Previously, the 'Discuss' dropdown had a darker background than other dropdowns in dark mode. This change improves the overall user experience and visual consistency across the Odoo platform.
Original PR description
Before this commit, background of dropdown discuss actions in dark theme were darker than other dropdown in web client. This comes from https://github.com/odoo/odoo/pull/247352 that harmonized NotificationSettings bg with discuss dropdown bg, by changing discuss dropdown BG to match NotificationSettings. However, the inverse should have been done, which is what this commit does. Before / After <img width="1241" height="810" alt="Screenshot 2026-03-09 at 16 30 10" src="https://github.com/user-attachments/assets/d1b1d201-a175-4f34-b95b-999126616a98" />
This update resolves an issue where navigating back from the message search panel on mobile devices resulted in a technical error (traceback). The fix ensures a smooth navigation experience by correctly handling back button presses within the search panel, aligning with established design patterns for similar components. This improves usability for mobile users.
Original PR description
...in mailboxes on mobile * = crm_livechat, im_livechat Enterprise PR: https://github.com/odoo/enterprise/pull/110150 Before this commit, navigating back from a mailbox message search panel on mobile would result in a traceback. Steps to reproduce: 1. Open Discuss on mobile 2. Navigate to bookmarks in bottom bar 3. Open message search 4. Navigate back -> traceback This happens because the `useBackButton` in ActionPanel registers a callback function taken from the env. Said function is missing when the ActionPanel is mounted outside of a chat window or meeting view. This commit fixes the issue by adding a `close` props to ActionPanel, and using that as a callback for back navigation. This is an established pattern for similar closable components like Popover, Dialog and EmojiPicker. task-6013922
This update fixes a bug on mobile devices where navigating back from the message search panel in Live Chat would cause an error. The fix ensures a smoother user experience by correctly handling back navigation within the ActionPanel component, aligning with established design patterns.
Original PR description
...in mailboxes on mobile community PR: https://github.com/odoo/odoo/pull/252512 Before this commit, navigating back from a mailbox message search panel on mobile would result in a traceback. Steps to reproduce: 1. Open Discuss on mobile 2. Navigate to bookmarks in bottom bar 3. Open message search 4. Navigate back -> traceback This happens because the `useBackButton` in ActionPanel registers a callback function taken from the env. Said function is missing when the ActionPanel is mounted outside of a chat window or meeting view. This commit fixes the issue by adding a `close` props to ActionPanel, and using that as a callback for back navigation. This is an established pattern for similar closable components like Popover, Dialog and EmojiPicker. task-6013922
This update resolves an issue preventing users from generating reports in the Belgian Payroll module. The fix automatically saves the data before report generation, addressing a technical error that caused failures. This ensures consistent and reliable report creation for users.
Original PR description
**Steps to reproduce:** - Open Belgian Payroll - From Reporting Menu select 274.XX Sheets - Create New Sheet - Select a Year and a month with Eligible Employees > 0 (for the Generate dropdown to be enabled) - Press Generate button and then try to generate any form (do this directly without pressing save manullay button) **Issue:** The generation of any form (PDF, XML, XLSX) fails due to the receive of an empty self. **Fix:** If the user tried to generate the reports without saving, do an automatic save internally before attempting to generate the reports in the backend. task-5936740
This update resolves an issue where deleting an account move in the l10n_sa module could trigger a crash. The fix addresses a problem within the system's attachment handling, preventing errors when removing associated records. This ensures smoother operation and prevents data loss during account move deletion.
Original PR description
Since https://github.com/odoo/odoo/pull/242777 the deletion of an account.move may crash. Indeed, the deletion of the move delete its corresponding attachments, and ir.attachment has an ondelete method that checks the attached move, namely _unlink_except_posted_pdf_invoices(). The method checks some condition on the corresponding moves, which have just been deleted, hence raising a MissingError. runbot_build_error-237850 Forward-Port-Of: odoo/odoo#252808
This update fixes an issue where payslips weren't being created correctly for employees with flexible working hours. The change ensures that work entries are generated for all employees, regardless of their working hours configuration, leading to accurate payroll calculations. This resolves a previous error impacting employee pay reporting.
Original PR description
**Version:** - 19.0 **Steps to reproduce:** - Create an employee. - Leave the Working Hours field empty. - Set the contract dates and a wage. - Create a payslip using the smart button. **Issue:** - Worked day lines are empty for flexible employees when the payslip is created from the smart button. **Cause:** - Flexible employees were being skipped because their working hours were empty, which results in work entries not being generated. **Solution:** - Updated the condition to also generate work entries for flexible employees. Task-5431870 Forward-Port-Of: odoo/enterprise#109497 Forward-Port-Of: odoo/enterprise#103101