Daily updates from Odoo
Saturday, July 19, 2025
14 changes
1 change
Enhancements to existing features
Purchase orders linked to a project now keep the project cost allocation alongside existing manual or model-based allocations when they do not conflict. This improves cost tracking by ensuring project-related purchasing expenses are consistently assigned without overwriting other valid accounting distributions.
Original PR description
Currently, if a purchase order line has an analytic distribution and then a project with an analytic account is added to the PO, the project analytic distribution is not added. Only in lines without any analytic distribution, the projetc account is added as expected. This commit modifies `_compute_analytic_distribution()` to keep both the project account and the existing analytic distribution (that were added manually or from a distribution model) in all PO lines where the analytic plans do not conflict. task-4904044 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216814
13 changes
Enhancements to existing features
Helpdesk live chat now relies on the existing user or guest name when starting a session, rather than passing a separate anonymous name. This simplifies the session setup flow and should make live chat behavior easier to maintain without changing the core customer experience.
Original PR description
This commit removes the anonymous_name param from the get_session route and uses the user or guest name in the relevant flows instead. It also cleans up the process of getting livechat channel values when getting the session. part of task-4675719 Related to : odoo/odoo#212150
The Create Batch Payment option is now shown directly in the payment list topbar instead of being hidden in the Actions menu. This makes batch payment creation quicker and easier for users who manage payments regularly.
Original PR description
This commit relocates the `Create Batch Payment` button from the Actions dropdown menu to the topbar in the account payment list view. By placing the button in the topbar, users can now access it more quickly. Task : 4891795
When a company changes the URL of its Odoo database, connected IoT boxes are now automatically informed of the new address. This helps avoid disruptions where paired devices would keep trying to contact the old URL, while protecting local test or pairing setups from being overwritten.
Original PR description
Before this commit, if a client renamed their SaaS database to use a different URL, it would cause paired IoT boxes to fail as they would try to contact the old URL to send devices etc. After this commit, when the `web.base.url` parameter is updated (which will happen the first time an admin logs in from the new URL), we send a websocket message to all IoT boxes informing them of the new URL. We don't do this if the new URL is localhost, as this would break the pairing. task-4879313
Subscription users now get a graph view to better visualize subscription data. This makes it easier for teams to spot trends and review subscription performance without relying only on list-based views.
Original PR description
task 4210212
Customers can now renew eligible subscriptions early and more easily reopen subscriptions that can still be restored. The portal wording and actions are clearer, while postpaid subscriptions are protected from advance payment mistakes.
Original PR description
Before: - Customers couldn't extend subscriptions early, with or without login. - Reopening a closed but reopenable subscription was not straightforward. - The 'Anticipate Payment' section and 'Automate payment' button lacked clarity. After: - Customers can extend subscriptions early (unless postpaid). - Renamed 'Anticipate Payment' to 'Extend until <date>' for clarity. - Replaced 'Automate payment' with 'Pay now', linking to the payment section. - Added 'Reopen' button for closed subscriptions, linking to the payment section.. task: 4656254
The Planning app now handles hidden resource relationship fields more efficiently to reduce memory usage. This supports better performance while preserving the information needed by the visible planning resource fields.
Original PR description
This commit is the counterpart of odoo/odoo#219598 where we force a limit of 1 on invisible x2many fields. Custom code can thus no longer safely read `records` to extract information like the list of ids in the relation. task-4921236
IoT box forms now show the box identifier to all users, not only in debug mode. This makes it easier to tell different IoT boxes apart while still allowing users to rename each record as needed.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/219589 Now that the IoT box hostname is no longer used, we will instead show the identifier to the user (without debug mode) so that they have a way of distinguishing IoT boxes. They can still rename the IoT box record to whatever they wish. task-4948953
Users can now open or close the VoIP softphone using a keyboard shortcut or the command palette. This makes call handling faster and easier, especially for users who rely on VoIP throughout the day.
Original PR description
This commit adds a data hotkey and command palette entry for toggling the VoIP Softphone. Previously, there was no shortcut or command to toggle the VoIP Softphone. Task - 4936059
The IoT app no longer shows a warning that an IoT Box has no linked subscription. Since certificates are now provided and renewed automatically at no cost, this warning was outdated and could confuse users.
Original PR description
As we now provide and renew certificates automatically and for free the "no subscription linked to your IoT Box" warning toaster makes no sense. This commit removes it. Forward-Port-Of: odoo/enterprise#90432
AI-powered features can now let a tool provide a final answer directly when it has enough information, without sending the request back for another AI response. This can make answers faster, reduce unnecessary AI usage, and let specialized tools return clearer completion messages.
Original PR description
The changes implement a new feature that allows AI tools to terminate response-generation loop early by returning an AITerminate object, which is useful for tools that can provide definitive answers without needing further LLM processing. This enables tools to: - Stop the conversation when they have a definitive answer - Prevent unnecessary LLM calls after tool execution - Return custom termination messages directly to users The implementation includes: - New AITerminate class in tools.py for signaling conversation end - Updated call_ai_tool to return termination status and message - Modified _generate_response to handle tool termination signals - Comprehensive tests demonstrating the new functionality
The automatic bank statement reconciliation process has been made more resilient. It can now report progress during longer runs and skip problematic statement lines instead of repeatedly failing, helping keep reconciliation automation running smoothly.
Original PR description
This commit aims at refactoring the following cron _cron_try_auto_reconcile_statement_lines The refactoring has 2 main purposes: 1. Start using progress notification API (to mitigate the cron being disabled after 5 failures) 2. Skip a record that caused an exception while in a cron (otherwise it would keep crashing on the same statement line) task-4900818 Forward-Port-Of: odoo/enterprise#90476 Forward-Port-Of: odoo/enterprise#88678
SEPA Direct Debit payment issues are now reported based on the payment state, making failures easier to understand and handle consistently. This improves reliability for payment follow-up, including subscription payment flows.
Original PR description
See community changes. task-3648413 See also: - https://github.com/odoo/odoo/pull/209685 - https://github.com/odoo/documentation/pull/13888
AI Fields now installs and works more seamlessly with Odoo’s AI capabilities, reducing duplicated assets and using the shared AI service for requests. Users get more reliable AI-generated field values, optional web grounding, and clearer explanations when the AI cannot confidently fill a field.
Original PR description
Purpose: --------- Add the ai module as dependency of the ai_fields module. This allows to - Auto install the AI fields and AI server actions when installing the AI module - Remove duplicate of the…
Purpose: --------- Add the ai module as dependency of the ai_fields module. This allows to - Auto install the AI fields and AI server actions when installing the AI module - Remove duplicate of the AI icon - Use the LLMApiService introduced in the ai module instead of the iap endpoint to make requests to LLM. The LLMApiService allows to enable extra parameters, especially web grounding and structured outputs. Structured outputs enforce the output type, which is more robust than describing the expected output in the system prompt. It also allows to ask the LLM to generate an "unresolved_cause" message that will be displayed in frontend, when the LLM can't provide a value confidently (because the user query is ambiguous). This allows to inform the user why the AI did not assign a value, instead of simply leaving the field empty or showing a generic error message. Note: AI fields currently only support openAI as Gemini's OpenAI compatibility does not support the responses API yet (which is needed to allow for web grounding only when needed). Task-4762422