Skip to content

Commit f22c25f

Browse files
committed
[IMP] l10n_es_vat_book: Add igic data
1 parent bf63ae7 commit f22c25f

5 files changed

Lines changed: 195 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
@@ -4,3 +4,6 @@ aeat_vat_book_map_line_p_iva,"common_472","received","P","O","IVA soportado","",
44
aeat_vat_book_map_line_p_iva_nd,,"received",,,"IVA soportado no deducible","","l10n_es_aeat.aeat_tax_agency_spain","p_iva2_nd,p_iva4_nd,p_iva5_nd,p_iva7-5_nd,p_iva10_nd,p_iva0_nd"
55
aeat_vat_book_map_line_s_req,,"issued","Q","P","Recargo Eq.","req","l10n_es_aeat.aeat_tax_agency_spain","s_req0,s_req05,s_req062,s_req014,s_req52"
66
aeat_vat_book_map_line_p_req,,"received","S","R","Recargo Eq.","req","l10n_es_aeat.aeat_tax_agency_spain","p_req0,p_req05,p_req062,p_req014,p_req52"
7+
atc_vat_book_igic_map_line_s_igic,,"issued","O","N","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"
8+
atc_vat_book_igic_map_line_p_igic,"common_canary_4727","received","O","P","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"
9+
atc_vat_book_igic_map_line_p_req,,"received","S","R","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,2 +1,3 @@
11
id,name
22
common_472,account_common_472
3+
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
@@ -104,3 +104,50 @@ p_iva21_ibc_group,account_tax_template_p_iva21_ibc_group
104104
p_iva4_ibc_group,account_tax_template_p_iva4_ibc_group
105105
p_iva10_ibc_group,account_tax_template_p_iva10_ibc_group
106106
p_dua_exempt,account_tax_template_p_dua_exempt
107+
igic_r_0,account_tax_template_igic_r_0
108+
igic_r_3,account_tax_template_igic_r_3
109+
igic_r_7,account_tax_template_igic_r_7
110+
igic_r_9_5,account_tax_template_igic_r_9_5
111+
igic_r_15,account_tax_template_igic_r_15
112+
igic_r_20,account_tax_template_igic_r_20
113+
igic_s_ISP0,account_tax_template_igic_s_ISP0
114+
igic_ex_0,account_tax_template_igic_ex_0
115+
igic_re_ex,account_tax_template_igic_re_ex
116+
igic_cmino,account_tax_template_igic_cmino
117+
igic_p_ex,account_tax_template_igic_p_ex
118+
igic_sop_0,account_tax_template_igic_sop_0
119+
igic_sop_3,account_tax_template_igic_sop_3
120+
igic_sop_7,account_tax_template_igic_sop_7
121+
igic_sop_9_5,account_tax_template_igic_sop_9_5
122+
igic_sop_15,account_tax_template_igic_sop_15
123+
igic_sop_20,account_tax_template_igic_sop_20
124+
igic_sop_0_inv,account_tax_template_igic_sop_0_inv
125+
igic_sop_3_inv,account_tax_template_igic_sop_3_inv
126+
igic_sop_7_inv,account_tax_template_igic_sop_7_inv
127+
igic_sop_9_5_inv,account_tax_template_igic_sop_9_5_inv
128+
igic_sop_15_inv,account_tax_template_igic_sop_15_inv
129+
igic_sop_20_inv,account_tax_template_igic_sop_20_inv
130+
igic_sop_i_0,account_tax_template_igic_sop_i_0
131+
igic_sop_i_3,account_tax_template_igic_sop_i_3
132+
igic_sop_i_7,account_tax_template_igic_sop_i_7
133+
igic_sop_i_9_5,account_tax_template_igic_sop_i_9_5
134+
igic_sop_i_15,account_tax_template_igic_sop_i_15
135+
igic_sop_i_20,account_tax_template_igic_sop_i_20
136+
igic_sop_i_0_inv,account_tax_template_igic_sop_i_0_inv
137+
igic_sop_i_3_inv,account_tax_template_igic_sop_i_3_inv
138+
igic_sop_i_7_inv,account_tax_template_igic_sop_i_7_inv
139+
igic_sop_i_9_5_inv,account_tax_template_igic_sop_i_9_5_inv
140+
igic_sop_i_15_inv,account_tax_template_igic_sop_i_15_inv
141+
igic_sop_i_20_inv,account_tax_template_igic_sop_i_20_inv
142+
igic_ISP0,account_tax_template_igic_ISP0
143+
igic_ISP3,account_tax_template_igic_ISP3
144+
igic_ISP7,account_tax_template_igic_ISP7
145+
igic_ISP95,account_tax_template_igic_ISP95
146+
igic_ISP15,account_tax_template_igic_ISP15
147+
igic_ISP20,account_tax_template_igic_ISP20
148+
igic_p_re0,account_tax_template_igic_p_re0
149+
igic_p_re03,account_tax_template_igic_p_re03
150+
igic_p_re07,account_tax_template_igic_p_re07
151+
igic_p_re095,account_tax_template_igic_p_re095
152+
igic_p_re15,account_tax_template_igic_p_re15
153+
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: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
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+
8+
from odoo.addons.l10n_es_aeat.tests.test_l10n_es_aeat_mod_base import (
9+
TestL10nEsAeatModBase,
10+
)
11+
12+
_logger = logging.getLogger("aeat.vat.book.igic")
13+
14+
15+
class TestL10nEsVatBookIgic(TestL10nEsAeatModBase):
16+
debug = False
17+
taxes_sale = {
18+
# tax code: (base, tax_amount)
19+
"IGIC_R_7": (1500, 105),
20+
}
21+
taxes_purchase = {
22+
# tax code: (base, tax_amount)
23+
"IGIC_SOP_7": (230, 16.1),
24+
"IGIC_SOP_I_7": (200, 14),
25+
"IGIC_SOP_0": (100, 0),
26+
}
27+
28+
@classmethod
29+
def _chart_of_accounts_create(cls):
30+
"""Load Canary chart so IGIC taxes exist for the company."""
31+
_logger.debug("Creating chart of account (Canary)")
32+
cls.company = cls.env["res.company"].create(
33+
{
34+
"name": "Canarias test company",
35+
"currency_id": cls.env.ref("base.EUR").id,
36+
}
37+
)
38+
cls.env.ref("base.group_multi_company").write({"users": [(4, cls.env.uid)]})
39+
cls.env.user.write(
40+
{"company_ids": [(4, cls.company.id)], "company_id": cls.company.id}
41+
)
42+
chart = cls.env["account.chart.template"]
43+
chart.try_loading(
44+
template_code="es_canary_pymes", company=cls.company, install_demo=False
45+
)
46+
cls.with_context(company_id=cls.company.id)
47+
return True
48+
49+
def test_model_vat_book(self):
50+
# Purchase invoices
51+
self._invoice_purchase_create("2024-01-01")
52+
# Sale invoices
53+
sale = self._invoice_sale_create("2024-01-13")
54+
self._invoice_refund(sale, "2024-01-14")
55+
# Create model
56+
self.company.vat = "ES12345678Z"
57+
vat_book = self.env["l10n.es.vat.book"].create(
58+
{
59+
"name": "Test VAT Book IGIC",
60+
"company_id": self.company.id,
61+
"company_vat": "1234567890",
62+
"contact_name": "Test owner",
63+
"statement_type": "N",
64+
"support_type": "T",
65+
"contact_phone": "911234455",
66+
"year": 2024,
67+
"period_type": "1T",
68+
"date_start": "2024-01-01",
69+
"date_end": "2024-03-31",
70+
}
71+
)
72+
_logger.debug("Calculate VAT Book 1T 2024")
73+
74+
vat_book.button_calculate()
75+
# Check issued invoices
76+
for line in vat_book.issued_line_ids:
77+
self.assertEqual(fields.Date.to_string(line.invoice_date), "2024-01-13")
78+
self.assertEqual(line.partner_id, self.customer)
79+
for tax_line in line.tax_line_ids:
80+
self.assertEqual(tax_line.base_amount, 1500)
81+
self.assertEqual(tax_line.tax_amount, 105)
82+
# Check issued refund invoices
83+
for line in vat_book.rectification_issued_line_ids:
84+
self.assertEqual(fields.Date.to_string(line.invoice_date), "2024-01-14")
85+
self.assertEqual(line.partner_id, self.customer)
86+
for tax_line in line.tax_line_ids:
87+
self.assertEqual(tax_line.base_amount, -1500)
88+
self.assertEqual(tax_line.tax_amount, -105)
89+
# Check tax summary for issued invoices
90+
for line in vat_book.issued_tax_summary_ids:
91+
self.assertEqual(line.base_amount, 0.0)
92+
self.assertEqual(line.tax_amount, 0.0)
93+
# Check tax summary for received invoices
94+
self.assertEqual(len(vat_book.received_tax_summary_ids), 3)
95+
96+
rec_summaries = sorted(
97+
vat_book.received_tax_summary_ids,
98+
key=lambda line: line.tax_amount,
99+
reverse=True,
100+
)
101+
# IGIC_SOP_7 - 7% IGIC
102+
line = rec_summaries[0]
103+
self.assertAlmostEqual(line.base_amount, 230)
104+
self.assertAlmostEqual(line.tax_amount, 16.1)
105+
106+
# IGIC_SOP_I_7 - 7% IGIC
107+
line = rec_summaries[1]
108+
self.assertAlmostEqual(line.base_amount, 200)
109+
self.assertAlmostEqual(line.tax_amount, 14)
110+
111+
# IGIC_SOP_0 - 0% IGIC
112+
line = rec_summaries[2]
113+
self.assertAlmostEqual(line.base_amount, 100)
114+
self.assertAlmostEqual(line.tax_amount, 0)
115+
116+
# Print to PDF
117+
report_pdf = self.env["ir.actions.report"]._render(
118+
"l10n_es_vat_book.act_report_vat_book_invoices_issued_pdf", vat_book.ids
119+
)
120+
self.assertGreaterEqual(len(report_pdf[0]), 1)
121+
report_pdf = self.env["ir.actions.report"]._render(
122+
"l10n_es_vat_book.act_report_vat_book_invoices_received_pdf", vat_book.ids
123+
)
124+
self.assertGreaterEqual(len(report_pdf[0]), 1)
125+
# Export to XLSX
126+
report_xlsx = self.env["ir.actions.report"]._render(
127+
"l10n_es_vat_book.l10n_es_vat_book_xlsx", vat_book.ids
128+
)
129+
self.assertGreaterEqual(len(report_xlsx[0]), 1)
130+
self.assertEqual(report_xlsx[1], "xlsx")
131+
# Check empty Vat Book
132+
vat_book.write(
133+
{
134+
"tax_agency_ids": [
135+
(6, 0, [self.env.ref("l10n_es_aeat.aeat_tax_agency_araba").id])
136+
],
137+
}
138+
)
139+
140+
vat_book.button_calculate()
141+
self.assertEqual(len(vat_book.issued_line_ids), 0)
142+
self.assertEqual(len(vat_book.rectification_issued_line_ids), 0)
143+
self.assertEqual(len(vat_book.issued_tax_summary_ids), 0)

0 commit comments

Comments
 (0)