123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059 |
- # coding: utf-8
- from .common import TestEsEdiCommon
- import json
- from freezegun import freeze_time
- from unittest.mock import patch
- from odoo.tests import tagged
- def mocked_l10n_es_edi_call_web_service_sign(edi_format, invoices, info_list):
- return {inv: {'success': True} for inv in invoices}
- @tagged('post_install_l10n', 'post_install', '-at_install')
- class TestEdiXmls(TestEsEdiCommon):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
- cls.certificate.write({
- 'date_start': '2019-01-01 01:00:00',
- 'date_end': '2021-01-01 01:00:00',
- })
- def test_010_out_invoice_s_iva10b_s_iva21s(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- partner_id=self.partner_a.id,
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva10b').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva21s').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'INV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'F1',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 21.0,
- 'BaseImponible': 200.0,
- 'CuotaRepercutida': 42.0,
- },
- ],
- },
- },
- },
- },
- 'Entrega': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 10.0,
- 'BaseImponible': 100.0,
- 'CuotaRepercutida': 10.0,
- },
- ],
- },
- },
- },
- },
- },
- },
- 'ImporteTotal': 352.0,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_020_out_invoice_s_iva10b_s_iva0_ns(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- partner_id=self.partner_b.id,
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva10b').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ns').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'INV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'F1',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseFactura': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 10.0,
- 'BaseImponible': 100.0,
- 'CuotaRepercutida': 10.0
- },
- ],
- },
- },
- },
- },
- },
- 'ImporteTotal': 110.0,
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- },
- })
- def test_030_out_invoice_s_iva10b_s_req014_s_iva21s_s_req52(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- partner_id=self.partner_a.id,
- invoice_line_ids=[
- {
- 'price_unit': 100.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('s_iva10b') + self._get_tax_by_xml_id('s_req014')).ids)],
- },
- {
- 'price_unit': 200.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('s_iva21s') + self._get_tax_by_xml_id('s_req52')).ids)],
- },
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'INV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'F1',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 21.0,
- 'BaseImponible': 200.0,
- 'CuotaRepercutida': 42.0,
- 'CuotaRecargoEquivalencia': 10.4,
- 'TipoRecargoEquivalencia': 5.2
- }
- ]
- }
- }
- }
- },
- 'Entrega': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 10.0,
- 'BaseImponible': 100.0,
- 'CuotaRepercutida': 10.0,
- 'CuotaRecargoEquivalencia': 1.4,
- 'TipoRecargoEquivalencia': 1.4
- }
- ]
- }
- }
- }
- }
- }
- },
- 'ImporteTotal': 363.8,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_040_out_refund_s_iva10b_s_iva10b_s_iva21s(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='out_refund',
- partner_id=self.partner_a.id,
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva10b').ids)]},
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva10b').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva21s').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'RINV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'R1',
- 'TipoRectificativa': 'I',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 21.0,
- 'BaseImponible': -200.0,
- 'CuotaRepercutida': -42.0
- }
- ]
- }
- }
- }
- },
- 'Entrega': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 10.0,
- 'BaseImponible': -200.0,
- 'CuotaRepercutida': -20.0
- }
- ]
- }
- }
- }
- }
- }
- },
- 'ImporteTotal': -462.0,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_050_out_invoice_s_iva0_sp_i_s_iva0_ic(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- partner_id=self.partner_a.id,
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'INV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'F1',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'NoSujeta': {
- 'ImportePorArticulos7_14_Otros': 100.0
- },
- },
- 'Entrega': {
- 'Sujeta': {
- 'Exenta': {
- 'DetalleExenta': [
- {
- 'BaseImponible': 200.0,
- 'CausaExencion': 'E5',
- },
- ],
- },
- },
- },
- },
- },
- 'ImporteTotal': 300.0,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_060_out_refund_s_iva0_sp_i_s_iva0_ic(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='out_refund',
- partner_id=self.partner_a.id,
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'RINV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'R1',
- 'TipoRectificativa': 'I',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'NoSujeta': {
- 'ImportePorArticulos7_14_Otros': -100.0
- },
- },
- 'Entrega': {
- 'Sujeta': {
- 'Exenta': {
- 'DetalleExenta': [
- {
- 'BaseImponible': -200.0,
- 'CausaExencion': 'E5',
- },
- ],
- },
- },
- },
- },
- },
- 'ImporteTotal': -300.0,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_070_out_invoice_s_iva_e_s_iva0_e(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- partner_id=self.partner_a.id,
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva_e').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_e').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'INV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'F1',
- 'ClaveRegimenEspecialOTrascendencia': '02',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'NoSujeta': {
- 'ImporteTAIReglasLocalizacion': 100.0,
- },
- },
- 'Entrega': {
- 'Sujeta': {
- 'Exenta': {
- 'DetalleExenta': [
- {
- 'BaseImponible': 200.0,
- 'CausaExencion': 'E2',
- },
- ],
- },
- },
- },
- },
- },
- 'ImporteTotal': 300.0,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_080_out_refund_s_iva0_sp_i_s_iva0_ic(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='out_refund',
- partner_id=self.partner_a.id,
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'RINV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'R1',
- 'TipoRectificativa': 'I',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'NoSujeta': {
- 'ImportePorArticulos7_14_Otros': -100.0,
- },
- },
- 'Entrega': {
- 'Sujeta': {
- 'Exenta': {
- 'DetalleExenta': [
- {
- 'BaseImponible': -200.0,
- 'CausaExencion': 'E5',
- },
- ],
- },
- },
- },
- },
- },
- 'ImporteTotal': -300.0,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_085_out_refund_s_iva0_sp_i_s_iva0_ic_multi_currency(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='out_refund',
- partner_id=self.partner_a.id,
- currency_id=self.currency_data['currency'].id,
- invoice_line_ids=[
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
- {'price_unit': 400.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'RINV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'R1',
- 'TipoRectificativa': 'I',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseTipoOperacion': {
- 'PrestacionServicios': {
- 'NoSujeta': {
- 'ImportePorArticulos7_14_Otros': -100.0,
- },
- },
- 'Entrega': {
- 'Sujeta': {
- 'Exenta': {
- 'DetalleExenta': [
- {
- 'BaseImponible': -200.0,
- 'CausaExencion': 'E5',
- },
- ],
- },
- },
- },
- },
- },
- 'ImporteTotal': -300.0,
- 'Contraparte': {
- 'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
- 'NombreRazon': 'partner_a',
- },
- },
- })
- def test_090_in_invoice_p_iva10_bc_p_irpf19_p_iva21_sc_p_irpf19(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_invoice',
- ref='sup0001',
- partner_id=self.partner_b.id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[
- {
- 'price_unit': 100.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva10_bc') + self._get_tax_by_xml_id('p_irpf19')).ids)],
- },
- {
- 'price_unit': 200.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva21_sc') + self._get_tax_by_xml_id('p_irpf19')).ids)],
- },
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'}
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'F1',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': 352.0,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {'BaseImponible': 100.0, 'CuotaSoportada': 10.0, 'TipoImpositivo': 10.0},
- {'BaseImponible': 200.0, 'CuotaSoportada': 42.0, 'TipoImpositivo': 21.0}
- ]
- }
- },
- 'CuotaDeducible': 52.0
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'}
- })
- def test_100_in_refund_p_iva10_bc(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_refund',
- ref='sup0001',
- partner_id=self.partner_b.id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[{'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('p_iva10_bc').ids)]}],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'},
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'R4',
- 'TipoRectificativa': 'I',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': -110.0,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {'BaseImponible': -100.0, 'CuotaSoportada': -10.0, 'TipoImpositivo': 10.0},
- ],
- },
- },
- 'CuotaDeducible': -10.0,
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
- })
- def test_110_in_invoice_p_iva10_bc_p_req014_p_iva21_sc_p_req52(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_invoice',
- ref='sup0001',
- partner_id=self.partner_b.id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[
- {
- 'price_unit': 100.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva10_bc') + self._get_tax_by_xml_id('p_req014')).ids)],
- },
- {
- 'price_unit': 200.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva21_sc') + self._get_tax_by_xml_id('p_req52')).ids)],
- },
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'},
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'F1',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': 363.8,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'BaseImponible': 100.0,
- 'CuotaSoportada': 10.0,
- 'TipoImpositivo': 10.0,
- 'CuotaRecargoEquivalencia': 1.4,
- 'TipoRecargoEquivalencia': 1.4,
- },
- {
- 'BaseImponible': 200.0,
- 'CuotaSoportada': 42.0,
- 'TipoImpositivo': 21.0,
- 'CuotaRecargoEquivalencia': 10.4,
- 'TipoRecargoEquivalencia': 5.2,
- },
- ],
- },
- },
- 'CuotaDeducible': 52.0,
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
- })
- def test_120_in_invoice_p_iva21_sp_ex(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_invoice',
- ref='sup0001',
- partner_id=self.partner_b.id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[{'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('p_iva21_sp_ex').ids)]}],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'},
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'F1',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': 121.0,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'InversionSujetoPasivo': {
- 'DetalleIVA': [{
- 'BaseImponible': 100.0,
- 'CuotaSoportada': 21.0,
- 'TipoImpositivo': 21.0,
- }],
- },
- },
- 'CuotaDeducible': 21.0,
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
- })
- def test_130_in_invoice_p_iva0_ns_p_iva10_bc(self):
- # TODO make it work
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_invoice',
- ref='sup0001',
- partner_id=self.partner_b.id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[
- {'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('p_iva0_ns').ids)]},
- {'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('p_iva10_bc').ids)]},
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'},
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'F1',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': 320.0,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {'BaseImponible': 100.0},
- {'BaseImponible': 200.0, 'TipoImpositivo': 10.0, 'CuotaSoportada': 20.0},
- ],
- },
- },
- 'CuotaDeducible': 20.0,
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
- })
- def test_140_out_invoice_s_iva10b_s_irpf1(self):
- # TODO: debug
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- partner_id=self.partner_b.id,
- invoice_line_ids=[
- {
- 'price_unit': 100.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('s_iva10b') + self._get_tax_by_xml_id('s_irpf1')).ids)],
- },
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'IDEmisorFactura': {'NIF': '59962470K'},
- 'NumSerieFacturaEmisor': 'INV/2019/00001',
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- },
- 'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
- 'FacturaExpedida': {
- 'TipoFactura': 'F1',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'DescripcionOperacion': 'manual',
- 'TipoDesglose': {
- 'DesgloseFactura': {
- 'Sujeta': {
- 'NoExenta': {
- 'TipoNoExenta': 'S1',
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'TipoImpositivo': 10.0,
- 'BaseImponible': 100.0,
- 'CuotaRepercutida': 10.0,
- },
- ],
- },
- },
- },
- },
- },
- 'ImporteTotal': 110.0,
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- },
- })
- def test_150_in_invoice_p_iva10_bc_p_irpf1(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_invoice',
- ref='sup0001',
- partner_id=self.partner_b.id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[
- {
- 'price_unit': 100.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva10_bc') + self._get_tax_by_xml_id('p_irpf1')).ids)],
- },
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'},
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'F1',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': 110.0,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'BaseImponible': 100.0,
- 'CuotaSoportada': 10.0,
- 'TipoImpositivo': 10.0,
- },
- ],
- },
- },
- 'CuotaDeducible': 10.0,
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
- })
- def test_160_in_refund_p_iva10_bc_p_irpf1(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_refund',
- ref='sup0001',
- partner_id=self.partner_b.id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[
- {
- 'price_unit': 100.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva10_bc') + self._get_tax_by_xml_id('p_irpf1')).ids)],
- },
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'},
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'R4',
- 'TipoRectificativa': 'I',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': -110.0,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'BaseImponible': -100.0,
- 'CuotaSoportada': -10.0,
- 'TipoImpositivo': 10.0,
- },
- ],
- },
- },
- 'CuotaDeducible': -10.0,
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
- })
- def test_165_in_refund_p_iva10_bc_p_irpf1_multi_currency(self):
- with freeze_time(self.frozen_today), \
- patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
- new=mocked_l10n_es_edi_call_web_service_sign):
- invoice = self.create_invoice(
- move_type='in_refund',
- ref='sup0001',
- partner_id=self.partner_b.id,
- currency_id=self.currency_data['currency'].id,
- l10n_es_registration_date='2019-01-02',
- invoice_line_ids=[
- {
- 'price_unit': 200.0,
- 'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva10_bc') + self._get_tax_by_xml_id('p_irpf1')).ids)],
- },
- ],
- )
- invoice.action_post()
- generated_files = self._process_documents_web_services(invoice, {'es_sii'})
- self.assertTrue(generated_files)
- json_file = json.loads(generated_files[0].decode())[0]
- self.assertEqual(json_file, {
- 'IDFactura': {
- 'FechaExpedicionFacturaEmisor': '01-01-2019',
- 'NumSerieFacturaEmisor': 'sup0001',
- 'IDEmisorFactura': {'NIF': 'F35999705'},
- },
- 'FacturaRecibida': {
- 'TipoFactura': 'R4',
- 'TipoRectificativa': 'I',
- 'Contraparte': {'NombreRazon': 'partner_b', 'NIF': 'F35999705'},
- 'DescripcionOperacion': 'manual',
- 'ClaveRegimenEspecialOTrascendencia': '01',
- 'ImporteTotal': -110.0,
- 'FechaRegContable': '02-01-2019',
- 'DesgloseFactura': {
- 'DesgloseIVA': {
- 'DetalleIVA': [
- {
- 'BaseImponible': -100.0,
- 'CuotaSoportada': -10.0,
- 'TipoImpositivo': 10.0,
- },
- ],
- },
- },
- 'CuotaDeducible': -10.0,
- },
- 'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
- })
|