Skip to content

Commit f41f0df

Browse files
committed
[IMP] l10n_es_vat_book: Add igic data
1 parent 4111090 commit f41f0df

5 files changed

Lines changed: 197 additions & 0 deletions

File tree

l10n_es_vat_book/data/aeat.vat.book.map.line.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ aeat_vat_book_map_line_s_req,,"issued","Z","Y","Recargo Eq.","req","l10n_es_aeat
66
aeat_vat_book_map_line_p_req,,"received","AF","AE","Recargo Eq.","req","l10n_es_aeat.aeat_tax_agency_spain","p_req0,p_req05,p_req062,p_req014,p_req52"
77
aeat_vat_book_map_line_s_irpf,,"issued","AF","AE","Retención del IRPF","irpf","l10n_es_aeat.aeat_tax_agency_spain","s_irpf1,s_irpf2,s_irpf7,s_irpf9,s_irpf15,s_irpf18,s_irpf19,s_irpf19a,s_irpf195a,s_irpf20,s_irpf20a,s_irpf21,s_irpf21a"
88
aeat_vat_book_map_line_p_irpf,,"received","AL","AK","Retención del IRPF","irpf","l10n_es_aeat.aeat_tax_agency_spain","p_irpf1,p_irpf2,p_irpf7,p_irpf9,p_irpf15,p_irpf18,p_irpf19,p_irpf19a,p_irpf195a,p_irpf20,p_irpf20a,p_irpf21a,p_irpf21p"
9+
atc_vat_book_igic_map_line_s_igic,,"issued","AN","AM","IGIC Repercutido","","l10n_es_aeat.aeat_tax_agency_canarias","igic_r_0,igic_r_3,igic_r_7,igic_r_9_5,igic_r_15,igic_r_20,igic_s_ISP0,igic_ex_0,igic_re_ex,igic_cmino"
10+
atc_vat_book_igic_map_line_p_igic,"","received","AP","AO","IGIC Soportado","","l10n_es_aeat.aeat_tax_agency_canarias","igic_p_ex,igic_sop_0,igic_sop_3,igic_sop_7,igic_sop_9_5,igic_sop_15,igic_sop_20,igic_sop_0_inv,igic_sop_3_inv,igic_sop_7_inv,igic_sop_9_5_inv,igic_sop_15_inv,igic_sop_20_inv,igic_sop_i_0,igic_sop_i_3,igic_sop_i_7,igic_sop_i_9_5,igic_sop_i_15,igic_sop_i_20,igic_sop_i_0_inv,igic_sop_i_3_inv,igic_sop_i_7_inv,igic_sop_i_9_5_inv,igic_sop_i_15_inv,igic_sop_i_20_inv,igic_ISP0,igic_ISP3,igic_ISP7,igic_ISP95,igic_ISP15,igic_ISP20"
11+
atc_vat_book_igic_map_line_p_req,,"received","AR","AQ","Recargo Eq.","req","l10n_es_aeat.aeat_tax_agency_canarias","igic_p_re0,igic_p_re03,igic_p_re07,igic_p_re095,igic_p_re15,igic_p_re20"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
id,name
22
common_472,account_common_472
33
common_477,account_common_477
4+
common_canary_4727,account_common_canary_4727

