Daily updates from Odoo
Tuesday, June 10, 2025
20 changes · 18.0
Resolved issues and error corrections
This fix lets users update the customer or vendor linked to already reconciled accounting entries, matching what is allowed during the initial reconciliation. It removes an unnecessary restriction so accounting teams can correct partner information without being blocked by reconciliation status.
Original PR description
This has been allowed since saas-12.5, https://github.com/odoo/odoo/commit/6b8acd025758b042cca39508bc8994a1307d1ccd, and is still currently allowed when making a new reconciliation: you can indeed select 2 aml with different partners. But for some reason, in https://github.com/odoo/odoo/commit/1b30777ab63998d1c0b64b655e717d74b3648bcf, we added a restriction to disallow changing that afterwards. All things considered, the change of partner on reconciled entries should be allowed since it's a non-relevant point when reconciling items together. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Sales orders for services that create projects now include the project account within each analytic distribution line instead of adding it as a separate line. This keeps cost and revenue allocation consistent with configured distribution models and avoids duplicate or misleading analytic entries.
Original PR description
1. Have sales and project installed 2. Create a service product which creates a project on order 3. Set up a distribution model for this service 4. Create a sales order with this service. Confirm it. 5. The project account is added to the analytic distribution in a separate line In odoo/odoo#199763, `_compute_analytic_distribution()` in the SO line was changed to add both project account and ditribution model accounts in the analytic distribution. However, the project account should not have its own line and should instead be added to all lines coming from Analytical Distribution Models. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an accounting issue where cash basis VAT entries could include incorrect base tax tags when certain taxes used complex distribution rules. The change helps ensure tax reports reflect the right amounts and categories after vendor bills are paid and reconciled.
Original PR description
Steps to reproduce:
- Have a [TAX] configured with:
- Affect Base of Subsequent Taxes: True
- Base Affected by Previous Taxes: True
- Tax Exigibility: Based on payment
- Distribution for invoices:
- Base, Tax grids: +A, +B
- 100% of tax, Tax grids: +C
- -100% of tax, Tax grids: -D, -E
- Distribution for refunds:
- Base, Tax grids: -A, -B
- 100% of tax, Tax grids: -C
- -100% of tax, Tax grids: +D, +E
- Create a BILL with [TAX]
- Create a matching Bank statement and reconcile with BILL
- Check the created Cash Basis Entry
Issue:
VAT line will feature base tags +A, +B in addition to the tax tags +C
This occurs because in the source bill 2 tax lines are created, the first one got the origin tax assigned
When the cash basis move is created the tax tags will be taken also from that tax
opw-4729298Sales quotations for foreign customers now show the product name in the customer's language, even when the salesperson edits the line description. This avoids duplicate or untranslated product names and helps customers receive clearer, usable quotation PDFs.
Original PR description
Previously, when selling a product to a foreign customer, the translated product name was stored in the order line description. However, the salesman could update this description, and if he did, the product name would be automatically included in the quotation's line description but kept hidden to ensure it appears in the final quotation PDF. Unfortunately, the product name was not translated into the partner language. This commit keeps the previous behavior with the exception that the product name included in quotations' line descriptions is now translated into the partner language. opw-4760300 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change fixes an unreliable automated test in the HTML editor image cropper area. It helps keep validation runs stable so future updates can be checked with fewer false failures.
Original PR description
After merging this commit [1], the test sometimes non-deterministically fails on runbot. This PR aims to fix the test. [1]: https://github.com/odoo/odoo/commit/1a2c3c00869fd9702bb9d15e3d38d9c02a3349f5 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the reliability of automated checks for the HTML editor by waiting for on-screen elements to finish appearing or disappearing before validating them. It helps prevent false test failures in slower environments, supporting smoother development and release validation without changing user-facing features.
Original PR description
### Purpose of this PR: - Add `expectElementCount` test helper to wait for elements to appear or disappear before asserting their count. This fixes flaky tests caused by timing issues and animations, especially on slower environments like runbot, in toolbar, link popover, powerbox, tablepicker, tablemenu, and emoji picker tests. task-4849995 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When customers upgrade to Odoo 18, the newly added Create Bill matching rule will now include the proper translation instead of appearing only in English. This improves consistency for users working in other languages, such as Spanish.
Original PR description
If customers migrate to version 18 from a lower version, 'Create Bill' record newly introduced so it just create but not translated. **Before fix:** ``` test_18=# select id,name from…
If customers migrate to version 18 from a lower version, 'Create Bill' record newly introduced so it just create but not translated.
**Before fix:**
```
test_18=# select id,name from account_reconcile_model;
id | name
----+----------------------------------------------------------------------------------------------------------------------------
3 | {"en_US": "Line with Bank Fees", "es_AR": "Línea con comisiones bancarias"}
1 | {"en_US": "Invoices/Bills Perfect Match", "es_AR": "Coincidencia perfecta de facturas"}
2 | {"en_US": "Invoices/Bills Partial Match if Underpaid", "es_AR": "Coincidencia parcial si hay pagos parciales en facturas"}
4 | {"en_US": "Create Bill"}
5 | {"en_US": "Internal Transfers", "es_AR": "Transferencias internas"}
```
**After Fix:**
```
test_18=# select id,name from account_reconcile_model;
id | name
----+----------------------------------------------------------------------------------------------------------------------------
1 | {"en_US": "Invoices/Bills Perfect Match", "es_AR": "Coincidencia perfecta de facturas"}
2 | {"en_US": "Invoices/Bills Partial Match if Underpaid", "es_AR": "Coincidencia parcial si hay pagos parciales en facturas"}
5 | {"en_US": "Internal Transfers", "es_AR": "Transferencias internas"}
3 | {"en_US": "Line with Bank Fees", "es_AR": "Línea con comisiones bancarias"}
4 | {"en_US": "Create Bill", "es_AR": "Crear factura"}
```
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-prImporting product eCommerce description data now updates the intended translated text without wiping existing translations or replacing the default value. This helps teams safely maintain multilingual product pages through file imports.
Original PR description
## Version: saas-18.0+ ## Issue: Importing eCommerce translations for products erase all existing translations and set the new one as default value, whatever the user's current language is. The…
## Version:
saas-18.0+
## Issue:
Importing eCommerce translations for products erase all existing translations and set the new one as default value, whatever the user's current language is.
The `website_description` acts the same.
## Steps to reproduce:
- From the user's `Preferences`:
- Add a second language you understand;
- Translate all websites and close without switching;
- Access `Sales / Products / Products`:
- Set a product as favorite and open it:
- Under the `Sales` tab, write something in the `ECOMMERCE DESCRIPTION` field;
- Open the translation wizard by clicking the `EN` link appearing when hovering the input:
- Write anything else in the second language's input field and save;
- Come back to the general products view (*`Sales / Products / Products`*):
- Change view to list and select the favorite item (*check the case of the record line*);
- Via the `Actions` button, click on `Export`:
- Check `I want to update data (import-compatible export)`;
- From the `Available fields` list, add `eCommerce Description`;
- Open the exported file:
- Change the `description_ecommerce` content and save;
- From the general products view (*`Sales / Products / Products`*):
- Ensure no product is selected;
- Click the gear next to `Products` then `Import records`
- Click `Upload Data File` and select the exported and modified file;
- Ensure the fields are well mapped;
- Test then import data;
## Cause:
Translation method refactoring via this PR: https://github.com/odoo/odoo/pull/170779, especially `update_field_translations(field_name, {"fr_FR": {"en2": "fr2"}})`, requiring a key (`en2`) and a value (`fr2`) for a given language as a `field_name` translation. Before the fix, giving only one value erases value and key for a given `field_name`
opw-4600662This change removes an extra click in an automated test for boolean fields in list views, preventing random failures caused by the value being toggled twice. It improves reliability of the testing process without changing how users interact with Odoo.
Original PR description
This commit fixes a test involving a boolean property field in list view that randomly fails. The problem was that we clicked twice to toggle the boolean value: once on the cell (I assume that it was done to switch the row in edition), and one on the checkbox to toggle it. However, boolean fields in list views don't require the row to be in edition to be toggled. So the first click already toggled the value, and the second click toggled it again, **sometimes** (I guess that's the non deterministic part, it was a question of timing there). So this commit fixes the issue by removing one of the 2 clicks. runbot error~224053 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
Unbuilding a manufacturing order now correctly applies warehouse putaway rules to the returned component items. This prevents inventory from being recorded in the wrong shelf or location, improving stock accuracy for manufacturing operations.
Original PR description
Steps to reproduce the bug: - Create a storable product “P1”: - Update the quantity to 1 in "WH/Stock" - Create a putaway rule: - From "WH/Stock" to "WH/Stock/Shelf1" - Create a manufacturing order:…
Steps to reproduce the bug:
- Create a storable product “P1”:
- Update the quantity to 1 in "WH/Stock"
- Create a putaway rule:
- From "WH/Stock" to "WH/Stock/Shelf1"
- Create a manufacturing order:
- Select any product to produce
- Add a component:
- 1 unit of P1
- Confirm and validate the MO
- Unbuild the order
Problem:
A stock move for P1 is created from "Virtual Location/Production" to "WH/Stock/Shelf1" instead of "WH/Stock".
This happens because the `_apply_putaway_strategy` method is not called on the `stock.move.line` linked to the move.
In previous versions (e.g., v17), this issue didn't occur because the quantity was directly set on the move. This triggered a write on the `stock.move` model, which in turn called `_set_quantity`. Since no `stock.move.line` was linked at that point, a new one was created, and its quantity was set via `_set_quantity_done`, which itself called `_apply_putaway_strategy`:
- https://github.com/odoo/odoo/blob/002724506123b8160dc05cc3654cf87e49b67933/addons/mrp/models/mrp_unbuild.py#L202
- https://github.com/odoo/odoo/blob/b377e7d586f75ea8418deb498d2d551999ec5143/addons/stock/models/stock_move.py#L399
- https://github.com/odoo/odoo/blob/b377e7d586f75ea8418deb498d2d551999ec5143/addons/stock/models/stock_move.py#L384
- https://github.com/odoo/odoo/blob/b377e7d586f75ea8418deb498d2d551999ec5143/addons/stock/models/stock_move.py#L2133
This scenario used to work only when the product was untracked:
- https://github.com/odoo/odoo/blob/002724506123b8160dc05cc3654cf87e49b67933/addons/mrp/models/mrp_unbuild.py#L186
However, starting from v18, some code was refactored to clean up unnecessary conditions. The `else` block was removed, and now, regardless of the product type, the quantity is not set directly on the move anymore. Instead, a `stock.move.line` is created using `_prepare_move_line_vals`:
- https://github.com/odoo/odoo/blob/002724506123b8160dc05cc3654cf87e49b67933/addons/mrp/models/mrp_unbuild.py#L197
But `_apply_putaway_strategy` is not called in this flow.
Bug introduced in v18.0, commit:
https://github.com/odoo/odoo/commit/79d9dd7f15371aa7293a4af0b0ebd193aa80e2be
opw-4830952This fixes an unreliable automated test for web navigation behavior. It helps keep quality checks stable by making sure the test waits for the page routing state before simulating browser back navigation.
Original PR description
This commit fixes an action service concurrency test that fails randomly. The way the test was written was prone to errors as we didn't wait for the router to be updated before doing browser back. As a matter of fact, we even asserted that we went 2 actions back in the breadcrumbs, whereas it should be only one as we did one browser.history.back(). runbot error~163078 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 fix prevents the point of sale numpad from briefly appearing and disappearing when users tap the Old unit price text on combo product order lines. It improves the checkout experience for French certified POS sessions by avoiding confusing screen behavior during order editing.
Original PR description
Steps: ------ - Install `l10n_fr_pos_cert` - Open a PoS session, and add a combo product, orderlines corresponding to the combo procuts will be added - Hide the numpad by clicking on the selected…
Steps: ------ - Install `l10n_fr_pos_cert` - Open a PoS session, and add a combo product, orderlines corresponding to the combo procuts will be added - Hide the numpad by clicking on the selected orderline. - Choose a random orderline, and click on the text "Old unit price" -> Observe that the numpad will appear and then disappear immediately. Reason: ------- When clicking the text "Old unit price", two click events are dispatched, those running the click handler twice, the first time it selects the orderline and hence show the numpad, and the second time, it unselects that same orderline, hiding the numpad. Fix: ---- We disable the pointer-events on the "Old unit price" text, making it unclickable, more precisely, preventing it from being a `target` of a click event. With that change, the click handler (aka `clickLink` [1]) will only run once. [1]: https://github.com/odoo/odoo/blob/8fb7e5fd304697aebcce085602a5f3a1ecaf757a/addons/point_of_sale/static/src/app/screens/product_screen/order_summary/order_summary.xml#L9 opw-4636261
Emails with attachments sent to a Documents incoming address now use the company assigned to the target folder when creating the related email alias. This prevents company mismatch errors, so documents can be received correctly in folders owned by a specific company.
Original PR description
# Issue: When sending an email with an attachment to an incoming alias, if the target folder in Documents is explicitly owned by a specific company, an error occurs during alias creation: "We could…
# Issue: When sending an email with an attachment to an incoming alias, if the target folder in Documents is explicitly owned by a specific company, an error occurs during alias creation: "We could not create alias Inactive Alias because domain company1.com belongs to company YourCompany while the owner document belongs to company Company2." This issue arises because the `mail.alias.mixin.optional` model, when determining the `company_id` for the alias associated with the new document, might default to the system's company or another incorrect company, leading to a mismatch with the actual company of the explicitly-owned document folder. # Proposed solution: This commit modifies the `create` method of `mail.alias.mixin.optional` to prioritize the `company_id` of the document's target folder when setting the `company_id` for the associated alias. Specifically, within the loop where alias values are prepared: - It first attempts to retrieve the `company_id` directly from the `vals` dictionary for the current record. - If no `company_id` is explicitly provided in `vals` but a `folder_id` is present, it then checks the `company_id` of that `documents.folder`. - If the folder has an explicit `company_id`, this company is used as the effective `company_id` for the alias. - Otherwise, it falls back to the previously determined `company_id_default`. This ensures that the `company_id` used for alias domain validation aligns with the `company_id` of the document's folder, resolving the domain/owner company mismatch error. opw-4727873 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
HR managers can now choose Employee-specific assignment options, such as Coach or Manager, while creating a new activity plan before it is saved. This removes an extra save-and-reopen step and makes activity plan setup more consistent and efficient.
Original PR description
_Description of the issue/feature this PR addresses:_ When setting up a new activity template on a new activity plan, HR specific values for 'Assignment' such as Coach or Manager are not available.…
_Description of the issue/feature this PR addresses:_ When setting up a new activity template on a new activity plan, HR specific values for 'Assignment' such as Coach or Manager are not available. _Current behavior before PR:_ As an HR manager, go to menu HR -> Configuration -> Activity Plan. Click 'New'. Under Activities To Create, click 'Add a line'. Under 'Assignment', the only options available are Ask at launch and Default user. <img src="https://github.com/user-attachments/assets/97be6790-b450-42c6-910a-07483c30e175" width=50% height=50%> Cancel the 'Create Activities' popup. Give the plan a name and save it. Again, under Activities To Create, click 'Add a line'. Only now are HR specific options (Coach, Manager etc) available under 'Assignment'. _Desired behavior after PR is merged:_ HR specific values for 'Assignment' are immediately availalbe when setting up a new plan for the Employee model.  _Technical solution:_ Pass the plan's model as the default model for new templates so that the related field is populated with a value that unlocks the HR specific values before first saving the plan. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Subscription renewals will no longer add invoice lines for recurring items with an ordered quantity of zero. This avoids unnecessary or confusing invoice entries and keeps customer invoices cleaner.
Original PR description
Before this commit, when a recurring order_line had an invoice_policy "order" and the quantity was 0, it would be added to the invoice. taskid: 4841550
Delivery status buttons and switches in Point of Sale delivery views now align better on smaller screens. This makes mobile use clearer and easier for staff managing delivery orders.
Original PR description
Before this commit: === - The delivery status buttons (New, Ongoing, Done) and the toggle Switches were misaligned on smaller screens due to the use of grid layout, After this commit: === - The layout uses a flex-based structure, which ensures better alignment and spacing across screen sizes. Task: 4844890
Credit and debit notes are now included in India GSTR-3B section 3.1(a), making the reported taxable sales figures more complete. This helps businesses file GST returns with totals that better reflect adjustments made through credit or debit notes.
Original PR description
In Gstr-3B section 3.1(a) credit note/debit note should be calculated. This PR adds credit note/debit note into section 3.1(a). **Older Version PR:** https://github.com/odoo/enterprise/pull/87160 **opw**-https://www.odoo.com/odoo/project/49/tasks/4845457 **Task**-4852947
The EC Sales List now avoids incorrectly warning about duplicate VAT numbers when a partner has both invoices and refunds in the same reporting period. This helps users trust the report warnings and reduces unnecessary investigation of valid customer records.
Original PR description
Fixed the computation of `is_vat_duplicated` to avoid false positive in case of partners having both invoices and refunds in the selected period.
This fix prevents an error that could occur when a user opened an app through the command palette and immediately typed into the search field. It improves reliability of navigation in the Enterprise web interface and avoids an unexpected interruption for users.
Original PR description
Before this commit a traceback was occurring when opening an app using palette and then immediately passing a value in palette search input. After this commit the traceback will not occur anymore. task-4735048
Restaurant staff now keep the relevant order selected after accepting it or marking it as food ready in UrbanPiper POS. This reduces extra clicks and helps teams continue processing online orders without losing context.
Original PR description
Before this commit: === - After accepting an order or marking it as "Food Ready," no order was selected by default. After this commit: === - After accepting an order or marking it as "Food Ready," the respective order is automatically selected by default. task-4442911