[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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user