Friday, July 3, 2026
16 changes · 19.0
Resolved issues and error corrections
This fixes an editor issue where pressing backspace inside certain email template blocks could move the cursor to the wrong place. Template editing should now feel more predictable and reduce accidental edits when working with conditional content.
Original PR description
## Problem:
`<t>` elements are classified as self-closing, even if they aren't used that way in a mail template. If you press backspace in the editor on some plain text that happens to be inside a `<t></t>` block, the editor would prevent the cursor from being placed back inside the block after merging because of `normalizeSelfClosingElement`. The result is the cursor being left on the outside edge of the block.
## Solution:
We will remove "T" from the list of self-closing tags.
## Steps to replicate (runbot v18):
1. Open an email template (Purchase: Purchase Order)
2. Place your cursor in some text inside a t-if element ('The receipt is expected for...'). Press backspace. Your cursor will snap to the end of the t-if block.
opw-6124284
Forward-Port-Of: odoo/odoo#266816The point-of-sale cash integration now handles rare messages from Glory cash machines that include more than one XML element. This prevents unexpected crashes during cash machine communication and improves reliability for affected POS sessions.
Original PR description
Rarely, the Glory machine can send a websocket message containing 2 root XML elements, which causes the `parseXML` function to fail. This commit fixes the issue wrapping the message in a root element, and then returning the children. opw-6292925 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Product prices shown on the online shop page now use the same font style as prices on individual product pages. This prevents currency symbols, such as the Indian rupee, from appearing incorrectly when certain website fonts are selected.
Original PR description
Steps to reproduce ================== 1. Set the company currency to INR and publish a product 2. In the website editor, theme tab, set the paragraph font to PT Sans 3. Compare the price on /shop…
Steps to reproduce ================== 1. Set the company currency to INR and publish a product 2. In the website editor, theme tab, set the paragraph font to PT Sans 3. Compare the price on /shop with the one on the product page => /shop displays a ruble-like sign, the product page the rupee sign Cause: ====== Since the /shop redesign [1], the price on product tiles is a plain <span> https://github.com/odoo/odoo/blob/43d5226b500d64c3902eb1528e5d8e461766982c/addons/website_sale/views/product_tile_templates.xml#L204 while it used to carry the `h6` class. https://github.com/odoo/odoo/blob/b31f23aa6334ad311148d3eb9fe202969d799816/addons/website_sale/views/templates.xml#L350 Headings follow the website's "headings" font while plain text follows the "paragraph" font, so /shop and the product page (whose price still uses heading classes) can display prices in two different fonts. This is especially visible with currency symbols drawn differently by the two fonts: the ParaType "PT" fonts draw the Indian rupee sign with the same outline as the Russian ruble sign, so with "PT Sans" as paragraph font, /shop shows a ruble-like sign while the product page shows the rupee sign. Fix === Render product tile prices with the headings font again, as before the redesign and as the product page still does. [1]: https://github.com/odoo/odoo/commit/43d5226b500d64c3902eb1528e5d8e461766982c opw-6260884 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The French PDP module now avoids an invalid database comparison when no Flow 10 start date is available. This prevents errors during forced updates of affected French invoicing records, improving reliability for companies using this localization.
Original PR description
Fixes _force_update_l10n_fr_f10_moves(). It would create a SQL query that compares a date to a bool when _pdp_get_flow_10_start_date() returned None. Forward-Port-Of: odoo/odoo#273006
This update corrects an internal logging issue introduced during version updates. It helps ensure log details are captured properly, supporting smoother troubleshooting without changing user-facing features.
Original PR description
During the forwardport, it was missed that get_log_metadata needs an argument starting from 19.0.
This update fixes an internal accounting test so it works correctly in the Community edition, where some enterprise-only data fields are not available. It also ensures test data is properly saved before checks run, reducing false failures in automated quality checks.
Original PR description
The test introduced by d60564a42b7c7b16d1d975146291835b65a19461 was using the field `deferred_move_ids` which is defined by account_accountant. As it is used to clear the pre-existing moves (typically demo data), we are re-using the same conditional as test_tour.py to check whether this field is available. By the way, we also add a missing flush_recordset that caused errors in test_kpi_summary_reports_unreconciled_bank_statements. Runbot-error: [939986](https://runbot.odoo.com/odoo/error/939986)
This update improves how tests verify partner bank account retrieval during Belgian UBL invoice imports. It uses a focused sample invoice instead of generated data, helping ensure the behavior stays reliable without changing day-to-day user workflows.
Original PR description
Move the partner retrieval bank account number test to the `test_ubl_import_bis3_invoice_be_retrieve_partner.py` file and use a partial XML instead of a generated XML. Forward-Port-Of: odoo/odoo#273335 Forward-Port-Of: odoo/odoo#269995
Invoice and customer navigation now shows only the customer name in page titles and breadcrumbs, instead of including full multi-line addresses. This keeps navigation readable and avoids oversized breadcrumbs when customer records contain detailed address information.
Original PR description
- Create a new Invoice; - Assign a Customer with a multiline address; - Click on the internal link (arrow icon) of the Customer field. Before this commit, the form view title and the breadcrumb would contain not only the customer's name but also their full address. This resulted in an excessively large and unreadable breadcrumb. Now, only the name is retained. This commit applies the same behavior already used in many2one fields: the display name is split by line breaks, and only the first line is kept for the title and breadcrumb. task-id 6329662 Forward-Port-Of: odoo/odoo#272550 Forward-Port-Of: odoo/odoo#272059
This change adjusts an automated test for the web property field so it closes a popover before cleanup. It reduces rare false failures in the testing pipeline, helping keep development and releases more stable without changing customer-facing behavior.
Original PR description
Add an extra step to close the popover and prevent the `Component is destroyed` error[1], which can happen during hoots cleanup, similar to the issue we see when some dialogs perform RPCs as they are being destroyed. [1]: https://runbot.odoo.com/runbot/build/115972540 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273396 Forward-Port-Of: odoo/odoo#273085
The Sales Commission Achievement report no longer crashes when users apply filters based on relative dates such as the current period. This keeps commission reporting usable and reliable for common date-based searches.
Original PR description
### Issue Applying a filter using relative date expressions (e.g. `today`) on the Sales Commission Achievement report raises a traceback. ### Steps to reproduce 1. Open **Sales > Commissions > Achievements**. 2. Apply the **Current Period** filter. ### Current behavior The report crashes with: ```text ValueError: time data 'today' does not match format '%Y-%m-%d' ``` ### Cause The `_search` implementation extracts `date_to` values from the search domain and assumes they are literal `%Y-%m-%d` strings. However, search domains may contain relative date expressions such as `today`, `today +1d`, `today =1m`, etc., which cannot be parsed using `datetime.strptime()`. ### Fix Convert the incoming search domain to a `Domain` object and resolve it with `optimize_full()` before extracting the `date_to` values. This evaluates relative date expressions into actual `date` objects, preventing the traceback while preserving the existing currency conversion date logic.
The Intrastat report now correctly displays bill names that include hyphens, such as monthly sequence numbers. This prevents truncated bill references in audit reporting and makes it easier for users to identify the correct accounting document.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
This update resolves an issue where sharing voice transcript summaries via email created duplicate notifications for related records. The fix ensures that each lead receives only one email notification, improving the user experience and reducing unnecessary communications. This change was previously addressed in 19.2 and later versions.
Original PR description
Issue: Voice transcript 'share by email' button would get post the transcript summary to the chatters of all records of a given model. Steps: 1) install crm and ai 2) activate openai and gemini by…
Issue: Voice transcript 'share by email' button would get post the transcript summary to the chatters of all records of a given model. Steps: 1) install crm and ai 2) activate openai and gemini by saving the api keys inside settings. 3) create 2 crm leads in order a) lead 1 and lead 2 4) go into lead 1 and in the description then type in '/voice-transcription'. 5) Go into the 'transcription' section of the voice transcription 6) type something and save 7) then click 'start recording' 8) click 'stop recording' - it doesn't need to actually record 9) wait to process 10) click the 'share by email' button 11) check lead 2 for a message created (there shouldnt be one) 12) go back to lead 1 and click the 'share by email' button 13) check lead 2 again and a second message appears. that is becuase it makes a new mail.compose.message with res_ids of a list of multiple crm.lead.id (e This was fixed in 19.2+ with the pr https://github.com/odoo/enterprise/pull/115978. But it didnt make it in 19.0 and 19.1 Fix: default_res_ids: model?.config.resIds, -> default_res_ids: [model?.config.resId] take the single record id instead of the list res_ids opw-6285883
This update resolves errors in automated tests related to the sign request process when using Odoo's demo data. The changes ensure the tests accurately reflect the current functionality and prevent failures caused by leftover data or user name discrepancies. This improves test reliability and stability.
Original PR description
Version: 19.0 `test_sign_request_notification`, `test_gc_removes_orphan_roles_and_dummy_items` ,`test_sign_tour` and `test_sign_tour_without_sign` fail locally when you run them on a db with demo…
Version: 19.0
`test_sign_request_notification`, `test_gc_removes_orphan_roles_and_dummy_items` ,`test_sign_tour` and `test_sign_tour_without_sign` fail locally when you run them on a db with demo data installed, after doing some manual testing/ operations on it.
- `test_sign_request_notification` builds `completion_mail_to_user` by searching `mail.mail` for any email addressed to the admin's address. If admin had received any other email before this test ran, it got counted too, so the assertion on `len(completion_mail_to_user)` became wrong. We now also filter by subject matching `sign_request.reference`, so it only counts the email this test's own sign request actually generated.
- `test_gc_removes_orphan_roles_and_dummy_items` relies on the helper `_get_signer_and_item_gc_context` to count dummy sign items (page < 0). That helper searched `sign.item` with no domain at all, so any dummy item left behind by a different template got added to `non_active_item_ids` and broke the `len(non_active_item_ids) == 4` check. We now scope that search to `template_id = sign_template.id`, so it only counts items belonging to the template created in the test.
- `sign_tour` had a step targeting `.o-autocomplete--dropdown-item:contains('Administrator')` in the signer autocomplete. After installing demo data the admin user is named `Mitchell Admin`, so the tour failed on databases using that name. Both contain 'Admin', so the trigger now matches on that instead.
taskid- 6329037This update resolves an installation problem with the HR Recruitment Reports module. The issue occurred because the module wasn't correctly specifying a dependency on 'web_cohort,' leading to an error during installation. This change ensures the module installs correctly and functions as intended.
Original PR description
installing hr_recruitment_reports with the --ski-auto-install flag causes an error. The error happens because it does not explicitly depend on web_cohort while displaying a cohort view. task-6352888 runbot_error-237854
This update ensures PDF signatures maintain their original appearance by locking editable fields during the signing process. Previously, a flawed method of flattening fields altered the PDF's look. This change prioritizes a consistent user experience while a future upgrade to pypdf will enable true PDF field flattening.
Original PR description
Currently, we flatten fields in a naive way which does not handle many edge cases and can alter the PDF appearance for users. We could use pypdf to handle production-grade flattening, but Odoo's `pypdf` dependency (5.4.0) does not support native form field flattening (which was introduced in 5.8.0). To resolve this, rather than flattening, we lock the interactive fields so they are no longer editable while signing, which perfectly maintains the original appearance. In the future, when we support higher pypdf versions, we can truly flatten the PDF to provide a better user experience. task-6037759
This update fixes a stability issue in the payroll testing process. By using a separate, dedicated employee version for tests, we've eliminated interference from existing payroll data, ensuring more reliable test results. This improves the overall quality and consistency of our payroll system.
Original PR description
Use a dedicated employee/version for the percentage computation test instead of Rahul, whose existing payroll values affect copied version data. Define the test amounts in common and reuse `employee.version_id` in the test, so percentages are derived from amounts without changing payroll behavior. task-6340923