Odoo Release Updates
Every commit to Odoo Community and Enterprise, parsed and categorized. Never miss a bug fix, improvement, or new feature.
Activity
2026-03-26
2026-03-25
[REF] sale_timesheet, test_discuss_full: query count
This commit optimizes Facebook and Instagram API calls by implementing batch request functionality using Meta's batch API, reducing HTTP calls and significantly improving refresh performance. The changes introduce a new utility function that batches up to 50 API requests at once, resulting in measurable performance improvements (refresh time reduced from ~45 seconds to ~20 seconds for 6 Facebook and 1 Instagram page). Additional improvements include fixing engagement trend calculations for Instagram to use total_interactions instead of reach, displaying saved and view statistics for Instagram posts, and various UI enhancements including conditional visibility of statistics fields.
[IMP] social_facebook, social_instagram: batch the requests
[FIX] im_livechat: pregenerate .assets_embed_external bundle in tests
The l10n_ar_edi module was adding selection values to the currency_provider field without declaring a direct dependency on currency_rate_live, causing upgrade failures when currency_rate_live was uninstalled. This fix adds the missing dependency declaration to ensure the field's selection values are always available when the module is active.
[FIX] l10n_ar_edi: Add dependency on currency_rate_live
This commit improves the resilience of the websocket kick-all function used during server shutdown by addressing two critical gaps: preventing new websocket connections from being accepted once shutdown begins (via a new _stopping event that returns HTTP 503) and ensuring the function actually waits for all existing websockets to fully close before completing, with polling and retry logic up to a maximum timeout. The test was also updated to verify that websocket disconnection callbacks are properly invoked during this shutdown sequence.
[FIX] bus: more resilient websocket kick_all
This commit refactors the out-of-office date formatting logic in the HR Holidays module by replacing custom Luxon-based date formatting code with the standardized toLocaleDateString utility function from the web core library. The change maintains identical functionality while reducing code duplication and improving maintainability by leveraging a shared formatting function that handles locale-aware date display consistently across the application.
[IMP] hr_holidays: replace custom code
This commit improves the assertBus test helper's error messaging when bus notifications arrive in an unexpected order. It refactors the matching logic to distinguish between messages that are completely missing versus messages that arrived but in the wrong sequence, then displays both the expected and actual order in error messages to aid debugging. This makes test failures clearer for developers working with the bus module's asynchronous messaging.
[IMP] bus: improve assertBus order message
This commit fixes a test flakiness issue in the livechat module where test results varied depending on whether the optional rating module was installed. The fix dynamically filters message fields based on installed modules rather than expecting a fixed set of fields, ensuring consistent test behavior across different Odoo installations.
[FIX] im_livechat: fix runbot issue due to remove livechat-rating relation
This fix modifies the work entry type deletion logic in the HR Payroll module to allow the system administrator (SUPERUSER_ID) to bypass the restriction that normally prevents deletion of work entry types. Previously, all users including the superuser were blocked from deleting these records and forced to archive them instead. The change adds a uid check to exclude the superuser from this business rule enforcement.
[FIX] hr_payroll: Allow SUPERUSER_ID deleting work entry types
This fix resolves a PDF export failure in account reports when annotations are present and certain date filter options lack a date_from value (such as period type "today"). The solution removes redundant date filtering logic from the annotation rendering method since date filtering already occurs during annotation generation, simplifying the code and eliminating the crash condition.
[FIX] account_report: Unable to export Report with Annotations
This fix addresses a migration issue where Swiss bank journals retain obsolete SEPA PAIN version values after upgrading to version 18.0, causing ISO20022 XML file generation to fail bank validation. The code now dynamically detects empty sepa_pain_version fields at file generation time and defaults them to the supported PAIN 09 format, ensuring already-migrated databases continue functioning without manual intervention.
[FIX] account_iso20022: fix sepa_pain_version at file generation to make it PAIN 09 when empty
[FIX] web: record_selectors, relational_utils: selectCreateDialog nice title
This change implements access control validation for records with new ids that have an origin record. Previously, new records with origins bypassed access checks; now they inherit the access permissions of their origin record. If a user lacks access to the origin record, they cannot access the derived new record, closing a security gap where origin-based record copying could bypass row-level access rules.
[IMP] orm: check access for new ids with origin
Fixed a constraint validation bug in the AI module that prevented module updates by incorrectly blocking any llm_model write operation on the image generation agent, even when the new value matched the existing one. The fix adds a check to only raise the constraint error when the llm_model is actually being changed to a different value, allowing legitimate updates while still protecting against unauthorized model changes.
[FIX] ai: fixing constraint issue with image agent
[FIX] html_builder, website: correct dropzones on snippet group click
This fix removes an obsolete manual payslip_state assignment from demo data for an hr.leave record, allowing the system to automatically compute this field instead. The change eliminates a popup warning that appeared when viewing time off records in the payroll module during demo data initialization, improving the user experience in demonstration environments.
[FIX] hr_payroll: Fix TimeOff popup warning in demo
This commit refactors the ai_attachment_vacuum model to use explicit ORM record rules instead of custom Python-based access control logic. The custom _check_access method that manually filtered forbidden records and constructed access errors has been removed and replaced with declarative ir.rule records that enforce read/write permissions based on attachment public status and res_access fields. This modernizes the module to leverage Odoo's standard access control mechanisms, reducing code complexity while maintaining the same access restrictions.
[IMP] orm: access_domain and explicit record rules
This commit introduces a new _access_domain method to replace custom _check_access implementations, making record-level access rules explicit and visible in ir.rule definitions rather than hidden in code overrides. The change converts complex access logic from Python methods into computed user-dependent domain fields (res_access_read, res_access_write, etc.) on mail models, enabling record rules to work consistently across all access flows while allowing models that inherit from attachments or mail to selectively bypass inherited access rules.
[IMP] orm: access_domain and explicit record rules
2026-03-24
This commit adds a documentation link to the U.S. Direct Deposit payment settings in the localization module, pointing users to the official Odoo documentation for configuring direct deposit payments via Wise. The change ensures users can easily access setup and usage instructions directly from the settings interface.
[FIX] l10n_us_account: link to direct deposit documentation
This commit adds OpenRouter proxy support to the Claude Code sandbox environment used by Odoo developers. The change introduces a --openrouter flag to bwrap-claude.sh that automatically configures the necessary environment variables (OPENROUTER_API_KEY, ANTHROPIC_BASE_URL, and model defaults) to route Claude API calls through OpenRouter instead of directly to Anthropic, while allowing all defaults to be overridden via host environment variables. This enables developers to use alternative Claude model providers or manage API costs through OpenRouter without modifying the sandbox setup itself.
[IMP] setup: support OpenRouter in bwrap-claude
This commit refactors the bus notification assertion system in Odoo tests by introducing a unified BusResult descriptor class to replace the previous two-list approach (channels and messages). The new system provides clearer test semantics, prevents stale data from affecting assertions, compares dictionaries regardless of key order to eliminate brittle failures, and delivers explicit error messages showing expected versus actual notifications. This improvement strengthens test reliability across mail, calendar, livechat, and other modules while making test code more readable and maintainable.
[REF] bus, mail, *: improve assertion on bus notifications
This fix prevents PDF content duplication when printing field service reports across multiple tasks where PDF outline-based splitting fails. The issue occurred because when outline detection couldn't properly identify document boundaries, the system would generate individual PDFs for each record AND then append the full recordset PDF, causing all content to appear twice in the final output. The one-line fix ensures that when individual record generation occurs as a fallback strategy, the function returns immediately instead of continuing to process and merge the original recordset PDF.
[FIX] base: prevent pdf duplication when outline split fails
This fix corrects the survey question error alert logic to prevent false "question requires an answer" messages from appearing on conditional questions shown for the first time in the post-submit flow. The change refines the display condition to check not only if a question is marked as post-submit, but also whether the user has actually skipped it in the pre-submit flow or is in the post-submit review stage, eliminating unnecessary error alerts on newly revealed conditional questions.
[FIX] survey: fix question error alert
[IMP] base: return MissingError in _get_cached_template_info when record not found
This commit enhances lead assignment logging in the CRM module to provide real-time visibility into the assignment process, particularly when errors occur during batch processing. The changes introduce granular logging that tracks assigned leads per team and displays progress summaries at regular intervals during the iterative assignment loop, ensuring that diagnostic information is captured even if the cron job crashes mid-execution.
[IMP] crm: improve assign logs
This fix corrects the deletion permission logic for salary rules in the HR Payroll module by allowing the SUPERUSER to delete any salary rule, including system-created ones, while preventing regular users from deleting system-generated rules. Previously, the SUPERUSER was incorrectly blocked from deletion due to flawed permission checking logic that only examined rule creation ownership rather than current user identity.
[FIX] hr_payroll: Allow SUPERUSER deleting a salary rule