diff --git a/modules/caissedepargne/cenet/browser.py b/modules/caissedepargne/cenet/browser.py index 25173c7f8ece75adac6bb31a49c06f586673111e..b721b2852ea4092036f55ea6ee86db8de0e1e632 100644 --- a/modules/caissedepargne/cenet/browser.py +++ b/modules/caissedepargne/cenet/browser.py @@ -23,6 +23,7 @@ from weboob.browser.url import URL from weboob.browser.exceptions import ClientError from weboob.exceptions import BrowserIncorrectPassword, BrowserUnavailable +from weboob.capabilities.base import find_object from weboob.tools.capabilities.bank.transactions import sorted_transactions, FrenchTransaction from .pages import ( @@ -150,12 +151,20 @@ def get_history(self, account): items = [] self.cenet_account_history.go(data=json.dumps(data), headers=headers) + # there might be some duplicate transactions regarding the card type ones + # because some requests lead to the same transaction list + # even with different parameters/data in the request + card_tr_list = [] while True: data_out = self.page.doc['DonneesSortie'] for tr in self.page.get_history(): items.append(tr) if tr.type is FrenchTransaction.TYPE_CARD_SUMMARY: + if find_object(card_tr_list, label=tr.label, amount=tr.amount, raw=tr.raw, date=tr.date, rdate=tr.rdate): + self.logger.warning('Duplicate transaction: %s' % tr) + continue + card_tr_list.append(tr) tr.deleted = True tr_dict = [tr_dict for tr_dict in data_out if tr_dict['Libelle'] == tr.label] donneesEntree = {} @@ -178,10 +187,9 @@ def get_history(self, account): data['filtreEntree'] = json.dumps({ 'Offset': offset, }) - self.cenet_account_history.go(data=json.dumps(data), headers=headers) - return items + return sorted_transactions(items) @need_login def get_coming(self, account): diff --git a/modules/caissedepargne/cenet/pages.py b/modules/caissedepargne/cenet/pages.py index 7deda862fc9e1edabe9319989056222a005fe784..5a62d4dd3f99de4f2fdfea16cbae6799f9cfb56b 100644 --- a/modules/caissedepargne/cenet/pages.py +++ b/modules/caissedepargne/cenet/pages.py @@ -184,11 +184,18 @@ class get_history(DictElement): class item(ItemElement): klass = Transaction - obj_raw = Format('%s %s', Dict('Libelle'), Dict('Libelle2')) obj_label = CleanText(Dict('Libelle')) obj_date = Date(Dict('DateGroupImputation'), dayfirst=True) obj_type = Transaction.TYPE_DEFERRED_CARD + def obj_raw(self): + label = Dict('Libelle')(self) + label2 = Dict('Libelle2')(self) + if label2 and label2 != 'None': + return '%s %s' % (label, label2) + else: + return label + def obj_rdate(self): rdate = re.search('(FACT\s)(\d{6})', Field('label')(self)) if rdate.group(2):