From d49d1e44379c40dd8ef934894b80d9ac74ca3ef7 Mon Sep 17 00:00:00 2001 From: oco-odoo Date: Fri, 12 Jun 2020 14:57:59 +0000 Subject: [PATCH] [IMP] account: reconciliation models: match amls whose partner's name is contained in payment reference Invoice matching rules now also match account.move.lines based on their partner's name : if the statement line's payment reference contains the first name and last name of its patner (in any order, at any position), we match the move line. closes odoo/odoo#50083 Related: odoo/enterprise#10166 Related: odoo/upgrade#1317 Signed-off-by: Quentin De Paoli (qdp) --- addons/account/models/account_reconcile_model.py | 9 +++++++++ .../tests/test_reconciliation_matching_rules.py | 12 ++++++++++++ 2 files changed, 21 insertions(+) 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