diff --git a/addons/account/models/account_reconcile_model.py b/addons/account/models/account_reconcile_model.py index 524082e1b47f5907461a1e65443f959c78351216..6f5de73d39888078f6eebf8c21b48ba3e40c3d35 100644 --- a/addons/account/models/account_reconcile_model.py +++ b/addons/account/models/account_reconcile_model.py @@ -323,7 +323,11 @@ class AccountReconcileModel(models.Model): # only allow to set the force_tax_included field if we have one tax selected if line.force_tax_included: tax = tax[0].with_context(force_price_include=True) - lines_vals_list += self._get_taxes_move_lines_dict(tax, writeoff_line) + tax_vals_list = self._get_taxes_move_lines_dict(tax, writeoff_line) + lines_vals_list += tax_vals_list + if not line.force_tax_included: + for tax_line in tax_vals_list: + residual_balance -= tax_line['balance'] return lines_vals_list diff --git a/addons/account/tests/test_reconciliation_matching_rules.py b/addons/account/tests/test_reconciliation_matching_rules.py index 15c86f2ea2b0aa2db4df4d8e551951afbbcc4fb8..fb3a902c8e9d0afb9458a114189db8dce2bf2634 100644 --- a/addons/account/tests/test_reconciliation_matching_rules.py +++ b/addons/account/tests/test_reconciliation_matching_rules.py @@ -35,7 +35,7 @@ class TestReconciliationMatchingRules(AccountTestInvoicingCommon): cls.invoice_line_3.move_id.name = "RBILL/2019/09/0013" # Without demo data, avoid to match with the first invoice cls.invoice_line_4 = cls._create_invoice_line(1000, cls.partner_2, 'in_invoice') - current_assets_account = cls.env['account.account'].search([ + cls.current_assets_account = cls.env['account.account'].search([ ('user_type_id', '=', cls.env.ref('account.data_account_type_current_assets').id), ('company_id', '=', cls.company.id)], limit=1) @@ -55,7 +55,7 @@ class TestReconciliationMatchingRules(AccountTestInvoicingCommon): }) cls.rule_1 = cls.rule_0.copy() - cls.rule_1.write({'line_ids': [(0, 0, {'account_id': current_assets_account.id})]}) + cls.rule_1.write({'line_ids': [(0, 0, {'account_id': cls.current_assets_account.id})]}) cls.rule_1.match_partner = True cls.rule_1.match_partner_ids |= cls.partner_1 + cls.partner_2 cls.rule_2 = cls.env['account.reconcile.model'].create({ @@ -63,7 +63,7 @@ class TestReconciliationMatchingRules(AccountTestInvoicingCommon): 'rule_type': 'writeoff_suggestion', 'match_partner': True, 'match_partner_ids': [], - 'line_ids': [(0, 0, {'account_id': current_assets_account.id})], + 'line_ids': [(0, 0, {'account_id': cls.current_assets_account.id})], }) invoice_number = cls.invoice_line_1.move_id.name @@ -106,6 +106,12 @@ class TestReconciliationMatchingRules(AccountTestInvoicingCommon): 'amount': 21, }) + cls.tax12 = cls.env['account.tax'].create({ + 'name': '12%', + 'type_tax_use': 'purchase', + 'amount': 12, + }) + @classmethod def _create_invoice_line(cls, amount, partner, type, currency=None): ''' Create an invoice on the fly.''' @@ -356,8 +362,14 @@ class TestReconciliationMatchingRules(AccountTestInvoicingCommon): 'auto_reconcile': True, 'rule_type': 'writeoff_suggestion', 'line_ids': [(1, self.rule_1.line_ids.id, { + 'amount': 50, 'force_tax_included': True, 'tax_ids': [(6, 0, self.tax21.ids)], + }), (0, 0, { + 'amount': 100, + 'force_tax_included': False, + 'tax_ids': [(6, 0, self.tax12.ids)], + 'account_id': self.current_assets_account.id, })] }) @@ -376,8 +388,11 @@ class TestReconciliationMatchingRules(AccountTestInvoicingCommon): # Check first line has been well reconciled. self.assertRecordValues(self.bank_line_1.line_ids, [ {'partner_id': self.partner_1.id, 'debit': 0.0, 'credit': 121.0, 'tax_ids': [], 'tax_line_id': False}, - {'partner_id': self.partner_1.id, 'debit': 100.0, 'credit': 0.0, 'tax_ids': [self.tax21.id], 'tax_line_id': False}, - {'partner_id': self.partner_1.id, 'debit': 21.0, 'credit': 0.0, 'tax_ids': [], 'tax_line_id': self.tax21.id}, + {'partner_id': self.partner_1.id, 'debit': 0.0, 'credit': 7.26, 'tax_ids': [], 'tax_line_id': False}, + {'partner_id': self.partner_1.id, 'debit': 50.0, 'credit': 0.0, 'tax_ids': [self.tax21.id], 'tax_line_id': False}, + {'partner_id': self.partner_1.id, 'debit': 10.5, 'credit': 0.0, 'tax_ids': [], 'tax_line_id': self.tax21.id}, + {'partner_id': self.partner_1.id, 'debit': 60.5, 'credit': 0.0, 'tax_ids': [self.tax12.id], 'tax_line_id': False}, + {'partner_id': self.partner_1.id, 'debit': 7.26, 'credit': 0.0, 'tax_ids': [], 'tax_line_id': self.tax12.id}, ]) def test_reverted_move_matching(self):