Daily updates from Odoo
Wednesday, February 25, 2026
13 changes · master
Enhancements to existing features
This update adjusts the Employee State Insurance Corporation (ESIC) contribution threshold for employees with disabilities in India. The threshold has been increased to ₹25,000, aligning with current regulations and ensuring accurate payroll calculations for this specific employee group. This change improves compliance and supports our Indian customers.
Original PR description
… with disabilities The Employee State Insurance Corporation (ESIC) scheme in India provides special provisions for persons with disabilities (PwDs), extending the wage threshold from ₹21,000 to…
… with disabilities The Employee State Insurance Corporation (ESIC) scheme in India provides special provisions for persons with disabilities (PwDs), extending the wage threshold from ₹21,000 to ₹25,000. This commit implements: - New `l10n_in_esic_pwd` boolean field on employee contracts to identify persons with disabilities - Dynamic threshold selection in ESIC computation methods based on PwDs status - Configurable rule parameters (`l10n_in_esic_pwd_value` = ₹25,000) allowing administrators to adjust thresholds without code changes - Updated salary rules (ESICS and ESICF) in both regular_pay and ind_emp structures to use parameter-based threshold conditions - Employee form view updated with PwDs checkbox and tooltip explaining the extended threshold - Comprehensive test coverage for all threshold scenarios: * Below standard threshold (₹20,000) → ESIC applies * Above standard threshold (₹22,000) → ESIC does not apply * PwDs below extended threshold (₹24,000) → ESIC applies * PwDs above extended threshold (₹26,000) → ESIC does not apply ESIC contributions are now correctly calculated based on whether the employee is a person with disability, ensuring compliance with Indian payroll regulations. Task Id: 5498893
This update adds tests to ensure accurate calculation of wage types on payslips, considering various employee contract settings and leave requests. The changes improve the reliability of payroll processing by validating that wage types are correctly applied across different scenarios, particularly those involving multiple months and leave periods.
Original PR description
This commit adds tests to the `_compute_l10n_ch_swiss_wage_ids` function to verify **Wage Types** in payslips across multiple months and with different **Monthly Wage Types** defined in an employee’s contract, as well as multiple leave requests occurring in different months. task-5906677 Forward-Port-Of: odoo/enterprise#107802
This update enhances the depreciation schedule reporting by automatically applying an analytic filter. This allows for more precise tracking of asset costs by department or project, improving financial reporting accuracy and enabling better cost analysis. This change was implemented to align with best practices for asset management.
Original PR description
Forward-Port-Of: odoo/enterprise#108334
This update incorporates data representation for 'page 2 bis' within the Spanish tax reporting process. This addition aligns with updated tax regulations in Spain, ensuring accurate and compliant reporting for our Spanish-speaking customers. It improves the completeness of the 390 boe report.
Original PR description
In this commit: - We are adding representation of page 2 bis to the 390 boe.txt task-5881396 Forward-Port-Of: odoo/enterprise#106861
This update improves the usability of helpdesk tickets by ensuring that links sent in email notifications automatically include the team the ticket belongs to. Previously, these links didn't provide context, making it difficult to navigate back to the relevant team's Kanban board. This change streamlines the workflow for support teams.
Original PR description
Before this commit, the link sent in ticket email notifications opened the ticket without team context, making it hard to navigate back to the team kanban. This commit ensures that: - Ticket URLs include the team when the ticket belongs to one. task-5354598
This pull request enhances the user interface of the post modal across various social channels (Facebook, Instagram, LinkedIn, Twitter, YouTube) and light/dark modes. The changes address previous issues with padding and balance, resulting in a more visually appealing and user-friendly experience for users viewing and interacting with posts. This improves overall usability and brand perception.
Original PR description
*: social,social_facebook,social_instagram,social_linkedin, social_twitter,social_youtube Before this PR, UI was lacking padding and balance. | | Before | After | |--------|--------|--------| |Light…
*: social,social_facebook,social_instagram,social_linkedin, social_twitter,social_youtube Before this PR, UI was lacking padding and balance. | | Before | After | |--------|--------|--------| |Light Mode **Kanban**| <img width="1479" height="769" alt="Kanban_Light_Before" src="https://github.com/user-attachments/assets/3d69fd69-a548-4ace-aab0-7fe2abf197b7" /> | <img width="1479" height="769" alt="Kanban_Light_After" src="https://github.com/user-attachments/assets/2c381409-112c-473d-8977-7e5a31441c80" /> | |Dark Mode **Kanban**| <img width="1479" height="769" alt="Kanban_Dark_Before" src="https://github.com/user-attachments/assets/2340a82a-6327-4a9e-a1bd-bfd7555c19fe" /> | <img width="1479" height="769" alt="Kanban_Dark_After" src="https://github.com/user-attachments/assets/1c4917fc-2a06-4430-8774-9d2859253107" /> | |Mobile View **Header**| <img width="582" height="712" alt="Header_Before" src="https://github.com/user-attachments/assets/c1acf0f5-ddd2-4fba-aa9c-dfb98e72d8d7" /> | <img width="582" height="712" alt="Header_After" src="https://github.com/user-attachments/assets/c5d525aa-935c-4035-952c-27ad0e528076" /> | |Light Mode **Picture Modal**| <img width="987" height="807" alt="Pic_Modal_Light_Before" src="https://github.com/user-attachments/assets/41351a77-ddba-4d91-b2bc-45c03ad9035a" /> | <img width="987" height="807" alt="Pic_Modal_Light_After" src="https://github.com/user-attachments/assets/b0538ea3-87fe-45c1-aa6b-63a255c6f9d9" /> | |Dark Mode **Picture Modal**| <img width="987" height="807" alt="Pic_Modal_Dark_Before" src="https://github.com/user-attachments/assets/5cf4d512-ea7c-4aac-9a38-468d05952697" /> | <img width="987" height="807" alt="Pic_Modal_Dark_After" src="https://github.com/user-attachments/assets/3c811ad2-3e1f-4c16-a269-b04649cf68dc" /> | |Light Mode **Post Hover State**| <img width="698" height="426" alt="Hover_Light_Before" src="https://github.com/user-attachments/assets/b374584c-814f-4fe6-acf0-0e92da98dc22" /> | <img width="698" height="426" alt="Hover_Light_After" src="https://github.com/user-attachments/assets/dd63fe9d-625d-46ed-92da-1b246354e414" /> | |Dark Mode **Post Hover State**| <img width="698" height="426" alt="Hover_Dark_Before" src="https://github.com/user-attachments/assets/78f91e02-5677-4089-8a3e-1849566befd4" /> | <img width="698" height="426" alt="Hover_Dark_After" src="https://github.com/user-attachments/assets/d7a4ed20-057e-4b58-8a2a-0119b65da965" /> | |Stream Post View **Facebook**| <img width="340" height="267" alt="Facebook_Kanban_Before" src="https://github.com/user-attachments/assets/f69531bd-6177-4a28-acb5-8ad200546ca2" /> | <img width="340" height="267" alt="Facebook_Kanban_After" src="https://github.com/user-attachments/assets/f3be3d8d-70a7-4444-81b4-3c68f4729341" /> | |Modal View **Facebook**| <img width="667" height="640" alt="Facebook_Modal_Before" src="https://github.com/user-attachments/assets/8d7a14ac-5a3e-4dc2-94a9-14a371d9021d" /> | <img width="667" height="667" alt="Facebook_Modal_After" src="https://github.com/user-attachments/assets/159b8afb-4694-4419-9afc-aa5b000e2e1f" /> | |Stream Post View **LinkedIn**| <img width="346" height="155" alt="LinkedIn_Kanban_Before" src="https://github.com/user-attachments/assets/c2dd18ab-9563-4cc4-9760-2af17b6186de" /> | <img width="346" height="155" alt="LinkedIn_Kanban_After" src="https://github.com/user-attachments/assets/35edf325-0ca0-4b55-937b-f14dbebd4e5f" /> | |Modal View **LinkedIn**| <img width="667" height="640" alt="LinkedIn_Modal_Before" src="https://github.com/user-attachments/assets/4665f100-e3b1-4396-a2e3-628af5d67f38" /> | <img width="667" height="667" alt="LinkedIn_Modal_After" src="https://github.com/user-attachments/assets/c8d3e705-21cd-4354-821e-5fc0add8c505" /> | |Stream Post View **Instagram**| <img width="346" height="266" alt="IG_Kanban_Before" src="https://github.com/user-attachments/assets/79e67806-dc98-4d94-ba1b-4226ba4c766a" /> | <img width="346" height="266" alt="IG_Kanban_After" src="https://github.com/user-attachments/assets/9533413d-84db-4447-b3b5-6b4f90c64624" /> | |Modal View **Instagram**| <img width="667" height="640" alt="IG_Modal_Before" src="https://github.com/user-attachments/assets/80fad47f-5560-4807-b192-71b4f524f921" /> | <img width="667" height="667" alt="IG_Modal_After" src="https://github.com/user-attachments/assets/4367ffbe-6dc1-49fb-b68b-905849316225" /> | |Stream Post View **X**| <img width="346" height="266" alt="X_Kanban_Before" src="https://github.com/user-attachments/assets/b607be7b-3776-4ba1-8635-6557958686d3" /> | <img width="346" height="266" alt="X_Kanban_After" src="https://github.com/user-attachments/assets/2bced33f-740e-45bd-921e-d24400f1d9ab" /> | |Modal View **X**| <img width="667" height="640" alt="X_Modal_Before" src="https://github.com/user-attachments/assets/e38297c4-2380-44ae-8fd8-4776fb18d528" /> | <img width="667" height="667" alt="X_Modal_After" src="https://github.com/user-attachments/assets/f87f7c64-faf6-45b7-a995-76b6b8f2ca21" /> | |Modal View **X #MyCompany**| <img width="667" height="640" alt="X_Modal_MyCompany_Before" src="https://github.com/user-attachments/assets/479b8431-bb60-461b-9288-9d4c6e73b921" /> | <img width="667" height="667" alt="X_Modal_MyCompany_After" src="https://github.com/user-attachments/assets/0491fe6f-f1d8-418d-98f7-cbbb2c687390" /> | |Modal View **X #MyCompetitor**| <img width="667" height="640" alt="X_Modal_Competitor_Before" src="https://github.com/user-attachments/assets/e0c27498-efce-42df-bf6b-8321f4ddb628" /> | <img width="667" height="667" alt="X_Modal_Competitor_After" src="https://github.com/user-attachments/assets/63eb4c03-9d0b-47d7-aedb-a88c231de027" /> | |Stream Post View **YouTube**| <img width="346" height="442" alt="YT_Kanban_Before" src="https://github.com/user-attachments/assets/54a7e24e-b830-4b07-b763-8971448a059a" /> | <img width="346" height="442" alt="YT_Kanban_After" src="https://github.com/user-attachments/assets/f5e3f552-bf1a-4588-8eee-0e32b2f72aa5" /> | |Modal View **YouTube**| <img width="667" height="812" alt="YT_Modal_Before" src="https://github.com/user-attachments/assets/67167dcc-0f65-4a71-914e-a1b029b98c2a" /> | <img width="667" height="812" alt="YT_Modal_After" src="https://github.com/user-attachments/assets/c6b61b1c-9544-4b59-bdf3-ef7a733b712d" /> | task-4547564
This update enhances how the HR payroll system communicates with the server. It now allows for additional information to be passed with requests, ensuring the system can properly handle requests originating from the portal. This prepares the system for a future change in how messages are fetched, improving reliability and security.
Original PR description
This is a preparation change for replacing the portal chatter fetch route with the mail fetch route. Fetch methods can now receive extra fetch params from the caller components if needed, making it possible to inform the server when a request originates from the portal. This allows the server to apply specific limitations required for portal chatter. The change also involves a minor refactoring of the `useMessageScrolling` hook, which makes the thread built-in and removes the need to pass it as a parameter in every call. Extra fetch params could also be passed through another callback in the same way. [Community PR](https://github.com/odoo/odoo/pull/248208)
This update simplifies the kitchen view by merging free and priced lines for combo products when appropriate, reducing clutter and improving usability. The system now intelligently manages similar order lines, splitting them when necessary to ensure accurate updates and a cleaner user experience. Attribute changes are highlighted in red for better visibility.
Original PR description
In this commit:
-------------------
- Merged free and priced lines for the same product in the kitchen view, as separate lines are unnecessary in kitchen.
- Implemented logic to find sibling lines with the same product, notes, and attributes.
- If no difference found between the key values mentioned, search for a suitable sibling to merge with.
- If differences are detected (other than notes), lines are split to act independently.
- If only notes differ, and later both lines become identical again update a line with the same UUID as once they are splitted shouldn't be reflected to the sibling line's change.
- Updated attribute display, attributes are now shown in red for better visibility.
task- 4752080
Related PR: https://github.com/odoo/odoo/pull/208251This update enhances payroll warning notifications by allowing administrators to select specific recipients – admins, officers, or assistants – for these alerts. The changes also include a new, user-friendly interface for choosing the recipient type, improving the clarity and control over who receives payroll warning emails.
Original PR description
- In warnings of payroll, I did few adjustments. - The tab's name is changed from Misc to Communication in the form view. - Changing the mechanism for specifying email reicipient: . New field (email_visibility_type) is added to select the email will go to whom (Admin, Officer, Assistant) . In method _cron_payroll_warning_email_alert, according to the email_visibility_type of the warning the suitable payroll group is selected. task - 5473707
This update allows users to manage multiple bank statement lines simultaneously, streamlining the reconciliation process. The changes include the ability to apply accounts and partners to multiple lines, improving efficiency and reducing manual effort. This enhancement focuses on usability and expands functionality within the bank reconciliation workflow.
Original PR description
This commit will allow to do the set account, set partner and apply reco models on multiple lines. To select multiple line you need to use alt + click and then you will have button on top to trigger the actions. - The set partner function was modified to work with multiple statement lines and keep all existing functionality (modify line with same partner_name) - The trigger reconcile model function was also modified to work with multiple statement lines - The set account function was not touched because we use the aml_id of the suspense as a parameter but here we will have multiple suspense line to modify. Since we are doing this change in stable, we created a new function set_account_multiple_bank_statement_line. This function will have the same behavior for reco models as the basic set account. task-5253778 Forward-Port-Of: odoo/enterprise#108261 Forward-Port-Of: odoo/enterprise#100316
This update clarifies that commission adjustments can only be created using users who belong to approved sales plans. Previously, adjustments could be linked to any active plan, leading to confusion and incorrect user selections. This change improves the accuracy and usability of commission management.
Original PR description
Before this commit, when defining ajustment, the add_user_id and reduce_user_id could belong to any kind of active plan. It would make difficult to select the correct user when multiple plans were available. This commit ensure only approved plan can be used to create ajustments. Forward-Port-Of: odoo/enterprise#106637
This update enhances the visual clarity and readability of AI responses within the discuss app. Changes include formatting tables and code snippets, improving the overall user experience and making AI interactions more intuitive. The update also optimizes conversation titles for better alignment with popular AI platforms.
Original PR description
* = ai_knowledge, ai_livechat, test_full_discuss_enterprise In this commit, we "overhaul" the way that AI messages are rendered. This effort was motivated not just by aesthetics but also to make the…
* = ai_knowledge, ai_livechat, test_full_discuss_enterprise In this commit, we "overhaul" the way that AI messages are rendered. This effort was motivated not just by aesthetics but also to make the AI responses more readable and understandable for users. The first change was to inject boostrap classes to the tables added by the markdown library. By doing that, we make tables render as tables with borders and highlighting, instead of just text. We also added the prism library in the modules assets. Now, if the AI replies with some code snippet, it will be highlighted depending on the language used. We also added different CSS rules in `chat.scss` to changed some of the front end details like the padding and margin between elements in messages. In said file, we also changed some display and width values, to make tables and code segments horizontally scrollable, so information won't get "smushed" in a chat window. We also limit the width to 75% of the AI response in the discuss app because otherwise the information was too spread out - we added a media query to return the width to 100% in smaller screens. We moved the "Expand in Discuss" button, to be inbetween the close button and the minimise button, because the dropdown was confusing users, who imagined that they can switch between agents directly from the chat window. We additionally, made it so conversation titles change based on the user's first query, similarly to how it is done in the web versions of ChatGPT or Gemini. For that, we initial create channels with the name field empty and then we extend the display_name compute method of the discuss channel to add the agent's name in case the name is empty. After the first message we populate the name field which should by extension change the display_name field. We heavily patched the message template to remove the bubble and apply classes for the css rules. We also made it so user messages remain in the right in the discuss app (like in chat windows), increasing visual clarity. Finally, the test_natural_language_query_tour was modified to check for the new descriptive chat window title feature and the test_create_ai_chat was modified to reflect the new way of creating ai chats - with empty name and populated display_name. Task-5164382 Forward-Port-Of: odoo/enterprise#108080
This update adjusts how end-of-service benefits are calculated in Odoo Enterprise, aligning with recent regulations in Egypt. The calculation now directly uses the number of years worked, providing half a month's benefit for the first five years and a full month for subsequent years. A minimum one-year employment period is required for the benefit to be applied.
Original PR description
Changed how the end of service benefit is calculated, to depend directly on the number of years worked. The first five years grant half a month each to the EoS benefit, and the following years grant a full month each. Task-5018907