Daily updates from Odoo
Thursday, February 12, 2026
14 changes · master
New functionality added to Odoo
This update introduces specific contract types required for Hong Kong's IRD reporting and salary calculations. These new contract codes will allow users to accurately filter employees and ensure compliance with local regulations. The changes also include a user-friendly view for selecting these contract types within the system.
Original PR description
Add contract types specific to HK local needs, with specific codes attached to them. The codes will be used to filter employees based on their contract type in IRD reports and salary rules. As the code will be used in some flows, we also display them in the view so that users can reuse the code if they want more detailed account types while keeping the functionalities intact. task-5468498
This pull request adds Slovakian Profit & Loss and Balance Sheet reports to Odoo Enterprise. These reports are formatted to comply with Slovakian tax form UZPODv14 and are integrated into the Annual Statements reporting process, providing businesses operating in Slovakia with the necessary financial statements.
Original PR description
Adding the Slovakian P&L and Balance Sheet reports, as well as the combined version under Annual Statements with the xml for form UZPODv14. odoo/odoo/pull/233307 task-5105102
Enhancements to existing features
This update enhances the performance of Odoo's email and messaging features by optimizing database queries. Specifically, the system now checks for the existence of related records before performing certain operations, preventing slowdowns caused by how Odoo handles deleted records. This improves the overall responsiveness of email and messaging workflows.
Original PR description
In order to be defensive we have to check records linked to messages, notifications or activities exist before checking related information like display_name, or even to skip them in various flows. This happens notably due to DB-level cascade deletion that does not remove side records linked through (model, res_id) pairs. It implies some additional exist queries. Task-5138556 Forward-Port-Of: odoo/enterprise#105721 Forward-Port-Of: odoo/enterprise#101185
This update strengthens payroll security by restricting who can approve payslips. Assistants can still create and calculate payslips, but validation is now exclusively handled by Payroll Officers and Managers, ensuring greater accuracy and control over payroll processing. This change aligns with best practices for data protection and reduces potential errors.
Original PR description
Updated the access rights regarding payslip processing: 1. Assistants are no longer authorized to validate payslips. 2. Assistants retain the ability to create and compute payslips. 3. The validation step is now only a responsibility of Payroll Officers and Managers. Task-5376223
This update enhances the account reporting module by adding key features for auditing and reporting on financial data. Specifically, users can now filter audit reports by date, view cumulative balances during account audits, and access detailed information related to checks and move lines, improving financial transparency and compliance.
This update streamlines the reinvoicing process for subscription timesheets by centralizing the logic and optimizing how analytic lines are retrieved. Previously, the system checked each invoice line individually, which was slow. Now, it uses a more efficient approach, only performing detailed checks when necessary – specifically for subscription orders linked to timesheet products. This speeds up the reinvoicing process and improves overall system performance.
Original PR description
_* = helpdesk_sale_timesheet, sale_timesheet_enterprise This commit adapts the community changes that centralized the reinvoicing flow of analytic lines and renamed the field `timesheet_invoice_id`…
_* = helpdesk_sale_timesheet, sale_timesheet_enterprise This commit adapts the community changes that centralized the reinvoicing flow of analytic lines and renamed the field `timesheet_invoice_id` to `reinvoice_move_id` The main technical change concerns how analytic lines to reinvoice are retrieved Previously, analytic lines were always searched per invoice line. This was needed in some situations, because for subscription timesheets the valid date range can depend on the related sale order of each invoice line. With this change, the specific per-invoice-line logic is now only used when all of the following are true: * No explicit `timesheet_start_date` or `timesheet_end_date` is provided in the context * The invoice is linked to at least one sale order that: * is a subscription order * contains products delivered through timesheets. Only in this case do we compute date ranges from the related sale orders and search analytic lines separately per invoice line. In all other cases, the standard aggregated search from the parent implementation is used, which avoids unnecessary processing and speeds up reinvoicing flow. task-5490517 See Also: - https://github.com/odoo/odoo/pull/245216 - https://github.com/odoo/upgrade/pull/9366
Resolved issues and error corrections
This update resolves an error that prevented users from correctly selecting rental product dates. Specifically, when the start and end dates were the same, a technical error occurred. The fix ensures a user-friendly error message is displayed, preventing the issue and allowing rentals to be processed correctly.
Original PR description
Currently, an error occurs when selecting a date on a rental product. **Steps to Reproduce:** - Install the `website_sale_stock_renting` module. - Go to `Products` and create a product with the…
Currently, an error occurs when selecting a date on a rental product. **Steps to Reproduce:** - Install the `website_sale_stock_renting` module. - Go to `Products` and create a product with the following `configuration`: - Enable `Track Inventory` and set `Quantity On Hand` greater than zero. - Disable `Sell when Out-of-Stock` under the `eCommerce tab`. - Under the `Sales tab`, set `Periodicity to Days`, and set the same time for `Pickup and Return`. - Go to `Website > Shop`. - Open the product, select the same date for both `Start Date and End Date`, and `click anywhere`. `ValueError: min() iterable argument is empty` **Cause:** - This error occurs because when the start and end dates are the same, the method returns a set of dates from here [1]. Since there is only a single date, the loop is not executed and it returns an empty list of availabilities [2], which then raises the error [3]. - The error happens due to the removal of this condition [4] in this [recent commit]. - The warning message is now handled here [5]. **Fix:** - This commit ensures that when a user selects a start date that is greater than or equal to the end date, a UserError is raised and the proper warning message is displayed. [1]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/sale_stock_renting/models/sale_order_line.py#L616 [2]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/website_sale_stock_renting/models/product_product.py#L77 [3]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/website_sale_stock_renting/models/website.py#L18-L22 [4]: https://github.com/odoo/enterprise/blob/66f144df6f2056212797547dfef5ed58232698cd/website_sale_renting/models/product_template.py#L175-L176 [5]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/website_sale_renting/static/src/interactions/daterange_picker.js#L213 [recent commit]: https://github.com/odoo/enterprise/commit/4afdc272e5a7fc4284bbd9f97283b8ec0aa28c34 sentry-7243018656 Forward-Port-Of: odoo/enterprise#106602
This update fixes an issue where the new folder creation process incorrectly opened a file upload view instead of the intended folder form. The change ensures that users are always presented with the correct form to create a new folder, improving usability and workflow efficiency. This resolves a previous bug related to priority and context settings.
Original PR description
**Before this PR:** When creating a new folder from the field, it opens `documents_upload_url_view` instead of new folder form view `document_view_form_new_folder` **Technical reason:** This happens because `documents_upload_url_view` is given a higher priority. Also, adding context to the field to keep the default type set to folder. **After this PR:** `document_view_form_new_folder` will open to create a new folder. Task-5384414
This update ensures that signed PDF documents retain their original bookmarks and metadata after signing. This improves document navigation and consistency, guaranteeing signed documents are informative and reliable.
Original PR description
Before - When a user downloaded a signed document, the original PDF bookmarks and metadata (e.g., title, author, subject) were lost. - This affected structured navigation and document integrity. After - The PDF signing process now retains the original bookmarks and metadata, preserving document structure. Impact - Ensures signed documents are now navigable, informative and consistent with the original version. - Improves overall document integrity. Task-4915124
This update fixes an issue where only one quality check was created when using the barcode scanning feature with lot tracking. The change ensures that quality checks are generated for each distinct lot received during a 'Put-In-Pack' operation, improving inventory accuracy and quality control processes. This resolves a discrepancy in how the system tracked lot-based quality checks.
Original PR description
**Steps to reproduce:** * Install the `stock_barcode`, `quality_control` modules. * Go to *Inventory > Configuration > Settings* and enable **Packages**. * Create a product with **By Lot** tracking…
**Steps to reproduce:** * Install the `stock_barcode`, `quality_control` modules. * Go to *Inventory > Configuration > Settings* and enable **Packages**. * Create a product with **By Lot** tracking enabled and set a barcode reference. * Create a quality control point for this product with following configuration: * Operation: *Receipts* * Control per: *Quantity* * Control Frequency: *All* * Product: the previously created lot-tracked product. * Create a receipt for this product with a quantity of 6 and `mark as todo`. * Open the *Barcode* app and process the receipt. * Scan the product barcode. * Scan some quantity of the product with lot *LOT01* and put those units into a package(Put-In-Pack). * Scan the remaining quantity with lot *LOT02* and put those units into a different package(Put-In-Pack). * Click on **Quality Checks**. **Observed behavior:** * Only one quality check is created, even though the receipt contains two different lots that should each generate a quality check. **Cause:** * In `_inverse_qty_done`, move lines are marked as *picked* when `qty_done` is equal to quantity(Demand). * During the `write` operation, quality checks are created only for move lines that are not picked, which prevents creating a quality check for each lot. * Relevant code: https://github.com/odoo/enterprise/blob/464dc0c65548f3f440b293b534616743ddd5e130/quality_control/models/stock_move_line.py#L39 https://github.com/odoo/enterprise/blob/464dc0c65548f3f440b293b534616743ddd5e130/stock_barcode/models/stock_move_line.py#L67-L71 **Fix:** * Ensure that quality check points are generated correctly when validating products through the Barcode app using the Put in Pack option. --- opw-5405221 Forward-Port-Of: odoo/enterprise#105930 Forward-Port-Of: odoo/enterprise#102714
This update corrects a problem where the ICP report generation failed due to a missing link between return types. The fix now searches for VAT reports instead, ensuring accurate tax return checks and successful report generation. This resolves a previous error impacting compliance reporting.
Original PR description
Since no return type has a link to ICP report, the tax return check will fail each time. This commit changes this by looking for VAT report returns. opw-5491728 Forward-Port-Of: odoo/enterprise#106955
This update resolves an issue where duplicate GS1 serial/lot numbers could cause incorrect stock lot queries. The fix ensures that lot names are correctly processed, preventing errors when creating multiple lots with the same barcode pattern. This improvement ensures data integrity within the stock management system.
Original PR description
## Issue When using the *Default GS1 Nomenclature*, it is possible to create multiple lot/serial numbers with a same name if the name matches a barcode rule pattern. ## Fix The fix related to this…
## Issue When using the *Default GS1 Nomenclature*, it is possible to create multiple lot/serial numbers with a same name if the name matches a barcode rule pattern. ## Fix The fix related to this commit is introduced by [this PR](https://github.com/odoo/odoo/pull/244427). ## Problematic flow The problematic flow starts in the `StockLot._check_unique_lot` method when calling `self._read_group`. At that point, the domain is still correct: it contains the product_id and the (correct) name for the lot we try to create. https://github.com/odoo/odoo/blob/b51c80a4368b99e55073856061113244b16b23f9/addons/stock/models/stock_lot.py#L104-L111 In the `BaseModel._read_group` method, the query is defined by the `self._search` method. At that point, the domain is the same as in the previous step, so it is still correct. https://github.com/odoo/odoo/blob/b51c80a4368b99e55073856061113244b16b23f9/odoo/orm/models.py#L1902-L1904 Now the flow differs depending on whether the `stock_barcode` app is installed or not. If it is, the `stock_barcode/StockLot._search` method is called: https://github.com/odoo/enterprise/blob/24fea3814b95144953fb809d10bf6a62906c06fd/stock_barcode/models/stock_lot.py#L11-L15 This is the method that calls the `BarcodeNomenclature._preprocess_gs1_search_args` which uses the `skip_preprocess_gs1` context flag: https://github.com/odoo/odoo/blob/b51c80a4368b99e55073856061113244b16b23f9/addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py#L149-L151 **This flow makes the query returned by `self._search(domain)` erroneous, as the start of the name of the lot is removed further down the execution of the `preprocess_gs1_search_args` method.** ### If stock_barcode is not installed The `self._search` method called in the BaseModel will not call `stock_barcode/StockLot._search`, but instead it calls `BaseModel._search`. This totally skips the problematic gs1 flow. opw-5477003 Forward-Port-Of: odoo/enterprise#104720
This update resolves a bug where incorrect order quantities were sometimes sent to the kitchen display when using the numpad in the POS. The fix ensures the system waits for quantity updates before submitting orders, preventing errors and improving order accuracy. This resolves a failing test and ensures reliable kitchen order transmission.
Original PR description
TASK: [#5897381](https://www.odoo.com/odoo/project/1737/tasks/5897381) --- Inside tour tests environment for POS Restaurant Preparation Display module, when using the numpad to change the quantity of a product in the POS and sending the order to the kitchen immediately after, there is a chance that the quantity is not updated in time. This could lead to sending an order with an incorrect quantity to the kitchen display. As a result, the test `test_payment_does_not_cancel_display_orders` was failing. We are waiting for the orderline to be updated with the correct quantity before submitting the order. X-original-commit: 5ebd1ca99dddbbc62aff90202491562114c0c0dc Forward-Port-Of: odoo/enterprise#106600
This update corrects a bug where the 'Asset Plus' column in depreciation reports wasn't displaying acquisition values for certain assets. The fix removes a confusing filter and adjusts the report query to correctly identify assets based on their acquisition or move dates, ensuring accurate reporting of asset values.
Original PR description
This commit removes the hierarchy filter from the depreciation schedule and fixes the asset plus column not showing acquisition value for a given period. Forward-Port-Of: odoo/enterprise#106409