diff --git a/modules/groupama/browser.py b/modules/groupama/browser.py index d227a66f231835baff5d7b62c3134d439c96afe2..b06b74fa58523a4d7c53adbcc233bab86c718e1b 100644 --- a/modules/groupama/browser.py +++ b/modules/groupama/browser.py @@ -17,13 +17,14 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . +import re from weboob.browser import LoginBrowser, URL, need_login from weboob.exceptions import BrowserIncorrectPassword from weboob.capabilities.bank import Account from weboob.capabilities.base import empty -from .pages import LoginPage, AccountsPage, TransactionsPage, AVAccountPage, AVHistoryPage, FormPage, IbanPage +from .pages import LoginPage, AccountsPage, TransactionsPage, AVAccountPage, AVHistoryPage, FormPage, IbanPage, AvJPage __all__ = ['GroupamaBrowser'] @@ -39,8 +40,10 @@ class GroupamaBrowser(LoginBrowser): accounts = URL('/wps/myportal/TableauDeBord', AccountsPage) transactions = URL('/wps/myportal/!ut', TransactionsPage) av_account_form = URL('/wps/myportal/assurancevie/', FormPage) - av_account = URL('https://secure-rivage.(ganassurances|ganpatrimoine|groupama).fr/contratVie.rivage.syntheseContratEparUc.gsi', AVAccountPage) + av_account = URL('https://secure-rivage.(ganassurances|ganpatrimoine|groupama).fr/contratVie.rivage.syntheseContratEparUc.gsi', + '/front/vie/epargne/contrat/(.*)', AVAccountPage) av_history = URL('https://secure-rivage.(?P.*).fr/contratVie.rivage.mesOperations.gsi', AVHistoryPage) + av_secondary = URL('/api/ecli/vie/contrats/(?P.*)', AvJPage) def __init__(self, *args, **kwargs): super(GroupamaBrowser, self).__init__(*args, **kwargs) @@ -68,6 +71,13 @@ def get_accounts_list(self, balance=True, need_iban=False): if self.av_account_form.is_here(): self.page.av_account_form() account.balance, account.currency = self.page.get_av_balance() + # New page where some AV are stored + elif "front/vie/" in account._link: + link = re.search('contrat\/(.+)-Groupama', account._link) + if link: + self.av_secondary.go(id_contrat=link.group(1)) + account.balance, account.currency = self.page.get_av_balance() + self.accounts.stay_or_go() if account.balance or not balance: if account.type != Account.TYPE_LIFE_INSURANCE and need_iban: diff --git a/modules/groupama/pages.py b/modules/groupama/pages.py index fbf99ad762bf25138517d8e8f88f597a4bf93df0..b04b426bb90bd04e04951388bcd64f14cfa61b13 100644 --- a/modules/groupama/pages.py +++ b/modules/groupama/pages.py @@ -25,7 +25,7 @@ from decimal import Decimal -from weboob.browser.pages import HTMLPage, pagination, LoggedPage, FormNotFound +from weboob.browser.pages import HTMLPage, pagination, LoggedPage, FormNotFound, JsonPage from weboob.browser.elements import method, TableElement, ItemElement from weboob.browser.filters.standard import Env, CleanDecimal, CleanText, Date, Regexp, Eval from weboob.browser.filters.html import Attr, Link, TableCell @@ -33,6 +33,7 @@ from weboob.capabilities.bank import Account, Investment from weboob.capabilities.base import NotAvailable from weboob.tools.capabilities.bank.transactions import FrenchTransaction +from weboob.browser.filters.json import Dict class LoginPage(HTMLPage): @@ -217,6 +218,13 @@ def condition(self): obj_code_type = Investment.CODE_TYPE_ISIN +class AvJPage(LoggedPage, JsonPage): + def get_av_balance(self): + balance = CleanDecimal(Dict('montant'))(self.doc) + currency = "EUR" + return balance, currency + + class AVHistoryPage(LoggedPage, HTMLPage): @method class get_av_history(TableElement):