account-reconcile/account_move_base_import/tests/test_invoice.py

207 lines
8.0 KiB
Python

# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
import odoo.tests
from odoo import fields
from odoo.addons.account.tests.common import TestAccountReconciliationCommon
@odoo.tests.tagged("post_install", "-at_install")
class TestInvoice(TestAccountReconciliationCommon):
@classmethod
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.account_move_obj = cls.env["account.move"]
cls.account_move_line_obj = cls.env["account.move.line"]
cls.journal = cls.company_data["default_journal_bank"]
cls.account_id = cls.journal.default_account_id.id
def test_all_completion_rules(self):
# I fill in the field Bank Statement Label in a Partner
self.partner_4 = self.env.ref("base.res_partner_4")
self.partner_4.bank_statement_label = "XXX66Z"
self.assertEqual(self.partner_4.bank_statement_label, "XXX66Z")
self.invoice_for_completion_1 = self._create_invoice(
date_invoice=fields.Date.today(), auto_validate=True
)
self.assertEqual(self.invoice_for_completion_1.state, "posted")
self.assertEqual(
self.invoice_for_completion_1.name,
fields.Date.today().strftime("INV/%Y/00001"),
)
self.demo_invoice_0 = self._create_invoice(
move_type="in_invoice", auto_validate=True
)
self.demo_invoice_0.ref = "T2S12345"
self.refund_for_completion_1 = self._create_invoice(
move_type="out_refund", date_invoice=fields.Date.today(), auto_validate=True
)
self.assertEqual(
self.refund_for_completion_1.name,
fields.Date.today().strftime("RINV/%Y/00001"),
)
# In order to test the banking framework, I first need to create a
# journal
completion_rule_4 = self.env.ref(
"account_move_base_import.bank_statement_completion_rule_4"
)
completion_rule_2 = self.env.ref(
"account_move_base_import.bank_statement_completion_rule_2"
)
completion_rule_3 = self.env.ref(
"account_move_base_import.bank_statement_completion_rule_3"
)
completion_rule_5 = self.env.ref(
"account_move_base_import.bank_statement_completion_rule_5"
)
completion_rules = (
completion_rule_2
| completion_rule_3
| completion_rule_4
| completion_rule_5
)
self.journal.write(
{
"used_for_completion": True,
"rule_ids": [
(4, comp_rule.id, False) for comp_rule in completion_rules
],
}
)
# Now I create a statement. I create statment lines separately because
# I need to find each one by XML id
move_test1 = (
self.env["account.move"]
.with_context(check_move_validity=False)
.create({"name": "Move 2", "journal_id": self.journal.id})
)
# I create a move line for a CI
move_line_ci = (
self.env["account.move.line"]
.with_context(check_move_validity=False)
.create(
{
"name": "\\",
"account_id": self.company_data["default_account_receivable"].id,
"move_id": move_test1.id,
"date_maturity": fields.Date.from_string("2013-12-20"),
"credit": 0.0,
}
)
)
# I create a move line for a SI
move_line_si = (
self.env["account.move.line"]
.with_context(check_move_validity=False)
.create(
{
"name": "\\",
"account_id": self.company_data["default_account_expense"].id,
"move_id": move_test1.id,
"date_maturity": fields.Date.from_string("2013-12-19"),
"debit": 0.0,
}
)
)
# I create a move line for a CR
move_line_cr = (
self.env["account.move.line"]
.with_context(check_move_validity=False)
.create(
{
"name": "\\",
"account_id": self.company_data["default_account_expense"].id,
"move_id": move_test1.id,
"date_maturity": fields.Date.from_string("2013-12-19"),
"debit": 0.0,
}
)
)
# I create a move line for the Partner Name
move_line_partner_name = (
self.env["account.move.line"]
.with_context(check_move_validity=False)
.create(
{
"name": "Test autocompletion based on Partner Name Deco Addict",
"account_id": self.company_data["default_account_receivable"].id,
"move_id": move_test1.id,
"date_maturity": fields.Date.from_string("2013-12-17"),
"credit": 0.0,
}
)
)
# I create a move line for the Partner Label
move_line_partner_label = (
self.env["account.move.line"]
.with_context(check_move_validity=False)
.create(
{
"name": "XXX66Z",
"account_id": self.company_data["default_account_receivable"].id,
"move_id": move_test1.id,
"date_maturity": "2013-12-24",
"debit": 0.0,
}
)
)
# and add the correct name
move_line_ci.with_context(check_move_validity=False).write(
{"name": fields.Date.today().strftime("INV/%Y/00001"), "credit": 210.0}
)
move_line_si.with_context(check_move_validity=False).write(
{"name": "T2S12345", "debit": 65.0}
)
move_line_cr.with_context(check_move_validity=False).write(
{"name": fields.Date.today().strftime("RINV/%Y/00001"), "debit": 210.0}
)
move_line_partner_name.with_context(check_move_validity=False).write(
{"credit": 600.0}
)
move_line_partner_label.with_context(check_move_validity=False).write(
{"debit": 932.4}
)
# I run the auto complete
move_test1.button_auto_completion()
# Now I can check that all is nice and shiny, line 1. I expect the
# Customer Invoice Number to be recognised.
# I Use _ref, because ref conflicts with the field ref of the
# statement line
self.assertEqual(
move_line_ci.partner_id.id,
self.partner_agrolait_id,
msg="Check completion by CI number",
)
# Line 2. I expect the Supplier invoice number to be recognised. The
# supplier invoice was created by the account module demo data, and we
# confirmed it here.
self.assertEqual(
move_line_si.partner_id.id,
self.partner_agrolait_id,
msg="Check completion by SI number",
)
# Line 3. I expect the Customer refund number to be recognised. It
# should be the commercial partner, and not the regular partner.
self.assertEqual(
move_line_cr.partner_id.id,
self.partner_agrolait_id,
msg="Check completion by CR number and commercial partner",
)
# Line 4. I check that the partner name has been recognised.
self.assertEqual(
move_line_partner_name.partner_id.name,
"Deco Addict",
msg="Check completion by partner name",
)
# Line 5. I check that the partner special label has been recognised.
self.partner_4 = self.env.ref("base.res_partner_4")
self.assertEqual(
move_line_partner_label.partner_id,
self.partner_4,
msg="Check completion by partner label",
)