# Copyright 2011-2016 Akretion # Copyright 2011-2019 Camptocamp SA # Copyright 2013 Savoir-faire Linux # Copyright 2014 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) from collections import namedtuple from odoo import fields, tools from odoo.modules import get_resource_path from odoo.tests import common name_completion_case = namedtuple( "name_completion_case", ["partner_name", "line_label", "should_match"] ) NAMES_COMPLETION_CASES = [ name_completion_case("Acsone", "Line for Acsone SA", True), name_completion_case("Acsone", "Line for Acsone", True), name_completion_case("Acsone", "Acsone for line", True), name_completion_case("acsone", "Acsone for line", True), name_completion_case("Acsone SA", "Line for Acsone SA test", True), name_completion_case("Ac..ne", "Acsone for line", False), name_completion_case("é@|r{}", "Acsone é@|r{} for line", True), name_completion_case("Acsone", "A..one for line", False), name_completion_case("A.one SA", "A.one SA for line", True), name_completion_case( "Acsone SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA test", False ), name_completion_case( "Acsone ([^a-zA-Z0-9 -]) SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA " "test", True, ), name_completion_case( r"Acsone (.^$*+?()[{\| -]\) SA", r"Line for Acsone (.^$*+?()[{\| -]\) " r"SA test", True, ), name_completion_case("Acšone SA", "Line for Acšone SA test", True), ] class BaseCompletion(common.TransactionCase): def setUp(self): super().setUp() tools.convert_file( self.cr, "account", get_resource_path("account", "test", "account_minimal_test.xml"), {}, "init", False, "test", ) self.account_move_obj = self.env["account.move"] self.account_move_line_obj = self.env["account.move.line"] self.company_a = self.browse_ref("base.main_company") self.journal = self.browse_ref("account.bank_journal") self.partner = self.browse_ref("base.res_partner_12") self.account_id = self.ref("account.a_recv") def test_name_completion(self): """Test complete partner_id from statement line label Test the automatic completion of the partner_id based if the name of the partner appears in the statement line label """ self.completion_rule_id = self.ref( "account_move_base_import.bank_statement_completion_rule_3" ) # Create the profile self.journal.write( { "used_for_completion": True, "rule_ids": [(6, 0, [self.completion_rule_id])], } ) # Create a bank statement self.move = self.account_move_obj.create( {"date": fields.Date.today(), "journal_id": self.journal.id} ) for case in NAMES_COMPLETION_CASES: self.partner.write({"name": case.partner_name}) self.move_line = self.account_move_line_obj.with_context( check_move_validity=False ).create( { "account_id": self.account_id, "credit": 1000.0, "name": case.line_label, "move_id": self.move.id, } ) self.assertFalse( self.move_line.partner_id, "Partner_id must be blank before completion" ) self.move.with_context(check_move_validity=False).button_auto_completion() if case.should_match: self.assertEqual( self.partner, self.move_line.partner_id, "Missing expected partner id after completion " "(partner_name: %s, line_name: %s)" % (case.partner_name, case.line_label), ) else: self.assertNotEqual( self.partner, self.move_line.partner_id, "Partner id should be empty after completion " "(partner_name: %s, line_name: %s)" % (case.partner_name, case.line_label), )