Monday, August 31, 2026
5 changes · 17.0
Enhancements to existing features
The mail module now formats warranty server messages using a standard JSON format. This makes the data sent to the warranty service more reliable and easier for the receiving system to process.
Original PR description
Format the publisher warranty message using json.dumps() instead of Python's native str() representation. This ensures serializeid JSON serialization for the payload sent to the warranty server.
Resolved issues and error corrections
Responses to invoices received through the French PDP service are now sent through that same channel only, instead of also sending a duplicate via standard Peppol. This reduces duplicate messages and keeps invoice communication cleaner for users.
Original PR description
When responding to an invoice received through PDP, 2 responses were actually sent: one through PDP and the other through the 'classic' Peppol. This was done to allow more reliability, in case one channel is down when trying to respond, but this mainly creates cluttah' in the chattah' (call me busta rhymes yo) task-6522652
Fixes an issue where newly selected website themes did not fully apply their design settings, such as updated headers and footers. This ensures businesses can change their website appearance through the configurator and see the expected result immediately after installation.
Original PR description
Due to https://github.com/odoo/odoo/pull/281798 themes are not installed properly. To reproduce: 1. Using the website configurator, activate a theme with a different header (choose 1 that has a centered logo) 2. Once the theme is installed, notice that the header and footer haven't changed. Issue: Before, the context was used to determine whether a theme was being installed. Since the commit above, the request is replaced, therefore the context is lost. Without the `apply_new_theme` context key, the theme's `_post_copy` method is not called. Solution: Since this method should only execute once, on installation and never again (upgrade), simply call the `_post_copy` method directly in `button_choose_theme` instead of `theme_load`. Runbot-946074
Mobile invoice line cards now display the line description when no product is selected. This prevents blank cards and makes productless invoice lines easier to identify while reviewing invoices on mobile devices.
Original PR description
Invoice lines can be created without a product. However, the mobile kanban view does not handle such lines properly and displays an empty card without a name or image. This commit adapts mobile kanban view to show invoice line's name when `product_id` is not set. Before | After -- | -- <img width="469" height="277" alt="image" src="https://github.com/user-attachments/assets/3b367581-b73d-4b12-a487-1a54c3b88470" /> | <img width="406" height="300" alt="image" src="https://github.com/user-attachments/assets/107d7294-90e8-49c6-826a-9be75c6b799f" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#284755
Pivot reports now keep measure options that were defined by the report, even after users deselect them and refresh or filter the view. This prevents options such as Order in point-of-sale reporting from disappearing, making reports more reliable for business analysis.
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