Daily updates from Odoo
Thursday, September 4, 2025
24 changes · master
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