handling new website account for individual

This commit is contained in:
Vincent Paredes 2014-11-24 18:26:40 +01:00 committed by Romain Bignon
commit bf5dd493a8
2 changed files with 46 additions and 5 deletions

View file

@ -20,7 +20,7 @@
from weboob.deprecated.browser import Browser, BrowserIncorrectPassword from weboob.deprecated.browser import Browser, BrowserIncorrectPassword
from .pages import LoginPage, AccountPage, DownloadHistoryPage, LastDownloadHistoryPage, SubmitPage, HistoryParser, UselessPage, HistoryPage, CSVAlreadyAsked from .pages import LoginPage, AccountPage, DownloadHistoryPage, LastDownloadHistoryPage, SubmitPage, HistoryParser, UselessPage, HistoryPage, CSVAlreadyAsked
from .newpages import NewHomePage, NewAccountPage, NewHistoryPage from .newpages import NewHomePage, NewAccountPage, NewProHistoryPage, NewPartHistoryPage
import datetime import datetime
@ -45,8 +45,9 @@ class Paypal(Browser):
'/cgi-bin/webscr\?cmd=_history-download-recent-submit&dispatch=[a-z0-9]+$': (SubmitPage, HistoryParser()), '/cgi-bin/webscr\?cmd=_history-download-recent-submit&dispatch=[a-z0-9]+$': (SubmitPage, HistoryParser()),
'https://www.paypal.com/webapps/business/\?nav=0.0': NewHomePage, 'https://www.paypal.com/webapps/business/\?nav=0.0': NewHomePage,
'https://www.paypal.com/businessexp/money': NewAccountPage, 'https://www.paypal.com/businessexp/money': NewAccountPage,
'https://www.paypal.com/webapps/business/activity\?.*': NewHistoryPage, 'https://www.paypal.com/webapps/business/activity\?.*': NewProHistoryPage,
'https://www.paypal.com/myaccount/': NewHistoryPage, 'https://www.paypal.com/myaccount/activity/.*': (NewPartHistoryPage, 'json'),
'https://www.paypal.com/myaccount/': NewProHistoryPage,
} }
DEFAULT_TIMEOUT = 30 # CSV export is slow DEFAULT_TIMEOUT = 30 # CSV export is slow
@ -60,6 +61,11 @@ class Paypal(Browser):
self.website = "old" self.website = "old"
else: else:
self.website = "new" self.website = "new"
self.location('/webapps/business/?nav=0.0')
if self.is_on_page(NewHomePage):
self.account_type = "pro"
else:
self.account_type = "perso"
def home(self): def home(self):
self.location('https://' + self.DOMAIN + '/en/cgi-bin/webscr?cmd=_login-run') self.location('https://' + self.DOMAIN + '/en/cgi-bin/webscr?cmd=_login-run')
@ -186,7 +192,10 @@ class Paypal(Browser):
e = end.strftime('%d/%m/%Y') e = end.strftime('%d/%m/%Y')
#Settings a big magic number so we get all transaction for the period #Settings a big magic number so we get all transaction for the period
LIMIT = '9999' LIMIT = '9999'
self.location('/webapps/business/activity?fromdate=' + s + '&todate=' + e + '&transactiontype=ALL_TRANSACTIONS&currency=ALL_TRANSACTIONS_CURRENCY&limit=' + LIMIT) if self.account_type == "pro":
self.location('/webapps/business/activity?fromdate=' + s + '&todate=' + e + '&transactiontype=ALL_TRANSACTIONS&currency=ALL_TRANSACTIONS_CURRENCY&limit=' + LIMIT)
else:
self.location('/myaccount/activity/filter?start=' + s + '&end=' + e + '&limit=' + LIMIT)
return self.page.transaction_left() return self.page.transaction_left()
def download_last_history(self, account): def download_last_history(self, account):

View file

@ -51,7 +51,7 @@ class NewAccountPage(Page):
return accounts return accounts
class NewHistoryPage(Page): class NewProHistoryPage(Page):
def iter_transactions(self, account): def iter_transactions(self, account):
for trans in self.parse(): for trans in self.parse():
@ -75,3 +75,35 @@ class NewHistoryPage(Page):
def transaction_left(self): def transaction_left(self):
return (len(self.document.xpath('//div[@class="no-records"]')) == 0) return (len(self.document.xpath('//div[@class="no-records"]')) == 0)
class NewPartHistoryPage(Page):
def transaction_left(self):
return (len(self.document['data']['activity']['COMPLETED']) > 0 or len(self.document['data']['activity']['PENDING']) > 0)
def iter_transactions(self, account):
for trans in self.parse():
if trans._currency == account.currency:
yield trans
def parse(self):
transactions = list()
for status in ['PENDING', 'COMPLETED']:
transac = self.document['data']['activity'][status]
for t in transac:
transactions.append(self.parse_transaction(t))
transactions.sort(key=lambda tr: tr.rdate, reverse=True)
for t in transactions:
yield t
def parse_transaction(self, transaction):
t = FrenchTransaction(transaction['activityId'])
date = parse_french_date(transaction['date'])
raw = transaction['counterparty']
t.parse(date=date, raw=raw)
amount = transaction['displayAmount']
t.set_amount(amount)
t._currency = transaction['currencyCode']
return t