[hellobank] Allow transaction parsing across multiple pages.

This commit is contained in:
Kitof 2015-06-04 09:11:52 +02:00 committed by Romain Bignon
commit 6c12d3d063
2 changed files with 56 additions and 9 deletions

38
modules/hellobank/browser.py Normal file → Executable file
View file

@ -105,16 +105,17 @@ class HelloBank(Browser):
def get_IBAN_from_account(self, account): def get_IBAN_from_account(self, account):
self.go_to_history_page(account) self.go_to_history_page(account)
return self.page.get_IBAN() return self.page.get_IBAN()[5:21]
def go_to_history_page(self,account): def go_to_history_page(self, account, page = None):
if account._link_id is None: if account._link_id is None:
raise NotImplementedError() raise NotImplementedError()
if not self.is_on_page(AccountsList): if (page == None):
self.location('/NSFR?Action=DSP_VGLOBALE') if not self.is_on_page(AccountsList):
self.location('/NSFR?Action=DSP_VGLOBALE')
data = {'gt': 'homepage:basic-theme', data = {'gt': 'homepage:basic-theme',
'externalIAId': 'IAStatements', 'externalIAId': 'IAStatements',
'cboFlowName': 'flow/iastatement', 'cboFlowName': 'flow/iastatement',
'contractId': account._link_id, 'contractId': account._link_id,
@ -123,8 +124,24 @@ class HelloBank(Browser):
'groupSelected':'-2', 'groupSelected':'-2',
'step': 'STAMENTS', 'step': 'STAMENTS',
'pageId': 'releveoperations', 'pageId': 'releveoperations',
'sendEUD': 'true', 'sendEUD': 'true'
} }
else:
data = {'_eventId': 'gotoPage',
'contractId': self.page.get_IBAN(),
'groupId': '-2',
'pageId': 'releveoperations',
'operations.pageNumber': page,
'categorisationInProgress': '',
'newCategoryId': '',
'operations.objectsPerPage': '30',
'_flowExecutionKey': self.page.get_flowExecutionKey(),
}
for i in range(0,30):
data.update({"operations.list[" + str(i) + "].extendedAttributes['audience']": 'particulier',
"_operations.list[" + str(i) + "].checkedOff": 'on',
"_operations.list[" + str(i) + "].selectedForCategorization": 'on'})
self.location('/udc', urllib.urlencode(data)) self.location('/udc', urllib.urlencode(data))
def go_to_coming_operations_page(self,account): def go_to_coming_operations_page(self,account):
@ -149,7 +166,14 @@ class HelloBank(Browser):
def iter_history(self, account): def iter_history(self, account):
self.go_to_history_page(account) self.go_to_history_page(account)
return self.page.iter_operations() for tr in self.page.get_operations():
yield tr
next_page = self.page.get_next_page()
while( next_page > 1) :
self.go_to_history_page(account, next_page)
for tr in self.page.get_operations():
yield tr
next_page = self.page.get_next_page()
def iter_coming_operations(self, account): def iter_coming_operations(self, account):
self.go_to_coming_operations_page(account) self.go_to_coming_operations_page(account)

27
modules/hellobank/perso/transactions.py Normal file → Executable file
View file

@ -46,7 +46,7 @@ class Transaction(FrenchTransaction):
class AccountHistory(Page): class AccountHistory(Page):
def iter_operations(self): def get_operations(self):
for tr in self.document.xpath('//table[@id="tableCompte"]//tr'): for tr in self.document.xpath('//table[@id="tableCompte"]//tr'):
if len(tr.xpath('td[@class="debit"]')) == 0: if len(tr.xpath('td[@class="debit"]')) == 0:
continue continue
@ -86,8 +86,31 @@ class AccountHistory(Page):
operation.set_amount(tds[2].text) operation.set_amount(tds[2].text)
yield operation yield operation
def get_next_page(self):
others = self.document.xpath('//span[@class="OthersPage"]')
current = self.document.xpath('//span[@class="currentPage"]/strong')
if len(current) < 1:
return None
current = current[0].text
for other in others:
if (other.text <= current):
continue
else:
return other.text
return None
def get_flowExecutionKey(self):
flowExecutionKey = self.document.xpath('//input[@name="_flowExecutionKey"]/@value')
if len(flowExecutionKey) > 0:
return flowExecutionKey[0]
else:
return None
def get_IBAN(self): def get_IBAN(self):
return self.document.xpath('//a[@class="lien_perso_libelle"]')[0].attrib['id'][10:26] return self.document.xpath('//a[@class="lien_perso_libelle"]')[0].attrib['id'][5:28]
class AccountComing(AccountHistory): class AccountComing(AccountHistory):