Files

105 lines
5.2 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from freezegun import freeze_time
from odoo import Command
from odoo.tests import tagged
from odoo.tools.misc import NON_BREAKING_SPACE
from odoo.addons.account_reports.tests.account_sales_report_common import AccountSalesReportCommon
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestNlEcSalesReport(AccountSalesReportCommon):
@classmethod
@AccountSalesReportCommon.setup_country('nl')
def setUpClass(cls):
super().setUpClass()
cls.report = cls.env.ref('l10n_nl_reports.dutch_icp_report')
cls.company.vat = 'NL123456782B90'
cls.partner_b.update({
'country_id': cls.env.ref('base.de').id,
'vat': "DE123456788",
})
cls.goods_tax = cls.env.ref(f'account.{cls.env.company.id}_btw_X0_producten')
cls.goods_tag = cls.env.ref('l10n_nl.tax_report_rub_3bg_tag')
cls.services_tax = cls.env.ref(f'account.{cls.env.company.id}_btw_X0_diensten')
cls.services_tag = cls.env.ref('l10n_nl.tax_report_rub_3bs_tag')
cls.triangular_tax = cls.env.ref(f'account.{cls.env.company.id}_btw_X0_ABC_levering')
cls.triangular_tag = cls.env.ref('l10n_nl.tax_report_rub_3bt_tag')
def _create_invoice(self, invoice_date):
invoice = self.env['account.move'].create({
'move_type': 'out_invoice',
'partner_id': self.partner_b.id,
'invoice_date': invoice_date,
'invoice_line_ids': [
Command.create({
'name': 'Goods Line',
'price_unit': 1799.0,
'product_id': self.product_a.id,
'quantity': 1.0,
'account_id': self.company_data['default_account_revenue'].id,
'tax_ids': [Command.set(self.goods_tax.ids)],
}),
Command.create({
'name': 'Services Line',
'price_unit': 200.0,
'product_id': False,
'quantity': 1.0,
'account_id': self.company_data['default_account_revenue'].id,
'tax_ids': [Command.set(self.services_tax.ids)],
}),
Command.create({
'name': 'Triangular Line',
'price_unit': 300.0,
'product_id': False,
'quantity': 1.0,
'account_id': self.company_data['default_account_revenue'].id,
'tax_ids': [Command.set(self.triangular_tax.ids)],
}),
]
})
invoice.action_post()
return invoice
@freeze_time('2019-12-31')
def test_ec_sales_report(self):
self._create_invoice('2019-12-01')
options = self.report.get_options({'date': {'mode': 'range', 'filter': 'this_month'}})
self.assertLinesValues(
self.report._get_lines(options),
# Line Name Amount Product Amount Services Amount Triangular Amount_total
[ 0, 4, 5, 6, 7], # noqa: E201
[
( self.partner_b.name, f'1,799.00{NON_BREAKING_SPACE}€', f'200.00{NON_BREAKING_SPACE}€', f'300.00{NON_BREAKING_SPACE}€', f'2,299.00{NON_BREAKING_SPACE}€'),
( 'Total', f'1,799.00{NON_BREAKING_SPACE}€', f'200.00{NON_BREAKING_SPACE}€', f'300.00{NON_BREAKING_SPACE}€', f'2,299.00{NON_BREAKING_SPACE}€'),
],
options,
)
def test_l10n_nl_ec_sales_report_use_taxes_instead_of_tags(self):
""" Ensure that if the tax report line is missing, making impossible to retrieve associated tags),
taxes are used as fallback to retrieve goods, services and triangular sales """
self._create_invoice('2025-01-01')
self.goods_tag.unlink()
options = self._generate_options(self.report, '2025-01-01', '2025-12-31')
expected_sales_report_taxes = {
'goods': [self.goods_tax.id],
'services': [self.services_tax.id],
'triangular': [self.triangular_tax.id],
'use_taxes_instead_of_tags': True,
}
self.assertEqual(options['sales_report_taxes'], expected_sales_report_taxes)
self.assertLinesValues(
self.report._get_lines(options),
# Line Name [ Amount Product ] [ Amount Services ] [ Amount Triangular ] [ Amount_total ]
[0, 4, 5, 6, 7],
[
(self.partner_b.name, 1799, 200, 300, 2299),
('Total', 1799, 200, 300, 2299),
],
options,
)