boursorama: parse categories and date

This commit is contained in:
Gabriel Kerneis 2012-04-01 14:30:13 +02:00
commit ee59891f62
2 changed files with 21 additions and 10 deletions

View file

@ -21,13 +21,28 @@
from decimal import Decimal from decimal import Decimal
from datetime import date from datetime import date
import re
from weboob.tools.browser import BasePage from weboob.tools.browser import BasePage
from weboob.capabilities.bank import Transaction from weboob.capabilities.bank import Transaction
from weboob.tools.capabilities.bank.transactions import FrenchTransaction
__all__ = ['AccountHistory'] __all__ = ['AccountHistory']
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile(u'^CHQ\. (?P<text>.*)'), FrenchTransaction.TYPE_CHECK),
(re.compile('^(ACHAT|PAIEMENT) CARTE (?P<dd>\d{2})(?P<mm>\d{2})(?P<yy>\d{2}) (?P<text>.*)'),
FrenchTransaction.TYPE_CARD),
(re.compile('^(PRLV|TIP) (?P<text>.*)'),
FrenchTransaction.TYPE_ORDER),
(re.compile('^RETRAIT DAB (?P<dd>\d{2})(?P<mm>\d{2})(?P<yy>\d{2}) (?P<text>.*)'),
FrenchTransaction.TYPE_WITHDRAWAL),
(re.compile('^VIR( SEPA)? (?P<text>.*)'), FrenchTransaction.TYPE_TRANSFER),
(re.compile('^AVOIR (?P<dd>\d{2})(?P<mm>\d{2})(?P<yy>\d{2}) (?P<text>.*)'), FrenchTransaction.TYPE_PAYBACK),
(re.compile('^REM CHQ (?P<text>.*)'), FrenchTransaction.TYPE_DEPOSIT),
]
class AccountHistory(BasePage): class AccountHistory(BasePage):
@ -51,18 +66,14 @@ class AccountHistory(BasePage):
category = labeldiv.attrib.get('title', '') category = labeldiv.attrib.get('title', '')
useless, sep, category = [part.strip() for part in category.partition(':')] useless, sep, category = [part.strip() for part in category.partition(':')]
amount = tds[3].text credit = tds[3].text or ""
if amount == None: debit = tds[4].text or ""
amount = tds[4].text
amount = amount.strip(u' \n\t\x80').replace(' ', '').replace(',', '.')
# if we don't have exactly one '.', this is not a Decimal try the next
operation = Transaction(len(self.operations)) operation = Transaction(len(self.operations))
operation.amount = Decimal(amount) operation.parse(date=d, raw=label)
operation.set_amount(credit, debit)
operation.date = d
operation.label = label
operation.category = category operation.category = category
self.operations.append(operation) self.operations.append(operation)
def get_operations(self): def get_operations(self):

View file

@ -40,7 +40,7 @@ class FrenchTransaction(Transaction):
Clean a string containing an amount. Clean a string containing an amount.
""" """
return text.replace(' ', '').replace('.','') \ return text.replace(' ', '').replace('.','') \
.replace(',','.').strip(u' \t\u20ac\xa0\n\r') .replace(',','.').strip(u' \t\u20ac\xa0\x80\n\r')
def set_amount(self, credit='', debit=''): def set_amount(self, credit='', debit=''):
""" """