Wednesday, September 9, 2026
16 changes · saas-19.1
Enhancements to existing features
Italian electronic invoicing now handles cash rounding lines more safely when generating XML files. This avoids changing a shared tax calculation process, reducing the risk of side effects in other accounting flows while keeping the correct 0% exempt tax information in the invoice XML.
Original PR description
Remove the override of `_prepare_product_base_line_for_taxes_computation` since it's a low level method used by a lot of flows. Instead, we just add the 0% exempt tax on the line on-the-fly at the generation of the xml. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287016
Reconciled bank statement lines now show the related account name when the original entry name is just “/”. This makes reconciliation information easier to read and reduces confusing blank or placeholder labels for accounting users.
Original PR description
This commit will treat move with "/" as their name as empty, and put the name of the account in the reconciled line name task-6424612 Forward-Port-Of: odoo/enterprise#127842
Resolved issues and error corrections
Social posts now format text more accurately by tightening the rules used to detect special elements. This reduces cases where published content appears differently from what the user intended while composing the post.
Original PR description
This commit fixes an issue for the social post formatter mixin's regexes being too lenient. The rendering of some elements could be incorrect from what the user initially wanted to create as a post. Now the regexes have been narrowed down so that the resulting formatted value is more in line with what the user wanted. task-6026857 Forward-Port-Of: odoo/enterprise#110323
Generating sample timesheet data now skips partners that do not have an email address, preventing an error in the Timesheet Assistant. This helps users complete setup and demos smoothly even when partner records are incomplete.
Creating a new job position will now show the creation message only once in the chatter log. This removes a small source of confusion and keeps recruitment activity history cleaner for users.
Original PR description
When creating a new job position, "Job Position created" was rendered twice in the chatter log. This occurred because the mail subtype definition specified a redundant `description` field with the exact same text as the subtype's name, causing the chatter logic to display both. Removing the explicit `description` field ensures the message is only displayed once upon job creation. Task: 6486002
This update keeps PDF handling compatible across supported Ubuntu and newer PDF library versions. It reduces the risk of document-related errors when generating or processing PDFs in Odoo.
Original PR description
Align pypdf usage with the PyPDF2 1.26 API used on Ubuntu Jammy, Odoo 17.0's main supported Ubuntu version, and add the missing compatibility mapping for newer pypdf versions. Forward-Port-Of: odoo/enterprise#130971
Fixed a spelling mistake in the Helpdesk Auto Assignment group name. This ensures the setting appears correctly and avoids confusion for users managing helpdesk assignment options.
Original PR description
This commit fixes the typo in the "Auto Assignment" group. task-6542450 Forward-Port-Of: odoo/enterprise#130880 Forward-Port-Of: odoo/enterprise#130841
The Point of Sale ticket view was updated to use the current customer company reference after an older field was removed. This prevents errors when viewing or processing POS ticket information involving customer company details.
Original PR description
Since PR https://github.com/odoo/odoo/pull/211043 company_name field on partner is removed and we are using parent_name instead This commit replace company_name with parent_name to avoid traceback.
This fixes an issue in the website editor where clicking inside a navigation link could move the text cursor to the beginning of the link. Editors can now place the cursor where they click, making navigation link edits more predictable and less frustrating.
Original PR description
Problem: Clicking inside a navigation link in website builder causes the caret to jump to the start of the link element. Cause: `LinkPlugin` unconditionally reset the selection to the start of non-editable link elements, ignoring whether the anchor node was inside an editable child element. Solution: Do not reset selection if the anchor node is inside a `contenteditable` element. Steps to reproduce: - Open website builder. - Click inside a navbar link to place the caret. => Caret no longer jumps to the start of the link. opw-6535386 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287224 Forward-Port-Of: odoo/odoo#286527
The Mexican point-of-sale invoicing checks were updated to match the newer self-invoicing process, where public users can no longer change customer details directly. This helps keep automated validation aligned with the corrected customer data flow and reduces the risk of false failures in future releases.
Original PR description
Before the related pr commit: - Public users could update customer data during the self-invoicing flow. - The test_qr_code_receipt_mx test relied on this behavior when updating customer data. After the ref commit: - Public users can no longer update customer data during self-invoicing. - Update test_qr_code_receipt_mx to create a new partner with the required customer data when the order is not linked to a customer. Related PR: odoo/odoo#283470 Task-6272660 Forward-Port-Of: odoo/enterprise#130561 Forward-Port-Of: odoo/enterprise#129948
On mobile devices, the editor toolbar is now hidden when users open a full-screen image preview. This prevents overlapping controls and makes the image preview toolbar accessible, improving the editing experience.
Original PR description
When displaying the full screen image preview lightbox on mobile, the toolbar remains displayed. Because of this, the toolbar of the lightbox cannot be accessed. This commit hides the toolbar when a lightbox is displayed. task-6370220 Forward-Port-Of: odoo/odoo#286346 Forward-Port-Of: odoo/odoo#274949
French invoices now show the VAT-on-debits note only when it is relevant for service taxes with a non-zero VAT amount. This avoids missing the note for eligible service invoices and removes unnecessary wording from 0% export or international invoices.
Original PR description
**Purpose** Follow-up to fix two issues reported in #277109 regarding the "TVA exigible d'après les débits" mention on French invoices. **Fixes Applied** 1. **Tax Scope Mismatch:** Changed `t.tax_scope == 'consu'` to `t.tax_scope == 'service'`. To trigger the exigibility mention on a service product, the user will configure a proper "service" scoped tax, not a goods tax. 2. **International/Export Invoices:** Added a check for `amount != 0`. Previously, the mention would print on international export invoices if the applied 0% tax had exigibility set to `on_invoice`. This hides the redundant mention for 0% exports. Forward-Port-Of: odoo/odoo#277468
This fix ensures pivot report measure options defined by the report are still available after users deselect a measure and refresh or filter the view. It prevents valid reporting options, such as point of sale order measures, from disappearing and keeps report configuration predictable.
Original PR description
TL;DR - we lose the measures from arch after a reload, if removed from activeMeasures Step to reproduce: - install pos, create few orders - go to reporting> orders> switch to pivot view - click the…
TL;DR - we lose the measures from arch after a reload, if removed from activeMeasures Step to reproduce: - install pos, create few orders - go to reporting> orders> switch to pivot view - click the `Measures` dropdown, `Order` is already selected - untick it, then apply some filter so that view reloads (ex order date) - reopen `Measures` dropdown, notice `Order` is missing form measures Cause: - view `view_report_pos_order_pivot` has `<field name="order_id" type="measure"/>` in its pivot view https://github.com/odoo/odoo/blob/f5c68cf0eb2ce6ec96dd4006b28466044af10e33/addons/point_of_sale/views/pos_order_report_view.xml#L10 - `order_id` is M2O field - Measure is compute from present `activeMeasure` and fields of type `["integer", "float", "monetary"]` https://github.com/odoo/odoo/blob/f5c68cf0eb2ce6ec96dd4006b28466044af10e33/addons/web/static/src/views/utils.js#L89-L120 - when the view is first loaded, `activeMeasure` all the fields with `type="measure"` which is directly passed to pivot's model as a metadata https://github.com/odoo/odoo/blob/f5c68cf0eb2ce6ec96dd4006b28466044af10e33/addons/web/static/src/views/pivot/pivot_arch_parser.js#L59-L60 https://github.com/odoo/odoo/blob/f5c68cf0eb2ce6ec96dd4006b28466044af10e33/addons/web/static/src/views/pivot/pivot_view.js#L41 - when we toggled the `order_id` from measure and reloaded, `order_id` is popped from `activeMeasure` and as it's field type is `many2one` it is not considered for `measures` in `computeReportMeasures` Fix: - maintain the measures from arch separately and feed it to `computeReportMeasures` opw-6416196 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286013 Forward-Port-Of: odoo/odoo#278850
The accounting logo is now shown correctly in tax return activities. This makes the activity view clearer and more consistent for users working with accounting and tax return tasks.
Original PR description
Before PR: - Accounting logo was not visible in Tax return activities. After PR: - Accounting logo is visible in Tax return activities. task-6463584 Forward-Port-Of: odoo/enterprise#130721 Forward-Port-Of: odoo/enterprise#129501
The Indian GST reporting token refresh now correctly extends the existing token's validity without replacing the saved token with an unrelated response value. This prevents incorrect token data from being stored and helps keep GST reporting authentication stable.
Original PR description
Previously, `_cron_refresh_gst_token` updated the value of `l10n_in_gstr_gst_token` when refreshing the GST token using `response.get('txn')`.
However, the response received during a token refresh is: `{'status_cd': '1', 'status_desc': 'If previous Auth Token is found'}`
The GST token itself remains unchanged during a refresh; only its validity is extended. Therefore, writing `l10n_in_gstr_gst_token` with `response.get('txn')` is unnecessary and incorrect.
This commit removes that write operation.
Forward-Port-Of: odoo/enterprise#130726
Forward-Port-Of: odoo/enterprise#130313Fixed a display issue in field service quotations where enabling the optional Related Task column could move or cut off section amount totals. This keeps quotation lines easier to read and helps users verify section totals accurately.
Original PR description
Steps to reproduce: --- - Install `industry_fsm_sale` module. - Create a quotation. - Add a section line, then a product line below it. - Enable the optional `Related Task` column from the column…
Steps to reproduce: --- - Install `industry_fsm_sale` module. - Create a quotation. - Add a section line, then a product line below it. - Enable the optional `Related Task` column from the column selector. Issue: --- - When the Related Task optional column is enabled, the section line's aggregated Amount value appears in the wrong column or is clipped. Root cause: --- - `getSectionColumns()` computes the section title's colspan as `columns.length - sectionCols.length + 1` [1]. This formula assumes all non-section columns sit in the middle of the list, with the aggregated amount column (`price_subtotal`) anchored at the right end. - The `task_id` [2] field was added via `position="inside"`, which appends it at the end of `<list>` after `price_subtotal` — breaking that assumption by placing a non-section column after the aggregated amount column. - This makes the section title colspan one unit too wide when `task_id` is enabled, shifting the section's aggregated Amount cell past the `price_subtotal` header column. Fix: --- - Changed the xpath to insert `task_id` after the `discount` field, placing it in the middle of the column list where the colspan formula correctly absorbs it into the title span and keeps the amount column aligned. [1]: https://github.com/odoo/odoo/blob/ed22e3c299d6606f8014e2ffdd4a30f5c7be83ec/addons/account/static/src/components/section_and_note_fields_backend/section_and_note_fields_backend.js#L449 [2]https://github.com/odoo/enterprise/blob/2de1512bce6e2bef16ebd45629cbaf0839bebcbf/industry_fsm_sale/views/sale_order_views.xml#L9-L11 Before: <img width="1254" height="262" alt="image" src="https://github.com/user-attachments/assets/7a62c22c-b002-49d9-a75c-f569987f565e" /> After: <img width="1230" height="337" alt="image" src="https://github.com/user-attachments/assets/951f213a-09af-4b07-be30-d69dae2cc51e" /> opw-6472638 --- Forward-Port-Of: odoo/enterprise#129125