chore: import enterprise addons 19.0 bulk snapshot

This commit is contained in:
1b-agent committed 2026-09-16 10:13:08 +00:00
commit ca4af030d3
39951 files changed
+15570005

No files matched your search

+1
View File
@@ -0,0 +1 @@
from . import test_jpk_fa
@@ -0,0 +1,355 @@
<JPK xmlns="http://jpk.mf.gov.pl/wzor/2022/02/17/02171/" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2018/08/24/eD/DefinicjeTypy/">
<Naglowek>
<KodFormularza kodSystemowy="JPK_FA (4)" wersjaSchemy="1-0">JPK_FA</KodFormularza>
<WariantFormularza>4</WariantFormularza>
<CelZlozenia>1</CelZlozenia>
<DataWytworzeniaJPK>2025-02-10</DataWytworzeniaJPK>
<DataOd>2025-01-01</DataOd>
<DataDo>2025-01-31</DataDo>
<KodUrzedu>0206</KodUrzedu>
</Naglowek>
<Podmiot1>
<IdentyfikatorPodmiotu>
<NIP>1234567883</NIP>
<PelnaNazwa>Polish Company</PelnaNazwa>
</IdentyfikatorPodmiotu>
<AdresPodmiotu>
<etd:KodKraju>PL</etd:KodKraju>
<etd:Powiat>Warsow</etd:Powiat>
<etd:Gmina>Warsow</etd:Gmina>
<etd:Ulica>ul. Marszałkowska</etd:Ulica>
<etd:NrDomu>123</etd:NrDomu>
<etd:NrLokalu></etd:NrLokalu>
<etd:Miejscowosc>Warsow</etd:Miejscowosc>
<etd:KodPocztowy>01-857</etd:KodPocztowy>
</AdresPodmiotu>
</Podmiot1>
<Faktura>
<KodWaluty>PLN</KodWaluty>
<P_1>2025-01-01</P_1>
<P_2A>INV/2025/00001</P_2A>
<P_3A>Jan Kowalski</P_3A>
<P_3B>ul. Nowowiejska 12, 00-150 Warszawa, Poland</P_3B>
<P_3C>Polish Company</P_3C>
<P_3D>ul. Marszałkowska 123, 01-857 Warsow, Poland</P_3D>
<P_4B>1234567883</P_4B>
<P_13_1>200.0</P_13_1>
<P_14_1>46.0</P_14_1>
<P_13_2>0.0</P_13_2>
<P_14_2>0.0</P_14_2>
<P_13_3>0.0</P_13_3>
<P_14_3>0.0</P_14_3>
<P_13_4>0.0</P_13_4>
<P_14_4>0.0</P_14_4>
<P_13_6>0.0</P_13_6>
<P_15>246.0</P_15>
<P_16>false</P_16>
<P_17>false</P_17>
<P_18>false</P_18>
<P_18A>false</P_18A>
<P_19>false</P_19>
<P_19A>false</P_19A>
<P_19B>false</P_19B>
<P_19C>false</P_19C>
<P_20>false</P_20>
<P_20A>false</P_20A>
<P_20B>false</P_20B>
<P_21>false</P_21>
<P_21A>false</P_21A>
<P_21B>false</P_21B>
<P_21C>false</P_21C>
<P_22>false</P_22>
<P_23>false</P_23>
<P_106E_2>false</P_106E_2>
<P_106E_3>false</P_106E_3>
<P_106E_3A>false</P_106E_3A>
<RodzajFaktury>VAT</RodzajFaktury>
</Faktura>
<Faktura>
<KodWaluty>EUR</KodWaluty>
<P_1>2025-01-02</P_1>
<P_2A>INV/2025/00002</P_2A>
<P_3A>John Doe</P_3A>
<P_3B>Rue de la Loi, 20, 1000 Bruxelles, Belgium</P_3B>
<P_3C>Polish Company</P_3C>
<P_3D>ul. Marszałkowska 123, 01-857 Warsow, Poland</P_3D>
<P_4B>1234567883</P_4B>
<P_13_1>150.0</P_13_1>
<P_14_1>34.5</P_14_1>
<P_14_1W>40.59</P_14_1W>
<P_13_2>0.0</P_13_2>
<P_14_2>0.0</P_14_2>
<P_14_2W>0.0</P_14_2W>
<P_13_3>0.0</P_13_3>
<P_14_3>0.0</P_14_3>
<P_14_3W>0.0</P_14_3W>
<P_13_4>0.0</P_13_4>
<P_14_4>0.0</P_14_4>
<P_13_6>0.0</P_13_6>
<P_15>184.5</P_15>
<P_16>false</P_16>
<P_17>false</P_17>
<P_18>false</P_18>
<P_18A>false</P_18A>
<P_19>false</P_19>
<P_19A>false</P_19A>
<P_19B>false</P_19B>
<P_19C>false</P_19C>
<P_20>false</P_20>
<P_20A>false</P_20A>
<P_20B>false</P_20B>
<P_21>false</P_21>
<P_21A>false</P_21A>
<P_21B>false</P_21B>
<P_21C>false</P_21C>
<P_22>false</P_22>
<P_23>false</P_23>
<P_106E_2>false</P_106E_2>
<P_106E_3>false</P_106E_3>
<P_106E_3A>false</P_106E_3A>
<RodzajFaktury>VAT</RodzajFaktury>
</Faktura>
<Faktura>
<KodWaluty>PLN</KodWaluty>
<P_1>2025-01-15</P_1>
<P_2A>INV/2025/00004</P_2A>
<P_3A>Jan Kowalski</P_3A>
<P_3B>ul. Nowowiejska 12, 00-150 Warszawa, Poland</P_3B>
<P_3C>Polish Company</P_3C>
<P_3D>ul. Marszałkowska 123, 01-857 Warsow, Poland</P_3D>
<P_4B>1234567883</P_4B>
<P_13_1>3000.0</P_13_1>
<P_14_1>690.0</P_14_1>
<P_13_2>40.0</P_13_2>
<P_14_2>3.2</P_14_2>
<P_13_3>0.0</P_13_3>
<P_14_3>0.0</P_14_3>
<P_13_4>0.0</P_13_4>
<P_14_4>0.0</P_14_4>
<P_13_6>0.0</P_13_6>
<P_15>3733.2</P_15>
<P_16>false</P_16>
<P_17>false</P_17>
<P_18>false</P_18>
<P_18A>false</P_18A>
<P_19>false</P_19>
<P_19A>false</P_19A>
<P_19B>false</P_19B>
<P_19C>false</P_19C>
<P_20>false</P_20>
<P_20A>false</P_20A>
<P_20B>false</P_20B>
<P_21>false</P_21>
<P_21A>false</P_21A>
<P_21B>false</P_21B>
<P_21C>false</P_21C>
<P_22>false</P_22>
<P_23>false</P_23>
<P_106E_2>false</P_106E_2>
<P_106E_3>false</P_106E_3>
<P_106E_3A>false</P_106E_3A>
<RodzajFaktury>VAT</RodzajFaktury>
</Faktura>
<Faktura>
<KodWaluty>PLN</KodWaluty>
<P_1>2025-01-25</P_1>
<P_2A>INV/2025/00005</P_2A>
<P_3A>Jan Kowalski</P_3A>
<P_3B>ul. Nowowiejska 12, 00-150 Warszawa, Poland</P_3B>
<P_3C>Polish Company</P_3C>
<P_3D>ul. Marszałkowska 123, 01-857 Warsow, Poland</P_3D>
<P_4B>1234567883</P_4B>
<P_13_1>200.0</P_13_1>
<P_14_1>46.0</P_14_1>
<P_13_2>0.0</P_13_2>
<P_14_2>0.0</P_14_2>
<P_13_3>0.0</P_13_3>
<P_14_3>0.0</P_14_3>
<P_13_4>0.0</P_13_4>
<P_14_4>0.0</P_14_4>
<P_13_6>0.0</P_13_6>
<P_15>246.0</P_15>
<P_16>false</P_16>
<P_17>false</P_17>
<P_18>false</P_18>
<P_18A>false</P_18A>
<P_19>false</P_19>
<P_19A>false</P_19A>
<P_19B>false</P_19B>
<P_19C>false</P_19C>
<P_20>false</P_20>
<P_20A>false</P_20A>
<P_20B>false</P_20B>
<P_21>false</P_21>
<P_21A>false</P_21A>
<P_21B>false</P_21B>
<P_21C>false</P_21C>
<P_22>false</P_22>
<P_23>false</P_23>
<P_106E_2>false</P_106E_2>
<P_106E_3>false</P_106E_3>
<P_106E_3A>false</P_106E_3A>
<RodzajFaktury>VAT</RodzajFaktury>
</Faktura>
<Faktura>
<KodWaluty>PLN</KodWaluty>
<P_1>2025-01-30</P_1>
<P_2A>RINV/2025/00001</P_2A>
<P_3A>Jan Kowalski</P_3A>
<P_3B>ul. Nowowiejska 12, 00-150 Warszawa, Poland</P_3B>
<P_3C>Polish Company</P_3C>
<P_3D>ul. Marszałkowska 123, 01-857 Warsow, Poland</P_3D>
<P_4B>1234567883</P_4B>
<P_13_1>-200.0</P_13_1>
<P_14_1>-46.0</P_14_1>
<P_13_2>0.0</P_13_2>
<P_14_2>0.0</P_14_2>
<P_13_3>0.0</P_13_3>
<P_14_3>0.0</P_14_3>
<P_13_4>0.0</P_13_4>
<P_14_4>0.0</P_14_4>
<P_13_6>0.0</P_13_6>
<P_15>-246.0</P_15>
<P_16>false</P_16>
<P_17>false</P_17>
<P_18>false</P_18>
<P_18A>false</P_18A>
<P_19>false</P_19>
<P_19A>false</P_19A>
<P_19B>false</P_19B>
<P_19C>false</P_19C>
<P_20>false</P_20>
<P_20A>false</P_20A>
<P_20B>false</P_20B>
<P_21>false</P_21>
<P_21A>false</P_21A>
<P_21B>false</P_21B>
<P_21C>false</P_21C>
<P_22>false</P_22>
<P_23>false</P_23>
<P_106E_2>false</P_106E_2>
<P_106E_3>false</P_106E_3>
<P_106E_3A>false</P_106E_3A>
<RodzajFaktury>KOREKTA</RodzajFaktury>
<NrFaKorygowanej>INV/2025/00005</NrFaKorygowanej>
</Faktura>
<Faktura>
<KodWaluty>PLN</KodWaluty>
<P_1>2025-01-31</P_1>
<P_2A>INV/2025/00006</P_2A>
<P_3A>Jan Kowalski</P_3A>
<P_3B>ul. Nowowiejska 12, 00-150 Warszawa, Poland</P_3B>
<P_3C>Polish Company</P_3C>
<P_3D>ul. Marszałkowska 123, 01-857 Warsow, Poland</P_3D>
<P_4B>1234567883</P_4B>
<P_13_1>0.0</P_13_1>
<P_14_1>0.0</P_14_1>
<P_13_2>0.0</P_13_2>
<P_14_2>0.0</P_14_2>
<P_13_3>0.0</P_13_3>
<P_14_3>0.0</P_14_3>
<P_13_4>0.0</P_13_4>
<P_14_4>0.0</P_14_4>
<P_13_6>100.0</P_13_6>
<P_15>100.0</P_15>
<P_16>false</P_16>
<P_17>false</P_17>
<P_18>false</P_18>
<P_18A>false</P_18A>
<P_19>false</P_19>
<P_19A>false</P_19A>
<P_19B>false</P_19B>
<P_19C>false</P_19C>
<P_20>false</P_20>
<P_20A>false</P_20A>
<P_20B>false</P_20B>
<P_21>false</P_21>
<P_21A>false</P_21A>
<P_21B>false</P_21B>
<P_21C>false</P_21C>
<P_22>false</P_22>
<P_23>false</P_23>
<P_106E_2>false</P_106E_2>
<P_106E_3>false</P_106E_3>
<P_106E_3A>false</P_106E_3A>
<RodzajFaktury>VAT</RodzajFaktury>
</Faktura>
<FakturaCtrl>
<LiczbaFaktur>6</LiczbaFaktur>
<WartoscFaktur>4263.7</WartoscFaktur>
</FakturaCtrl>
<FakturaWiersz>
<P_2B>INV/2025/00001</P_2B>
<P_7>product_b</P_7>
<P_8B>10.0</P_8B>
<P_9A>20.0</P_9A>
<P_10>0.0</P_10>
<P_11>200.0</P_11>
<P_11A>246.0</P_11A>
<P_12>23</P_12>
</FakturaWiersz>
<FakturaWiersz>
<P_2B>INV/2025/00002</P_2B>
<P_7>product_a</P_7>
<P_8B>1.0</P_8B>
<P_9A>150.0</P_9A>
<P_10>0.0</P_10>
<P_11>150.0</P_11>
<P_11A>184.5</P_11A>
<P_12>23</P_12>
</FakturaWiersz>
<FakturaWiersz>
<P_2B>INV/2025/00004</P_2B>
<P_7>product_a</P_7>
<P_8B>4.0</P_8B>
<P_9A>750.0</P_9A>
<P_10>0.0</P_10>
<P_11>3000.0</P_11>
<P_11A>3690.0</P_11A>
<P_12>23</P_12>
</FakturaWiersz>
<FakturaWiersz>
<P_2B>INV/2025/00004</P_2B>
<P_7>product_b</P_7>
<P_8B>2.0</P_8B>
<P_9A>20.0</P_9A>
<P_10>0.0</P_10>
<P_11>40.0</P_11>
<P_11A>43.2</P_11A>
<P_12>8</P_12>
</FakturaWiersz>
<FakturaWiersz>
<P_2B>INV/2025/00005</P_2B>
<P_7>product_b</P_7>
<P_8B>10.0</P_8B>
<P_9A>20.0</P_9A>
<P_10>0.0</P_10>
<P_11>200.0</P_11>
<P_11A>246.0</P_11A>
<P_12>23</P_12>
</FakturaWiersz>
<FakturaWiersz>
<P_2B>RINV/2025/00001</P_2B>
<P_7>product_b</P_7>
<P_8B>10.0</P_8B>
<P_9A>20.0</P_9A>
<P_10>0.0</P_10>
<P_11>200.0</P_11>
<P_11A>246.0</P_11A>
<P_12>23</P_12>
</FakturaWiersz>
<FakturaWiersz>
<P_2B>INV/2025/00006</P_2B>
<P_7>product_a</P_7>
<P_8B>1.0</P_8B>
<P_9A>100.0</P_9A>
<P_10>0.0</P_10>
<P_11>100.0</P_11>
<P_11A>100.0</P_11A>
<P_12>0</P_12>
</FakturaWiersz>
<FakturaWierszCtrl>
<LiczbaWierszyFaktur>7</LiczbaWierszyFaktur>
<WartoscWierszyFaktur>4263.7</WartoscWierszyFaktur>
</FakturaWierszCtrl>
</JPK>
+313
View File
@@ -0,0 +1,313 @@
from odoo import Command, tools
from odoo.addons.account_reports.tests.common import TestAccountReportsCommon
from odoo.tests import freeze_time, tagged
@freeze_time('2025-02-10 18:00:00')
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestJpkFaReport(TestAccountReportsCommon):
@classmethod
@TestAccountReportsCommon.setup_country('pl')
def setUpClass(cls):
super().setUpClass()
cls.company_data['company'].write({
'name': 'Polish Company',
'city': 'Warsow',
'street': 'ul. Marszałkowska 123',
'zip': '01-857',
'vat': 'PL1234567883',
'email': 'test@mail.com',
'l10n_pl_reports_tax_office_id': cls.env.ref('l10n_pl.pl_tax_office_0206'),
})
cls.partner_a.write({
'country_id': cls.env.ref('base.pl').id,
'name': 'Jan Kowalski',
'city': 'Warszawa',
'street': 'ul. Nowowiejska 12',
'zip': '00-150',
})
cls.partner_b.write({
'country_id': cls.env.ref('base.be').id,
'name': 'John Doe',
'city': 'Bruxelles',
'street': 'Rue de la Loi, 20',
'zip': '1000',
})
cls.tax_pl_23 = cls.company_data['default_tax_sale'].copy({'name': "23% test", 'amount': 23})
cls.tax_pl_8 = cls.company_data['default_tax_sale'].copy({'name': "8% test", 'amount': 8})
invoices = cls.env['account.move'].create([
{
'name': 'INV/2025/00001',
'move_type': 'out_invoice',
'invoice_date': '2025-01-01',
'date': '2025-01-01',
'partner_id': cls.partner_a.id,
'invoice_line_ids': [
Command.create({
'product_id': cls.product_b.id,
'quantity': 10.0,
'price_unit': 20.0,
'tax_ids': [Command.set(cls.tax_pl_23.ids)],
}),
],
},
{
# The report do not take into account the KSEF = accepted
'name': 'INV/2025/00003',
'move_type': 'out_invoice',
'invoice_date': '2025-01-10',
'date': '2025-01-10',
'partner_id': cls.partner_a.id,
'l10n_pl_edi_status': 'accepted',
'invoice_line_ids': [
Command.create({
'product_id': cls.product_a.id,
'quantity': 1.0,
'price_unit': 1000.0,
'tax_ids': [Command.set(cls.tax_pl_23.ids)],
}),
],
},
{
'name': 'INV/2025/00006',
'move_type': 'out_invoice',
'invoice_date': '2025-01-31',
'date': '2025-01-31',
'partner_id': cls.partner_a.id,
'l10n_pl_edi_status': 'sent',
'invoice_line_ids': [
Command.create({
'product_id': cls.product_a.id,
'quantity': 1.0,
'price_unit': 100.0,
'tax_ids': False,
}),
],
},
])
invoices.action_post()
cls.invoice_to_unfold = cls.env['account.move'].create([
{
'name': 'INV/2025/00004',
'move_type': 'out_invoice',
'invoice_date': '2025-01-15',
'date': '2025-01-15',
'partner_id': cls.partner_a.id,
'invoice_line_ids': [
Command.create({
'product_id': cls.product_a.id,
'quantity': 4.0,
'price_unit': 750.0,
'tax_ids': [Command.set(cls.tax_pl_23.ids)],
}),
Command.create({
'product_id': cls.product_b.id,
'quantity': 2.0,
'price_unit': 20.0,
'tax_ids': [Command.set(cls.tax_pl_8.ids)],
})
],
}
])
cls.invoice_to_unfold.action_post()
# Test the multi-currency behavior
invoice_euro = cls.env['account.move'].create([
{
'name': 'INV/2025/00002',
'move_type': 'out_invoice',
'invoice_date': '2025-01-02',
'date': '2025-01-02',
'partner_id': cls.partner_b.id,
'currency_id': cls.env.ref('base.EUR').id,
'invoice_currency_rate': 0.85,
'invoice_line_ids': [
Command.create({
'product_id': cls.product_a.id,
'quantity': 1.0,
'price_unit': 150.0,
'tax_ids': [Command.set(cls.tax_pl_23.ids)],
})
]
}
])
invoice_euro.action_activate_currency()
invoice_euro.action_post()
# Test the refund part
invoice_to_revert = cls.env['account.move'].create([
{
'name': 'INV/2025/00005',
'move_type': 'out_invoice',
'invoice_date': '2025-01-25',
'date': '2025-01-25',
'partner_id': cls.partner_a.id,
'invoice_line_ids': [
Command.create({
'product_id': cls.product_b.id,
'quantity': 10.0,
'price_unit': 20.0,
'tax_ids': [Command.set(cls.tax_pl_23.ids)],
}),
],
}
])
invoice_to_revert.action_post()
cls.env['account.move.reversal'].create([
{
'move_ids': invoice_to_revert.ids,
'reason': 'Broken devise',
'journal_id': cls.company_data['default_journal_sale'].id,
}
])
reversal_move = cls.env['account.move'].create([
{
'name': 'RINV/2025/00001',
'move_type': 'out_refund',
'invoice_date': '2025-01-30',
'date': '2025-01-30',
'partner_id': cls.partner_a.id,
'reversed_entry_id': invoice_to_revert.id,
'invoice_line_ids': [
Command.create({
'product_id': cls.product_b.id,
'quantity': 10.0,
'price_unit': 20.0,
'tax_ids': [Command.set(cls.tax_pl_23.ids)],
})
]
}
])
reversal_move.action_post()
cls.report = cls.env.ref('l10n_pl_reports_jpk_fa.jpk_fa_report')
def test_jpk_fa_report(self):
options = self._generate_options(self.report, '2025-01-01', '2025-01-31')
self.assertLinesValues(
self.report._get_lines(options),
# Name Net Amount Tax Amount Amount Currency Total Amount
[ 0, 4, 6, 7, 8],
[
('INV/2025/00001', 200.00, 46.00, '', 246.00),
('INV/2025/00002', 176.47, 40.59, 184.50, 217.06),
('INV/2025/00004', 3040.00, 693.20, '', 3733.20),
('INV/2025/00005', 200.00, 46.00, '', 246.00),
('RINV/2025/00001', -200.00, -46.00, '', -246.00),
('INV/2025/00006', 100.00, 0.00, '', 100.00),
('Total', 3516.47, 779.79, '', 4296.26),
],
options,
currency_map={7: {'currency': self.env.ref('base.EUR')}},
)
def test_jpk_fa_report_unfold_lines(self):
options = self._generate_options(self.report, '2025-01-01', '2025-01-31')
options['unfolded_lines'] = [self.report._get_generic_line_id('account.move', self.invoice_to_unfold.id)]
lines = self.report._get_lines(options)
self.assertLinesValues(
lines,
# Name Net Amount Tax Used Tax Amount Amount Currency Total Amount
[ 0, 4, 5, 6, 7, 8],
[
('INV/2025/00001', 200.00, '', 46.00, '', 246.00),
('INV/2025/00002', 176.47, '', 40.59, 184.50, 217.06),
('INV/2025/00004', 3040.00, '', 693.20, '', 3733.20),
('product_a', 3000.00, '23% test', 690.00, '', 3690.00),
('product_b', 40.00, '8% test', 3.20, '', 43.20),
('INV/2025/00005', 200.00, '', 46.00, '', 246.00),
('RINV/2025/00001', -200.00, '', -46.00, '', -246.00),
('INV/2025/00006', 100.00, '', 0.00, '', 100.00),
('Total', 3516.47, '', 779.79, '', 4296.26),
],
options,
currency_map={7: {'currency': self.env.ref('base.EUR')}},
)
unfolded_lines = [{'name': line['name'], 'level': line['level']} for line in lines]
self.assertEqual(
unfolded_lines,
[
{'level': 1, 'name': 'INV/2025/00001'},
{'level': 1, 'name': 'INV/2025/00002'},
{'level': 1, 'name': 'INV/2025/00004'},
{'level': 4, 'name': 'product_a'},
{'level': 4, 'name': 'product_b'},
{'level': 1, 'name': 'INV/2025/00005'},
{'level': 1, 'name': 'RINV/2025/00001'},
{'level': 1, 'name': 'INV/2025/00006'},
{'level': 1, 'name': 'Total'},
]
)
options['unfold_all'] = True
lines = self.report._get_lines(options)
self.assertLinesValues(
lines,
# Name Net Amount Tax Used Tax Amount Amount Currency Total Amount
[ 0, 4, 5, 6, 7, 8],
[
('INV/2025/00001', 200.00, '', 46.00, '', 246.00),
('product_b', 200.00, '23% test', 46.00, '', 246.00),
('INV/2025/00002', 176.47, '', 40.59, 184.50, 217.06),
('product_a', 176.47, '23% test', 40.59, '', 217.06),
('INV/2025/00004', 3040.00, '', 693.20, '', 3733.20),
('product_a', 3000.00, '23% test', 690.00, '', 3690.00),
('product_b', 40.00, '8% test', 3.20, '', 43.20),
('INV/2025/00005', 200.00, '', 46.00, '', 246.00),
('product_b', 200.00, '23% test', 46.00, '', 246.00),
('RINV/2025/00001', -200.00, '', -46.00, '', -246.00),
('product_b', -200.00, '23% test', -46.00, '', -246.00),
('INV/2025/00006', 100.00, '', 0.00, '', 100.00),
('product_a', 100.00, '', '', '', 100.00),
('Total', 3516.47, '', 779.79, '', 4296.26),
],
options,
currency_map={7: {'currency': self.env.ref('base.EUR')}},
)
unfolded_lines = [{'name': line['name'], 'level': line['level']} for line in lines]
self.assertEqual(
unfolded_lines,
[
{'level': 1, 'name': 'INV/2025/00001'},
{'level': 4, 'name': 'product_b'},
{'level': 1, 'name': 'INV/2025/00002'},
{'level': 4, 'name': 'product_a'},
{'level': 1, 'name': 'INV/2025/00004'},
{'level': 4, 'name': 'product_a'},
{'level': 4, 'name': 'product_b'},
{'level': 1, 'name': 'INV/2025/00005'},
{'level': 4, 'name': 'product_b'},
{'level': 1, 'name': 'RINV/2025/00001'},
{'level': 4, 'name': 'product_b'},
{'level': 1, 'name': 'INV/2025/00006'},
{'level': 4, 'name': 'product_a'},
{'level': 1, 'name': 'Total'},
]
)
def test_jpk_fa_export(self):
options = self._generate_options(self.report, '2025-01-01', '2025-01-31')
result_print = self.env[self.report.custom_handler_model_name].export_tax_report_to_xml(options)
with tools.file_open('l10n_pl_reports_jpk_fa/tests/expected_xmls/jpk_fa_expected.xml', 'rb') as expected_xml_file:
self.assertXmlTreeEqual(
self.get_xml_tree_from_string(result_print['file_content']),
self.get_xml_tree_from_string(expected_xml_file.read()),
)