From add6afeaed747ad34b6a331ed42d6b85f2ae5f2f Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Fri, 21 Jul 2023 11:47:38 +0200 Subject: [PATCH] Avoid duplicated total amount on SII invoices with multiple taxes per line --- modules/account_es_sii/account.py | 16 +++++++++++----- modules/account_es_sii/tests/test_module.py | 2 ++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/account_es_sii/account.py b/modules/account_es_sii/account.py index f6e1d6c3c0..d9f51cef20 100644 --- a/modules/account_es_sii/account.py +++ b/modules/account_es_sii/account.py @@ -632,6 +632,17 @@ class InvoiceSII(ModelSQL, ModelView): tax_amount = Decimal(0) for tax_key, tax_lines in groupby( tax_lines, key=self.tax_grouping_key): + tax_lines = list(tax_lines) + if tax_key and not dict(tax_key).get('excluded'): + base_lines = set() + for tax_line in tax_lines: + # Do not duplicate base for lines with multiple taxes + if (tax_line.type == 'base' + and tax_line.move_line.id not in base_lines): + total_amount += tax_line.amount + base_lines.add(tax_line.move_line.id) + if tax_line.type == 'tax': + total_amount += tax_line.amount tax_lines = sorted(tax_lines, key=self.tax_detail_grouping_key) for detail_key, tax_lines in groupby( tax_lines, key=self.tax_detail_grouping_key): @@ -641,11 +652,6 @@ class InvoiceSII(ModelSQL, ModelView): continue operation_keys.add(key['operation_key']) tax_amount += values["Cuota%s" % key['cuota_suffix']] - total_amount += ( - values['BaseImponible'] - + values["Cuota%s" % key['cuota_suffix']]) - if 'CuotaRecargoEquivalencia' in values: - total_amount += values['CuotaRecargoEquivalencia'] tax_values[tax_key].append(values) return self.get_invoice_detail( tax_values, operation_keys, total_amount, tax_amount) diff --git a/modules/account_es_sii/tests/test_module.py b/modules/account_es_sii/tests/test_module.py index cc8268d983..6c5d3ab05a 100644 --- a/modules/account_es_sii/tests/test_module.py +++ b/modules/account_es_sii/tests/test_module.py @@ -399,6 +399,8 @@ class AccountEsSiiTestCase(ModuleTestCase): ['PeriodoLiquidacion', 'IDFactura', 'FacturaExpedida']) self.assertEqual( payload['FacturaExpedida']['TipoFactura'], 'F1') + self.assertEqual( + payload['FacturaExpedida']['ImporteTotal'], '65.50') tax_detail = { 'DetalleIVA': [{ 'BaseImponible': Decimal('50.00'),