summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroco-odoo <oco@odoo.com>2020-10-22 12:54:34 +0000
committeroco-odoo <oco@odoo.com>2020-10-28 12:58:34 +0000
commit2ca3158ce2de596526067dbd86da2ef7d4ae85bd (patch)
tree0c2e27892c9cb222c84dd6318996793e7d3fad0d
parente78805fc3ae9b5dbbf72667e5bd62e5c5346cc53 (diff)
[FIX] account, hr_expense: show correct sign for tax_base_amounts of misc operations' lines
Before this, misc operations always used the balance of the base line as the tax_base_amount of the tax line. This was inconsistent with the invoices, for which we invert its sign when making a sale invoice or a purchase refund (as for those operations, positive amounts are put in credit). This commit should make everything behave in the same way. closes odoo/odoo#60831 X-original-commit: d8c40f07799a11a335c5010a0318d795830d125c Signed-off-by: Laurent Smet <smetl@users.noreply.github.com> Signed-off-by: oco-odoo <oco-odoo@users.noreply.github.com>
-rw-r--r--addons/account/models/account_move.py15
-rw-r--r--addons/account/tests/test_invoice_taxes.py12
-rw-r--r--addons/hr_expense/models/hr_expense.py9
3 files changed, 26 insertions, 10 deletions
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index 56af04776a7..34025b9af78 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -638,7 +638,7 @@ class AccountMove(models.Model):
'grouping_dict': False,
})
taxes_map_entry['amount'] += tax_vals['amount']
- taxes_map_entry['tax_base_amount'] += tax_vals['base']
+ taxes_map_entry['tax_base_amount'] += self._get_base_amount_to_display(tax_vals['base'], tax_repartition_line)
taxes_map_entry['grouping_dict'] = grouping_dict
line.tax_exigible = tax_exigible
@@ -657,9 +657,8 @@ class AccountMove(models.Model):
self.line_ids -= taxes_map_entry['tax_line']
continue
- tax_base_amount = (-1 if self.is_inbound() else 1) * taxes_map_entry['tax_base_amount']
# tax_base_amount field is expressed using the company currency.
- tax_base_amount = currency._convert(tax_base_amount, self.company_currency_id, self.company_id, self.date or fields.Date.context_today(self))
+ tax_base_amount = currency._convert(taxes_map_entry['tax_base_amount'], self.company_currency_id, self.company_id, self.date or fields.Date.context_today(self))
# Recompute only the tax_base_amount.
if taxes_map_entry['tax_line'] and recompute_tax_base_amount:
@@ -704,6 +703,16 @@ class AccountMove(models.Model):
if in_draft_mode:
taxes_map_entry['tax_line'].update(taxes_map_entry['tax_line']._get_fields_onchange_balance(force_computation=True))
+ @api.model
+ def _get_base_amount_to_display(self, base_amount, tax_rep_ln):
+ """ The base amount returned for taxes by compute_all has is the balance
+ of the base line. For inbound operations, positive sign is on credit, so
+ we need to invert the sign of this amount before displaying it.
+ """
+ if tax_rep_ln.invoice_tax_id.type_tax_use == 'sale' or tax_rep_ln.refund_tax_id.type_tax_use == 'purchase':
+ return -base_amount
+ return base_amount
+
def update_lines_tax_exigibility(self):
if all(account.user_type_id.type not in {'payable', 'receivable'} for account in self.mapped('line_ids.account_id')):
self.line_ids.write({'tax_exigible': True})
diff --git a/addons/account/tests/test_invoice_taxes.py b/addons/account/tests/test_invoice_taxes.py
index 247f85a4849..756117e2cbb 100644
--- a/addons/account/tests/test_invoice_taxes.py
+++ b/addons/account/tests/test_invoice_taxes.py
@@ -322,9 +322,9 @@ class TestInvoiceTaxes(AccountTestInvoicingCommon):
move = move_form.save()
self.assertRecordValues(move.line_ids.sorted('balance'), [
- {'balance': -1100.0, 'tax_ids': [], 'tax_tag_ids': []},
- {'balance': 100.0, 'tax_ids': [], 'tax_tag_ids': self.tax_tag_neg.ids},
- {'balance': 1000.0, 'tax_ids': sale_tax.ids, 'tax_tag_ids': self.base_tag_neg.ids},
+ {'balance': -1100.0, 'tax_ids': [], 'tax_tag_ids': [], 'tax_base_amount': 0},
+ {'balance': 100.0, 'tax_ids': [], 'tax_tag_ids': self.tax_tag_neg.ids, 'tax_base_amount': 1000},
+ {'balance': 1000.0, 'tax_ids': sale_tax.ids, 'tax_tag_ids': self.base_tag_neg.ids, 'tax_base_amount': 0},
])
# === Tax in credit ===
@@ -412,9 +412,9 @@ class TestInvoiceTaxes(AccountTestInvoicingCommon):
move = move_form.save()
self.assertRecordValues(move.line_ids.sorted('balance'), [
- {'balance': -1100.0, 'tax_ids': [], 'tax_tag_ids': []},
- {'balance': 100.0, 'tax_ids': [], 'tax_tag_ids': self.tax_tag_pos.ids},
- {'balance': 1000.0, 'tax_ids': purch_tax.ids, 'tax_tag_ids': self.base_tag_pos.ids},
+ {'balance': -1100.0, 'tax_ids': [], 'tax_tag_ids': [], 'tax_base_amount': 0},
+ {'balance': 100.0, 'tax_ids': [], 'tax_tag_ids': self.tax_tag_pos.ids, 'tax_base_amount': 1000},
+ {'balance': 1000.0, 'tax_ids': purch_tax.ids, 'tax_tag_ids': self.base_tag_pos.ids, 'tax_base_amount': 0},
])
# === Tax in credit ===
diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py
index e94524fd73f..0566716521e 100644
--- a/addons/hr_expense/models/hr_expense.py
+++ b/addons/hr_expense/models/hr_expense.py
@@ -441,6 +441,13 @@ Or send your receipts at <a href="mailto:%(email)s?subject=Lunch%%20with%%20cust
for tax in taxes['taxes']:
balance = expense.currency_id._convert(tax['amount'], company_currency, expense.company_id, account_date)
amount_currency = tax['amount']
+
+ if tax['tax_repartition_line_id']:
+ rep_ln = self.env['account.tax.repartition.line'].browse(tax['tax_repartition_line_id'])
+ base_amount = self.env['account.move']._get_base_amount_to_display(tax['base'], rep_ln)
+ else:
+ base_amount = None
+
move_line_tax_values = {
'name': tax['name'],
'quantity': 1,
@@ -450,7 +457,7 @@ Or send your receipts at <a href="mailto:%(email)s?subject=Lunch%%20with%%20cust
'account_id': tax['account_id'] or move_line_src['account_id'],
'tax_repartition_line_id': tax['tax_repartition_line_id'],
'tax_tag_ids': tax['tag_ids'],
- 'tax_base_amount': tax['base'],
+ 'tax_base_amount': base_amount,
'expense_id': expense.id,
'partner_id': partner_id,
'currency_id': expense.currency_id.id,