Daily updates from Odoo
Wednesday, August 20, 2025
12 changes · saas-18.4
Enhancements to existing features
Avatars linked to partner records can now open the same profile popover as user avatars. This makes contact-related many-to-many fields easier to browse and use, especially in kanban and HR-related views.
Original PR description
With this commit, the AvatarCardPopover supports having an id of a `res.partner` record in the props. This allows components like KanbanMany2ManyTagsAvatarUserField (that use AvatarCardPopover) to be used with a Many2Many field related to `res.partner`. In such cases, the avatars will now be clickable and will display the avatar card popover. fixes: task-4640810 Forward-Port-Of: odoo/odoo#208846
Italian public administration invoices can now be signed through Namirial before being sent, helping businesses meet required XADES signature rules. The update adds the related configuration and processing flow, improves handling of signing errors, and ensures the signed XML replaces the original before attachment.
Original PR description
Invoices for the Italian Public Administration businesses must be signed with XADES before sending. We use Namirial's third-party signing services. - This upgrade adds configuration, a signing process, and new returns to handle this case. Old versions should be able to ignore this, as the invoice will stay blocked in the requires_user_signature state in Odoo, now deprecated, without being sent to the EDI. - Handle more error types, with dedicated server exceptions with an error code map. Old versions should be able to just handle them as before, generically. - When the Proxy Server signs an invoice, the XML will replace the one on the Odoo instance before it's actually attached. Needs: odoo/odoo#210572 Also see: odoo/iap-apps#978 Task [link](https://www.odoo.com/odoo/project/967/tasks/4477745) task-4477745 Forward-Port-Of: odoo/odoo#223245 Forward-Port-Of: odoo/odoo#196054
Romanian localization now includes the new 11% and 21% VAT taxes introduced by recent legislation. Tax groups were also updated to keep tax reporting and configuration consistent for businesses operating in Romania.
Original PR description
This PR adds new taxes and tax groups for 11% and 21% after new VAT law was introduced in Romania. It also fixes tax groups of some taxes and make it more consistent. TaskID:4979168 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222642 Forward-Port-Of: odoo/odoo#221238
The accounting tax helper documentation was improved to make it clearer which capabilities are available in point-of-sale JavaScript code and which are only available on the server side. This helps teams avoid confusion when maintaining tax-related logic across different parts of the system.
Original PR description
Since some of them are copy pasted javascript side, adding such docstring is helping to distinguish what is available directly js-side from point_of_sale from what is only accessible python-side. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223330 Forward-Port-Of: odoo/odoo#223258
Sales orders with many lines now load available product documents much faster. This improves responsiveness for users preparing PDF quotes, especially on larger orders.
Original PR description
Replace search in for loop with `_read_group` and a precomputed dictionary of available product documents Description of the issue/feature this PR addresses: Performance issue when opening SO with multiple lines (more than 100). See Speedscope before [speedscope_before.json](https://github.com/user-attachments/files/21251034/speedscope_before.json) <img width="1920" height="659" alt="image" src="https://github.com/user-attachments/assets/e77bec12-e8cf-4cc9-b3d2-90ad59db6fa3" /> And after: [speedscope_after.json](https://github.com/user-attachments/files/21251096/speedscope_after.json) <img width="1911" height="404" alt="image" src="https://github.com/user-attachments/assets/e1663ec3-2918-451d-ae25-6103d8a75eff" /> We went from 252ms for the query only to 12.63ms. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220613 Forward-Port-Of: odoo/odoo#219229
Point of Sale and related payment, loyalty, restaurant, and self-order modules now produce clearer diagnostic logs. This helps support and development teams identify where POS issues occur faster, reducing investigation time without changing the customer-facing checkout flow.
Original PR description
*: pos_adyen, pos_loyalty, pos_online_payment, pos_restaurant, pos_stripe Improve console logging in the Point of Sale and related modules. By using the `logPosMessage` utility function more…
*: pos_adyen, pos_loyalty, pos_online_payment, pos_restaurant, pos_stripe Improve console logging in the Point of Sale and related modules. By using the `logPosMessage` utility function more informations are now included in the console logs, such as the module name, function name, and a message. This makes it easier to track down issues and understand the flow of the application. Also when unfolding the console logs, some additional context is provided: - Variable values (if given to the console method) - Call stack trace (if available) Example of a log message: [IndexedDB]: put - Processing 40 items in store pos.order.line ### With its call stack: logPosMessage @ pretty_console_log.js:13 (anonymous) @ indexed_db.js:113 promises @ indexed_db.js:92 create @ indexed_db.js:193 synchronizeLocalDataInIndexedDB @ data_service.js:182 ..... ## Screenshots: <img width="779" height="764" alt="image" src="https://github.com/user-attachments/assets/6be024e4-e849-478b-9cdd-653300fc015a" /> https://github.com/user-attachments/assets/2342ca52-719c-4368-94e6-1e692faf12e0 Forward-Port-Of: odoo/odoo#222339
Online shop product searches now retrieve product attributes more efficiently, especially for large catalogs. This can significantly reduce waiting times when customers browse or filter products, improving the shopping experience.
Original PR description
### Description: The default query to fetch attributes for searched products needs to join on the `product_tmpl_ids` Many2Many field. This can be slow, as it requires a join on an intermediate table. This change avoids that by directly querying the attribute lines and grouping by `attribute_id` to remove duplicates. ### Benchmark (in 18.0): | N° of products | Before | After | |----------------|--------|-------| | 3708 | 400ms | 200ms | | 128539 | 4 min | 800ms | | 484798 | 6 min | 3s | ### Reference: opw-4937361 Forward-Port-Of: odoo/odoo#222249 Forward-Port-Of: odoo/odoo#222064
Romanian SAF-T reporting now includes the correct tax type and code mappings for newly introduced taxes under recent law changes. This helps businesses keep statutory SAF-T reports aligned with updated Romanian tax requirements and avoids reporting inconsistencies.
Original PR description
New taxes were introduced in Romania as per the new tax Law. The PR https://github.com/odoo/odoo/pull/221238/files added new taxes in community. This PR updates the SAF-T Tax Type and Code for the newly added taxes. TaskID:4979168 Forward-Port-Of: odoo/enterprise#92188 Forward-Port-Of: odoo/enterprise#91512
Users now receive a clear warning when enabling WhatsApp debug mode. This helps prevent surprises by explaining that media files will stop being received while debug mode is active.
Original PR description
#### Step to reproduce: - go to WhatsApp > Configuration > WhatsApp Buisness Account - enable debug mode #### Previous behavior: - active debug mode #### Expected behavior: - active debug mode - warn user that WhatsApp debug mode will stop medias from being received Other solutions would include the use of: - warning. They are triggered only on `onchange` methods. However, debug_logging is updated through buttons which do not trigger `onchange`. Therefore, to update it through a field it requires some changes in the XML which aren't appropriate for stable. - confirm using a wizard. It would require a new view which is not stable either. opw-4678542 Forward-Port-Of: odoo/enterprise#89995
The website generator now checks whether a provided URL can be reached before starting the scraping step. This helps avoid failed generation attempts and gives users a smoother setup experience when entering website addresses.
Original PR description
This commit checks that the URL is reachable before making the scraper request.
Point of Sale and related localization, IoT, enterprise, and mobile modules now produce clearer console logs with more context. This helps support and development teams diagnose POS issues faster without changing day-to-day user workflows.
Original PR description
*: l10n_de_pos_cert, l10n_de_pos_res_cert, l10n_it_pos, pos_enterprise, pos_iot, pos_mobile Improve console logging in the Point of Sale and related modules. By using the `logPosMessage` utility…
*: l10n_de_pos_cert, l10n_de_pos_res_cert, l10n_it_pos, pos_enterprise, pos_iot, pos_mobile Improve console logging in the Point of Sale and related modules. By using the `logPosMessage` utility function more informations are now included in the console logs, such as the module name, function name, and a message. This makes it easier to track down issues and understand the flow of the application. Also when unfolding the console logs, some additional context is provided: - Variable values (if given to the console method) - Call stack trace (if available) ## Example of a log message: [IndexedDB]: put - Processing 40 items in store pos.order.line ### With its call stack: logPosMessage @ pretty_console_log.js:13 (anonymous) @ indexed_db.js:113 promises @ indexed_db.js:92 create @ indexed_db.js:193 synchronizeLocalDataInIndexedDB @ data_service.js:182 ..... ## Screenshots: <img width="779" height="764" alt="image" src="https://github.com/user-attachments/assets/6be024e4-e849-478b-9cdd-653300fc015a" /> https://github.com/user-attachments/assets/2342ca52-719c-4368-94e6-1e692faf12e0 Forward-Port-Of: odoo/enterprise#92021
Subscriptions that were marked as churned now return to active status when their invoice is paid, including manual payments such as bank transfers. This prevents paid customers from remaining incorrectly inactive, while still respecting the configured automatic closing limit.
Original PR description
Before: - A subscription is reopened only when a customer pays through the portal. - Manual payments do not reopen the subscription. - invoice is paid but subscription remains churned. After: - Subscriptions now reopen when invoice paid through bank transfer. - Additionally, reopening is the subscription will only reopen if the next_invoice_date is within the allowed automatic closing limit (next_invoice_date >= today - automatic closing limit). Impact: - Paid invoices now always bring the subscription back to active status task-4277444 Forward-Port-Of: odoo/enterprise#92367 Forward-Port-Of: odoo/enterprise#73136