From 61dfc90ba45cb4f072a05b0ef79715219ff65e43 Mon Sep 17 00:00:00 2001 From: Sylvie Ye Date: Fri, 22 Feb 2019 14:19:13 +0100 Subject: [PATCH] [bnp] avoid recipient with same iban recipient id can change, avoid to retrieve duplicate recipient to not search recipient by id in transfer and search by iban --- modules/bnporc/module.py | 6 ++++-- modules/bnporc/pp/browser.py | 11 +++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/bnporc/module.py b/modules/bnporc/module.py index 6f99addd51..da2e194a6c 100644 --- a/modules/bnporc/module.py +++ b/modules/bnporc/module.py @@ -30,7 +30,7 @@ from weboob.capabilities.messages import CapMessages, Thread from weboob.capabilities.contact import CapContact from weboob.capabilities.profile import CapProfile -from weboob.capabilities.base import find_object +from weboob.capabilities.base import find_object, strict_find_object from weboob.tools.backend import Module, BackendConfig from weboob.tools.value import ValueBackendPassword, Value, ValueBool @@ -119,7 +119,9 @@ def init_transfer(self, transfer, **params): else: account = find_object(self.iter_accounts(), id=transfer.account_id, error=AccountNotFound) - recipient = find_object(self.iter_transfer_recipients(account.id), id=transfer.recipient_id, error=RecipientNotFound) + recipient = strict_find_object(self.iter_transfer_recipients(account.id), iban=transfer.recipient_iban) + if not recipient: + recipient = strict_find_object(self.iter_transfer_recipients(account.id), id=transfer.recipient_id, error=RecipientNotFound) assert account.id.isdigit() # quantize to show 2 decimals. diff --git a/modules/bnporc/pp/browser.py b/modules/bnporc/pp/browser.py index 87aabecad7..20332e94ee 100644 --- a/modules/bnporc/pp/browser.py +++ b/modules/bnporc/pp/browser.py @@ -327,11 +327,18 @@ def iter_recipients(self, origin_account_id): except TransferError: return + # avoid recipient with same iban + seen = set() for recipient in self.page.transferable_on(origin_account_ibancrypte=origin_account_id): - yield recipient + if recipient.iban not in seen: + seen.add(recipient.iban) + yield recipient + if self.page.can_transfer_to_recipients(origin_account_id): for recipient in self.recipients.go(data=JSON({'type': 'TOUS'})).iter_recipients(): - yield recipient + if recipient.iban not in seen: + seen.add(recipient.iban) + yield recipient @need_login def new_recipient(self, recipient, **params): -- GitLab