Daily updates from Odoo
Thursday, June 18, 2026
124 changes
11 changes
New functionality added to Odoo
This update introduces new invoice types within the Odoo accounting system specifically designed to meet Jordan's VAT regulations. These types – transit, foreign trade, and free zone transfer – allow businesses handling international transactions to accurately categorize their invoices. The system now validates that these specialized invoice types are only accessible to registered Jordanian taxpayers.
Original PR description
Extend l10n_jo_edi_invoice_type with JoFotara scope codes (3-5): transit (3), foreign trade (4), and free zone transfer (5). Validate that scope codes 3-5 are only available to registered taxpayers. task-4769255 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269632 Forward-Port-Of: odoo/odoo#268839
Enhancements to existing features
This update adjusts the checksum within the EU IoT Scale Certification module to ensure compatibility with a recent update in the core Odoo system. This change aligns the module with the latest Odoo version, preventing potential issues and maintaining proper functionality. It's a routine maintenance update.
Original PR description
This commit simply adjusts the checksum to align with the changes in odoo/odoo#269211. task-6273412
This update enhances the visual appearance of both customer receipts and preparation tickets within the Point of Sale system. Specifically, font styling has been improved, and table numbers on preparation tickets now include floor information, making them easier to read and understand for staff.
Original PR description
In this commit - --------------- Enhanced font styling for receipt and preparation ticket Added floor information next to table number on preparation ticket Task - 6125322 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269850 Forward-Port-Of: odoo/odoo#260559
Resolved issues and error corrections
This update improves the way our system communicates scale information. Now, when a scale is set to 'tare,' the frontend receives this status update, ensuring accurate weight readings. This change enhances the reliability of weight data for inventory management.
Original PR description
See: https://github.com/odoo/enterprise/pull/119960 Before this commit, there was no way for the frontend to know if the tare function on the connected scale was active, despite the driver keeping track in the `tare_mode` variable. After this commit, we optionally send the `tare_mode` alongside the weight when `read_once` is called. By default it still returns just the weight for backwards compatibility. The `tare_mode` is now also updated by the status command, allowing it to be set as soon as tare is pressed, instead of after weight is applied. task-6273412 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the duration field was incorrectly returning 0 due to a formula not being properly processed. Now, the field accurately calculates duration and displays an error indication when invalid input is provided, ensuring accurate time tracking.
Original PR description
Before this commit, using a formula in the duration field was returning 0. Now, it resolves the formula. TASK-6150460 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a problem preventing tests for a key manufacturing workflow (TestMultistepManufacturingWarehouse) when only the 'mrp' module is installed. The fix ensures the necessary product routes are available, allowing the test to run successfully. This improves the reliability of our testing process.
Original PR description
Launch any test of the `TestMultistepManufacturingWarehouse` by installing only mrp and teh setupCalss will fail since `route_ids` is not present in the view of the `product.template` as there is no product selectable routes with only mrp installed: https://github.com/odoo/odoo/blob/66127f790ec591456c2a562b7c224f81e6ec7b57/addons/stock/views/product_views.xml#L210-L220 However, products are created and edited using the Form class in the setupClass: https://github.com/odoo/odoo/blob/66127f790ec591456c2a562b7c224f81e6ec7b57/addons/mrp/tests/test_warehouse_multistep_manufacturing.py#L22-L40 runbot-238777 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where timesheet billable project settings (is_billable) were not saved after closing and reopening the timesheet systray. Now, the selected settings are retained, ensuring accurate tracking of billable hours. This improves the reliability of timesheet reporting.
Original PR description
## Behavior before PR 1. Open the timesheet systray. 2. Select a billable project. 3. Toggle the is_billable field. 4. Close and reopen the systray. 5. The is_billable value resets to its default instead of keeping the updated value. ## Expected Behavior After this PR The systray now correctly retains the is_billable value after being closed and reopened. ### Technical Notes The issue occurred because the systray view loads a sudo record that triggers compute methods, which overwrite the stored is_billable value. The fix ensures that after compute methods run, the saved is_billable value is preserved.
This update fixes a limitation in the CRM Lead data enrichment process. Previously, changes made to enriched lead records couldn't be saved. Now, updated records are returned, allowing users to override and keep the most current information. This ensures data accuracy and a better user experience.
Original PR description
Return the enriched records to allow overrides. task-id: 5186595 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where stock valuations were incorrectly calculated for products without assigned value. The fix ensures that all products are considered during valuation replays, resulting in accurate inventory accounting. This prevents discrepancies in reported stock values.
Original PR description
Usecase to reproduce: - Create two average product A and B - Delele all the product.value for B - Receipt both units at 10$ - Set the price unit of A to 20$ - Receipt both units at 20$ Check the value at date to trigger a replay of valuation Expected behavior: - Product A -> 20 units at 20$ -> 400$ - Product B -> 20 units at 15$ -> 300$ Current behavior: - Correct for A but B is 200$ It happens because when we replay the history, we check for the minimal product.value and we replay valuation from this date (with moves). However in our case, the product B has no product value and thus we replay from A product.value. However it arrives after the first receipt of B and thus we only consider the second receipt for B. This is fixed by ensuring we have a product.value for all products in order to add a date domain on the moves. Forward-Port-Of: odoo/odoo#255787
This update ensures that binary files uploaded through forms now store their original filenames. Previously, this feature was limited to manual fields, causing issues with mimetype guessing and hindering migration to SaaS modules. This change improves file handling and reliability.
Original PR description
Description of the issue/feature this PR addresses: Since [1], studio binary fields uploaded through a form store their filename. Due to the condition of [1], this behaviour is restricted to manual…
Description of the issue/feature this PR addresses: Since [1], studio binary fields uploaded through a form store their filename. Due to the condition of [1], this behaviour is restricted to manual fields, which limits the usage of those fields in standard and is particularly problematic when Saas modules that use this feature are migrated to Python. Not storing the filename can lead to incorrect mimetype guesses. Given that a more appropriate condition has already been added in [2], it should no longer be necessary to restrict this feature to manual fields. This commit removes that restriction to allow standard binary fields to store their filename when uploaded through a form. Current behavior before PR: When uploading a file to a non-manual binary field that has a related '_filename' field, the filename will not be stored, which can later lead to incorrectly guessing the mimetype of the file. Desired behavior after PR is merged: Uploading a file to a non-manual binary field that has a related '_filename' field stores the filename of the file. Task related to this issue: https://www.odoo.com/odoo/project.task/5917543 [1] https://github.com/odoo/odoo/commit/0e2f3b144581c47d25a99cecdd7e058a3d55bcc3 [2] https://github.com/odoo/odoo/commit/1bcab2f42eebf98127416e54f31cd6e351938b7f --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268014
This update fixes an issue where the /checklist command was not functioning in the CRM's activity note editor. The change restores the checklist functionality, ensuring users can easily add and manage checklists within their activity notes. This improves workflow efficiency for tracking tasks and follow-ups.
Original PR description
In 19.0 the /checklist command does not appear in the activity note editor. The note fields of activities, the schedule activity wizard and activity plan templates were moved to widget="html_mail" by…
In 19.0 the /checklist command does not appear in the activity note editor. The note fields of activities, the schedule activity wizard and activity plan templates were moved to widget="html_mail" by https://github.com/odoo/odoo/commit/2f61560ab45576191394510016c38a7442b95ec8, https://github.com/odoo/odoo/commit/35d673dccdc0f0c2a06cb0732e3148370f035af9 and https://github.com/odoo/odoo/commit/4d3a6156d07dc47bb2399d1907e2a47869827933 to render attachment overviews statically instead of with embedded components. html_mail is made for email bodies, it inlines the content on save and it disables the checklist since https://github.com/odoo/odoo/commit/f94f695ca9fc9a894a837640df2e4160e561f1ab because checklists do not survive the inlining of outgoing emails. The activity note is not an email body, so it gets both side effects for nothing. Keep the default html widget on these note fields and pass the embedded_components option as false, which is the only part of html_mail the attachment commits needed. The checklist works again, the note is not inlined on save anymore, and the attachment overview still renders statically. The widgets used for real email bodies keep the checklist disabled. Steps to reproduce: 0. Install the CRM module. 1. Open a lead from the CRM pipeline. 2. Click Activity to open the Schedule Activity dialog. 3. Click inside the Log a note field and type /checklist. => Checklist doesn't appear. Ticket [link](https://www.odoo.com/odoo/project.task/6139971) opw-6139971 Forward-Port-Of: odoo/odoo#261071
3 changes
Resolved issues and error corrections
This update resolves an issue where focusing on the end date within a daterange widget incorrectly modified the start date. The fix ensures that the correct date field is updated when a user interacts with the input fields, improving data accuracy and reliability. This change impacts the daterange widget functionality.
Original PR description
When a daterange widget is used (e.g., `deferred_start_date` coupled with `deferred_end_date`), focusing on the end date input was incorrectly modifying the start date field. This occurred because the `focusin` event was resolving the field name from the parent widget rather than the specific input focused. This commit updates `onFocusFieldWidget` and `getFullFieldName` to accept and evaluate the specific `event.target`. For `o_field_daterange` widgets, it now extracts the correct field name from the target's `data-field` attribute, ensuring the correct date field is updated. opw-6250048 Forward-Port-Of: odoo/enterprise#120684
Code cleanup and technical improvements
This update enhances the Odoo system by making a key component, `fragment_to_query_string`, more accessible to all modules. Previously, it was limited to the auth_oauth module, but now it's been updated to be more reliable and compliant with industry standards, improving overall system stability and testability. This change ensures consistent behavior across the Odoo platform.
Original PR description
## [MOV] odoo,auth_oauth: fragment_to_query_string The aim of this commit is to allow module unrelated to auth_oauth to import fragment_to_query_string. task-id: 6071808 ## [REF] odoo: JUC compliant fragment_to_query_string The aim of this commit is to make `fragment_to_query_string` JUC compliant by: - documenting the behavior - clarifying the code - reducing possible side effect - testing the behavior - add a route to be able to test it manually task-id: 6071808 Forward-Port-Of: odoo/odoo#270834
This update ensures that the system continues to accurately use a recently moved function related to handling URLs. The change is a technical refactoring to maintain consistency within the Odoo codebase. It doesn't impact users directly.
Original PR description
The aim of this commit is to keep referencing fragment_to_query_string correctly as it is moved into `http.py`. task-id: 6071808 Forward-Port-Of: odoo/enterprise#121019
1 change
Resolved issues and error corrections
This update fixes a potential issue related to how Odoo handles direct debit mandates for bank partners. The change adds a constraint to ensure that direct debits are only created for partners with valid bank accounts, improving data accuracy and reducing the risk of errors in payment processing. This enhances the reliability of our SEPA direct debit functionality.
Original PR description
Forward-Port-Of: odoo/enterprise#120921 Forward-Port-Of: odoo/enterprise#120901
9 changes
New functionality added to Odoo
This update adds a keyboard shortcut to the Pay Now button within the account payment workflows. This will allow users to initiate payments more quickly and efficiently, streamlining the payment process and reducing the time spent navigating the interface.
Original PR description
Self explanatory. No task ID
Enhancements to existing features
This update changes the color of the 'To Review' status badge on employee records from grey to orange. This improves readability, particularly in dark mode, ensuring that HR staff can quickly identify and address outstanding tasks.
Original PR description
The 'To Review' status on employees uses a grey badge ('secondary'), which has poor contrast and is nearly invisible in dark mode.
Update the 'review_state' field options to change '2_to_review' to 'warning' (orange). This ensures the badge is readable in both light and dark modes.
Task: 6289919
Forward-Port-Of: odoo/enterprise#120486
Forward-Port-Of: odoo/enterprise#120268Resolved issues and error corrections
This update corrects a technical error in the Odoo Enterprise payroll module that was causing incorrect cache behavior when rule parameters were missing from the database. The fix ensures that the system correctly identifies missing parameters, preventing errors and improving the stability of payroll calculations. This resolves a potential issue impacting payroll accuracy.
Original PR description
After https://github.com/odoo/enterprise/commit/1ee878fea4e5985852960bb4640a32abfa95ac9e: `_get_cached_parameter_from_code` returns `SENTINEL` when a rule parameter doesn't exist in the DB. `CacheLayer.__getitem__` uses that same `SENTINEL` to detect absent keys. When the stored value IS `SENTINEL`, it is indistinguishable from a missing key; so every subsequent lookup falls through to the parent and raises `KeyError` which `ormcache.lookup()` treats as a miss. applied fix: make _get_cached_parameter_from_code use different object than Sentinel for missing parameters.
This update prevents deleting a batch payment once linked payments have been marked as 'sent' and an XML export file has been generated. This ensures continued compliance with SEPA regulations, which require payments to remain marked as sent. Disallowing deletion maintains the integrity of export files for reporting.
Original PR description
When you create a batch payment, linked payments are marked as sent, and an export file is generated (XML). But if you delete the batch payment, the payments will remain marked as sent, meaning you won't be able to re-generate a new XML file for those payments. As we don't want to unmarked them as sent (we can't for SEPA payments), we decided to disallow the batch payment deletion in those cases. task-6117210 Forward-Port-Of: odoo/enterprise#117748
This update corrects a technical issue in the l10n_ch_reports module that was causing errors during financial report processing. The problem stemmed from a removed subformula not being reset to a default value, leading to incorrect calculations. This fix ensures accurate report generation by setting the subformula value to False.
Original PR description
The subformula was [removed](https://github.com/odoo/enterprise/pull/117601) without resetting its value to False, leaving existing values in the database. This causes errors when processing records that still contain a subformula value. ```.py Invalid subformula in expression "balance" of line "Treasury shares": -sum ``` To prevent these errors, existing subformula values are reset to False opw-6297901 Forward-Port-Of: odoo/enterprise#120663
This update fixes a minor visual issue in the web studio's property tag display within SelectMenus. Previously, tags were limited to 200px, leaving unused space. Now, tags automatically expand to fill the available width, creating a cleaner and more efficient user experience.
Original PR description
Before: Each tag was limited to 200px, leaving available space unused. After: Each tag now expands to 100% of the available width. task-5226503 Forward-Port-Of: odoo/enterprise#120260
This update resolves an issue that caused a traceback when users deleted the last column from a table within the Odoo Report Editor. The fix prevents a technical error by ensuring the editor handles the scenario where a table has no remaining columns gracefully. This improves the overall stability and reliability of the report design process.
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 Forward-Port-Of: odoo/enterprise#119502
This update fixes a display issue where the AI button was incorrectly shown in the Mass Mailing builder but not the Website Builder. The fix redirects patching to the Website Builder, ensuring the AI button appears only when using the website functionality. This improves the user experience for website visitors.
Original PR description
__Problem__ When opening the Mass Mailing builder after the Website Builder, the AI button is still shown. Conversely, if we open the Website Builder after the Mass Mailing builder, the AI button is never shown. This happens because Owl mounts the Builder component only once as long as we don't refresh the page. Since we patch the generic HTML Builder to put the AI button in the sidebar, the state of the first time it's mounted is preserved. __Fix__ Patch the Website Builder directly instead, as we only want the AI button to be available in the website. Community PR: odoo/odoo#270266 task-6189057 Forward-Port-Of: odoo/enterprise#120688
Features or functions removed from Odoo
This update removes a technical field related to how messages are fetched within the Helpdesk system. The change streamlines message access by centralizing control through the mail module, improving efficiency and security. This ensures consistent access to messages across different use cases.
Original PR description
This change removes `website_message_ids` field considering: - Toward using a unique route for fetching the messages, the mail module should be the main gateway to restrict access to messages. Since reading a field that contains the whole messages of a record without pagination is not a good idea and considering what `website_message_ids` does (defining domains depending on the share context), this change moves the domain responsibility to a method on `mail.thread`. - There are some use cases (e.g. reading the comments on slides) where the same restriction as fetch route restriction is needed to get the correct data. Those cases would use a same fetch domain method from `PortalWebClientController`. [Community PR](https://github.com/odoo/odoo/pull/261003)