summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/l10n_it_edi/models/account_move.py3
-rw-r--r--addons/l10n_it_edi/tests/export_xmls/test_export_invoice_with_two_downpayments.xml115
-rw-r--r--addons/l10n_it_edi/tests/test_edi_export.py33
3 files changed, 149 insertions, 2 deletions
diff --git a/addons/l10n_it_edi/models/account_move.py b/addons/l10n_it_edi/models/account_move.py
index b74b6e5b9c8..29926a206a4 100644
--- a/addons/l10n_it_edi/models/account_move.py
+++ b/addons/l10n_it_edi/models/account_move.py
@@ -507,7 +507,6 @@ class AccountMove(models.Model):
line = base_line['record']
if line.price_subtotal < 0 and line._get_downpayment_lines():
downpayment_lines.append(base_line)
- base_lines.remove(base_line)
if float_compare(quantity, 0, 2) < 0:
# Negative quantity is refused by SDI, so we invert quantity and price_unit to keep the price_subtotal
@@ -515,6 +514,8 @@ class AccountMove(models.Model):
'quantity': -quantity,
'price_unit': -price_unit,
})
+ for downpayment_line in downpayment_lines:
+ base_lines.remove(downpayment_line)
dispatched_results = self.env['account.tax']._dispatch_negative_lines(base_lines)
base_lines = dispatched_results['result_lines'] + dispatched_results['orphan_negative_lines'] + downpayment_lines
diff --git a/addons/l10n_it_edi/tests/export_xmls/test_export_invoice_with_two_downpayments.xml b/addons/l10n_it_edi/tests/export_xmls/test_export_invoice_with_two_downpayments.xml
new file mode 100644
index 00000000000..c1f41b39115
--- /dev/null
+++ b/addons/l10n_it_edi/tests/export_xmls/test_export_invoice_with_two_downpayments.xml
@@ -0,0 +1,115 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd" versione="FPR12">
+ <FatturaElettronicaHeader>
+ <DatiTrasmissione>
+ <IdTrasmittente>
+ <IdPaese>IT</IdPaese>
+ <IdCodice>01234560157</IdCodice>
+ </IdTrasmittente>
+ <ProgressivoInvio>V202500003</ProgressivoInvio>
+ <FormatoTrasmissione>FPR12</FormatoTrasmissione>
+ <CodiceDestinatario>0000000</CodiceDestinatario>
+ <ContattiTrasmittente>
+ <Telefono>0266766700</Telefono>
+ <Email>test@test.it</Email>
+ </ContattiTrasmittente>
+ </DatiTrasmissione>
+ <CedentePrestatore>
+ <DatiAnagrafici>
+ <IdFiscaleIVA>
+ <IdPaese>IT</IdPaese>
+ <IdCodice>01234560157</IdCodice>
+ </IdFiscaleIVA>
+ <CodiceFiscale>01234560157</CodiceFiscale>
+ <Anagrafica>
+ <Denominazione>company_2_data</Denominazione>
+ </Anagrafica>
+ <RegimeFiscale>RF01</RegimeFiscale>
+ </DatiAnagrafici>
+ <Sede>
+ <Indirizzo>1234 Test Street</Indirizzo>
+ <CAP>12345</CAP>
+ <Comune>Prova</Comune>
+ <Nazione>IT</Nazione>
+ </Sede>
+ </CedentePrestatore>
+ <CessionarioCommittente>
+ <DatiAnagrafici>
+ <IdFiscaleIVA>
+ <IdPaese>IT</IdPaese>
+ <IdCodice>00465840031</IdCodice>
+ </IdFiscaleIVA>
+ <CodiceFiscale>93026890017</CodiceFiscale>
+ <Anagrafica>
+ <Denominazione>Alessi</Denominazione>
+ </Anagrafica>
+ </DatiAnagrafici>
+ <Sede>
+ <Indirizzo>Via Privata Alessi 6</Indirizzo>
+ <CAP>28887</CAP>
+ <Comune>Milan</Comune>
+ <Nazione>IT</Nazione>
+ </Sede>
+ </CessionarioCommittente>
+ </FatturaElettronicaHeader>
+ <FatturaElettronicaBody>
+ <DatiGenerali>
+ <DatiGeneraliDocumento>
+ <TipoDocumento>TD01</TipoDocumento>
+ <Divisa>EUR</Divisa>
+ <Data>2025-02-03</Data>
+ <Numero>INV/2025/00003</Numero>
+ <ImportoTotaleDocumento>94.00</ImportoTotaleDocumento>
+ </DatiGeneraliDocumento>
+ <DatiFattureCollegate>
+ <IdDocumento>INV/2025/00001</IdDocumento>
+ <Data>2025-02-03</Data>
+ </DatiFattureCollegate>
+ <DatiFattureCollegate>
+ <IdDocumento>INV/2025/00002</IdDocumento>
+ <Data>2025-02-03</Data>
+ </DatiFattureCollegate>
+ </DatiGenerali>
+ <DatiBeniServizi>
+ <DettaglioLinee>
+ <NumeroLinea>1</NumeroLinea>
+ <Descrizione>Test Service Product</Descrizione>
+ <Quantita>1.00</Quantita>
+ <PrezzoUnitario>200.00000000</PrezzoUnitario>
+ <PrezzoTotale>200.00000000</PrezzoTotale>
+ <AliquotaIVA>22.00</AliquotaIVA>
+ </DettaglioLinee>
+ <DettaglioLinee>
+ <NumeroLinea>2</NumeroLinea>
+ <Descrizione>Down Payment (ref: INV/2025/00001 on 02/03/2025), INV/2025/00001</Descrizione>
+ <Quantita>1.00</Quantita>
+ <PrezzoUnitario>-40.98000000</PrezzoUnitario>
+ <PrezzoTotale>-40.98000000</PrezzoTotale>
+ <AliquotaIVA>22.00</AliquotaIVA>
+ </DettaglioLinee>
+ <DettaglioLinee>
+ <NumeroLinea>3</NumeroLinea>
+ <Descrizione>Down Payment (ref: INV/2025/00002 on 02/03/2025), INV/2025/00002</Descrizione>
+ <Quantita>1.00</Quantita>
+ <PrezzoUnitario>-81.97000000</PrezzoUnitario>
+ <PrezzoTotale>-81.97000000</PrezzoTotale>
+ <AliquotaIVA>22.00</AliquotaIVA>
+ </DettaglioLinee>
+ <DatiRiepilogo>
+ <AliquotaIVA>22.00</AliquotaIVA>
+ <ImponibileImporto>77.05</ImponibileImporto>
+ <Imposta>16.95</Imposta>
+ <EsigibilitaIVA>I</EsigibilitaIVA>
+ </DatiRiepilogo>
+ </DatiBeniServizi>
+ <DatiPagamento>
+ <CondizioniPagamento>TP02</CondizioniPagamento>
+ <DettaglioPagamento>
+ <ModalitaPagamento>MP05</ModalitaPagamento>
+ <DataScadenzaPagamento>2025-02-03</DataScadenzaPagamento>
+ <ImportoPagamento>94.00</ImportoPagamento>
+ <CodicePagamento>INV/2025/00003</CodicePagamento>
+ </DettaglioPagamento>
+ </DatiPagamento>
+ </FatturaElettronicaBody>
+</p:FatturaElettronica>
diff --git a/addons/l10n_it_edi/tests/test_edi_export.py b/addons/l10n_it_edi/tests/test_edi_export.py
index aa21b9db764..35506cb5bf1 100644
--- a/addons/l10n_it_edi/tests/test_edi_export.py
+++ b/addons/l10n_it_edi/tests/test_edi_export.py
@@ -1,7 +1,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import Command
-from odoo.tests import tagged
+from odoo.tests import freeze_time, tagged
from odoo.addons.l10n_it_edi.tests.common import TestItEdi
@@ -495,3 +495,34 @@ class TestItEdiExport(TestItEdi):
})
invoice.action_post()
self._assert_export_invoice(invoice, 'export_foreign_currency_global_discount.xml')
+
+ @freeze_time("2025-02-03")
+ def test_export_invoice_with_two_downpayments(self):
+ if self.env['ir.module.module']._get('sale').state != 'installed':
+ self.skipTest("sale module is not installed")
+
+ sale_order = self.env['sale.order'].with_company(self.company).create({
+ 'partner_id': self.italian_partner_a.id,
+ 'order_line': [
+ Command.create({'product_id': self.service_product.id, 'price_unit': 200.00}),
+ ],
+ })
+ sale_order.action_confirm()
+
+ for amount in (50, 100):
+ self.env['account.move'].with_company(self.company).browse(
+ self.env['sale.advance.payment.inv'].create([{
+ 'advance_payment_method': 'fixed',
+ 'fixed_amount': amount,
+ 'sale_order_ids': [Command.link(sale_order.id)],
+ }]).create_invoices()['res_id']
+ ).action_post()
+
+ invoice = self.env['account.move'].with_company(self.company).browse(
+ self.env['sale.advance.payment.inv'].create([{
+ 'advance_payment_method': 'delivered',
+ 'sale_order_ids': [Command.link(sale_order.id)],
+ }]).create_invoices()['res_id']
+ )
+ invoice.action_post()
+ self._assert_export_invoice(invoice, 'test_export_invoice_with_two_downpayments.xml')