Tuesday, December 9, 2025
16 changes · master
New functionality added to Odoo
This update adds a crucial mapping of salary rules accounts within the Odoo Enterprise system. This ensures accurate accounting for Turkish payroll calculations, addressing a previous omission and improving compliance with local regulations. The change supports the correct recording of payroll expenses.
Original PR description
In this commit we add the maping for all the salary rules accounts Taks: 5171954
This update introduces a new feature allowing users to easily create templates from existing knowledge articles, streamlining the process for non-technical users. Additionally, administrators can now manage templates directly within the gallery, including deleting unused ones, improving organization and efficiency.
Original PR description
This PR will add a new button to the Knowledge kebab menu to enable the user to turn an existing article to a template. This new feature will ease template creation for non-technical users. In the template gallery, we will also add a trash button next to each template to enable the administrators to manage the template and delete the ones they don't want or need. task-4247544
This update adds new reporting capabilities for Czech tax returns, specifically VAT control statements, tax returns, and sales reports. These additions streamline the process of generating and submitting required tax reports, improving compliance and data accuracy for Czech businesses using Odoo Enterprise.
Original PR description
- add ec_sales_list return type and wizard - add tax_return return type and wizard - add vat_control_statement return type and wizard taskId: 4825850
This update introduces a new chart of accounts specifically designed for French associations. It includes updated reports (Profit & Loss and Balance Sheet) and associated test cases to ensure accurate financial reporting for this segment. This enhancement supports compliance with French accounting regulations for associations.
Original PR description
The community commit adds a fiscal localization to add the CoA for association in France. This adapts the tests to use the correct CoA task-4684053
Enhancements to existing features
This update ensures managers are assigned to separate versions of Odoo, preventing data discrepancies and allowing for accurate reporting across different environments. This change improves the reliability of key reports related to employee performance and timesheet analysis. It addresses a previous issue where managers were inconsistently linked to versions.
Original PR description
Put manager on versions instead of employee to have different managers for different versions Task: 5380683
This update simplifies how the IoT Box communicates with Odoo by allowing direct responses to the action controller. This reduces unnecessary network requests and streamlines the process of handling responses from the IoT Box, ultimately improving performance and stability.
Original PR description
To reduce the amount of network request and simplify the driver's response handling IoT Box side, we now provide the response directly to the action controller. see odoo/odoo#237586 Task: 5048746
This update replaces account tags with tax tags in the SI (Silurian) localization module's sales reports. This change ensures more accurate reporting aligned with local tax regulations for Electronic Commerce Sales List transactions. It improves the reliability of sales data for SI customers.
Original PR description
Before this commit: We are using account tags for EC Sales list. After this commit: Replaced account tags from l10n_si as it will now use tax tags. Community PR: https://github.com/odoo/odoo/pull/233747 Upgrade PR: https://github.com/odoo/upgrade/pull/8730 Task-5046099
This update simplifies the process of selecting users and resources when booking appointments. Instead of a separate step, the selection is now integrated directly into the date and time selection, offering a more intuitive and efficient user experience. This change also corrects a previous issue where the system wasn't accurately reflecting available resources.
Original PR description
BEFORE THIS CHANGE ================== When website_appointment was installed, and when the appointment type was configured with date_first=False, is_auto_assign=False, then the appointment main route…
BEFORE THIS CHANGE ================== When website_appointment was installed, and when the appointment type was configured with date_first=False, is_auto_assign=False, then the appointment main route rendered a different page content in order for the booker to select first the user / resource, each having a large card with picture (or placeholder) and name (as well as function and website_description for users). It had a dedicated chevron in the progressbar and was referred to as the operator selection step. There was an option to 'skip user / resource selection' and see the full availability. AFTER THIS CHANGE ================= In order to ease the user experience, we now inline the user and resource selection on the date & time selection step. It takes the form of a grid of smaller cards, that can be selected when the same conditions are met. They are rendered above the calendar. Their content is the same. The user can click on the card and the calendar will update accordingly. They can change and see updated availability directly, which was not possible before, as the page was different. In order to reproduce the 'skip user/resource selection' feature, a dedicated card 'No preference' is used and put at the end of the grid of cards. This will in turn compute full availability using all available resources / users. As before, when coming back from an error or using the chevrons hyperlinks, the selection is remembered and the default selection (user / resource / no preference) is kept and the availability computed accordingly when landing on the page (unless having skipped selection). The whole behavior is now available directly in appointment (no need for website) and replaces the dropdown used previously. Corner cases (no availabilty screens, manage capacity or not) are handled as well. A test is modified to reflect these changes. USER DEFAULT / SELECTED SIMPLIFICATION ====================================== A simplification of a rather hard-to-maintained flow ramification was done as well, as the meaning of 'selected' has evolved. Before, for manual selection starting with user / resource, having staff_user_id or resource_selected_id set meant selection was done and only that user / resource was to be considered. Now, this is not the case anymore, as one can change the user / resource on the date and time selection page. This means we only use that 'selected' value for an initial selection: if the user / resource has availability, then we use it. Otherwise, we use the first available one (see `_get_slots_values`). Therefore we move mostly the logic on x_default and `get_slots_values`. The resource_selected_id and staff_user_id are now used when coming back from an error or using the chevrons to navigate between steps. AUTO ASSIGN SIMPLIFICATION ========================== While simplifying, the x_default and x_selected were simply removed from the controller logic when is_auto_assign is True. There was a case of having a single staff user that lead to seeing its information on the side bar. This has been removed as this was not consistent, nor with resource behavior, nor with the 'auto assign' philosophy. We now never show the user / resource in date and time, details steps. We also do not propagate resource_selected_id to the registration page. TO SUMMARIZE ============ There are three flows depending on the appointment configuration: (e.g. here for resources) 1. auto assign: no use of resource_selected_id. no display of the selected resource / user even if there is only one, in the right column. 2. time then resource: no use of resource_selected_id since we need to compute for each slot all available resources. 3. resource then time: resource_selected_id, set for instance using a chevron, is used to initialize the selection. If not available, we still initialize to the first available resource. The value is propagated in the url. LINKS ===== UPG PR: https://github.com/odoo/upgrade/pull/8724 Task-5187767
This update streamlines the generation of the HK IR56B report by automating the selection of the 'Year of Employer Return' based on the submission date. The changes remove outdated fields and improve the report's accuracy and usability. This ensures compliance with Hong Kong tax regulations.
Original PR description
- Removed fields: start year, start month, end year, and end month. - Removed the `EXTRA` section title from the form. - Autofill Year of Employer Return based on submission date, with option to edit. - Adjusted report generation date logic to align with Year of Employer Return. task-5051329
This update simplifies the configuration of flexible benefits within Odoo Enterprise by transforming existing payroll inputs into salary rules. This change improves the system's flexibility and aligns with best practices for payroll management, ensuring accurate benefit calculations.
Original PR description
The main purpose is to adapt the flexible benefits system to use salary rules for its configuration. At this stage, it simply requires converting the payroll inputs into flexible salary rules. . Adapted the record in the hr_salary_rule_data that linked to payroll inputs to become salary rules with condition_select set to property_input. . Removed the obsolete records previously defined in hr.payslip.input.type and converted their purpose into corresponding salary rules in hr.salary.rule. . Modify the existing tests in test_salary_rules and updated demo data to correctly utilize the new salary rule codes for input creation task-5122338
Resolved issues and error corrections
This update ensures that the delivery address is now included in tax calculations and EDI requests for Brazilian NF-e invoices. Previously, this information was missing, which could lead to tax discrepancies. This change is crucial for compliance and accurate financial reporting.
Original PR description
Purpose: For invoice goods(NF-e), the delivery address can differ from the invoice address. It is necessary for both fiscal and logistical reasons to provide the delivery address in the tax calculation and EDI requests. Failure to do so may result in tax issues for the issuer. Expected Behavior: Users will be able to set a delivery address on the sales order and invoice and the delivery address will be sent in the requests for tax calculation and EDI. The returned EDI document will display the delivery address information. Current Behavior: The delivery address is not sent in the requests. task-5171186 Forward-Port-Of: odoo/enterprise#101267
This update fixes a bug where Belgian employees on long-term sick leave were incorrectly receiving pay for public holidays. The system now accurately reflects the Belgian accounting rules, ensuring that public holidays are not paid during sick leave exceeding 30 days. This ensures accurate payroll processing for Belgian employees.
Original PR description
Bug: In Belgium, after 30 calendar days of sick leave, all public holidays during the sick leaves are no longer paid. But here they were still being paid. Cause: The method that was checking what to do about public holidays was never seeing public holidays since they were already changed to their corresponding work entries at the work entry generation. Fix: Add the public holidays in the context and change the condition for checking if the current leave is actually from a public holiday or not. Task: 3864585 Forward-Port-Of: odoo/enterprise#100423 Forward-Port-Of: odoo/enterprise#95178
This update resolves an issue where the SHA512 hashing process in the Swedish SIE import module was not correctly implemented. The fix ensures accurate verification of digital signatures, improving the reliability of data import and preventing potential data integrity problems. This primarily impacts the handling of Swedish tax reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#101511
This update significantly speeds up the Knowledge module on odoo.com by optimizing how user permissions are calculated and articles are searched. The changes reduce loading times, especially when viewing a large number of articles, leading to a faster and more responsive experience for users.
Original PR description
On odoo.com, we noticed that Knowledge can be slow when there are a lot of articles: For 4365 articles, it takes between 1.5 and 2.3 seconds to load the list view listing all the articles the user…
On odoo.com, we noticed that Knowledge can be slow when there are a lot of articles: For 4365 articles, it takes between 1.5 and 2.3 seconds to load the list view listing all the articles the user has access to. This PR will try to optimize the performance and the scalability of the Knowledge module by reworking the methods used to compute the permissions of a user on an article and the methods used to search the articles the user has access to or the articles the user can edit. Those methods are computationally expensive and are used extensively in Knowledge. They are the main hot spots of the module: The search method is for instance used in the `domain_force` of the ACL rules for some group of users (see: `user_has_access` and `user_has_write_access`). They are hence used each time the user opens an article. It is therefore important to optimize those functions to make Knowledge blazing fast and responsive. # Benchmark To assess the performance of the new query and indexes, we wrote custom scripts that will perform a server call with the same configuration as the main list view and form view of Knowledge. This should ensure that we optimize the response time of the views we frequently use. For 10k articles, we got the following results: ## List view Before: | User | Avg | Std | |-------|-----------|--------| | Admin | 58.21ms | 8.53 | | Demo | 1139.65ms | 179.37 | After: | User | Avg | Std | |-------|-----------|--------| | Admin | 85.95ms | 7.48 | | Demo | 174.17ms | 4.98 | ## Form view Before: | User | Avg | Std | |-------|-----------|--------| | Admin | 56.66ms | 8.03 | | Demo | 469.51ms | 15.48 | After: | User | Avg | Std | |-------|-----------|--------| | Admin | 35.81ms | 4.74 | | Demo | 64.45ms | 17.41 | task-3771333
Google recently updated its Firebase API, causing Odoo's push notifications to stop working. This update requires upgrading Odoo's Firebase dependencies and API calls to ensure continued functionality. This change restores the ability for users to receive push notifications from Odoo.
Original PR description
Recently, Google upgraded the Firebase API and now unsupports the API version we are using (i.e: the version 6.3.4). As a result, the Odoo push notifications no longer work. see: https://firebase.google.com/docs/cloud-messaging/migrate-v1 This commit will upgrade the dependencies and the API calls to ensure that people can send push notifications from Odoo. task-4247811
This update resolves a bug that prevented correct pay run calculations when employees had multiple contract versions. The fix ensures the correct contract end date is used, preventing type errors and ensuring accurate payroll processing. This improves the reliability of our payroll system.
Original PR description
### Steps to Reproduce: 1. Create a new employee 2. Give him another version 3. Enter contract start date for the first version ### Reason: - There was a bug while computing pay run issues. The `date_end` and `contract_date_end` fields were mixed up. - The `date_end` field got a default value but `contract_date_end` was None resulting in a type error. ### Solution: - Changed `date_end` to `contract_date_end` as it's our source of truth Task: 5391975