Thursday, October 2, 2025
16 changes · 18.0
Enhancements to existing features
This update improves part of Odoo's core file handling in the Base module. It should make the underlying system behavior more reliable without changing day-to-day workflows for most users.
Original PR description
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
Resolved issues and error corrections
This fixes the contracts button shown on vehicle cards in the Fleet kanban view. Fleet users can reliably open related vehicle contracts from the overview, reducing navigation friction and avoiding a broken shortcut.
Original PR description
Fix contracts button in vehicle kanban Task-5109335 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Features or functions removed from Odoo
This change removes obsolete test files from the Turkish Nilvera e-invoice module. The active tests now live in the related extended module, reducing unused maintenance code without affecting customer-facing behavior.
Original PR description
Since c575bd48be676cce, XML generation has been extended in l10n_tr_nilvera_einvoice_extended, which auto-installs with l10n_tr_nilvera_einvoice. The tests in einvoice were skipped because they fail with the extensions, and adapted copies were added in the extended module instead. This leaves dead code in einvoice, so we remove the unused test file. no task-id
Discarding a quality worksheet wizard no longer creates a worksheet record or marks the quality check as completed. This avoids misleading completion status and keeps quality check progress accurate when users cancel the worksheet flow.
Original PR description
**Problem:** Opening the worksheet wizard and discarding it makes the worksheet "completed" **Steps to reproduce:** - create a quality check - set a product - in type select worksheet - select the "quality issues" template - select a team - click on the worksheet smart button - discard **Current behavior:** the worksheet is marked has completed **Cause of the issue:** when discarding, this line causes the creation of an instance of worksheet.template linked to the quality.check via its worksheet_template_id https://github.com/odoo/enterprise/blob/a1dd58f2b59ecd2d22efd29eb0aace7bdca64f66/quality_control_worksheet/static/src/views/quality_worksheet_fromview.js#L35 which will make the worksheet_count field of the quality check worth 1 after discarding https://github.com/odoo/enterprise/blob/1c5e547b59a57c840ef72b2e76c6a6a627f1f18e/quality_control_worksheet/models/quality.py#L37-L39 opw-4980945
This update makes Chilean bank data rely on a stable country reference instead of the editable country name. It prevents module updates or installations from failing when the country name has been changed in a database.
Original PR description
`res.country` records are `noupdate` by default, which means that changes such as the following are not reverted: ```SQL pied@(none):pied_3131231> SELECT c.name->>'en_US' FROM res_country c JOIN…
`res.country` records are `noupdate` by default, which means that changes such as the following are not reverted:
```SQL
pied@(none):pied_3131231> SELECT c.name->>'en_US' FROM res_country c JOIN ir_model_data d ON d.res_id = c.id AND d.model = 'res.country' AND d.module = 'base' AND d.name IN ('cl', 'co')
+----------+
| ?column? |
|----------|
| COLOMBIA |
| Colombia |
+----------+
```
Note: in this specific, the change is clearly an error introduced in the data. Still, the error it produces (which follows) can be avoided by referring to the xmlid, instead of the record name.
```
Traceback (most recent call last):
File "/home/odoo/src/odoo/saas-18.4/odoo/service/server.py", line 1410, in preload_registries
registry = Registry.new(dbname, update_module=update_module, install_modules=config['init'], upgrade_modules=config['update'])
File "<decorator-gen-6>", line 2, in new
File "/home/odoo/src/odoo/saas-18.4/odoo/tools/func.py", line 89, in locked
return func(inst, *args, **kwargs)
File "/home/odoo/src/odoo/saas-18.4/odoo/orm/registry.py", line 175, in new
load_modules(
File "/home/odoo/src/odoo/saas-18.4/odoo/modules/loading.py", line 455, in load_modules
load_module_graph(
File "/home/odoo/src/odoo/saas-18.4/odoo/modules/loading.py", line 226, in load_module_graph
load_data(env, idref, 'update', kind='data', package=package)
File "/home/odoo/src/odoo/saas-18.4/odoo/modules/loading.py", line 79, in load_data
tools.convert_file(env, package.name, filename, idref, mode, noupdate, kind)
File "/home/odoo/src/odoo/saas-18.4/odoo/tools/convert.py", line 624, in convert_file
convert_csv_import(env, module, pathname, fp.read(), idref, mode, noupdate)
File "/home/odoo/src/odoo/saas-18.4/odoo/tools/convert.py", line 680, in convert_csv_import
raise Exception(env._(
Exception: Module loading l10n_cl failed: file l10n_cl/data/res.bank.csv could not be processed:
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
No matching record found for name 'Chile' in field 'Country'
```
upg-3131231
Forward-Port-Of: odoo/odoo#229218This update corrects an internal automated test for SEPA credit transfers after a restricted bank account field could no longer be updated directly. It helps keep payment-related quality checks reliable without changing day-to-day user workflows.
Original PR description
Direct update sanitized_acc_number is not allowed. Forward-Port-Of: odoo/enterprise#72508
The favorite star in Documents spreadsheets now changes immediately when tapped on mobile devices. This avoids confusion for users by making the saved or unsaved state display correctly without needing an extra tap elsewhere.
Original PR description
The star icon on mobile would have a strange behaviour. After clicking it, the star would not change between filled/not filled until clicking elsewhere. It turns out that on mobile, after a click the hover rule is applied. And our hover rule would modify the icon to be the opposite of what it should be. This commit changes the CSS to use the same css as `BooleanFavoriteField` to stay consistent with the rest of Odoo. Task: [5092945](https://www.odoo.com/odoo/2328/tasks/5092945) Forward-Port-Of: odoo/enterprise#95016
An unused tooltip setting on document tags is now hidden from users and marked as deprecated in the code. This reduces confusion in the Documents app without changing existing document workflows or data.
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
The grid view now keeps all months visible when users turn off weekends in a yearly view. This prevents missing month columns in analytic reports and keeps annual reporting complete and reliable.
Original PR description
To reproduce: ============= 1- go to accounting > reporting > management 2- go to analytic report and click on grid view 3- From the year dropdown, uncheck "Show weekends". → Some months disappear unexpectedly. Problem: ========= Weekend filtering was applied even in year range. In year view, each column is already a full month, so filtering out weekends is incorrect. Fix: ==== Adjust the condition to skip filtering when range is ["year" or "day"]. opw-5078200 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 Point of Sale session names from advancing when cash posting fails. Businesses get continuous, easier-to-audit session numbering without gaps caused by failed operations.
Original PR description
Before this commit, if an issue occurred while posting the cash details, the session sequence would still increment even though the operation failed, leading to gaps in session names. With this commit, the sequence only increments when the operation succeeds, ensuring continuous session naming without gaps. opw-5100163 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where turning off weekends in yearly analytic reports could make some months disappear. Yearly views now keep all month columns visible, so reports remain complete and easier to review.
Original PR description
To reproduce: ============= 1- Go to Analytic Reporting. 2- From the year dropdown, uncheck "Show weekends". → Some months disappear unexpectedly. Problem: ========= Weekend filtering was applied even in year range. In year view, each column is already a full month, so filtering out weekends is incorrect. Fix: ==== Adjust the condition to skip filtering when range is not "month". Weekend logic now only applies to month range grid. community-pr: https://github.com/odoo/odoo/pull/226975 opw-5078200
Embedded YouTube videos now keep selected playback settings such as autoplay and looping when shown on product pages. This ensures shoppers see videos behave as configured, improving consistency for eCommerce media.
Original PR description
Versions -------- - 18.0 Steps ----- 1. Add a youtube video to a product's eCommerce media; 2. enable autoplay & loop; 3. go to product page; 4. check embedded video. Issue ----- Video doesn't autoplay or loop. Cause ----- The playback options are part of the video url when it gets passed to `get_video_embed_code`, but these get discarded by the `get_video_url_data` method. Solution -------- Do a partial backport of commit 2bcff9dda3e45, which fixed the issue by first mapping the url's parameters, then passing them to `get_video_url_data`. opw-5056801
Dynamic content inserted in the middle of text now keeps its inline placement after an editable message is saved or locked. This prevents unexpected line breaks in sent mailings and other edited HTML content, preserving the intended appearance for recipients.
Original PR description
In editable fields, the Html Editor currently adds the data-oe-t-inline
attribute to items that are identified as needing to be displayed inline
However, this attribute is removed on save. As a result, if the editable
body ever "locks" (for example: a mailing that is sent no longer allows
users to edit its body), then the inline property appears to be lost:
an inline dynamic attribute suddenly looks like it's on its own line.
Steps to reproduce:
- Create a mailing
- Add a dynamic attribute in the middle of a line
- Send the mailing
- You will see a carriage return directly before and after the dynamic
attribute
Fix:
- When a data-oe-t-inline is added to an element, the d-inline class is
also added
task-4852246This update keeps inline formatting information when editable text content is saved, preventing unexpected line breaks when the same content is later viewed as non-editable. Related Web Studio tests were updated to reflect the corrected behavior.
Original PR description
The data-oe-t-inline would previously set certain items in editable text areas (such as dynamic text fields in mailing bodies) as inline. This property used to be lost on save and reapplied upon loading the contents of editable text fields. However, this caused inconsistencies where text fields that became no longer editable would have a sudden difference in presentation, with previously-inlined items now having a carriage return directly before and after them. To fix this, the data-oe-t-inline attribute is no longer deleted on save. Tests have to be adapted to accomodate this change. task-4852246
The timesheet grid now respects flexible working schedules by not automatically marking Saturdays and Sundays as unavailable. This avoids misleading employees who are allowed to work on any day.
Original PR description
To reproduce: ============= 1- Update employee worktime to be flexible 2- Go to timesheets -> saturday & sunday are marked grey Problem: ======== Can't apply https://github.com/odoo/odoo/blob/ce2d134d3e8e5c0d96529c1d0490f1e0c5e28294/addons/resource/models/resource_calendar.py#L511 This logic cannot be applied when an employee's work time is flexible, since they can work whenever they want. Fix: ==== When employee work time is flexible we just return empty list for the unavailable dates. opw-5031144
Website pricelist snippets now keep consistent spacing and text sizing when descriptions are regenerated in the page builder. This prevents newly added or restored descriptions from looking larger or too close to product titles, improving visual consistency for website editors.
Original PR description
New description paragraphs generated by the builder for the "pricelist" snippets were missing two expected classes. - "mt-2" was never applied, so all pricelist variants lacked the vertical spacing below product titles. - The boxed and cafe snippets also needed the `o_small` class to keep their text size consistent. Steps to see the missing "o_small": 1. Drop an "s_pricelist_boxed" or "Pricelist Cafe" snippet on a page. 2. Use Backspace to delete the text already present in one of the descriptions. 3. Toggle the "Descriptions" option off and on; the regenerated paragraph appears larger than expected because `o_small` is absent. task-5117864