Daily updates from Odoo
Wednesday, February 25, 2026
50 changes · master
New functionality added to Odoo
This update introduces a new payroll structure specifically designed for company executives in Belgium. It incorporates data related to executive salaries, termination fees, and joint committee contributions, aligning with local accounting and tax regulations. This enhancement ensures accurate payroll processing and compliance for businesses operating in Belgium.
Original PR description
task-5111185
Enhancements to existing features
This update enhances the Monthly Hours feature by automatically displaying the calendar view as the default when the Monthly Hours smart button is clicked. This provides a more intuitive and user-friendly experience for tracking employee hours, making it easier to visualize attendance data.
Original PR description
Set the calendar view as the default for the Monthly Hours smart button. task-5176295
This update makes employee launch plans more resilient by issuing warnings instead of blocking if key information (manager, fleet, user) is missing. It also removes outdated responsible types, streamlining the system and improving clarity. This change ensures launch plans can still function effectively, even with incomplete employee configurations.
Original PR description
* = mail, hr_fleet, hr_sign Employee launch plans should work even if employee not well configured. Should not block if manager/fleet/user not set, just warn and assign to current user. This update also removes responsible types 'coach' and 'fleet_manager' and cleans up all related logic, validations, and references. This PR includes: - Changed blocking errors to warnings when manager/user not set. - Updated warning message strings to be shorter and clearer. - Removed 'coach' and 'fleet_manager' responsible types and associated codes. - Adjust some test cases accordingly. Task - 4879248
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 update strengthens Odoo's security by adding runtime analysis for code executed through the `safe_eval` tool. It prevents the risk of using untrusted code, ensuring data integrity and protecting against potential vulnerabilities. The system's response to unsafe code is configurable via an environment variable.
Original PR description
The execution of arbitrary code in Odoo via `safe_eval` already takes place in a restricted environment, in particular via prior opcode, `co_names` static analysis and specific builtins in the…
The execution of arbitrary code in Odoo via `safe_eval` already takes place in a restricted environment, in particular via prior opcode, `co_names` static analysis and specific builtins in the evaluation context. The purpose of this commit is to introduce the ability to dynamically analyse code executed via the `safe_eval` tool. The dangerous situation we want to avoid is transferring logic to code that is considered untrusted. In other words, we want to avoid calls that use objects that are not in the whitelist. The behavior to adopt when detecting an unsafe object depends on the `ODOO_UNSAFE_POLICY` environment variable. - `disable`: Disable the feature - `log`: Log a warning (default) - `raise`: Raise an exception - `terminate`: Terminate the process Note: Python 3.12+ is required since the [sys.monitoring](https://docs.python.org/3.12/library/sys.monitoring.html) API is used. The presence of the JSON C extension library is required (`_json`) for performance reasons. _This is not a sandbox in general, but it helps prevent dangerous behavior in the context of `safe_eval`._ Task-4658036
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 replaces generic placeholder images with new, consistent icon images throughout the Odoo Enterprise platform. This improves the visual appeal and clarity of various modules, enhancing the user experience. The changes address outdated icons and streamline the user interface.
This 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 enhances the performance of account reports by directly accessing data within the line dictionary. Previously, the system had to retrieve this information through a separate browse operation, which was a performance bottleneck. This change streamlines the process, resulting in faster report generation.
Original PR description
This commit will include the code in the line dict to allow the _custom_line_postprocessor function to access it directly and avoid a browse on the line object to retrieve the value. no task id
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
Resolved issues and error corrections
This update enhances the stability of performance tests within Odoo's HR modules (appointment_hr and hr_payroll). The changes address issues related to how data is prepared for testing, specifically around transaction management, resulting in more reliable test results. This improves the overall quality and confidence in these core HR functionalities.
Original PR description
https://github.com/odoo/odoo/pull/249309
This update simplifies how Odoo identifies part-time workers. Previously, a worker exceeding their contract hours was incorrectly categorized as part-time. This change clarifies the definition by using 'work_time_rate' to accurately reflect actual hours worked, improving payroll accuracy and reporting.
Original PR description
Previously , 'is_full_time' indicated just if the worker , has worked the exact amount in his contract or less , but it has a problem, for workers who worked more than there legal contract, They were also considered on Part Time. For the sake of simplicity and clarity, instead of adding a new field like "excess Time", it would be better to just precise the work_time_rate.
This update resolves a previous issue where automation flows involving moving documents and triggering subsequent actions often failed due to security restrictions. The change now allows actions to run seamlessly even after a document is moved, simplifying automation setup for users. The fix also removes a redundant security override, streamlining the system.
Original PR description
Prior to this commit, creating a multi-action that moved a document to a new folder and immediately triggered another action (e.g., "Create Invoice") often failed. This occurred because the security…
Prior to this commit, creating a multi-action that moved a document to a new folder and immediately triggered another action (e.g., "Create Invoice") often failed. This occurred because the security check required the sub-action to be explicitly embedded (pinned) on the *destination* folder. Since the record was moved during the process, the subsequent action failed the security check on the new folder where it wasn't pinned. This limitation caused confusion for users setting up automation flows, as the intent of the sequence (Move -> Action) was clear and initiated from a valid context (the source folder), but strict per-action security rules blocked execution. This commit improves the `ir.actions.server` execution logic to support this pattern by introducing a context-based security sentinel: 1. Entry Point Validation: When a Documents action (root) is triggered, the system enforces strict security: the action must be explicitly embedded on the record's current folder. 2. Context Inheritance: Once the root action is authorized and begins execution, it sets a secure sentinel in the context. 3. Trusted Execution: Any subsequent sub-actions (children) detect this sentinel and are allowed to run, regardless of the record's current folder location. This ensures that if a user has the right to start the process (the root action), they have the right to complete the defined sequence, even if intermediate steps move the record to a folder where the sub-actions are not explicitly pinned. As a result, the `_can_execute_action_on_records` override in `documents_account` is no longer necessary and has been removed. Tests have been extended in the `documents` and `documents_account` modules to cover these scenarios (using Tags in the `documents` module instead of Accounting-specific models to make the tests generic). A new test file `test_documents_ir_actions_server.py` was created to maintain a clean testing environment, covering nesting, move sequences, and RPC spoofing attempts. Task-5916630 Forward-Port-Of: odoo/enterprise#108204 Forward-Port-Of: odoo/enterprise#106702
This update resolves an issue where Odoo incorrectly defaulted to USD as the Stripe currency, causing potential blocking for EU companies with non-USD currencies. We've switched to EUR as the default, ensuring accurate Stripe integration and preventing disruptions for our European users. This change addresses previous support tickets (opw-5393508, opw-5913327, opw-5953025).
Original PR description
Right now, we need to guess the correct stripe currency for the stripe account depending on the country, we used the USD as an ultimate fallback But, the USD currency is easy to guess, where the EUR is way harder (it may not be the company currency). So, it is too error-prone to set the USD as the default fallback, and it can lead to EU companies being blocked as their stripe currency is the wrong one. We therefore switch it to EUR. opw-5393508 opw-5913327 opw-5953025 Forward-Port-Of: odoo/enterprise#108293
This update resolves a display issue in the employee offer screen for the Belgium payroll localization. The contract type field was incorrectly appearing due to a previous addition by the localization module. This fix removes the unnecessary field addition, ensuring the correct offer screen display.
Original PR description
Bug reproduction: Ensure that belgium payroll localization is not installed, go to offer of employee, contract type field is not there. Bug cause: Contract type field does not exist in the model, it was adding to the view by l10n_be_hr_payroll. Bug solution: I added new field contract_type_id to the hr_contract_salary_offer model (to show it on UI). Solved from 17.0 Note: I need to fix after version 19.0, because by starting from 19.0, the Belgium one will try to add the same field to the view again task - 5500488 Forward-Port-Of: odoo/enterprise#108179 Forward-Port-Of: odoo/enterprise#104578
This update fixes an issue where trial websites were sometimes created multiple times. The changes ensure that a trial website is always associated with the original website requesting it, streamlining the process and preventing unnecessary website creation. A new, more reliable method for generating trial websites has also been implemented.
Original PR description
Forward-Port-Of: odoo/enterprise#107320
This update addresses usability issues in the mobile version of the bank reconciliation widget. Specifically, the layout has been adjusted to better accommodate the smaller screen size, and some secondary buttons have been moved to a dropdown menu to optimize space. This enhances the user experience on mobile devices.
Original PR description
The mobile style on bank rec widget is a bit buggy, this commit adds few improvements: 1 - When in mobile view, chatter is shown on the right (like in desktop view), but the screen is way too tight to display both chatter and st_lines at the same time. Solution: Display the chatter at the bottom of the screen. 2 - If the screen is too tight to show 2 primary buttons (Example: Set Partner & Set Account), We remove the "Set " on the buttons label to save some space. 3 - In tablet view, we don't have enought place to show all the secondary buttons we are showing in desktop view. This commit removes the reco model secondary buttons. (Now accessible in the dropdown menu) task-5114831 Forward-Port-Of: odoo/enterprise#96103
This update improves the speed of changing order stages in the Point of Sale system. By separating customer display calculations and optimizing database queries, the process is now significantly faster, especially when multiple orders are being prepared. This enhances the user experience and overall system performance.
Original PR description
Before this commit when a lot of orders were in the preparation display and when clicking on an order to change its stage, it was very slow because we were doing the customer display computation directly. Now we compute customer display data in a separate RPC call, and we only call it when the customer display receives a notification of new orders, which makes the stage change much faster. The `_get_pos_orders` is updated to avoid an O(n²) loop; The `_get_open_orderlines_in_display` is updated to avoid deep joins. Forward-Port-Of: odoo/enterprise#108233 Forward-Port-Of: odoo/enterprise#107727
This update enhances how Odoo extracts amounts from bank statements (like CODA files). It now supports regex patterns that identify integer and fractional parts, allowing for accurate decimal amount recognition. This resolves an issue where amounts in cents were not correctly processed, improving the reliability of reconciliation processes.
Original PR description
Update the reconciliation logic of reco models to support regex patterns using named capture groups 'integer' and 'fraction'. This is specifically designed for cases where bank statement labels (like CODA files) provide amounts in cents i.e continuous string of digits without a decimal separator. The logic now: - Prioritizes 'integer' and 'fraction' named groups if present in the match. - Concatenates these groups with a decimal point to form a valid float. - Falls back to the standard digit extraction logic if named groups are not found. So now if user wants the amount to be extracted in decimal values from label then user needs to add regex which supports two groups 'integer' and 'fraction'. Community PR: odoo/odoo#242750 Task [link](https://www.odoo.com/odoo/project.task/5449413) Task-5449413 Forward-Port-Of: odoo/enterprise#108328 Forward-Port-Of: odoo/enterprise#103630
This update fixes issues with downloading Activitywatch, specifically adding a link for the Linux (Ubuntu) build and correcting the Windows link. It also improves how the system identifies the user's operating system, ensuring a smoother download experience.
Original PR description
This PR adds the download link for the Ubuntu build of activitywatch, fixes the windows link, and fixes the platform detection. Forward-Port-Of: odoo/enterprise#108079
This update resolves an error that prevented the generation of CFDI payslips in the Mexican payroll module. The fix updates a template reference to correctly display the employee's SSN, ensuring accurate payroll reporting. This change improves the reliability of the Mexican payroll functionality.
Original PR description
Steps to reproduce the issue: 1. Install the module `l10n_mx_hr_payroll_account_edi`. 2. Generate a payslip for an employee. 3. The following traceback is raised at the moment to click on "Generate…
Steps to reproduce the issue:
1. Install the module `l10n_mx_hr_payroll_account_edi`.
2. Generate a payslip for an employee.
3. The following traceback is raised at the moment to click on "Generate CFDI" button:
```py
File "/data/build/odoo/odoo/addons/base/models/ir_qweb.py", line 858, in _render_iterall raise
QWebError(qweb_error_info) from error odoo.addons.base.models.ir_qweb.QWebError: Error while rendering the
template: KeyError: 'l10n_mx_ssn' Template: l10n_mx_hr_payroll_account_edi.report_payslip_mx_cfdi Reference:
8166 Path: /t/t/div/t[2]/div[4]/table[2]/tbody/tr/td/div[5]/span[1]
Element: <span class="ms-1" t-field="o.version_id.l10n_mx_ssn"/>
```
---
To avoid moving the `l10n_mx_ssn` field from the `hr.employee` model to `hr.version`, the `t-field` in the template is updated to `o.employee_id.l10n_mx_ssn`.
This approach is valid because an employee's SSN rarely changes. If a modification is ever needed, it can be updated directly on the employee form, where the field is already tracked.
target: saas-19.2
task-5962423
Forward-Port-Of: odoo/enterprise#108398This update fixes a calculation error in the Belgian payroll system. Previously, meal vouchers and private car expenses were incorrectly reported with a quantity of zero on payslips. This change ensures accurate reporting of these benefits, aligning with Belgian regulations and providing correct financial data.
Original PR description
In this commit, we fixed the data of the existing Belgian structure types by setting the right work entry type as default_work_entry_type_id. Belgian's structure types should have the correct attendance work entry type to consider the meal vouchers and the private car in the benefits and payslip lines Before this change, the belgian payslips will have quantity 0 for meal vouchers and private car. After this change, the belgian payslips will have the correct quantity for both meal vouchers and private car. task-5946425 Forward-Port-Of: odoo/enterprise#108061
This update resolves an issue where sharing document templates with readonly fields caused errors. By separating validation logic and removing unnecessary security checks, the system now correctly handles shared template requests, ensuring seamless document sharing and collaboration. This improves the reliability of our document management features.
Original PR description
Currently, attempting to share a document template that contains readonly fields fails. When `_populate_constant_items` calls `_fill` to pre-fill these fields, `_fill` aggressively checks that the request state is 'sent'. Since shared links create requests in the 'shared' state, the transaction crashes. Additionally, `_fill` throws a `UserError` if not called with `sudo`, which inappropriately treats a developer/privilege error as an end-user error. This commit resolves the issue by separating concerns: - Moves the `state == 'sent'` validation out of the `_fill` helper and into `_sign` (the caller responsible for actual user signatures). - Removes the artificial `sudo` check in `_fill`, relying instead on standard ORM Access Errors to block unauthorized database writes. (only in master) Task: 5949263 Forward-Port-Of: odoo/enterprise#107898
This update resolves an issue related to the accurate reporting of cycle transportation declarations in Belgium's HR and payroll system. The changes ensure that tax calculations and reporting align with Belgian regulations, improving compliance and accuracy for businesses operating in Belgium.
Original PR description
Forward-Port-Of: odoo/enterprise#108173 Forward-Port-Of: odoo/enterprise#108069
This update fixes an issue where the names of Ecuadorian invoicing regimes didn't comply with government regulations. The changes ensure that all invoice data sent to the Ecuadorian tax authority (SRI) uses the correct, officially mandated terminology. This ensures compliance and avoids potential processing delays.
Original PR description
[FIX] l10n_ec_edi: fiscal localizations name The name of the regimes for the Ecuadorian localization does not respect the government requirements Steps to reproduce: 1. Install l10n_ec_edi module 2. Go to Settings > Invoicing > Ecuadorian Localization 3. In Electronic Invoicing > Regime, the names of the regimes do not respect government requirements Solution: Change the name of the fiscal localizations to respect the requirements Add a computed field used to map the name of the regime to the technical name of the regime used in SRI documents We write them in Spanish because we always want the name of the regime to be in Spanish in the XML invoice sent to the government, even if the user didn't install any other language. opw-5221871 Forward-Port-Of: odoo/enterprise#105914
This update reverses a recent change that was incorrectly removing accented characters from partner names used for Mexican VAT (EDI) processing. The system now correctly accepts the accented characters the user inputs, aligning with current SAT regulations. This ensures accurate processing and avoids blocking users from entering legally required name information.
Original PR description
An accent sanitization feature was introduced in Odoo 18 [1]. It was done because it appeared the SAT replaced certain characters with their unaccented counterpart, but it's not the case. At least…
An accent sanitization feature was introduced in Odoo 18 [1]. It was done because it appeared the SAT replaced certain characters with their unaccented counterpart, but it's not the case. At least today, the SAT allows all characters (pointed out in [2]). This explains why in the past 6 months this feature has been slowly undone [3][4][5], character by character, after customers run into issues. The approach can not work, so we go back to the name with the accents the user puts on the partner. Users need to put the correct, legally registered name in Odoo. If it doesn't work then they can adapt it as needed. This way the user is in full control, and we don't block them. This reverts the whole accent sanitization saga: - Revert "[FIX] l10n_mx_edi - More accented characters accepted by SAT", this reverts commit 46cc41ddd258e80372478a746ea79d154a5931d9. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit dcbd8797667b5be88f48045e48da86ac42db362c. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit 32b8333fd3f813ec3188394c2634129e3fbfe31d. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit 05ed1fb9059bd1459e38dc00b041cada6bf06ac4. This also removes the unused frozendict import to make "Check Style" happy. opw-5915515 [1] https://github.com/odoo/enterprise/pull/95207 [2] https://github.com/odoo/enterprise/pull/107960 [3] https://github.com/odoo/enterprise/pull/96043 [4] https://github.com/odoo/enterprise/pull/106557 [5] https://github.com/odoo/enterprise/pull/107677 Closes odoo/enterprise#107960 Forward-Port-Of: odoo/enterprise#108425 Forward-Port-Of: odoo/enterprise#108189
This update corrects a recent issue that prevented Invoicing and Banks users from accessing basic financial reports. The change restores the necessary permissions, ensuring these users can view critical reporting data without errors. This resolves a disruption to key business reporting functionality.
Original PR description
* Revert commit https://github.com/odoo/enterprise/commit/86c3c212bb79fbc2becac46f4d83b6f2fc381854 that introduced having Accounting features, menu items, and Account on invoice lines available for Invoicing users. * Allow Invoicing & Banks group to access basic reports * Backport missing access rights to properly open the reports without an access error. task-5925567 Forward-Port-Of: odoo/enterprise#108174 Forward-Port-Of: odoo/enterprise#107654
This update ensures that the order of selection options within Odoo Sign templates is preserved when saving. Previously, options were scrambled due to a technical issue in how the system processed selections. This change corrects the underlying code to maintain the user's intended order, improving data consistency.
Original PR description
Steps to reproduce: 1. Open a Sign template. 2. Drag a 'Selection' field onto the document. 3. In the popover, type options in a specific order (e.g., Delta, Alpha, Beta). 4. Click save. 5. Re-open or inspect the data 6. observe the order is scrambled based on Database ID. Cause: The Python method used `list(set())` which is an unordered collection, losing the user's input sequence. Furthermore, the final `search().ids` call returned records sorted by primary key (ID) rather than the provided list order. Solution: Replace `set()` with `dict.fromkeys()` to deduplicate while preserving input order. opw-5896373 Forward-Port-Of: odoo/enterprise#108380 Forward-Port-Of: odoo/enterprise#107175
This update fixes a discrepancy in how invoice reports are generated across different localization versions (e.g., EC, MX). The changes ensure that address information displayed on invoices is consistent with the latest requirements for each region, improving accuracy and compliance.
Original PR description
Adapted each localization report invoice inheritance on the changes to address block Forward-Port-Of: odoo/enterprise#108426
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a restriction on accessing related stock records. The fix adds a necessary permission allowing helpdesk users to read ticket information, ensuring they can properly manage and access tickets. This improves usability for all helpdesk users.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
This update corrects a technical issue related to how the system identifies active VoIP sessions. A previous change introduced new session types, and this fix ensures the system correctly searches for sessions in the updated session map. This improves the reliability of VoIP functionality.
Original PR description
In this PR: https://github.com/odoo/enterprise/pull/104426 session management was introduced that changed the concept of `mainSession` and `transferSession` in the userAgent. There was a missing cleanup in the function `isInProgress` that is still using the old main and transfer sessions. This commit fixes this bug by searching for the session in the new sessions map. Forward-Port-Of: odoo/enterprise#108526
This update fixes a critical issue where mandatory fields were incorrectly included in signature validation, forcing users to sign them. Now, automatic completion is enabled for these fields, and a clear placeholder is used when the auto-field is empty, improving the user experience and data accuracy.
Original PR description
Before this commit, constant required sign fields with auto_fieldwere incorrectly included in signature validation, forcing users to sign them. Additionally, when auto_field had no value, these fields remained empty instead of using placeholder text as fallback. After this commit, constant required fields are excluded from signature validation, allowing automatic completion. When auto_field returns no value, the placeholder or item type name is used, providing a more clear and informative fallback content for users. task-5886200
This update resolves an issue where users with limited accounting access (read-only) were encountering errors when viewing invoices or partner details. The change ensures that the 'addenda_ids' field is only displayed to users who have the necessary permissions, improving stability and usability.
Original PR description
User with "read-only" access to accounting will trigger an error if they try to open an invoice or partner due to field addenda_ids. This commit aims to render this field only if the have the right to fetch it. opw-5931178 opw-5954244 Forward-Port-Of: odoo/enterprise#108332
This update ensures that essential products like 'settle due' and 'deposit' are automatically configured for all Point of Sale (POS) settings within the Odoo Enterprise system. Previously, these products were only available in POS sessions without open sessions, causing potential issues. Now, all POS configurations will have these products set, streamlining operations and preventing errors.
Original PR description
Before this commit, when the module pos_settle_due was installed, the special products (settle due, deposit, settle invoice) were only set on the POS configurations that did not have any open session. This could lead to issues when trying to use these products in a POS session of a configuration that did not have them set. Now, the special products are set on all POS configurations when installing the module. Community PR: https://github.com/odoo/odoo/pull/229074 Forward-Port-Of: odoo/enterprise#96788 Forward-Port-Of: odoo/enterprise#95789
This update corrects a restriction preventing HR officers from creating new employees in the Belgian version of the HR Payroll module. The fix utilizes 'sudo' to grant necessary access to a key field, allowing users with standard HR officer permissions to complete the employee creation process without encountering errors. This ensures seamless employee onboarding for our Belgian clients.
Original PR description
Steps to reproduce: - Install l10n_be_hr_payroll - Have a user with only HR officer rights - Try to create a new employee with that user (in BE) - You have an access error on the field l10n_be_resident_situation The field `l10n_be_resident_situation` has the HR Payroll officer group. This field is used on the inverse of the is_non_resident field, which is accessible to HR officers. This commit fixes the issue by using sudo to read the field's value. task-5779779 Forward-Port-Of: odoo/enterprise#108492 Forward-Port-Of: odoo/enterprise#104888
This update ensures payslips accurately reflect an employee's actual start date with the company, regardless of internal job changes. Previously, payslips used the contract start date, which wasn't ideal for employees with multiple periods of employment. This change improves payroll accuracy and reporting, particularly in Switzerland and the UAE.
Original PR description
In the payslip definition, the current contract's start date is used. But if a person changes job or contract internally we don't want this value to change and we want it fixed to when the person joined the company. Notably, if a person worked at the same company in two well distinct periods, we want to consider the beginning of this period and not of the previous one(s). Since Switzerland uses a custom report for the payslip, the same change is applied there. Task: 5909637 Community PR: https://github.com/odoo/odoo/pull/248598 Forward-Port-Of: odoo/enterprise#108145 Forward-Port-Of: odoo/enterprise#106692
This update addresses a critical maintenance task, ensuring the tax code data within Odoo Enterprise is current. The tax codes haven't been updated in four years, and this fix ensures continued accurate tax calculations. A future enhancement will allow users to initiate this update automatically, but this immediate fix resolves the current data discrepancy.
Original PR description
It's been 4 years since the last update [1]. No codes were removed. At some point it would be nice to add this to the avatax_sync_company_params() method so it can be initiated by the user. But we need to update this file regardless, and the mechanism would need to be smart enough to not cause duplicates when e.g. the user has synced it themselves, we then update the csv and they then update the module. [1] https://github.com/odoo/enterprise/pull/30220 opw-5928245 Forward-Port-Of: odoo/enterprise#108209
Features or functions removed from Odoo
This update removes outdated data related to a 'warning count' field from several payroll modules. A recent update to the core payroll model no longer requires this data, so this change streamlines the system and reduces potential complexity. This is a routine maintenance task to keep the system clean and efficient.
Original PR description
A recent refactor of the hr_payroll_warning model removed the need for `warning_count`, so this commit removes it from the relative data. task-5945965
This update eliminates redundant error messages related to receipt printers on IoT devices. As the system no longer monitors printer status, these warnings have been removed from the software, streamlining the user experience and reducing potential notifications.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/249819 As we are no longer querying the status of the receipt printer on the IoT box, some of the error messages such as being low on paper will no longer be sent by the IoT. This commit removes the messages in the JS code too. Forward-Port-Of: odoo/enterprise#108459 Forward-Port-Of: odoo/enterprise#108109
This update removes a legacy feature used to access database information. Following a migration to version 19.0, a newer API is now available, making the previous user unnecessary. This cleanup improves system efficiency and reduces potential maintenance overhead.
Original PR description
Since odoo.com migrated to 19.0, the json2 API is available and therefore we don't need to provide an API user any more to retrieve the list of databases. 3d09f8e0c67904c824b23117c5622630b6fa0899 removed it from the code and the form view, but left the field on res.config.settings for view backward compatibility. With this commit, we finish the cleanup. Forward-Port-Of: odoo/enterprise#108081
This change simplifies the Frontdesk module by removing a redundant 'Invite teammates via email' option. Recent updates to the system's user interface widgets introduced this option, but it wasn't needed for the Frontdesk workflow. This ensures the user interface is cleaner and more focused on its core functionality.
Original PR description
In responsible_ids, we were using the ***many2many_avatar_user*** widget. After recent changes introduced in https://github.com/odoo/odoo/pull/209886, the widget now shows an ***"Invite teammates via email"*** option when creation is enabled ***(enabled: () => this.activeActions.create).*** Since creating new users from this field is not required in the Frontdesk flow, this commit adds the ***'no_create'*** option to disable record creation. As a result, the ***"Invite teammates via email"*** entry is no longer displayed. This ensures the field only allows selecting existing users and keeps the UI aligned with the intended behavior. Task-5929325