Wednesday, November 12, 2025
13 changes · saas-18.2
Resolved issues and error corrections
This change fixes an internal purchase module test that failed with PostgreSQL 18 because the database now reports a related constraint error differently. It broadens the expected database error in the test, helping keep automated validation reliable without changing business functionality.
Original PR description
Apparently in pg18 a standard-compliance fix (postgres/postgres@086c84b23d99c2ad268f97508cd840efc1fdfd79) has led to `RESTRICT_VIOLATION` being emitted in cases which formerly emitted…
Apparently in pg18 a standard-compliance
fix (postgres/postgres@086c84b23d99c2ad268f97508cd840efc1fdfd79) has led to `RESTRICT_VIOLATION` being emitted in cases which formerly emitted `FOREIGN_KEY_VIOLATION`. One such case is specifically being tested for by `test_purchase_order_line_without_uom`, leading to this test failing systematically when running pg18:
psycopg2.errors.RestrictViolation: update or delete on table "uom_uom" violates RESTRICT setting of foreign key constraint "purchase_order_line_product_uom_id_fkey" on table "purchase_order_line"
DETAIL: Key (id)=(29) is referenced from table "purchase_order_line".
Update the test to use the more generic `IntegrityError` as it's probably more than sufficient for our purposes. Technically we could pass a tuple of `(ForeignKeyViolation, RestrictViolation)` but it doesn't really seem necessary. And it would require fixing the `_raisesContext` override as currently it is very much *not* compatible with that.
Forward-Port-Of: odoo/odoo#235119The accounting dashboard upload button can no longer be accidentally dragged out of place. This keeps the interface stable and avoids confusion when users upload purchase journal or other accounting files.
Original PR description
Issue: - In the dashboard, the upload button (purchase journal and others) could be dragged. - This caused unintended movement of the upload UI element. Fix: - Added `draggable=false` to the upload button element. - Ensures the button remains fixed and cannot be dragged around. TaskID-5114617 Forward-Port-Of: odoo/odoo#235086 Forward-Port-Of: odoo/odoo#229013
This fix updates partner e-invoice settings when related e-invoicing modules are uninstalled. It prevents users from seeing an error when opening partners that previously used an e-invoice format provided by a removed module.
Original PR description
Before this fix, if you uninstalled this module and navigated to any partner that had a e-invoice format defined by this module, you'd have a traceback. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr @moduon MT-12168 OPW-5172861 Forward-Port-Of: odoo/odoo#232297
The Website editor now waits for the page preview to finish loading before opening the Optimize SEO dialog. This prevents an error that could crash the dialog when users open it immediately after reloading on a slow connection.
Original PR description
Steps to reproduce: - Open Website app and enter edit mode on any page. - Reload the page with a slow connection. - Immediately open "Optimize SEO" from the navbar menu. Before this commit, the dialog accessed the preview document while the iframe was reloading, so reading location.origin raised a TypeError. After this commit, the dialog waits for the iframe to finish loading or returns immediately when it is already complete, preventing crashes. task-5104033 Forward-Port-Of: odoo/odoo#230820
This fix sets the administrator user's timezone in passkey demo tests so they run consistently in environments without demo data. It helps prevent automated test failures and supports smoother maintenance releases without changing user-facing behavior.
Original PR description
We need to define timezone of the admin user for no demo tests, similar to how it is done in [saas-18.3](https://github.com/odoo/odoo/blob/9900375bc0bac2754150fd8cd6a1e45ecad8da83/addons/auth_passkey/tests/test_passkey_demo.py#L456): [Runbot error - 229872](https://runbot.odoo.com/odoo/error/229872) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231903
This fixes an editing issue where a table placed inside another table could grow beyond its containing cell when resized. The table now remains within the parent cell, so users can continue editing content reliably.
Original PR description
**Current behavior before PR:** - When a table was created inside another table, resizing the inner table could cause it to overflow its parent cell, making it uneditable. **Desired behavior after PR is merged:** - The inner table no longer overflows its parent cell when resized, ensuring it remains editable. task-5216916 Forward-Port-Of: odoo/odoo#233554
Spreadsheet fields that are missing or invalid are now clearly marked again after a recent styling change. This keeps spreadsheets easier to use while avoiding layout issues caused by dark mode styles elsewhere in Odoo.
Original PR description
Following the style revamp of the o-spreadsheet lib, we introduced a class o-input (differs from odoo o_input) in order to avoid collision with the odoo classes which tend to be altered in dark mode which spreadsheet does not support. However, we still relied on the default behaviour of odoo classes to mark specific inputs as invalid or missing. This commit ensures that missing/invalid are always marked as such while make preventing the dark mode to break the default layout. Task-4878174 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#234517
Website pages with embedded YouTube videos and optional cookie blocking now display the cookie notice without a large empty gap above it. This improves the visitor experience when cookies have not yet been accepted.
Original PR description
Scenario: - add a youtube video on a website page, enable the cookie bar with 3rd party blocking - go in incognito to the page Result: there is a block with the notice "To see the interactive content , you need to accept optional cookies." and a big empty whitespace above it. Fix: fix the typo in the code so the code showing the element .media_iframe_video_size is run when the cookies are accepted as was the intent and the case in 18.0 version. opw-4866088
Opening the blog archive dropdown in some browsers could accidentally reload the page before a visitor made a selection. This fix prevents that unwanted reload, making the blog sidebar archive filter behave reliably across browsers.
Original PR description
In some browsers, opening a `<select>` triggers a click event. Because of this when the blog's sidebar "Archive" dropdown is opened, it might reload the page before the selection is actually made. This commit solves this by detecting a distinct event when PostLink is activated on `<select>` element. Steps to reproduce: - Using Firefox - Install `website_blog` - Edit the blogs page - Activate the sidebar - Save - Open the "Archive" dropdown => The page was reloaded
This update fixes and simplifies the wording and translations for Italian electronic invoice document types. It helps users select and understand the correct document type more reliably when preparing Italian e-invoicing records.
Original PR description
Simplified and fixed labels and labels translations. Ref: https://help.fattureincloud.it/help/articolo/544-crea-autofattura-elettronica Ref: https://fex-app.com/FatturaElettronica/FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/TipoDocumento Forward-Port-Of: odoo/odoo#234901 Forward-Port-Of: odoo/odoo#233943
This change fixes a failing test in the app creation experience used by Studio. It helps keep the product stable by preventing an error in automated validation, reducing the risk of regressions reaching users.
This update corrects a test in the barcode batch workflow so it runs reliably on newer Python versions. It prevents false test failures caused by changes in how record ordering is handled, helping maintain stable quality checks.
Original PR description
*: stock_barcode_picking_batch Steps to reproduce ================== Use python > 3.10 Run the test test_pack_batch_in_multiple_packages It fails on assertRecordValues, the records are not in the same order Cause of the issue ================== Recordsets ordering is not stable across python versions. It is implemented as `return set(self._ids) < set(other._ids)` https://github.com/odoo/odoo/blob/8a026b875a9b70f12689cdbd71d7e54b987d0612/odoo/models.py#L6636 Since this is a subset check, it always returns false when called with different ids Solution ======== Compare using the id directly opw-231140 Forward-Port-Of: odoo/enterprise#99118
This change simplifies a styling rule used in spreadsheet side panels. It keeps the same visual result while making the code easier to maintain and reducing the risk of future styling issues.
Original PR description
Because of a really strong rule in o_spreadsheet lib that forced the box-sizing property pretty much everywhere, we came up with a super dense rule to counteract it inside odoo and specifically inside the side panels. This commits aims to simplify it at best with the common denominator of those rules. Task-4878174 Forward-Port-Of: odoo/enterprise#98876