diff --git a/addons/account/models/account_reconcile_model.py b/addons/account/models/account_reconcile_model.py index 5fbb039ed13..016fbf12c68 100644 --- a/addons/account/models/account_reconcile_model.py +++ b/addons/account/models/account_reconcile_model.py @@ -626,6 +626,15 @@ class AccountReconcileModel(models.Model): ) ) ) + OR + ( + /* We also match statement lines without partners with amls + whose partner's name's parts (splitting on space) are all present + within the payment_ref, in any order, with any characters between them. */ + + aml_partner.name IS NOT NULL + AND st_line.payment_ref ~* concat('(?=.*', array_to_string(regexp_split_to_array(lower(aml_partner.name), ' '),'.*)(?=.*'), '.*)') + ) """ st_lines_queries.append(r"st_line.id = %s AND (%s)" % (st_line.id, st_line_subquery)) diff --git a/addons/account/tests/test_reconciliation_matching_rules.py b/addons/account/tests/test_reconciliation_matching_rules.py index e5ebb776ad3..3688d47cfb4 100644 --- a/addons/account/tests/test_reconciliation_matching_rules.py +++ b/addons/account/tests/test_reconciliation_matching_rules.py @@ -499,3 +499,15 @@ class TestReconciliationMatchingRules(AccountTestInvoicingCommon): self.bank_line_1.id: {'aml_ids': [self.invoice_line_1.id], 'model': self.rule_1}, self.bank_line_2.id: {'aml_ids': []}, }, self.bank_st) + + def test_partner_name_in_communication(self): + self.invoice_line_1.partner_id.write({'name': "Archibald Haddock"}) + self.bank_line_1.write({'partner_id': None, 'payment_ref': '1234//HADDOCK-Archibald'}) + self.bank_line_2.write({'partner_id': None}) + self.rule_1.write({'match_partner': False}) + + # bank_line_1 should match, as its communication contains the invoice's partner name + self._check_statement_matching(self.rule_1, { + self.bank_line_1.id: {'aml_ids': [self.invoice_line_1.id], 'model': self.rule_1}, + self.bank_line_2.id: {'aml_ids': []}, + }, self.bank_st) \ No newline at end of file