Daily updates from Odoo
Friday, June 19, 2026
10 changes · 18.0
Enhancements to existing features
This update simplifies how the account_edi_ubl_cii report templates are identified, reducing potential conflicts with other Odoo modules. Previously, a fragile inheritance method caused issues when updating templates. This change creates a more reliable and stable system for identifying the necessary updates.
Original PR description
**Description of the issue/feature this PR addresses:** As the new `xpath` is expecting a very specific type of `t-if` which is possibly changed in other templates of third parties or even Odoo itself which do not depend on this module, we take a more robust approach to identify the block **Current behavior before PR:** Issues with inherited views outside the dependency tree (because of primary=True) **Desired behavior after PR is merged:** Less friction and smoother identifier of the needed diff Info: @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the error messages related to leave validity, particularly when creating public holidays. The improved message will significantly help customers and our support team quickly identify and resolve leave allocation problems, reducing troubleshooting time. This change improves the user experience and support efficiency.
Original PR description
The current message is pretty useless as of now when a lot of leaves are being written to, notably when creating a public holiday, which sets the state of all the leaves overlapping the public holiday's day to be reevaluated, and if an error occurs, you have to go through every employee's leave allocation and leaves taken to hopefully find one who might have to many days taken/not enough allocated. This extra information will be a huge QOL improvement, for the customer who will be able to troubleshoot his issue himself more easily, but also for our support team as the only way to debug those kind of issues now is to put a breakpoint there and see what employee has an issue. opw-4411999 Forward-Port-Of: odoo/odoo#200376
Resolved issues and error corrections
This update corrects a bug where changing the expected arrival date on a Purchase Order automatically updated the deadline for related Sales Order delivery orders. The fix prevents this cross-document propagation by limiting updates to moves with established procurement links, ensuring accurate delivery scheduling without unintended consequences.
Original PR description
Version: ---------- - 18.0+ Steps to reproduce: ---------------------- 1. Install `sale_management`, `purchase`, and `stock` module. 2. Go to Settings and enable Reception Report. 3. Create a…
Version: ---------- - 18.0+ Steps to reproduce: ---------------------- 1. Install `sale_management`, `purchase`, and `stock` module. 2. Go to Settings and enable Reception Report. 3. Create a storable product with tracking enabled and add supplier information. 4. Create a Sales Order for the product with a quantity and confirm it. 5. Open the generated Delivery Order and note the deadline value. 6. Create a Purchase Order for the same product and quantity using the vendor set on the product and confirm it. 7. Open the generated Receipt and click on the Allocation smart button. 8. Assign the receipt to the delivery order. 9. Go back to the Purchase Order and change the Expected Arrival Date. Issue - Updating the Expected Arrival Date on the Purchase Order also updates the deadline of the related Sales Order delivery. Root cause: ------------ - Clicking Assign triggers `action_assign`, which links incoming and outgoing moves: https://github.com/odoo/odoo/blob/cfc63060926db4cec773c159b8ecf97dc0b36d1a/addons/stock/report/report_stock_reception.py#L271 - Updating the PO Expected Arrival Date triggers purchase.order.line.write(), which calls _update_move_date_deadline(new_date). https://github.com/odoo/odoo/blob/cfc63060926db4cec773c159b8ecf97dc0b36d1a/addons/purchase_stock/models/purchase_order_line.py#L100-L101 - Then this `_update_move_date_deadline` function updates the incoming move `date_deadline` and this triggers stock.move.write(). https://github.com/odoo/odoo/blob/cfc63060926db4cec773c159b8ecf97dc0b36d1a/addons/purchase_stock/models/purchase_order_line.py#L165 - Inside write(), _set_date_deadline() is called. https://github.com/odoo/odoo/blob/cfc63060926db4cec773c159b8ecf97dc0b36d1a/addons/stock/models/stock_move.py#L748-L749 - Inside `_set_date_deadline()`, the method calls` _get_moves_to_propagate_date_deadline()` to collect all related moves that should be updated. - This method includes `move_dest_ids` in the returned moves. Since the incoming move is manually linked to the delivery move, the corresponding outgoing move (from the Sales Order) is part of `move_dest_ids`, and its `date_deadline` is therefore updated as well. https://github.com/odoo/odoo/blob/cfc63060926db4cec773c159b8ecf97dc0b36d1a/addons/stock/models/stock_move.py#L553 https://github.com/odoo/odoo/blob/cfc63060926db4cec773c159b8ecf97dc0b36d1a/addons/stock/models/stock_move.py#L545 Solution: ---------- - Limit propagation to moves that share the same `group_id` or where no formal procurement group/picking link is established. - This prevents unintended date shifts across unrelated documents (manual links) while preserving correct behavior for standard MTO and Manufacturing flows. --- opw-6085890 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue within the Odoo accounting system for Denmark (l10n_dk) where an account was listed twice. Removing this duplication ensures accurate financial reporting and avoids potential errors in transactions. This is a routine maintenance fix to maintain data integrity.
Original PR description
In the list 'dk_coa_7630 ', the account has been used in the list twice. Removing the duplication from the list. [Reference](https://github.com/odoo/odoo/blob/17.0/addons/l10n_dk/migrations/1.4/end-migrate.py#L14) 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 Forward-Port-Of: odoo/odoo#270573
This update significantly speeds up timesheet updates and creation, particularly for projects with many planning slots. Previously, a single timesheet change triggered a slow, unnecessary recomputation across the entire project. This fix optimizes the system to only recalculate when needed, resulting in a much faster and more responsive experience.
Original PR description
The planning.slot model has the field timesheet_ids which is computed and non-stored. It also has a dependency on `project_id.timesheet_ids.unit_amount`. As timesheet_ids is non-stored while it's a…
The planning.slot model has the field timesheet_ids which is computed and non-stored. It also has a dependency on `project_id.timesheet_ids.unit_amount`. As timesheet_ids is non-stored while it's a dependency of the field `effective_hours`, if a single timesheet is modified on a project, a recomputation is required on all planning slots on that same project. Before this commit, the dependency highlighted earlier was resulting in a huge unnecessary computation since otherwise there's no way for the ORM to scope this computation to only affected slots. This commit elimintates this dependency and manually invalidates the timesheet_ids field on only the associated slots which drastically improves performance. A recomputation should only be done in case of write/create since timesheet_ids is computed nonstored. ## Benchmarks: ### The time it takes to update or create a timesheet in a specific project: | No. planning slots in project | Before | After | | ----------------------------- | ------- | ----- | | 699838 | Timeout | <1s | | 107203 | ~130s | <1s | | 7812 | ~9s | <1s | opw-5082577
This update significantly speeds up bank reconciliation by optimizing how early payment discounts are calculated. Previously, checking eligibility for discounts was slow and caused memory issues. Now, the system processes multiple invoices at once, dramatically reducing processing time and improving the overall bank reconciliation experience.
Original PR description
### Issue A user cannot open their bank journal if some rules are too slow to compute or consumes too much memory. ### Solution This commit refactors the `_is_eligible_for_early_payment_discount`…
### Issue A user cannot open their bank journal if some rules are too slow to compute or consumes too much memory. ### Solution This commit refactors the `_is_eligible_for_early_payment_discount` method on `account.move` to improve performance during bank reconciliation. The method was designed to run on a single record and was being called inside a loop when generating reconciliation suggestions. A new method, `_is_eligible_for_early_payment_discount_batched`, has been introduced to handle the eligibility check for a recordset of moves. The original `_is_eligible_for_early_payment_discount` method is preserved as a wrapper around the new batched method to maintain backward compatibility. Enterprise PR: https://github.com/odoo/enterprise/pull/92401 ### Benchmarks Profiling `_get_invoice_matching_amls_result` when using a reconciliation model with a Partner mapping: | # of amls | Before | After | % | |:-------------:|:-----------:|:------:|:----:| | 499 | ~3 min then MemoryError | 230 ms | 99.9 % | ### References opw-4998109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a security vulnerability where users with the 'Recruitment: Interviewer' role could access job positions, even without associated applicants. The change adds access rules to limit this access to only those positions where the user is a reviewer or has an applicant they review, enhancing data security.
Original PR description
Issue: ---------------------------------------- A user with the access right "Recruitment: Interviewer" can actually access the job positions. Steps to reproduce: ---------------------------------------- - Install Recruitment - Have a user with no rights on employee and "Recruitment: Interviewer" - Connect as this user - Open an public employee record - You can navigate to their Job Position even if you don't have any applicant with this job position Cause: ---------------------------------------- The group `hr_recruitment.group_hr_recruitment_interviewer` give read access to the model `hr.job` and there are no access rules on this model. Solution: ---------------------------------------- Create an access rule restricting the access to only the job positions where the user is set as reviewer or having an applicant where the user is reviewer. opw-6264247
This update fixes an error in the delivery note pricing calculation for products tracked by multiple lots. Previously, the price was incorrectly based on only the first lot, leading to inaccurate DDT costs. This change ensures that the total sale price across all lots is correctly reflected on the delivery note.
Original PR description
Steps to reproduce: 1. Install Italian localization and l10n_it_stock_ddt 2. Create a product tracked by lots with a price of 100 3. Create two lots for that product, each with 5 in stock 4. Create a sale order for a quantity of 8 5. Confirm the sale order and validate the delivery 6. Print the delivery note Issue: Only the first lot's sale price is used in the DDT cost calculation (price = 500 instead of 800) Why this happens: The QWeb template used `move.move_line_ids[0].sale_price`, which only reads the sale_price of the first move line. When a delivery is split across multiple lots, each lot produces its own move line, so only the first is considered in the price calculation. opw-6244076 Forward-Port-Of: odoo/odoo#267757
This update resolves a problem where emojis, particularly complex ones like `👨🚒`, were being displayed incorrectly due to how they were encoded. The fix backports a more robust regex pattern from a previous version of Odoo to correctly handle these variations, ensuring emojis are displayed properly.
Original PR description
Bug === Some emoji like `👨🚒` are separated, because they are built using `👨 + Emoji_Modifier + 🚒` (`\uFE0F` can also be used to get the variant of the emoji). Adapt the regex to take into account those Unicode variations. Task-5491124 Forward-Port-Of: odoo/odoo#269719
This update fixes an issue where the reconciliation wizard incorrectly used foreign currency when a company currency exchange difference remained after the reconciliation plan. The fix ensures the wizard accurately reflects the final difference, preventing inflated write-off amounts and improving financial reporting accuracy. This impacts how receivables are reconciled.
Original PR description
## Problem In `account_reconcile_wizard.py`, the internal helper `get_reco_currency` (inside `_compute_reco_wizard_data`) returned the single foreign currency found among the selected lines without…
## Problem
In `account_reconcile_wizard.py`, the internal helper `get_reco_currency` (inside `_compute_reco_wizard_data`) returned the single foreign currency found among the selected lines without checking whether any residual in that currency actually remained after the reconciliation plan ran.
When reconciling a company-currency line against a foreign-currency line where the plan fully consumed the foreign-currency residual (leaving only a small company-currency exchange-difference balance), the wizard still set `reco_currency_id` to the foreign currency, inflating the write-off amount by the exchange rate.
## Root cause
```python
elif len(foreign_currencies) == 1:
return foreign_currencies # ignores whether the plan left any residual in that currency
```
## Fix
In the `elif len(foreign_currencies) == 1:` branch, iterate over `aml_values_map` (post-plan residuals) and return the foreign currency only if at least one line still has a non-zero residual in it; otherwise fall back to company currency.
## Test
`TestAccountReconcileWizard.test_write_off_receivable_company_currency_vs_foreign_currency`
Reconciles a company-currency debit (111.0) against a foreign-currency credit (−110.0 / −330.0 EUR at rate 3.0). The real remaining difference is 1.0 in company currency. The test asserts that `reco_currency_id` is the company currency and `amount` ≈ 1.0.
Task reported at: https://www.odoo.com/my/tasks/6315581