[FIX] account: extra payment lines with payment term discount

In Settings>Accounting set 'Cash Discount Tax Reduction' to 'On early
payment'
Have a payment term 'D' with 10% discount if paid in a few days
Have a fixed tax 'F' (0.04) and a percent tax 'P' (21%)
Create an invoice with paymen term 'D'
Have an invoice line with price unit of 100$, taxes 'P' and 'F'
Post invoice and register payment (with discount)

Issue: Due to the fixed tax extra lines are created in the
journal entry of the payment
Example:

| N |       Account       | Taxes | Debit | Credit |
|---|---------------------|-------|-------|--------|
| 1 |Outstanding Receipts |       | 108.94|    0.00|
| 2 |Account Receivable   |       |   0.00|  121.04|
| 3 |Cash Discount Loss   |    F,P|   10.0|    0.00|
| 4 |Bank Suspense Account|       |   0.00|    0.04|
| 5 |Cash Discount Loss   |       |   2.10|    0.00|
| 6 |Cash Discount Loss   |       |   0.04|    0.00|

Because F is taken into account in line 3, line 6 is created, but it
should not be the case

opw-3119894

closes odoo/odoo#110078

X-original-commit: 4a5e696bc4507a2e6e4c03c694c4ec7e636805d7
Signed-off-by: Laurent Smet <las@odoo.com>
Signed-off-by: Grazioso Andrea (agr) <agr@odoo.com>
This commit is contained in:
Andrea Grazioso (agr-odoo)
2023-01-17 11:34:16 +01:00
parent 772a2ba023
commit bb9c08d443
2 changed files with 36 additions and 0 deletions
+2
View File
@@ -2781,6 +2781,8 @@ class AccountMove(models.Model):
product_lines = self.line_ids.filtered(lambda x: x.display_type == 'product')
base_lines = [x._convert_to_tax_base_line_dict() for x in product_lines]
for base_line in base_lines:
base_line['taxes'] = base_line['taxes'].filtered(lambda t: t.amount_type != 'fixed')
if self.is_inbound(include_receipts=True):
cash_discount_account = self.company_id.account_journal_early_pay_discount_loss_account_id
@@ -124,6 +124,40 @@ class TestAccountEarlyPaymentDiscount(AccountTestInvoicingCommon):
{'amount_currency': 900.0},
])
def test_register_discounted_payment_on_single_invoice_with_fixed_tax(self):
self.company_data['company'].early_pay_discount_computation = 'included'
fixed_tax = self.env['account.tax'].create({
'name': 'Test 0.05',
'amount_type': 'fixed',
'amount': 0.05,
})
inv = self.env['account.move'].create({
'move_type': 'in_invoice',
'partner_id': self.partner_a.id,
'invoice_date': '2019-01-01',
'date': '2019-01-01',
'invoice_line_ids': [Command.create({
'name': 'line',
'price_unit': 1500.0,
'tax_ids': [Command.set(self.product_a.taxes_id.ids + fixed_tax.ids)]
})],
'invoice_payment_term_id': self.early_pay_10_percents_10_days.id,
})
inv.action_post()
active_ids = inv.ids
payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({
'payment_date': '2017-01-01',
})._create_payments()
self.assertTrue(payments.is_reconciled)
self.assertRecordValues(payments.line_ids.sorted('balance'), [
{'amount_currency': -1552.55},
{'amount_currency': -150.0},
{'amount_currency': -22.5},
{'amount_currency': 1725.05},
])
def test_register_discounted_payment_on_single_invoice_with_tax(self):
self.company_data['company'].early_pay_discount_computation = 'included'
inv_1500_10_percents_discount_tax_incl_15_percents_tax = self.env['account.move'].create({