Daily updates from Odoo
Thursday, June 18, 2026
69 changes · master
Security fixes and vulnerability patches
This update enhances the security of our Gemini integration by moving the API key from a URL parameter to a header. This change reduces the risk of exposing the key in logs or browser history, aligning with best practices for sensitive data. The update is a critical security improvement.
Original PR description
Task-6306377 Forward-Port-Of: odoo/enterprise#120680
New functionality added to Odoo
This update allows for automatic sending of receipts to customers via WhatsApp after a self-order payment is confirmed. Customers receive a digital receipt directly to their WhatsApp, improving convenience and order tracking. This enhancement streamlines the post-purchase experience.
Original PR description
In this commit: - Introduced functionality to send receipts via WhatsApp with preset configuration for customer identification using name and/or address. - The receipt is automatically sent to the customer via WhatsApp when the payment is confirmed, and the user reaches the confirmation page. Related: - Community: https://github.com/odoo/odoo/pull/261943 Task-6111947
This update adds support for popular food delivery services – Talabna, Mandoob, Snoonu, DiDi Food, and Zyada – across various countries. This expansion allows our users to offer their customers a wider range of delivery options, improving convenience and market reach.
Original PR description
In this commit: - We are introducing new delivery providers like Talabna, Mandoob, Snoonu, DiDi Food, and Zyada for different countries. Task-6263289,6263272,6263203,6263165,6310690
This update adds support for Belgium's specific prophylactic leave requirements, separating them into two categories: maternity protection and health risk. Both types of leave are now correctly handled in the payroll system as unpaid, ensuring accurate and compliant payroll processing for Belgian users.
Original PR description
# [IMP] hr_work_entry: add prophylactic leave for Belgium Divided existing prophylactic leave into two categories: maternity protection -> LEAVE14849 / dmfa_code: 51 health risk -> LEAVE225 (existing) / dmfa_code: 53 Added both as unpaid in the payroll structure PR community: 269779 task-6285834
This update adds a new payslip layout specifically designed to meet Indonesian payroll regulations. The changes group salary components (income, deductions, benefits) with totals and key figures like 'Take home pay' and 'Gross Income,' ensuring compliance with local standards and improving clarity for employees.
Original PR description
Add an Indonesian payslip layout that groups salary lines into Income, Deduction and Benefits blocks with their respective totals, plus Take home pay and Gross Income, so the printed payslip better follows the Indonesian standard. task-3112794
This update adds a keyboard shortcut to the Pay Now button within the account payment workflows. This will allow users to initiate payments more quickly and efficiently, streamlining the payment process and reducing the time spent navigating the interface.
Original PR description
Self explanatory. No task ID
Enhancements to existing features
This update enhances the sales dashboard by correctly incorporating subscription data. Specifically, the system now recognizes and displays subscription products within the pivot table view. This ensures more accurate reporting and insights related to subscription sales performance.
Original PR description
Domaine updated for Pivot** #2 Addition of Product > Subscription Product is set on Pivot #2 Task: 6079819
This commit implements changes to align with Welmec certification requirements for the point-of-sale system. Specifically, it ensures order lines are visually marked as deleted, units are displayed correctly, and key numbers are large enough for readability. The LNE certificate number is also now prominently displayed.
Original PR description
See: https://github.com/odoo/odoo/pull/269211 This commit makes the following changes in order to satisfy the WELMEC certification requirements: - Whenever a weighed order line is deleted, instead of disappearing completely it remains visible to the customer but with a strikethrough. - The 'kg' unit is now always displayed to the right of the quantity in the order lines, never below it. - The size of the weight and price numbers when weighing a product have been increased (the guide specifies 9.5mm tall, but we have no physical control of the screen/zoom/PPI, so an `h1` equivalent size is used). - When the tare function is inactive on the scale, we now display 'Gross Weight' instead of 'Net Weight'. - The LNE certificate number is now always visible next to the certified scale icon. task-6273412 <img width="402" height="602" alt="image" src="https://github.com/user-attachments/assets/dd866c5b-d6b3-45a6-8d97-59dbe49c0a0a" />
This update simplifies lead management by directly linking existing subscriptions to leads. Salespeople now have a quick way to view and access customer subscriptions, enabling them to accurately create renewals and upsells. The system automatically connects new quotations to the original lead, streamlining the sales process.
Original PR description
Before this commit, leads did not display a customer's active subscriptions. Salespeople had no direct shortcut to existing contracts, making it difficult to ensure new quotations were correctly created as renewals or upsells for those records. After this commit, a smart button is added to the Lead form showing the count of subscriptions linked to the contact or its parent. Clicking it navigates to the subscription(s). Creating a renewal or upsell from this view automatically links the new quotation to the original lead via context. taskid-6124059
This update merges the 'Ask AI' and 'Odoo Agent' into a single 'Odoo AI' agent, streamlining the AI experience for users. It also optimizes how context data is handled, reducing unnecessary information and improving performance. Finally, the AI agent now supports more complex requests and integrates better with SEO optimization.
Original PR description
Purpose: -------- The "Ask AI" and "Odoo Agent" agents are quite similar except that the latter can not open views. However, users may want to go to another view when using AI from a record. So instead of having two almost identical agents, they are merged into a single "Odoo AI" agent. To avoid context bloating, the list of available menus and models are moved from the initial context to the tool result of the load_topics tool, which allows to only include them when needed. Some columns are also removed from the get_menus and get_model tools because they provided duplicate or inaccurate info (eg. app name is in the complete_path, or model_description was included in the result of both tools although the models are always included in the context if the menus need to be included). Task-6234767
This update enhances the user experience when managing holiday pay within the payroll process. The changes include visual cues – color-coding and tooltips – to highlight outstanding holiday balances and required actions, making it easier for HR staff to track and manage time off allocations. This improves clarity and efficiency.
Original PR description
This commit improves the user experience with the following changes: - Remove the global warning alert banner from the form layout view. - Color the background in orange and add a custom tooltip if the "Allocated" value is different than 0. - Color the background in blue if the "To Allocate" value equals 0 to indicate action is required. - Hide the "Postpone Remaining" columns automatically if the total remaining days across all records is 0. Task: 6259158
This update introduces a sticky reminder pop-up that appears when employees are actively working, prompting them to start their timesheets. This prevents inaccurate attendance records and payroll errors caused by employees forgetting to check in. The reminder is targeted based on employee roles and configurations.
Original PR description
Employees working during business hours sometimes forget to check in or start their timesheet session, which leads to inaccurate attendance records and payroll discrepancies. Before: The systray only…
Employees working during business hours sometimes forget to check in or start their timesheet session, which leads to inaccurate attendance records and payroll discrepancies. Before: The systray only displayed a passive check-in indicator that users could easily overlook during their daily workflow. After: A sticky reminder popover appears when the presence service detects activity, then waits 60 seconds. If the tab remains focused for the full duration, the reminder is shown. Subsequent presence events during the wait do not restart the timer, ensuring a single consistent trigger. The reminder only appears for configured employees: - Attendance only: when "Attendance Based" is enabled on the profile. - Timesheets only: for all timesheet users. - Both installed: if either condition is met. The timer cancels if the tab loses focus or the employee checks in. Clicking the reminder opens the systray dropdown, with wording that adapts to attendance or timesheet context. task-6171500
This update streamlines the Gantt chart's progress bars, providing clearer visual indicators of task completion and workload. The redesign focuses on a cleaner, more intuitive display of remaining hours and capacity, enhancing overall project tracking. Technical changes consolidate the progress bar code for improved efficiency.
Original PR description
*: mrp_workorder, planning, project_enterprise These commits revert https://github.com/odoo/enterprise/pull/101732 and introduce a completely overhauled design and architecture for Gantt row progress…
*: mrp_workorder, planning, project_enterprise These commits revert https://github.com/odoo/enterprise/pull/101732 and introduce a completely overhauled design and architecture for Gantt row progress bars: **Visual & UX Overhaul:** * Introduces a slim, always-visible 5px bar below the row title text, spanning from the title's start column to the right edge of the sidebar (removing previous hover interactions). * Displays remaining available hours as a small text label flush-right inside the row title, which turns red when the row is over capacity. * Adds a tooltip to the progress bar showing the raw breakdown: `value / max (ratio%)`. * Hides the progress bar and label entirely on rows lacking a title. * Stops accumulating left-indent for records inside sub-groups; only group header rows now indent based on nesting level. * Aligns the bar's start column with the row title's indentation, keeping nested group rows visually consistent. * Maintains progress bar support to the total row, overlaid at the bottom via absolute positioning so it does not inflate the sidebar height. **Technical Refactoring:** * Reduces `--Gantt__RowHeader-template-column` from 12px to 8px. * Removes the `MRPWorkorderGanttRowProgressBar` override, as the feature it introduced is now core. * Deletes the `GanttRowProgressBar` OWL component entirely; progress bar rendering is now inlined directly into the renderer templates. Adapts the related overrides to that change. task-6268316
This update consolidates external platform filters into a single "Food Platform" button on the TicketScreen. This simplifies order management and improves the overall user experience by removing confusing multiple filter options. Additionally, an unused field has been removed to streamline the system.
Original PR description
*=pos_urban_piper,pos_enterprise, pos_platform_order, pos_blackbox_be Before this commit: =================== - The TicketScreen displayed separate "Plat. Orders" and "Food Platform" filter buttons. Having multiple buttons for external ordering platforms makes the user interface and order management less intuitive. After this commit: ================== - Merged all external platform filters into a single, unified "Food Platform" button. - Also removed the 'iface_print_skip_screen' field as it is no longer used. Task - 6036688 Related Community PR - https://github.com/odoo/odoo/pull/255729 Related Upgrade PR - https://github.com/odoo/upgrade/pull/9815
This update enhances the user interface for managing activities, specifically focusing on sign requests and VoIP interactions. The changes bring greater clarity and consistency to the workflow, particularly when guiding users through activity type changes, and align the UI with the latest 2026 design standards. This improves the overall user experience and streamlines task management.
Original PR description
* More clarity, more 2026 UI. * Improve UX to guide the user trying to change an activity type to sign request as it it not possible. Task-6253574
This update simplifies Partner Ledger reports for US and Canada users by removing the unnecessary display of account codes. The 'Show Account' filter is now automatically toggled off for these localizations, ensuring a cleaner report view and reducing visual clutter. This change improves the user experience for our key customers in these regions.
Original PR description
Purpose: US and Canada localizations don't use account codes, so it has no value on the report and creates visual clutter. Thus, a "Show Account" filter for Partner Ledger reports will be added in the Posted Entries dropdown, similar to Aged Payable and Aged Receivable reports. Current Behavior: The account code always appear as a column on partner ledgers for all countries. Expected Behavior: By default, companies in US and Canada will have the "Show Account" filter toggled off. All other countries will have the filter toggled on. task-6128250
This update implements Walloon Impulsion reductions for Belgian employees, allowing for monthly deductions based on age (specifically -25 years old) and a 12-month reduction period. The changes ensure accurate payroll calculations and compliance with Belgian regulations, reflecting updates to the country's payroll rules.
Original PR description
Implement Walloon Impulsion reductions in Belgian Payroll. Features: - add support for Impulsion 12 months (monthly deduction from the employee's net salary) - add support for Impulsion -25 years old (monthly deduction from the employee's net salary) - handle old/new regulation rules depending on entitlement start date - add corresponding salary rules on payslips Includes a test for payroll computation. Upgrade PR: https://github.com/odoo/upgrade/pull/10530 task: 6159809
This update prevents customers from viewing detailed timesheets within project sharing portals. It addresses a requirement for some businesses to restrict access to this sensitive information, achieved through website customization settings. This change improves data privacy and control for our enterprise clients.
Original PR description
Some companies may not want customers to see detailed timesheets in project sharing. This change hides all timesheets in the project sharing portal when they are disabled via website customization. task-5139755
This update adds a convenient side panel to the Planning app's calendar and Gantt views, allowing users to easily schedule and reschedule shifts and interventions through drag-and-drop. It also includes improvements to data handling and error prevention, ensuring a smoother and more reliable scheduling experience for Field Service and other planning activities.
Original PR description
This PR adds the side panel feature in the gantt and calendar views of the Planning app (including Field Service). The goal is to allow the user to easily schedule/unschedule their shifts and interventions with a simple drag & drop. related-https://github.com/odoo/odoo/pull/256153 task-5956860
This update enhances the visual appearance of the appointment kanban cards, making them more user-friendly and responsive across different devices. The changes include a refined layout, adjusted column sizes, and a new 'Preview' button replacing the 'Share' button, streamlining the user experience.
Original PR description
This commit improves the visual aspect of the appointment kanban cards by: - reworking the responsive layout - adjusting the size of the columns - hiding unnecessary column when needed It also replaces the "Share" button by a Preview button. task-6069165 & task-5877926
This update streamlines how Odoo responds to events within the browser by replacing older listener methods with a more modern approach. Specifically, it enhances the responsiveness of key modules like Documents, Knowledge, and Sales, improving overall user experience. This change focuses on internal technical improvements.
Original PR description
* documents,iap_extract,knowledge,mrp_workorder,room,sign,social, spreadsheet_edition,spreadsheet_sale_management,timesheet_grid, web_enterprise,web_gantt,web_grid,web_studio,website_knowledge This commit converts useExternalListener to useListener where the target is window or document.
This update simplifies leave scheduling for users and resources within appointments. Previously, managing leaves was complex and inefficient. Now, users can directly create leaves for appointments, streamlining the process and improving scheduling accuracy.
Original PR description
Purpose ======= Make it easier to manage leaves on users and resources in appointment. Specification ============= Previously, from appointment, the user could only set leaves on…
Purpose ======= Make it easier to manage leaves on users and resources in appointment. Specification ============= Previously, from appointment, the user could only set leaves on 'appointment.resource' records, not for users. To make a user unavailable, they would have to either take a leave, create an event set as busy in their calendar for the period, or install hr_holidays to get the time off form. Also, resource leaves were managed using 'resource.calendar.leaves' records, meaning blocking 4 resources for a small period of time on 5 different days would create 20 records. Now, from appointment, leaves can also be created for users completely independently from their regular hr leaves. As 'res.users' records don't have a 'resource.resource' record if they're not linked to an 'hr_employee', it wasn't optimal to use the 'resource.calendar.leave' model to manage leaves like for the resources. That's why we're introducing a new 'appointment.leave' model, which will handle the leave configurations for users and resources for specific appointment types using a method called '_get_appointment_leave_intervals'. As a leave can be set across multiple appointment types, the question of the timezone has been raised. The first idea was to consider the leave in the appointments timezone directly. Example: "From 2-3PM, in the Dental Care timezone, and from 2-3PM in the Tennis Court timezone" However, when creating a leave, the dates are converted from the browser timezone to UTC, meaning that from python it's impossible to remember the initial timezone after save. A timezone field was then considered, but another issue appeared: If the browser tz is different from the one picked in such a field, the dates would still be stored in UTC, shifted from values displayed in the form in the browser tz. A conversion into the picked tz would then not make any sense, as it would be a double shifting with no relevant feedback. As we are setting absolute datetimes, we prefer using the default behavior of the framework instead. For instance, let us consider a user with browser tz Europe/Brussels (summer time, utc+2): If they set a leave on July 8th from 14.00 to 15.00 in the form, then July 8th 12.00-13.00 will be stored (as in UTC). If an appointment with this leave is in utc+4, then their 16.00-18.00 slots will be unavailable. This matches previous datetime selection behavior when creating resource leaves, and also how slots datetimes are selected in flexible appointments. Adding an alert info in the appointment.leave form view to inform users when some of the selected appointment types have a different timezone than the current one used for leave creation. Task-5914412
This update enhances the display of commission achievements by correctly identifying the user associated with each document, particularly within dynamic plans. It also addresses several underlying issues related to target calculations, traceability of adjustments, and data type casting to prevent errors, ultimately improving the accuracy and reliability of commission reporting.
Original PR description
In dynamic plans, achievements can be computed based on other user's documents (invoice, SO etc). This commit ensure that we display the user assigned to the document. task-6253512
This update enhances the visibility of employee and manager feedback within the appraisal process. Changes were made to the underlying logic for hiding feedback, ensuring consistency and a better user experience. This improves the overall efficiency of the appraisal workflow.
Original PR description
In order to maintain the same logic while dealing with the appraisal in terms of hiding employee's and manager's feedback, some publishing conditions have been reworked. Task: 6304238
This update simplifies currency conversion within our financial reports. By centralizing currency rates in the `account.move.line` fields, we've eliminated redundant and complex report-specific calculations. This change improves report efficiency and reduces the risk of errors when currency exchange rates update.
Original PR description
Now that currency conversion is implemented in the `consolidation_rate` and `consolidation_balance` fields on `account.move.line`, the per-report boilerplate — manually joining the currency table and wrapping each column with `_currency_table_apply_rate` — is redundant. Replace it by passing `Query` objects through to the report queries and referencing the new fields directly. The conversion logic now lives in a single field definition; if the underlying rate mechanism changes, no report needs to be touched. The per-report diff is intentionally minimal: each site just drops the manual join and replaces the wrapped expression with the field reference.
This update adds a new right-click option to dynamic lists within the Odoo Enterprise application. Users can now sort lists by clicking on the column headers, improving data organization and usability. This enhancement streamlines workflows for managing data within key modules.
Original PR description
Task: 6233381
This update adds helpful tooltips to key lines within the French fiscal declaration reports. These tooltips provide users with immediate context and explanations for each line, improving understanding and reducing potential errors when preparing these important financial reports. This enhancement supports compliance and simplifies the reporting process.
Original PR description
In order to help users understand the meaning of some lines of the fiscal declaration reports, we are adding tooltips on some of them. Task ID: 6159842
This update enhances the ECO report and its associated form, making it easier for users to review and understand changes. Key improvements include a simplified report layout, a more user-friendly form with a non-mandatory description field, and a smart button that only appears when changes are present, streamlining the approval process.
Original PR description
- ADD title : ECO Changes Summary - ADD subtitle : name of the ECO - The description field is not mandatory anymore - The smart button `Review changes` is only visible if there are changes to review, otherwise it is hidden. Task-6208775
This update enhances the AI chat experience by allowing conversations to be stored for 30 days after the last message, enabling users to resume chats and gather feedback. A new 'AI' category has been added to the discuss app for easy access, alongside features for managing and deleting AI chat sessions.
Original PR description
\* = crm_livechat, livechat, website Purpose: -------- Instead of deleting AI chat channels when closing the chat window, they are deleted 30 days after that the last message was sent (they are still…
\* = crm_livechat, livechat, website Purpose: -------- Instead of deleting AI chat channels when closing the chat window, they are deleted 30 days after that the last message was sent (they are still deleted on close if no message was sent), allowing users to resume their AI conversations as well as allowing to gather feedback and evaluate the agents that are used in livechats. To ease the access to these AI conversations, a new discuss category has been introduced (making them visible in the sidebar of the discuss app). When an ai chat is expanded in full view, this category is automatically unfolded and all the other ones are folded. A new thread action "delete-ai-chat" has also been added to give the users the ability to delete their AI conversations themselves. For this purpose, the `/ai/close_ai_chat` route which was previously used every time an ai chat was closed to delete the channel if needed has been replaced by a simple unlink (the checks are now done on the client side), because only used for internal users: the channel is already deleted if a guest leaves an empty livechat channel, and one should keep the ones where a guest sent a message. ACLs have been added so that users can unlink their own AI chat channels. Some other related changes have been done such as adding a new AI category in the messaging menu, showing the AI agent partner on the livechat session's kanban cards,... Task-6007887
This update streamlines the process of submitting CIS returns by automatically generating them when applicable. Instead of a separate report submission, the system now integrates CIS return generation with the existing account return flow, improving efficiency and accuracy. This ensures compliance with UK tax regulations.
Original PR description
* Generate CIS returns automatically if period had move lines with CIS tax tags used. * Instead of submitting the CIS return via report, integrate cis submission with account return flow. task-5481774
This update changes the color of the 'To Review' status badge on employee records from grey to orange. This improves readability, particularly in dark mode, ensuring that HR staff can quickly identify and address outstanding tasks.
Original PR description
The 'To Review' status on employees uses a grey badge ('secondary'), which has poor contrast and is nearly invisible in dark mode.
Update the 'review_state' field options to change '2_to_review' to 'warning' (orange). This ensures the badge is readable in both light and dark modes.
Task: 6289919
Forward-Port-Of: odoo/enterprise#120486
Forward-Port-Of: odoo/enterprise#120268This update enhances the integration with UrbanPiper by dynamically syncing product tags based on tax configurations. Now, users can define relevant tags for their products, ensuring UrbanPiper receives the correct information and improving data accuracy for orders.
Original PR description
Before this commit: ------------------------------------------ - The UrbanPiper payload used a hardcoded tag when the tax percentage was not 5%. - There was no mechanism to add additional tags based on providers, even though UrbanPiper supports multiple tags. After this commit: ------------------------------------------ - Tags are now dynamically handled using the Tag field in the product. - Users can define tags according to their tax configurations and aggregator requirements. - UrbanPiper only accepts relevant tags (default or provider-specific). task - 5154061 Forward-Port-Of: odoo/enterprise#118827 Forward-Port-Of: odoo/enterprise#96742
Resolved issues and error corrections
This update expands the functionality of the sign creation process by enabling drag-and-drop support for all pointer types – including touch and pen – on Odoo Enterprise. This allows users to more easily create, move, and interact with sign elements, improving usability across different devices and workflows.
Original PR description
Dragging sign elements was previously limited to mouse input. This fix ensures full support for all pointer types, including touch and pen, allowing users to drag new sign items, reposition existing ones, and interact with the interface seamlessly. task-5001223
This update ensures that all conversation history and attachments are correctly transferred when converting between Helpdesk tickets and Project tasks. Previously, this information was lost during the conversion process, which is now resolved to provide a more complete and accurate record of project communications and files. This enhances collaboration and data integrity.
Original PR description
Before this commit, attachments and chatter messages were not moved to the new record when converting a Helpdesk ticket to a Project task or a task back to a ticket. This commit ensures that: - The chatter history is transferred to the newly created record. - All attachments linked to the original record are moved to the new one. task-4796664
This update fixes a problem where the Timesheet Assistant was suggesting activities that were already tracked. Now, explicit timer sessions act as 'clipping masks,' ensuring tracked time takes priority. Additionally, the system now automatically updates its data to prevent issues when timesheets are deleted, improving overall accuracy.
Original PR description
The Assistant previously suggested activities for periods already covered by the physical timer. To fix this, explicit timer sessions now act as invisible clipping masks that prioritize tracked time over suggestions. This was implemented fully client-side because live timer interactions are inherently managed there. These local blockouts are merged into the timeline first to naturally clip overlapping events, but are hidden from the UI to prevent redundant cards. Finally, to prevent orphaned blockouts when timesheets are deleted, the cache self-heals by validating its IDs against the database on load instead. Task: 6216903
This update fixes an issue where documents added through the 'Add from Documents' feature didn't display correctly in emails. It now aligns with the standard email attachment flow, eliminating incorrect spacing and ensuring previews are shown, leading to a better user experience when sending documents via email.
Original PR description
**Purpose of this PR:** Before this commit, documents added via "Add from Documents" did not integrate properly with the mail composer: previews were not shown, and when a document was added as a link with an empty body, line breaks were still applied and introduced extra spacing above the attachment. This commit aligns added documents with the regular mail attachment flow so they render correctly in the composer, and avoids inserting unnecessary spacing when no text content is present. Related PR: https://github.com/odoo/odoo/pull/256866 task-5947683
This update ensures that employees are only paid for the actual hours they worked by correctly deducting undertime from their payslips. Previously, the system didn't automatically apply these deductions. The update also removed outdated test cases related to old company-level settings.
Original PR description
Previously, when an employee worked fewer hours than expected, the missing hours (undertime) were correctly tracked but the salary deduction was not applied on the payslip. After this improvement: - Undertime hours are now correctly deducted from the payslip so the employee is only paid for the hours they actually worked. - Removed test cases that were testing old company-level tolerance settings which have been removed. task-5892244
This update fixes a reporting issue where tax information wasn't correctly captured for invoices using group taxes in the Philippines. The change ensures that all child tax tags are included in generic reports, accurately reflecting tax details for SC/PWD exempt components and other tax categories.
Original PR description
When using group taxes, the base invoice lines only store the parent tax in the `account_move_line_account_tax_rel` table. Because of this, if a child tax within the group contains a specific tax report tag (e.g., tag 33A on the SC/PWD exempt component introduced in the base localization), the generic report query would previously fail to pick up those base lines. This commit updates the SQL join conditions in `l10n_ph_generic_report.py` to also match `account_tax.id` against the child taxes of the linked parent tax using the `account_tax_filiation_rel` table. This ensures that base lines are correctly reported under the tags of their respective child taxes. Task-6032306 See: odoo/odoo#269250
This update fixes a minor issue in the demo data for the Odoo Enterprise HR payroll module. Specifically, a reference to an employee type was incorrect, preventing demo records for non-permanent employees from functioning properly. This change ensures the demo data accurately reflects the system's configuration.
Original PR description
The non-permanent employee demo records referenced a missing XML id l10n_id_contract_type_non_permanent for employee_type_id. Point them at the actual record, l10n_id_employee_type_non_permanent. task-6215687
This update fixes a problem where users couldn't access payslips related to departing employees. The changes ensure that only the departing employee's payslips are displayed, preventing errors and improving the user experience. A technical update was also made to ensure compatibility with newer Odoo versions.
Original PR description
Bug 1: In the departure tab of the Employee, you can't open the payslip list Fix: Added a check to get the correct departure id depending on the model we are in Bug 2: You can select payslips for…
Bug 1: In the departure tab of the Employee, you can't open the payslip list Fix: Added a check to get the correct departure id depending on the model we are in Bug 2: You can select payslips for other employees than the departing employee and the payslips list is not affected Fix: - made fields `l10n_be_payslip_n_ids` and `l10n_be_payslip_n1_ids` stored and added a domain on them to only show the payslips of the departing employee - when a payslip is validated for the departing employee after creating the departure, it's added to the corresponding field Bug 3: You get an error because you can't read `currency_id` when opening n payslips (happens when the monetary fields are shown in the list) Fix: moved the `currency_id` to be inside the list instead of the parent form Note: the relation names for `l10n_be_payslip_n_ids` and `l10n_be_payslip_n1_ids` are changed to avoid upgrade error `m2m relations have respawn` as they existed before 19.2 in the removed `hr.departure.wizard` model. task-id: 6265648
This update resolves an issue where the project ID field was incorrectly marked as optional in the timesheet view. The system now correctly enforces the requirement for a project ID, ensuring accurate timesheet tracking and reporting. This change improves data integrity within the Enterprise module.
Original PR description
`project_id` is always required in the parent timesheet view. Setting it to `optional="hide"` in this inherited view is invalid. task-6113642
This update ensures that staff members, designated as part of an appointment type, are automatically added as attendees to new appointments created through the Gantt view. Previously, this step was manual. This change improves the user experience by streamlining appointment creation and ensuring staff are always included.
Original PR description
### Steps to reproduce: - Install 'Appointment' app - Configure an Appointment Type with your user as staff member - Go to the Appointments Gantt view - Click on the 'New' button to create a new…
### Steps to reproduce: - Install 'Appointment' app - Configure an Appointment Type with your user as staff member - Go to the Appointments Gantt view - Click on the 'New' button to create a new appointment > The staff member is not automatically added to the meeting's attendees (guests) list. ### Cause of Issue: When generating the default values for a new calendar event from the Gantt view (indicated by `booking_gantt_create_record` in the context), the base `default_get` method doesn't account for auto-adding staff members in obvious cases (when there's only one staff member available or the current user is one of the staff). ### Fix: Override `default_get` in `calendar.event` to automatically add these staff members when they are the only available option, providing a smarter and more seamless UX. opw-6181794 Note: the same PR was done for 18.0, but now this is moving it to master since it's more of a feature not a fix. Original PR: https://github.com/odoo/enterprise/pull/118331
This update improves the clarity of payslip reports by ensuring all line rates are consistently displayed with two decimal places. Previously, trailing zeros were shown, which was visually confusing. This change provides a more professional and accurate representation of employee compensation.
Original PR description
Problem: A lot of trailing zeros were displayed on the rate of each payslip line, in the salary tab of the payslip form. Solution: At first, it was decided to remove trailing zeros. But in the end, we chose to always display 2 decimal places. Task-6310227
This update resolves an issue where the appointment calendar displayed 'no available slots' for future months when appointment scheduling lead times were long. The fix accounts for lead times to ensure the calendar accurately reflects available appointments, improving the user experience for booking.
Original PR description
The website appointment calendar fills availabilities one month at a time and the update_available_slots route maps the calendar month index to an absolute month from datetime.now(). This only…
The website appointment calendar fills availabilities one month at a time and the update_available_slots route maps the calendar month index to an absolute month from datetime.now(). This only matches the displayed months when the first one is the current month. When the first bookable slot is later, a punctual appointment starting in a future month or any appointment whose "at least X hours before start time" lead time pushes the first slot past the current month, navigating forward requests the wrong month and the reached month renders empty. In update_available_slots, take the lead time into account when computing the reference month so it lands on the first displayed month: the start datetime for a punctual appointment starting in the future, otherwise now plus the minimum schedule hours. The navigated month index is then added to that reference. This extends https://github.com/odoo/enterprise/commit/f0e5b14a823cf97218f4094d287a328e2744fd73 which only handled the future start datetime. Steps to reproduce: 1. Open the Appointments app 2. Open an appointment type, set Schedule to Weekly and Allow Bookings to On specific dates with a range ending a few months out 3. Set the "at least N hours before start time" field to 360 4. Save and click the Preview button in the header 5. Pick a resource or staff member to reach the calendar 6. Click the right arrow to navigate to the next month => the next month shows "Sorry, we have no more slots available for this month" opw-6206293 Forward-Port-Of: odoo/enterprise#120715
This update resolves a technical issue that previously caused errors when users attempted to copy heading links within the knowledge editor. The change removes a dependency on the HistoryPlugin, streamlining the process and ensuring a smoother user experience. This improves the reliability of the knowledge editor for all users.
Original PR description
Prevent traceback when clicking the button to copy a heading link to the clipboard. Technical - Commit https://github.com/odoo/enterprise/commit/70bb74faecadea768bb17a4feb69fa327623ab5d removed the history dependency, although commit() is provided by HistoryPlugin and still requires it. Task-6267431
This change resolves a potential issue during software updates. A previous version of the Point of Sale module caused conflicts with the new stable version, leading to upgrade script errors. Renaming the 'obox_pos' module ensures compatibility and a smooth update process.
Original PR description
A stable module `obox_point_of_sale` was added in saas-19.3 but in master a module `obox_pos` is also present. This will cause some big upgrade script in the FW of `obox_point_of_sale` so renaming the module in master to prevent this error.
This update resolves a problem where test data from one test case was incorrectly carried over to subsequent tests, leading to unreliable results. The fix ensures that the test environment is properly reset after each test, preventing this 'cross-test pollution' and improving the stability of our testing process.
Original PR description
At each test end, the DB is reverted to the Savepoint, but the registry is not reloaded. This causes cross-test pollution This commit fixes this by reloading the registry after each test runbot-error-940278
This update ensures that the employee is automatically selected when creating a new off-cycle payslip. Previously, users had to manually choose the employee, which was a manual and potentially confusing step. This change streamlines the process and improves user efficiency.
Original PR description
Steps to reporoduce: 1) open any employee who has at least one payslip 2) open the employee view and click on payslip smart button 3) List view will open, now click on 'new Off-cycle' button 4) Employee is not there by default. Issue: The employee should be set by default. Solution: Add default_employee_id to the action context so that the employee is set by default when creating a new off-cycle payslip. task-6309649
This update resolves an issue where clickable links within tax return anomaly checks were broken, preventing users from accessing detailed reports and resolving errors. The fix restores the functionality of these cards, allowing users to easily investigate and address tax return discrepancies. This ensures accurate reporting and efficient issue resolution.
Original PR description
Steps to reproduce: - Open tax returns menu items and set opening date - Try to click on an anomaly check -> It should open the corresponding action/view to see the failing records or report to solve the check, but the card is not clickable anymore and the cursor isn't displayed as it should.
This update improves the clarity of payslip reports by only showing bank accounts when there's a positive payment amount. Previously, bank accounts were always displayed, even with zero balances. This change simplifies the report and reduces visual clutter for users.
Original PR description
Now, on payslip's reports, bank accounts are shown at the bottom of the page only if there is a strictly positive amount to pay. task-6311010
This update replaces a problematic function (`cleanTerm`) with a more robust one (`normalize`) in the mail system. Removing the fallback to empty strings prevents hidden errors and ensures data integrity, leading to more reliable email processing.
Original PR description
This commit removes the `cleanTerm` function and replaces its usages with `normalize`. When the value provided to `cleanTerm` is not a string, it falls back to returning an empty string. This is seen as a bad practice, as it could easily hide programming errors. There is no sense to calling `normalize` on something other than a string; if another kind of value ends up in there, it is most likely a mistake. [Task-4818712](https://www.odoo.com/odoo/1519/tasks/4818712) Community: https://github.com/odoo/odoo/pull/262514
This update corrects a display issue where the 'DIMONA Category' column was missing from employee type lists for employee types not associated with a specific country. The fix ensures this column is always visible, regardless of the employee type's country setting, improving data visibility and reporting accuracy.
Original PR description
Steps to reproduce: 1. Install l10n_be_hr_payroll 2. Go to the list view of employee types 3. Show the column DIMONA Category 4. The category is missing for some records (Employee, Student, etc) Cause: The field is invisible if the country of the employee type is not Belgium. But it should still be visible for employee types without a country. Fix: change the invisible condition to allow employee types without country. Task: 6303674
This update ensures that certain Belgian salary rules are only applied to employees with variable salaries. Previously, these rules were incorrectly applied even when no variable salary was configured. The change verifies the contract's 'commission_on_target' field, preventing the rules from being applied in cases where a variable salary isn't present, improving payroll accuracy.
Original PR description
The Belgian salary rules with codes 'COM_LOSS_PH' and 'COM_LOSS_SICK' should only apply to employees who actually receive commissions.
Update the python condition ('condition_python') on both rules to verify that the contract's structure version ('version_id') contains a non-zero value for the 'commission_on_target' field. This ensures these rules are skipped when no variable salary is configured.
Task: 6300080This update corrects a technical error in the Odoo Enterprise payroll module that was causing incorrect cache behavior when rule parameters were missing from the database. The fix ensures that the system correctly identifies missing parameters, preventing errors and improving the stability of payroll calculations. This resolves a potential issue impacting payroll accuracy.
Original PR description
After https://github.com/odoo/enterprise/commit/1ee878fea4e5985852960bb4640a32abfa95ac9e: `_get_cached_parameter_from_code` returns `SENTINEL` when a rule parameter doesn't exist in the DB. `CacheLayer.__getitem__` uses that same `SENTINEL` to detect absent keys. When the stored value IS `SENTINEL`, it is indistinguishable from a missing key; so every subsequent lookup falls through to the parent and raises `KeyError` which `ormcache.lookup()` treats as a miss. applied fix: make _get_cached_parameter_from_code use different object than Sentinel for missing parameters.
This update prevents deleting a batch payment once linked payments have been marked as 'sent' and an XML export file has been generated. This ensures continued compliance with SEPA regulations, which require payments to remain marked as sent. Disallowing deletion maintains the integrity of export files for reporting.
Original PR description
When you create a batch payment, linked payments are marked as sent, and an export file is generated (XML). But if you delete the batch payment, the payments will remain marked as sent, meaning you won't be able to re-generate a new XML file for those payments. As we don't want to unmarked them as sent (we can't for SEPA payments), we decided to disallow the batch payment deletion in those cases. task-6117210 Forward-Port-Of: odoo/enterprise#117748
This update corrects a technical issue in the l10n_ch_reports module that was causing errors during financial report processing. The problem stemmed from a removed subformula not being reset to a default value, leading to incorrect calculations. This fix ensures accurate report generation by setting the subformula value to False.
Original PR description
The subformula was [removed](https://github.com/odoo/enterprise/pull/117601) without resetting its value to False, leaving existing values in the database. This causes errors when processing records that still contain a subformula value. ```.py Invalid subformula in expression "balance" of line "Treasury shares": -sum ``` To prevent these errors, existing subformula values are reset to False opw-6297901 Forward-Port-Of: odoo/enterprise#120663
This update fixes a minor visual issue in the web studio's property tag display within SelectMenus. Previously, tags were limited to 200px, leaving unused space. Now, tags automatically expand to fill the available width, creating a cleaner and more efficient user experience.
Original PR description
Before: Each tag was limited to 200px, leaving available space unused. After: Each tag now expands to 100% of the available width. task-5226503 Forward-Port-Of: odoo/enterprise#120260
This update resolves an issue that caused a traceback when users deleted the last column from a table within the Odoo Report Editor. The fix prevents a technical error by ensuring the editor handles the scenario where a table has no remaining columns gracefully. This improves the overall stability and reliability of the report design process.
Original PR description
Problem: When deleting the last column in a table in studio we get a traceback. Cause: `firstCell` will be null if we delete the last cell in the table. Fix: Added a null check on `firstCell` before calling `setCursorEnd`, so the cursor is only repositioned when the table still has remaining cells. Steps to reproduce: - Edit a report with a table. - Remove all columns. - Traceback will occur when deleting the last one. opw-6263696 Forward-Port-Of: odoo/enterprise#119502
This update fixes a display issue where the AI button was incorrectly shown in the Mass Mailing builder but not the Website Builder. The fix redirects patching to the Website Builder, ensuring the AI button appears only when using the website functionality. This improves the user experience for website visitors.
Original PR description
__Problem__ When opening the Mass Mailing builder after the Website Builder, the AI button is still shown. Conversely, if we open the Website Builder after the Mass Mailing builder, the AI button is never shown. This happens because Owl mounts the Builder component only once as long as we don't refresh the page. Since we patch the generic HTML Builder to put the AI button in the sidebar, the state of the first time it's mounted is preserved. __Fix__ Patch the Website Builder directly instead, as we only want the AI button to be available in the website. Community PR: odoo/odoo#270266 task-6189057 Forward-Port-Of: odoo/enterprise#120688
Features or functions removed from Odoo
This update removes the ability for AI conversations to suggest channel completion with '#' symbols. This change aligns the AI experience with the recent removal of channel autocompletion in the Discuss app, streamlining the user interface and improving consistency. Now, only '@' mentions are suggested within AI chat and AI composer channels.
Original PR description
This PR removes support for '#' channel autocompletion from AI conversations to align with the removal of channel autocompletion in Discuss. Only '@' suggestions remain available in AI chat and AI composer channels. community: https://github.com/odoo/odoo/pull/269214 task-6113197
This pull request removes outdated code related to generating payroll payslips in the Odoo Enterprise module. This cleanup improves the codebase's efficiency and reduces potential maintenance overhead. The change has no direct impact on business users.
Original PR description
. Remove hr.payroll.generate.warrant.payslips dead code task-6308624
This update removes a deprecated overtime work entry type within the US payroll module. The change ensures the system aligns with current regulations and simplifies payroll processing. This update primarily affects how overtime hours are tracked and reported.
Original PR description
- changed the reference to the overtime work enty type as it's removed. task-id: 6281648
This update removes outdated 'onWillRender' hooks used in the HR payroll module. As part of the ongoing Owl 3 migration, these hooks have been replaced with modern alternatives to ensure the payroll system continues to function correctly and efficiently. This change improves system stability and prepares for future updates.
Original PR description
As part of the Owl 3 migration, replace deprecated onWillRender hooks with the appropriate Owl 3 alternatives.
This update removes a technical field related to how messages are fetched within the Helpdesk system. The change streamlines message access by centralizing control through the mail module, improving efficiency and security. This ensures consistent access to messages across different use cases.
Original PR description
This change removes `website_message_ids` field considering: - Toward using a unique route for fetching the messages, the mail module should be the main gateway to restrict access to messages. Since reading a field that contains the whole messages of a record without pagination is not a good idea and considering what `website_message_ids` does (defining domains depending on the share context), this change moves the domain responsibility to a method on `mail.thread`. - There are some use cases (e.g. reading the comments on slides) where the same restriction as fetch route restriction is needed to get the correct data. Those cases would use a same fetch domain method from `PortalWebClientController`. [Community PR](https://github.com/odoo/odoo/pull/261003)
Code cleanup and technical improvements
This update removes outdated and easily replaceable 'useComponent' elements across several Odoo modules. This refactoring streamlines the codebase and improves maintainability. The changes primarily affect the account reports and knowledge modules, ensuring a cleaner and more efficient system.
Original PR description
Remove some useComponent that can easily be replaced. Task-6268109 PR community: https://github.com/odoo/odoo/pull/267742
This update modernizes the IoT module by transitioning to a new standard for defining component properties (OWL3). Unused prop definitions related to a reporting component have also been removed, streamlining the module's structure and reducing complexity.
Original PR description
This commit changes all the props definitions in the IoT module to the new OWL3 style. It also removes the prop definitions for the `IoTReportLocalStorage` component, as the props are never used.
This update streamlines how partner identifiers are managed within Odoo, consolidating them into a single JSON field. Removing the outdated 'company_registry' field and standardizing routing identifiers improves compatibility with e-invoicing standards like UBL and Peppol, simplifying reporting and integration. This change enhances data accuracy and reduces complexity for users.
Original PR description
We previously replaced the scattered, country-specific partner identifier fields with one JSON field `additional_identifiers`. This commits continues to clean up after that change, mainly: - Move the…
We previously replaced the scattered, country-specific partner identifier fields with one JSON field `additional_identifiers`. This commits continues to clean up after that change, mainly: - Move the additional_identifiers JSON field into base: some modules (l10n_xx_hr_payroll) don't depend on `account` yet still have similar contact's identifiers. - Drop the company_registry field as now, everything should be more specific, and stored in the JSON field. Smaller changes: - add base helpers selecting a partner's preferred legal-entity, tax and routing identifier, reused by UBL/CII EDI, SAF-T and Peppol/PDP - rename peppol_eas/peppol_endpoint to routing_scheme/routing_endpoint (+ computed routing_identifier) so any e-invoicing network can route using this fields => less confusing. - Some countries have non-stored compute/inverse for convient access (l10n_fr_siret/siren, SG UEN, NO Brønnøysund, ...), - adapt UBL/CII exports, SAF-T reports and invoice reports after the removal of the company_registry. - cleanup of the scheme/endpoint validation so that's it's more coherent. There was 3 different validation before, of only a subset of schemes. task-6140750
This update refactors how Odoo determines the current website, moving from a database query to a controller-based approach. This change enhances efficiency and stability by avoiding reliance on the original `website` model method. The update improves the underlying data retrieval process.
Original PR description
The corresponding community PR adds a controller `/website/get_current_website_id` to get the current website. This commit uses it instead of the `website` model's method `get_current_website`.
This update simplifies website routing by replacing older methods with a more reliable approach. It ensures that website-specific data is consistently accessed, leading to improved accuracy and stability. Future work will address more complex fallback scenarios.
Original PR description
[REF] base/website: migrate controllers and models to `self.env.website` Replaced legacy `get_current_website()` calls with `self.env.website` across controllers and models where fallback behavior…
[REF] base/website: migrate controllers and models to `self.env.website` Replaced legacy `get_current_website()` calls with `self.env.website` across controllers and models where fallback behavior was unintended. Mechanics & Context: - For routes defined with `website=True`, the routing layer automatically injects `website_id` into the context. - `self.env.website` natively reads this `website_id` from the context, behaving exactly like `get_current_website(fallback=False)` (without falling back to `host_id` or the first available website). - `host_id` (added during routing) represents the website matched strictly by domain name, independent of `website=True` or website-module specific overrides. Scope of Cleanup: This PR intentionally focuses only on the call sites that can be safely converted to a plain `self.env.website`. Locations that require explicit fallback handling, such as falling back to `host_id` (the strict domain-matched website) or a default website, have been left out of this pass when it's linked to a complex feature or behavior. They require deeper analysis and will be addressed in a subsequent PR.