Daily updates from Odoo
Friday, June 5, 2026
20 changes · master
New functionality added to Odoo
This update adds unit tests for key Obox components – discover_obox, obox_report_action, and the json_tags_field widget. These tests enhance the reliability and stability of the Obox functionality, reducing the risk of future issues and improving overall product quality.
Original PR description
This commit adds unit tests for the following: - `client_actions/discover_obox.js` - `client_actions/obox_report_action.js` - `widgets/json_tags_field.js`
Enhancements to existing features
This update ensures that stacked bar charts created within Odoo spreadsheets automatically include a total line, mirroring the standard behavior of charts in the main Odoo graph view. This improves consistency and makes spreadsheet charts more intuitive for users who are familiar with Odoo's charting capabilities. It addresses a visual discrepancy between spreadsheet and standard charts.
Original PR description
## Description When inserting a stacked bar graph view into a spreadsheet, enable showTotalLine on the generated chart definition. This keeps inserted spreadsheet charts aligned with the Odoo graph view, where stacked bar charts display the Sum line by default. Task: [5886277](https://www.odoo.com/odoo/project/2328/tasks/5886277)
Resolved issues and error corrections
This update ensures that the IPA reduction amount is now correctly displayed in the payroll summary tab (274.XX form). The change adjusts calculations to accurately reflect deductions and provides a clearer view of employee earnings. This improves reporting accuracy and transparency.
Original PR description
Previously, the IPA reduction was introduced on its own dedicated tab on the 274.XX form but was not shown in the summary tab. Added the IPA reduction to the Summary tab by updating the form view to display the "IPA Reduction" field inside the "Exempted Amounts" group, conditionally visible only when active. Modified the `_compute_amounts` method to: - Add `sme_exempted_amount` to the total `deducted_amount` when active. - Delay the calculation of `amount_to_pay` so it correctly reflects the updated total deductions. Task: 6268701
This update resolves compatibility issues with the latest o-spreadsheet library. The changes ensure the spreadsheet edition continues to function correctly after the library's update, improving stability and preventing potential disruptions to users. It addresses minor UI adjustments related to comment popups and layout configurations.
This update ensures the HR payroll payslip run Kanban overlay continues to function correctly after a recent update to Odoo's core framework. The change replaces outdated XPath targeting with more reliable CSS selectors, guaranteeing consistent overlay functionality regardless of the underlying form structure. This prevents potential disruptions to payroll processing.
Original PR description
## Summary Companion to the `odoo/odoo` PR on the same `master-tref-pr-1-nby` branch, which migrates `web.KanbanHeader`'s root `<div>` from `t-custom-ref="root"` to `t-ref="this.rootRef"` (Owl 3 signals). The `hr_payroll` payslip-run kanban overlays that `<div>` with an xpath targeting `[@t-ref='root']`. After the migration that attribute no longer exists — and the same xpath also fails against the pre-migration `t-custom-ref` form. ## Change Switch both xpaths in `hr_payslip_run_kanban.xml` to `hasclass()` selectors so they match regardless of which ref form the upstream template uses, keeping the overlay working across the migration. ## Notes - odoo/odoo#267687
This update resolves an issue where a validation error was incorrectly triggered when setting an intrastat code on product templates. The change now accurately checks for product templates with dynamic attributes and no variants, ensuring the error is raised only in the intended scenario. This improves data integrity and prevents unnecessary errors during product template creation.
Original PR description
Problem: When saving an intrastat code on a product template with no variants, an error should be raised because intrastat codes are stored on the product variants. However, the error gets raised when creating a product template with intrastat code set because the variants get created after the product template is created, so it doesn't find any variant although the default variant will be created right after saving the product template. Solution: The constraint should only be triggered when saving the intrastat code on a product template with dynamic attributes and no variants. Since dynamic attributes are the only ones that can lead to a product template with no variants, we can check if the product template has dynamic attributes and no variants before raising the error. Forward-Port-Of: odoo/enterprise#118986
This update corrects a minor error in the AI service that prevented the system from correctly handling responses from Google's Gemini models. Specifically, the code was incorrectly trying to access an ID field that wasn't always present, leading to a system error. This fix ensures consistent and reliable operation of the AI tool call functionality.
Original PR description
The functionCall parts returned by Gemini may or may not have an id depending on the LLM model used (Gemini 2.5 doesn't include an id in functionCall parts but Gemini 3 does). So, there is some code that checks whether there is an id and generates a uuid if none exists. This code had a bug because it was accessing the id directly on the functionCall part which may not exist and a keyerror was thrown in such cases. This commit solves the issue by using get instead of direct key access. Forward-Port-Of: odoo/enterprise#118837
A recent test failure related to demo data installation has been resolved. The fix ensures that a simulation offer is hidden during testing, preventing errors that occurred when expecting an empty list view. This improves the reliability of the system's testing process.
Original PR description
**Problem**: The test fails when demo data is installed because some steps expect an empty list view. **Fix**: Ensure the simulation offer is hidden by applying a custom filter on the simulation employee Task: 6246575 Forward-Port-Of: odoo/enterprise#119142 Forward-Port-Of: odoo/enterprise#118358
This update fixes an issue where auto-filling fields in sign requests was causing unintended side effects. The changes isolate the auto-fill functionality, preventing these unexpected behaviors and ensuring data integrity within the sign request process. This improves the reliability and accuracy of sign request creation.
Original PR description
task-6269354 Forward-Port-Of: odoo/enterprise#119148
This update resolves an issue where negative line items in Mexican CFDI invoices were incorrectly distributed across other lines. The change addresses a conflict introduced by new features like discounts and down payments, making the previous method for checking line types obsolete. This ensures accurate CFDI invoice processing.
Original PR description
In MX CFDI, negative lines are not allowed so they are distributed over other lines. But because this PR introduces some other `special_type` like `global_discount` and `down_payment`, it becomes useless to check `base_line['special_type'] == False`. Fix for https://github.com/odoo/odoo/pull/267435 task-5900496 --- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#119327 Forward-Port-Of: odoo/enterprise#119254
This update addresses a technical issue related to the Spreadsheet Edition's pivot table layout configuration. The changes ensure compatibility with a recent update to the core Odoo spreadsheet functionality, resulting in a smoother and more reliable user experience. This primarily impacts how users customize and manage pivot table layouts.
This update resolves an issue where the Studio sidebar's checkboxes had a broken appearance due to a conflict with Bootstrap's styling. The fix globally applies a background image to indeterminate checkboxes, eliminating the need for a separate workaround and ensuring consistent display across the Enterprise module.
Original PR description
The Studio sidebar had its own `&:indeterminate { background-image: url(...) }` override to work around the broken Bootstrap indeterminate dash. This is now handled globally (see PR #268326 / master-fix-indeterminate-bg-image-jesc): `.form-check-input:indeterminate` sets `background-image` directly, bypassing the Bootstrap CSS variable that carries the broken `stroke='unset'`.
source: `web_enterprise/static/src/scss/bootstrap_overridden.scss` sets `$component-active-color: unset !default;` before `web/bootstrap_overridden.scss` in the bundle, so Bootstrap's indeterminate SVG compiles with `stroke='unset'` and the dash is invisible everywhere except where `background-image` is overridden directly.
fix: the global `.form-check-input:indeterminate { background-image: url(...) }` rule in `web/static/src/core/checkbox/checkbox.scss` now covers all checkboxes, making this local Studio override redundant.This update corrects a previous issue where website forms were incorrectly translated into the user's language instead of the website's default language. Now, all forms displayed on the website will automatically use the website's language setting, ensuring a consistent and accurate experience for users regardless of their browser language.
Original PR description
When the website is in a different language A to the user language B, forms are translated into the language B of the builder. They should be in the website default language. Task-6171271
This update fixes a technical error that prevented refunds in the Colombian Point of Sale (PoS) system. The issue stemmed from outdated code referencing an old function name, which caused a traceback during the refund process. This change ensures refunds are processed correctly for Colombian customers.
Original PR description
**Steps to reproduce:** - Setup a columbian company, DIAN should be in demo mode - Go to the PoS and make a sale with a columbian customer - Refund it - A traceback appears **Why the fix:** Some legacy code was left untouched when we changed the old **get_partner()** to the new **getPartner()** so we got a traceback as this function does not exist anymore. We also change the **set_partner(partner)** to **setPartner(partner)** as it was also forgotten. opw-6231856 Forward-Port-Of: odoo/enterprise#118651 Forward-Port-Of: odoo/enterprise#118054
This update resolves an issue where inserting a prompt banner using the `/prompt` command wouldn't allow users to undo the banner's creation. The fix ensures that undo functionality correctly removes prompt banners, improving usability and preventing unexpected content.
Original PR description
Problem: After inserting a prompt banner, undo does not remove it. Cause: History commands were ignored when the selection was inside the prompt banner, preventing undo from handling banner insertion. Solution: Handle history commands even when the selection is inside the prompt banner. Steps to reproduce: - Insert a prompt banner using `/prompt` + Enter. - Press Ctrl + Z. - Observe that the banner is not removed. task-6230530 Forward-Port-Of: odoo/enterprise#118248 Forward-Port-Of: odoo/enterprise#117845
This update corrects a bug that prevented quality checks from running correctly when a product's manufacturing operations were modified. The change adjusts how the system handles lot references, ensuring compatibility with recent Odoo updates. This resolves an error related to invalid data and improves the reliability of the quality control process.
Original PR description
## Steps to reproduce: - Install the `quality_mrp` module. - Create a new product. - Create a Quality Point with: Type: Measure, Control per: Product/Operation Operations: Manufacturing - Create and…
## Steps to reproduce: - Install the `quality_mrp` module. - Create a new product. - Create a Quality Point with: Type: Measure, Control per: Product/Operation Operations: Manufacturing - Create and confirm MO for the product. - Update the Quality Point: Remove the 'manufacturing' operation type and add 'receipts' type. Change Control per to 'Quantity'. - Open the MO and start a quality check. - Enter an invalid measure and try to validate it. ## Error: `AttributeError - 'mrp.production' object has no attribute 'lot_producing_id'` ## Cause: Since commit https://github.com/odoo/odoo/commit/4bb4e08066449177f89382718ceadd840ce90d0e, the `lot_producing_id` field on MO was replaced by the Many2many field `lot_producing_ids`. Invalid references to the removed field lead to an error. ## Fix: This commit uses the first lot/serial from the MO. Note: Multiple produced lots are only possible for serial-tracked products. sentry-7511513479 Forward-Port-Of: odoo/enterprise#119231
This update resolves an issue where users were blocked from uploading documents to requests linked to records they didn't have full access to. By adding a '.sudo()' function to the attachment creation process, users can now successfully upload documents, regardless of their access rights to the related record. This improves usability and ensures requests can be properly documented.
Original PR description
Issue: Users are currently blocked from uploading requested documents if the request is linked to a record they do not have access to (e.g., User A links Record X to a request assigned to User B, but User B lacks read/write access to Record X). The system throws an error because the user cannot create an attachment for that record. Fix: Add .sudo() on the attachment creation process. task-6107099 Forward-Port-Of: odoo/enterprise#113698
Features or functions removed from Odoo
This pull request removes redundant sudo permissions that were incorrectly added when calling the image generation tool. The change corrects a prior mistake and simplifies the system's security posture. This ensures the application functions as intended without unnecessary elevated privileges.
Original PR description
The sudo used for calling the image generation tool isn't needed and shouldn't have been added here 99f76c1 in the first place. So, it is removed. Forward-Port-Of: odoo/enterprise#119220
Code cleanup and technical improvements
This update simplifies access to the document portal by using a dedicated URL (/my/documents) instead of an accidental override. This change removes unnecessary complexity and improves the user experience for accessing and managing documents.
Original PR description
Currently, the general webclient route is overriden
to manage custom documents URLs with access_token.
The code needs to work around several things to make it
work:
- manage db and auth explicitely
- override `readonly`
With this commit, we now use a new dedicated route
which is more specific than the normal webclient route.
It doesn't need any of the workarounds and it's generally
easier since it doesn't involve any override.
`/odoo/documents_portal` only resolved by accident: it matched the
`/odoo/<subpath>` route overriden by `documents`, passed the
`subpath.startswith('documents')` check, and the literal string
`documents_portal` was then interpreted as an access token. The
portal user was redirected to `/documents/documents_portal`, where
`documents_portal` was treated as an access token, which is
nonsense.
Expose the portal entry under `/my/documents` URL instead.This update resolves a technical issue related to an outdated React component method (useLayoutEffect) that was causing performance problems and potential instability. Replacing it with the recommended onMounted + onPatched approach ensures the system runs smoothly and aligns with current Odoo standards.
Original PR description
Replaces useLayoutEffect with onMounted + onPatched WHY: UseLayoutEffect is deprecated in OWL3 Community PR: https://github.com/odoo/odoo/pull/267715