Fix account types and add account types support to bnporc, for the account types I could get.
Types were taken from KMyMoney, which is for personal tracking, however some types had no use (cash not something the bank can provide, maybe credit card but it is usually the "coming" field for us). Sources: https://en.wikipedia.org/wiki/Bank_account (but not focused on personal banking) and it's French translation which was more interesting. Other websites for American and Australian banking almost always mentioned three accounts: checking/current, savings/deposits, term/fixed deposits. And some code refactoring.
This commit is contained in:
parent
7e414804c8
commit
42a1fee141
2 changed files with 46 additions and 24 deletions
|
|
@ -29,27 +29,51 @@ __all__ = ['AccountsList']
|
|||
|
||||
|
||||
class AccountsList(BasePage):
|
||||
ACCOUNT_TYPES = {
|
||||
u'Liquidités': Account.TYPE_CHECKING,
|
||||
u'Epargne disponible': Account.TYPE_SAVINGS,
|
||||
u'Titres': Account.TYPE_MARKET,
|
||||
u'Assurance vie': Account.TYPE_DEPOSIT,
|
||||
u'Crédit immobilier': Account.TYPE_LOAN,
|
||||
}
|
||||
|
||||
def on_loaded(self):
|
||||
pass
|
||||
|
||||
def _parse_account_group(self, table):
|
||||
typename = unicode(table.attrib.get('summary', '').replace('Liste des contrats/comptes ', ''))
|
||||
typeid = self.ACCOUNT_TYPES.get(typename, Account.TYPE_UNKNOWN)
|
||||
for tr in table.xpath('.//tr[not(@class)]'):
|
||||
if tr.find('td') is not None and tr.find('td').attrib.get('class', '') == 'typeTitulaire':
|
||||
account = self._parse_account(tr)
|
||||
account.type = typeid
|
||||
yield account
|
||||
|
||||
def _parse_account(self, tr):
|
||||
account = Account()
|
||||
account.id = tr.xpath('.//td[@class="libelleCompte"]/input')[0].attrib['id'][len('libelleCompte'):]
|
||||
account._link_id = account.id
|
||||
if len(str(account.id)) == 23:
|
||||
account.id = str(account.id)[5:21]
|
||||
|
||||
account.label = tr.xpath('.//td[@class="libelleCompte"]/a')[0].text.strip()
|
||||
|
||||
tds = tr.findall('td')
|
||||
account.balance = self._parse_amount(tds[3].find('a'))
|
||||
if tds[4].find('a') is not None:
|
||||
account.coming = self._parse_amount(tds[4].find('a'))
|
||||
else:
|
||||
account.coming = NotAvailable
|
||||
|
||||
return account
|
||||
|
||||
def _parse_amount(self, elem):
|
||||
return float(elem.text.replace('.', '').replace(',', '.').strip(u' \t\u20ac\xa0€\n\r'))
|
||||
|
||||
def get_list(self):
|
||||
l = []
|
||||
for tr in self.document.xpath('//table[@class="tableCompte"]//tr[not(@class)]'):
|
||||
if tr.find('td') is not None and tr.find('td').attrib.get('class', '') == 'typeTitulaire':
|
||||
account = Account()
|
||||
account.id = tr.xpath('.//td[@class="libelleCompte"]/input')[0].attrib['id'][len('libelleCompte'):]
|
||||
account._link_id = account.id
|
||||
if len(str(account.id)) == 23:
|
||||
account.id = str(account.id)[5:21]
|
||||
|
||||
account.label = tr.xpath('.//td[@class="libelleCompte"]/a')[0].text.strip()
|
||||
|
||||
tds = tr.findall('td')
|
||||
account.balance = float(tds[3].find('a').text.replace('.','').replace(',','.').strip(u' \t\u20ac\xa0€\n\r'))
|
||||
if tds[4].find('a') is not None:
|
||||
account.coming = float(tds[4].find('a').text.replace('.','').replace(',','.').strip(u' \t\u20ac\xa0€\n\r'))
|
||||
else:
|
||||
account.coming = NotAvailable
|
||||
for table in self.document.xpath('//table[@class="tableCompte"]'):
|
||||
for account in self._parse_account_group(table):
|
||||
l.append(account)
|
||||
|
||||
if len(l) == 0:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue