Daily updates from Odoo
Wednesday, May 27, 2026
37 changes · master
New functionality added to Odoo
This update introduces a new module for connecting with Obox devices, which are similar to the Odoo FDM for Belgium. The primary function is to allow users to register and view basic information about their Obox devices, including their IP address and available services, paving the way for future device management capabilities.
Original PR description
The Obox (same platform as the Odoo FDM for Belgium) will allow interfacing with hardware devices, and is intended to replace the functionality of the IoT box. This commit only adds the ability to pair an Obox to the database, and see its IP and available services. Community: https://github.com/odoo/odoo/pull/254208 Forward-Port-Of: odoo/enterprise#110834
Enhancements to existing features
This update ensures that new employees in Belgian companies automatically receive their payslips in the local language (French, Dutch, or German) if the company's environment uses one of these languages. This improves the user experience and compliance with Belgian regulations, making payslips easier to understand for employees.
Original PR description
After this commit, when a new employee is created in a Belgian company, their payslip's language defaults to the environment's language if this language is one of the Belgian national languages i.e. French, Dutch or German. A test has been added to verify the correctness of the behaviour. task-6234693
This update streamlines how Odoo manages email activities by moving data handling to a more efficient store. Previously, a less effective method was used, and this change improves performance and stability of the mail system. The update also includes necessary updates to tests and mock servers.
Original PR description
Replace the `activity_format` ORM method with a `mail.activity` store handler in `/mail/store`.
Both `ActivityListPopover` and `AttendeeCalendarActivityListPopover` now call `store.fetchStoreData("mail.activity", { ids })` instead of going through `orm.call`. The mock server and tests are updated accordingly.
task-4676531Resolved issues and error corrections
This update corrects a display issue where VoIP call durations were incorrectly shown in hours. The change converts the duration to store in seconds and displays it in a user-friendly format, eliminating potential rounding errors and simplifying the display. This ensures accurate call duration information for users.
Original PR description
Currently, duration on voip.call is stored in hours. But when we show the duration, we always need to show the seconds. This can cause several potential issues like rounding errors, unnecessary conversions. In this commit, we convert the duration field to store in seconds, also we convert type from float to integer. Task-[6128312](https://www.odoo.com/odoo/5778/tasks/6128312) COMPR: https://github.com/odoo/odoo/pull/264031 UPGPR: https://github.com/odoo/upgrade/pull/10199
This update fixes a technical issue related to the way invoice PDF legends are configured in Odoo. The field was incorrectly set to be company-dependent, which caused unexpected behavior. This change reverts the field to a standard computed value, ensuring consistent invoice generation.
Original PR description
The field `l10n_ar_invoice_pdf_legend` of res.company being company dependent was a mistake. We should change it back to a normal computed field. commit it was added: odoo/enterprise@c72681b5e1036f53de71ac422282127a95a2adc9
This update resolves a problem where WebP image formats in the demo data were causing errors when generating PDFs. The team has switched to using standard JPEG images, ensuring consistent and reliable PDF output for the sales demo.
Original PR description
WebP images used in the demo data caused issues in PDFs. Use JPEG instead.
This update resolves a minor visual issue in the Odoo Enterprise view editor. The XML mode within the editor previously lacked the correct background color, which has now been corrected. This ensures a consistent and professional user experience when designing views.
Original PR description
Following https://github.com/odoo/enterprise/issues/103707 which introduced a little bug, causing the xml editor of the view editor to not have the correct background color after this commit, the background color is corrects
This update simplifies the process of creating intercompany sales and purchase documents. The previous system unnecessarily generated document names, which has now been removed. This change improves the system's flexibility and efficiency.
Original PR description
The intercompany sale and purchase document creation explicitly calls next_by_code to generate document names, even though sequence assignment is already handled in create(). This explicit sequence generation is redundant and reduces the extensibility of the sequence flow. Remove the redundant next_by_code calls and rely on the standard create() flow for sequence assignment.
This update fixes a confusing naming issue within the Tax Returns page of Odoo Enterprise. The breadcrumbs now display correctly, ensuring a smoother user experience when navigating between tax return records. This change improves clarity and usability for users managing tax returns.
Original PR description
The "Tax Returns" page/breadcrumbs are currently called "Tax Return". This creates a confusing naming scheme with the breadcrumbs if you click into a new page from within an individual tax return after opening it from the Tax Returns page. Without the fix, the breadcrumbs would appear as "Tax Return/Tax Return" After the fix, they will appear as "Tax Returns/Tax Return". The page name has also been changed to "Tax Returns" with this fix.
This update simplifies the Gantt chart by removing a previously unnecessary feature. Previously, users couldn't easily select all records or expand all groups. Now that both options are available, this redundant element has been removed, streamlining the user experience.
Original PR description
Following the PR #179887, we introduced the possibility to remove the default group by. This was useful because: * The select all only selected the visible records * There was no possibility to expand all groups But now we can do both. This commit thus removes the default_group_by facet from all views and adapts the unit tests relying on it. community PR: https://github.com/odoo/odoo/pull/265574 task-6218432
This update resolves an issue where the 'Off-Cycle' button was unexpectedly displayed during new pay run batch creation. The fix ensures this button is hidden, streamlining the payroll process for users and preventing potential confusion. This improves the user experience and data accuracy.
Original PR description
The "Off-Cycle" button appears when selecting employees for a new pay run batch. Fixed by passing `hide_off_cycle_btn: true` inside the JS file context and evaluating it inside the XML button's `invisible` attribute. Task: 6240692
This update ensures that currency selection is now properly available when generating financial reports within Odoo Enterprise. Previously, this functionality was missing, leading to potential inaccuracies in reporting. This change improves the reliability and accuracy of financial data for users.
Original PR description
https://github.com/odoo/odoo/pull/262209
This update removes unnecessary scrollbars from the employee and manager feedback frames, resulting in a cleaner and more user-friendly experience on desktop views. Previously, the layout forced double scrollbars when content exceeded the screen size. Now, only the main page scrollbar is visible, improving readability and usability.
Original PR description
Prior to this commit, the employee and manager feedback frames were bound to the layout using 'vh-100' and 'scrollable-section'. This forced aa double-scrollbar layout on desktop views when text exceeded the screen size. This commit removes these layout classes from the XML view, allowing the feedback frames to expand vertically with their content so that only the main page scrollbar remains. Task: 6237029
This update fixes a limitation where basic users couldn't create new spreadsheets using the 'New' > 'Spreadsheet' option. By granting all users access to templates, this change enables basic users to create and manage spreadsheets, improving their workflow and functionality.
Original PR description
Basic document user can already create spreadsheet either by using the "New" button or uploading a document. The "New" > "Spreadsheet" button from document doesn't work because we don't have access to template. This task give access to their template to all users. It also allows basic user to create template as they will be able to create spreadsheets. Task: 6022218
This update ensures that payment notifications, receipts, and emails are sent to the correct contact – the invoice contact – when a partner has an invoice associated with them. This corrects a previous issue where payments were incorrectly sent to the commercial partner, maintaining accurate accounting records and reporting.
Original PR description
**Context:** Before this commit `account.payment.partner_id` was restricted (by domain) to commercial partners. When a partner has an invoice contact child (`type='invoice'`), checks, receipts and outgoing emails end up addressed to the parent partner instead of the intended invoicing contact. Accounting entries must still be linked to the commercial partner to preserve reporting & reconciliation integrity. **Solution:** The invoice model (`account.move`) already solves the same problem: `partner_id` stores the communication contact, `commercial_partner_id` is the stored compute used for accounting. This commit mirrors that architecture on `account.payment`. task-6123823
This update prevents errors during inventory counts when a company doesn't have a default warehouse. Now, users are automatically redirected to create a warehouse if one isn't already set up, ensuring a smoother inventory process. This improves usability and avoids disruptions.
Original PR description
In this [commit](https://github.com/odoo/odoo/commit/100cab4b1093ead8b35ec73c7fd41d90647cabbc), we introduced a flow where a warehouse is automatically created only for the first company. For subsequent companies, no warehouse is created by default. When no warehouse exists, adding a product during an inventory count in the barcode module raises a traceback because it tries to access a non-existent warehouse location. This improvement handles the case by giving the user an option to redirect to the warehouse view and create a new one. Community PR: https://github.com/odoo/odoo/pull/258129 TaskId-6098303
This update adjusts the stock management test to align with recent changes in Odoo (odoo/odoo#250422) that introduced new data keys for the product catalog. This ensures the test accurately reflects the current functionality and avoids potential issues related to unit testing.
Original PR description
This commit adapts for the changes in odoo/odoo#250422, which adds new keys to the data dict used by product catalog. Task-5917766
This update removes a default selection toggle within the salary rule configuration, streamlining the process for users. The change ensures the first option is automatically selected as the default, aligning with updated system logic. This simplifies configuration and reduces potential user confusion.
Original PR description
[IMP] hr_payroll: remove salary rule selection input default
There was a default toggle in the selection input for determining the input_default_selection.
I removed it and according to the sequence, the first one is selected as default.
task - 6023720This update fixes a technical issue related to the Thailand tax reporting module (l10n_th_reports). It replaces outdated references to tax tags with a more flexible system that connects to report expression records. This ensures accurate and consistent VAT reporting for Thai businesses.
Original PR description
Following the tax tag renaming in l10n_th, replace hardcoded tag name strings with lookups on report expression records. Community PR: https://github.com/odoo/odoo/pull/266327 task-6002110
This update corrects a faulty test within the Odoo payroll system. The previous test was unreliable (flaky) and its steps were incorrect, preventing accurate identification of issues. This fix ensures the tour test functions correctly, improving the stability of the payroll module.
Original PR description
The test is flaky, and the steps are wrong, we are missing the continue steps. task-6238273
This update resolves an issue where Odoo branches were incorrectly inheriting VAT information from their parent companies, leading to manual VAT adjustments. The change now defaults branches to no VAT, ensuring the parent company remains the key provider and simplifies the system for users. Key settings are also restricted to the base group for improved security.
Original PR description
Branches copied the parent's VAT, which made them their own signing entity and forced users to clear the VAT so the branch would reuse the parent's keys. Default branches to no VAT so the parent remains the key provider. Setting a VAT on a branch still exposes the key settings for the rare case separate keys are needed. Also restrict the key settings to base.group_system task_id - 6087168 Forward-Port-Of: odoo/enterprise#117986
This update ensures that canteen costs are accurately calculated when an employee has multiple workdays with the same canteen code on a single payslip. Previously, the system didn't account for this, leading to potential inaccuracies in monthly pay calculations. This fix corrects this issue, ensuring accurate payroll processing.
Original PR description
Before this commit, canteen costs for the monthly pay did not take into account that multiple worked day lines with the same code can be present on the same payslip. no related task Forward-Port-Of: odoo/enterprise#118020
This update fixes a warning that appeared during payrun creation, specifically when running multiple payruns or adjusting payroll schedules. The issue stemmed from an error in how the system processed domain settings, which has now been corrected to prevent the warning and ensure stable payrun functionality.
Original PR description
[FIX] hr_payroll: fix payrun warning bug Bug reproduction: When we select Employee Type and all employees and create a payrun. Do this twice at least. Then set your schedule in the dashboard of payroll app. Error will appear. Bug cause: There was ast.literal_eval(action['domain']) part where action refers to action_hr_payslip_run but action['domain'] is False and ast.literal_eval(action['domain']) throws and error Bug solution: I said ast.literal_eval(action['domain'] or '[]'), in case action['domain'] is False, we should return [] domain to prevent throwback. task - 6227118 Forward-Port-Of: odoo/enterprise#117595
This update fixes a bug where VoIP call tickets weren't accurately counting open tickets associated with the parent partner. Now, when a child partner has an open ticket linked to a call, the parent partner's ticket count will also be updated. This ensures a more complete view of open support requests.
Original PR description
Unlike most of *_count fields on res.partner, for example ticket_count, open_ticket_count didn't take into account of its child partners. To reproduce: 1. create parent parent P and child partner C 2. create a ticket for partner C and put it in a unfold stage 3. call partner P and open form view of this call the open ticket count on the smart button is 0 instead of 1 In this commit, we change it that when a child partner has open tickets, they will also be counted as parent partner's. Forward-Port-Of: odoo/enterprise#118102 Forward-Port-Of: odoo/enterprise#115303
This update corrects a technical issue where VIES validation was incorrectly triggered during tax return creation. The fix ensures that VIES checks only occur for tax returns related to invoices with valid VAT information, improving data accuracy and preventing unnecessary errors. This resolves a previous problem impacting VAT reporting.
Original PR description
Vies validation should only occurs with moves having fiscal position with vat required Steps: - With base_vat, and european l10n like BE installed - Make a bill for a partner with no vat or invalid vat - Create a tax return - Open the return -> the 'check_partner_vies' fails opw-6200246 Forward-Port-Of: odoo/enterprise#117913
This update fixes an error that occurred when the automated payroll update process ran after a customer contact was deleted. Specifically, the system was unable to find a reference to the deleted contact in a key data file. This change ensures the payroll update process continues to function correctly, even when customer records are removed.
Original PR description
Currently, a traceback occurs when the cron "Payroll: Update data" runs after a referenced partner record has been deleted. Steps to reproduce the error: - Install ``l10n_us_hr_payroll`` module with…
Currently, a traceback occurs when the cron "Payroll: Update data" runs after a referenced partner record has been deleted. Steps to reproduce the error: - Install ``l10n_us_hr_payroll`` module with demo data - Switch to ``My US Company`` - Go to Contacts > Delete ``Internal Revenue Service (IRS)`` contact - Run the cron ``Payroll: Update data`` Traceback: ```py ValueError: External ID not found in the system: l10n_us_hr_payroll.res_partner_irs ``` ```py ParseError: while parsing /home/odoo/src/enterprise/ saas-19.3/l10n_us_hr_payroll/data/hr_salary_rule_data.xml:322, somewhere inside ``` https://github.com/odoo/enterprise/blob/21477b333f7a33cb582cd806236e4f9f8346d022/l10n_us_hr_payroll/models/hr_payslip.py#L12-L21 The issue occurs because the cron ``Payroll: Update data`` calls ``_get_data_files_to_update`` method, which loads the ``data/hr_salary_rule_data.xml`` file containing a reference to the deleted partner record at [1]. Since the external ID no longer exists, loading the XML file raises the traceback. [1]: https://github.com/odoo/enterprise/blob/21477b333f7a33cb582cd806236e4f9f8346d022/l10n_us_hr_payroll/data/hr_salary_rule_data.xml#L484 sentry-7496380516 Forward-Port-Of: odoo/enterprise#118018
This update fixes an issue where the French 2033 A and B reports were incorrectly available to all companies in a multi-company setup. The change ensures these reports are properly associated with French companies, resolving a potential reporting discrepancy. This improves the accuracy of financial reporting for French clients.
Original PR description
When installing the French localisation in a multi-company, multi-coa environment, the 2033 A report was available for every company, instead of just the French ones. Forward-Port-Of: odoo/enterprise#116751
This update restricts the AI button's functionality within the website builder to only 'website.page' records. Previously, it was enabled across all website pages, leading to potential misuse. The change includes a tooltip to explain the restriction and hides the button when the translation sidebar is open.
Original PR description
Previously, the AI button was enabled across all pages in the website builder, including contexts where its usage is not applicable. This PR introduces the following changes: 1. Disable the AI button for pages not linked to "website.page" records with a tooltip explaining the restriction. 2. Hides the AI button when the sidebar is open in translation mode. task-6148588 Forward-Port-Of: odoo/enterprise#115746
This update resolves an issue where a system error was incorrectly triggering a fallback mechanism for IoT connections. The fix ensures that errors related to failed longpolling requests are only flagged when the request genuinely failed, not when a new listener was added. This improves the stability and reliability of the IoT service.
Original PR description
In odoo/odoo#260931, new logic was added to raise an 'unreachable' error in the case where a longpolling listen request failed. This error was then used by the IoT HTTP service to fallback to a websocket listener. However, due to an oversight this 'unreachable' error was also being triggered whenever the longpolling listen request was aborted, which happens whenever a new listener is added. This commit fixes the issue by checking the error type and only sending the 'unreachable' error if the request was not aborted. opw-6175686 Forward-Port-Of: odoo/enterprise#118210 Forward-Port-Of: odoo/enterprise#117905
This update fixes a visual issue in the termination fees report for the Belgian payroll module. The report layout was previously misaligned due to a rigid design. The fix dynamically adjusts the report's appearance, ensuring a clean and professional look for all termination slips.
Original PR description
**Steps to Reproduce:** 1. Generate a termination slip for an employee 2. The generated payslip pdf layout looks clumsy and misaligned. **Bug Cause:** 1. The notice duration has rowspan="3" expecting 3 lines. When there are less than 3 lines, the following rows are affected and misaligned. 2. The border is missing. **Solution:** Added dynamic sizing for notice duration instead of static rowspan="3". Used index instead of line_count for both notice duration and banks to stay consistent and simple. Added table-bordered class as borders are not automatically applied like in previous versions. **Task:** 6193558 Forward-Port-Of: odoo/enterprise#118180 Forward-Port-Of: odoo/enterprise#116627
A recent update to Odoo's document signing process caused errors when downloading signed documents. This fix addresses a compatibility issue with the pypdf library, ensuring that documents are correctly compressed and downloaded. The change ensures a smoother user experience for signing and retrieving documents.
Original PR description
This [related PR] introduced a compression pass after calls to mergePage(). However in newer versions of pypdf (>=3.5.2), compress_content_streams() can only be called on pages of PdfWriter. An error would be raised when called on pages of a PdfReader. Steps to reproduce ----- 1. Run Odoo with pypdf>=3.5.2 2. Sign and download a document in the Sign app 3. Traceback occurs Fix ---- This commit moves the compression to the writer object, after the merged page has been added. Related pr: https://github.com/odoo/odoo/pull/261879 runbot-937761 Forward-Port-Of: odoo/enterprise#118280 Forward-Port-Of: odoo/enterprise#117756
Features or functions removed from Odoo
This update removes an outdated salary rule, "Taxable Salary," from the Hong Kong payroll structures. This simplifies the system and addresses potential issues with the salary configurator, ensuring accurate payroll calculations. The change improves the stability and reliability of the Hong Kong payroll processing.
Original PR description
this commit removes an unused salary rule "Taxable Salary" in the hk "CAP57: Employees Monthly Pay" salary structure. task-5964405
Code cleanup and technical improvements
This update adapts the composer date picker within the O-Spreadsheet module to a recent change in how references are handled. The team removed an older reference system and switched to a more efficient signal-based approach. This ensures the date picker continues to function correctly with the latest O-Spreadsheet updates.
Original PR description
In o-spreadsheet, we removed `t-custom-ref` and replaced it with `t-ref` that use signal. This commit adapt the composer date picker to this change.
This update refactors the Australian Payroll API code to improve its efficiency. By using a more streamlined method for data retrieval, the change enhances the speed and reliability of the API, ensuring smoother integration with payroll systems. This results in faster processing times and a more stable experience.
Original PR description
https://github.com/odoo/odoo/pull/264765
This update streamlines order changes within the Point of Sale system by replacing a previous tracking method with new models for order and preparation lines. All order changes are now calculated on the client-side, enhancing flexibility and responsiveness for users. This change is part of a larger effort to improve the user experience for order management.
This update adapts the composer date picker within the O-Spreadsheet module to a recent change in how references are handled. The team removed an older reference system and switched to a more efficient signal-based approach. This ensures the date picker continues to function correctly with the latest O-Spreadsheet updates.
Original PR description
In o-spreadsheet, we removed `t-custom-ref` and replaced it with `t-ref` that use signal. This commit adapt the composer date picker to this change.
This pull request updates the core Odoo codebase by importing tools from the tools.sql library. This refactoring enhances the internal structure and maintainability of Odoo, ensuring consistent code practices and facilitating future development. It primarily impacts internal development processes.
Original PR description
https://github.com/odoo/odoo/pull/264861