From 95d2b24e686e29ec4654760b51a45dca2d756fc6 Mon Sep 17 00:00:00 2001 From: ntsirintanis Date: Wed, 15 Jun 2022 15:30:11 +0200 Subject: [PATCH 1/3] [IMP] also try to fetch sale order by name key, if no invoice is found --- .../models/account_bank_statement_import.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py b/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py index be485fea..ca4ff978 100644 --- a/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py +++ b/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py @@ -20,7 +20,7 @@ class AccountBankStatementImport(models.TransientModel): return stmts_vals def _complete_transaction(self, transaction): - """Try to find partner by searching invoice with reference.""" + """Find partner by searching invoice with reference or so name.""" if transaction.get("partner_id", False): return invoice_model = self.env["account.move"] @@ -36,3 +36,14 @@ class AccountBankStatementImport(models.TransientModel): if invoice: transaction["partner_id"] = invoice.partner_id.id return + # In case there is not an invoice, check sale order + sale_order_name = transaction.get("name") + if sale_order_name: + sale_order = self.env["sale.order"].search( + [("name", "=", sale_order_name)], limit=1 + ) + if not sale_order: + return + transaction["partner_id"] = ( + sale_order.partner_invoice_id.id or sale_order.partner_id.id + ) From ba893a7f55421b05046584a9407aabb8858c8b22 Mon Sep 17 00:00:00 2001 From: ntsirintanis Date: Wed, 22 Jun 2022 15:42:04 +0200 Subject: [PATCH 2/3] [UPD] set as transaction partner the parent record of invoice_address, or the customer if there is a sales order --- .../models/account_bank_statement_import.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py b/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py index ca4ff978..0a37923f 100644 --- a/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py +++ b/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py @@ -34,7 +34,9 @@ class AccountBankStatementImport(models.TransientModel): for fieldname in invoice_fields: invoice = invoice_model.search([(fieldname, "=", value)], limit=1) if invoice: - transaction["partner_id"] = invoice.partner_id.id + # We need parent here because of reconciliation. + # Lines cannot be reconciled if partner is an address + transaction["partner_id"] = invoice.partner_id.parent_id.id return # In case there is not an invoice, check sale order sale_order_name = transaction.get("name") @@ -44,6 +46,5 @@ class AccountBankStatementImport(models.TransientModel): ) if not sale_order: return - transaction["partner_id"] = ( - sale_order.partner_invoice_id.id or sale_order.partner_id.id - ) + # Same as above + transaction["partner_id"] = sale_order.partner_id.id From 6a5d36cac99c349ef1515e1120464c4611e088bc Mon Sep 17 00:00:00 2001 From: ntsirintanis Date: Thu, 30 Jun 2022 16:05:48 +0200 Subject: [PATCH 3/3] [UPD] identify for invoice, sale order, an effective partner --- .../models/account_bank_statement_import.py | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py b/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py index 0a37923f..3d50f888 100644 --- a/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py +++ b/account_bank_statement_import_guess_partner/models/account_bank_statement_import.py @@ -24,9 +24,11 @@ class AccountBankStatementImport(models.TransientModel): if transaction.get("partner_id", False): return invoice_model = self.env["account.move"] + sale_order_model = self.env["sale.order"] invoice = None transaction_keys = ["ref", "name"] invoice_fields = ["invoice_origin", "ref", "name"] + sale_order_fields = ["client_order_ref", "name"] for key in transaction_keys: value = transaction.get(key, False) if not value: @@ -34,17 +36,24 @@ class AccountBankStatementImport(models.TransientModel): for fieldname in invoice_fields: invoice = invoice_model.search([(fieldname, "=", value)], limit=1) if invoice: - # We need parent here because of reconciliation. + # We need a partner of type contact here because of reconciliation. # Lines cannot be reconciled if partner is an address - transaction["partner_id"] = invoice.partner_id.parent_id.id + partner = self._get_effective_partner(invoice.partner_id) + transaction["partner_id"] = partner.id return - # In case there is not an invoice, check sale order - sale_order_name = transaction.get("name") - if sale_order_name: - sale_order = self.env["sale.order"].search( - [("name", "=", sale_order_name)], limit=1 - ) - if not sale_order: - return - # Same as above - transaction["partner_id"] = sale_order.partner_id.id + for fieldname in sale_order_fields: + sale_order = sale_order_model.search([(fieldname, "=", value)], limit=1) + if sale_order: + partner = self._get_effective_partner(sale_order.partner_id) + transaction["partner_id"] = partner.id + return + + def _get_effective_partner(self, partner): + """Find contact partner for invoice, sale order""" + if partner.type == "contact": + return partner + if partner.parent_id.type == "contact": + return partner.parent_id + # If there's no contact, + # return original partner + return partner