From 6714978cd15c555e44d7959f80a73dbb9ae300a4 Mon Sep 17 00:00:00 2001 From: Jerome Berthier Date: Thu, 9 May 2019 18:32:20 +0200 Subject: [PATCH] [banquepopulaire] fix duplicated coming transactions between card accounts If there are several cards attached to a same account, the connector did retrieve all the coming transactions (from all cards) for all cards. --- modules/banquepopulaire/browser.py | 3 ++- modules/banquepopulaire/pages.py | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/banquepopulaire/browser.py b/modules/banquepopulaire/browser.py index df8c1b1397..7bf7783c79 100644 --- a/modules/banquepopulaire/browser.py +++ b/modules/banquepopulaire/browser.py @@ -368,7 +368,8 @@ def get_history_by_receipt(account, coming, sel_tbl1=None): self.location('/cyber/internet/Page.do', params=next_params) if coming and account._coming_count: - for i in range(account._coming_count): + for i in range(account._coming_start, + account._coming_start + account._coming_count): for tr in get_history_by_receipt(account, coming, sel_tbl1=i): yield tr else: diff --git a/modules/banquepopulaire/pages.py b/modules/banquepopulaire/pages.py index c061dabc83..d0defb0959 100644 --- a/modules/banquepopulaire/pages.py +++ b/modules/banquepopulaire/pages.py @@ -682,6 +682,11 @@ def iter_accounts(self, next_pages): self.logger.debug('there are no cards on this page') continue + # We are processing another card, so reset account + if CleanText('.')(cols[0]) and account is not None: + yield account + account = None + id = CleanText(None).filter(cols[self.COL_ID]) if len(id) > 0: if account is not None: @@ -700,7 +705,15 @@ def iter_accounts(self, next_pages): account._coming_params = params.copy() account._coming_params['dialogActionPerformed'] = 'SELECTION_ENCOURS_CARTE' account._coming_params['attribute($SEL_$%s)' % tr.attrib['id'].split('_')[0]] = tr.attrib['id'].split('_', 1)[1] - account._coming_count = len(self.doc.xpath('//table[@id="tbl1"]/tbody/tr/td[5]/span[not(contains(text(), "(1)"))]')) + + # select current row and next rows till parent name is empty + account._coming_start = int(tr.attrib['id'].split('_', 1)[1]) + account._coming_count = 1 + for row in tr.xpath('./following-sibling::tr[./td[5]/span[not(contains(text(), "(1)"))]]'): + if CleanText('./td[2]')(row): + break + account._coming_count += 1 + elif account is None: raise BrokenPageError('Unable to find accounts on cards page') else: -- GitLab