Daily updates from Odoo
Tuesday, June 24, 2025
9 changes · 18.0
Enhancements to existing features
When creating a bank account, users now see a non-blocking warning if the same account is already linked to another partner. This helps prevent duplicate bank account records while still allowing users to continue when appropriate.
Original PR description
If a bank account is already linked to a partner, display a non-blocking warning on the bank account creation form, containing a link to the other partner. task-4431041
Importing public holidays in Planning is now much faster on databases with many scheduled shifts. The change lets Odoo process affected planning hours more efficiently in batches, reducing a reported import from about 40 minutes to 4 minutes.
Original PR description
The current code of `_recompute_shifts_in_leave_periods` explicitely calls the compute method `_compute_allocated_hours` of planning.slot to recompute the allocated hours according to modifications…
The current code of `_recompute_shifts_in_leave_periods` explicitely calls the compute method `_compute_allocated_hours` of planning.slot to recompute the allocated hours according to modifications done to the public holidays. Calling the method directly like that is far from ideal as we are missing proper batching, fields protection, etc.. that the ORM usually does for computed fields. This commit replaces the explicit call by an `add_to_compute`. This essentially marks the field as "to be recomputed". This recomputation then happens at the next flush_model/recompute_model call and can applies the proper ORM optimizations of batching by `PREFETCH_MAX` size, protecting fields to avoid triggering loops of recomputations. This speeds up the import of new Public Holidays in an already populated database. #### speedup In a customer database with 50K planning.slots, 1300 of which needs to recompute their allocated_hours, the import timing Before PR vs After PR is the following: - 40 min -> 4 min opw-4782452
Resolved issues and error corrections
This fixes an issue where images copied and pasted inside the HTML editor could disappear if they were stored directly in the copied content. The editor now preserves those embedded images correctly, reducing broken content when users paste rich text.
Original PR description
Problem: When copying content that includes an image with a `src` in base64 format, the origin is incorrectly prepended to the `src`, resulting in a broken image on subsequent paste. Cause: The logic that prepends the origin doesn't exclude base64 images, causing the final `src` to be invalid. Solution: Skip appending the origin if the `img.src` is already in base64 format. Steps to reproduce: 1. Copy an image (with base64 `src`) into the editor. 2. Copy the image again from within the editor. 3. Paste the image. → The image is not shown due to incorrect `src`. opw-4872676 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an error that could stop users from printing Picking Operations reports for kit products when packaging was removed from a component. This keeps delivery paperwork available and avoids disruption during sales and warehouse processing.
Original PR description
**Step to reproduce:** 1. Install mrp & sales module. 2. Ensure Product Packaging is activated for Inventory. 3. Create a product with a Kit-type BOM that includes two components. 4. Assign packaging…
**Step to reproduce:**
1. Install mrp & sales module.
2. Ensure Product Packaging is activated for Inventory.
3. Create a product with a Kit-type BOM that includes two components.
4. Assign packaging to the product.
5. Create and confirm a Sales Order for this product.
6. Open the Delivery Order generated from the Sales Order.
7. Remove the packaging from one of the components of the kit in the delivery order.
8. Try to print the Picking Operations report.
**Issue:**
When printing the Picking Operations report, a
`ZeroDivisionError: float division by zero` occurs during the
computation of the `product_packaging_qty` field on stock.move.line.
**Cause:**
The `_compute_product_packaging_qty` method performs a
division operation that assumes packaging is present on the move:
https://github.com/odoo/odoo/blob/c1d88949a3c305b425ab3a862741ebab7b7cd344/addons/mrp/models/stock_move.py#L101
When the packaging is removed, `move.product_packaging_id` becomes
falsy, and accessing `.qty` returns 0. This leads to division by zero.
**Solution:**
To fix this, the computation of product_packaging_qty is avoided for kit
component move lines that do not have packaging assigned.
This ensures that the computation only applies to valid lines with the packaging.
**opw-4805679**Internal users without sales or event-specific permissions can now register for events that include multiple-choice questions. This prevents a server error during registration and adds test coverage to help keep the flow reliable.
Original PR description
A global rule for base.group_user is missing for the event.answer.model. This commit adds it. A test has been added to check that internal users have all the permissions required to register for events. Reproduce: The administrator must create a new user and let empty the permissions for sales and for events. When trying to register for an event that has questions with options, this new user will trigger a 500 error. task-
Canceling the payment that created a third-party check now also updates the check’s status, so it no longer incorrectly appears as "In Hand". This keeps payment and check records aligned and helps avoid confusion in check tracking workflows.
Original PR description
Fixed an issue where, when canceling a payment that originated the third-party check, the check remained in "In Hand" status when it shouldn't. Now, when the payment is canceled, the check status is…
Fixed an issue where, when canceling a payment that originated the third-party check, the check remained in "In Hand" status when it shouldn't. Now, when the payment is canceled, the check status is properly updated to reflect its cancellation, ensuring consistency in the workflow. **Description of the issue/feature this PR addresses:** This PR addresses an issue where a third-party check remains in the "In Hand" status even after the origin payment is canceled. **Current behavior before PR:** A customer payment is created with a third-party check. The payment is confirmed, then moved to draft and canceled. After cancellation, the third-party check remains in the "In Hand" status in the third-party checks menu, even though the origin payment has been canceled. **Desired behavior after PR is merged:** When the payment is canceled, the check will no longer remain in "In Hand" status in the third-party checks menu after the payment is canceled. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refreshes the spreadsheet component and fixes several issues that could affect daily spreadsheet work. Users should see more consistent behavior for data validation rules, pivot tables with blank values, and formatting copied across merged cells.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a38db25af [REL] 18.0.35 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a38db25af [REL] 18.0.35 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/000269c29 [IMP] demo: add clear action [](https://www.odoo.com/odoo/2328/tasks/) https://github.com/odoo/o-spreadsheet/commit/6dbaa3f6e [FIX] data_validation: preserve rule order when updating a rule [Task: 4863726](https://www.odoo.com/odoo/2328/tasks/4863726) https://github.com/odoo/o-spreadsheet/commit/ea088b06f [FIX] pivot: treat empty strings the same as blank cells [Task: 4889073](https://www.odoo.com/odoo/2328/tasks/4889073) https://github.com/odoo/o-spreadsheet/commit/a3a8e49d6 [FIX] paint_format_store: copy and apply merges on paste format [Task: 4179256](https://www.odoo.com/odoo/2328/tasks/4179256) https://github.com/odoo/o-spreadsheet/commit/28db4a786 [FIX] paint_format_store: update selection after pasting format [Task: 4807659](https://www.odoo.com/odoo/2328/tasks/4807659) https://github.com/odoo/o-spreadsheet/commit/efd5a396e [REF] clipboard: extract paste helpers to reduce duplication [Task: 4807659](https://www.odoo.com/odoo/2328/tasks/4807659) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
Paused timers now keep the correct elapsed time when they are resumed. This prevents inflated time entries and improves accuracy for users relying on timers for work tracking or billing.
Original PR description
The current implementation of the `startTimer` function incorrectly calculates the current time when the timer has been paused. For ex, if the timer started 24 hours ago and was paused 23 hours ago. Calling `startTimer` to resume the timerReactive component, would calculate the offset between the paused time and current time incorrectly. This change ensures that no extra time is added to the timer, when it is in a paused state, maintaining accurate tracking of elapsed time. opw-4658402 opw-4824616 opw-4829820
This fix ensures subscription lines that have already been invoiced keep their invoiced quantity even when related dates are changed. This helps prevent incorrect billing adjustments and keeps subscription revenue records consistent.
Original PR description
Backport of: - [ ] https://github.com/odoo/enterprise/commit/981665196f162df9702d471223e16edf5deb99d5