1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/l10n_pe_reports/tests/test_account_purchases.py
2024-12-10 09:04:09 +07:00

159 lines
7.8 KiB
Python

from datetime import timedelta
from odoo import fields
from odoo.tests import tagged
from odoo.addons.account_reports.tests.common import TestAccountReportsCommon
@tagged("post_install", "post_install_l10n", "-at_install")
class TestPePurchase(TestAccountReportsCommon):
@classmethod
def setUpClass(cls, chart_template_ref="pe"):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.purchase_taxes = cls._get_purchase_taxes()
cls.company_data['default_journal_purchase'].l10n_latam_use_documents = True
@classmethod
def _get_purchase_taxes(cls):
taxes = cls.env["account.tax"]
for tax in ["igv_18", "igv_18_included", "exo", "ina", "gra"]:
taxes += cls.env.ref(f"account.{cls.env.company.id}_purchase_tax_{tax}")
return taxes
def _prepare_purchase_moves(self, invoice_type=False, refund_type=False):
date_invoice = "2022-07-01"
moves_vals = []
for i, tax in enumerate(self.purchase_taxes):
moves_vals += [
{
"move_type": "in_invoice",
"l10n_latam_document_number": "INV/2022/07/%s" % (i + 1),
"partner_id": self.partner_a.id,
"invoice_date": date_invoice,
"invoice_date_due": date_invoice,
"date": date_invoice,
"invoice_payment_term_id": False,
"l10n_latam_document_type_id": (invoice_type or self.env.ref("l10n_pe.document_type01")).id,
"l10n_pe_usage_type_id": self.env.ref("l10n_pe_reports.ple_usage_type_00").id,
"invoice_line_ids": [
(0, 0, {
"name": f"test {tax.amount}",
"quantity": 1,
"price_unit": 10 + 1 * i,
"tax_ids": [(6, 0, tax.ids)],
})
],
},
]
moves = self.env["account.move"].create(moves_vals)
moves.action_post()
number = 1
for move in moves:
move_reversal = (
self.env["account.move.reversal"]
.with_context(active_ids=move.ids, active_model="account.move")
.create(
{
"reason": "Testing",
"date": move.invoice_date + timedelta(days=1),
"journal_id": move.journal_id.id,
}
)
)
refund = self.env["account.move"].browse(move_reversal.reverse_moves()["res_id"])
refund.l10n_latam_document_type_id = refund_type or self.env.ref("l10n_pe.document_type07")
refund.l10n_latam_document_number = "FFF %s" % str(number).zfill(4)
refund.l10n_pe_usage_type_id = self.env.ref("l10n_pe_reports.ple_usage_type_00")
refund.action_post()
number += 1
return moves
def test_purchase_report_8_1(self):
(self.partner_a | self.partner_b).write({"country_id": self.env.ref("base.pe").id})
moves = self._prepare_purchase_moves()
# Moves with document type in ("91", "97", "98") must be ignored. Created to ensure that are not considered
# in the 8.1 report
self._prepare_purchase_moves(
self.env.ref("l10n_pe.document_type91"), self.env.ref("l10n_pe.document_type97")
)
# Moves for not Peruvian partner must be ignored
partner_c = self.partner_a.copy({"country_id": self.env.ref("base.mx").id})
moves[0].copy({"partner_id": partner_c.id})
report = self.env.ref("l10n_pe_reports.tax_report_ple_purchase_8_1")
options = self._generate_options(
report, fields.Date.from_string("2022-01-01"), fields.Date.from_string("2022-12-31")
)
options.update({"journal_type": "purchase"})
self.maxDiff = None
self.assertEqual(
"\n".join(
[
"|".join(line.split("|")[3:])
for line in self.env[report.custom_handler_model_name]
.export_to_txt(options)["file_content"]
.decode()
.split("\r\n")
]
),
"""
|01/07/2022|01/07/2022|01|INV/2022/07/||1||0||partner_a|10.0|1.8|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|11.8|PEN||||||||||||||
|01/07/2022|01/07/2022|01|INV/2022/07/||2||0||partner_a|9.32|1.68|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|11.0|PEN||||||||||||||
|01/07/2022|01/07/2022|01|INV/2022/07/||3||0||partner_a|0.0|0.00|0.00|0.00|0.00|0.00|12.0|0.00|0.00|0.00|12.0|PEN||||||||||||||
|01/07/2022|01/07/2022|01|INV/2022/07/||4||0||partner_a|0.0|0.00|0.00|0.00|0.00|0.00|13.0|0.00|0.00|0.00|13.0|PEN||||||||||||||
|01/07/2022|01/07/2022|01|INV/2022/07/||5||0||partner_a|0.0|0.00|0.00|0.00|0.00|0.00|14.0|0.00|0.00|0.00|14.0|PEN||||||||||||||
|02/07/2022|02/07/2022|07|FFF||1||0||partner_a|-10.0|-1.8|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|-11.8|PEN||01/07/2022|01|INV/2022/07/||1||||||||
|02/07/2022|02/07/2022|07|FFF||2||0||partner_a|-9.32|-1.68|0.00|0.00|0.00|0.00|0.00|0.00|0.00|0.00|-11.0|PEN||01/07/2022|01|INV/2022/07/||2||||||||
|02/07/2022|02/07/2022|07|FFF||3||0||partner_a|0.0|0.00|0.00|0.00|0.00|0.00|-12.0|0.00|0.00|0.00|-12.0|PEN||01/07/2022|01|INV/2022/07/||3||||||||
|02/07/2022|02/07/2022|07|FFF||4||0||partner_a|0.0|0.00|0.00|0.00|0.00|0.00|-13.0|0.00|0.00|0.00|-13.0|PEN||01/07/2022|01|INV/2022/07/||4||||||||
|02/07/2022|02/07/2022|07|FFF||5||0||partner_a|0.0|0.00|0.00|0.00|0.00|0.00|-14.0|0.00|0.00|0.00|-14.0|PEN||01/07/2022|01|INV/2022/07/||5||||||||
"""[
1:
],
)
def test_purchase_report_8_2(self):
self.partner_a.write({"country_id": self.env.ref("base.mx").id})
self._prepare_purchase_moves(
self.env.ref("l10n_pe.document_type91"), self.env.ref("l10n_pe.document_type97")
)
# Moves with document type not in ("91", "97", "98") must be ignored
self._prepare_purchase_moves()
report = self.env.ref("l10n_pe_reports.tax_report_ple_purchase_8_2")
options = self._generate_options(
report, fields.Date.from_string("2022-01-01"), fields.Date.from_string("2022-12-31")
)
options.update({"journal_type": "purchase"})
self.maxDiff = None
self.assertEqual(
"\n".join(
[
"|".join(line.split("|")[2:])
for line in self.env[report.custom_handler_model_name]
.export_to_txt(options)["file_content"]
.decode()
.split("\r\n")
]
),
"""
01/07/2022|91|INV/2022/07/|1|10.0||11.8|||||1.8|PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
01/07/2022|91|INV/2022/07/|2|9.32||11.0|||||1.68|PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
01/07/2022|91|INV/2022/07/|3|0.0||12.0||||||PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05|12.0|00||||
01/07/2022|91|INV/2022/07/|4|0.0||13.0||||||PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
01/07/2022|91|INV/2022/07/|5|0.0||14.0||||||PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
02/07/2022|97|FFF|1|-10.0||-11.8|||||-1.8|PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
02/07/2022|97|FFF|2|-9.32||-11.0|||||-1.68|PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
02/07/2022|97|FFF|3|0.0||-12.0||||||PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05|-12.0|00||||
02/07/2022|97|FFF|4|0.0||-13.0||||||PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
02/07/2022|97|FFF|5|0.0||-14.0||||||PEN||9493|partner_a|||||||0.00|0.00|0.00|0.00|0.00|05||00||||
"""[
1:
],
)