Daily updates from Odoo
Thursday, September 4, 2025
34 changes
New functionality added to Odoo
Odoo’s Australian BAS reports now cover additional sections needed by specific industries, making it easier for businesses to prepare more complete activity statements. The update also adds missing tax definitions required to populate those new report areas accurately.
Original PR description
Update the base report we have in Odoo and add support for the different missing sections that are needed for specific industries. Also adds a few missing taxes required to fill those sections. task-4272557
Enhancements to existing features
Smart scheduling no longer highlights only the tasks it planned, so users can immediately see the full set of scheduled tasks. This gives project planners a clearer overview of their workload after using smart scheduling.
Original PR description
Before this commit, when the user uses the smart schedule on tasks to schedule his tasks, a filter is added to highlight the tasks planned by the smart schedule. The problem is the user would prefer directly having an overview of all tasks planned instead of only see the ones planned. This commit removes the highlight tasks planned by the smart tasks to let the user have an overview of his tasks planned.
Kenya payroll now supports reporting Tier 3 pension contributions in the NSSF report using the official code 103. Businesses can also choose whether Tier 2 and Tier 3 contributions are included in the government report or handled through a third-party insurance provider.
Original PR description
In Kenya, you can report your pension contribution to the government (NSSF Report). So we add TIER 3, with code 103, to the report which is for pension. We also add the possibility to choose for TIER 2 and TIER 3 if we want to have it on the NSSF Report or if it's given to a third party insurance company. Task: 5003604
Odoo Studio receives several usability improvements that make configuring forms, fields, and menus more consistent. Related fields now inherit clearer labels, technical names are normalized, and tag color settings display correctly, reducing setup friction for business users.
Original PR description
- Removing properties from chatter - Added related field will take by default the string of the related field - Correction of the property 'Color field' for the many2many_tags widget. The value wasn't showing. - A new attribute is available for the supportedOptions. It's 'isRelationalField'. This attribute is used for the options that are type: "field". When it's set to true, the list of fields for the selection will come from the relation model and not from the viewEditor model. - The techinal name is now normalized - and other minor UX improvements TASK-ID: 4936789
AI-powered server actions and document workflows were made clearer, safer, and easier to use. The update improves prompt naming, strengthens validation and prompt-injection resistance, enhances document AI messages and demo data, and adds tools for sequencing and tagging documents.
Original PR description
Purpose ======= Now that we have 2 prompt field on the server action, we want to be more precise in their names, and so we rename `ai_prompt` to `ai_update_prompt`. Resize and truncate field stored in database. Add test about access check on action. Improve the prompt used for AI action to make it more difficult to abuse prompt injection with small input. Improve the validation of the JSON schema. Task-4989962
Sales commission plans can now set targets by payment date, making it possible to define shorter target periods, such as monthly goals, while calculating commissions over longer periods like quarters. This improves achievement reporting with clearer commission rates, target rates, and target totals by payment date.
Original PR description
Currently it is not possible to define target on smaller period than commission period. Example: give monthly target to sales but computing commission per quarter. Adding the payment date on the commission plan target allows to compute other metrics on achievements reports: - commission rate - target rate - sum of commission target per payment date All these values could not be easily deduced before this commit task-4996531
Users can now see and load Knowledge templates that have not yet been added under the current article. The update helps teams add optional sub-templates when needed while automatically including any missing parent templates for proper structure.
Original PR description
When the user clicks the "Load a Template" button in the article index block, the template gallery now displays all the templates that have not yet been loaded under the current article. When selecting a template, the system partial loads it: 1. Parent templates will be loaded if they have not already been loaded. 2. Child templates will not loaded. This new algorithm ensures that users can load sub-templates that haven't been loaded by default (see: `template_child_default_create`). It will be used in the `accountant_knowledge` module to help people complete their reports with templates we considered optional. Task-4989809
Users can now manage multiple schedule blocks more safely and efficiently: bulk deletions require confirmation, the delete option only appears when records are selected, and Ctrl-based selection supports working across several areas at once. Work entries are also consistently grouped by employee, making the view more predictable for HR planning.
Original PR description
We bring some improvements to the multi creation/deletion feature of the gantt view. Most notably: - Deletion of records has now to be confirmed - The button "Delete" is not displayed if no record is in the selected zone - Control can be used to select multiple block of cells with the usual logic. We also refactor the work_entries_gantt view and make it always be grouped by employee_id. Task ID: 5003199
This update improves how Odoo checks access to linked records, reducing false permission errors when users work with products, subscriptions, documents, appraisals, reports, appointments, and related business flows. It also tightens several module-specific permission behaviors so users can complete allowed actions without unnecessary administrator rights.
Original PR description
odoo/odoo#217277
Barcode app users can now search for transfers using a packaging barcode, not only a product, package, or tracking barcode. This saves time when the product barcode is hidden inside packaging, and the update also improves related barcode screen messaging and demo message behavior.
Original PR description
Description of the issue/feature this PR addresses:
As an operator with a lot of transfer/operations to do, being able to filter based on a product barcode you have can save a lot of time but sometimes you only have access to the packaging barcode and you don't want to open the packaging to have access to the product barcode.
Current behavior before PR:
product_uom_id domain is empty if product_id or product_ids not in context
Desired behavior after PR is merged:
product_uom_id domain is TRUE if product_id or product_ids not in context.
This is not used in the community PR but was useful before when I was filtering moves on packaging barcode:
This line was not working before this PR
`('move_ids.product_uom.product_uom_ids', 'in', [product_uom.id]),`
task: 4729518
Community PR: https://github.com/odoo/odoo/pull/213852
I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)Bank reconciliation now supports keyboard shortcuts for moving between transactions, opening or closing details, using key actions, and toggling the chatter. This helps accounting users process bank transactions faster with less mouse interaction while preventing accidental multi-selection.
Original PR description
- Up/Down navigation to change transaction. - Enter: select card -> fold/unfold. - Right/Left Arrow unfold/fold. - ALT+SHIFT+C to open/close chatter. - ALT+SHIFT+Enter = Primary button of the line (can be a duplicate of one under, but if primary is reconcile allow ALT+SHIFT+Enter and ALT+SHIFT+2 for it) - Standard shortcuts on buttons, only applies to the selected card -- ALT+SHIFT+1 = Set Partner -- ALT+SHIFT+2 = Reconcile -- ALT+SHIFT+3 = Set Account -- ALT+SHIFT+4 = Payable -- ALT+SHIFT+5 = Receivable -- ALT+SHIFT+7 = Reco Model 1 of the list of reco model -- ALT+SHIFT+8 = Reco Model 2 of the list of reco model -- ALT+SHIFT+9 = Reco Model 3 of the list of reco model - Prevent multi-selection with mouse and space. task-4965265
Appointment scheduling now supports slots that span multiple days and presents them more clearly to customers, such as showing date ranges for all-day bookings. All-day bookings also create all-day calendar meetings, and booking confirmations show durations in a more user-friendly format.
Original PR description
Before we only supported appointment slot for one full day. With the possibility to create slot encompassing multiple days, we improve the info displayed for the slot to the user. If a "allday" slot encompassed only one day we still display "All day" for the slot. The other allday slots (multi-days) display the days as: "Mon 4 - Tue 5". The timezone chosen don't impact allday slots. They are only based on the timezone of the appointment type. In the other case of multi-days slot, they are displayed like alldays slots like before. Additionally to this: - Booking an allday slot create an allday meeting in backend. - Display duration in a user friendly manner instead in hours on the validation page. task-2822534
Document users can now access common actions directly from each row in the list view by hovering over it. This makes frequent tasks like downloading, sharing, renaming, opening folders, or viewing details faster and easier without navigating away.
Original PR description
Purpose: add quick access buttons on each row in list view to ease access to commonly used actions by simply hovering over the row. Task-4794981
The planning Gantt view now retrieves employee working periods together with the main schedule data. This reduces extra loading work and should make planning screens render more quickly for users.
Original PR description
We fetch working periods along the main gantt data. This should make the planning gantt view render more quickly.
Accounting reports grouped by account code now also display the matching account name for the current company. This makes consolidated multi-company reporting easier to read and helps users understand which account each grouped code represents.
Original PR description
In the current consolidation, you can make multi-company accounts and assign a code for each company. But a code must be unique inside each company. So it is not designed to map multiple accounts from a second company into one account of a first company. It is actually possible to achieve that effect by not making the accounts of the second company belong to the first company, and still make the code mapping. So you can make several accounts from the second company, map to the same code for the first company. Thus grouping by account codes become interesting for the accounting reports, in order to get a view of that consolidation. In order to make this reporting more clear, the name of the account corresponding to the account code (in the current company) is now shown when grouping by account code. task-4801891 Forward-Port-Of: odoo/enterprise#93772 Forward-Port-Of: odoo/enterprise#86403
Appointment bookings are now created even when the upfront payment product is priced at zero, as long as it is configured to create related work on order. This helps teams offer free or no-cost appointment options without losing the automatic booking workflow.
Original PR description
- Previously, appointment bookings were only created if the upfront payment product had a price greater than 0. - With this improvement, the system now creates a `calendar.booking` as long as a product is configured to `create on order`: a task, a project, or a project & task, regardless of the product's price. task-4731757
External users who receive a Knowledge article link copied from an internal user's browser are now automatically sent to the appropriate portal or public view. This reduces access confusion and makes shared article links more reliable without requiring employees to use a special share link.
Original PR description
In practice, when an internal user edits an article and wants to share it, they often share the URL from their browser's address bar rather than using the share links in the share panel. The issue is that external users who click this link cannot access the article via the backend. They are hence unable to access the article even though they could access it via the Knowledge portal or public view. To address this, a redirection to the main backend controller has been implemented that automatically sends non-internal users attempting to access the Knowledge backend view to the Knowledge portal or public view. With this redirection, the backend link also becomes functional for them. task-4797702
The mail composer now restores saved draft content using the rich text version, so formatting is preserved when users return to a message. It also keeps the compact and full composer views synchronized, reducing the risk of lost or inconsistent email content.
Original PR description
This commit updates the mail composer to use the composerHtml for restoring content, ensuring that HTML content is preserved and properly rendered. This commit also includes synchronization of the content between the small composer and the full composer. task-5022243
EC Sales List reports now include a standard Reset button across all related versions, making it easier for users to clear or restart report data consistently. The Croatia-specific custom button was removed because the new shared button now covers that need.
Original PR description
We want a Reset button for the EC Sales List. Put it by default for all children of this report. Removed the button from HR that was useless anyway and as the default one will cover.
Text messages are now available directly from the VoIP app, making them easier for internal users to find and review. Users can only view messages they sent, while administrator-specific options remain limited to settings areas.
Original PR description
Purpose: To move text message from technical to VoIP app in readonly mode while keeping admin specific features in Settings/Technical menu. Specification: This commit introduces the following changes: - A new menu "Text Messages" is added under the "VoIP" app. - The "Text Messages" menu is accessible to all internal users but in readonly mode. - Users can only view the text messages they have sent. - VoIP Provider menu is removed from Settings/Technical menu. Task-5053210
Payroll teams can now manage recurring payroll inputs through employee payroll properties, making it easier to apply the right salary rule inputs consistently. This helps reduce manual setup on payslips and improves accuracy when handling employee-specific payroll items.
Appointment events now include customer booking details and question answers directly in the event description, making them easier to view from calendar, Gantt, POS, and external calendar popovers. Events can also be automatically named using the attendee and appointment type when no custom title is provided, helping staff identify bookings faster.
Original PR description
Purpose ======= Improve event description by adding the booker details and questions answers so that these info can easily be accessed from the calendar popover and external calendars description.…
Purpose ======= Improve event description by adding the booker details and questions answers so that these info can easily be accessed from the calendar popover and external calendars description. Displaying the description in the gantt and POS popovers for quick access. Autonaming event with "attendee name - appointment type name" when there's no event name set and there's one attendee in the partners which is not a staff users of the appointment. Technical ========= Currently, at event creation, no description is saved into the event. The get_attendee_description method is used to dynamically generate the description only when it's needed to have up to date information. However now that the description needs to be displayed on every popovers, the event description field have to be populated at creation. So bringing back the previous behavior where the description was generated based on the form values and directly set on the created event (revert of https://github.com/odoo/enterprise/pull/47471). A dynamic solution was investigated but couldn't be implemented: - Populating the description field while still using the dynamic method isn't a solution. Now that the description is displayed everywhere there could be misunderstandings and data inconsistencies between what is shown to the user on the front-end using the dynamic method (validation page + mail templates) and what is show on the back-end using the description field. - Changing the description field to a computed field is a bad idea as the user custom notes entered manually in the description could be lost at re-computation. There's no way to parse what has been manually added to what needs to be re-generated. - Tried to introduce a new computed field for the dynamic description part. However external calendars API only have one dedicated html attribute meaning we would have to merge the manual and dynamic description when syncing from odoo -> external calendars but there would be no way to differentiate between the 2 descriptions when syncing back from external calendars -> odoo. Conclusion is that it's better to have a static description generated at creation. If some infos were to be changed like the answers to questions or partners details, the related info will need to be manually updated on the description via the event form. Task-4759201
The import flow now detects the current action automatically, so users no longer need extra URL or setup details to import records. After import, records open in the same relevant view context, making review and follow-up more consistent.
Original PR description
This commit introduces two improvements to the import client action. 1 - The import client action will now automatically deduce the current action. This means that the active model is no longer needs to be included in the URL or in the client action parameters. 2 - The import client action will now display the imported records in the correct view. The views used are those of the current action. part-of task-id https://github.com/odoo/enterprise/commit/501384872299ed38f5521f2fa76ed3da1fbbdc45 related PR: https://github.com/odoo/odoo/pull/222793
Bank reconciliation can now match more payment types to bank statement lines using the end-to-end transaction identifier carried through the banking process. This helps reduce manual matching for payments without accounting entries or linked invoices, improving reconciliation efficiency and accuracy.
Original PR description
The aim of this commit is adding the possibility for the try auto reconcile feature to match payment without entry and single payment (no entry / no bill/invoice) with bank statement line by using the end to end uuid. This end to end uuid is a special key generated when the payment is created and forwarded through the whole banking process to identify a bank transaction. task-5033789
Luxembourg reporting now includes guided submission wizards that provide users with the files and steps needed to complete tax return and EC sales list submissions. This makes the process clearer and reduces manual effort or uncertainty when finalizing required filings.
Original PR description
This commit aims to improve the way reports are submitted by adding a wizard providing users with the necessary files and steps to finalize their tax return and ec sales list submissions. Task ID: 4893967
Resolved issues and error corrections
This update fixes rental planning so order dates, planned shifts, and online availability are kept aligned when users reschedule slots or change rental periods. It also improves the planning workflow with clearer confirmations, better filtering of rentable products in the shop, and fewer incorrect or duplicate planning actions.
Original PR description
Forward-Port-Of: odoo/enterprise#91801
The barcode transfer workflow now avoids automatically placing newly added product lines into a new package by mistake. The setting for showing complete packs has also been moved to the Barcode App area, making it clearer that it controls barcode display behavior.
Original PR description
Various fixes following the pack in pack introduced in odoo/odoo#203987 Summary of the changes: - Move the `Show entire packs` in the 'Barcode App' tab in the Picking Type form - Fix an issue where creating a move line through the barcode app would automatically put that line in a new package.app. Task-4314600 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Tax return checks are refreshed when users open them, so outdated warnings such as draft entries no longer remain after those entries are changed. This gives users a more accurate view while avoiding unnecessary performance impact in the Tax Returns overview.
Original PR description
Before, when opening a Return that had bypassed checks such as Draft Entries, and we had deleted or confirmed those entries it wouldn't have refreshed the check number and would still display that there are draft entries. Now, we are forcing the check to be refreshed when someone wants to see them as to not crash the performances when someone opens the Tax Returns Kanban view. task-4850581 Forward-Port-Of: odoo/enterprise#93664 Forward-Port-Of: odoo/enterprise#90187
This fix prevents portal users from becoming owners of Documents spreadsheets because they cannot use spreadsheets in edit mode. It helps keep spreadsheet ownership aligned with users who have the necessary internal access, reducing permission-related confusion.
Original PR description
Following the discussion I had with @flch-odoo regarding https://github.com/odoo/enterprise/pull/92134 , Since Spreadsheets can not be shared in edit mode to non-internal users, we prevent them from becoming owners. opw-4753670 Forward-Port-Of: odoo/enterprise#93800 Forward-Port-Of: odoo/enterprise#92409
Danish Intrastat and EC sales list reports now round figures to whole units by default, matching government reporting requirements. Users can still view decimal values in the interface when needed, but official export files are always rounded for compliant submission.
Original PR description
This commit will change the options of the reports so that we have a rounding in units since the intrastat and ec sales list report must be rounded. This solution still allows people to have the report with decimals if needed task-4948271 Forward-Port-Of: odoo/enterprise#93783 Forward-Port-Of: odoo/enterprise#91268
Bank transaction matching now avoids treating foreign exchange fees or similar bank charges as partial payments. It also requires closer matches between payment references and invoices, reducing incorrect reconciliations and helping accounting teams process bank statements more reliably.
Original PR description
In case of foreign payment using a bank account in another currency, banks can reflect the foreign currency exchange fee on another bank account belonging to the company and in its main currency. Fr…
In case of foreign payment using a bank account in another currency, banks can reflect the foreign currency exchange fee on another bank account belonging to the company and in its main currency.
Fr example: in a EUR company having in the same bank (e.g ING) both an USD and a EUR account, making a payment using the USD bank account gets you effectively 2 bank transactions while you initiated only one:
- the payment in the USD account and
- the currency diff fee in the EUR account.
In this particular use case, the communication on the currency diff fee reflects the one from the payment and, depending on the reconciliation order, that currency diff could be taken as a partial payment
because we were matching on the words in payment_ref regardless of the currency used, while it shouldn't and must be processed as a bank fee.
The outstanging payments are now only matched when the account.payment memo and the statement line payment_ref exactly match, and if the journal is the same. The algorithm for invoices matching doesn't change except we explictly remove the outstanding accounts from the list of reconcilable accounts to search on.
Previously, a match between an invoice ref and a transaction payment_ref could occure even if the matching word wasn't complete.
E.g: invoice ref: INV/2025/01/10
transaction payment_ref: INV/2025/01/100
To be sure this isn't the case anymore, we check that the matching words are properly surrounded by a "finishing character".
task-5023163
Forward-Port-Of: odoo/enterprise#93016
Forward-Port-Of: odoo/enterprise#92950Odoo Studio now correctly handles the special technical access group when setting field visibility. This prevents fields from unexpectedly disappearing and lets users manage these visibility settings consistently in and out of debug mode.
Original PR description
Steps to reproduce ================== - In debug mode - Go to Contacts - Open any record - Open studio - Click on any field - Add the "Extra rights / Technical Features" group to "Allow visibility to…
Steps to reproduce ================== - In debug mode - Go to Contacts - Open any record - Open studio - Click on any field - Add the "Extra rights / Technical Features" group to "Allow visibility to groups" => The group is not displayed as a tag - Restore the view - Now without debug mode (?debug=0), repeat the same steps => The field disappears, we need to toggle "Show Invisible Elements" to see it again Cause of the issue ================== https://github.com/odoo/odoo/pull/179354/commits/15aeaf88c268f047b8b83a5aa66f5da246c2b675 When calling get_views, the "base.group_no_one" is removed from the groups attribute and "invisible" is set to true if we are in debug mode. Solution ======== Adding "base.group_no_one" is still the way to have the expected behavior for now. We override some ir.ui.view functions when in studio to be able to edit it. According to the docstring of _postprocess_debug_to_cache, this feature is temporary. Another solution will be needed in the future. opw-4969262 Forward-Port-Of: odoo/enterprise#93435 Forward-Port-Of: odoo/enterprise#91647
Odoo Sign now validates uploaded PDFs more reliably so unsupported encrypted files are rejected before signing. This prevents users from reaching a server error when completing a signature flow, improving reliability for document signing.
Original PR description
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following…
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following [pdf](https://drive.google.com/file/d/1M0_VzWLzv-lSZ-IlI9Zmx-M7jFGvtJJj/view?usp=sharing)> Sign the document using `Sign now` * Validate and send completed document `AttributeError: 'NoneType' object has no attribute 'seek'` **Cause:** This occurs because [1] returns `None` to the variable `output` at [2] which in turn passes the `None` value to [3] causing the error. Error occurs in python 3.12+, because it does not throw an exception in `_check_pdf_data_validity`. **Solution:** * Add a validation to prevent upload of unsupported files. [1]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_document.py#L242-L243 [2]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_completed_document.py#L33-L34 [3]: https://github.com/odoo/odoo/blob/033c7a63bdf3d10d9d2c5084959fd34f52011bea/odoo/tools/pdf/signature.py#L51 **Sentry-6784800544,6802557168** Forward-Port-Of: odoo/enterprise#91766
The Dutch tax closing process now uses the updated report label when calculating rounding. This prevents tax closing entries from incorrectly reducing the amount to pay or receive to zero, helping businesses keep accurate tax balances.
Original PR description
In this commit[^1] they reformatted the Dutch tax report, renaming the expression labels of the lines. The functionality that does the rounding of the amount to pay/receive depends on that label to compute the correct rounding amount. Currently the Dutch tax closing entry will always end up with a balance to pay/receive of 0.0 because of that (the whole balance is "rounded"). This commit fixes that by pointing the rounding logic to the new expression label used on the total line. [^1]: https://github.com/odoo/odoo/commit/6078dafa68db120a3bf20e0c3e33b3886798985d