sgpe: Support pagination

This commit is contained in:
Laurent Bachelier 2013-07-22 18:23:12 +02:00
commit d3f9ce1fe2
2 changed files with 26 additions and 6 deletions

View file

@ -68,8 +68,12 @@ class SGPEBrowser(BaseBrowser):
def accounts(self):
self.location('/Pgn/NavigationServlet?PageID=SoldeV3&MenuID=%s&Classeur=1&NumeroPage=1' % self.MENUID)
def history(self, _id):
self.location('/Pgn/NavigationServlet?PageID=ReleveCompteV3&MenuID=%s&Classeur=1&Rib=%s&NumeroPage=1' % (self.MENUID, _id))
def history(self, _id, page=1):
if page > 1:
pgadd = '&page_numero_page_courante=%s' % page
else:
pgadd = ''
self.location('/Pgn/NavigationServlet?PageID=ReleveCompteV3&MenuID=%s&Classeur=1&Rib=%s&NumeroPage=1%s' % (self.MENUID, _id, pgadd))
def get_accounts_list(self):
if not self.is_on_page(AccountsPage):
@ -83,10 +87,16 @@ class SGPEBrowser(BaseBrowser):
yield a
def iter_history(self, account):
self.history(account.id)
assert self.is_on_page(HistoryPage)
for transaction in self.page.iter_transactions(account):
yield transaction
page = 1
while page:
self.history(account.id, page)
assert self.is_on_page(HistoryPage)
for transaction in self.page.iter_transactions(account):
yield transaction
if self.page.has_next():
page += 1
else:
page = False
class SGProfessionalBrowser(SGPEBrowser):

View file

@ -111,6 +111,9 @@ class HistoryPage(SGPEPage):
def iter_transactions(self, account):
table = self.parser.select(self.document.getroot(), '#tab-corps', 1)
for i, tr in enumerate(self.parser.select(table, 'tr', 'many')):
# td colspan=5
if len(self.parser.select(tr, 'td')) == 1:
continue
tddate, tdlabel, tddebit, tdcredit, tdval, tdbal = [td.text_content().strip()
for td
in self.parser.select(tr, 'td', 4)]
@ -129,3 +132,10 @@ class HistoryPage(SGPEPage):
t.parse(date, l1 + ' ' + l2)
t._val = val # FIXME is it rdate? date?
yield t
def has_next(self):
for n in self.parser.select(self.document.getroot(), '#numPageBloc'):
cur = int(self.parser.select(n, '#numPage', 1).value)
for end in self.parser.select(n, '.contenu3-lien'):
return int(end.text.replace('/', '')) > cur
return False