Daily updates from Odoo
Wednesday, August 12, 2026
20 changes · master
Enhancements to existing features
The Peru localization tests were updated to match revised default accounts introduced for smoother onboarding. This helps keep automated checks aligned with the current setup and reduces false failures during validation.
Original PR description
Purpose: Default accounts were updated for an improved onboarding process, which caused some tests to be outdated. Update the tests to align with the account changes. task-6221374
This update removes an unused setup step in the AI chat area. It simplifies the underlying code without changing how users interact with the product.
Original PR description
This commit removes a `useSubEnv` that defines `expandedFromAiChat` which is never used.
Resolved issues and error corrections
Opening Bank Matching from a working file now works even when no bank journal is selected. This prevents an error that interrupted users handling unreconciled bank statement lines and returns.
Original PR description
When accessing the reconciliation widget from the working file check, there is no journal to be selected, hence no journal in the context. This was tracebacking since we were trying to send a read query to the server with an undefined id. To reproduce: * create a bank statement line without reconciling * set up the return on the misc journal * open the return, then "Bank Matching" Forward-Port-Of: odoo/enterprise#127421
This fixes an internal test so it correctly accounts for archived call activity records before deleting an activity type. The change helps prevent false test failures and keeps quality checks stable without affecting day-to-day user functionality.
Original PR description
test_create_call_activity attempts to delete any 'phonecall' activity types. This is so it can test the functionality of create_call_activity when there is no existing 'phonecall' activity type. However, demo data inside voip creates an archived activity with the type mail_activity_data_call. https://github.com/odoo/enterprise/blob/cc4456ac16aeee59830db08505a27877e149f3a7/voip/demo/voip_call.xml#L4-L13 When searching for phonecall_activities the test only gets active activities. We need to alter this to fetch all. Otherwise, the test will then try to delete the activity type when there are still records using the type. opw-6443475 runbot-242850 Forward-Port-Of: odoo/enterprise#126540
The Timesheets Assistant now ignores the current user's own email address when matching Gmail emails to customers. This prevents irrelevant task or project suggestions when the user's own contact is listed as a customer.
Original PR description
Before this commit, the Timesheets Assistant resolved every address found in a read or composed email to a partner, then matched the event to a task or project having that partner as its customer. The current user is a recipient of every email they receive, so their own address is present in the "To" or "Cc" fields of every `reading_email` event. As a result, any task whose customer was the current user could be suggested for those emails. This commit excludes the current user's partner from that lookup. task-6438374 Forward-Port-Of: odoo/enterprise#127422 Forward-Port-Of: odoo/enterprise#126448
Products created through Barcode Lookup now correctly show the image returned by the service. This helps users verify newly created products visually and avoids manual image updates after scanning or entering barcodes.
Original PR description
Issue before this commit: ========================= When creating a product by adding a barcode using the Barcode Lookup service, the product image was fetched properly but was not displayed in the…
Issue before this commit: ========================= When creating a product by adding a barcode using the Barcode Lookup service, the product image was fetched properly but was not displayed in the UI. Steps to Reproduce: ========================= - Install the stock module. - Enable the Stock Barcode Database. - Add a valid API key for the Barcode Database. - Create a product by adding a barcode available in the Barcode Lookup API. - Notice that the product image is not displayed. Cause of the issue: ========================= This issue was introduced by this [PR](https://github.com/odoo/odoo/pull/244421), which improved the behaviour of **fields.Binary**. As a result, the image returned by the Barcode Lookup API was not converted to the expected binary format, preventing it from being displayed in the UI. With This Commit: ========================= With this commit, convert the fetched image to the expected binary format before assigning it to the product, ensuring that it is displayed correctly in the UI. opw-6434478 Forward-Port-Of: odoo/enterprise#126314
This update fixes a payroll-related issue by removing outdated or unnecessary behavior covered by the payroll run test flow. It helps keep payroll processes reliable and reduces the chance of confusion from obsolete steps.
Original PR description
task-6455499
This fix ensures vendor price list entries always include a unit of measure, preventing incomplete purchasing data. It helps avoid downstream errors or confusion when products are planned, ordered, or priced using supplier information.
Several older icon references were replaced with their supported Material Symbols equivalents across affected apps. This prevents icons from disappearing when the legacy compatibility layer is removed and keeps the product aligned with current quality checks.
Original PR description
__Problem__ A few `fa`/`fa-*` icons survived the migration to Material Symbols. They still render today thanks to the compatibility mapping between the two sets, but will stop doing so once it is removed. They are also caught by the new `test_lint` icons check. __Quick fix__ Replace them by their Material Symbols equivalent, set through the `data-icon` attribute, the sizing and filling classes being kept through their `oi` counterparts (`fa-lg` → `oi-lg`, `fa-fw` → `oi-fw`, ...). Community PR: odoo/odoo#279361
Preparation tickets in self-ordering now follow the language set for the default self-order user. This helps kitchen or preparation staff receive tickets in the expected language, reducing confusion in multilingual setups.
Original PR description
Before this commit the preparation ticket wasn't using the lang of the default pos_self_order user. Now it will use it. Forward-Port-Of: odoo/enterprise#127113 Forward-Port-Of: odoo/enterprise#126903
Creating an employee in Belgian payroll with a subtype but no active contract no longer triggers an error. This prevents interruptions during employee setup and makes public holiday allocation handling more reliable.
Original PR description
Step to reproduce: -> Go to employee -> Create an employee with a sub type but without a running contract You will have a traceback Reason: We will take the minimum start date between all versions but version without contract date start are not supported. task-6455669
Payroll users can now send several payslips to off-cycle processing at once without encountering an error. This makes bulk payroll corrections smoother and avoids interruptions when working from the payslip list.
Original PR description
Steps to reproduce: - Open payslip list view - Select multiple payslips - Select "Send to Off-cycle" action Issue: A traceback occurs with ValueError: Expected singleton when the action is executed on multiple payslips. Reason: - 'action_move_to_off_cycle()' assumes a singleton and directly accesses self.version_id.id - When multiple payslips are selected from list view then self contains several payslips and self.version_id returns multiple versions, causing the singleton error. Solution: - Iterate over each payslip individually when processing the off-cycle action and use the corresponding version for each record, allowing the action to work correctly in multi-record mode task-6320059 Forward-Port-Of: odoo/enterprise#125284
A new test verifies that India GSTR-1 reporting selects the correct tax rate group when GST and CESS taxes are combined. This helps reduce the risk of incorrect tax reporting for Indian businesses using these tax combinations.
Original PR description
This PR adds a test case to ensure that the correct tax rate group is selected in the GSTR-1 report when a combination of GST and CESS taxes is used. Community PR - https://github.com/odoo/odoo/pull/280571 Forward-Port-Of: odoo/enterprise#126770
Code cleanup and technical improvements
The field service attendance menu was updated to use the newer OWL3 approach for managing location tracking when employees check in or out. This keeps the feature compatible with the latest framework while preserving the existing user experience.
Original PR description
Replaced `useLayoutEffect` with OWL3 `useEffect` because `useLayoutEffect` is deprecated in OWL3. The effect reacts to `this.state.checkedIn` to start/stop the geolocation watch. OWL3 `useEffect` auto-tracks reactive values read inside the callback, so the plain `this.state.checkedIn` access subscribes automatically — no deps array needed. The code refactored is functionnaly tested, see https://runbot.odoo.com/runbot/batch/2596694/build/114854534
This update renames an internal frontend helper to better match its purpose, without changing how the affected business features work. It improves code clarity and consistency across several Odoo apps, helping future maintenance while keeping user-facing behavior unchanged.
Original PR description
This commit replaces the `plugin` imports by `usePlugin` which is the same function but with a correct hook name.
This update modernizes part of the timesheet timer interface to stay compatible with the next version of Odoo's web framework. It also corrects a small internal issue so the timer form continues to apply configured minimums, rounding, and basic actions reliably.
Original PR description
Replaced `useLayoutEffect` with `useEffect` because `useLayoutEffect` is deprecated in OWL3. `descriptionFieldRef` is already a `signal.ref()` field (bound in the template via `t-ref`), so…
Replaced `useLayoutEffect` with `useEffect` because `useLayoutEffect` is deprecated in OWL3. `descriptionFieldRef` is already a `signal.ref()` field (bound in the template via `t-ref`), so `useEffect` is the idiomatic choice: it auto-tracks the signal and re-runs whenever the element enters the DOM. The `!el` guard handles the eager pre-mount call (the ref is `null` before the node appears). This also fixes a latent bug: the original `if (this.descriptionFieldRef)` tested the always-truthy signal function rather than its value. The useLayoutEffect refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @timesheet_grid/timesheet_systray/Timer applies configured minimum - @timesheet_grid/timesheet_systray/Timer applies configured rounding - @timesheet_grid/timesheet_systray/Basic systray actions Those tests were run against all three states of the code: - Passed with previous useLayoutEffect. - Failed with previous useLayoutEffect commented. - Passed with our OWL3 replacement. see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2681606/build/120351199 The timer subclass `TimesheetTimerInlineForm` was also updated: its `onPatched` hook read `this.descriptionFieldRef.el`, which broke after the base t-ref migration converted the field from `useRef` to `signal.ref()` (no `.el` property). Fixed by calling `this.descriptionFieldRef()` instead — no `?.` needed since the ref is always set when `onPatched` fires.
This update removes use of an outdated internal rendering method in spreadsheet-related tests and components. It helps keep the Enterprise spreadsheet experience compatible with the next version of Odoo’s web framework without changing business functionality.
Original PR description
- community: https://github.com/odoo/odoo/pull/281942 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies internal accounting screen code by removing unused or unnecessary shared settings. It should make the feature easier to maintain without changing how users interact with accounting workflows.
Original PR description
This commit removes two `useSubEnv`. The function `skipKanbanRestoreNeeded` given to the env was never used. The function `setPopout` given in the env was used by a direct child component. This function is now given by props instead of by env.
This update keeps several Point of Sale related features aligned with the latest underlying interface used by Odoo's web components. It is an internal cleanup with no expected change to day-to-day POS workflows, helping future maintenance and compatibility.
Original PR description
In this commit : - The Owl props API has been renamed to useProps. - Updates the affected POS-related modules accordingly by renaming imports and replacing `props(...)` with `useProps(...)`. Task [link](https://www.odoo.com/odoo/project.task/6403054) task-6403054 Community PR: https://github.com/odoo/odoo/pull/277793
The AI chat testing setup now builds its data in the same way as the live system. This reduces the risk of tests passing with unrealistic data and helps future AI chat changes be validated more reliably.
Original PR description
Before this commit, launching an AI chat hands the store every column of the agent, the composer, the session, the channel and its members, down to `create_uid` and `message_follower_ids`, and one hand-picked `suggestedAiChannel` in place of the fields `_store_channel_fields` sends. The problem is that the tests run on a payload the server never sends. This happens because the mock spreads the raw records into the payload, where python builds it with a `Store`. This commit builds it with a `Store` as well, so the mock sends what the server sends.