Skip to content
browser.py 3.24 KiB
Newer Older
# -*- coding: utf-8 -*-

# Copyright(C) 2018      Vincent A
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.

from __future__ import unicode_literals

from datetime import timedelta, datetime

from weboob.browser import LoginBrowser, need_login, URL
from weboob.capabilities.bill import Document
from weboob.tools.capabilities.bank.investments import create_french_liquidity

from .pages import (
    LoginPage, HomeLendPage, PortfolioPage, OperationsPage, MAIN_ID, ProfilePage,
)


class BoldenBrowser(LoginBrowser):
    BASEURL = 'https://bolden.fr/'

    login = URL(r'/connexion', LoginPage)
    home_lend = URL(r'/tableau-de-bord-investisseur', HomeLendPage)
    profile = URL(r'/mon-profil', ProfilePage)
    portfolio = URL(r'/InvestorDashboard/GetPortfolio', PortfolioPage)
    operations = URL(r'/InvestorDashboard/GetOperations\?startDate=(?P<start>[\d-]+)&endDate=(?P<end>[\d-]+)', OperationsPage)

    def do_login(self):
        self.login.go()
        self.page.do_login(self.username, self.password)

        if self.login.is_here():
            self.page.check_error()
            assert False, 'should not be on login page'

    @need_login
    def iter_accounts(self):
        self.portfolio.go()
        return self.page.iter_accounts()

    def iter_investments(self):
        self.portfolio.go()
        yield create_french_liquidity(self.page.get_liquidity())
        for inv in self.page.iter_investments():
            yield inv

    @need_login
    def iter_history(self, account):
        if account.id != MAIN_ID:
        end = datetime.now()
        while True:
            start = end - timedelta(days=365)

            self.operations.go(start=start.strftime('%Y-%m-%d'), end=end.strftime('%Y-%m-%d'))
            transactions = list(self.page.iter_history())
            if not transactions:
                break

            last_with_date = None
            for tr in transactions:
                if tr.date is None:
                    tr.date = last_with_date.date
                    tr.label = '%s %s' % (last_with_date.label, tr.label)
                else:
                    last_with_date = tr

                yield tr

            end = start

    @need_login
    def get_profile(self):
        self.profile.go()
        return self.page.get_profile()

    @need_login
    def iter_documents(self):
        for inv in self.iter_investments():
            if inv.label == "Liquidités":
            doc.id = inv.id
            doc.url = inv._docurl
            doc.label = 'Contrat %s' % inv.label
            doc.type = 'other'
            doc.format = 'pdf'
            yield doc