Daily updates from Odoo
Thursday, August 21, 2025
14 changes · master
Enhancements to existing features
Users can now copy and paste carousel figures in Odoo spreadsheets, making it easier to reuse visual spreadsheet content without rebuilding it. This improves day-to-day spreadsheet editing and reduces manual work when preparing reports or dashboards.
Original PR description
This commit makes the spreadsheet clipboards work for carousel figures. Task: [5002886](https://www.odoo.com/odoo/2328/tasks/5017194)
Adds Latvia-specific EC Sales List and Intrastat support linked to VAT return submission. Users get clearer submission guidance, PDF access, filing deadlines, frequencies, and Latvian translations to help meet local reporting obligations.
Original PR description
Following the implementation of the Tax returns feature in 18.3 which was focused on the general implementation and Belgium, we want to add the specification for other country and in this case Latvia. EC Sales List is a part of this, with VAT Returns as the EC Sales List is generated when the VAT Return is submitted. Intrastat is a part of this which is generated when the VAT Return is submitted. We are showing modals with the instructions as well as a Download PDF button to make it easier for them to have access to the PDF since it's important for the users to have the instructions present when submitting those documents. This also includes the deadlines and frequencies for the generation of those documents, and also the translation of the instructions. task: 4893953
The referral buttons on job pages have been reorganized so the main Job Page action stays prominent, while sending and sharing options are grouped into clear dropdowns. This makes referral actions easier to find and gives the interface a more consistent, polished layout.
Original PR description
Changes - Kept "Job Page" as the first button. - Grouped "Send" actions under a dropdown - Grouped "Share" actions under a second dropdown - Standardized icons and alignment for consistency Task ID: 5017390
Payroll salary rules now pass tax information to accounting entries instead of relying on account tags. This improves payroll tax reporting, especially for Australian payroll, by allowing relevant amounts to be included correctly in tax closing entries.
Original PR description
Previously, account tags could be set on salary rules, and would be forwarded onto the corresponding journal items when the payslips are generated and translated into accounting. However, it was not the best way accounting-wise, especially if we want some amounts to be reflected in the tax closing entry (only a tax can do that, not tags). task-4479740
Bank reconciliation can now create separate automatic matching rules for the same account when statement descriptions differ. This helps accountants get more accurate suggestions from repeated transactions such as rent payments across different months.
Original PR description
In the community pr, we removed the uniqueness constraint on the name of a reco model. Indeed, when doing a set account on multiple statement line, we check if there is a common substring and create…
In the community pr, we removed the uniqueness constraint on the name of a reco model. Indeed, when doing a set account on multiple statement line, we check if there is a common substring and create a reco model if there is one. But the reco model created has the name of the account. Which means that we couldn't have two automatically generated reco model for the same account. This commit will remove the check to see if a reco model already exist for that account. Since we now want to have the possibility to have different reco model for the same account. Changed the name of the reco model created to avoid having 2 reco models using the same account that have the same name. Also change the way we compute the longest substring because it was not working for all cases. For example: Let's make 3 statements lines: Rent March, Rent May, Rent April. The current method will get the longest substring between the two first which is Rent Ma and then compare with the third one. But the longest common substring should have been Rent. task-4876374
Users working with marketing automation mailings can now open the complete mailing form instead of a small dialog. This makes it easier to design and edit mailings with access to the full set of options in a more comfortable workspace.
Original PR description
Purpose ========= To provide users with easy access to the complete form view of mailing, ensuring a comfortable design experience. Specification ============= This commit modifies linked action and 'create and edit' for the mailing field to open full form view instead of dialog. Task-3901336
Replenishment from the Master Production Schedule now carries the selected bill of materials into the manufacturing order. This helps ensure production uses the intended components and process when a product has multiple manufacturing options.
Original PR description
Before this commit, on replenishment triggered a MO without considering the BoM on that product. Now `bom_id` is passed as one of the values in the procurement to make sure the correct BoM is used in the manufacturing order. Task: 4920000
Message composer drafts now store content as HTML so plain text and rich text composers can use the same draft field. This improves consistency across messaging workflows and supports richer draft handling without changing the user-facing process.
Original PR description
This commit updates the text field in composer model to use HTML instead of plain text. This change is made to ensure that the html composer can share the same field as the text composer. Also, this commit renames the text field to draftContent in a variety of places. https://github.com/odoo/odoo/pull/223397
Users can now copy and paste carousel figures within Odoo spreadsheets using the standard clipboard workflow. This makes it easier to reuse spreadsheet visuals and reduces manual rebuilding when preparing reports or dashboards.
Original PR description
This commit makes the spreadsheet clipboards work for carousel figures. Task: 5002886
Appointment setup now makes one-off flexible availability easier to create and manage directly from the appointment form. Businesses can apply normal booking restrictions, such as minimum notice and assigned users or resources, to these flexible slots while benefiting from cleaner filters and a simpler booking calendar.
Original PR description
PURPOSE ======= Some users would like to use unique slots instead of having recurring ones. This can only be done from the share availabilities button in the calendar view. While the appointment can…
PURPOSE ======= Some users would like to use unique slots instead of having recurring ones. This can only be done from the share availabilities button in the calendar view. While the appointment can be modified, it is not intuitive to do it that way. We want to make the 'custom' appointments easier to use and accessible. MAIN CHANGES ============ As 'custom' appointment type means 'flexible' schedule and vice versa, we do not store any more field. Instead, we use an editable computed selection field that allows the user to switch between options with the radio widget, and update category and slots accordingly in the onchange and inverse (on category) methods. As custom appointments are likely to get more frequent, and to be used in various contexts, we now allow restrict_to_x_ids for unique slots and effective min_schedule_hours. NEW SLOT CONSTRAINT =================== Since unique slots are easier to user, let us add a sql constraint to ensure that the start_datetime and end_datetime are set for the unique slots, and that start_datetime <= end_datetime. We make sure we correctly update the slots when changing the category in the appointment type form (see onchange and inverse methods) OTHER CHANGES ============= - In a separate commit, remove chevron counters and related code as deemed low-value and disposable. - New 'Flexible' filter and 'recurring' renamed to 'weekly' - Some tests are added to ensure constraint and form reactivity on category change. For options as well. UPGRADE ======= - We remove the 'invitations' submenu in the configuration that allowed to see all 'custom' appointments. It is not relevant anymore and is replaced with an available filter on the appointment.type search view. We also remove the associated view. - We remove ill-configured slots. As they are only used to generate slots and not linked to other records, we can remove them altogether. (constraints would still make them fail in the booking flow, so they are not really working anyway) UPG PR: https://github.com/odoo/upgrade/pull/8206 Task-4997980
Return status handling is now managed centrally in Python, so adding country-specific statuses no longer requires manual view changes. This reduces maintenance effort and lowers the risk of inconsistent or missed status updates across reporting modules.
Original PR description
Before this commit, adding specific states to a return was tedious as it was required to add a field in Python and add overrides in the view using t-set, ... Now everything is done on the Python side we do not have to change the view anymore when adding new states. This is dynamically computed based on the result of '_get_state_field' and the current_state. Also we noted an important thing, we should never set the state from the base field directly but by using the 'state' field. This will automatically trigger the write on the corresponding field and ensure everything is synchronized. This is because we do not want to have to add every new state field in the depends of the compute as it is error prone; we might forget it. Using a common way of writing the state is easier. task-5012501
PDF signing fields now refresh when the document viewer redraws a page instead of on a fixed timer. This reduces visible flickering and provides a smoother signing experience for users.
Original PR description
PDF.js, the library used for the rendering of the PDFs, sometimes tears down the whole page and rerenders it from scratch. Because of this, we have to add our custom sign fields on top periodically to avoid them disappearing. Currently, we render all the fields every second but this leaves a window between them disappearning and being rerendered which shows as the fields flickering. With this PR we want to transition the rerendering of the fields from a periodic nature to an event-based nature by catching the event of the page being rerendered from the eventBus of PDF.js Task: 4999789
Sign templates can now include a default validity period in days, so new signature requests automatically receive an expiration date. This reduces repetitive setup work and helps teams apply consistent signing deadlines across documents.
Original PR description
Added a field to sign templates for setting a default validity period (in days) for sign requests. This streamlines the process by eliminating the need to manually set an expiration date for each new request. task-4942996
The calling features previously labeled as VoIP are now presented as Phone across the app. This makes the feature easier for users to recognize and understand, while preserving the existing calling functionality.
Original PR description
Task-4987530