Friday, November 14, 2025
4 changes · saas-18.4
Enhancements to existing features
Product names and descriptions sent in India e-invoicing and e-waybill documents are now automatically shortened when they exceed the required character limits. This helps prevent submission errors and ensures generated JSON stays compliant with local rules.
Original PR description
Product descriptions in invoice lines must comply with character limits: - E-invoicing: maximum 300 characters - E-waybill: maximum 100 characters for both product names and descriptions Descriptions exceeding these limits are automatically truncated in the generated JSON. task-5061450 Forward-Port-Of: odoo/odoo#228549
The point-of-sale now shows clearer messages when the fiscal device is disconnected or when a social security number is required but missing. It also tells the user what to do next, reducing confusion and helping staff resolve payment issues faster.
Original PR description
We now display an error when the FDM is disconnected, or when the user needs to fill in the social security number. We also advise what to do in such cases. Forward-Port-Of: odoo/enterprise#99285
This change makes stock availability calculations much faster for pickings with many linked incoming and outgoing moves. As a result, users should see product availability information update more quickly, especially on large transfers.
Original PR description
Before this commit, computing `product_availability` and `product_availability_state` required calling the `get_report_lines` method from the `stock.forecasted_product_product` model. In pickings…
Before this commit, computing `product_availability` and `product_availability_state` required calling the `get_report_lines` method from the `stock.forecasted_product_product` model. In pickings containing moves linked to many incoming and outgoing moves, the `reconcile_out_with_ins` function caused performance issues. The reconciliation logic worked as follows: 1. For each `out_move`, attempt to match it with an `in_move` if the `in_move` references the `out_move` in its `move_dests`. 2. If the demand of the `out_move` is not fully satisfied, add it to `unreconciled_outs`. 3. Loop over `unreconciled_outs` (after attempting to reconcile them using the initial prodcedure) to reconcile against the remaining `in_moves`. The performance bottleneck was that even when an `in_move` directly referenced an `out_move`, the code would unnecessarily loop over **all** `in_moves` to filter out the `in_moves` that has the `out_move` in its `move_dest`. --- To improve performance, an **inverse mapping** from `out_move` IDs to their corresponding `in_moves` is introduced. - Reconciliation now starts by iterating only over the relevant `in_moves`. - If the demand is still unmet, the algorithm attempts reconciliation against the remaining `in_moves`. - This reduces the time complexity to **O(N + M)**, since `in_moves` with zero quantities are removed and never revisited. **Implementation details:** - An `OrderedSet` is used for the inverse mapping to preserve the original query order. - Benefits of `OrderedSet`: - **O(1)** removal (assuming no collisions) - Maintains insertion order, ensuring the same order as the query result. --- | Metric | Before PR | After PR | |---------------|-----------|----------| | Execution Time| ~90 sec | ~10 sec | The benchmark above is done on a `stock.picking` record that queried in the `_get_report_lines` method **5331** `out_moves` and **8922** `in_moves`. opw-4951469 Forward-Port-Of: odoo/odoo#233967 Forward-Port-Of: odoo/odoo#224002
This change makes several Blackbox JavaScript utilities, services, and constants available for import by other files in the future. It does not change the current user experience, but it improves the codebase structure and makes future enhancements easier to build.
Original PR description
This commit puts export in front of some of the blackbox js utils/services/constants to make them importable from other files in the future. Forward-Port-Of: odoo/enterprise#99391