Daily updates from Odoo
Friday, October 10, 2025
8 changes · saas-18.2
Resolved issues and error corrections
This update fixes an automated test failure by ensuring the test user has the required sales quotation template permission. It helps keep quality checks stable without changing day-to-day business functionality.
Original PR description
This particular test case was failing for multiple instances, whenever user do not have `sale_management.group_sale_order_template` group. This fix ensure user has proper group, so the needed field exists in view
traceback
```
test_sale_order_template_change_after_open
so.sale_order_template_id = quotation_templates[1]
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/tests/form.py", line 352, in __setattr__
self[field_name] = value
~~~~^^^^^^^^^^^^
File "/data/build/odoo/odoo/tests/form.py", line 357, in __setitem__
assert field_info is not None, f"{field_name!r} was not found in the view"
^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'sale_order_template_id' was not found in the view
```
runbot error:232942
Forward-Port-Of: odoo/enterprise#96611This fixes a timing issue that could cause a stock barcode test to fail unpredictably when validating an operation after saving a form. The change makes automated validation wait for the right screen state, improving build stability without changing user-facing behavior.
Original PR description
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; -…
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; - We validate the operation. The validation is done by a barcode scan (`OBTVALI`) but since [1](https://github.com/odoo-dev/enterprise/commit/b3a855a870d1861515abaff8683081a39f95558f), barcodes scanned when the user is somewhere else than in the barcode lines view are skipped. With a little bit of bad luck, the tour scans `OBTVALI` while the save from the form view is not finished yet and thus, the scanned barcode is ignored. To reproduce that, run the test `test_scrap_change_source_location` locally in debug mode and add a throttling (eg.: Fast 4G) before to run the tour. To solve the issue, finetune the `validateBarcodeOperation` default trigger, so the error won't happen in this tour and other similar contexts. Runbot build error: [232331](https://runbot.odoo.com/odoo/runbot.build.error/232331) Forward-Port-Of: odoo/enterprise#96542
The Documents app no longer shows an unused tooltip field on document tags. This removes a confusing field from the interface while keeping the underlying data model stable for compatibility.
Original PR description
The 'tooltip' field was introduced on document tags categories, but after couple of refactors it ended up unused on document tag. As we cannot remove fields from the data model in stable, this commit removes tooltip from the view and marks it as deprecated in the code. opw-4567814 ## Stems from https://github.com/odoo/odoo/pull/210147 https://github.com/odoo/enterprise/pull/79496 # Merge plan - hide `tooltip` in stable - remove `tooltip` in master Forward-Port-Of: odoo/enterprise#86504
Cash basis journal item lines now keep the proper journal entry name instead of showing '/'. This prevents confusing accounting lists after payments are reconciled and helps users identify posted entries correctly.
Original PR description
This is the backport of https://github.com/odoo/enterprise/pull/94111/commits/e379cf04cc1aa97d28d73566daadad193310ae9a Issue: In the list view of Journal Items, cash basis lines show a `move_name` of…
This is the backport of https://github.com/odoo/enterprise/pull/94111/commits/e379cf04cc1aa97d28d73566daadad193310ae9a Issue: In the list view of Journal Items, cash basis lines show a `move_name` of '/' event if the move is posted and has a name. Steps to reproduce: - Activate Cash Basis in the accounting settings - Create a tax with "Tax Exigibility" set "Based on Payment" - Set the "Cash Basis Transition Account" to "Current Assets" - Activate reconciliation on "Current Assets" - Create an invoice with this tax, confirm - In the dashboard, click on Bank and new - Set the name of the invoice as the label, and the amount of the invoice as amount - Save & Close - Go in Accounting > Transactions > Journal Items - The lines created for the cah basis entry display '/' in the column "Journal Entry" Cause: This issue is linked to the order in which things are done in `_set_next_sequence`: the fields triggered by the sequence field are added in `self.env.transaction.tocompute` then the sequence is computed and assigned. When `_set_next_sequence()` is called from [`_create_tax_cash_basis_moves()`](https://github.com/odoo/odoo/blob/849e4a87178d8c8588b75e3f7d9073d6a78326f9/addons/account/models/account_partial_reconcile.py#L649-L654) this order is problematic as `account.move.line.move_name` will be computed and removed from `self.env.transaction.tocompute`. So it will not be updated when the sequence is assigned in `account.move.name`. The callstack is something like this: - `_set_next_sequence()` calls `_locked_increment()` to compute the sequence - `_locked_increment()` calls `flush_recordset()` which will call `_recompute_recordset()` to recompute all fields - `_compute_invoice_date_due()` needs the field `needed_terms` triggering `_compute_needed_terms()` - `_compute_needed_terms()` needs `invoice_line_ids` - the fetch on `account.move.line` is ordered by `move_name` - So `_compute_related()` is triggered for `move_name` and `account.move.line.move_name` is removed from `self.env.transaction.tocompute` Then `_locked_increment()` returns the sequence, it gets assigned as the move name and `move_name` is never updated because it's not in `self.env.transaction.tocompute`. This doesn't occur in other flows (like calling `action_post()`) because the value of `needed_terms` is read from the cache. Solution: Swap the order in which things are done in `_set_next_sequence()`: first compute and assign the sequence and then add the triggered fields in `self.env.transaction.tocompute` so that they are computed afterwards. It seems more logic that way: we change the `_sequence_field` then mark all fields that will be impacted in `tocompute`. Community PR - https://github.com/odoo/odoo/pull/230751 opw-4747878 Forward-Port-Of: odoo/enterprise#96721
Appointments now create video call links using the website tied to the appointment type. This prevents customers on multi-website setups from receiving links with the wrong domain, improving reliability for online meetings.
Original PR description
**Steps to reproduce:** - Create 2 companies - Create a website for each company - Set a custom website domain on the second one - Create appointement type for each website - Create an appointement on both websites - The link created for the video call has the wrong base for one of them **Issue:** Appointment `get_base_url` finds its base_url without considering the current website. **Fix:** Compute the base_url according to the appointement type to ensure the current website is taken into account. opw-4880715 Forward-Port-Of: odoo/enterprise#92734
This update prevents an error when users reconcile the final available batch payment from the Batch Payments tab. If no batch payments remain, the screen now continues by showing existing matching entries, helping accountants complete reconciliation without interruption.
Original PR description
Issue: Error is raised when there are no batch payments found in `saveSearchState()` Purpose of this PR: We display the match existing entries if there are no batch payments found. Steps to Reproduce on Runbot: install accounting make a batch payment reconcile single batch payment with statement line while on Batch Payments Tab opw-4807527
Social Marketing post previews now correctly recognize links that include comma-separated values or similar special characters in their parameters. This prevents links from being cut off in previews, helping users publish accurate social posts without manual workarounds.
Original PR description
**Steps to reproduce:** - Go to `Social Marketing` app. - Click on `New Post`. - Select Facebook for preview (should not matter). - Write a message with an URL which have comma-separated parameters. (e.g 'TEST URL https://example.be:8080/path/res-123/ext/?param1=v1,v2,v3') - URL is cut on the first comma in the preview. **Issue:** URL regex did not match URLs containing comma-separated query parameters, causing them to be truncated. **Fix:** Updated the regex to include commas. opw-5042131 Forward-Port-Of: odoo/enterprise#94220
Colombian online checkout could get stuck when customers selected an obligation type whose internal code had more than one digit. The fix lets the address form save correctly and continue to the delivery step, reducing checkout interruptions for Colombian websites.
Original PR description
Problem: When there is an obligation type code with id greater than 9, and it is selected in the dropdown of the website sale address form for obligation type, the screen keeps loading forever and…
Problem: When there is an obligation type code with id greater than 9, and it is selected in the dropdown of the website sale address form for obligation type, the screen keeps loading forever and there is an “expected singleton” traceback in the logs. This is because in the method `_parse_form_data` in `l10n_co_website_sale`, the obligation type field on `form_data` is set to be a list of “type ids” which leads to an error when `convert_to_cache` is called as the browse function in this attempts to convert the list to a tuple of single characters. For example, if the list is ["10"], it gets converted to ("1","0") hence leading to the expected singleton traceback.
Purpose: Instead of passing a form list to form_data,we pass the record set which will correctly set the values in the address, much like how `default_obligations_ids` is also currently set. After this correction, the website address screen will save the address properly and redirect to the delivery screen for further actions.
Steps to Reproduce on Runbot:
1. Create a Colombian company, make sure l10n_co is installed
2. Set the company on the website to this company
3. Ensure that there is a record in the table `l10n_co_edi_obligation_type_ids` with id > 9. Create one if it does not exist.
4. Open the /shop page in incognito mode as a public user.
5. Add a product, go to the checkout page, proceed to the address page.
6. Enter all the information including the Identification Number (e.g. 623.456.789-1). Choose “NIT” in identification type and select the type code from step 3 in the dropdown for obligation type. Choose country “Colombia” along with a state and city
7. Click on "Continue checkout". The page gets stuck in a loading state
forever.
opw-4776301
Forward-Port-Of: odoo/enterprise#90862