Monday, June 15, 2026
6 changes · 17.0
Resolved issues and error corrections
This update fixes a rendering issue in Outlook Desktop where the layout of emails with the 's_three_columns' design was not displaying correctly. Specifically, column heights and button styling were inconsistent. The change ensures a more professional and visually accurate email experience for users on Outlook Desktop.
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#269274
This update fixes an issue where cancelled Point of Sale (POS) orders weren't being fully removed from the system. Previously, refunds triggered a state change but didn't delete the order. Now, cancelled orders are properly deleted, streamlining order management and preventing data inconsistencies.
Original PR description
Steps to reproduce: - install `pos_self_order` - In POS, purchase something - Refund from the backend but don't validate it yet. - Delete order from POS by clicking on the Trash icon, from order list…
Steps to reproduce: - install `pos_self_order` - In POS, purchase something - Refund from the backend but don't validate it yet. - Delete order from POS by clicking on the Trash icon, from order list - Return to the backend and observe that the state has been moved to Cancelled. Current behavior: - The order is moved to cancelled instead of being deleted. Expected behavior: - The order should be deleted. Cause: - `pos_self_order` overrides `remove_from_ui` and cancels the order before calling `super()`. https://github.com/odoo/odoo/blob/7c47336246aa5443c1e95cb253fea7ac0f8aab0e/addons/pos_self_order/models/pos_order.py#L72-L79 - However, the original method only cleans up orders in `draft` state. https://github.com/odoo/odoo/blob/4a2d74bf802fbbc65d316b2da07b8a27913a0a7f/addons/point_of_sale/models/pos_order.py#L1162-L1168 Fix: Allow `remove_from_ui` to also clean up already cancelled orders. opw-6223411 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where Odoo incorrectly identified ZIP files when reading from buffers due to a problem in the underlying Libmagic library. The change adapts Odoo's system to use a custom fallback, ensuring accurate MIME type detection for ZIP files and related document formats, preventing potential errors in file handling.
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
This update corrects a potential issue in the Swiss payroll module where users could incorrectly request refunds for payslips. Swiss regulations limit employees to one payslip per month, so the system now directs users to cancel and re-create the payslip for any necessary corrections. This ensures compliance with Swiss payroll rules.
Original PR description
Prevent refunds for CH payslips since only one payslip per month is allowed for Swiss payroll. Users should cancel the payslip and create a new one to apply corrections. task-5951981
This update corrects a bug where Google Calendar attendee information was being dropped incorrectly when an attendee's email matched a configured alias. The fix ensures all attendees are accurately synchronized, preventing missed invitations and improving event planning. This resolves a previous issue impacting event accuracy.
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
This update resolves a display issue in translation mode where clicking carousel navigation buttons triggered an error message. The fix removes unnecessary HTML from attributes and ensures the buttons function correctly without disruptive notifications, improving the user experience during website translation.
Original PR description
## 1. Prevent toast on carousel nav buttons in translation mode [Commit 1] ### Steps to reproduce: 1. Go to Website -> Configuration -> Install another language. 2. Add the language to a website. 3.…
## 1. Prevent toast on carousel nav buttons in translation mode [Commit 1] ### Steps to reproduce: 1. Go to Website -> Configuration -> Install another language. 2. Add the language to a website. 3. Go to the website and drop a Carousel snippet. 4. Switch to the newly added language and enter Translate mode. 5. Click the carousel's "Next" or "Previous" arrow buttons. ### Issue: Clicking the buttons triggers "This translation is not editable." ### Cause: Carousel navigation buttons are wrapped in `<a>` tags with the `o_not_editable` class, which triggers the non-editable warning during translation mode. ### Solution: Ignore `.carousel-control-prev` and `.carousel-control-next` from triggering the translation error warning. ## 2. Strip translation HTML from attributes [Commit 2] When translating a website, attributes like `title`, `alt`, or `placeholder` on complex elements (elements containing children) or non-editable elements (e.g., carousel controls, search icons) display raw translation metadata (HTML spans) instead of the clean text. Steps to reproduce: 1. Install another language and add it to website. 3. Drop a Carousel snippet. 4. Switch to the new language and enter Translate mode. 5. Hover over the carousel arrows (next/previous). Issue: The tooltip displays raw HTML, `<span data-oe-translation-initial-sha=.. .>Next</span>`. Cause: This happens because attributes like `placeholder`, `title`, `alt`, `value` receive translation spans and the attribute cleanup logic had a strict filter (`:empty`, `input`...) that excluded elements containing other tags (like an `<a>` containing an `<i>` icon), so the raw translation HTML was never replaced with the clean value. Solution: This commit removes translation-specific HTML from the `title` attribute and keeps only the plain text. task:[4756921](https://www.odoo.com/odoo/project/974/tasks/4756921)