Daily updates from Odoo
Saturday, July 11, 2026
16 changes · master
Enhancements to existing features
Databases can now display the status of the Know Your Client procedure as a dedicated KPI. This helps business users quickly understand customer verification progress directly from database information.
Original PR description
Add a new type kyc_status to display the status of the Know Your Client procedure in the databases. Task-id: [6348952](https://www.odoo.com/odoo/project.task/6348952) Forward-Port-Of: odoo/enterprise#122510
Resolved issues and error corrections
Fixes an error that could interrupt Belgian tax return setup when validating sales lists involving Northern Ireland customer rules. This helps accounting teams generate returns reliably without unexpected system failures.
Original PR description
…mers Steps to reproduce: - Setup a Belgian company - Make a sale to a French customer in June for example - Setup the tax returns (so that June returns are generated) -> Traceback raised from the check on sales done to customers from North Ireland. Forward-Port-Of: odoo/enterprise#123556
Fixed the warning shown when one employee or resource does not have the required role for a shift. The message now uses correct singular grammar, making scheduling alerts clearer and more professional.
Original PR description
Currently, when a (or multiple) resource(s) do not have the role for a particular shift, a warning is displayed. However, in the case where only one resource does not have the correct role, the following warning was displayed, "resource_name don't have the required role for this shift", instead of "doesn't". task-6153932 Forward-Port-Of: odoo/enterprise#120899
New planning shifts now use the user's timezone when setting default working hours. This keeps the default shift time at 8 AM to 4 PM locally, avoiding unintended time offsets for users in different countries.
Original PR description
Before: When creating a new shift, we set 8 AM - 4 PM as the default hours in UTC. With the timezone in Belgium, this becomes 10 AM - 6 PM. After: Change the timezone of the new shift to match the user's timezone. This will make the hours always be from 8 to 4 (working hours) --- task-6285596 Forward-Port-Of: odoo/enterprise#120062
Shop floor users can now see employee profile photos instead of generic placeholders when viewing or changing operators. This makes it easier for manufacturing teams to identify colleagues and reduces confusion during work order operations.
Original PR description
Currently when a shopfloor operator modifies the operator, operator images are not visible and only place holder images are visible. ## Steps to produce: - Install Manufacturing with demo data -…
Currently when a shopfloor operator modifies the operator, operator images are not visible and only place holder images are visible. ## Steps to produce: - Install Manufacturing with demo data - Login as Marc Demo - Open shopfloor ## Observed Behavior: Operator is unable to see their own profile picture and when you press the Edit Operator the operator is not able to see their as well as other operators images as well. ## Root cause: This issue occurs because by default an operator's user does not have access right for `Employees` in Human Resources section as they are not an HR officer nor an administrator. So when the user tries to access the image url that is meant for users with those access rights (HR officer / Administrator) at [1] and at [2]. The system returns a placeholder image instead of the employee image since the operator does not have access to hr employee model but does have access to hr employee public as per this [commit](https://github.com/odoo/odoo/commit/c9ca3761464413327d2beb697553a3ccd7eef4d1) [1]- https://github.com/odoo/enterprise/blob/5fe2fb44f4c8a938390343f7cdc90674cbf09391/mrp_workorder/static/src/mrp_display/dialog/mrp_employee_dialog.js#L16 [2]- https://github.com/odoo/enterprise/blob/5fe2fb44f4c8a938390343f7cdc90674cbf09391/mrp_workorder/static/src/mrp_display/employees_panel.xml#L9-L10 ## Solution: Allowing operators to see images can be done by modifying the links to use the public model instead of the private model. This will allow operators see other operators based on images and should improve user experience. | Before | |--------| | <img width="1865" height="844" alt="image" src="https://github.com/user-attachments/assets/c28f4209-0a60-486a-bfec-2a4db39cd946" /> | | <img width="995" height="899" alt="image" src="https://github.com/user-attachments/assets/7541edd9-6cc9-42d1-b5c5-39e0740d9a93" /> | | After | |--------| | <img width="1881" height="903" alt="image" src="https://github.com/user-attachments/assets/df3f8357-5cc2-4688-83dd-9a009fd56957" /> | | <img width="1221" height="862" alt="image" src="https://github.com/user-attachments/assets/c9d72b07-e1ad-43e4-85f5-00d8f1db9095" /> | opw-6321989 Forward-Port-Of: odoo/enterprise#123540 Forward-Port-Of: odoo/enterprise#121751
Belgian payroll warnings now apply the correct scope so users do not encounter access errors for items outside Belgium payroll. This helps payroll teams use the app more reliably without being blocked by unrelated warnings.
Original PR description
Some payroll warnings in BE were missing correct filtering to avoid access errors on things outside of the BE scope. Forward-Port-Of: odoo/enterprise#123769 Forward-Port-Of: odoo/enterprise#123554
Opening access rights for Sign templates no longer triggers an error when group permissions are displayed. The change prevents the system from requesting unsupported display data for user groups, making template access management work reliably.
Original PR description
Version: - saas-19.4 Steps To Reproduce: - Go to Configuration -> Settings. - Enable 'Manage Template Access' option. - Open any Sign template. - Click the gear icon and then click on 'Access Rights'. Issue: - Opening the template access rights dialog caused an RPC error. Cause: - The Many2Many tags configuration added the `color` field for all related models, including `res.groups`, which does not have 'color' field. Solution: - Skip adding the `color` field for the `group_ids` relation so only supported models request it. task-6348673 Forward-Port-Of: odoo/enterprise#122421
Fixes an issue where using the mute button during VoIP demo calls could cause the call screen to crash. Demo calls now handle microphone muting more realistically, improving reliability for users evaluating or testing the calling experience.
Original PR description
Since commit [1], clicking the "mute" button during demo calls crashed. This is because the mocked SIP.js object now includes a `peerConnection` which was the guard against actually toggling microphone input. Now we do mock microphone toggling as well, preventing the crash, and making demo calls more realistic at the same time too. [1]: https://github.com/odoo/enterprise/commit/351dac8a19b581bc0892f18c3048228471c28238 Related to task-6361911 Forward-Port-Of: odoo/enterprise#123072
Donation products created by the website subscription app will no longer automatically include the company's default sales tax. This prevents donors from being charged tax on donations, aligning the checkout amount with the intended donation value.
Original PR description
**Steps to reproduce:** 1. Install `website_sale_subscription` 2. Open the Products page, search for Donation and open the products **Issue:** A default Sales Tax is applied on the donation products. If a visitor donates money, they will be charged the sales tax. **Expected behavior:** Donation products should not include tax when web visitors donate money. Tax responsibility does not fall on the donors. **Why this happens:** When a `product.template`record is created without an explicit `taxes_id`, the field falls back to the default, which resolves to `company.account_sale_tax_id`. opw-6367188 Forward-Port-Of: odoo/enterprise#123771
This fix prevents an automated tax return validation test from failing when PDF generation overlaps with browser activity. It improves the reliability of quality checks without changing the tax return experience for users.
Original PR description
Validating a return renders the report to a PDF via wkhtmltopdf inside the `action_validate` request. During the render, the HttpCase test cursor is reserved for wkhtmltopdf, so any browser RPC that overlaps the render window is rejected, resulting in ConnectionLostError. Patching the `_run_wkhtmltopdf` so no real rendering runs during the tour. runbot-243444 Forward-Port-Of: odoo/enterprise#123809 Forward-Port-Of: odoo/enterprise#123720
This fixes an automated Knowledge app test that broke after a menu was changed from a dropdown button to a select menu. It also makes the test more reliable by addressing timing issues, helping prevent false failures in quality checks.
Original PR description
The dropdown for property definition type was replaced with a select menu, leading to an error in the tour as it tried to search for the previous implementation which contained a button. There are also changes to fix the race conditions that exist in the tour which were not evident due to the original issue Related pr: https://github.com/odoo/odoo/pull/234484 runbot-238409 Forward-Port-Of: odoo/enterprise#121958
This fixes a display issue in Planning where material resource rows could have the wrong height after the resource field changed to support multiple values. The list view now applies the intended styling to avatar fields, making schedules easier to read and visually consistent.
Original PR description
commit - https://github.com/odoo/enterprise/pull/106700/changes/3f27d96bda7c0b20683adb3fc1d38b5c3279c4a4 When the resource field was converted from m2o to m2m, the corresponding SCSS selector in the planning list was not updated. so the row height was not adjusted correctly for material resources using the m2m avatar widget. Forward-Port-Of: odoo/enterprise#123894
Removing an icon from a Knowledge article header now works without triggering an error. This prevents an unexpected interruption for users editing articles and keeps the icon picker flow reliable.
Original PR description
Steps to reproduce: ------------------------------------ 1. Install the Knowledge module. 2. Open any article. 3. Click the header icon. If no icon is present, add one from the Actions menu. 4. Click…
Steps to reproduce: ------------------------------------ 1. Install the Knowledge module. 2. Open any article. 3. Click the header icon. If no icon is present, add one from the Actions menu. 4. Click the header icon again. 5. Click Remove icon from the emoji picker. Observation: ------------------------------------ A traceback is raised when removing the header icon. ``` TypeError: Cannot set properties of undefined (setting 'scrollTop') ``` Issue: ------------------------------------ The emoji picker component updates its scroll position through a grid reference. After this PR - https://github.com/odoo/odoo/pull/269588, the emoji picker was migrated to Owl 3, which changed the way component references are handled. The header icon removal flow still uses the previous ref access pattern, causing the grid reference to be `undefined` when attempting to update `scrollTop`, resulting in a traceback. Solution: ------------------------------------ Update the syntax for accessing the ref signal. Forward-Port-Of: odoo/enterprise#123880
The timesheet billable checkbox is now hidden when a project or task has no linked sales order, so users no longer see an option that cannot affect billing. This reduces confusion when entering time and makes the timesheet interface better reflect the actual billing setup.
Original PR description
Previously, the `is_billable` checkbox was visible in the timesheet systray even when no Sales Order was linked to the project or task. Toggling the checkbox in this state had no actual effect on billing, leading to user confusion. This commit introduces a non-stored computed field `has_available_so` on `account.analytic.line`. This field evaluates whether billing is possible based on the project and task configuration, and is used to conditionally hide the checkbox in the UI. task: 6328661 Forward-Port-Of: odoo/enterprise#122326
Features or functions removed from Odoo
An obsolete date calculation tied to scheduling follow-up activities from the VoIP call log was removed. This keeps the VoIP codebase cleaner after that scheduling option was removed, with no expected change for day-to-day users.
Original PR description
In [1], we remove the option to schduele a new activity on the log call wizard, so we don't care about `date_deadline` anymore. `_compute_date_deadline` then becomes useless and can be removed. [1]: d037568f8cba0de0aa313fafb4eb24d312d3e707 Forward-Port-Of: odoo/enterprise#123864
Code cleanup and technical improvements
The Knowledge comments area was internally updated to stay compatible with the newer interface framework. This should preserve the existing comments experience while reducing future maintenance risk.
Original PR description
`useLayoutEffect` is deprecated in OWL3. This replaces it with `useEffect` and moves the vertical-positioning logic into a `threadTops` getter. Two `useLayoutEffect` calls existed: one ran a batched…
`useLayoutEffect` is deprecated in OWL3. This replaces it with `useEffect` and moves the vertical-positioning logic into a `threadTops` getter. Two `useLayoutEffect` calls existed: one ran a batched vertical-dimension computation on `activeThreadId` change, the other a debounced horizontal computation on `editorThreads` change. - Horizontal: kept as a `useEffect`. Where the old hook ran on every patch, the OWL3 effect only reacts to the values it reads, so it reruns just when threads are added or removed. - Vertical: the positions can simply be derived while rendering, so the logic moved into a `threadTops` getter used by the template. This lets the render react to the relevant state on its own and drops the post-patch hook. The refactored code has test coverage — these failed when the effect was commented out and now pass: - TestESLint.test_eslint (`activeThreadId` defined but never used) - TestKnowledgeArticleTours.test_knowledge_article_comments (comments UI broken) runbot build with the effect commented out: https://runbot.odoo.com/runbot/batch/2594694/build/114736755