[FIX] hr_payroll_account: payroll precision

When the Payroll precision is higher than the currency precision,
accounting entries are inconsistent: debit or credit fields use the
payroll precision, while the balance uses the currency precision.

We make the AML consistent by forcing the currency precision.

opw-1924360

closes odoo/odoo#31131
This commit is contained in:
Nicolas Martinelli
2019-02-15 09:25:22 +00:00
parent 03ea5f9fdd
commit 9f2e1f59d9
@@ -54,13 +54,13 @@ class HrPayslip(models.Model):
@api.multi
def action_payslip_done(self):
res = super(HrPayslip, self).action_payslip_done()
precision = self.env['decimal.precision'].precision_get('Payroll')
for slip in self:
line_ids = []
debit_sum = 0.0
credit_sum = 0.0
date = slip.date or slip.date_to
currency = slip.company_id.currency_id
name = _('Payslip of %s') % (slip.employee_id.name)
move_dict = {
@@ -70,8 +70,8 @@ class HrPayslip(models.Model):
'date': date,
}
for line in slip.details_by_salary_rule_category:
amount = slip.credit_note and -line.total or line.total
if float_is_zero(amount, precision_digits=precision):
amount = currency.round(slip.credit_note and -line.total or line.total)
if currency.is_zero(amount):
continue
debit_account_id = line.salary_rule_id.account_debit.id
credit_account_id = line.salary_rule_id.account_credit.id
@@ -106,7 +106,7 @@ class HrPayslip(models.Model):
line_ids.append(credit_line)
credit_sum += credit_line[2]['credit'] - credit_line[2]['debit']
if float_compare(credit_sum, debit_sum, precision_digits=precision) == -1:
if currency.compare_amounts(credit_sum, debit_sum) == -1:
acc_id = slip.journal_id.default_credit_account_id.id
if not acc_id:
raise UserError(_('The Expense Journal "%s" has not properly configured the Credit Account!') % (slip.journal_id.name))
@@ -117,11 +117,11 @@ class HrPayslip(models.Model):
'journal_id': slip.journal_id.id,
'date': date,
'debit': 0.0,
'credit': debit_sum - credit_sum,
'credit': currency.round(debit_sum - credit_sum),
})
line_ids.append(adjust_credit)
elif float_compare(debit_sum, credit_sum, precision_digits=precision) == -1:
elif currency.compare_amounts(debit_sum, credit_sum) == -1:
acc_id = slip.journal_id.default_debit_account_id.id
if not acc_id:
raise UserError(_('The Expense Journal "%s" has not properly configured the Debit Account!') % (slip.journal_id.name))
@@ -131,7 +131,7 @@ class HrPayslip(models.Model):
'account_id': acc_id,
'journal_id': slip.journal_id.id,
'date': date,
'debit': credit_sum - debit_sum,
'debit': currency.round(credit_sum - debit_sum),
'credit': 0.0,
})
line_ids.append(adjust_debit)