Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions l10n_es_vat_book/data/aeat.vat.book.map.line.csv
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ aeat_vat_book_map_line_s_req,,"issued","Z","Y","Recargo Eq.","req","l10n_es_aeat
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"
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"
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"
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"
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"
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"
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
id,name
common_472,account_common_472
common_477,account_common_477
common_canary_4727,account_common_canary_4727
47 changes: 47 additions & 0 deletions l10n_es_vat_book/data/l10n.es.aeat.map.tax.line.tax.csv
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,50 @@ p_irpf21a,account_tax_template_p_irpf21a
p_irpf21p,account_tax_template_p_irpf21p
s_irpf24,account_tax_template_s_irpf24
p_irpf24,account_tax_template_p_irpf24
igic_r_0,account_tax_template_igic_r_0
igic_r_3,account_tax_template_igic_r_3
igic_r_7,account_tax_template_igic_r_7
igic_r_9_5,account_tax_template_igic_r_9_5
igic_r_15,account_tax_template_igic_r_15
igic_r_20,account_tax_template_igic_r_20
igic_s_ISP0,account_tax_template_igic_s_ISP0
igic_ex_0,account_tax_template_igic_ex_0
igic_re_ex,account_tax_template_igic_re_ex
igic_cmino,account_tax_template_igic_cmino
igic_p_ex,account_tax_template_igic_p_ex
igic_sop_0,account_tax_template_igic_sop_0
igic_sop_3,account_tax_template_igic_sop_3
igic_sop_7,account_tax_template_igic_sop_7
igic_sop_9_5,account_tax_template_igic_sop_9_5
igic_sop_15,account_tax_template_igic_sop_15
igic_sop_20,account_tax_template_igic_sop_20
igic_sop_0_inv,account_tax_template_igic_sop_0_inv
igic_sop_3_inv,account_tax_template_igic_sop_3_inv
igic_sop_7_inv,account_tax_template_igic_sop_7_inv
igic_sop_9_5_inv,account_tax_template_igic_sop_9_5_inv
igic_sop_15_inv,account_tax_template_igic_sop_15_inv
igic_sop_20_inv,account_tax_template_igic_sop_20_inv
igic_sop_i_0,account_tax_template_igic_sop_i_0
igic_sop_i_3,account_tax_template_igic_sop_i_3
igic_sop_i_7,account_tax_template_igic_sop_i_7
igic_sop_i_9_5,account_tax_template_igic_sop_i_9_5
igic_sop_i_15,account_tax_template_igic_sop_i_15
igic_sop_i_20,account_tax_template_igic_sop_i_20
igic_sop_i_0_inv,account_tax_template_igic_sop_i_0_inv
igic_sop_i_3_inv,account_tax_template_igic_sop_i_3_inv
igic_sop_i_7_inv,account_tax_template_igic_sop_i_7_inv
igic_sop_i_9_5_inv,account_tax_template_igic_sop_i_9_5_inv
igic_sop_i_15_inv,account_tax_template_igic_sop_i_15_inv
igic_sop_i_20_inv,account_tax_template_igic_sop_i_20_inv
igic_ISP0,account_tax_template_igic_ISP0
igic_ISP3,account_tax_template_igic_ISP3
igic_ISP7,account_tax_template_igic_ISP7
igic_ISP95,account_tax_template_igic_ISP95
igic_ISP15,account_tax_template_igic_ISP15
igic_ISP20,account_tax_template_igic_ISP20
igic_p_re0,account_tax_template_igic_p_re0
igic_p_re03,account_tax_template_igic_p_re03
igic_p_re07,account_tax_template_igic_p_re07
igic_p_re095,account_tax_template_igic_p_re095
igic_p_re15,account_tax_template_igic_p_re15
igic_p_re20,account_tax_template_igic_p_re20
1 change: 1 addition & 0 deletions l10n_es_vat_book/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import test_l10n_es_aeat_vat_book
from . import test_l10n_es_aeat_vat_book_igic
145 changes: 145 additions & 0 deletions l10n_es_vat_book/tests/test_l10n_es_aeat_vat_book_igic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Copyright 2024 Binhex - Nicolás Ramos (http://binhex.es)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

import logging

from odoo import fields
from odoo.tests import tagged

from odoo.addons.l10n_es_aeat.tests.test_l10n_es_aeat_mod_base import (
TestL10nEsAeatModBase,
)

_logger = logging.getLogger("aeat.vat.book.igic")


@tagged("post_install", "-at_install")
class TestL10nEsVatBookIgic(TestL10nEsAeatModBase):
debug = False
taxes_sale = {
# tax code: (base, tax_amount)
"IGIC_R_7": (1500, 105),
}
taxes_purchase = {
# tax code: (base, tax_amount)
"IGIC_SOP_7": (230, 16.1),
"IGIC_SOP_I_7": (200, 14),
"IGIC_SOP_0": (100, 0),
}

@classmethod
def _chart_of_accounts_create(cls):
"""Load Canary chart so IGIC taxes exist for the company."""
_logger.debug("Creating chart of account (Canary)")
cls.company = cls.env["res.company"].create(
{
"name": "Canarias test company",
"currency_id": cls.env.ref("base.EUR").id,
}
)
cls.env.ref("base.group_multi_company").write({"users": [(4, cls.env.uid)]})
cls.env.user.write(
{"company_ids": [(4, cls.company.id)], "company_id": cls.company.id}
)
chart = cls.env["account.chart.template"]
chart.try_loading(
template_code="es_canary_pymes", company=cls.company, install_demo=False
)
cls.with_context(company_id=cls.company.id)
return True

def test_model_vat_book(self):
# Purchase invoices
self._invoice_purchase_create("2024-01-01")
# Sale invoices
sale = self._invoice_sale_create("2024-01-13")
self._invoice_refund(sale, "2024-01-14")
# Create model
self.company.vat = "ES12345678Z"
vat_book = self.env["l10n.es.vat.book"].create(
{
"name": "Test VAT Book IGIC",
"company_id": self.company.id,
"company_vat": "1234567890",
"contact_name": "Test owner",
"statement_type": "N",
"support_type": "T",
"contact_phone": "911234455",
"year": 2024,
"period_type": "1T",
"date_start": "2024-01-01",
"date_end": "2024-03-31",
}
)
_logger.debug("Calculate VAT Book 1T 2024")

vat_book.button_calculate()
# Check issued invoices
for line in vat_book.issued_line_ids:
self.assertEqual(fields.Date.to_string(line.invoice_date), "2024-01-13")
self.assertEqual(line.partner_id, self.customer)
for tax_line in line.tax_line_ids:
self.assertEqual(tax_line.base_amount, 1500)
self.assertEqual(tax_line.tax_amount, 105)
# Check issued refund invoices
for line in vat_book.rectification_issued_line_ids:
self.assertEqual(fields.Date.to_string(line.invoice_date), "2024-01-14")
self.assertEqual(line.partner_id, self.customer)
for tax_line in line.tax_line_ids:
self.assertEqual(tax_line.base_amount, -1500)
self.assertEqual(tax_line.tax_amount, -105)
# Check tax summary for issued invoices
for line in vat_book.issued_tax_summary_ids:
self.assertEqual(line.base_amount, 0.0)
self.assertEqual(line.tax_amount, 0.0)
# Check tax summary for received invoices
self.assertEqual(len(vat_book.received_tax_summary_ids), 3)

rec_summaries = sorted(
vat_book.received_tax_summary_ids,
key=lambda line: line.tax_amount,
reverse=True,
)
# IGIC_SOP_7 - 7% IGIC
line = rec_summaries[0]
self.assertAlmostEqual(line.base_amount, 230)
self.assertAlmostEqual(line.tax_amount, 16.1)

# IGIC_SOP_I_7 - 7% IGIC
line = rec_summaries[1]
self.assertAlmostEqual(line.base_amount, 200)
self.assertAlmostEqual(line.tax_amount, 14)

# IGIC_SOP_0 - 0% IGIC
line = rec_summaries[2]
self.assertAlmostEqual(line.base_amount, 100)
self.assertAlmostEqual(line.tax_amount, 0)

# Print to PDF
report_pdf = self.env["ir.actions.report"]._render(
"l10n_es_vat_book.act_report_vat_book_invoices_issued_pdf", vat_book.ids
)
self.assertGreaterEqual(len(report_pdf[0]), 1)
report_pdf = self.env["ir.actions.report"]._render(
"l10n_es_vat_book.act_report_vat_book_invoices_received_pdf", vat_book.ids
)
self.assertGreaterEqual(len(report_pdf[0]), 1)
# Export to XLSX
report_xlsx = self.env["ir.actions.report"]._render(
"l10n_es_vat_book.l10n_es_vat_book_xlsx", vat_book.ids
)
self.assertGreaterEqual(len(report_xlsx[0]), 1)
self.assertEqual(report_xlsx[1], "xlsx")
# Check empty Vat Book
vat_book.write(
{
"tax_agency_ids": [
(6, 0, [self.env.ref("l10n_es_aeat.aeat_tax_agency_araba").id])
],
}
)

vat_book.button_calculate()
self.assertEqual(len(vat_book.issued_line_ids), 0)
self.assertEqual(len(vat_book.rectification_issued_line_ids), 0)
self.assertEqual(len(vat_book.issued_tax_summary_ids), 0)
Loading