You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
416 lines
13 KiB
416 lines
13 KiB
# Copyright 2017 ACSONE SA/NV
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from datetime import date, datetime
|
|
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from odoo.fields import Date
|
|
from odoo.tests.common import TransactionCase
|
|
|
|
from . import abstract_test_foreign_currency as a_t_f_c
|
|
|
|
|
|
class TestJournalLedger(a_t_f_c.AbstractTestForeignCurrency):
|
|
"""
|
|
Technical tests for General Ledger Report.
|
|
"""
|
|
|
|
def _getReportModel(self):
|
|
return self.env["report_journal_ledger"]
|
|
|
|
def _getQwebReportName(self):
|
|
return "account_financial_report.report_journal_ledger_qweb"
|
|
|
|
def _getXlsxReportName(self):
|
|
return "a_f_r.report_journal_ledger_xlsx"
|
|
|
|
def _getXlsxReportActionName(self):
|
|
return "account_financial_report." "action_report_journal_ledger_xlsx"
|
|
|
|
def _getReportTitle(self):
|
|
return "Odoo"
|
|
|
|
def _getBaseFilters(self):
|
|
return {
|
|
"date_from": date(date.today().year, 1, 1),
|
|
"date_to": date(date.today().year, 12, 31),
|
|
"company_id": self.company.id,
|
|
"journal_ids": [(6, 0, self.journal_sale.ids)],
|
|
}
|
|
|
|
def _getAdditionalFiltersToBeTested(self):
|
|
return [
|
|
{
|
|
"move_target": "All",
|
|
"sort_option": "Date",
|
|
"group_option": "Journal",
|
|
"with_account_name": True,
|
|
"foreign_currency": True,
|
|
},
|
|
]
|
|
|
|
def test_02_generation_report_html(self):
|
|
"""Check if report HTML is correctly generated"""
|
|
|
|
# Check if returned report action is correct
|
|
report_type = "qweb-html"
|
|
report_action = self.report.print_report(report_type)
|
|
self.assertDictContainsSubset(
|
|
{
|
|
"type": "ir.actions.report",
|
|
"report_name": self.qweb_report_name,
|
|
"report_type": "qweb-html",
|
|
},
|
|
report_action,
|
|
)
|
|
|
|
# Check if report template is correct
|
|
report = self.env["ir.actions.report"].search(
|
|
[
|
|
("report_name", "=", self.qweb_report_name),
|
|
("report_type", "=", report_type),
|
|
],
|
|
limit=1,
|
|
)
|
|
self.assertEqual(report.report_type, "qweb-html")
|
|
|
|
rep = report.render(self.report.ids, {})
|
|
|
|
self.assertTrue(self.report_title.encode("utf8") in rep[0])
|
|
self.assertTrue(self.report.journal_ids[0].name.encode("utf8") in rep[0])
|
|
|
|
def test_04_compute_data(self):
|
|
return True
|
|
|
|
|
|
class TestJournalReport(TransactionCase):
|
|
def setUp(self):
|
|
super(TestJournalReport, self).setUp()
|
|
self.AccountObj = self.env["account.account"]
|
|
self.InvoiceObj = self.env["account.invoice"]
|
|
self.JournalObj = self.env["account.journal"]
|
|
self.JournalReportObj = self.env["journal.ledger.report.wizard"]
|
|
self.MoveObj = self.env["account.move"]
|
|
self.ReportJournalLedger = self.env["report_journal_ledger"]
|
|
self.TaxObj = self.env["account.tax"]
|
|
|
|
self.company = self.env.ref("base.main_company")
|
|
|
|
today = datetime.today()
|
|
last_year = today - relativedelta(years=1)
|
|
|
|
self.previous_fy_date_start = Date.to_string(last_year.replace(month=1, day=1))
|
|
self.previous_fy_date_end = Date.to_string(last_year.replace(month=12, day=31))
|
|
self.fy_date_start = Date.to_string(today.replace(month=1, day=1))
|
|
self.fy_date_end = Date.to_string(today.replace(month=12, day=31))
|
|
|
|
self.receivable_account = self.AccountObj.search(
|
|
[("user_type_id.name", "=", "Receivable")], limit=1
|
|
)
|
|
self.income_account = self.AccountObj.search(
|
|
[("user_type_id.name", "=", "Income")], limit=1
|
|
)
|
|
self.payable_account = self.AccountObj.search(
|
|
[("user_type_id.name", "=", "Payable")], limit=1
|
|
)
|
|
|
|
self.journal_sale = self.JournalObj.create(
|
|
{
|
|
"name": "Test journal sale",
|
|
"code": "TST-JRNL-S",
|
|
"type": "sale",
|
|
"company_id": self.company.id,
|
|
}
|
|
)
|
|
self.journal_purchase = self.JournalObj.create(
|
|
{
|
|
"name": "Test journal purchase",
|
|
"code": "TST-JRNL-P",
|
|
"type": "sale",
|
|
"company_id": self.company.id,
|
|
}
|
|
)
|
|
|
|
self.tax_15_s = self.TaxObj.create(
|
|
{
|
|
"sequence": 30,
|
|
"name": "Tax 15.0% (Percentage of Price)",
|
|
"amount": 15.0,
|
|
"amount_type": "percent",
|
|
"include_base_amount": False,
|
|
"type_tax_use": "sale",
|
|
}
|
|
)
|
|
|
|
self.tax_20_s = self.TaxObj.create(
|
|
{
|
|
"sequence": 30,
|
|
"name": "Tax 20.0% (Percentage of Price)",
|
|
"amount": 20.0,
|
|
"amount_type": "percent",
|
|
"include_base_amount": False,
|
|
"type_tax_use": "sale",
|
|
}
|
|
)
|
|
|
|
self.tax_15_p = self.TaxObj.create(
|
|
{
|
|
"sequence": 30,
|
|
"name": "Tax 15.0% (Percentage of Price)",
|
|
"amount": 15.0,
|
|
"amount_type": "percent",
|
|
"include_base_amount": False,
|
|
"type_tax_use": "purchase",
|
|
}
|
|
)
|
|
|
|
self.tax_20_p = self.TaxObj.create(
|
|
{
|
|
"sequence": 30,
|
|
"name": "Tax 20.0% (Percentage of Price)",
|
|
"amount": 20.0,
|
|
"amount_type": "percent",
|
|
"include_base_amount": False,
|
|
"type_tax_use": "purchase",
|
|
}
|
|
)
|
|
|
|
self.partner_2 = self.env.ref("base.res_partner_2")
|
|
|
|
def _add_move(
|
|
self,
|
|
date,
|
|
journal,
|
|
receivable_debit,
|
|
receivable_credit,
|
|
income_debit,
|
|
income_credit,
|
|
):
|
|
move_name = "move name"
|
|
move_vals = {
|
|
"journal_id": journal.id,
|
|
"date": date,
|
|
"line_ids": [
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"name": move_name,
|
|
"debit": receivable_debit,
|
|
"credit": receivable_credit,
|
|
"account_id": self.receivable_account.id,
|
|
},
|
|
),
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"name": move_name,
|
|
"debit": income_debit,
|
|
"credit": income_credit,
|
|
"account_id": self.income_account.id,
|
|
},
|
|
),
|
|
],
|
|
}
|
|
return self.MoveObj.create(move_vals)
|
|
|
|
def check_report_journal_debit_credit(
|
|
self, report, expected_debit, expected_credit
|
|
):
|
|
self.assertEqual(
|
|
expected_debit,
|
|
sum([journal.debit for journal in report.report_journal_ledger_ids]),
|
|
)
|
|
|
|
self.assertEqual(
|
|
expected_credit,
|
|
sum([journal.credit for journal in report.report_journal_ledger_ids]),
|
|
)
|
|
|
|
def check_report_journal_debit_credit_taxes(
|
|
self,
|
|
report,
|
|
expected_base_debit,
|
|
expected_base_credit,
|
|
expected_tax_debit,
|
|
expected_tax_credit,
|
|
):
|
|
|
|
self.assertEqual(
|
|
expected_base_debit,
|
|
sum(
|
|
[
|
|
journal.base_debit
|
|
for journal in report.report_journal_ledger_tax_line_ids
|
|
]
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
expected_base_credit,
|
|
sum(
|
|
[
|
|
journal.base_credit
|
|
for journal in report.report_journal_ledger_tax_line_ids
|
|
]
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
expected_tax_debit,
|
|
sum(
|
|
[
|
|
journal.tax_debit
|
|
for journal in report.report_journal_ledger_tax_line_ids
|
|
]
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
expected_tax_credit,
|
|
sum(
|
|
[
|
|
journal.tax_credit
|
|
for journal in report.report_journal_ledger_tax_line_ids
|
|
]
|
|
),
|
|
)
|
|
|
|
def test_01_test_total(self):
|
|
today_date = Date.today()
|
|
last_year_date = Date.to_string(datetime.today() - relativedelta(years=1))
|
|
|
|
move1 = self._add_move(today_date, self.journal_sale, 0, 100, 100, 0)
|
|
move2 = self._add_move(last_year_date, self.journal_sale, 0, 100, 100, 0)
|
|
|
|
report = self.ReportJournalLedger.create(
|
|
{
|
|
"date_from": self.fy_date_start,
|
|
"date_to": self.fy_date_end,
|
|
"company_id": self.company.id,
|
|
"journal_ids": [(6, 0, self.journal_sale.ids)],
|
|
}
|
|
)
|
|
report.compute_data_for_report()
|
|
|
|
self.check_report_journal_debit_credit(report, 100, 100)
|
|
|
|
move3 = self._add_move(today_date, self.journal_sale, 0, 100, 100, 0)
|
|
|
|
report.compute_data_for_report()
|
|
self.check_report_journal_debit_credit(report, 200, 200)
|
|
|
|
report.move_target = "posted"
|
|
report.compute_data_for_report()
|
|
self.check_report_journal_debit_credit(report, 0, 0)
|
|
|
|
move1.post()
|
|
report.compute_data_for_report()
|
|
self.check_report_journal_debit_credit(report, 100, 100)
|
|
|
|
move2.post()
|
|
report.compute_data_for_report()
|
|
self.check_report_journal_debit_credit(report, 100, 100)
|
|
|
|
move3.post()
|
|
report.compute_data_for_report()
|
|
self.check_report_journal_debit_credit(report, 200, 200)
|
|
|
|
report.date_from = self.previous_fy_date_start
|
|
report.compute_data_for_report()
|
|
self.check_report_journal_debit_credit(report, 300, 300)
|
|
|
|
def test_02_test_taxes_out_invoice(self):
|
|
invoice_values = {
|
|
"journal_id": self.journal_sale.id,
|
|
"partner_id": self.partner_2.id,
|
|
"type": "out_invoice",
|
|
"invoice_line_ids": [
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"quantity": 1.0,
|
|
"price_unit": 100,
|
|
"account_id": self.receivable_account.id,
|
|
"name": "Test",
|
|
"invoice_line_tax_ids": [(6, 0, [self.tax_15_s.id])],
|
|
},
|
|
),
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"quantity": 1.0,
|
|
"price_unit": 100,
|
|
"account_id": self.receivable_account.id,
|
|
"name": "Test",
|
|
"invoice_line_tax_ids": [
|
|
(6, 0, [self.tax_15_s.id, self.tax_20_s.id])
|
|
],
|
|
},
|
|
),
|
|
],
|
|
}
|
|
invoice = self.InvoiceObj.create(invoice_values)
|
|
invoice.action_invoice_open()
|
|
|
|
report = self.ReportJournalLedger.create(
|
|
{
|
|
"date_from": self.fy_date_start,
|
|
"date_to": self.fy_date_end,
|
|
"company_id": self.company.id,
|
|
"journal_ids": [(6, 0, self.journal_sale.ids)],
|
|
}
|
|
)
|
|
report.compute_data_for_report()
|
|
|
|
self.check_report_journal_debit_credit(report, 250, 250)
|
|
self.check_report_journal_debit_credit_taxes(report, 0, 300, 0, 50)
|
|
|
|
def test_03_test_taxes_in_invoice(self):
|
|
invoice_values = {
|
|
"journal_id": self.journal_sale.id,
|
|
"partner_id": self.partner_2.id,
|
|
"type": "in_invoice",
|
|
"invoice_line_ids": [
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"quantity": 1.0,
|
|
"price_unit": 100,
|
|
"account_id": self.payable_account.id,
|
|
"name": "Test",
|
|
"invoice_line_tax_ids": [(6, 0, [self.tax_15_p.id])],
|
|
},
|
|
),
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"quantity": 1.0,
|
|
"price_unit": 100,
|
|
"account_id": self.payable_account.id,
|
|
"name": "Test",
|
|
"invoice_line_tax_ids": [
|
|
(6, 0, [self.tax_15_p.id, self.tax_20_p.id])
|
|
],
|
|
},
|
|
),
|
|
],
|
|
}
|
|
invoice = self.InvoiceObj.create(invoice_values)
|
|
invoice.action_invoice_open()
|
|
|
|
report = self.ReportJournalLedger.create(
|
|
{
|
|
"date_from": self.fy_date_start,
|
|
"date_to": self.fy_date_end,
|
|
"company_id": self.company.id,
|
|
"journal_ids": [(6, 0, self.journal_sale.ids)],
|
|
}
|
|
)
|
|
report.compute_data_for_report()
|
|
|
|
self.check_report_journal_debit_credit(report, 250, 250)
|
|
self.check_report_journal_debit_credit_taxes(report, 300, 0, 50, 0)
|