l10n_es_vat_book/data/l10n.es.aeat.map.tax.line.tax.csv

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,50 @@ p_irpf21a,account_tax_template_p_irpf21a
131131
p_irpf21p,account_tax_template_p_irpf21p
132132
s_irpf24,account_tax_template_s_irpf24
133133
p_irpf24,account_tax_template_p_irpf24
134+
igic_r_0,account_tax_template_igic_r_0
135+
igic_r_3,account_tax_template_igic_r_3
136+
igic_r_7,account_tax_template_igic_r_7
137+
igic_r_9_5,account_tax_template_igic_r_9_5
138+
igic_r_15,account_tax_template_igic_r_15
139+
igic_r_20,account_tax_template_igic_r_20
140+
igic_s_ISP0,account_tax_template_igic_s_ISP0
141+
igic_ex_0,account_tax_template_igic_ex_0
142+
igic_re_ex,account_tax_template_igic_re_ex
143+
igic_cmino,account_tax_template_igic_cmino
144+
igic_p_ex,account_tax_template_igic_p_ex
145+
igic_sop_0,account_tax_template_igic_sop_0
146+
igic_sop_3,account_tax_template_igic_sop_3
147+
igic_sop_7,account_tax_template_igic_sop_7
148+
igic_sop_9_5,account_tax_template_igic_sop_9_5
149+
igic_sop_15,account_tax_template_igic_sop_15
150+
igic_sop_20,account_tax_template_igic_sop_20
151+
igic_sop_0_inv,account_tax_template_igic_sop_0_inv
152+
igic_sop_3_inv,account_tax_template_igic_sop_3_inv
153+
igic_sop_7_inv,account_tax_template_igic_sop_7_inv
154+
igic_sop_9_5_inv,account_tax_template_igic_sop_9_5_inv
155+
igic_sop_15_inv,account_tax_template_igic_sop_15_inv
156+
igic_sop_20_inv,account_tax_template_igic_sop_20_inv
157+
igic_sop_i_0,account_tax_template_igic_sop_i_0
158+
igic_sop_i_3,account_tax_template_igic_sop_i_3
159+
igic_sop_i_7,account_tax_template_igic_sop_i_7
160+
igic_sop_i_9_5,account_tax_template_igic_sop_i_9_5
161+
igic_sop_i_15,account_tax_template_igic_sop_i_15
162+
igic_sop_i_20,account_tax_template_igic_sop_i_20
163+
igic_sop_i_0_inv,account_tax_template_igic_sop_i_0_inv
164+
igic_sop_i_3_inv,account_tax_template_igic_sop_i_3_inv
165+
igic_sop_i_7_inv,account_tax_template_igic_sop_i_7_inv
166+
igic_sop_i_9_5_inv,account_tax_template_igic_sop_i_9_5_inv
167+
igic_sop_i_15_inv,account_tax_template_igic_sop_i_15_inv
168+
igic_sop_i_20_inv,account_tax_template_igic_sop_i_20_inv
169+
igic_ISP0,account_tax_template_igic_ISP0
170+
igic_ISP3,account_tax_template_igic_ISP3
171+
igic_ISP7,account_tax_template_igic_ISP7
172+
igic_ISP95,account_tax_template_igic_ISP95
173+
igic_ISP15,account_tax_template_igic_ISP15
174+
igic_ISP20,account_tax_template_igic_ISP20
175+
igic_p_re0,account_tax_template_igic_p_re0
176+
igic_p_re03,account_tax_template_igic_p_re03
177+
igic_p_re07,account_tax_template_igic_p_re07
178+
igic_p_re095,account_tax_template_igic_p_re095
179+
igic_p_re15,account_tax_template_igic_p_re15
180+
igic_p_re20,account_tax_template_igic_p_re20

