Thursday, August 14, 2025
18 changes · 18.0
Resolved issues and error corrections
This fixes an automated live chat chatbot check that could fail because it moved on before changes were fully saved. The update waits for saving to finish, helping keep quality checks stable without changing customer-facing behavior.
Original PR description
This commit fixes the "change_chatbot_step_type" tour which fails because it doesn't wait for the form to be properly saved. This commit fixes the issue by waiting until the save button disappears. fixes runbot-229962 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 change removes an unnecessary warning caused by the use of an outdated internal method in inventory valuation logic. It helps keep system logs cleaner without changing day-to-day user workflows.
Original PR description
Before this commit a deprecated method is used and create a useless warning. 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 change updates HR tests so they run correctly in databases without demo data. It helps prevent false test failures and supports more reliable validation before releases.
Original PR description
Before this commit the test `test_webjson_employees` was failing in no demo builds as the json route only works in demo databases or when explicitly set. See https://github.com/odoo/odoo/pull/182196 This commit enables the system parameter, so that the test can be run as intended in no demo databases. Runbot Error: https://runbot.odoo.com/odoo/error/162907 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change adjusts an automated test for the HTML editor toolbar to reduce random failures. It helps keep development and release validation more stable without changing the product experience for users.
Original PR description
This is a deparate attempt to fix this test that keeps failing non-deterministically. Previous attempts were [1] and [2]. [1]: https://github.com/odoo/odoo/pull/222583 [2]: https://github.com/odoo/odoo/pull/222828
The accounting dashboard now excludes draft invoices from the checked items view, so users only see invoices that have been formally posted. This helps finance teams avoid confusing draft work with confirmed accounting records.
Original PR description
state = posted has been added in 18.0 but removed in https://github.com/odoo/odoo/commit/68fa35faa332615a2862935a82f778e38a2a3041#diff-6e3139ca3c848ecd9159cbee86a94aa51a3c7e0d2b62bbccfac1023c18a1edf5L586 initial opw-4349684
This fix allows Odoo's website and report templates to work correctly when running on newer Python versions that generate longer internal expressions. It prevents valid templates from failing due to a technical compatibility limit, helping maintain reliable system behavior during Python upgrades.
Original PR description
Not entirely clear why it was apparently excluded, but apparently in 3.13 some qweb expressions require the use of `EXTENDED_ARG`. Specifically [1] makes the expression long enough that it needs at least one "long jump" which then requires an `EXTENDED_ARGUMENT`, here's the sizes for the expression in question in various Python versions: - 3.10: 102 bytes - 3.11: 188 bytes - 3.12: 214 bytes - 3.13: 272 bytes Thus it makes sense at at some point the earliest jumps in the expression (and `and`/`or` *are* jumps, since they're short-circuiting) would become "long". These increases in size can be due to a multitude of factors e.g. changes in inline cache details (3.11 and above), jumps becoming strictly typed and requiring `TO_BOOL` instructions (3.13), ... [1]: https://github.com/odoo/odoo/commit/cc68a012649f9eb331265deba3197abaf1700d97#diff-92dda03d204cc6ea8b7aacd0c07939843c83b1841f4a3049903844777d83c07bL154-R223 Forward-Port-Of: odoo/odoo#222939
This fix ensures Italian EDI withholding tax descriptions are sent as plain text instead of including hidden formatting tags. It prevents incorrect text from appearing in generated XML documents and helps keep electronic tax reporting accurate.
Original PR description
The description field of the tax record was changed from char to html. This can break the dit functionality, as it now inserts the html tags into the description field. This PR aims to format the field as plaintext before rendering the XML to avoid such isses. opw-4985645
Portal users can now view purchase orders that include products without images. The page skips missing product images instead of failing, preventing an error that blocked access to the purchase order view.
Original PR description
In the purchase order portal template (`purchase.purchase_order_portal_content`), `image_data_uri(line.product_id.image_128)` was called without checking if the product had an image, leading to a rendering error when `image_128` is False. Steps to reproduce the bug: - create a product without an image - create a purchase order with that product - partner: portal user (e.g joel) - connect as portal user - go to the purchase order - the portal view will raise an error because it tries to render an image Solution: Added a conditional check to only render the `<img>` tag if the product image exists, preventing template evaluation errors. opw-5013230
This fix ensures a manufacturing test setup has the needed product variant permissions when demo data is not installed. It reduces the risk of false test failures and helps keep manufacturing-related updates reliable.
Original PR description
### Issue: The setUpClass of the `TestMultistepManufacturingWarehouse` test class fails without demo data since the `product_id` field is invisible in the bom view when the `product.group_product_variant` and is not automatic without demo data's: https://github.com/odoo/odoo/blob/7391082cfa42afdc62d17f1dac5cad97cf177e81/addons/product/data/product_demo.xml#L4-L7 https://github.com/odoo/odoo/blob/7391082cfa42afdc62d17f1dac5cad97cf177e81/addons/mrp/views/mrp_bom_views.xml#L63 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update makes an internal automated test for bus notifications more reliable by ensuring the test setup is fully ready before notifications are triggered. This helps prevent random test failures and supports smoother validation of future changes, with no expected impact on end users.
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 main thread doesn't wait for the selector to be register before triggering the postcommit hook. This commit ensures the test waits for the selector to register the database connection before going further. runbot-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 Forward-Port-Of: odoo/odoo#222810
This fix ensures simulated time changes are only applied to the intended active database during testing. It prevents unrelated databases, such as logging databases, from being unintentionally affected and reduces the risk of confusing test side effects.
Original PR description
Filtering the postgres database was not enough, the log_db was also affected. Since only the order was impacted, this was creating strange side effect in databases like the log-db where it was only modified when the function exists. Checking the -d is more reliable and safer to avoid any side effect when testing with faketime. Forward-Port-Of: odoo/odoo#222805
Belgian and French reports now compare totals in a way that accounts for tiny rounding differences. This prevents reports from incorrectly flagging mismatches when the displayed amounts are effectively the same.
Original PR description
Currently, the code was checking for a strict equality between two sums. However, it may happen that there are many decimals that aren't displayed on the UI, hence the strict equality check fails. For instance `30201.63 != 30201.629999999997`. Instead, we now use the `float_compare` which takes care of rounding issues. opw-5000147
The Belgian payroll departure wizards now only show employees from the company the user is currently working in. This prevents confusion and accidental selection of employees from other companies in multi-company environments.
Original PR description
Added a domain to employees to limit the employee field in the departurre wizard to the logged in company **Steps to reproduce:** - Log into a Blgian Company - Access the Departure wizard through Payroll/Reporting or through the cog actions in an employee. **Issue:** Previously, when using the departure wizard, the employees shown were all the employees across different companies, when in reality it should be employees of the logged in company only **Fix:** Added employee domain so that it allows employees from the current logged in company only Task: 4965719 Forward-Port-Of: odoo/enterprise#90813
A payroll accounting test was missing a required dependency for Colorado tax calculations. Adding this dependency ensures the Colorado test case can run reliably and helps prevent false failures in payroll validation.
Original PR description
Issue: - Test case fails for the U.S. state of Colorado because the COINCOMETAX salary rule is defined in the l10n_us_hr_payroll_state_calculation module, but the test module test_l10n_us_hr_payroll_account does not depend on it. Fix: - Add a dependency on l10n_us_hr_payroll_state_calculation in the test_l10n_us_hr_payroll_account module. task-4949218
Upgrading the Colombian DIAN localization no longer removes the invoice and credit note email templates used for DIAN communications. This helps businesses keep their configured sending templates intact and avoids disruption after module updates.
Original PR description
**Steps to reproduce:** - Install l10n_co_dian => "Invoice (DIAN): Sending" and "Credit Note (DIAN): Sending" email templates are created - Upgrade l10n_co_dian **Issue:** "Invoice (DIAN): Sending" and "Credit Note (DIAN): Sending" are deleted. **Cause:** Email templates are reset during a module upgrade. These DIAN email templates are not defined in a XML, but created by a python function. This function is only called during installation. **Solution:** Set the "nopupdate" to True for these email templates to prevent them to be reset during the module upgrade. opw-4964347
Payslips now show the right weekly working hours when an employee uses a flexible-hours schedule. This prevents incorrect schedule information from appearing on payroll documents and improves clarity for employees and payroll teams.
Original PR description
> note: this PR should only be FW'd till `saas~18.4`, after that for `saas~18.5` (i.e., `master`), [this PR](https://github.com/odoo/enterprise/pull/85557) should be merged. ### Steps to reproduce: -…
> note: this PR should only be FW'd till `saas~18.4`, after that for `saas~18.5` (i.e., `master`), [this PR](https://github.com/odoo/enterprise/pull/85557) should be merged. ### Steps to reproduce: - Enable "Flexible Hours" in a working schedule. - Assign the schedule to an employee. - Generate a payslip for the employee. - Observe that the "Working Schedule" section always shows `hours_per_week` from the total hours calculated from the Work Schedule defined before turning on "Flexible Hours" ### Description: - the payslip incorrectly displayed the weekly working hours from the Work Schedule regardless of whether the employee's schedule used flexible hours. ### Cause: - the report template did not check for the `flexible_hours` flag and always rendered the value from `contract_id.hours_per_week`. ### Fix: - added a condition in the payslip template to check if `flexible_hours` is enabled. - if true, it displays `full_time_required_hours` from the working schedule instead of the contract's `hours_per_week`. task: 4719717
This fixes a conversion issue when portal users upload Excel files into shared document folders. Portal users are now kept at view-only access on converted spreadsheets, preventing errors and preserving the intended sharing restrictions.
Original PR description
Let's say a Document Folder is shared with a portal user with 'edit' access. The portal user shares a .xlsx file to the folder, and an internal user later try to convert the file to odoo spreadsheet. During the conversion, the portal user has 'edit' role on the folder, which is copied to the documents.access records of the converted sheet. Since Odoo prevents Spreadsheets from being shared in edit mode to portal users, _check_spreadsheet() raises a Validation Error. <img width="544" height="188" alt="image" src="https://github.com/user-attachments/assets/48426ff8-0cd9-4fb0-8e52-31099e586064" /> To resolve this issue, we force portal users to have `view` role on Spreadsheets during the XLSX to Spreadsheet conversion. opw-4753670
Code cleanup and technical improvements
The accounting tax calculation code was reorganized so the tax total rounding step is isolated in its own method. This makes it easier for localization or custom accounting modules to adjust rounding behavior without copying larger pieces of core logic, reducing maintenance effort and upgrade risk.
Original PR description
Move the code block responsible for rounding `total_per_tax` aggregates inside `_round_base_lines_tax_details` into a dedicated helper method `_round_total_per_tax`. This refactor allows custom modules to override only the rounding logic without reimplementing the entire `_round_base_lines_tax_details` method, improving maintainability. Related: https://github.com/OCA/l10n-japan/pull/70 @qrtl QT5088 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr