Wednesday, June 18, 2025
11 changes · 17.0
Enhancements to existing features
Accounting demo data is now created directly during the accountant module setup instead of being loaded twice through the previous process. This reduces unnecessary work during demo installation and helps keep setup more efficient and reliable.
Original PR description
Backport of https://github.com/odoo/enterprise/pull/86477 which improves what was done in commits - https://github.com/odoo/odoo/commit/ebd6b5f374303dcdfcc69fa64522c1b83bd7fe58 - https://github.com/odoo/enterprise/commit/37cc5e067ff8d1e45edbd9a167a2d801c658739c since it avoids reloading the demo data twice by hooking on `_install_demo`. Instead, we just call our own function to create the demo data once in the accountant module. This commit therefore only reverts ebd6b5f374303dcdfcc69fa64522c1b83bd7fe58 Enterprise PR: https://github.com/odoo/enterprise/pull/87204
The Jordanian electronic invoicing module now includes a demo mode to help teams test successful EDI submissions safely. This makes validation and training easier without relying on live submission flows.
Original PR description
This commit adds the demo mode for Jordanian EDI module. This is helpful in testing EDI submission success scenarios. task-4656902 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The accountant module now creates its sample/demo accounting data through a single Python-based setup step instead of reloading XML demo data multiple times. This reduces unnecessary installation work and makes demo environments more reliable without changing day-to-day accounting features.
Original PR description
Backport of https://github.com/odoo/enterprise/pull/86477 which improves what was done in commits - https://github.com/odoo/odoo/commit/ebd6b5f374303dcdfcc69fa64522c1b83bd7fe58 - https://github.com/odoo/enterprise/commit/37cc5e067ff8d1e45edbd9a167a2d801c658739c since it avoids reloading the demo data twice by hooking on `_install_demo`. Instead, we just call our own function to create the demo data once in the accountant module Community PR: https://github.com/odoo/odoo/pull/213379
Resolved issues and error corrections
Long translated labels in the user menu now display correctly without overlapping the checkbox. This improves readability for users in languages where menu text can be longer, such as localized versions of Dark Mode.
Original PR description
**PROBLEM** In the user menu, the text of dropdown item sometimes overlap with the checkbox next to it when it's too long. **STEP TO REPRODUCE** (happened with the italian localization of the onboarding module, but it's no longer the case because the text was shortened) 1. In `enterprise/web_enterprise/i18n/it.po`, for the msgid "Dark Mode" set the translation to something long. 2. click on the user menu and notice the text for the dark mode dropdown item is overlapping with the checkbox next to it. **CAUSE** The checkbox in the user_menu.xml template use d-flex and flex-row-reverse, which doesn't work well with the class form-switch. form-switch add a negative left-margin of -2.5em to the <input> inside the checkbox template. **FIX** Put the description text before the checkbox in a flex div, and remove the flex-row-reverse on the checkbox. opw-4654405
Miscellaneous changes
Follow up of 1c17cb5a27483bb41b1e5ed820bc771a7337ec6d. It is OK to write raw bytes in a Binary attachment=False field. The thing actually is: * Binary fields, accept raw bytes, store raw bytes in db. * Image fields, reject raw bytes, want base64, store base64 in db. When reading Image fields it is easy: always decode the base64. For Binary fields it is complicated, because some crazy people encode their binary fields in base64, and expect automatic base64 decoding when read. Crazy
Original PR description
Follow up of 1c17cb5a27483bb41b1e5ed820bc771a7337ec6d. It is OK to write raw bytes in a Binary attachment=False field. The thing actually is: * Binary fields, accept raw bytes, store raw bytes in db.…
Follow up of 1c17cb5a27483bb41b1e5ed820bc771a7337ec6d. It is OK to write raw bytes in a Binary attachment=False field. The thing actually is: * Binary fields, accept raw bytes, store raw bytes in db. * Image fields, reject raw bytes, want base64, store base64 in db. When reading Image fields it is easy: always decode the base64. For Binary fields it is complicated, because some crazy people encode their binary fields in base64, and expect automatic base64 decoding when read. Crazy! So *attempt* to decode the b64 and if the decoding fail just assume it was raw bytes from the begining. Those crazy people even use silly base64 libraries to encode their bytes, e.g. `base64.encodebytes` which is a Email MIME utility: it adds `\r\n` every 76th character because of the folding requirements in email headers. So those bytes are "technically" not base64 (as far as `validate=True` is concerned) but we still must decode them. CRAZY. I'm looking at you `base.language.export.data`. Forward-Port-Of: odoo/odoo#214758
This fix makes an automated test for Odoo's bus messaging module more reliable when simulating a browser tab being closed. It helps prevent false test failures, supporting smoother development and more dependable releases without changing user-facing behavior.
Original PR description
This commit fixes the `second tab still receives notifications after main pagehide` test. This test simulates the main tab being closed. As a result, the main tab unregister itself from the worker. Upon message reception, the worker would try to access client's specific data such as channels or debug mode which are supposed to be available. However, since the client was unregistered, an error occurred. runbot-75372 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
The website editor now handles WebP images correctly when rendering image shapes. This prevents avoidable server log warnings and supports the planned move to WebP images without disrupting website editing.
Original PR description
Before master, this bug is mostly hidden since no WebP files are used by default. However, an upcoming PR targeting master converts all website images to WebP (https://github.com/odoo/odoo/pull/168862), revealing warnings in the server logs due to `binary_to_image` crashing on WebP inputs. This patch avoids the crash by explicitly handling WebP files with `get_webp_size()`.
This fixes an unreliable automated test for bus notifications that could fail depending on timing. The change helps keep quality checks stable without changing how users experience the product.
Original PR description
This commit fixes the `test_postcommit` that fails in a non deterministic fashion. This test ensures bus notifications created in the post commit hook result in only one batch. To do so, the test listens on the connection with a selector. However, the loop condition is incorrect and exits after the first select timeout. As a result, if the test takes more than 5 seconds, it fails. This commit fixes the loop condition to continue until the stop event is set. runbot-116746,161035,223589,77470 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
The website editor now handles missing video thumbnails gracefully when users add or preview background videos. Instead of showing an error, it skips the unavailable video preview and records a warning, keeping the editing flow uninterrupted.
Original PR description
Problem: When loading a thumbnail for a video, if the thumbnail does not exist, a traceback occurs. This breaks the user experience when attempting to add or preview background videos. Solution: Add a check for the existence of the thumbnail. If it does not exist, safely skip rendering the video and log a warning instead of raising an exception. Steps to reproduce: 1. Go to Website. 2. Add a text block. 3. Add a background video. 4. When the video selector opens and no thumbnail is available, a traceback appears. opw-4859192 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Prior to this commit, when validating a Scrap Order for a product with insuficient quantity, a wizard was shown to confirm the order as you would end up with a negative quantity in your warehouse. However, the view did not properly displayed quant_ids which allows seeing the current quantity for this product on the current warehouse as this compute field was not triggered during the first onchange call. When confirming the popup, the quant_ids could barely be seen before closing. The ide
Original PR description
Prior to this commit, when validating a Scrap Order for a product with insuficient quantity, a wizard was shown to confirm the order as you would end up with a negative quantity in your warehouse. However, the view did not properly displayed quant_ids which allows seeing the current quantity for this product on the current warehouse as this compute field was not triggered during the first onchange call. When confirming the popup, the quant_ids could barely be seen before closing. The idea is to make so that quand_ids can be seen as expected before any confirmation/cancelation. Forward-Port-Of: odoo/odoo#211152
Scenario: - insert the last blog posts widget in a page - open editor and edit (eg. Filter Intensity) the cover of a post - save Result: the change is lost Cause: the content of the widget is dynamic, and we delete the content in cleanForSave (that call the destroy of the widget) before saving, so the change are not saved. Fix: make the dynamically added cover widget unselectable, the cover of the blog post can still be changed in other locations (blog post list, blog post page).
Original PR description
Scenario: - insert the last blog posts widget in a page - open editor and edit (eg. Filter Intensity) the cover of a post - save Result: the change is lost Cause: the content of the widget is dynamic, and we delete the content in cleanForSave (that call the destroy of the widget) before saving, so the change are not saved. Fix: make the dynamically added cover widget unselectable, the cover of the blog post can still be changed in other locations (blog post list, blog post page). opw-4633287 __PR NOTE:__ in verson before 18.0, the cover was not selectable probably from the .o_not_editable on `.s_dynamic_snippet_content` ancestor element. I've not found what changed (there was some change to dynamic snippet and widget blog post) that make it selectable now. Forward-Port-Of: odoo/odoo#210079