Daily updates from Odoo
Thursday, April 18, 2024
272 changes · master
Security fixes and vulnerability patches
Report menus and permissions were adjusted so regular users can access the Helpdesk SLA, Field Service task, and planning/timesheet analysis reports that match their roles. The changes also help ensure users only see reporting data for teams, tickets, and areas they are allowed to access.
Original PR description
* helpdesk, industry_fsm, planning, project_titmesheet_forecast - removed the 'admin' group on the reporting menu items so that 'users' can access these menus. - 'timesheets and planning analysis' menu should only show if user has access for both the planning and timesheet. - Helpdesk/User should able to access 'SLA Status Analysis' Report. - Helpdesk: user shouldn't see stats about teams or tickets which he doesn't have access in 'SLA Status Analysis' report. - 'Field Service': user should access 'Task Analysis' Report. LINKS: Task-2467564
New functionality added to Odoo
Adds a new localization module to manage Argentine withholding taxes in Odoo accounting. This helps businesses operating in Argentina handle withholding-related payments, tax templates, sequences, access rules, and accounting views more directly within the system.
Adds a new Russian localization reporting module with financial report templates, including balance sheet and profit and loss reports. This helps companies operating in Russia produce localized accounting reports more easily in Odoo.
Original PR description
Task: https://www.odoo.com/web#cids=1&menu_id=4720&action=333&active_id=967&model=project.task&view_type=form&id=2693100 CE PR: https://github.com/odoo/odoo/pull/79369
Adds support for exporting Portuguese General Ledger data in the SAF-T audit file format. This helps Portuguese companies produce the official accounting file needed for tax authority reporting and software certification checks.
Original PR description
This PR adds the ability to export the General Ledger in the SAF-T format. Links: https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/SAFT_PT/Paginas/news-saf-t-pt.aspx…
This PR adds the ability to export the General Ledger in the SAF-T format.
Links:
https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/SAFT_PT/Paginas/news-saf-t-pt.aspx
https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Faturacao/Paginas/certificacao-de-software.aspx
Note:
No xsd validation is performed as the SAF-T sample given by the Portuguese authorities cannot be validated against the .xsd scheme they provide with the following error:
lxml.etree.XMLSchemaParseError: Element '{http://www.w3.org/2001/XMLSchema}complexType': The content is not valid. Expected is (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))., line 196
xsd scheme: https://info.portaldasfinancas.gov.pt/apps/saft-pt04/saftpt1.04_01.xsd
SAF-T sample link: https://info.portaldasfinancas.gov.pt/apps/saft-pt01/local/saft_idemo599999999.xml
However, the validation software provided by the authorities marks the resulting xml of the code as correct.
task-id: 2710707A new internal test module has been added to validate sales order creation across a broader set of sales-related features. This helps improve reliability of performance checks and creates a foundation for future end-to-end sales testing without changing customer-facing behavior.
A new Indian localization feature helps complete partner GST information automatically when creating or updating business contacts. This reduces manual data entry, improves accuracy, and speeds up onboarding for companies working with GST-registered partners in India.
Introduces Social Walls, allowing businesses to collect posts from multiple social media streams around selected topics and display them publicly on website pages. The feature includes moderation, publishing controls, display customization, and improved styling so teams can showcase social engagement while filtering unwanted posts.
Original PR description
This PR now targets master (my previous commits were targeting 14.0 branch)
When a payment journal is chosen, the payment method now updates automatically to match the journal’s default setting. This helps Mexican localization users reduce manual corrections and keep payment records consistent.
Original PR description
When you define a journal you are allowed to define the default payment method of the journal, but when you select the journal in the payment, the payment method is not changed. This commit allows to change the payment method defined in the journal when you select it and put it in the payment.
Businesses can now import Spanish Norma 43 (.n43) bank statement files directly into Odoo. This reduces manual entry by converting those files into bank statement lines for reconciliation and accounting workflows.
Original PR description
Before this PR: can not import .n43 formatted file. After this PR: Can import .n43 formatted file and convert into bank statement line.
Timesheets now offer a dedicated list view with Day, Week, and Month ranges, plus navigation controls to move between periods or return to today. This makes it easier for users to review and manage time entries for the exact period they need, while grid clicks now open the correct dated view more reliably.
Original PR description
Task:https://www.odoo.com/web#id=1824569&action=333&active_id=131&model=project.task&view_type=form&menu_id=4720 Pad: https://pad.odoo.com/p/r.4fbdcc4d0249f83ce23817bbbd5739f3
Users can now create CRM leads directly from eligible Facebook, Twitter, and LinkedIn posts or comments. This reduces manual data entry and helps sales teams turn social media interactions into trackable opportunities more quickly.
Original PR description
To allow user to generate a lead in the CRM, a 'Generate Lead' option has been added in the dropdown menu associated to each comment and post. This option isn't available by default. The functions isCommentLeadable and isPostLeadable allow to decide if the option is available. These functions should beoverriden by each social media. The generate lead feature has been implemented for facebook, twitter and linkedin but can be implemented for future media easily by following the same architecture. Task ID: 2206496
This update adds overtime calculations for employee shifts and uses them to warn planners in form and Gantt views. It also adds shift deadlines when projects are involved and introduces multiple planning filters, helping teams spot scheduling risks earlier and manage workloads more effectively.
Original PR description
The goal is to compute the employee overtime for a shift and use it for warn the user on the form and gantt view, add a deadline on a shift when project is used and also use it as a warn and finally add multiple filter on the planning.
Subscription documents now preserve relevant section headers and notes from sales orders, invoices, and renewals. This helps customers and staff keep subscription lines organized and easier to understand without manually re-entering context.
Original PR description
Purpose: -Add Section and Note on the subscription Specification: For Section -consider only those sections which is followed by susbcription product For Note -if note is the first line -if note is in the section followed by subscription product -if note followed by subscription product task-2073182
Enhancements to existing features
Knowledge pages now avoid showing unrelated website elements like overlays and live chat, creating a cleaner reading experience. Visitors who try to open unpublished articles are sent to the login page, and promotional portal messaging is resized or hidden when there is not enough screen space.
Original PR description
Purpose ======= Improve the UI and the redirection for logged in users. Specifications ============== Hide the website overlay and the livechat button from knowledge since it should not appear nor be accessible. Redirect anonymous users on the login page if they are trying to access an unpublished article. To prevent a broken UI look, adapt the size of the portal users virality message or hide it if it's too small (hiding on all screens under 1600px wide). Task-2936605
The Social app and its social network connectors have been updated to a newer interface framework for managing streams, posts, comments, and media previews. This should improve maintainability and provide a more consistent user experience across Facebook, Instagram, LinkedIn, Twitter, and YouTube integrations.
Email templates across several Odoo apps are now easier to find, read, and adjust from settings. Users also get clearer access to update related layouts such as headers and footers, making business communications simpler to maintain without technical help.
Original PR description
taskID 2944770
Knowledge articles now have a more polished cover picker that lets users reuse existing covers, upload new images, or choose images from Unsplash. Adding a cover can automatically suggest a relevant Unsplash image based on the article title, while privacy rules ensure users only see covers from articles they can access.
Original PR description
Purpose: ======== 1. Instead of using the standard "avatar" image picker for the covers, create a CoverSelector, based on ImageSelector used in the MediaDialog from web_editor which is prettier,…
Purpose: ======== 1. Instead of using the standard "avatar" image picker for the covers, create a CoverSelector, based on ImageSelector used in the MediaDialog from web_editor which is prettier, allows to reuse covers, and allows to select images from unsplash. 2. When the user clicks on "add cover" in knowledge, picks a random image from unsplash using the name of the article as search query. If unsplash credentials are not set or if service is down, falls back to the "change cover" behaviour, showing the CoverSelector allowing the user to pick an existing cover, to upload a new one, or to enter its unsplash credentials. Specs: ====== Create the components "CoverDialog" and "CoverSelector", based on "MediaDialog" and "ImageSelector" but adapted for knowledge's use-cases. The coverSelector only shows covers used in articles the user can access, so that covers of private articles remain private. Covers are saved in "ir.attachment" with "res_model=knowledge.article", allowing to not show covers in the ImageSelector in other apps, preventing users of other apps from deleting covers. They are also saved with "res_id = 0", which allows to not link covers with a precise article, preventing covers to be deleted if the associated article is deleted. When a new cover is uploaded, an url with an access token is generated and saved. This url is used to display the covers so that they can be shown in portal view, and so that users can see every cover (because attachments with res_id=0 and linked to a model are only accessible by the user that created the attachment) The binary field "cover" is replaced by a many2one field "cover_image_id" referencing the created attachment. This allows to reuse covers without needing to duplicate the attachment. Also added a field "cover_image_url" referencing the url of the attachment, which is used to display the cover. When a cover is removed from an article and is not used in any other article anymore, the associated attachment is deleted. Same if an article is unlinked and its cover is not used anymore. Extend "web_unsplash" controller and add a route that fetches a random image from unsplash using a query word, then uses "web_unsplash"'s route to save the image in ir_attachments. Add a method calling this route using the article name as query when clicking on the "Add cover" button. During the request, the button is hidden so that one can not click multiple times on it and send several rpc's. If the request returns an error (unsplash credentials not set, service unavailable, ...), opens the CoverSelectorDialog instead. Task-2852916
The IoT Bluetooth connection component was updated to stop using an outdated background process call. This removes unnecessary warning messages from logs, making system monitoring cleaner without changing user-facing behavior.
Original PR description
Before, in BTInterface.py we were using gatt.DeviceManager.run function which was calling GObject.MainLoop() function which was deprecated and was provoking a warning in the logs. This PR overrides the gatt.DeviceManager.run function to fix the deprecation warning and remove it from the logs. task-2414027
The Planning analysis report now gives managers clearer visibility into employee capacity, utilization, billable versus non-billable assignments, and time off. This helps teams spot overbooked or underused resources, assess profitability balance, and better understand how planned hours are distributed.
Original PR description
Improve the Planning analysis report by providing additional measures on: 1) the capacity and utilization of resources -> goal: easily identify who is still available or who has been allocated too much work 2) the ratio of billable vs. non-billable hours assigned -> goal: making sure that a resource is profitable and that the work he is assigned is well balanced 3) the time off taken by the employees -> goal: help the user understand the distribution of hours Because these measures are quite complex to implement, we will be creating a new report for this task instead of relying on planning.slot. See task-2742620 See odoo/odoo#84551
The rental product configurator in Sales has been migrated to Odoo's newer interface framework. This supports the broader Sales app modernization and should help keep the rental sales experience consistent and easier to maintain.
Original PR description
Part of the migration of the sales app to the owl framework. This PR concerns the migration of the product configurator. See odoo/odoo#98838 Task - 2961593
This update removes duplicate fields and tidies selected views in Manufacturing Work Orders and Timesheets. Users should see cleaner screens with less repeated information, making daily data entry and review slightly easier.
Original PR description
Enterprise counterpart of https://github.com/odoo/odoo/pull/52728
This update removes fields that were no longer used or could be replaced with simpler logic in accounting synchronization and project management areas. It helps keep the system cleaner and easier to maintain, with little to no expected impact on everyday users.
Original PR description
* Mainly unused related / computed fields * Fields of limited use which can be replaced by little code changes
New employee contract and company car ordering flows now use the selected work location to apply the right defaults. This helps assign the correct fleet manager for new cars and makes work location information available in recruitment reporting.
Original PR description
When ordering a new car, the fleet manager will be set to the default fleet manager of that work location. TaskID: 2704398
Users can now open shared spreadsheets even when they do not have permission to view some embedded pivot or list data. Instead of repeated access error popups, the spreadsheet remains usable and related issues are collected in a side panel, while unavailable filters are disabled.
Users who index payroll contracts are no longer automatically added as followers of those contracts. This reduces unnecessary notifications and removes the need to manually unfollow large batches of indexed contracts.
Original PR description
current behavior : When a user indexes one or more contracts, they will automatically be set as a follower of those. Since a user usually indexes a lot of contracts at once, they will be spammed with notifications and will need to manually unfollow every contract. behavior after this commit : You are not added as a follower of contracts that you index.
The manufacturing cost report now also supports unbuild orders, giving users better visibility into costs when products are taken apart. This helps businesses analyze manufacturing-related costs more consistently across build and unbuild operations.
Original PR description
Enterprise counterpart of the PR odoo/odoo#80381 Adapts the manufacturing order cost report to the unbuild order. task-2662731
Rental pricing can now be configured by the minute, making it better suited for short-duration services such as electric scooter rentals. This gives businesses more flexibility to charge accurately for very brief rental periods.
Original PR description
Some buisness requires a rent by minute for example electric scooter
The expense app now displays information more cleanly on mobile devices, reducing awkward text wrapping and placing values more clearly under their labels. The empty “My Expenses” screen also uses a clearer mobile-specific message, making the app easier to understand for employees on the go.
Original PR description
aim of this commit: improve the user experience on mobile for the expense module after this commit: - some wild word-wrapping removed - data display more coherent (data under its label) - message changed when "my expenses" is empty on mobile
Field service task and project screens now offer clearer labels, better search and grouping options, and additional graph and pivot views for personal tasks. Scheduling and worksheet template information is easier to manage, with required date ranges and key changes tracked in the task history.
Original PR description
* industry_fsm{_report}, industry_fsm_sale, project_enterprise, worksheet PURPOSE: Generic improvements for field services SPECIFICATIONS: - tasks editable list view: use the date range widget for…
* industry_fsm{_report}, industry_fsm_sale, project_enterprise,
worksheet
PURPOSE:
Generic improvements for field services
SPECIFICATIONS:
- tasks editable list view: use the date range widget for the 'start date' and
'end date' fields
- Add a graph and pivot view to the 'my tasks' menus
- Rename 'By user' to 'by worker' and 'by worksheet' to 'by worksheet template'
- If either one of the planned_date_begin or planned_date_end fields are set
then the other one should be required
- Field partner_phone will be visible whether the partner_id field is set or not
if is_fsm is true
- Stat buttons 'Worksheet' and 'Products' will be visible whether the partner_id
field is set or not if is_fsm is true
- For tasks, track the field 'worksheet_template_id, planned_date_begin,
planned_date_end' in chatter
- Remove create option for the field 'worksheet_template_id'
- For worksheet template's list view, fields: company_ids, worksheet_count and
color will be optional and displayed bydefault
- rename from 'default worksheet' to 'default worksheet template'
For tasks search view,
- Add search items: stage, project, worksheet template, parent task, sale order,
tags, and reorder it.
- Add filters: followed tasks, my projects, starred, tasks late,
tasks in overtime, rated tasks
- Add a 'customer' and 'sales order' group bys
- Rename a group by 'Responsible' into 'Assigned to'
- Add group by task above 'start date'
- Remove the 'company' group by and reorder the groups accordingly
For projects search view,
- Add a quick search on worksheet template and company
- Hide the 'sales order' quick search in field service
- Add a group bys: worksheet template and company
Task-2585357DHL shipments can now use delivery-specific descriptions and declared values instead of fixed or incomplete defaults. This helps provide customs with more meaningful shipment details and ensures shipping costs are included where relevant.
Original PR description
In this commit: ================================= Added two new fields in stock picking related to shipping 1. `shipment_description` 2. `shipment_declared_value` Before this commit: ================================ The value of shipment description was static `MY DESCRIPTION` which might be rejected by customs so in the delivery, we have added field to set the description value default by taking the category name of the first product from the sale order line. The value of declared value was the total amount of movelines which was not including shipping cost so in this commit, in the delivery we set the value of declared field to total amount of sales order. task-id: 2611210
Warehouse users can now scan a package barcode directly in the Barcode app. From the main menu, this shows the package contents; from Operations, it finds the relevant transfers and opens the matching one automatically when there is only one result.
Original PR description
Before this commit: Scanning a package was not a supported operation in stock_barcode. After this commit: Scanning a package in the main menu will show its content. Scanning a package in the "Operations" view will filter the pickings that operate on the scanned package (or open the picking directly if exactly 1 is found). task-2648993
The online bank synchronization screen has been reorganized to make its fields easier to understand and use. This improves day-to-day setup and review by presenting related information more logically without changing the underlying synchronization behavior.
When a helpdesk ticket is created from the website, any contacts included in the CC field will now receive an automatic email notification. This helps keep vendors, consultants, or other copied parties informed from the start without manual follow-up.
Original PR description
**PURPOSE** People sending tickets via your website might add their vendors or consultant to the CC field. An automatic email should be sent when a new ticket is created. **SPECIFICATION** The partners who were added in cc will be notified by mail when a new ticket is created. Task-1974030
Planning conflict warnings now appear only when overlapping assignments exceed the available allocation. This reduces unnecessary warnings for valid schedules and helps planners focus on real overbooking issues.
Original PR description
Made changes as small as possible only changed a query just a little to get sum of of allocated time percentage for overlaping slots pretty much works same as it does before only only added a computed non stored variable for the view only changed the condition that the warning shows up Task ID : 2310218
Planning emails sent to internal users now open the specific time period covered by the shared planning, rather than defaulting to the current week. This helps recipients get directly to the relevant shifts and reduces confusion when reviewing schedules.
Original PR description
The 'view planning' link in emails sent to internal users should point to the time-frame of the planning that's been sent,instead of the current week task ID 233547
Warehouse users can now print package barcode labels directly from barcode picking lines, including packages created during put-in-pack actions. Operations can also be configured to automatically print package labels as PDF or ZPL, making packages easier to scan and reuse across stock moves.
Original PR description
Adds a button next to the `result_package_id` in the barcode line to download this package barcode as PDF. The purpose is to be able to print the package barcode created by a put in pack, so the user can scan it to reuse it on other lines. task-2333834
The Documents app now handles attempts to make two workspaces parents of each other by automatically resetting the older parent-child link. This prevents users from hitting a validation error and keeps workspace organization consistent when relationships are changed.
Original PR description
Currently, when we create 2 workspaces and try to set a parent of each other it will raise the constrains as 'You cannot create recursive folders.' So in this commit, when we try to set the recursive parent/child on workspace it should reset the parent/child on latest workspace instead of raising the validation. For Ex: - Create FOLDER 1 - Create FOLDER 2 - Set FOLDER 1 as parent workspace for FOLDER 2 - when we set FOLDER 2 as parent workspace for FOLDER 1 then FOLDER 1 is unsetted as parent for FOLDER 2 and become the child of folder 2. LINKS Task https://www.odoo.com/web#id=2250634&action=4043&model=project.task&view_type=form&cids=2&menu_id=4720
DHL shipping methods can now be configured to avoid printing the additional archive document that accompanies label batches. This helps businesses reduce unnecessary paper use while keeping the document available when carriers require it.
Original PR description
Each set of labels generated by DHL generates an "Archive Document", which is an additional label listing the generated labels. This document may be required by some carriers (DHL Express), but is a waste of paper in other cases. The field "RequestArchiveDoc", defaulting to "Y", allows to enable or disable the printing of this document. A new field on the DHL shipping methods allows to toggle this option. This commit has the "ecofriendly 🌳" label.
Users can now keep uploaded or created documents private instead of automatically sharing them with everyone who can access the workspace. This gives businesses more control over sensitive files, while also removing the older document locking feature and making workspace assignment optional.
Original PR description
PURPOSE : Allow users to restrict access to their Documents. Currently, as a document has to be in a workspace, it is available to the workspace's groups. We want to provide the user with a way to 'opt-out' of sharing uploaded/created documents. Folder_id not required anymore, addition of access field and deletion of locking feature Task=2257514
Calendar appointment communications have been improved so users can follow updates for specific appointment events. Businesses can now better manage who receives notifications when appointments are booked or cancelled, helping teams stay informed with less manual follow-up.
Original PR description
wip
Planning now shows conflict warnings only when overlapping shifts exceed 100% total allocation. This makes warnings more accurate for complex schedules with multiple overlapping shifts and reduces unnecessary alerts for planners.
Original PR description
…percentages > 100 Allocated percentages must be taken into account to determine if shifts are in conflict. The previous code relied on a basic DB query to find the conflicts. It worked only in case of two overlapping shifts. With three shifts (8am-12pm, 10am-2pm, 12pm-4pm), it might be possible but complicated to find the number of conflicts. The new algorithm is complex but robust (2+ shifts are well computed). Moreover it does not perform any DB call and the less database calls, the better. A variable is specifically declared for the form with store=True only to display the number in the form banner. Task ID : 2310218
The plus icon shown on opened grouped list headers now uses the same color as the group header, making the interface more visually consistent. When users hover over the icon, it changes to the primary theme color for clearer interaction feedback.
Original PR description
Display "+" icon same as group header color TASK 2414138
Marketing campaign lists now focus on campaigns that are actually relevant, reducing clutter from campaigns created in other marketing tools. Links from social posts and push notifications also open with the right campaign filter already applied, helping users find related content faster.
Original PR description
This commit improves the way we define the relevancy of an utm campaign. Before this commit, we filtered out campaigns with a "is_website" flag that we set as True whenever a campaign was created through the default_get of utm mixins. However, it came to our attention that creating a marketing campaign from marketing_automation would still pollute the list of campaigns that we considered relevant. So, instead of setting the is_website flag as true and confusing people with its naming, I replaced the field with another boolean "is_relevant" and based the filtering on that new field. LINKS: TaskID: 2414694 PR: #xxxxxx
The Documents chatter view now shows the date separator when messages are empty but attachments or activities are present, making it easier to distinguish activities while scrolling. The update also aligns internal field names for better consistency without changing the core user workflow.
Original PR description
**PURPOSE:** When scrolling down on the message list, the "today" separator becomes hidden and it's really hard to tell between messages and activities. **SPECIFICATIONS:** The separator will be displayed when the messages list is empty and attachments and/or activities displayed Also, applied proper names to the fields of chatter as per below: Field isActivityBoxVisible is replaced by isActivityListVisible Field hasActivities is replaced by hasActivityBox Introduce isActivityBoxVisible field that depends on activityBox and activitites **LINKS:** PR #15984 Task-2243529
CRM reporting screens are easier to use with updated dashboard and pipeline analysis helpers. Sample data was removed from lead generation cohort and dashboard views, helping users work with cleaner, more relevant reporting views.
Original PR description
in this commit some reporting usability improvements are done in crm, the action helper for the dashboard and pipeline analysis are updated now and the sample data of cohort and dashboard views of lead generation are removed. task-id: 2393253
Report designers can now enable an option in the Studio sidebar to show elements that are normally invisible. This helps advanced users customize reports more easily by making hidden content visible during editing.
Original PR description
**PURPOSE** To ease more advanced report customization, the report designer should have a 'show invisible elements' property **LINK** task - 2037446
Grouped lists can now open selected sections by default using a new unfold setting, instead of expanding every group automatically. This makes pipeline-style views easier to scan while giving teams more control over what users see first.
Original PR description
PURPOSE This task introduces a new 'unfold' boolean option on the listview tag. The goal is to allow grouped listview to have their groups unfolded by default. This is especially useful on models where records progress through the stages of a pipeline. Example: lead/opportunities or project tasks we also need to depreciate the existing 'expand' option on We want to be able to choose which grouping we want to unfold by default. The current 'expand' will unfold any grouping of the treeview. SPECIFICATION Add a new 'unfold' boolean option on if 'unfold'=True, groups are unfolded by default False by default TASK 2391255
Odoo Studio now consistently targets the exact part of a view being edited, reducing the risk that changes apply to the wrong field when similar fields appear more than once. This improves reliability for view customization and simplifies the underlying logic for future maintenance.
Original PR description
Commit caa6d30ceeeb099dd389224164d06a2a728ba8b4 tried to make absolute xpaths available as much as possible while leaving as fallback relative xpaths, this approach however was "stable-friendly" and…
Commit caa6d30ceeeb099dd389224164d06a2a728ba8b4 tried to make absolute xpaths available as much as possible while leaving as fallback relative xpaths, this approach however was "stable-friendly" and pretty naive and in fact created problems (with subviews mostly) that were subsequently hotfixed by b780c8dcd6e2011f72850ea9591baa090509a584 by simply using relative xpaths for subviews even if an absolute xpath was given. This commit makes it so that absolute xpaths are the only option for any studio operation, this gets rid of the ambiguity of relative xpaths especially since as of this patch, it is totally valid to have the same field multiple times in certain views (form, at the very least), and since most if not all relative xpaths are based off of the field's name, whenever performing an operation that uses a multi-occurrence field as its anchor, the resulting operation may apply on the wrong occurrence of the field. Not only does this patch prevent / fix these issues from happening, it also simplifies a lot of the server side and shifts the burden to the client, since it is the client that must supply the correct information as to which node/field/element must be operated on, despite this there is still a net code reduction because the server has to perform way less guesswork. This patch is also a precursor to a refactoring of the view normalization step for studio, which itself depends on a lot of heuristics / hacks (that are very complex and bloated) *because* there is ambiguity within relative xpaths and having to deal with a mix of relative and absolute xpaths, by simply shifting to absolute xpath only, a lot of this complexity can be removed (because we're using the lowest common denominator: all xpaths can be absolute, but not all can be relative). Task-ID: 2279352
Planning users can now click an employee avatar in the Gantt view to open a chat with that employee. This makes it faster to contact team members directly from the schedule without switching screens.
Original PR description
PURPOSE it should allow the user to chat with employee by clicking on their avatar from the gantt view (like the many2one_avatar_employee widget currently allows in form, tree, and kanban views) SPECIFICATION it should open the chat once user click on employee avtar from the planning gantt view LINKS Task: 2272544 PR https://github.com/odoo/enterprise/pull/11283
Relevant actions now show directly as buttons in list views, making common tasks easier to find and launch. This improves day-to-day workflow access across accounting, assets, and payroll screens without changing underlying business processes.
Original PR description
… action set "Display in controlpanel" boolean on server action to display server action as button on list view. LINKS Task 2246383
The Belgian payroll accounting test no longer manually creates receivable and payable accounts for newly created companies. This relies on the automatic chart of accounts setup instead, reducing unnecessary test configuration and making the validation process easier to maintain.
Original PR description
Currently, there are instructions for creating receivable and payable accounts and setting those as company parameters for the newly created company from the test case. Those instructions seems for handling the missing receivables/payables warnings on res.partner, encountered during ongoing tour. With the help of functionality for loading CoA of selected country automatically at the time of company creation, now there is no need for configuring the receivable/payable company parameters on res.partner explicitly for the running test case.
Automated tour tests now include checks for how many database queries they perform. This helps teams spot unexpected performance costs earlier, reducing the risk of gradual slowdowns across Odoo features.
Original PR description
PURPOSE The number of queries keeps growing version after version. A change often requires additional queries and it is fine. However, in some cases, the developper simply doesn't realize its feature adds a lot of queries that may be unnecessary most of the time. The idea here is to add an assert (assertQueryCount) in python tests executing tours, to check the number of queries done by the tour. That way, everyone will be forced to acknowledge they added queries when they do. SPEC Add assertQueryCount on all tour in python tests Task 2199227
Planning now alerts managers when they assign shifts to an employee who is already on approved leave. The warning shows whether the leave applies to a single day or a date range, helping avoid scheduling conflicts and improving coordination between Planning and Time Off.
Original PR description
PURPOSE
When employee is on leave and manager try to assign the role at that time, display the alert
'Employee is on the leave'.
SPECIFICATIONS
It seems that a lot of users completely miss out on the integration between
Planning and Time Off. An extra warning stating that an employee is on
holiday at a given time would reinforce the feature.
This is the main goal for this commit.
To do that, we raise the alert in following cases:
1. Spans across several days:
"This employee is on leave from mm/dd/yyyy to mm/dd/yyyy."
2) If it is for any particular day:
"This employee is on leave on this day."
LINKS
PR #8631
Task: 2176484Tooltips have been redesigned to be clearer and easier to read across dashboard and enterprise web views. This improves the day-to-day user experience by making contextual information more visible and accessible.
Original PR description
PURPOSE The style of tooltips need to be improved for better vision. SPECIFICATION After improving in style, tooltips became more better for visualization and for users too. LINKS Task-2266829 PR https://github.com/odoo/enterprise/pull/11381
Mobile barcode scanning now fills in a product field directly when there is only one matching result. This removes an extra selection step for common scans, making mobile data entry quicker while keeping the existing choice screen when several products match.
Original PR description
Before, When we scan product barcode from mobile, it open search view with that scanned product and then we have to select product. Now, Scanned product directly filled in form view. Task : https://www.odoo.com/web#id=2150991&action=333&active_id=1520&model=project.task&view_type=form&menu_id=4720
Studio now offers a direct button to create a new model from the menu bar, instead of requiring users to go through the edit menu flow first. This makes it easier and more intuitive to add secondary models to an existing app.
Original PR description
PURPOSE
Assume a user that wants to create secondary models in an existing app.
Currently, he needs to go through the 'Edit menu' button in the systray.
He can then create a new menu of type 'new model'.
But it is awkward to go through the edition of a menu item to create a new model.
The menu item is the 'door' to get to the model, it doesn't really make sense create the door before creation the room it leads to.
The goal of this task is to get the user a clear flow for the creation of his new secondary models.
SPEC
add a 'new model' button next to 'edit menu'
this button opens the modal to create new model
this is a reduced version of the 'new menu' modal
the rest of the flow is identical to the creation of a new menu item
> this new button is simply a shortcut to get to the new model creation
TASK 2225267This update keeps the mobile web experience compatible with Odoo versions before 13.0 while reflecting related partner module changes across enterprise add-ons. It helps customers on older setups avoid disruption when using mobile features and related business workflows.
The Studio translation screen is simplified by hiding less useful columns and using clearer labels. Translations are now grouped by language by default, making it easier for users to review and manage translated content.
Original PR description
Purpose of this commit is to improve the translation view for the studio, for improvement - remove transifex and translated field from the tree view - rename 'Internal source' by 'Source Term' and 'Translation value' by 'Translation' in tree view - add 'Language' as a default group by in search view task: 2209354
Images added to reports through Studio are now accessible when portal users print reports, even if the related product is unpublished. This helps ensure customer-facing documents display product images consistently.
Original PR description
PURPOSE When dropping an image field in a report for a product image, the image URL does not be accessible by the portal while user printing the report if the product is unpublished. SPECIFICATIONS Image field should be accessible in the reports, when dropping an image field. LINKS PR https://github.com/odoo/enterprise/pull/9639 Task 2028938
Studio now shows the full set of available widget choices when a user selects a boolean field in a list view. This makes it easier for users to configure fields correctly without missing display options.
Original PR description
before:
when user open listview in studio mode and select boolean field to change widget of field sidebar doesn't display all boolean widget list
after:
display all boolean widget list so user can change field's widget
Task Id: 2230540Odoo Studio now offers a direct menu bar option to create a new model. This reduces the number of steps users need to take, making customization faster and easier.
Original PR description
**PROBLEM** Currently, web studio has an option in menu bar: edit menu. Through which a user can edit menu and create new menu for a new model. Here the problem is, create new model option is not given directly, for that user has to go to edit menu > new menu > new model. It does not make sense whenever user wants to create a new model directly. **SOLUTION** So, for a better user experience, there should be an option at menu bar to create 'new model'. **PURPOSE** By this commit, this option has been added to the menu bar and now on wards user can directly use that option to add new model without following too many steps. **LINK** Task - 2225267
Ending a VoIP call linked to an activity will no longer automatically mark that activity as done if the user is still editing it. This prevents users from losing the chance to review or finish their notes after a call, while keeping the existing automatic close behavior for read-only activities.
Original PR description
PURPOSE when editing activity while a call linked to activity is running in edit mode, then do not delete an activity after hangup phonecall. SPECIFICATIONS do not delete activity on hangup call when the activity is in the edit mode. Only in the read-only mode of activity, it should delete activity. LINKS PR https://github.com/odoo/enterprise/pull/9473 Task 2000224
The Point of Sale loyalty module has been migrated to Odoo's newer interface framework. This helps keep loyalty screens, reward buttons, receipts, and points displays easier to maintain and more consistent with the rest of the POS experience.
Original PR description
Migrate the old module to owl.
Map marker popups now display field values using the same widgets and formatting users see elsewhere in Odoo. This makes information such as dates, related records, and tag lists easier to read and more consistent in map views.
Original PR description
Task: https://www.odoo.com/web#id=2158887&action=327&model=project.task&view_type=form&menu_id=4720
LinkedIn social posting now shows a more helpful message when an image upload fails. This helps users understand what went wrong and take corrective action more quickly when publishing social content.
Original PR description
Purpose ======= Improve the error message when the image upload fail. Task-2206477
This improves payroll contribution registers so companies can decide which related partner should be charged based on fields such as the employee, work address, or company. It makes payroll setup more adaptable for benefits like healthcare where the responsible service or partner may vary by organization structure.
Original PR description
**Description of the issue/feature this PR addresses:** - Contribution registers might have very flexible rules to determine the partner to charge - Currently there is no (encouraged) way to to…
**Description of the issue/feature this PR addresses:** - Contribution registers might have very flexible rules to determine the partner to charge - Currently there is no (encouraged) way to to define thos partners on different target models (eg. employee, work address, company, etc) **Current behavior before PR:** - Cannot define contribution register "Healthcare" while setting the healthcare service on the employee **Desired behavior after PR is merged:** - Be able to define a healthcare service field on the any target model reachable from the slip line thourgh a specially named field. - Provide hooks to select the correct target model on which to look for such specially formatted field. - Map the register_group selection to target models (reachable from the slip line) Note: Please do not close if not immediately accepted as this PR is meant to be carried on and maintained actively until this semantic will be resolved this way or another. @tivisse -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr @xoe-labs
Calendar screens in Planning, Enterprise web views, and Studio were adapted to work with Odoo’s newer interface framework. This helps keep scheduling and view-editing features compatible, maintainable, and ready for future improvements without changing core business workflows.
Original PR description
To prepare the future, we want to convert everything in Owl. Task ID: 2149408
Customers are now informed when making a subscription payment that their default payment token will be saved for future recurring charges. This helps set clearer expectations during checkout and supports smoother subscription renewals.
Original PR description
Task: https://www.odoo.com/web#id=2026350&action=327&model=project.task&view_type=form&menu_id=4720 Pad: https://pad.odoo.com/p/r.ac39fe4f8fe3013381215d9e2f785204
Settings pages have been adjusted to display correctly on phones and other small screens. This reduces overlapping text, misaligned icons, and cramped fields so users can configure apps more easily on mobile devices.
Original PR description
Task : https://www.odoo.com/web#id=2150992&action=333&active_id=1520&model=project.task&view_type=form&menu_id=4720 Pad : https://pad.odoo.com/p/r.62f98fc53c42e62af074c7307ebb7894
Resolved issues and error corrections
The payroll dashboard now keeps large panels from taking over the page by capping their size and allowing scrolling. It also improves batch status visibility, prevents long batch names from breaking the layout, and limits bank account warnings to employees with active contracts.
Original PR description
When you have a lot of payslip batches for example, each panel in the payroll dashboard will occupy a lot of space. After this commit, a maximal space is defined and information will still be accessible through scrolling in the panel task-2985067
The Sign Now wizard now displays signer entries without extra table borders or outlines. This restores the intended appearance after a styling change caused the signer list to look misaligned, making the signing setup screen clearer for users.
Original PR description
After some changes in the list renderer css, the one2many field signer_ids layout started having wrong layout. This commit removes the unwanted outlines and borders from the table generated by that field. task-2979060
Employee settings now show all time off types that require allocations when configuring extra time off on contract signature, rather than only those with currently valid allocations. This makes the setting clearer and usable across more company setups, including outside Belgian localizations.
Original PR description
Before: From employee settings, on 'Extra Time Off Allocation on contract signature' only those Time Off Types will show for which the valid allocations exist. Instead, show all the Time Off Types that requires allocations. task - 2658250
This fix ensures the project forecast view file is included when the timesheet forecast sales module is installed or updated. It prevents missing screen elements or configuration caused by the file being omitted from the module setup.
Original PR description
project_forecast_views.xml has not been added to __manifest__.py in this commit- https://github.com/odoo/enterprise/commit/dcb0127aecb5aefeb3d9e7deef2805c19986b2cd closes odoo/enterprise#22924
This fix ensures package dimensions are converted to the measurement unit expected by each shipping carrier connector before rates or shipments are sent. It helps avoid incorrect shipping calculations and reduces the need for users to manually enter dimensions in a different unit than shown.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: There is no conversion of the size between the package type for the connector and the shipping method. So the user need to put the size in the uom chosen in the connector in the package type even its write its mm. Desired behavior after PR is merged: We need to convert the dimensions of the package type according to what the user has chosen in the connector. -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures the 'Extra Time Off' salary benefit is visible on employee contract salary information. It helps HR teams and employees see the complete compensation package without missing time-off benefits.
Original PR description
task - 2687999
Subscription invoices now correctly adjust prices when a customer's fiscal position replaces an included tax with a different tax. This prevents customers from being charged an amount that still contains the original tax, improving invoice accuracy.
Original PR description
…ed from sub Steps to reproduce the bug: 1. Create a tax included in price T1 2. Create a customer with a fiscal position that should replace the current tax T1 by a 0% tax T2 3. Create a subscription product with this tax 4. Create a subscription and invoice it Bug: The invoice generated from a subscription has the T2 on its line but it did not deduct the included tax T1 from the unit price opw:2637567 X-original-commit: 163f9009d2eacfd8968d4565c2f026f3ff813ae6
Barcode-related reports for locations and operation types are now printed separately from barcode commands. This fixes confusion in the printing flow and makes it easier for users to get the correct report when managing warehouse barcode operations.
Original PR description
…plit from the barcode commands We split both the operation from barcode commands and now we are print report separately. opw-2579195
This fix ensures salary package fields for fixed values and benefit values only accept numbers. It helps prevent invalid salary configuration data, reducing errors when preparing or reviewing employee contract offers.
Original PR description
make sure fixed value and advantage value fields are numbers Task id: 2339760
This fix reduces the amount of historical work entry data created when generating entries for older contracts, helping avoid timeouts on real databases. It also prevents empty work entries from being created when leave falls outside scheduled working time, avoiding related errors.
Original PR description
…neration Purpose ======= When generating the work entries the first time for older contracts, we try to generate the work entries for several months/years, instead of only the current month for…
…neration Purpose ======= When generating the work entries the first time for older contracts, we try to generate the work entries for several months/years, instead of only the current month for example. The reason if that the date_generated_from and date_generated_to fields are there to avoid having gap on the generated work entries. If they were generated from January to March, and we try to generate them in July, then we generate the work entries for April, Mai, June, and July, so that if we remove work entries on a given day, we don't try to re-generate them afterward. If we move the cursors to the start date when they are equal, instead of generating 138300 records for 100 employees who have a contract starting on the 1rst of January 2018, to generate work entries till the 31nd of August 2020, then generate 7900 records. This represents 17.5 times less records to create, and it allows to use generate the records on real database for the first time without risking to face a timeout. TaskID: 2321853
Recurring planning shifts now generate correctly when they have an end date, and users can turn off repetition when needed. Updates to recurring slots now apply consistently across the whole series, making schedule management more reliable.
This fixes an issue in the website visitor view after a referenced field was removed. Push notification data now attaches to an existing part of the view, helping avoid display or setup errors for users managing visitor notifications.
Original PR description
Since page_ids have been deleted from visitor kanban view, all the xpath targeting this field must be modified to target another existing field in the view. Task ID: 2428362
This update corrects outdated or invalid configuration values across accounting, delivery, manufacturing, marketing, documents, and field service areas. It helps prevent setup errors and inconsistencies when records use values that are no longer supported or have moved to localization-specific modules.
Original PR description
See https://github.com/odoo/odoo/pull/54276
This fixes a display issue where overlapping items in the Gantt view could extend beyond the final day shown. The schedule view now keeps items within the expected date range, making planning timelines clearer and less confusing for users.
Original PR description
Overlapping pills could go past the last day of the gantt view (e.g. considering 8 days in a week).
This update fixes intermittent failures in point of sale hardware-related test flows for payments and weighing scales. It helps keep automated quality checks stable, reducing false alarms during development without changing normal user workflows.
This update corrects how NCM codes are shown for products in the Argentine electronic invoicing module. The code is now handled at the product variant level and displayed more consistently, helping users see the right classification information when managing products and invoices.
Original PR description
* move logic of ncm code from product.template to product.product * add ncm compute field in product.template just to show it when len(variants) == 1 (this compute is similar of how it works for default_code field) * ncm code it was showed lonely before the product category now is shown after the default_code field.
The search panel now only remembers a user's last selected item when that behavior is explicitly enabled. This keeps Documents able to reopen the last workspace or folder while avoiding confusing saved selections in other areas such as rentals or employees.
Original PR description
PURPOSE Currently in searchpanel, everytime when we clicked on the select="one" field, it will store the current clicked searchpanel key to the local storage with value. so every next time user will see the last visited and clicked environment of that view. It is feasible for Documents to remember the last visited workspace/folder of each user. That allowed us to preset this last visited workspace the next time the user opens the kanban of Documents. But it is sometimes confusing for the user in the case of Rental orders or Employees or many other kanban views. SPEC for that reason, we have provided on boolean attribute "store_last_active" for select="one" fields. if any of the users willing to visit the last visited selection environment then set "store_last_active" attribute value to true. if the attribute is true then only the selected value of the searchpanel key would be store in the local_storage. Task : 2264358
Creating a payslip from the Payroll app no longer triggers an error when no default employee contract is available. This prevents interruptions for payroll users and lets the process handle missing contract information more safely.
Original PR description
during creation of payslip from payroll app, traceback is there for singleton(to have minimum one record must be there or not more then one). but as we have no record to select, traceback is occured. after this commit isssue will be solved. task-2226403
Odoo Studio now prevents users from dragging a notebook section into another notebook, avoiding broken or confusing form layouts. The change also improves how view edits are saved when changes affect different parts of a form, making customizations more reliable.
Original PR description
PURPOSE previously, We can drag the notebook inside the notebook The purpose of this commit is to restrict notebook to be drag and drop inside a notebook Task 2199980
This fixes broken invoice screens in the Argentinian and Colombian electronic invoicing modules after an accounting field was renamed. It helps ensure users can continue viewing and processing electronic invoices without errors.
Original PR description
move field of account.move renamed to move_type, hence adapting here as well
Signed documents now preserve foreign-language characters correctly when exported or printed. Text entered during signing is converted into an image so characters display as intended instead of appearing as black squares.
Original PR description
Task: https://www.odoo.com/web?#id=2031628&action=327&model=project.task&view_type=form&menu_id=4720
Fixed an issue where renewing a fixed-term subscription could set the wrong end date after the renewal quote was confirmed. This helps ensure subscription periods remain accurate for billing, service delivery, and customer records.
Original PR description
Task:https://www.odoo.com/web#id=2168496&action=327&model=project.task&view_type=form&menu_id=4720
Features or functions removed from Odoo
Unused image assets were removed from the Mexican EDI landing pages and Timesheet Grid app store branding. This reduces repository clutter and slightly simplifies maintenance without affecting everyday product functionality.
Original PR description
COM PR: https://github.com/odoo/odoo/pull/61299
Code cleanup and technical improvements
The Sign app’s JavaScript files were reformatted using the correct linting setup. This is an internal cleanup that improves code consistency and maintainability without changing user-facing behavior.
Original PR description
On commit 375f8a4d6e446ef433eb9c2e0510a10addbe6c91, ESlint was used to clean the js files in sign. However, one setup from prettier was not used. This commit runs the correct lint configuration on the files.
The disallowed expenses reporting logic has been reorganized to make the accounting reports easier to maintain and support. This should help improve reliability for finance teams without changing day-to-day workflows.
Field service sales now calculate discounts automatically as part of the normal pricing process instead of relying on a separate manual trigger. This reduces internal complexity and helps keep sales order line discounts consistent without changing the visible workflow for users.
Original PR description
Task-ID-2180180
The systray menu has been rebuilt using Odoo’s newer interface framework to support future improvements. This is mainly an internal modernization, with related updates to enterprise and Studio menu behavior to keep user interactions working correctly.
Original PR description
PURPOSE Prepare future for OWL SPEC Convert Systray Menu into OWL TASK 2340574
The user menu in the main navigation and mobile interface has been rebuilt on Odoo's newer interface framework. This is an internal modernization that helps keep the product maintainable and ready for future improvements, with little expected change for day-to-day users.
Original PR description
PURPOSE Prepare future for OWL SPEC Convert UserMenu of Systray into OWL TASK 2329195
Odoo Studio code has been reorganized so business rules live in model components instead of controller entry points. This makes the module easier to maintain and reduces the risk of future changes causing unexpected behavior, without introducing a direct user-facing feature change.
Original PR description
**PURPOSE** To keep business logic separate, some controller code is moved to model. **LINK** 2007296
The company switcher has been reorganized so the mobile experience reuses the same menu behavior as desktop. This makes the interface more consistent across devices and should simplify future maintenance without changing core business workflows.
Original PR description
Enterprise part of the company switcher widget refactoring. The main idea is to reuse the "dropped menu" of the desktop widget as the mobile widget. Task 220560
Miscellaneous changes
Purpose: Purpose of this is to save changes on x2many field using studio. Task- 2167977
Original PR description
Purpose: Purpose of this is to save changes on x2many field using studio. Task- 2167977