Monday, March 16, 2026
12 changes · 19.0
New functionality added to Odoo
This update introduces a new module, 'obox,' to connect and manage devices similar to the Odoo FDM for Belgium. The initial step allows users to register an Obox device, capturing its IP address and available services within the Odoo system.
Original PR description
The Obox (same platform as the Odoo FDM for Belgium) will allow interfacing with hardware devices, and is intended to replace the functionality of the IoT box. This commit only adds the ability to pair an Obox to the database, and see its IP and available services.
Resolved issues and error corrections
This fix prevents report-related tests from leaving temporary files behind on the server. It keeps test runs cleaner and avoids unnecessary buildup in temporary storage.
Original PR description
Followup to #253053 which assumed it was some sort of race in the report code which would sometimes fail to cleanup the temp files, but after hitting a test failure in #253816 the true culprit was revealed: it was the test #186547 added all along and I didn't even think to run it! Because `test_report_error_cleanup` mocks the `os.unlink` call the `os.unlink` call never happens during that test, so none of the temporary files get deleted, and this is what added a full set of report files to my /tmp every day as I'd run the entire test suite in the morning. To be clear the race was still there and resolving it was reasonable it, but that was not the cause of the leftover temporary files, or if so extremely rarely. Forward-Port-Of: odoo/odoo#253853
Google Calendar birthday events will no longer be included in the general calendar sync with Odoo. This avoids confusing duplicate or hard-to-manage events caused by Google treating birthdays differently from normal calendar entries.
Original PR description
Birthday events are a special kind of yearly-recurrent event that notably cannot be simply deleted like other events. They also appear as a separate calendar in the google UI to an extent, similar to tasks. As they require special handling, have little functional value and can be confusing due to that "fake calendar" behavior. We will now always filter them out of broad calendar sync. task-5966907
This fix updates the Redsys payment integration so it works cleanly with newer versions of a supporting encryption library used in Debian Trixie. It prevents compatibility warnings and helps maintain reliable payment processing across different server environments.
Original PR description
In cryptography 43.0.0 (present in Debian Trixie), ARC4 and TripleDES were migrated to decrepit [^1], leaving a deprecation warning in the old path. This commit handles both previous pre/post 43.0.0 import path. runbot-233267 [^1]: pyca/cryptography@722a6393e61b3acb569f404218f213fe08478a96
Resending a Croatian e-invoice now preserves the existing addendum instead of replacing it unnecessarily. This helps avoid accidental loss of invoice-related information when an invoice is resent but not submitted again to MER.
Original PR description
Issue: when resending an invoice already sent to MER, the existing addendum is overwritten even when the invoice is not sent to MER. Solution: updating values on the existing addendum rather than creating a new one, if it already exists. task-none --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253730 Forward-Port-Of: odoo/odoo#253281
The website editor now uses a more reliable way to size parallax snippet previews. This keeps the preview animation consistent in Firefox and Chrome, reducing confusion while building website pages.
Original PR description
Steps to reproduce: - Open the website editor. - Open the snippet dialog. - Scroll through a parallax snippet preview in Firefox and Chrome. => The preview animation does not move the same way. Before this commit, the parallax preview used `body.clientHeight` inside the scaled snippet preview iframe. Firefox and Chrome can return different values there, so the preview animation was inconsistent. After this commit, the preview reads `document.documentElement.clientHeight` instead, which gives a stable iframe viewport height across browsers. Forward-Port-Of: odoo/odoo#253541
Clicking a replied-to message from a mailbox now takes users to the related message in its original conversation. This makes it easier to follow context and navigate email discussions without confusion.
Original PR description
Before this change, clicking on a `message in reply` in mailboxes had no effect. The expected behavior is for it to jump to the message in its origin thread. To fix it, this commit ensures that `useMessageHighlight` hook receives the correct thread which in this case is the origin thread of the message in reply. task-5343804 Forward-Port-Of: odoo/odoo#253836 Forward-Port-Of: odoo/odoo#253334
This fixes an issue where narrow mega menus could become wider than the mobile navigation area. Website visitors on phones should now see menus that stay within the available screen space, improving browsing usability.
Original PR description
The property "max-width" of the mega menu in mobile view was set with the class o_mega_menu_is_offcanvas of its ancestor. However, when the user set the mega menu template size to "Narrow", new CSS rules were added to change the mega menu size based on the screen size. The first rule was overridden, resulting in the mega menu being larger than the mobile navbar width. This commit sets the property "max-width" as "important" to prevent this issue from occurring. task-5972284 Forward-Port-Of: odoo/odoo#250690
Opening Point of Sale orders in the back office no longer triggers an error. This keeps staff able to review order details without interruption after a recent display widget change.
Original PR description
Steps to reproduce: = - Open the `Point of Sale` app in the backend. - Open the order list view and open any order in form view. Issue: = - A traceback is raised: `KeyError: 'translated_product_name'`. Reason: = - The `product_label_section_and_note_field` widget introduced a dependency on the `translated_product_name` field, which is not present in `pos.order.line`. Fix: = - Added a computed field `translated_product_name` in the `pos.order.line` model to ensure the widget's dependent fields are available. Reference PR: = - https://github.com/odoo/odoo/pull/248401 task-6040210
When doing a fresh install of accounting with your company language set to Hebrew, you will receive an error violating a constraint on the account_journal table due to the code column being Varchar(5) and the Hebrew translations of "INV" and "BILL" having the same first 5 characters. This commit will allow users to install Accounting when their language is set to Hebrew or switch to the l10n_il with no journals in their database and their language set to Hebrew. Reproduction steps: - Un
Original PR description
When doing a fresh install of accounting with your company language set to Hebrew, you will receive an error violating a constraint on the account_journal table due to the code column being Varchar(5) and the Hebrew translations of "INV" and "BILL" having the same first 5 characters. This commit will allow users to install Accounting when their language is set to Hebrew or switch to the l10n_il with no journals in their database and their language set to Hebrew. Reproduction steps: - Uninstall Accounting + Invoice - Set company language to Hebrew - Install accounting (which will install Invoice) opw-6001568
This update fixes an issue where timesheet descriptions were being duplicated when updating values in the grid view. The fix ensures that new timesheet lines created from updated values retain the original description, maintaining accurate reporting and data consistency. This improves the usability of the timesheet feature.
Original PR description
To reproduce: ============= - on timesheet group by Project > Task > Description - on a line with a description, update a 0:00 cell to an other value - refresh or change view to list and back to grid - a new line with description '/' is created with the updated value Problem: ======== when creating the new timesheet it's by default given the name '/' which for the grid view is not in same group as the original line with the description. Solution: ========= when creating the new timesheet, we give it the same description as the original line. opw-5909249 Forward-Port-Of: odoo/enterprise#108894
This update resolves an issue where text fields in Odoo Sign PDFs were incorrectly displayed as checkmarks. The fix ensures that text field values are accurately rendered, preventing misinterpretation of standard text fields as checkboxes during the PDF flattening process. This improves the accuracy and reliability of digital signatures.
Original PR description
Create an interactive PDF form in Adobe Acrobat containing a standard Text Field (/FT /Tx). - Fill the text field with a value (e.g., "John Doe") and save the PDF. - (Note: Adobe Acrobat will often…
Create an interactive PDF form in Adobe Acrobat containing a standard Text Field (/FT /Tx). - Fill the text field with a value (e.g., "John Doe") and save the PDF. - (Note: Adobe Acrobat will often automatically assign an Appearance State (/AS /N) to this text field). - Upload this PDF to the Sign app. **Current behavior:** The text field's string value is ignored and replaced with a checkmark (✓). **Expected behavior:** The text field should correctly render the string value that the user entered. **Cause of the issue:** In the _draw_field_value function, the parser checks if an /AS (Appearance State) tag exists and is not set to /Off. If true, it assumes the field is a checked box and draws a chr(0x2713). However, it fails to check the Field Type (/FT) first. Because Adobe Acrobat sometimes assigns /AS tags to standard Text Fields (/FT /Tx), we misinterprets these populated text fields as checked buttons. **Solution:** This PR fixes the issue safely for stable versions across two commits: [REF]: Extracts the value extraction logic into a dedicated _get_field_value helper method to allow isolated unit testing without requiring a canvas or physical PDF files. No behavioral changes in this commit. [FIX]: Wraps the /AS check within an if field_type == "/Btn": condition. This ensures only actual Checkboxes and Radio Buttons render as checkmarks, allowing Text Fields to fall through and properly return their /V string values. Task: 6018260