Daily updates from Odoo
Wednesday, November 5, 2025
27 changes
2 changes
Enhancements to existing features
This update fixes a test that could fail in databases without sample data. The test no longer depends on accounting and stock settings that may be unavailable, which helps keep automated checks reliable in clean environments.
Original PR description
The test was failing in no-demo environments because it relied on accounting and stock configurations that were not present. When the test attempted to set property_valuation = 'real_time' on the product category, it triggered a ValidationError because the related stock accounts had not been properly set up for the test's transaction context. runbot-error-230417 Forward-Port-Of: odoo/enterprise#98155 Forward-Port-Of: odoo/enterprise#92292
The POS integration now sends each category’s parent information when syncing with Atlas, so category hierarchies are preserved more reliably. This helps keep menu structures aligned across systems while staying within UrbanPiper’s single sub-category limit.
Original PR description
In this commit: --- - The parent category of a POS category is now included during synchronization with the Atlas platform. - Added `parent_ref_id` in the category payload to maintain hierarchy. Note: The UrbanPiper platform only supports a single level of sub-categories. Extra: Added exception for `requests.exceptions.JSONDecodeError`. task-5169337 Forward-Port-Of: odoo/enterprise#97213
2 changes
Enhancements to existing features
This update creates a shared way to settle customer accounts in point of sale test tours and reuses it across existing scenarios. It helps keep customer selection and payment flow consistent when dialogs are closed and reopened, reducing the chance of test failures or missed customer data.
Original PR description
In this commit: --------------- - We have introduced a common function for settlement of customer accounts and replaced it in existing tours. task: 5028009 related PR: [95156](https://github.com/odoo/enterprise/pull/95156)
POS category synchronization now sends the parent category along with each category to Atlas, helping keep the category structure aligned between systems. This improves menu organization and reduces the chance of categories appearing in the wrong place after syncing. The update also handles a JSON parsing error more safely during requests.
Original PR description
In this commit: --- - The parent category of a POS category is now included during synchronization with the Atlas platform. - Added `parent_ref_id` in the category payload to maintain hierarchy. Note: The UrbanPiper platform only supports a single level of sub-categories. Extra: Added exception for `requests.exceptions.JSONDecodeError`. task-5169337 Forward-Port-Of: odoo/enterprise#97213
1 change
Enhancements to existing features
POS category updates now include their parent category when synchronized with Atlas, helping keep category hierarchies more accurate. This reduces mismatches between Odoo and the connected platform, and also improves handling of certain data response errors during sync.
Original PR description
In this commit: --- - The parent category of a POS category is now included during synchronization with the Atlas platform. - Added `parent_ref_id` in the category payload to maintain hierarchy. Note: The UrbanPiper platform only supports a single level of sub-categories. Extra: Added exception for `requests.exceptions.JSONDecodeError`. task-5169337 Forward-Port-Of: odoo/enterprise#97213
12 changes
Enhancements to existing features
Accounting users can now enter deferred start and end dates through a clearer date range control. When only one date is needed, the system automatically reuses the start date as the end date and no longer warns when both dates are the same, supporting accrual entries with less manual input.
Original PR description
* use the widget `daterange` on `deferred_start_date` and `deferred_end_date` * auto fill `deferred_end_date` when it is empty to `deferred_start_date` to avoid double encoding of the same value, and avoid raising an error * remove the warning `has_abnormal_deferred_dates` when the date is the same, this can be used to do an accrual entry. task-5207293 Forward-Port-Of: odoo/enterprise#98794
Payroll and HR users can now see wage-at-signature information directly in contract version lists and company car information directly in employee lists. This makes key compensation and benefits details easier to review without opening each individual record.
Original PR description
*: hr_contract_salary,l10n_be_hr_payroll_fleet Added the "Wage on signature" field to versions list view, and "Company Car" to employee list view. task-5231169 Forward-Port-Of: odoo/enterprise#98663
Attachments are now indexed in a way that makes their content easier for AI features to understand and retrieve. PDF content is stored more directly, and spreadsheet-like files are converted into clearer text so AI answers can better reflect the original information.
Original PR description
### Summary
This improvement refines how attachments are indexed to enhance retrieval quality and RAG comprehension.
### Key Changes
- **PDF Indexation:**
- Moved the PDF attachment indexation logic from the previous implementation to the main `_index` method in the `attachment_indexation` module [COM PR].
- PDFs are now indexed directly and their content is stored into `index_content` to be used directly.
- **Tabular File Indexation:**
- In alignment with the community PR that indexes tabular files as CSV text, this update introduces a new helper method:
- `_process_csv_text`: Converts CSV content into a **header–dictionary-style text**, improving semantic understanding for RAG.
---
**Task:** 5045336
Forward-Port-Of: odoo/enterprise#96596Payroll salary structures now require a journal to be set, improving accounting data consistency and reducing configuration errors. Belgian payroll calculations were also improved to account for time credit entries when calculating working schedule rates and prorated monthly wages.
Original PR description
`journal_id ` field on hr_payroll_account module modified to be required field and no need for required attribute on the UI attribute, and that's ensures the database consistency
This update adds automated checks for IoT-related functionality by testing it through the main IoT module. This helps catch issues earlier and improves confidence in connected device features without changing day-to-day user workflows.
Original PR description
As `iot_drivers` isn't installable, we need to test it from another module. We are then writing tests in the `iot` module. odoo/odoo#233728
Payroll salary structures must now always have an accounting journal selected. This helps prevent incomplete payroll accounting setup and improves data consistency between the payroll screens and the database.
Original PR description
journal_id field on hr_payroll_account module modified to be required field and no need for required attribute on the UI attribute, and that's ensures the database consistency task-5183966
Odoo will now warn developers when template placeholder tags include attributes that are ignored during rendering. This helps clean up views and catch common template mistakes earlier, reducing the risk of hidden display or logic issues in customer-facing pages and emails.
Original PR description
Adds a warning for attributes on `<t>` tags that are not consumed during QWeb template rendering. This change helps to: - Clean up existing code by identifying unused attributes (e.g., unnecessary class attributes). - Fix common errors where developers mistakenly used standard HTML attributes instead of QWeb directives (e.g., `if` instead of `t-if`). The `name` attribute is explicitly added to the list of allowed attributes that will not trigger the warning, as it is heavily used across Odoo views for inheritance. The inheritance branding attributes (e.g., `data-oe-model`) are also exempted.
Point of Sale now better supports turning individual order lines into a combo product in one action. This keeps preparation displays aligned with the updated order structure, helping kitchen and service teams avoid confusion when combos are created.
Original PR description
This commit adapts the preparation display logic to handle the conversion of lines into a combo product. Task-id: 5180846
This update adds automated checks for the IoT long-polling service, which helps ensure connection-related actions and listener handling keep working as expected. It reduces the risk of future changes disrupting IoT device communication behavior.
Original PR description
This commit adds unit tests for the following functions in the longpolling service: - `action` - `addListener` - `removeListener`
ESG carbon emission values now keep more decimal precision, improving the accuracy of emissions reporting and analytics. Users can also open emission records in a full form view from the list, making review and edits easier.
Original PR description
- **Add more digits to carbon emission values + small imp** This commit adds more digits to ESG fields showing emission values to have more precision. This commit also moves a demo data in real data and update some views. - **Add form view in Emissions to define action** Before this commit, the user can only edit in multi_edit the emitted emissions and cannot see the form view of those records because the action does not have the form. This commit adds the form view in that action to make sure the user can open that view when he clicks on a record in the list view. Task [link](https://www.odoo.com/odoo/project.task/5219931) task-5219931
The Estonia VAT report now processes large export data in batches instead of repeating the same calculations line by line. This prevents timeouts on very large monthly datasets and makes XML export more reliable for businesses with high transaction volumes.
Original PR description
Behavior before: When exporting the VAT report to XML, each newly added line triggered a fresh _compute_expression_totals_for_each_column_group call. With large volumes of journal items, this…
Behavior before: When exporting the VAT report to XML, each newly added line triggered a fresh _compute_expression_totals_for_each_column_group call. With large volumes of journal items, this resulted in excessive repeated queries and, for big datasets, timeout errors. Behavior after: Introduced _custom_unfold_all_batch_data_generator, which batches the computation of expression totals for all lines. Now, journal items are resolved in bulk and mapped back to their respective moves, significantly reducing redundant queries. The VAT XML export completes successfully, even on months with very large datasets. Root cause: The Estonia VAT report was missing a batch unfold method (_custom_unfold_all_batch_data_generator). Without it, the system executed totals computation for each line individually instead of in batch, causing major performance degradation. Benchmark: | Period size (journal items) | Before patch | After patch | |----------------------------------------|----------------------|--------------------| | ~15k | 7s | 5s | | ~200k+ | Timeout error| 21s | opw-5046077 Forward-Port-Of: odoo/enterprise#97660 Forward-Port-Of: odoo/enterprise#95047
The Pakistan payroll localization has been updated with the latest 2026 tax bracket values. This helps businesses calculate employee payroll taxes according to the new rules and reduces the risk of incorrect payslips.
Original PR description
Tax brackets for pakistan localization has been updated to include the new values for 2026. Forward-Port-Of: odoo/enterprise#98636 Forward-Port-Of: odoo/enterprise#98345
6 changes
Enhancements to existing features
This change updates variable names in the expense posting wizard so it is clearer when operations are running with elevated access rights. It does not change visible user behavior, but it helps reduce the risk of future mistakes that could affect data handling or permissions.
Original PR description
Rename variables that are not sudo-explicit to reduce future potential security oversights
The Windows IoT Box installer has been updated so new installations follow Odoo 19.0 by default. This helps keep newly installed devices aligned with the current release without extra manual setup.
Original PR description
Windows IoT Boxes are now following 19.0 by default after install.
This change adds a default set of attendance rules so employee attendances can be created even when no ruleset was previously defined. It includes rules for overtime and non-working days, helping avoid setup issues and ensuring attendance records work more smoothly.
Original PR description
## PR Purpose It's impossible to create an attendance for an employee without a ruleset. To solve this problem, this PR adds a default ruleset with 2 rules: one for overtime, and another one for non working days. Those data are the same as the data added in the upgrade/migrations/hr_attendance/saas~18.5.2.0 post-migrate script. [Task#5082628](https://www.odoo.com/odoo/all-tasks/5082628) [Community#228352](https://github.com/odoo/odoo/pull/228352) [Upgrade#8684](https://github.com/odoo/upgrade/pull/8684)
This change adds a default overtime ruleset for employee attendance records. It ensures attendances can be created even when no custom ruleset has been configured, preventing a setup issue and making the feature work out of the box.
Original PR description
## PR Purpose It's impossible to create an attendance for an employee without a ruleset. To solve this problem, this PR adds a default ruleset with 2 rules: one for overtime, and another one for non working days. Those data are the same as the data added in the upgrade/migrations/hr_attendance/saas~18.5.2.0 post-migrate script. [Task#5082628](https://www.odoo.com/odoo/all-tasks/5082628) [Enterprise#95421](https://github.com/odoo/enterprise/pull/95421) [Upgrade#8684](https://github.com/odoo/upgrade/pull/8684)
When POS categories are synced to Atlas, their parent category is now included as part of the transfer. This helps preserve the category structure more accurately across systems, so menu organization stays consistent.
Original PR description
In this commit: --- - The parent category of a POS category is now included during synchronization with the Atlas platform. - Added `parent_ref_id` in the category payload to maintain hierarchy. Note: The UrbanPiper platform only supports a single level of sub-categories. Extra: Added exception for `requests.exceptions.JSONDecodeError`. task-5169337 Forward-Port-Of: odoo/enterprise#97213
This change adds a queue for blackbox messages so the Point of Sale can send certain requests without waiting for an immediate response. It improves speed and reliability for operations like pro forma sales, helping staff continue working more smoothly even when the blackbox is busy.
Original PR description
In this commit, we introduce a queuing mechanism for blackbox messages to make all interactions with the blackbox faster and more reliable. This is particularly useful for messages that do not require the response from the blackbox to continue the workflow such as pro forma sales messages. Forward-Port-Of: odoo/enterprise#97293 Forward-Port-Of: odoo/enterprise#90747
3 changes
Enhancements to existing features
This change makes the quote builder test suite more resilient when other installed modules rename sales order status labels. It helps prevent unrelated test failures and keeps automated checks reliable across different setups.
Original PR description
### Description of the issue/feature this PR addresses: This ensures that `sale_pdf_quote_builder` tests pass even if a third party module that renames `sale.order` `state` selections has been installed. ### Current behavior before PR: Tests fail. ### Desired behavior after PR is merged: Tests pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
POS categories now send their parent category information when syncing with Atlas. This helps preserve the category structure more accurately across systems, improving consistency for menu and product organization.
Original PR description
In this commit: --- - The parent category of a POS category is now included during synchronization with the Atlas platform. - Added `parent_ref_id` in the category payload to maintain hierarchy. Note: The UrbanPiper platform only supports a single level of sub-categories. task-5169337
This update makes an error message more explicit when Odoo blocks certain files because they come from an uninstalled module. The goal is to help support teams and users understand the cause faster, reducing time spent investigating the issue.
Original PR description
While working on a support ticket, I was faced with this exception handling: https://github.com/odoo/odoo/blob/49061347c181b1a451435bc363bb9508db8b6fab/odoo/addons/base/models/ir_asset.py#L344-L346 It might be nitpicky, but given the if condition, the exception error text could be more explicit about the fact that it's raised because the files in question being from an uninstalled addon/module. This might fast track troubleshooting without having to dive into the source code to understand why the error is being raised. There is always the possibility that I might be missing some context or other scenarios where this error could be raised. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#179889
1 change
Enhancements to existing features
For Swiss companies, payment and direct debit files now automatically use the latest legally required Pain version. If an older version is detected, users are guided to update it so payments continue to work correctly and stay compliant with local banking rules.
Original PR description
This commit enforce forces new Pain version for CH companies. A RedirectWarning is raised for users on old version in Credit Transfer and Direct Debits. The users are redirected to the bank journal to update the Pain versions. The new versions were already implemented but now they are enforced in CH companies due to legal requirements. task-5149417