Thursday, September 3, 2026
5 changes · 18.0
Resolved issues and error corrections
French electronic invoices for paid transactions now automatically include the required due date, matching the payment date. This helps businesses comply with French e-invoicing validation rules and reduces the risk of invoice export rejection.
Original PR description
According the schematron v1.4, the cbc:DueDate is required when the move is PAID. "[BR-FR-CO-09/BT-23] : Si le cadre de facturation (BT-23) est B2, S2 ou M2, alors la date d’échéance (BT-9) doit être renseignée et correspondre à la date de paiement." no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The spreadsheet template dialog in Documents now keeps the search bar visible even when no templates match a search. Users can also add a custom filter without the dialog crashing, making template selection smoother and more reliable.
Original PR description
- templates searchbar disappear when the search has no match - Clicking "Add a custom filter' in the searchbar crashes Task-6526322
Fixed an issue in Discuss where the emoji picker could crash after users selected emojis during a search and then cleared the search field. This keeps chat interactions smooth and prevents an unexpected error in a common messaging workflow.
Original PR description
Steps to reproduce: - open Discuss, open any chat, open the emoji picker (no 'Frequently used' emojis) - search a term and select emojis without closing the picker (shift+click on desktop, plain…
Steps to reproduce:
- open Discuss, open any chat, open the emoji picker (no 'Frequently used'
emojis)
- search a term and select emojis without closing the picker (shift+click on
desktop, plain click on mobile)
- clear the search with backspace
=> traceback: 'Cannot read properties of null (reading
`getBoundingClientRect`)' in adaptNavbar().
This happens because when we clear the search input it calls
`highlightActiveCategory()`, which sets `categoryId` to the topmost category of
the grid, which is now the 'Frequently used' category (sortId 0), added to the
picker since the emojis we just picked updated the recent state. To update the
navbar, `currentNavbarPanel` then looks for the panel holding it in
`emojiNavbarRepr`, but that representation is only built in `adaptNavbar()`,
which runs on mount and from the `ResizeObserver` only, so it was built without
the 'Frequently used' category and no panel contains it. It returns undefined,
the navbar renders empty, its size change wakes the `ResizeObserver`, and
`adaptNavbar()` crashes on querySelector('.o-Emoji').getBoundingClientRect()`.
This commit solves the issue by rendering the `recentEmojis` from a snapshot
taken when the picker is opened, so they are not added to the picker while the
while `emojiNavbarRepr` does not contain their category id.
partial backported PR: https://github.com/odoo/odoo/pull/281104
Task-[6204249](https://www.odoo.com/odoo/project/1519/tasks/6204249)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prUsers with attendance management rights can now remove themselves as an employee's attendance manager without triggering an error. This prevents a confusing access issue and keeps attendance administration workflows running smoothly.
Original PR description
Issue: ---------------------------------------- When a user removes themselves as Attendance manager on the last employee on which they're set an error pops up. Steps to reproduce:…
Issue: ---------------------------------------- When a user removes themselves as Attendance manager on the last employee on which they're set an error pops up. Steps to reproduce: ---------------------------------------- - Connect as a user with the group `group_hr_attendance_manager` - Install hr_attendance - Don't be the attendance manager of any employee - Go to an employee form, add yourself as attendance manager - Try removing yourself as attendance manager - Error Cause: ---------------------------------------- When removing someone as Attendance manager, `_clean_attendance_officers()` is called to remove the group `group_hr_attendance_officer` from any user without any employee to manage. But the field `attendance_manager_id` itself is only accessible to users with the group `group_hr_attendance_officer`. So during the `web_read` after the `write`, the user doesn't have access to the field and an access error is thrown. Solution: ---------------------------------------- `group_hr_attendance_officer` is implied by `group_hr_attendance_manager`. So a user should never have only `group_hr_attendance_manager`. We modify `_clean_attendance_officers()` to not remove `group_hr_attendance_officer` when the user has `group_hr_attendance_manager`. opw-6471482
This corrects internal documentation for temporary records so it matches how access permissions have worked for several versions. There is no product behavior change, but clearer documentation helps administrators and developers understand security rules correctly.
Original PR description
Since 6d8688bb124d, TransientModel records use the regular access rights mechanisms instead of being implicitly restricted to their creator. The docstring was not updated with that change and has therefore incorrectly documented creator-only access since 14.0. Forward-Port-Of: odoo/odoo#286251