# -*- coding: utf-8 -*- from freezegun import freeze_time from odoo.addons.account_edi.tests.common import AccountEdiTestCommon from odoo.tests import tagged @tagged('post_install', '-at_install') class TestAccountEdiFacturx(AccountEdiTestCommon): @classmethod def setUpClass(cls, chart_template_ref=None, edi_format_ref='account_edi_facturx.edi_facturx_1_0_05'): super().setUpClass(chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref) # ==== Init ==== cls.tax_10_include = cls.env['account.tax'].create({ 'name': 'tax_10_include', 'amount_type': 'percent', 'amount': 10, 'type_tax_use': 'sale', 'price_include': True, 'include_base_amount': True, 'sequence': 10, }) cls.tax_20 = cls.env['account.tax'].create({ 'name': 'tax_20', 'amount_type': 'percent', 'amount': 20, 'type_tax_use': 'sale', 'sequence': 20, }) cls.tax_group = cls.env['account.tax'].create({ 'name': 'tax_group', 'amount_type': 'group', 'amount': 0.0, 'type_tax_use': 'sale', 'children_tax_ids': [(6, 0, (cls.tax_10_include + cls.tax_20).ids)], }) # ==== Invoice ==== cls.invoice = cls.env['account.move'].create({ 'move_type': 'out_invoice', 'journal_id': cls.journal.id, 'partner_id': cls.partner_b.id, 'invoice_date': '2017-01-01', 'date': '2017-01-01', 'currency_id': cls.currency_data['currency'].id, 'invoice_line_ids': [(0, 0, { 'product_id': cls.product_a.id, 'product_uom_id': cls.env.ref('uom.product_uom_dozen').id, 'price_unit': 275.0, 'quantity': 5, 'discount': 20.0, 'tax_ids': [(6, 0, cls.tax_20.ids)], })], }) cls.expected_invoice_facturx_values = ''' urn:cen.eu:en16931:2017 INV/2017/01/0001 380 20170101 1 product_a 275.000 true 20.0 5.0 20.0 1100.000 company_1_data company_1_data partner_b partner_b INV/2017/01/0001: INV/2017/01/0001 220.000 1100.000 20.0 20170101 1100.000 1100.000 220.000 1320.000 0.000 1320.000 ''' #################################################### # Test export #################################################### def test_facturx(self): ''' Test the generated Facturx Edi attachment without any modification of the invoice. ''' self.assert_generated_file_equal(self.invoice, self.expected_invoice_facturx_values) @freeze_time('2017-02-01') def test_facturx_group_of_taxes(self): ''' Same as above with a group of taxes. ''' self.invoice.write({ 'invoice_line_ids': [(1, self.invoice.invoice_line_ids.id, {'tax_ids': [(6, 0, self.tax_group.ids)]})], }) applied_xpath = ''' 275.000 10.0 20.0 1000.000 220.000 1100.000 20.0 100.000 1000.000 10.0 20170101 1000.000 1000.000 320.000 1320.000 0.000 1320.000 ''' self.assert_generated_file_equal(self.invoice, self.expected_invoice_facturx_values, applied_xpath) def test_export_pdf(self): self.invoice.action_post() pdf_values = self.edi_format._get_embedding_to_invoice_pdf_values(self.invoice) self.assertEqual(pdf_values['name'], 'factur-x.xml') #################################################### # Test import #################################################### def test_invoice_edi_pdf(self): invoice = self._create_empty_vendor_bill() invoice_count = len(self.env['account.move'].search([])) self.update_invoice_from_file('account_edi_facturx', 'test_file', 'test_facturx.pdf', invoice) self.assertEqual(len(self.env['account.move'].search([])), invoice_count) self.assertEqual(invoice.amount_total, 525) self.create_invoice_from_file('account_edi_facturx', 'test_file', 'test_facturx.pdf') self.assertEqual(invoice.amount_total, 525) self.assertEqual(len(self.env['account.move'].search([])), invoice_count + 1) def test_invoice_edi_xml(self): invoice = self._create_empty_vendor_bill() invoice_count = len(self.env['account.move'].search([])) self.update_invoice_from_file('account_edi_facturx', 'test_file', 'test_facturx.xml', invoice) self.assertEqual(len(self.env['account.move'].search([])), invoice_count) self.assertEqual(invoice.amount_total, 4610) self.create_invoice_from_file('account_edi_facturx', 'test_file', 'test_facturx.xml') self.assertEqual(invoice.amount_total, 4610) self.assertEqual(len(self.env['account.move'].search([])), invoice_count + 1)