Daily updates from Odoo
Friday, December 19, 2025
36 changes · master
New functionality added to Odoo
This update adds call recording data to the Odoo Enterprise demo environment. This allows users to experience the call recording feature during demonstrations and testing. It improves the demo's realism and provides a better understanding of the functionality.
Enhancements to existing features
This update enables users to unpin all types of WhatsApp channels within the Enterprise edition of Odoo. Previously, users could only unpin specific channel types. This change simplifies channel management and improves user flexibility.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/232501 task-4606867 task-5408790
This update enhances the Helpdesk module by allowing other Odoo modules to customize the criteria used to define Service Level Agreements (SLAs) for tickets. Previously, this customization was limited, but this change broadens flexibility and improves how SLAs are managed within the Helpdesk system. It aligns with existing practices for related domains.
Original PR description
Allow other modules to modify the _sla_find domain when adding SLAs to helpdesk tickets. This is already the case for extra and false domains, while the main domain is hardcoded up to this commit. Forward-Port-Of: odoo/enterprise#101624 Forward-Port-Of: odoo/enterprise#97501
This pull request enhances the employee view across both public and private settings, making it more uniform and user-friendly. The changes focus on visual consistency, improving the overall employee experience within the HR application. This ensures a more streamlined and professional appearance for employees.
Original PR description
The aim of this PR is to make the employee public and private views look similar task-4778704
This pull request updates the views used for managing work entry types and work entry definitions within the HR payroll module. These changes enhance the user experience and improve the organization of related data, streamlining HR processes.
This update enhances the user experience of the Sign app by refining its interface and underlying functionality. The changes focus on minor adjustments to improve usability and streamline the signing process. This results in a smoother and more efficient experience for users.
Original PR description
This task aims to enhance the user experience by refining both the UI and functionality of the sign app. task-5169331
This update enhances the Odoo Enterprise system by automatically logging when payment links are created, including the payment amount. Previously, it was difficult to track these links, making it harder to manage payments. This change provides better visibility and simplifies payment tracking.
Original PR description
Log in the chatter a message that a payment link has been generated with the amount it was generated for, because it used to be difficult to track if a payment link was generated and for how much. task-5062371
This update introduces a new feature to duplicate existing audit reports, streamlining the process of creating new reports based on previous versions. This allows users to quickly adapt reports for upcoming years with minor adjustments, saving time and effort.
Original PR description
This PR adds a method to duplicate an audit report. When duplicating an audit report, the system copies all articles linked to the original report, adjusts the start and end dates of the embedded account reports, updates the internal links and refreshes the article indexes in the copied articles. This new method allows users to easily create a new audit report based on an existing one, which is especially useful when only minor adjustments are needed for the upcoming year. Task-5189391
Resolved issues and error corrections
This update disables Intervat functionality within the l10n_be demo company data. This change prevents Intervat from being automatically set during testing with Runbots, ensuring more consistent and reliable demo environments. It's a minor improvement to the demo setup.
Original PR description
This commit set the `l10n_be_intervat_mode` to `disabled` in the l10n_be demo company. The reason why we are doing this it to avoid having intervat set by default on runbots. task-5404719 Forward-Port-Of: odoo/enterprise#101929
This update fixes a misleading warning message displayed in the eCommerce shop when users try to add subscription products without a defined plan. The change ensures users receive a clear 'no valid combination' warning, improving the shopping experience and preventing confusion. This resolves a usability issue for subscription offerings.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Install website_sale_subscription - Create a subscription product without a plan - Open product on eCommerce Issue: - When viewing a subscription product…
Version: - saas-18.4 Steps to reproduce: - Install website_sale_subscription - Create a subscription product without a plan - Open product on eCommerce Issue: - When viewing a subscription product without a subscription plan in the eCommerce shop, the system incorrectly shows the warning "This subscription is not compatible with the one already in your cart. Please order them separately or empty your cart." - This happens even if the cart is completely empty. - The method _is_add_to_cart_possible doesn’t find any valid combination to add to the cart, and because the product is marked as recurring, it always triggers the wrong message. Solution: - Add a condition to check if current product have any recurring price set if not then it will show the correct warning that 'This product has no valid combination.' Impact: - Users see clear and correct warnings on products without a subscription plan. task-5255749 Forward-Port-Of: odoo/enterprise#102251 Forward-Port-Of: odoo/enterprise#100929
This update corrects a bug where inaccessible folders were incorrectly included in document search results. Previously, searching for folders within a company structure would incorrectly display folders that were not accessible to the user. This fix ensures that only accessible folders are shown, improving data accuracy and user experience. Performance testing confirmed this as the optimal solution.
Original PR description
`user_folder_id` and `folder_id`'s `child_of` were not taking into account that the path could be broken if inaccessible folders are between accessible documents. E.g., the DB structure COMPANY └── Folder A └── Folder B (inaccessible to User A) └── Folder C Would appear to user A as COMPANY └── Folder A SHARED └── Folder C such that "Folder C" should not be found when searching `child_of` "Folder A" or "In Company". Note that more creativity would be necessary to fix this before 19.0 as the stored `folder_id` field could not be `_search`ed. Task-5231269 Forward-Port-Of: odoo/enterprise#99040
This update fixes an issue where a new offer page would reset to a blank state after a refresh. The change ensures that the correct employee context is maintained when refreshing the offer details, providing a consistent and accurate view for users. This improves the user experience and data integrity.
Original PR description
Steps to Reproduce ================== - Go to Employees - Choose an employee with no offers - Click on the "Offers - new" smart button (a form view will open with the correct employee name at the bottom) - Refresh the offer's page without saving (the employee field is emptied and the required Applicant field appears) Issue ================== The generate offer action that is triggered through the smart button returns a one-time action dictionary with the context. But that context is lost when we refresh the offer page as it's not saved anywhere. Fix ================== Replace the action dictionary with an action record for creating a new offer to ensure the context is maintained upon page refresh. Task-ID: 5059490 Forward-Port-Of: odoo/enterprise#102260
This update now automatically includes the XML file generated for Guatemalan e-invoices alongside the PDF when sending invoices to customers. Previously, only the PDF was sent. This change provides customers with both required files in one email, enhancing transparency and convenience.
Original PR description
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and…
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and sent to the SAT through Infile, is not attached to that email. Even though the SAT and Infile deliver the XML to the customer, it is more convenient and transparent if Odoo includes it directly in the outgoing invoice template email, so the customer receives both files in one place. Before this commit:- - Only PDF version is attached by default in customer email for e-invoices. - Name of edi document is prefixed with `Demo` if company is in demo environment (check parent company's environment in case of child company) (e.g. DEMO_certificate_INV_2025_00001.xml) and prefixed with `SAT` if company is in testing or production environment(e.g. SAT_certificate_INV_2025_00001.xml). After this commit:- - XML version is also attached by default along with PDF in customer email for e-invoices. - Name of edi document is always prefixed with `SAT`. task-5224521 Forward-Port-Of: odoo/enterprise#102322 Forward-Port-Of: odoo/enterprise#98978
This update enhances the visual appearance of the stock accounting module by updating company icons and improving the styling of buttons. This change provides a more polished and professional user experience for managing company-specific stock settings within Odoo Enterprise.
Original PR description
Forward-Port-Of: odoo/enterprise#99095
This update corrects a display issue in the Field Service module where task templates were incorrectly shown alongside real tasks. The fix ensures that only actual tasks are listed, improving the clarity and usability of the 'All Tasks' view. This resolves a potential confusion point for users.
Original PR description
Steps to Reproduce
- Navigate to Field Service > All Tasks.
- Observe that task templates are visible with tasks.
Issue
- Task templates are visible in the Field Service > All Tasks view, which is incorrect. Only real tasks should be listed.
Cause
- The domain in the view definition only filtered tasks by `is_fsm = True` and ` project_id != False`, but it did not exclude template tasks and sub-tasks of task templates.
Solution
- Added `('has_template_ancestor', '=', False)` to the domain so that only actual tasks are displayed in the Field Service > All Tasks view.
task-5079337
Forward-Port-Of: odoo/enterprise#102409
Forward-Port-Of: odoo/enterprise#94472This update corrects a test failure related to VAT number validation for Thailand. After implementing stricter VAT number checks, a test case failed because the previously used VAT number didn't meet the new format requirements. This ensures the Thailand reports function correctly and accurately.
Original PR description
Following the implementation of proper validation for VAT numbers for Thailand, this now fails as the one set in the test doesn't follow the proper format. Community PR: odoo/odoo#239616 Total credits to @vin-odoo Forward-Port-Of: odoo/enterprise#102404 Forward-Port-Of: odoo/enterprise#101905
This update corrects a bug in the web_studio module that was causing errors when users made minor changes to PDF reports. The fix ensures that insignificant edits don't trigger unnecessary diffs and errors, improving report editing stability. This prevents users from encountering 'Document is empty' errors when saving.
Original PR description
Example of steps: - Install sale_management and web_studio - Try to edit PDF Quote report - add /4 columns somewhere above the table - try to save - Error: Document is empty In this case, for some reason `html_editor` edits the external_report by changing the order of attributes on a node, which causes a diff, but not relevant for studio and won't produce any xpath operations. This commit handles this case by initializing the Studio view to `<data/>`. opw-5351588 Forward-Port-Of: odoo/enterprise#102416
This update corrects a warning message that appeared when scheduling work entries with start and end dates combined with durations. The change ensures that the system accurately prevents overlapping work entries, maintaining data integrity. This resolves a potential issue with scheduling conflicts.
Original PR description
Problem ---------- This warning message doesn't make sens with the transformation of work entries date_start/stop in date+duration. No overlap is possible. task-5349515 Forward-Port-Of: odoo/enterprise#100163
This update resolves an issue where the ISO 20022 XML generation consistently used two decimal places for currency amounts, leading to errors for currencies like JPY. The fix dynamically sets the decimal places based on the currency, ensuring accurate data formatting and preventing potential errors.
Original PR description
Issue: Generating the xml file for iso20022 always generates the amount with two decimals which is hard coded and can cause error for currencies without decimals for example JPY. Fix: The fix is to have the currency decimal number dynamically set through the currency decimal places field. task: 5242204 Forward-Port-Of: odoo/enterprise#101368
This update fixes an issue where XML reports were incorrectly including a slash ('/') when there was no comment provided. The change ensures that empty comment sections in XML reports are properly left blank, improving report accuracy and consistency. This resolves a minor formatting problem.
Original PR description
Since 17.0, we added a / when there was no comment in the comment section of the xml. This is wrong and should be left empty. opw-5242381 Forward-Port-Of: odoo/enterprise#102174 Forward-Port-Of: odoo/enterprise#100033
This update prevents HR users from receiving unnecessary reminder emails. Previously, reminders were triggered by time-off requests or public holidays, even if the user didn't need to submit a timesheet. Now, reminders are only sent for active timesheet entries requiring user input, streamlining the process and reducing email clutter.
Original PR description
**Steps to reproduce:** - Install timesheet_grid_holidays - Create a user with no timesheet access - Create a leave and approve it as a manager - Set up employee reminders in timesheet settings - Run the timesheet reminder scheduled action **Issue:** HR users without timesheet app access or who haven’t submitted timesheets in the past 3 months were still receiving reminder emails. **Cause:** When a time-off is approved or a public holiday is recorded, it generates timesheet entries, which causes reminder emails to be sent incorrectly. **Fix:** Filter out time-off and public holiday entries when sending reminders. Now, reminders are only sent for actual timesheets that require user input. task-5085790 Forward-Port-Of: odoo/enterprise#102342 Forward-Port-Of: odoo/enterprise#95450
This update enhances the display of security class names on the transaction form, resolving an issue with inconsistent styling. The change utilizes a new Odoo markup system (odoomark) for more reliable and accurate presentation, improving the user experience and ensuring consistent security information is shown.
Original PR description
This commit refactors the way security classes are displayed on the transaction form view drpodown menu. It uses the new odoomark markup \v instead of hacky css to achieve proper styling to security classes display names. odoomark new markup PR: https://github.com/odoo/odoo/pull/239431 task-5418874
This update fixes a technical issue where the AI action feature would generate tracebacks when the prompt field was left blank. The fix skips parsing the prompt when empty, ensuring smoother AI action execution. Additionally, the AI system now anticipates scenarios where it needs information, preventing it from requesting further user input.
Original PR description
Prior to this commit, when the AI action prompt was left empty, we would get a traceback when that AI action was executed. The traceback would occurs because the prompt is an HTML field with the…
Prior to this commit, when the AI action prompt was left empty, we would get a traceback when that AI action was executed. The traceback would occurs because the prompt is an HTML field with the field selector plugin, which means that it requires parsing before it's sent to the LLM. There was no check during parsing whether the field is empty or not and thus a traceback would occur during processing. In this commit we added a check for whether the prompt field is empty or not and if it is, we skip parsing altogether. We still call the LLM but without the final-prompt. The pre-prompt with contextual information is still sent thus the LLM can still perform the action if it's simple enough. Also, if the AI server action prompt is ambiguous and the LLM "feels" like it needs additional input to complete its task, it might respond with an additional query to the user instead of calling one of its available tools. Thus, in this commit, we add an explicit instruction to the AI Server action pre-prompt which should convey to the LLM that it will not be able to get any additional input from the user and it should assume that any important information for performing its task will be hardcoded in its available tools. Task-5379758 Forward-Port-Of: odoo/enterprise#102441
This update fixes an issue where job offer emails didn't include the employee's name in the subject line. Now, emails will include the employee's name, making them more personalized and easier to identify. This improves communication and clarity for both HR and the new hire.
Original PR description
**Steps to reproduce:** - Go to Employees app and select any employee - Press "Offers" smart button - Create a new job offer and send it by email **Issue:** The employee name is not populated in the email subject. Task: 5407028
This update allows employees to modify their own overtime attendance records by enabling them to act as their own approvers. Previously, permission issues prevented them from making these changes, leading to inaccurate records. This fix ensures employees can accurately update their attendance information.
Original PR description
Employees set as themselves as approvers couldn't modify their attendances due to permission issues with other models. task-5427553 Forward-Port-Of: odoo/enterprise#102415
This update resolves an issue where payroll modules (l10n_xx_hr_*) were unnecessarily dependent on country information. Removing country dependencies from related modules like l10n_us and l10n_fr ensures a cleaner and more efficient system. This change improves the stability and maintainability of the payroll functionality.
Original PR description
This commit ensures that the dependencies of l10n_xx_hr_* modules don't include countries in the manifest. Countries were removed from l10n_us_hr_payroll, l10n_us_hr_payroll_adp, and l10n_fr_hr_payroll_account since l10n_us and l10n_fr have countries declared in their manifests. task-5408245
This update adjusts the automated tests to align with recent changes to how product prices are managed within Odoo. Specifically, the removal of a previous pricing method has been addressed, ensuring the tests accurately reflect the current system. This ensures consistent and reliable pricing calculations.
Original PR description
**Purpose:** Adapt the tests to reflect the changes made to the product.product price field and the removal of its inverse method. Task-5207469
This update adjusts where the recording policy settings are stored within the Odoo system. Previously, these settings were located within the VoIP module itself; now, they're correctly placed in the dedicated voip.config file. This change ensures consistent and accurate recording behavior for VoIP calls.
Original PR description
After https://github.com/odoo/enterprise/commit/8705dfc626fabf9a1ef469a07f8ef85cf838c88d, recordingPolicy is now in voip.config instead of voip
This update corrects a test related to exporting accounting data for Swedish businesses. The accounts have been properly separated to align with Swedish fiscal regulations, ensuring accurate reporting. This change improves the reliability of the export process for our Swedish customers.
Original PR description
The accounts have been separated between goods and services for the fiscal positions to work. Fix the test of an export of Sweden accounting task-5365658 Forward-Port-Of: odoo/enterprise#101722
This update resolves a bug where field syncs would disappear after inserting a new row in a Quote calculator spreadsheet. The fix ensures that field syncs are correctly maintained when rows are added, preventing data inconsistencies. This improves the reliability of spreadsheet-based sales calculations.
Original PR description
Steps to reproduce: - create a Quote calculator spreadsheet - add a field sync on A1 - autofill it down on a few cells - select row B - right click and "Insert row above" => some field syncs disapeared Forward-Port-Of: odoo/enterprise#101367 Forward-Port-Of: odoo/enterprise#101066
This update fixes an error in the VAT return reporting process for Belgium. Previously, the system incorrectly set a flag to True, even for periods outside the year-end. This change ensures the flag is only set to True when appropriate, improving the accuracy of VAT reports and preventing potential reporting issues.
Original PR description
When the client_nihil field was hidden from the wizard, its computation always set it to True. This was wrong : this field can only be True in the XML when in the last period of the year, so when should_display_client_nihil is True as well. In every other cases, it needs to be False. opw-5184056 Forward-Port-Of: odoo/enterprise#102454
Features or functions removed from Odoo
This update removes outdated and unused code from the spreadsheet dashboard documents module. This cleanup improves the stability and maintainability of the system, ensuring efficient operation. The change was triggered by a previous update and doesn't impact current functionality.
Original PR description
These actions are no longer used since 0b4e8185698e263371916d63f26067fafa1628eb
This change removes a redundant method for closing AI chats within the Odoo Enterprise platform. The removal was identified during a routine review of sudo calls, ensuring code cleanliness and efficiency. This update has no impact on functionality.
Original PR description
There was an unused method for closing ai chats in `ai_agent.py`. Caught it while reviewing our sudo calls. Removed it. The hash of the commit which made the removed method redundant is below: `c454e75686cfdfe452292525884e65b7232b8ce1` Task-5180530
Code cleanup and technical improvements
This update removes the outdated 'company_type' field from the contact model, streamlining the way we identify companies and individuals. The system now automatically determines if a contact is a company based on factors like VAT and identification types, tailored for each country's specific requirements. This simplifies the contact data structure and improves overall system efficiency.
Original PR description
This PR removes the 'company_type' field, which was previously used to distinguish between 'Person' and 'Company' contacts. The goal is to simplify the contact form and model by eliminating this distinction, as part of an effort to streamline and simplify the contact information structure. This change is in line with the broader initiative to remove legacy fields and make the model more straightforward as possible. is_company becomes a computed stored field, allowing each l10n to specify how a company is defined in a specific country. By default we will now rely on VAT and commercial entity to compute `is_company`. --- `l10n_br*` : Now considers a partner a company if their identification type is CNPJ --- `l10n_co*` : Now considers a partner a company if their identification type is RUT --- `l10n_*` : general : removed `is_company` / `company_type` from demo/tests Task-4714892
This update streamlines the customer display functionality by removing specialized code for IoT devices. Now, the display operates using the same standard mechanism as other devices, reducing complexity and maintenance needs. This change improves efficiency and reduces potential technical issues.
Original PR description
Before this commit, when the customer display was used normally, the data was sent via the websocket to any connected clients. When it was used on the IoT box however, a different system using IoT actions was used to update the display. This commit removes the special logic for the IoT case, instead just opening using the same mechanism as any other device. The display still works the same as before, but less requests are needed and there is less code to maintain.
This update simplifies the way documents are searched within Odoo Enterprise by removing a complex and unnecessary search operator. This change improves search performance and stability while addressing a technical issue related to the previous implementation. The update also aligns with best practices for document organization.
Original PR description
`child_of` `char` is weird, fragile, and not necessary. Note that we discourage the use of `user_root` for anything but searching. The compute method is only implemented to not break `filtered_domain` and should likely not be used to add the field in a view. Task-5207995