From d26c85dc0a4346f3fbce3400ecb9796a811847b6 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 13 Jan 2016 16:08:07 +0100 Subject: [PATCH] [FIX] hr_expense: mark paid on reconciliation, precision When comparing floats, `float_compare` must always be used to avoid precision issues. e.g., percentages like 1.0000000000000002 must be considered as equal to 1. opw-666459 --- addons/hr_expense/models/account_move_line.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hr_expense/models/account_move_line.py b/addons/hr_expense/models/account_move_line.py index bf408105b5a..f7e24f65277 100644 --- a/addons/hr_expense/models/account_move_line.py +++ b/addons/hr_expense/models/account_move_line.py @@ -2,7 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from openerp import api, models - +from openerp.tools import float_compare class AccountMoveLine(models.Model): _inherit = "account.move.line" @@ -10,7 +10,7 @@ class AccountMoveLine(models.Model): @api.multi def reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False): res = super(AccountMoveLine, self).reconcile(writeoff_acc_id=writeoff_acc_id, writeoff_journal_id=writeoff_journal_id) - account_move_ids = [l.move_id.id for l in self if l.move_id.matched_percentage == 1] + account_move_ids = [l.move_id.id for l in self if float_compare(l.move_id.matched_percentage, 1, precision_digits=5) == 0] if account_move_ids: expenses = self.env['hr.expense'].search([('account_move_id', 'in', account_move_ids)]) expenses.paid_expenses()