Tuesday, June 16, 2026
13 changes · 18.0
Resolved issues and error corrections
This update resolves a problem where Odoo incorrectly identified ZIP files when reading data from a buffer, leading to incorrect MIME type detection. The fix adapts Odoo's system to use a custom implementation when libmagic returns a generic response, ensuring accurate file type identification for ZIP and related formats. This prevents potential errors in handling attachments.
Original PR description
Libmagic version 0.46 (currently available in Debian Trixie/Forky and Ubuntu Resolute) introduced a regression regarding ZIP file detection. While it correctly identifies a ZIP file when reading…
Libmagic version 0.46 (currently available in Debian Trixie/Forky and Ubuntu Resolute) introduced a regression regarding ZIP file detection. While it correctly identifies a ZIP file when reading directly from a file path, it fails when reading the exact same content from a buffer, returning a generic 'application/octet-stream' instead. Because `guess_mimetype` primarily evaluates buffers, this upstream bug breaks MIME type detection for ZIP files (and related formats like docx, xlsx, etc.) in Odoo environments running this libmagic version. Since we cannot directly fix the library itself, this commit adapts Odoo's `guess_mimetype` to fallback to our custom implementation when libmagic returns the generic 'application/octet-stream' to workaround this library's bug. Upstream libmagic fixes: - https://github.com/file/file/commit/f1adef05b8a85be50d28965b1fd21fcceacf7a4e - https://github.com/file/file/commit/60b2032b96fc185b37fb0f2152e834efb2edad6e Upstream python-magic issue: - https://github.com/ahupp/python-magic/issues/354 runbot-938197 Forward-Port-Of: odoo/odoo#269506
This update fixes a rendering issue in Outlook Desktop where the layout of emails with three-column designs (`s_three_columns`) and button styling were not displaying correctly. The changes ensure consistent visual appearance of emails in Outlook Desktop, improving the overall email experience for users.
Original PR description
Problem: - `s_three_columns` is not rendered correctly in Outlook Desktop when the equal-height option is enabled. - Button padding, border radius, and background color are not rendered properly in…
Problem: - `s_three_columns` is not rendered correctly in Outlook Desktop when the equal-height option is enabled. - Button padding, border radius, and background color are not rendered properly in Outlook Desktop. Solution: - Set the `height` attribute on `td.card-body` along with `valign` so columns keep the same height in Outlook Desktop. - Use `v:roundrect` to support rounded corners (`arcsize`) and background colors (`fillcolor`), making buttons render consistently with the editor in Outlook Desktop. Before: <img width="1249" height="1297" alt="image" src="https://github.com/user-attachments/assets/828bc42b-1e21-404c-a5ae-81d4ee688802" /> After: <img width="1249" height="1309" alt="image" src="https://github.com/user-attachments/assets/263a1c30-fe86-4e40-b3c2-476abc2bf84a" /> Steps to reproduce: - Add the `s_three_columns` snippet with one card containing more content than the others. - Add some buttons. - Send or preview the email in Outlook Desktop. - Observe that column heights and button styling are not rendered correctly. opw-6044725 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269791 Forward-Port-Of: odoo/odoo#269274
This update resolves an issue where users without an employee assigned to their company branch would encounter an error when creating expenses from documents. The fix ensures the system correctly handles users without a direct employee link, preventing a misleading error message and improving the user experience for all company branches.
Original PR description
Fix a bug where a traceback is displayed when a user with no employee on the parent company tries to create an expense from a document. Steps to reproduce: - install expense and documents - create a branch to the main company - create a user with access to both companies and group 'Team Approver' - create an employee for this user in the branch company - select both companies and go in Documents - select a document and in the action menu, click 'Create an Expense' -> This tracebacks before commit, and an user error is displayed after task-6237021
This update fixes an issue where the 'translate' button disappeared in the report editor when creating new reports. The fix ensures the button remains visible, allowing users to easily translate report resources regardless of whether they're editing an existing or new record. This improves usability and simplifies the report creation process.
Original PR description
The web.TranslationButton template now only renders when canTranslate is true, so the field button can hide itself on a new record still edited inside an x2many. The report editor reuses that template with its own component, which did not define the getter, so its translate button was no longer rendered. The component always edits an existing ir.ui.view, so its canTranslate returns true. Steps to reproduce: 1. Activate a second language in Settings > Translations > Languages 2. Open any report in Studio and edit its sources via the XML editor => The translate button next to the resource selector is missing Ticket [link](https://www.odoo.com/odoo/project.task/6260427) opw-6260427
This update resolves a technical issue where the web_editor module could encounter an error if it attempted to compare an empty history. The code has been updated to gracefully handle this situation, ensuring the editor continues to function correctly. This prevents potential disruptions to users when reviewing changes.
Original PR description
If, for whatever reason, the history we try to compare is an empty string, we might get a value error thrown. We guard the code to avoid the error. see :https://github.com/odoo/odoo/issues/269149 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269722
This update fixes an issue where the import of UBL invoices incorrectly processed line extensions set to zero. Specifically, it ensures accurate calculations for quantity and discounts during the UBL import process, preventing incorrect invoice data. This ensures data integrity when dealing with products sold in quantities of one.
Original PR description
**PROBLEM** When line extension value is 0, because `bool(0.0) == False` we skip some important computation for the import. **STEP TO REPRODUCE** 1. Create an invoice with a product, with quantity > 1, and a discount of 100%. 2. Send the invoice to peppol, to generate a ubl. 3. Import the ubl, notice it will create a line with quantity = 1, and discount > 100% which is incorrect. opw-6227836
This update prevents users from attempting to translate records within x2many relationships when those records haven't been fully saved. The translate button is now greyed out with a helpful tooltip, guiding users to first save the parent record before translating its child. This resolves a previous error and improves the user experience.
Original PR description
Backport of https://github.com/odoo/odoo/pull/265512 A new record edited inside an x2many has no id of its own, so the translate button is now greyed and inactive there, with a tooltip inviting to save the record and its parent first. Steps to reproduce: 1. Activate a second language in Settings > Translations > Languages 2. Open the Surveys app and create a survey 3. Add a question, then in the Answers tab add a line and type a value 4. Click the EN button next to the answer, fill the second language, and Save => RPC error operator does not exist: integer = boolean from WHERE id = false Ticket [link](https://www.odoo.com/odoo/project.task/6260427) opw-6260427
A recent issue causing crashes when accessing documents through activities has been resolved. This fix addresses a technical problem related to how the system handles data loading, preventing errors when setting company information. This ensures a more stable and reliable experience for users accessing documents.
Original PR description
### Description When navigating to Documents via an activity, the list view crashes with a TypeError on setting 'COMPANY'. ### Root Cause An asynchronous race condition occurs between parent and child `onWillStart` hooks. The child finishes an await before the parent's hook runs `expandDefaultValue()`. Thus, `this.state.expanded[sectionId]` is undefined when the child tries to write to its nested keys. ### Solution Await `sectionsPromise` first in the child hook. opw-6276003 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue in Odoo's Studio that caused errors when deleting the last column from a report table. The fix ensures the system handles the scenario of deleting the final column gracefully, preventing tracebacks and improving the user experience. This ensures Studio remains stable and reliable for report customization.
Original PR description
Problem: When deleting the last column in a table in studio we get a traceback. Cause: `firstCell` will be null if we delete the last cell in the table. Fix: Added a null check on `firstCell` before calling `setCursorEnd`, so the cursor is only repositioned when the table still has remaining cells. Steps to reproduce: - Edit a report with a table. - Remove all columns. - Traceback will occur when deleting the last one. opw-6263696
This update fixes a problem where Google Calendar attendee information wasn't syncing correctly when an email address matched a configured alias. The change ensures that all Google attendees are properly synchronized, preventing missed invitations and improving event accuracy. This resolves a previous bug impacting event attendance.
Original PR description
_get_sync_partner excludes partners whose email matches a configured alias, returning a list shorter than the emails/google_attendees lists. zip() stops at the shortest, silently dropping the last Google attendee instead of the alias-matched one. Fix by replacing the positional zip with a by-email dict lookup, so each attendee is resolved independently and only the unresolvable one is skipped. opw-6086240 Forward-Port-Of: odoo/odoo#263787
This update fixes an issue where capitalized email domains in alias settings caused emails to fail to route correctly. The change prevents users from saving capitalized domain names, ensuring reliable email delivery. This resolves a technical problem that could impact email communication.
Original PR description
[FIX] mail_alias_domain: prevent capitalization in domain names to avoid email routing issues Currently, we allow capitalization in the name / display_name field for Email Domains…
[FIX] mail_alias_domain: prevent capitalization in domain names to avoid email routing issues
Currently, we allow capitalization in the name / display_name field for Email Domains (mail.alias.domain), which allows for capitalized domains in email aliases. When the system receives incoming emails via mail_thread.py's message_route,
the reply_to email addresses are sanitized (all lowercase). We then use the case-sensitive 'in' to identify
message routes, which will always fail for capitalized email domains.
This PR applies sanitizing to the name field so that users cannot save capitalized email domains.
Other options are not viable because:
1. we don't have a case-insensitive equivalent of the 'in' operator
2. altering the current logic to be case-insensitive would decrease performance
3. altering the current logic would change the structure of message_route
Fixes #opw-5401633
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an issue where saving a job page after deleting all content from its editable HTML field (like the job description) would trigger a 'Document is empty' validation error. The fix ensures that empty HTML fields are correctly handled, preventing users from being unable to save changes. This improves the user experience and data integrity.
Original PR description
Steps to reproduce: =================== 1. Edit a job page. 2. Delete every `s_rating` block. 3. Save. => Validation Error: Document is empty. Cause: ====== Deleting the last snippet inside an…
Steps to reproduce: =================== 1. Edit a job page. 2. Delete every `s_rating` block. 3. Save. => Validation Error: Document is empty. Cause: ====== Deleting the last snippet inside an editable HTML field (e.g. the last `s_rating` block in the `website_rating` field of a job page) leaves the field's editable container with only whitespace text nodes. On save, it writes that whitespace to the record and then calls `_copy_custom_snippet_translations`, which does `html.fromstring(lang_value)` on the whitespace and raises `lxml.etree.ParserError: Document is empty`, re-raised as `ValidationError`. The user sees a "Validation Error" dialog and can't finish saving. The previous fix for the analogous "Document is empty" symptom on product description editing (commit [1]) added a `cleanupEmptyStructures` `on_removed_handlers` that strips whitespace from `.oe_empty` containers after element removal. That selector covers `oe_structure.oe_empty` containers but not editable HTML field savables (`[data-oe-type="html"]`), which don't carry an `oe_empty` class when they originally had content. As a result, fields like `hr.job.website_rating` still hit the failing parse path. Solution: ========= Extend the cleanup selector to also include `[data-oe-type="html"]` so HTML-field editables are normalized to genuinely empty after the last inner snippet is removed. [1]: https://github.com/odoo/odoo/commit/53d5cc7eed635f64038bf0315f6863011879c529 opw-6244892 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documentation and clarification updates
This pull request formally records Adrien Didot's (Adridot) signature on the Odoo Individual Contributor License Agreement. Adding the associated documentation ensures compliance and clarifies the terms of his contributions to the Odoo project. This is a standard legal step for all individual contributors.
Original PR description
Individual Contributor License Agreement signature. Adds `doc/cla/individual/adridot.md` per the CLA signing instructions. Related contribution: #270196