Daily updates from Odoo
Monday, October 20, 2025
33 changes · master
Security fixes and vulnerability patches
IoT Boxes now check that a database has a valid token before connecting. This helps prevent unauthorized or incorrectly configured connections, improving the security and reliability of IoT deployments.
Original PR description
We added a check to prevent IoT Boxes from connecting to a database if the database doesn't have a valid token. Task: 5177501 Forward-Port-Of: odoo/enterprise#97579 Forward-Port-Of: odoo/enterprise#97531
New functionality added to Odoo
This update adds the ability to import Norwegian SAF-T XML accounting data, helping businesses move audit and accounting information into Odoo more easily. It also improves the existing SAF-T import process by handling Norwegian account code differences and avoiding conflicts when journal codes already exist.
Original PR description
[ADD] l10n_no_saft_import: Allow the import of saft data This commit adds a new module to allow the import of the saft xml data for norway. Plus adding a test for the import. [IMP] account_saft_import: adding hook for account code + fix bug This commit adds a hook method for the account code since in l10n_no_saft, the accountCodes is replaced in the saft_report.xml Correcting a bug when importing the saft and that the code of the journal is already existing. task-5144005
Enhancements to existing features
WhatsApp conversations now manage offline participants in the main discussion channel data, making chat information more consistent across the app. This should improve reliability for WhatsApp-related discussions and reduce inconsistencies in how correspondents are displayed or handled.
Chat contact information is now handled through the channel member record for AI and WhatsApp conversations. This keeps conversation behavior more consistent across messaging features and reduces the risk of mismatched contact details.
Original PR description
task-4675831 PR community: https://github.com/odoo/odoo/pull/230067
This update reorganizes how chat and channel membership information is stored and accessed across Discuss, AI, Live Chat, and WhatsApp. It improves consistency behind the scenes, helping messaging features remain reliable and easier to maintain without changing the core user experience.
WhatsApp discussions now align with the updated way Odoo tracks offline members in chat channels. This keeps WhatsApp-related conversations consistent with the main messaging system and helps avoid display or availability mismatches after the underlying platform change.
Original PR description
This commit adapt the whatsapp code to the move of offlineMembers to discuss channel model. PR community: https://github.com/odoo/odoo/pull/231395
Spreadsheet border handling has been reorganized to make spreadsheet editing behavior more reliable and easier to maintain. This supports consistent autofill behavior in list and pivot spreadsheet views, reducing the chance of formatting issues as the feature evolves.
The Monster recruitment integration apps now use updated icons that match company icon guidelines and Monster's official brand colors. This improves visual consistency and makes the related apps easier to recognize in Odoo.
Original PR description
*: hr_recruitment_integration_skills_monster, hr_recruitment_integration_website_monster Prior to this change, the module icons did not comply with our icon guidelines. They have now been updated to use the Monster logo with official branding colors. task-4724804 | Before | After | |--------|--------| | <img width="1021" height="162" alt="image" src="https://github.com/user-attachments/assets/baf8bff0-deca-49f7-999e-750617302331" /> | <img width="1040" height="184" alt="Capture d’écran 2025-09-29 à 15 45 31" src="https://github.com/user-attachments/assets/9edd5023-9a1e-40c0-806f-01def0c84462" /> |
The Hong Kong payroll form now shows the employer return year only for Original forms. This reduces confusion by hiding an unnecessary field when other form types are selected.
Original PR description
- made the field `year_of_employer_return` only visible when `type_of_form` is Original task-id: 5050409
The payroll menu previously labeled “Resume” has been renamed to “Salary Summary” so users can more easily understand its purpose. This improves clarity and consistency when navigating salary-related information.
Original PR description
The 'Resume' menu label was misleading, as it did not accurately reflect its purpose. It has been renamed to 'Salary Summary' for better clarity and consistency. task-5172597
The IoT module now uses a clearer and consistent name for request session identifiers. This reduces ambiguity in internal communication between IoT components and supports easier maintenance across related systems.
Original PR description
In order to standardize the session id (id to the request received), we renamed all occurrences of old "owner" key to "session_id" Community PR: odoo/odoo#225190
WhatsApp conversations now use the dedicated channel loading method directly. This is a small internal improvement that should make the code path clearer and help maintain reliable access to WhatsApp chats without changing the user experience.
Original PR description
This PR use `discuss.channel` getOrFetch method directly instead of `mail.thread`
Odoo now uses the original line descriptions for most Mexican CFDI credit notes, aligning refund documents with SAT requirements. The fixed generic description is kept only for point-of-sale global invoice refunds, reducing compliance risk while preserving the required PoS behavior.
Original PR description
The SAT specifies how the description of redunded product should be set. Currently, Odoo uses the lines' names as the description for credit notes of normal invoices, but a forced text for the credit notes of global invoices. The actual need is to leave the forced text for credit notes of global invoices made from the PoS. Otherwise, the lines' names should be used. task-5170675
The mail composer now recognizes and highlights links correctly while users write messages. This makes shared URLs clearer and easier to use, while also simplifying the underlying editor setup for easier maintenance.
Original PR description
This commit enables the link plugin in the mail composer so that the link will be properly parsed and hightlighted. This commit also improves the plugin set and clean up the duplicated plugin lists. task-5172795 https://github.com/odoo/odoo/pull/232119
Swedish payment batches can now include both IBAN and local BBAN, Bankgiro, or Plusgiro accounts. When mixed account types are used, the system automatically creates a zip file containing separate payment files, helping businesses process more payments together without manual splitting.
Original PR description
This commit add a new behaviour for batch payments in Sweden. Before this commit: batch payment with mixed payment for iban and bban/bankgiro/plusgiro wasn't allowed After this commit: now if the user create a batch payment with both type of account, we create a zip file with 2 xml files, one for iban and one for bban/bankgiro/plusgiro. Linked:https://github.com/odoo/odoo/pull/230104 [task-5107240](https://www.odoo.com/odoo/project/967/tasks/5107240) Forward-Port-Of: odoo/enterprise#97556 Forward-Port-Of: odoo/enterprise#95463
Links entered in the mail composer are now recognized and highlighted more reliably. The update also simplifies the underlying editor setup, making future maintenance easier without changing the user workflow.
Original PR description
This commit enables the link plugin in the mail composer so that the link will be properly parsed and hightlighted. This commit also improves the plugin set and clean up the duplicated plugin lists. task-5172795 backport - https://github.com/odoo/enterprise/pull/97504 https://github.com/odoo/odoo/pull/232347 Forward-Port-Of: odoo/enterprise#97666
Resolved issues and error corrections
This fix prevents Mexican CFDI and invoice generation from failing when a landed cost linked to a lot has not been validated and therefore has no date. It also stops users from creating landed costs directly from the lot form, reducing the chance of incomplete records causing later document errors.
Original PR description
Previous this commit you are able to create and set a landed cost through the lot form view without validating the landed cost. This caused a traceback later on when generating the CFDI or invoice document when trying to get the formatted dates. Since a non validated landed cost might not have a date, this raised an error. This commit targets to fix this issue by expecting that a landed cost might not have a date and also not allow through the form lot view to create a landed cost target: 19.0 -> master Forward-Port-Of: odoo/enterprise#95476
Starshipit shipping requests now include the customer city or suburb when checking available delivery services. This prevents eligible carriers such as NZ Post Domestic from being incorrectly unavailable due to missing address information.
Original PR description
Current behaviour: --- When using Starshipit, city is not included in the payload sent to the API. This causes an error for some delivery services. Steps to reproduce: --- 1. Install delivery_starshipit 2. Create starshipit Shipping Method (using Starshipit API key) 3. Set up only "NZ Post Domestic" in Starshipit portal. 4. Click on "Select a service linked to your starshipit account" 5. Error: There are no shipping services available Cause of the issue: --- Some delivery services (like NZ Post Domestic) require a city/suburb field. In Australia/New Zealand suburb is used in the city field. opw-5155401 Forward-Port-Of: odoo/enterprise#97212
The project customer preview now hides non-validated timesheets when the invoicing policy only allows validated timesheets. This prevents internal preview users from seeing a different task view than customers see in the portal, improving billing transparency and consistency.
Original PR description
### Issue: Due to this issue, in the project sharing, the customer preview doesn't reflect the actual behaviour of the portal view. It shows non-validated timesheets even if invoicing policy is…
### Issue: Due to this issue, in the project sharing, the customer preview doesn't reflect the actual behaviour of the portal view. It shows non-validated timesheets even if invoicing policy is validated timesheets only. #### To reproduce: 1- Create a db with sale_project and sale_timesheet_enterprise 2- Configure invoicing policy to validated timesheets only 3- Create a service product: - Create on Order: Project & Task - Invoicing policy: Based on Timesheets 4- Create a Quotation for the product and confirm it 5- Open project from smart button 6- Share project with a portal user with Edit access 7- Open tasks, and add two timesheets to the task 8- Open timesheet app, and validate one of the timesheets 9- From project page, click on Customer preview 10- In preview, open the task. You can see both timesheets which is a different behaviour if you view the project using portal user. Using portal user, only validated timesheets are shown. ### Cause: The timesheets are filtered here to only show validated timesheets: https://github.com/odoo/enterprise/blob/8223ed0765c6064b88280656a5ab6b13ca9a431f/sale_timesheet_enterprise/models/project_task.py#L73-L91 However, it is filtered only if user is portal. In customer preview the user is still the internal user, as a result the timesheets will not be filtered. To fix that we can check if project_sharing_id exist in context to filter timesheets. opw-5093339 Forward-Port-Of: odoo/enterprise#97470
This fix restores a missing dependency needed for NACHA payments. Users can once again see and choose the bank account field when preparing NACHA payment files, preventing payment setup issues.
Original PR description
Accidentally removed in a061a2b82a967ca2 which caused the bank account selection field to not show when doing a NACHA payment. (Found when working on task 5052996) Forward-Port-Of: odoo/enterprise#97319
This update adjusts many enterprise module tests so legacy installation behavior is set automatically. It helps keep post-install checks consistent by default, reducing maintenance work and avoiding mismatches in automated validation.
The Belgian payroll salary configurator now checks the active company before applying Belgian-specific salary calculations. This prevents gross salary information from being hidden when users are working outside the relevant Belgian company context.
Original PR description
Gross Salary did not appear previously as the extending function _get_compute_results in 10n_be_hr_contract_salary was returning the l10n_be_wage_with_mobility_budget right away without checking which company we are in. This change made sure before proceeding that we are in the correct active company, Belgian one in our case. task-4987491 Forward-Port-Of: odoo/enterprise#97176 Forward-Port-Of: odoo/enterprise#94905
Reference and selection field values are now sorted in test simulations the same way they are defined, rather than alphabetically by the stored value. This makes automated Gantt-related tests more reliable and better aligned with real expected behavior.
Original PR description
selection and reference fields are not sorted according to the selection value index, but using the value itself. Note: this could be fixed in earlier version, but since it's an API change (of the mock server, but still...), it could break tests of existing custom modules built by the community. Task: 5102923
German POS certification exports now remain valid even when an order has no assigned user. The system falls back to the person who created the order, preventing session closing from being blocked by this recurring data issue.
Original PR description
Before this commit, closing a session was blocked if an order was missing the user_id field during DSFinV-K export generation. Although the exact reproduction steps are not consistently found, this issue is recurrent. This change makes the code more robust by defaulting to the order's create_uid when the user_id is empty or missing, ensuring the transaction export data remains valid. opw-5123890 Forward-Port-Of: odoo/enterprise#97450 Forward-Port-Of: odoo/enterprise#96002
Restaurant owners can now print POS sales reports directly during an active session instead of having to use the backend. This makes daily operations faster and gives managers immediate access to sales information when they need it.
Original PR description
- Restaurants owners need to be able to print a sales report during a session. Before this commit, they were only available to print the report via the backend. task-id: 5076080 Forward-Port-Of: odoo/enterprise#94181
Fixed an issue where opening a tax report from a Luxembourg return for a previous month incorrectly reset the date filter to the current month. This helps users review and file past-period returns with the correct reporting dates.
Original PR description
This commit solve an issue when being on the Luxembourg and doing a return on a previous month like may and clicking on the link to the tax report on the return, the date filter was wrongly set to this month. no task id
Asset names can now be shown and imported in the user's selected language. This improves usability for companies operating in multilingual environments and helps keep asset records understandable across teams.
Original PR description
To support multilingual environments, this commit refactors the 'name' field on the asset model with `translate=True`, converting it to a standard, translatable text field. This allows asset names to be imported and displayed in the user's selected language. task-5122900
Bank reconciliation now applies early payment discounts even when the bank statement balance is higher than the invoice amount, reducing manual adjustment work. Batch payments also handle eligible discounts, partial payments, and currency differences more reliably, improving accuracy in payment matching.
Original PR description
It is now possible to have an EPD applied when adding an invoice in the bank rec widget when the invoice amount is less than the statement line remaining balance (no need to have the exact amount than the invoice + EPD anymore). Also, when adding a batch payment with payments with no moves, it will also check if the invoice covered a payment is eligible for EPD, and apply it if it's the case. task-4681366
The asset list was changed back so users can open the full creation form when they click New. This restores the expected workflow and avoids confusion when creating new assets.
Original PR description
The previous change to make the asset list view editable caused a problem where the "New" button no longer opens the form view. This commit reverts that change to restore the intended functionality. Forward-Port-Of: odoo/enterprise#97483
Error messages in US payroll and NACHA payment flows now use the same bank field label that users see on the form. This makes it easier for users to identify which bank detail needs to be completed or corrected.
Original PR description
The label shown in the res.partner.bank form view depends on the show_aba_routing field. If we don't show the correct label in these error messages it's not clear to the user what field they have to fill. task-5052996 Forward-Port-Of: odoo/enterprise#97510 Forward-Port-Of: odoo/enterprise#97318
This update makes IoT payment terminal logs more complete and consistent. Each transaction step now includes identifying details, making it easier for support teams to trace issues and resolve payment problems faster.
Original PR description
This PR improves the logging of terminals used with iot box. We will now get a log for every step of a transaction along with some information identifying the transaction Forward-Port-Of: odoo/enterprise#97216
Code cleanup and technical improvements
AI agents are now identified separately from regular user activity, so they no longer appear as if they have a live presence status. This keeps availability indicators focused on real users while still allowing the interface to recognize AI agents correctly.
Original PR description
The `im_status` field should only hold information regarding the activity of a user, and AI agents don't have activity in that sense as they are always online. We therefore set the `im_status` of ai agents to `bot` (signifies opting out of the activity tracking) and pass the `agent_ids` field client side as a mean of identifying AI agent partners.
The Knowledge app no longer uses a custom attachment-sharing step for article discussions because that token handling is now covered by the standard platform behavior. This reduces duplicated logic and helps keep access handling consistent for public and portal users.
Original PR description
This commit removes the `_to_store` override on `ir_attachment` which adds an access_token for public/portal users in knowledge article threads. Token handling is managed by the _to_store_defaults raw_access_token since [1]. [1] https://github.com/odoo/odoo/pull/204830 task-4676413