Daily updates from Odoo
Thursday, April 30, 2026
24 changes
4 changes
Enhancements to existing features
This update limits the duration of automatically recurring events to 15 years by default, preventing excessive event creation and ensuring predictable scheduling. Administrators can adjust this limit for specific events if needed, maintaining event organization and reducing potential system strain.
Original PR description
`forever` recurrent events could currently be created for 720 years into the future, leading to excessive and unnecessary event generation. This change limits the creation of forver recurrent events to a fixed horizon of 15 years (by default) in the future, ensuring predictable behavior and preventing unbounded recurrence. The maximum horizon can be adjusted through the system parameter `calendar.max_recurrence_years` for events that require a longer recurrence window. Task-5714633 Forward-Port-Of: odoo/odoo#261808 Forward-Port-Of: odoo/odoo#247929
This update strengthens the security of the AI website editor by rigorously sanitizing HTML and CSS generated by the AI. It validates actions, removes potentially harmful code, and ensures consistent styling, preventing unexpected website behavior and improving overall stability. This protects the Odoo Enterprise platform from potential vulnerabilities.
Original PR description
Following [commit] introducing the AI website editor tool, we would like to sanitize the output AI provides. We first check that the actions we received are valid, and then we sanitize the html content, before it's sent to the frontend, where it will be sanitized as well. We also validate css and check for potentially malicious patterns, and then compile it to see if there aren't any errors, so it doesn't break our styles. [commit]: https://github.com/odoo/enterprise/commit/2f69f868e22173b12d51067f0bf3b5d4dc27228f task-6143725
This update adjusts how Odoo handles validation of additional identifiers, primarily impacting demo data used by industries. The change reduces noisy logging to 'info' level, addressing issues where warnings were triggered due to incomplete demo data. This improves the overall stability and usability of the system.
Original PR description
Since [this commit], additional identifiers are retrieved in the inverse method of vat field. This method logs warnings in case this step fails for a particular partner. Industries have a lot of demo data, it's not always possible to find suitable correct demo data for so many companies. Let's lower the logger to info. [this commit]: https://github.com/odoo/odoo/commit/825e7c803a4effd601fb247c660416f1cc6d26d7
This update adjusts Odoo's reporting to align with new Indonesian tax regulations (Act 2025). Previously, reports relied on specific tax sections, but now they utilize report line names and tax tags for accurate calculations. This ensures compliance with the latest tax requirements.
Original PR description
In this commit, the XLSX export and report warning are adapted to support the newly introduced TDS/TCS reports as per Act 2025. Previously, the XLSX reports depended on TDS/TCS sections. However, with Act 2025, certain taxes no longer have associated sections. This dependency has been removed, and report generation now relies on report line names and tax tags instead. task-6124431 Forward-Port-Of: odoo/enterprise#115679 Forward-Port-Of: odoo/enterprise#113916
3 changes
Enhancements to existing features
This update enhances the bank reconciliation process by displaying the analytic distribution of each reconciliation line. This provides users with clearer insights into where funds are being allocated, improving accuracy and reducing potential errors. The changes were adapted from existing bank reconciliation components.
Original PR description
For automated reco models, we didn't take the amount into account. That means that some lines could have a suggestion of reco model that makes no sense. This commit will allow to show the analytic distribution of a line in the line to reconcile so that it's clear for the user. (Most of the code is taken from the analytic distribution widget and adapted) Also make the popover works on hover task-5733382 Forward-Port-Of: odoo/enterprise#106118
This update expands the width of the Discuss sidebar to better utilize screen space, particularly on larger displays. This allows users to see more of the chat conversation details and improves the overall layout. The change ensures the sidebar adapts to different screen sizes for a more configurable experience.
Original PR description
Prior to this commit, the left sidebar in Discuss had a max width of 300px. This commit allows larger widths based on the screen width. This is dependent on screen width, similar to…
Prior to this commit, the left sidebar in Discuss had a max width of 300px. This commit allows larger widths based on the screen width. This is dependent on screen width, similar to o-mail-ActionPanel.o_resizable_panel. It also removes the styling setting the max width to 300px. This helps make discuss more configurable, and makes it possible to see more of the description in live chat conversations. The sizes are set to match the max size of the right panel, so that they don't overlap, and there's suitable space in the center for the chat itself. Related to 221559 task-6180965 (Screenshots below show the worst case-scenario, where both the left and right panels are expanded to their max size) Before (Screen width > 1200px): <img width="1291" height="965" alt="image" src="https://github.com/user-attachments/assets/952d6c4b-60fd-47b9-aff7-8e034a2ee752" /> After: Screen width > 750px: <img width="1291" height="964" alt="image" src="https://github.com/user-attachments/assets/1120da2d-a434-4b3b-b387-f1d29bf0cb91" /> Screen width > 1200px: <img width="1291" height="965" alt="image" src="https://github.com/user-attachments/assets/47c6c981-0c62-43b6-8634-c6d644c342bb" /> Screen width > 1600px: <img width="1291" height="964" alt="image" src="https://github.com/user-attachments/assets/2945c964-5847-456b-b982-09086f335860" /> Screen width > 2300px: <img width="1291" height="965" alt="image" src="https://github.com/user-attachments/assets/c8cbc63f-025b-463d-9a3a-c84fce87d223" />
This update adjusts Odoo's reporting to align with new Indonesian tax regulations (Act 2025). Previously, reports relied on specific tax sections, but now they utilize report line names and tax tags for accurate calculations. This ensures compliance and accurate reporting of TDS/TCS taxes.
Original PR description
In this commit, the XLSX export and report warning are adapted to support the newly introduced TDS/TCS reports as per Act 2025. Previously, the XLSX reports depended on TDS/TCS sections. However, with Act 2025, certain taxes no longer have associated sections. This dependency has been removed, and report generation now relies on report line names and tax tags instead. task-6124431 Forward-Port-Of: odoo/enterprise#115679 Forward-Port-Of: odoo/enterprise#113916
1 change
Enhancements to existing features
This update adapts the XLSX export reports to align with new Indonesian tax regulations (Act 2025). Previously, reports relied on specific tax sections, but now they utilize report line names and tax tags for accurate reporting, ensuring compliance with the latest requirements.
Original PR description
In this commit, the XLSX export and report warning are adapted to support the newly introduced TDS/TCS reports as per Act 2025. Previously, the XLSX reports depended on TDS/TCS sections. However, with Act 2025, certain taxes no longer have associated sections. This dependency has been removed, and report generation now relies on report line names and tax tags instead. task-6124431 Forward-Port-Of: odoo/enterprise#113916
14 changes
Enhancements to existing features
This update simplifies the asset depreciation views in Odoo, making them easier to use. Redundant information has been removed, and the search functionality has been streamlined to focus on key depreciation settings. A default 'Active' filter has been added for clarity.
Original PR description
Simplify the asset depreciation views by removing redundant information and improving usability. The method column is removed from the assets list since it is already included in the depreciation model name. The depreciation model list is cleaned up to show only the model by default, while filters for method, period, and number of depreciations remain available in the search view. A default Active filter is also added to display only active records. task-6128781 Forward-Port-Of: odoo/enterprise#115665 Forward-Port-Of: odoo/enterprise#114419
This update enhances the bank reconciliation process by displaying the analytic distribution of each reconciliation line. This provides users with clearer insight into where funds are allocated, simplifying the reconciliation process. The changes were largely adapted from existing bank reconciliation components.
Original PR description
For automated reco models, we didn't take the amount into account. That means that some lines could have a suggestion of reco model that makes no sense. This commit will allow to show the analytic distribution of a line in the line to reconcile so that it's clear for the user. (Most of the code is taken from the analytic distribution widget and adapted) Also make the popover works on hover task-5733382 Forward-Port-Of: odoo/enterprise#115553 Forward-Port-Of: odoo/enterprise#106118
This update adds a new record, `ai.session`, to track AI chat sessions launched through the website builder. Previously, tracking was unreliable due to manual user input. Now, the system can automatically identify AI sessions based on a unique identifier, enabling features like blocking website iframes during AI processing.
Original PR description
__Before this commit__ The `ai.session` record linked to a `discuss.channel` is not accessible from the frontend. This is a problem for the website builder AI because in some cases we need to know if…
__Before this commit__ The `ai.session` record linked to a `discuss.channel` is not accessible from the frontend. This is a problem for the website builder AI because in some cases we need to know if an AI chat session was launched from the website builder sidebar. For instance, to implement custom behaviors such as blocking the website page iframe while the AI is thinking. As a workaround, we currently check if the channel agent external identifier corresponds to the website builder AI, however this might be edited by the user, which would break the flow. __After this commit__ The inverse field `ai_session_ids` is added to `discuss.channel`. In practice, there might only be a maximum of one `ai.session` linked to a channel, but we keep it plural as a convention for `One2many` fields. Only the `ai.composer` and the `interface_key` linked to the session are put in the store at the moment, but fields can now be easily added if needed. We can now check for the `interface_key` in the frontend to know from which part of the code an AI session was launched. Those models have also been added to the Hoot mock server. The `action_launch_ai_chat` method is added to the `ai.agent` mock model and returns the session and the composer. task-5411100 Forward-Port-Of: odoo/enterprise#114472
This update moves a collection of tests designed to run after the Odoo Enterprise installation. These tests ensure the core functionality is working correctly following the setup process. This improves the stability and reliability of the Enterprise version.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/262056
This update removes outdated 'magic buttons' embedded within standard email templates. Instead, these buttons are now added after the email has been processed, streamlining the user experience and ensuring consistent functionality across all email communications. This change improves the reliability of email actions triggered by standard templates.
Original PR description
Before this commit: There were magic buttons that were part of the body of some standard email templates. After this commit: Remove all magic buttons that are part of the body of All standard email templates and add them after the mail is processed Task-3186268
This update adjusts how European leaves are calculated within the payroll system. Now, European leaves are treated as an advance on double holiday pay, ensuring they are taxed in the same manner. This change aligns with European regulations and provides accurate payroll calculations for employees on European leave.
Original PR description
European leaves must be considered as an advance on double holiday. Following that, it should be taxed the same way as double holiday. task-6127284
This update enhances the autofill feature in Odoo's spreadsheet tools, specifically for pivot and list views. Previously, these autofills were limited, but now they correctly handle formulas containing multiple pivot/list functions, ensuring more accurate data population. This improves the usability and reliability of data analysis within the spreadsheet.
Original PR description
This commit makes the pivot/list autofill work when the formula contains pivot/list functions that are not the only function of the formula. The list autofill would override everything, and the pivot autofill would not do anything. We will now autofill the pivot/list function normally and re-use the rest of the formula as is. Task: [6113901](https://www.odoo.com/web#id=6113901&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update streamlines product variant handling across multiple Odoo modules, improving the user experience and reducing complexity. Key changes include removing redundant features and aligning data structures for a more consistent and efficient workflow. This simplifies product management and improves overall system performance.
Original PR description
* = [account_intrastat,approvals, documents_product, helpdesk_sale_timesheet,hr_expense_stripe,l10n_ke_edi_oscu, l10n_ke_edi_oscu_stock,l10n_pe_edi_stock,mrp_plm, pos_pricer, quality_control,…
* = [account_intrastat,approvals, documents_product, helpdesk_sale_timesheet,hr_expense_stripe,l10n_ke_edi_oscu, l10n_ke_edi_oscu_stock,l10n_pe_edi_stock,mrp_plm, pos_pricer, quality_control, sale_subscription] - Drop all view inheritances targeting the removed product_variant_easy_edit_view - Remove `Product Variants` menus from Approvals and Quality Control -added account_avatax inside the Accounting tab group - Move pos_pricer Pricer group to after the Short Description group in the Sales page remove on_sale_price and pricer_tags_pricelist_id fields from the variant form - Remove product_product_view_list_at_date list view - Remove mrp_plm ECO button from variant form - Update sale_subscription variant field to many2many_tags_color_dot widget - Simplify UI extensions by removing redundant variant-only fields and customizations - Clean obsolete view logic and tests relying on direct variant editing This aligns product variant handling across modules, and ensures a consistent user experience. See Also: Community PR:https://github.com/odoo/odoo/pull/244185 Upgrade PR:https://github.com/odoo/upgrade/pull/9276 task-5207510
This update enhances the 'Sign' module's ability to display non-Latin fonts like Arabic and Bengali within PDF documents. Previously, font customization was limited; now, users can define multiple fonts within a system parameter, offering greater flexibility for diverse document layouts and languages without requiring manual parameter changes.
Original PR description
Up until now, by specifying a ttf font file in the use_custom_font system parameter, one could allow the display of different fonts or alphabets in the pdf generation in sign. With this PR we want to…
Up until now, by specifying a ttf font file in the use_custom_font system parameter, one could allow the display of different fonts or alphabets in the pdf generation in sign. With this PR we want to explore the possibility of defining multiple fonts, which would allow both for the use of different alphabets in different documents (without always having to go modify the system parameters) and multiple alphabets in the same document, in different text boxes/selection menus. The way it works is that a variable called sign.use_custom_font needs to be created in the system parameters and populated with a list of ttf files, separated by a ; For example, if one wants to add the fonts for Arabic and Bengali which are in files named NotoSansArabic-Regular.ttf and NotoSansBengali-Regular.ttf, the value of the newly created system variable should be: NotoSansArabic-Regular;NotoSansBengali-Regular The code should check all the usual folders for fonts. If a file is not found it is ignored and a warning is logged. At document rendering time, if an appropriate font is not found for a text to be displayed in a Text, TextArea or Selection field then the system defaults to Helvetica (latin alphabet) and most different-alphabet symbols are rendered as black boxes. This is intended. Task: 4731754
This update adjusts the popover that appears when setting time off requests in Payroll > Time Offs. Previously, the popover had a fixed width, causing issues with button placement. This change creates a dynamic popover that adapts to its content, ensuring a cleaner and more user-friendly experience.
Original PR description
When going into Payroll > Time Offs > Clicking on a cell > Clicking Set, the popover that appears is just the default MultiCreatePopover, which has a maximum width of 276px. In some cases, many buttons appear besides duration or in the footer, so we want the popover width to be dinamical instead. To do this, we create a new Popover that extends the original. The object is the same, but this way we can override the template and add mw-100 to the class of the body, so that the popover will adjust to its contents. Task: 5990385
This update simplifies the names of payroll structures used in the Belgian localization for Odoo Enterprise. The change reduces the length of these names, improving readability and maintainability within the system. This is an internal improvement that doesn't impact users directly.
Original PR description
Change the payroll structure names for the Belgian locatization to be shorter. task-6159009
This update replaces an outdated technology (Deferred) with a modern, more efficient approach (Promise.withResolvers) within the Odoo Live Chat module. This change enhances the overall performance and stability of the live chat feature, ensuring a smoother user experience.
Original PR description
Deferred is deprecated, Promise.withResolvers is now the preferred API. Part of [task-5262203](https://www.odoo.com/odoo/1519/tasks/5262203) Community: https://github.com/odoo/odoo/pull/262207
This update streamlines the softphone interface by simplifying the pill design and improving clarity. The changes include a visual update to recording and transcription indicators, as well as a removal of the 'On hold' pill. This enhances the user experience and reduces confusion.
Original PR description
Before this PR, the design of the pills were not consistent and a bit confusing. Instead, the recording pill is replaced by a red recording circle, the transcribing pill is replaced by the…
Before this PR, the design of the pills were not consistent and a bit confusing. Instead, the recording pill is replaced by a red recording circle, the transcribing pill is replaced by the "Transcribing..." text and the On hold pill is taken out. In the active state of the Hold and Record/Stop button the text is changed respectively to text-warning and text-danger. Before, the "transcribing" status depended on the recording status to be displayed, now it can be displayed whether or not the call is being recorded. task-5882281 | | Before | After | |--------|--------|--------| | Hold | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 39 44" src="https://github.com/user-attachments/assets/27f3f08e-40ae-440d-8024-2f16484b8e32" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 17 33" src="https://github.com/user-attachments/assets/4ff3e9ba-a2e4-4d0d-9e3d-eccc32c9e8c8" /> | | Hold + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 33" src="https://github.com/user-attachments/assets/96344c97-d56e-4887-bb16-94518b48faec" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 38 01" src="https://github.com/user-attachments/assets/5246614b-d18e-42ef-b84e-1ed783a700d2" /> | | Hold + Record | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 25 01" src="https://github.com/user-attachments/assets/cde4cd38-9162-4f36-bd91-faba26d71556" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 31" src="https://github.com/user-attachments/assets/af8fa55a-73cd-452d-924d-735d5ea2ff09" /> | | Hold + Record + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 38" src="https://github.com/user-attachments/assets/09dd22f6-c865-476e-8b02-1ffc92a0da1a" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 17 36 08" src="https://github.com/user-attachments/assets/62d7bc4c-2912-4324-8736-e40627048c49" /> | | Record | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 59" src="https://github.com/user-attachments/assets/dc8672d9-a8ba-484e-a1f1-ce3789aaa688" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 27" src="https://github.com/user-attachments/assets/102aea8f-98bf-4898-902f-7981fce37176" /> | | Record + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 50" src="https://github.com/user-attachments/assets/0e24d78a-0a43-4a8e-ab85-7fb5b059d959" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 17 36 05" src="https://github.com/user-attachments/assets/d2f56fdf-ad6b-4aaa-9eeb-39c47407c903" /> | | Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 39 00" src="https://github.com/user-attachments/assets/38ed1208-8b8c-4d34-89f9-e0c756bef49b" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 37 54" src="https://github.com/user-attachments/assets/f0eb6ebd-6a51-49e0-ac74-44ebfed7a23b" /> | | Forced Record + Forced Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 47 39" src="https://github.com/user-attachments/assets/57635d0d-60ac-4c2c-81b0-016dde2461a9" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 44 27" src="https://github.com/user-attachments/assets/59cba9d5-5d4f-4589-a5f0-c9484007c618" /> |
This update adjusts the XLSX export reports to align with new Indonesian tax regulations (Act 2025). Previously, reports relied on specific tax sections, but now they utilize report line names and tax tags for accurate reporting. This ensures compliance with updated tax requirements.
Original PR description
In this commit, the XLSX export and report warning are adapted to support the newly introduced TDS/TCS reports as per Act 2025. Previously, the XLSX reports depended on TDS/TCS sections. However, with Act 2025, certain taxes no longer have associated sections. This dependency has been removed, and report generation now relies on report line names and tax tags instead. task-6124431 Forward-Port-Of: odoo/enterprise#115679 Forward-Port-Of: odoo/enterprise#113916
1 change
Enhancements to existing features
This update expands the 'Reload AI Data' button on invoices to support importing bills from Peppol and other e-invoicing formats. This allows users to easily correct mistakes or re-import invoices after deleting lines, improving data accuracy and streamlining the billing process.
Original PR description
When a bill is imported from OCR there is a button called Reload AI Data appears that the user can use to reload the bill, it is useful if the user deleted a line by mistake or for whatever reason wanted to reload the bill, but this button is only supporting OCR at the moment. This commit extends its functionality to support also peppol and other einvoicing formats as well. task-6159853
1 change
Enhancements to existing features
This update ensures the ‘pos_blackbox_be’ module works seamlessly with the latest Odoo images used for IoT Boxes. It backports a previous fix to maintain compatibility and improve the functionality of these devices within the Odoo Enterprise system.
Original PR description
Backport of #100440 opw-6172860