From 3e0bcbba91f8b7aece5e14f753b4ca5275067bdb Mon Sep 17 00:00:00 2001 From: AaronHForgeFlow Date: Fri, 13 Sep 2024 15:00:51 +0200 Subject: [PATCH] [FIX] stock_account_valuation_report: search discrepancies should take into account decimal precision --- .../models/product_product.py | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/stock_account_valuation_report/models/product_product.py b/stock_account_valuation_report/models/product_product.py index ab80125..a61abc6 100644 --- a/stock_account_valuation_report/models/product_product.py +++ b/stock_account_valuation_report/models/product_product.py @@ -4,6 +4,7 @@ from odoo import _, api, fields, models +from odoo.tools import float_compare class ProductProduct(models.Model): @@ -49,20 +50,26 @@ class ProductProduct(models.Model): @api.model def _search_qty_discrepancy(self, operator, value): products = self.env["product.product"].search([("type", "=", "product")]) - pp_list = [] - for pp in products: - if pp.qty_at_date != pp.account_qty_at_date: - pp_list.append(pp.id) - return [("id", "in", pp_list)] + dp = self.env["decimal.precision"].precision_get("Product Price") + products_with_discrepancy = products.filtered( + lambda pp: float_compare( + pp.qty_at_date, pp.account_qty_at_date, precision_digits=dp + ) + != 0 + ) + return [("id", "in", products_with_discrepancy.ids)] @api.model def _search_valuation_discrepancy(self, operator, value): products = self.env["product.product"].search([("type", "=", "product")]) - pp_list = [] - for pp in products: - if pp.stock_value != pp.account_value: - pp_list.append(pp.id) - return [("id", "in", pp_list)] + dp = self.env.ref("product.decimal_discount").precision_get("Discount") + products_with_discrepancy = products.filtered( + lambda pp: float_compare( + pp.stock_value, pp.account_value, precision_digits=dp + ) + != 0 + ) + return [("id", "in", products_with_discrepancy.ids)] def _compute_inventory_value(self): self.env["account.move.line"].check_access_rights("read")