Daily updates from Odoo
Navigate
Branch
Monday, June 23, 2025
20 changes
New functionality added to Odoo
Users can now add prompt blocks to email templates and mail composers so AI can generate tailored email content when messages are sent. The feature resolves customer-specific placeholders for each recipient, helping teams create more personalized communications across standard, share, and mass-mailing flows.
Original PR description
Allow users to insert **/prompt** blocks inside email templates so they can ask, for example, "Write an introduction for CompanyName working in Industry." - The **/prompt** command inserts a prompt…
Allow users to insert **/prompt** blocks inside email templates so they can ask, for example, "Write an introduction for CompanyName working in Industry." - The **/prompt** command inserts a prompt block inside suitable HTML fields (e.g. the body of a `mail.template` or a `mail.compose.message` composer). - When the email is sent: - Dynamic placeholders inside the block are resolved against each record. - The resulting string is sent to the LLM service. - The block is replaced with the AI response, split on `\n` to preserve paragraphs. - Supported in all composers (standard, "Share", mass-mailing, etc.); multi-record flows results to per-record prompt evaluation. - Adds an `ai.composer` record to hold the system prompt (e.g. instructing the LLM not to add a subject and to treat output as customer-facing). - Dynamically includes author and the mail's computed language (defaults to *en_US*). - Introduces `prompt_plugin`, registered in `DYNAMIC_PLACEHOLDER_PLUGINS`, with: - A read-only AI-prompt icon. - Support only for dynamic placeholders inside the block. - Includes tests in `test_mail_enterprise` for prompt evaluation and multi-record flows. Task-ID: 4762393
Adds a Czech Republic Intrastat CSV export so businesses can download the required file when submitting Intrastat tax returns. This supports local compliance workflows for companies reporting goods movements in the Czech Republic.
Original PR description
We are adding intrastat report export format in csv for the Czech Republic we can be downloaded when submitting the tax return for the intrastat. We are not checking if we dont need to generate this file as we are not auto-installing the module and consider that It is enough for now. task- 4826249
Enhancements to existing features
This update adjusts the heading structure used in appointment website snippets. The change helps pages present clearer content hierarchy to search engines, supporting better SEO without altering the booking experience.
Original PR description
This PR reviews the heading tags in-use within the `s_appointment` dynamic snippets, ensuring a better SEO. task-4349019
The online product page has been refreshed for rental, stock rental, and subscription products to match the broader website sale redesign. Customers should see clearer product options, buttons, ratings, accordions, and terms sections, improving the shopping experience and consistency across product types.
Original PR description
*: renting, stock_renting, subscription This PR updates enterprise modules to align with the redesign of the product page. Community PR: https://github.com/odoo/odoo/pull/201019 Upgrade PR: https://github.com/odoo/upgrade/pull/7512 task-4527182
Planning users can now create multiple shifts directly from the monthly calendar by choosing a planning template and assigning resources, then selecting the days to schedule. This reduces repetitive manual work and makes building schedules faster and easier.
Original PR description
This commit's purpose is to allow the creation of planning shift from the calendar view in batch. This make use of the feature added by the framework recently 'multi_create_view'. Some js customization was needed in order to fully fulfill our use case. Mainly, we always hide the hours widget, since we use the schedule of the slot_template anyway, and the view is only available in 'month' scale.
Resolved issues and error corrections
In HR Gantt views grouped by employee, clicking an employee avatar now opens a popover using the correct employee record type. This ensures the popover fetches and displays the right information for the user’s access context.
Original PR description
When grouping by employee in a gantt view, you can click on the employee's avatar to open a popover. The resModel of that popover card must be correctly set in order to fetch the data on the right model (employee or employee public). This commit fixes the issue by specifying the record model. task-4873046
This fix updates an automated payroll test so it can find fields that were moved to different tabs. It helps keep Belgian payroll account testing reliable and reduces false failures during quality checks.
Original PR description
Issue: Some fields are moved to another tabs So they can not be found FIX: update the triggers for the failing steps Error: 226783
This fixes an issue where signed PDF documents could fail to merge when the system used older PDF software libraries. It helps keep document signing dependable across different server environments without changing the user workflow.
Original PR description
Use "addPag" for adding pages to PdfFileWriter to maintain compatibility with both PyPDF2 1.x and 2.x, preventing errors on older versions. taskID-4885702
This change ensures the commission feature always includes a related subscription partnership component it relies on. This prevents users from accidentally removing that component and causing commission-related processes to break.
Original PR description
sale_subscription_partnership is auto-installed with sale_subscription and partnership, which are in the dependency tree of partner_commission. But the user can still uninstall this module, although it contains some parent methods. This commit adds the module in the dependency tree. opw-4889896
The Sign app no longer includes an extra scheduled cleanup task that duplicated existing automatic deletion logic. This reduces unnecessary background processing without changing how users work with documents.
Original PR description
Since https://github.com/odoo/enterprise/commit/77b359a143fd67e61a1c6aa24ee18d33fe0c3caa a useless cron has been introduced in the code base. It is not useful as the deletion is handled by _gc_expired_sr task-4332060
The settings page no longer shows duplicate income and expense account fields when stock accounting features are installed. This reduces confusion for users configuring accounting-related stock settings and keeps the settings screen cleaner.
Original PR description
Here: https://github.com/odoo/odoo/pull/206494, we moved expense_account_id and income_account_id fields from company to settings. But in stock_accountant, we also add those fields in the settings, leading to duplicates. This commit remove the duplicate present in stock, as stock_accountant depends on account, it will always be there. linked:https://github.com/odoo/odoo/pull/206494 linked:https://github.com/odoo/upgrade/pull/7580 task-4640319
The UAE payroll employee screen has been corrected so the payroll tab appears and works as expected. This helps HR teams access payroll information reliably when managing employees in the UAE localization.
Original PR description
This fixes the payroll tab in the inherited view of employee for AE. Task: 4885749
Code cleanup and technical improvements
Subscription and rental pricing are now handled through the standard pricelist rules, making pricing behavior more consistent across sales flows. This reduces complexity and prepares the subscription pricing system for future improvements while keeping catalog price calculations aligned with selected plans.
Original PR description
task-3830130
Miscellaneous changes
This reverts commit b9745a5 - The fix is no longer needed, as the original validation error is no longer reproducible in 17.0. - This change resulted in extra document creation and is reverted to avoid duplicates. opw-4681311 Forward-Port-Of: odoo/enterprise#87270
Original PR description
This reverts commit b9745a5 - The fix is no longer needed, as the original validation error is no longer reproducible in 17.0. - This change resulted in extra document creation and is reverted to avoid duplicates. opw-4681311 Forward-Port-Of: odoo/enterprise#87270
When fuzzy matching the partner name, we were checking that `supplier_rank > 0`, but this should apply for vendor bills, not for customer invoices. For those, we need to check `customer_rank > 0`. [opw-4824010](https://www.odoo.com/odoo/project.task/4824010) Forward-Port-Of: odoo/enterprise#88144 Forward-Port-Of: odoo/enterprise#87869
Original PR description
When fuzzy matching the partner name, we were checking that `supplier_rank > 0`, but this should apply for vendor bills, not for customer invoices. For those, we need to check `customer_rank > 0`. [opw-4824010](https://www.odoo.com/odoo/project.task/4824010) Forward-Port-Of: odoo/enterprise#88144 Forward-Port-Of: odoo/enterprise#87869
**Steps to reproduce:** 1. Install contact and l10n_be_reports 2. Export any contact with external_id and tag (category_id) columns. 3. Edit the exported file and set category_id to blank. 4. Attempt to import the modified file. **Issue:** - Import fails with the error: TypeError: 'bool' object is not iterable **Cause:** - The write method is overrided in l10n_be_reports for checking removal of the protected tag '281.50' using: https://github.com/odoo/enterprise/blob/e157890
Original PR description
**Steps to reproduce:** 1. Install contact and l10n_be_reports 2. Export any contact with external_id and tag (category_id) columns. 3. Edit the exported file and set category_id to blank. 4. Attempt…
**Steps to reproduce:**
1. Install contact and l10n_be_reports
2. Export any contact with external_id and tag (category_id) columns.
3. Edit the exported file and set category_id to blank.
4. Attempt to import the modified file.
**Issue:**
- Import fails with the error:
TypeError: 'bool' object is not iterable
**Cause:**
- The write method is overrided in l10n_be_reports for checking removal of the protected tag '281.50' using:
https://github.com/odoo/enterprise/blob/e1578908a53652603a58f8b7a594c198deb47e7a/l10n_be_reports/models/res_partner.py#L29
However, when category_id is False (as in the import case),
vals.get('category_id', []) returns False, causing the iteration to fail with a TypeError.
**Solution:**
- https://github.com/odoo/enterprise/blob/944d4efb25b522c3e726221993f4be1e0fb2c133/l10n_be_reports/models/res_partner.py#L29 This ensures a safe fallback to an empty list in case the value is False.
opw-4717387
Forward-Port-Of: odoo/enterprise#87196**Version:** 16.0 **Steps to reproduce:** - Install industry_fsm_sale - Create two tasks without linking them to a Sale Order - Go to list view and select those tasks - Click "Create Invoice" **Issue:** When the user selects tasks from the list view that are not linked to any Sale Order and tries to create an invoice, a traceback occurs. **Cause:** At least one linked Sale Order record is required when generating an invoice. If the selected tasks are not associated w
Original PR description
**Version:**
16.0
**Steps to reproduce:**
- Install industry_fsm_sale
- Create two tasks without linking them to a Sale Order
- Go to list view and select those tasks
- Click "Create Invoice"
**Issue:**
When the user selects tasks from the list view that are not linked to any Sale Order and tries to create an invoice, a traceback occurs.
**Cause:**
At least one linked Sale Order record is required when generating an invoice. If the selected tasks are not associated with any Sale Order, the process fails.
**Fix:**
This commit raise a red toast notification if none of the selected tasks are linked to a Sale Order. This helps the user understand the issue and prevent traceback..
task-4594178`
Forward-Port-Of: odoo/enterprise#87822
Forward-Port-Of: odoo/enterprise#83661Forward-Port-Of: odoo/enterprise#88149
Original PR description
Forward-Port-Of: odoo/enterprise#88149
This commit makes the new kiosk layout available in both self-order and kiosk modes to avoid code duplication between both. The product info popup now displays tags with colors or images, providing clearer information, such as allergens. task.4724527 Forward-Port-Of: odoo/enterprise#86694
Original PR description
This commit makes the new kiosk layout available in both self-order and kiosk modes to avoid code duplication between both. The product info popup now displays tags with colors or images, providing clearer information, such as allergens. task.4724527 Forward-Port-Of: odoo/enterprise#86694
This has to be done right after l10n setup, it has no to negative effect if done above the COA loop or before setting up localisation. This seems to most affect the domain engine as it can do a lot of relatively well filtered queries, but those need to be properly planned. The repeated `ANALYZE` are not free, but trade favorably (test runs about 4mn faster locally). Forward-Port-Of: odoo/enterprise#88143 Forward-Port-Of: odoo/enterprise#88116
Original PR description
This has to be done right after l10n setup, it has no to negative effect if done above the COA loop or before setting up localisation. This seems to most affect the domain engine as it can do a lot of relatively well filtered queries, but those need to be properly planned. The repeated `ANALYZE` are not free, but trade favorably (test runs about 4mn faster locally). Forward-Port-Of: odoo/enterprise#88143 Forward-Port-Of: odoo/enterprise#88116