Friday, April 3, 2026
5 changes · 19.0
Enhancements to existing features
This update improves the speed of the HTML editor by reducing unnecessary page checks and layout recalculations during content cleanup. Business users should experience smoother editing, especially on larger or more complex pages, without changes to existing features.
Original PR description
Description of the issue/feature this PR addresses: This PR improves the performance of several `normalize_handlers` by reducing expensive DOM/style checks, avoiding unnecessary layout recalculations. This PR: 1. Replaces the usage of `fillEmpty` with manual filling of empty blocks. 2. Replaces `isBlock` with `!isPhrasingContent`, which better matches the actual use case and avoids unnecessary work. 3. Optimizes list normalization by reducing checks for `isBlock`. 4. Avoids style recalculations in `normalizeInline` of `qweb_plugin`. 5. Delays the `isBlock` check at certain places so it is only performed when needed. 6. Reduces the number of `isBlock` calls in `selection_placeholder_container_predicates` and `selection_blocker_predicates`. 7. Fixes layout thrashing by separating style reads from style writes. task-5245157 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Stock availability checks for outgoing items now use a more direct lookup path. This can dramatically reduce waiting time in large inventory databases, improving responsiveness for warehouse operations without changing business behavior.
Original PR description
### Description: The `_get_outgoing_domain` method was using `move_id.picking_code` to filter outgoing moves. In SQL, the ORM translates this into a costly subquery/join involving the `stock.move` table. Given that both `stock.move` and `stock.move.line` are high-cardinality tables, the Postgres planner often chooses an inefficient Merge Join or Seq Scan. By using `picking_id.picking_type_id.code` instead, we bypass the `stock.move` table entirely. This uses the existing foreign key on the move line to reach the picking type directly, significantly reducing the number of rows processed in the join. ### Benchmark: | N° of moves/mls | Before | After | |------------------|---------|--------| | 8392140/8115085 | 45.53s | 67ms | ### Reference: opw-6012452
Partners who do not have a system user account can now access and pay overdue invoices through a secure payment link. This reduces friction in collections workflows and supports follow-up processes without requiring extra user setup.
Original PR description
Allow partners without a system user to pay overdue invoices by adding an access_token to the overdue invoices route. The token is derived from the hashed overdue partner amount, and is used in followup modules. task-6075621
Manufacturing users can now generate serial numbers and split a manufacturing order in one flow. This helps create one production order per serialized item, improving traceability and reducing manual steps.
Original PR description
Since 4bb4e08066449, producing multiple serial that have been generated is only doable on one mo. We can split mo. we can generate serial number but we cannot do both at the same time. This commit adds a new button into the generate serial wizard to split the main mo into the number of serial wanted and attribute one for each sub mo. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds new configuration options for DHL Express shipments, allowing users to control pickup scheduling, utilize customer-provided reference numbers, and automatically upload Odoo invoices for export shipments. These changes enhance shipping accuracy and streamline the process of matching shipping documents with accounting records.
Original PR description
Add three new configurable options to the DHL Express REST integration: 1. Request Pickup (new Boolean field, default True for backward compat): Controls the pickup.isRequested flag in shipment…
Add three new configurable options to the DHL Express REST integration: 1. Request Pickup (new Boolean field, default True for backward compat): Controls the pickup.isRequested flag in shipment requests. When disabled, DHL will not schedule a pickup — useful when managing pickups externally or dropping off at a DHL location. Previously hardcoded to True. 2. Enhanced References (new Boolean field): When enabled, uses the Customer Reference from the SO (client_order_ref) as the shipment reference (customerReferences with typeCode CU) instead of the SO number. Useful when customers provide their own PO/reference numbers that should appear on the shipping label. 3. Upload Odoo Invoice (new Boolean field): When enabled and the shipment is an export (commercial invoice required), uploads the Odoo-generated invoice PDF inline in the shipment request as a DHL Paperless Trade document (documentImages with typeCode INV, base64 encoded). Requires a posted invoice on the SO before shipping. This ensures export documents match the actual accounting records. All features are opt-in via carrier configuration fields in the Options section, preserving full backward compatibility.