l10n_es_vat_book/tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from . import test_l10n_es_aeat_vat_book
2+
from . import test_l10n_es_aeat_vat_book_igic
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
# Copyright 2024 Binhex - Nicolás Ramos (http://binhex.es)
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
import logging
5+
6+
from odoo import fields
7+
from odoo.tests import tagged
8+
9+
from odoo.addons.l10n_es_aeat.tests.test_l10n_es_aeat_mod_base import (
10+
TestL10nEsAeatModBase,
11+
)
12+
13+
_logger = logging.getLogger("aeat.vat.book.igic")
14+
15+
16+
@tagged("post_install", "-at_install")
17+
class TestL10nEsVatBookIgic(TestL10nEsAeatModBase):
18+
debug = False
19+
taxes_sale = {
20+
# tax code: (base, tax_amount)
21+
"IGIC_R_7": (1500, 105),
22+
}
23+
taxes_purchase = {
24+
# tax code: (base, tax_amount)
25+
"IGIC_SOP_7": (230, 16.1),
26+
"IGIC_SOP_I_7": (200, 14),
27+
"IGIC_SOP_0": (100, 0),
28+
}
29+
30+
@classmethod
31+
def _chart_of_accounts_create(cls):
32+
"""Load Canary chart so IGIC taxes exist for the company."""
33+
_logger.debug("Creating chart of account (Canary)")
34+
cls.company = cls.env["res.company"].create(
35+
{
36+
"name": "Canarias test company",
37+
"currency_id": cls.env.ref("base.EUR").id,
38+
}
39+
)
40+
cls.env.ref("base.group_multi_company").write({"users": [(4, cls.env.uid)]})
41+
cls.env.user.write(
42+
{"company_ids": [(4, cls.company.id)], "company_id": cls.company.id}
43+
)
44+
chart = cls.env["account.chart.template"]
45+
chart.try_loading(
46+
template_code="es_canary_pymes", company=cls.company, install_demo=False
47+
)
48+
cls.with_context(company_id=cls.company.id)
49+
return True
50+
51+
def test_model_vat_book(self):
52+
# Purchase invoices
53+
self._invoice_purchase_create("2024-01-01")
54+
# Sale invoices
55+
sale = self._invoice_sale_create("2024-01-13")
56+
self._invoice_refund(sale, "2024-01-14")
57+
# Create model
58+
self.company.vat = "ES12345678Z"
59+
vat_book = self.env["l10n.es.vat.book"].create(
60+
{
61+
"name": "Test VAT Book IGIC",
62+
"company_id": self.company.id,
63+
"company_vat": "1234567890",
64+
"contact_name": "Test owner",
65+
"statement_type": "N",
66+
"support_type": "T",
67+
"contact_phone": "911234455",
68+
"year": 2024,
69+
"period_type": "1T",
70+
"date_start": "2024-01-01",
71+
"date_end": "2024-03-31",
72+
}
73+
)
74+
_logger.debug("Calculate VAT Book 1T 2024")
75+
76+
vat_book.button_calculate()
77+
# Check issued invoices
78+
for line in vat_book.issued_line_ids:
79+
self.assertEqual(fields.Date.to_string(line.invoice_date), "2024-01-13")
80+
self.assertEqual(line.partner_id, self.customer)
81+
for tax_line in line.tax_line_ids:
82+
self.assertEqual(tax_line.base_amount, 1500)
83+
self.assertEqual(tax_line.tax_amount, 105)
84+
# Check issued refund invoices
85+
for line in vat_book.rectification_issued_line_ids:
86+
self.assertEqual(fields.Date.to_string(line.invoice_date), "2024-01-14")
87+
self.assertEqual(line.partner_id, self.customer)
88+
for tax_line in line.tax_line_ids:
89+
self.assertEqual(tax_line.base_amount, -1500)
90+
self.assertEqual(tax_line.tax_amount, -105)
91+
# Check tax summary for issued invoices
92+
for line in vat_book.issued_tax_summary_ids:
93+
self.assertEqual(line.base_amount, 0.0)
94+
self.assertEqual(line.tax_amount, 0.0)
95+
# Check tax summary for received invoices
96+
self.assertEqual(len(vat_book.received_tax_summary_ids), 3)
97+
98+
rec_summaries = sorted(
99+
vat_book.received_tax_summary_ids,
100+
key=lambda line: line.tax_amount,
101+
reverse=True,
102+
)
103+
# IGIC_SOP_7 - 7% IGIC
104+
line = rec_summaries[0]
105+
self.assertAlmostEqual(line.base_amount, 230)
106+
self.assertAlmostEqual(line.tax_amount, 16.1)
107+
108+
# IGIC_SOP_I_7 - 7% IGIC
109+
line = rec_summaries[1]
110+
self.assertAlmostEqual(line.base_amount, 200)
111+
self.assertAlmostEqual(line.tax_amount, 14)
112+
113+
# IGIC_SOP_0 - 0% IGIC
114+
line = rec_summaries[2]
115+
self.assertAlmostEqual(line.base_amount, 100)
116+
self.assertAlmostEqual(line.tax_amount, 0)
117+
118+
# Print to PDF
119+
report_pdf = self.env["ir.actions.report"]._render(
120+
"l10n_es_vat_book.act_report_vat_book_invoices_issued_pdf", vat_book.ids
121+
)
122+
self.assertGreaterEqual(len(report_pdf[0]), 1)
123+
report_pdf = self.env["ir.actions.report"]._render(
124+
"l10n_es_vat_book.act_report_vat_book_invoices_received_pdf", vat_book.ids
125+
)
126+
self.assertGreaterEqual(len(report_pdf[0]), 1)
127+
# Export to XLSX
128+
report_xlsx = self.env["ir.actions.report"]._render(
129+
"l10n_es_vat_book.l10n_es_vat_book_xlsx", vat_book.ids
130+
)
131+
self.assertGreaterEqual(len(report_xlsx[0]), 1)
132+
self.assertEqual(report_xlsx[1], "xlsx")
133+
# Check empty Vat Book
134+
vat_book.write(
135+
{
136+
"tax_agency_ids": [
137+
(6, 0, [self.env.ref("l10n_es_aeat.aeat_tax_agency_araba").id])
138+
],
139+
}
140+
)
141+
142+
vat_book.button_calculate()
143+
self.assertEqual(len(vat_book.issued_line_ids), 0)
144+
self.assertEqual(len(vat_book.rectification_issued_line_ids), 0)
145+
self.assertEqual(len(vat_book.issued_tax_summary_ids), 0)

0 commit comments

Comments
 (0)