Thursday, May 28, 2026
11 changes · saas-18.2
Resolved issues and error corrections
Odoo now handles internal domain objects more consistently when they are used in cached or indexed operations. This prevents errors caused by certain optimized internal values, improving reliability without changing user-facing behavior.
Original PR description
Even if `Domain` objects (and their subclasses) are immutable by design, they are not always hashable, as sometimes, following an optimization, the `value` of the domain (usually for a…
Even if `Domain` objects (and their subclasses) are immutable by design, they are not always hashable, as sometimes, following an optimization, the `value` of the domain (usually for a `DomainCondition`) is an `OrderedSet`, which is unhashable. This is an inconsistency in the usage contract, as the object is not consistently hashable, depending on the internal state. This commit uses `freehash` for the `value` of `DomainCondition`, as it's the only domain type that actively uses an OrderedSet in its transformation. On the happy path, where the `value` is hashable by default, there is no performance impact (besides a function call). For unhashable values, there is a small cost for the exception unwinding. Note that the hash is not *stable*, as it may depend on the object's `id`, so the value of the hashed `Domain` might change between process run instances. But it's an acceptable trade-off considering that for now we can't hash at all. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Withholding tax lines in the Philippine localization are now excluded from periodic VAT closing entries. This prevents withholding tax from being incorrectly included in VAT closing calculations, improving accuracy for local tax reporting.
Original PR description
Set `use_in_tax_closing` to False on withholding tax (WHT) repartition lines, as they should not contribute to the periodic VAT closing entry. task-6146238 Forward-Port-Of: odoo/odoo#266623
Link tracker codes can no longer be left empty or use unsupported characters, preventing trackers that appear in lists but do not work. Validation messages now remain accurate when users edit duplicate or invalid codes, reducing confusion during tracker creation.
Original PR description
This commit removes the possibility to create link tracker with an empty code since they wouldn't work but would still appear in the list. This commit also fixes the error message that would disappear even if the code is still not valid. Steps: - Go to the link tracker page - Create a first tracker with the code "ABC" - Create another tracker - Edit the code to be "ABC". An error appears (duplicated code) - Edit the code to be empty. An error appears (empty code) - Edit the code to be "ABC". There is no error, yet the code cannot be submitted. task-4531974 Forward-Port-Of: odoo/odoo#242478
Generated PDFs for some vendor bills imported from external systems could show product lines without the internal item reference when the source XML lacked a description. This fix ensures the item reference is still displayed, making bills easier to identify and reconcile.
Original PR description
Some XML vendor bills generated by external ERPs were missing the Description tag, which typically contains both the [ITEM_REF] and ITEM_NAME. As a result, product lines in the generated PDF could appear without the internal item reference. This commit ensures that the item reference is always included in the displayed product line. task-6080328 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259086
This update makes an automated test for table cell background colors wait until the editor toolbar has refreshed before checking the selected color. It reduces false test failures and helps keep the HTML editor release process more stable without changing user-facing behavior.
Original PR description
Before this commit: the test `cell's selected color should be shown in toolbar (3)` could fail when the bd color indicator isn't updated before the checking After this commit: we create an util to wait for the selectionchange event is fired by the browser to make sure the toolbar is updated before verifying. runbot-937780 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#266445
This fix makes Odoo handle invalid JSON responses consistently, regardless of optional libraries installed in the environment. It prevents unexpected failures in existing error-handling flows caused by differences in how response parsing errors are reported.
Original PR description
The requests library uses different libraries to parse json objects depending on whether or not the simplejson library is installed (https://github.com/psf/requests/blob/dc9dbdfb3434c6e58d48fd102f93e5342308817e/src/requests/compat.py#L74). This in turn causes our try/excepts to fail if the simplejson library is installed in the env we simply re-raise the json error in case the simplejson library is installed so our try/excepts flows are not broken by the existence of a random package opw-6150349 Forward-Port-Of: odoo/odoo#265031 Forward-Port-Of: odoo/odoo#264303
A timing issue in an automated website test was fixed to prevent rare false failures in the validation pipeline. This helps keep quality checks stable and reduces unnecessary investigation of test-only failures.
Original PR description
This commit fixes the test "waitForTimeout does not trigger update if interaction is not ready yet", which could very rarely fail on runbot. **Origin of the problem** The test relies on precise…
This commit fixes the test "waitForTimeout does not trigger update if interaction is not ready yet", which could very rarely fail on runbot. **Origin of the problem** The test relies on precise timings, but the helper `advanceTime` could introduce a non-deterministic lag because, when called with default options, it awaits for an animation frame. If the lag happens to be too long, the second `verifySteps` is called too late and the test fails. **Fix** The helper `advanceTime` is now called with the option `animationFrame` set to false to avoid awaiting for an animation frame. For additional safety, the waiting time is also reduced. Two changes not directly related to this problem have been applied to improve the test: 1. an unnecessary `await` in `willStart` has been removed; 2. the `animationFrame` has been set to false also on the second `advanceTime` (a non-deterministic lag here can't fail the test, but still there is no reason to await for the animation frame). runbot-243515
This update adjusts Odoo's required lxml dependency so installations work correctly on newer Debian and Ubuntu releases. It helps keep deployments compatible with current operating system packages without changing business features or workflows.
Original PR description
Note: support for version 6+ of lxml has been merged in odoo/odoo@4b1797fccdf1447a8adb817148cc39bc322428a6 runbot-938365 Forward-Port-Of: odoo/odoo#266627
This update fixes a bug in the calculation of discounts and subtotals on invoices with both product line and global discounts. The change ensures accurate test coverage and prevents incorrect financial reporting. This improves the reliability of the invoicing process.
Original PR description
Purpose: A bug was found in the calculation of the `raw_discount_amount` and `raw_gross_total_excluded` when `_add_and_round_raw_gross_total_excluded_and_discount` is called on an invoice that contains both product line discounts and global discounts. Therefore, the discount and subtotal amounts for the test case testing both line and global discounts need to be corrected to ensure accurate test coverage. opw-5412446 Forward-Port-Of: odoo/enterprise#115855
This update fixes an issue where commission plans were incorrectly listed in a salesperson's 'Other Plans' section when their assignment periods didn't overlap. The system now accurately checks for overlapping assignment dates, ensuring that plans are only shown when a salesperson is actively assigned to them. This improves the accuracy of commission reporting.
Original PR description
Version - 18.0 Steps to reproduce: 1. Create a commission plan A with effective period 2025–2026 2. Assign salesperson to plan A from 01/01/2025 to 31/12/2025 3. Create another commission plan B with effective period 2026 4. Assign the same salesperson to plan B from 01/01/2026 to 31/12/2026 5. Open plan B and check the 'Other Plans' section in the salespeople tab Issue: Plans are shown in 'Other Plans' even when salesperson assignment periods do not overlap. System incorrectly relies on plan effective dates instead of salesperson-specific assignment dates Fix: A plan is now considered overlapping only if the salesperson assignment periods intersect. Non-overlapping plans are properly excluded from 'Other Plans'. Taskid-6055253 Forward-Port-Of: odoo/enterprise#112694
This update fixes a potential issue where users could inadvertently select inactive Intrastat codes when configuring products. The system now displays a warning message if an inactive code is chosen, ensuring data accuracy and preventing incorrect reporting. This improves data integrity and compliance.
Original PR description
Problem: When choosing an intrastat code on a product, all the codes are shown, even the ones that are expired or not yet active. Users can select an intrastat code that is not active. Steps to reproduce: 1. Check the intrastat code list and find a code with a start date in the future or an expiry date in the past 2. Note the code description 3. Open a product form view and try to set/change the intrastat code 4. Search for the code description noted in step 2 5. Note that the code is proposed while it should not be proposed Solution: When an intrastat code is selected, if the code is not active, a warning message is shown to the user. opw-6217915 Forward-Port-Of: odoo/enterprise#118417 Forward-Port-Of: odoo/enterprise#117884