Daily updates from Odoo
Navigate
Branch
Saturday, August 2, 2025
8 changes
7 changes
New functionality added to Odoo
Documents can now be automatically sorted into folders using AI, helping teams reduce manual filing work and keep incoming documents organized faster. The update also improves AI prompt handling so files can be included safely and adds safeguards to avoid sorting loops and delayed email processing.
Original PR description
Purpose ======= Allow sorting documents that created / move in a folder with AI. Specification ============= To achieve that result, we need to create a new type of server actions, "AI". This type of…
Purpose
=======
Allow sorting documents that created / move in a folder with AI.
Specification
=============
To achieve that result, we need to create a new type of server actions,
"AI". This type of server action can use other server action marked
as "Use with AI". We call the "Use with AI" server action "tools".
The LLM can ask to execute a tool with some parameter. That allow it
to move documents in a given folder, to rename a document,
log a note, etc.
We also need to be able to add binary file in the prompt,
for that purpose, we stop using QWeb, and we render ourselves the prompt with LXML.
Various fixes were applied along the way.
See underlying commits for more details about each of the changes.
Technical
=========
Mail alias: To not block the email CRON, when documents are sent to a
folder with AI sorting enable, we delay the sorting (they will be
sorted in a different CRON, and a ribbon message will be shown
in the kanban view while they are waiting to be sorted)
Loop: We need to prevent loop in case the target folder is also marked
as "AI sorted".
Prompt injection: The new server action code is vulnerable to prompt injection.
An attacker could try to retrieve the information from the prompt
by fooling the LLM into inserting those information in the result
of the server action.
Most obvious example is writing an unlimited free text into a readable record.
Several measures are available to limit this when creating AI server actions:
- End users should make careful use of the '/record' command to specify the
possible "winner candidates" records of the server action.
- The 'ai_tool_schema' can be used to limit the available outputs of the LLM
(for example by truncating text to a certain limit)
- The LLM can only execute a set of manually selected AI tools, these have to
be carefully chosen to avoid unwanted side-effects as the LLM could be fooled
into executing any of these tools with any arguments
- Dynamic information inside the prompt is added using '/field', those values
should be reviewed to make sure they do not contain sensitive information
The AI server actions & tools provided as data in this PR have been reviewed
by Odoo to make sure they follow these criteria.
Number of API calls: OpenAI always answer `"status": "completed"` after
executing a tool (even if it's not finished) so even if the LLM
will execute one action and stop, it will require 2 API calls
(to be sure it's finished and that nothing else will be executed).
In the last call, to specify it's done, there's no more tool call,
and the LLM send eg `The documents has been moved to...`.
Even if we say `When you are done, sent DONE`, it sends it in the
last call. We could have limited the tools call to 1 for documents,
to improve performance, but then we will restrict the feature.
AI module: The code is done in the `ai` module, because it's meant to
replace `ai.tool`. For now, we keep the `ai_server_actions` module
but it's only used for "update with AI" action, and will be merged
with AI in the future.
Access check: We only check that we can execute the AI action, we skip
all check on the tools. The reason is that it can be executed in a
CRON on most cases anyway, so it's better for it to be explicit
(and to have something consistent). If a tool has a group, then a
warning will be shown to explain to the user that the LLM can skip
the access check for this action.
Default folders: For other models, if we didn't insert records in the
prompt, then we add the most used records. But for documents, they
inherit from the accesses of the parent folder, and so it has
security impact, so we don't insert the most used folders (if the
user does not do /record in the prompt, then the LLM won't be able
to move the documents).
Folders values: When inserting a record in the prompt, by default we
just insert its display name. We want the LLM to have more
information for the auto-sort, for example, if we have a folder
"Belgium" inside "Finance", the LLM should be able to know that
the Belgium folder is related to Finance.
Task-4915266A new Accounting and Knowledge integration lets users create polished audit reports directly in Knowledge, edit them collaboratively, and export them as professional PDFs. The update adds ready-made templates, embedded accounting reports, dynamic audit data, attachments, foldable sections, and electronic signature support to make audit reporting faster and more complete.
Original PR description
This PR introduces a new bridge module that connects the Knowledge and Accounting modules, enabling users to seamlessly create audit reports directly within Knowledge. Thanks to this integration, users can now generate professional-grade audit reports with just a few clicks, and continue editing them inside the Knowledge interface. See underlying commits for more details. COM: https://github.com/odoo/odoo/pull/214712 Task-4840940
Website live chat can now be powered by AI agents instead of only scripted chatbot flows. This lets businesses offer more flexible, question-and-answer style support conversations through a new AI Livechat website snippet.
Original PR description
- Previously, livechat channel rules could only be configured using scripted chatbots(chatbots that rely on pre-defined steps and answers). This commit gives the ability to configure livechat channel rules using AI Agents (LLMs). - Introduce AI Livechat website snippet. Community PR: https://github.com/odoo/odoo/pull/221008 task-4825509
Enhancements to existing features
Accounting teams can now use dedicated working files to support audits, including balance reviews, audit statuses, and year-over-year comparisons. The update also adds configurable return types and reusable checklists so audit and tax return controls can be organized and tracked more consistently.
Original PR description
This commit enhances the functionality of accounting returns, specifically for audit purposes. It introduces the concept of "Working Files", which are a type of accounting return designed to manually…
This commit enhances the functionality of accounting returns, specifically for audit purposes. It introduces the concept of "Working Files", which are a type of accounting return designed to manually audit the financial and accounting status of a company. For returns of this type, a new view is available. To access it, create a working file, open the corresponding audit, click the top-right button to reveal the top bar, and select the "Balances" view. The Balances view shows account balances over the audit period, along with additional columns such as: - The difference with the previous year - The audit status, which can be updated directly from the view This status is also available and editable on some accounting reports like the trial balance and balance sheet. Users can now create new return types (either tax return or audit) and configure fields such as periodicity and start date. Additionally, a new model account.return.check.template is introduced, allowing users to define and manage checks (either on audit or tax return). Each check can be: - A manual validation - A document upload - An automated validation based on a domain Audit checks are now grouped into cycles, which categorize checks by areas like fixed assets, inventory, operating expenses, etc. Note: While not recommended, it is now technically possible to configure multiple returns of the same type within the same date range. task-4840028
VoIP call records now have a dedicated form view with richer details, activity history, and clearer call status indicators. Users can also jump directly from a call to related business records such as sales opportunities, helpdesk tickets, recruitment applications, and subscriptions, making follow-up faster and more organized.
Original PR description
`*: voip, voip_{ crm, helpdesk, hr_recruitment, sale_subscription }`
This commit adds the form view of the voip.call model in VoIP
+ several enhancements to the VoIP call management system. Key
changes include:
- Updated the `voip.call` model to inherit from both `mail.thread`,
allowing the form view to have a chatter.
- Added new computed/related fields such as `calls_count`,
`image_1920`, and `avatar_128` to improve the information available
for each call.
- Enhanced the `write` method to update the partner's phone number
when the `partner_id` is changed.
- Introduced a new `CallStatusBadgeField` component to visually
represent call statuses in the UI.
- Added buttons for viewing related calls, opportunities, applications,
tickets, and subscriptions directly from the call form.
Task-4909097Resolved issues and error corrections
Users with limited timesheet access can now start and stop timers on tasks they are allowed to access, even when the parent project is private. This prevents unnecessary access errors and lets field service work be recorded correctly.
Original PR description
Before this commit, when the project is private and the user can only access to some tasks inside that project, he can create timesheets but cannot stop timer in one of those tasks when…
Before this commit, when the project is private and the user can only access to some tasks inside that project, he can create timesheets but cannot stop timer in one of those tasks when `industry_fsm` module is installed. This commit makes sure the user can start/stop a timer on task for which he has access to even if the project is private and he does not have access to it. Steps to reproduce the issue: ---------------------------- 0. install industry_fsm module 1. Create a project A with "followers" as privacy visibility 2. Create a task A and assign it to a project user with lowest timesheet access right. 3. log in as that user 4. Start a timer on Task A 5. Stop the timer and confirm the wizard Expected Behavior: ----------------- The timesheet should be created without any issue Current Behavior: ---------------- An Access error is raised because the user has no access to the project. task-4680412 Forward-Port-Of: odoo/enterprise#91370 Forward-Port-Of: odoo/enterprise#84807
This fix keeps draft POS cart items from disappearing after a page refresh when UrbanPiper is enabled. It also sends the correct meal type for product variants during UrbanPiper menu sync, improving accuracy for online ordering menus.
Original PR description
Steps to reproduce: - Installed urbanpiper - Open POS and add product to cart - Refresh the page . Issue: - Product in the cart automatically removes. Cause: - Order lines were filtered out when urban piper is enabled. Fix: - Filter out the order lines which are not associated with online order. Issue 2: - While menu sync to Urban piper, 'product variant' food_type is sent as NA although main product food_type is set as Vegetarian or Non-Vegetarian. Fix: - Set variant food_type as main product food_type. task- 4971503 Forward-Port-Of: odoo/enterprise#91578 Forward-Port-Of: odoo/enterprise#91098
1 change
Resolved issues and error corrections
This fix prevents an error when registering payments for Vietnamese vendors with specific bank account settings. Users can now create those vendor payments normally, improving reliability for Vietnam accounting workflows.
Original PR description
### Issue: When creating a vendor with a bank account and certain fields configured, trying to register a payment could raise a KeyError: 'none'. This was due to the incorrect order of validations in…
### Issue: When creating a vendor with a bank account and certain fields configured, trying to register a payment could raise a KeyError: 'none'. This was due to the incorrect order of validations in _check_for_qr_code_errors, introduced in PR #219566. This commit reorders the checks to ensure proxy_type is validated before being used. ### Affected Versions: 17.0 and later ### To reproduce: 1. Install account_accountant, l10n_vn 2. Select VN Company 3. Go to Accounting > Vendors > Vendors 4. Create a partner with country set to Vietnam 5. In Accounting tab, add a bank account with: - Account Name - Bank - Currency - "Send money" set to True 6. Go to Accounting > Vendors > Payments 7. Try to create a payment for that partner ##### Expected: Payment is created successfully ##### Current: KeyError: 'none' is raised OPW-4976541 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221522