Friday, July 17, 2026
7 changes · master
Enhancements to existing features
Saudi Arabian currency rate updates now use the Saudi Central Bank as the dedicated source instead of the default xe.com provider. This improves alignment with official SAR exchange rates and avoids duplicate rate entries when several days of data are returned.
Original PR description
Added a new exchange rate provider for the Saudi Central Bank (SAMA) to fetch official SAR exchange rates. Saudi Arabia is removed from the xe.com default and mapped to this dedicated provider instead. Since the API response includes multiple days of data, duplicate currency entries are deduplicated by keeping the first (most recent) occurrence of each currency code. task-4422561
Customer notes now appear as warnings on billable helpdesk tickets and field service shift forms. This helps service teams see important sales or customer information before working on a ticket or scheduled visit.
Original PR description
- When there is a note on a customer, display it as a warning: - in the ticket form view, if the team is billable - shift form view - move `use_helpdesk_sale_timesheet` from `helpdesk_sale_timesheet` into `helpdesk_sale` --- Task-4910696
This improvement creates redirects from old product links to their new Odoo product pages when moving from another ecommerce platform. It helps businesses retain SEO value and avoid broken product links after transferring an old domain.
Original PR description
When switching from an ecommerce platform to another, a major issue is that all the links to your products change and so all of the SEO linked to those product links are lost. One way to mitigate this issue is to create redirects for each products. Once the old domain is transfered, the old product links are restored and redirect to the corresponding odoo products.
Obox remote debugging can now be enabled directly from the Obox form instead of asking customers to visit a special device URL. This makes support sessions easier to start by letting users provide the required Tailscale token in Odoo.
Original PR description
Before this commit, enabling remote debug for an Obox required accessing a specific URL on the Obox, which might be difficult to instruct clients to do. After this commit, there is a Remote Debug toggle in the Obox form view, just like the IoT box. A user simply needs to provide the Tailscale token to enable remote debug. task-6392868
The paid appointments module no longer creates a default booking fee product during installation, keeping databases cleaner for businesses that do not use paid appointments. A booking product is now created only when needed for paid appointment types, and unused unsold booking products can be removed.
Original PR description
# Purpose Installing the module "appointment_account_payment" creates a default product called "booking fees" used in paid appointment type. This auto-creation pollutes the DB of users that never uses such appointment types. Furthermore, the product couldn't be deleted once created. # Specs - Removed the creation of a default booking product upon module installation. - On the creation of a paid appointment type, will create a default product ready for edition by the user. - On manual checkbox activation, a product with a default price can be created through the dropdown menu. - Unused booking product that haven't been sold can be deleted. Task-6167887
Users can now apply common reconciliation actions to multiple selected bank statement lines at once. This reduces repetitive work by letting teams use the main action, assign partners, or set account numbers across several records in one step.
Original PR description
Added actions for multi select of bank statement lines in the list view to: - Use the primary action of all of the selected records - Set the partner for all of the selected records - Set the account number for all of the selected records task-6102308
Deleting an attachment linked to a document now moves the document to the Trash instead of removing it permanently. This protects business documents from being lost when attachments are deleted from related records such as vendor bills or chatter messages.
Original PR description
We replace the `documents.unlink.mixin`, which was previously applied only to specific models, with a generic mechanism that works regardless of the involved models. This new mechanism archives the…
We replace the `documents.unlink.mixin`, which was previously applied only to specific models, with a generic mechanism that works regardless of the involved models. This new mechanism archives the documents when their attachments are deleted, preventing their deletion. It does a little more than the mixin as the mixin was preveting the deletion of the document only when a record sharing a common attachment was deleted. Here, we also preserve the document if the attachment is deleted directly (for example from the chatter of a record). In that case, we also preserve the link between the document and the record (through the res_model and res_id of the document record). This change is motivated by use-cases similar to the following: - In document, click on the action "Create Vendor Bill" - On the chatter of the account.move, delete the attachment - Return to Documents Before, the document was deleted. Now, it has been moved in the Trash. To implement that feature, we remove the "ondelete cascade" on the attachment_id field of document and implement a custom version of it that move the associated documents (if any) in the Trash. Thanks to the api.ondelete decorator, we intercept all attachment deletion and if some of them are linked to a document we copy them and associate their copy with the documents before they are deleted. Note that the copy is cheap as odoo implements a deduplication of the store (see IrAttachment._file_write). Notes that we first have tried to preserve the attachment instead of duplicating it. But it was breaking other flow as they were expecting the attachment to be deleted. For example, when deleting a message with an attachment in the chatter, as the attachment was preserved it was still linked to the message even if it was not anymore directly linked to the model (ex.: lead) through res_model, res_id which caused the attachment to still appear in the chatter. Co-authored-by: Florian Charlier <flch@odoo.com> Task-5155496