diff --git a/modules/lcl/pages.py b/modules/lcl/pages.py
index e892a455..d6d4e2b5 100644
--- a/modules/lcl/pages.py
+++ b/modules/lcl/pages.py
@@ -17,20 +17,24 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
+import re
import base64
-from datetime import date
from decimal import Decimal
-
-from weboob.capabilities.bank import Transaction
-from weboob.capabilities.bank import Account
-from weboob.tools.browser import BasePage, BrowserUnavailable
-from weboob.tools.captcha.virtkeyboard import MappedVirtKeyboard, VirtKeyboardError
from logging import error
import tempfile
import math
import random
+from weboob.capabilities.bank import Account
+from weboob.tools.browser import BasePage, BrowserUnavailable
+from weboob.tools.captcha.virtkeyboard import MappedVirtKeyboard, VirtKeyboardError
+from weboob.tools.capabilities.bank.transactions import FrenchTransaction
+
+
+__all__ = ['SkipPage', 'LoginPage', 'AccountsPage', 'AccountHistoryPage']
+
+
class LCLVirtKeyboard(MappedVirtKeyboard):
symbols={'0': '9da2724133f2221482013151735f033c',
'1': '873ab0087447610841ae1332221be37b',
@@ -155,10 +159,31 @@ class AccountsPage(BasePage):
if '-' in balance:
balance='-'+balance.replace('-', '')
account.balance=Decimal(balance)
+ self.logger.debug('%s Type: %s' % (account.label, account._type))
l.append(account)
return l
+class Transaction(FrenchTransaction):
+ PATTERNS = [(re.compile('^(?PCB) (?PRETRAIT) DU (?P\d+)/(?P\d+)'),
+ FrenchTransaction.TYPE_WITHDRAWAL),
+ (re.compile('^(?PPRLV) (?P.*)'),
+ FrenchTransaction.TYPE_ORDER),
+ (re.compile('^(?PCHQ\.) (?P.*)'),
+ FrenchTransaction.TYPE_CHECK),
+ (re.compile('^(?PRELEVE CB) AU (?P\d+)/(?P\d+)/(?P\d+)'),
+ FrenchTransaction.TYPE_CARD),
+ (re.compile('^(?P(PRELEVEMENT|TELEREGLEMENT|TIP)) (?P.*)'),
+ FrenchTransaction.TYPE_ORDER),
+ (re.compile('^(?PECHEANCEPRET)(?P.*)'), FrenchTransaction.TYPE_LOAN_PAYMENT),
+ (re.compile('^(?PVIR(EMEN)?T? ((RECU|FAVEUR) TIERS|SEPA RECU)?)( /FRM)?(?P.*)'),
+ FrenchTransaction.TYPE_TRANSFER),
+ (re.compile('^(?PREMBOURST)(?P.*)'), FrenchTransaction.TYPE_PAYBACK),
+ (re.compile('^(?PCOMMISSIONS)(?P.*)'), FrenchTransaction.TYPE_BANK),
+ (re.compile('^(?P(?PREMUNERATION).*)'), FrenchTransaction.TYPE_BANK),
+ (re.compile('^(?PREM CHQ) (?P.*)'), FrenchTransaction.TYPE_DEPOSIT),
+ ]
+
class AccountHistoryPage(BasePage):
def get_operations(self,account):
operations = []
@@ -188,26 +213,33 @@ class AccountHistoryPage(BasePage):
if len(tr.findall("th"))!=0 or\
len(tr.findall("td"))<=1:
continue
- operation=Transaction(len(operations))
mntColumn=0
+
+ date = None
+ raw = None
+ credit = ''
+ debit = ''
for td in tr.iter('td'):
value=td.attrib.get('id')
if value is None:
value=td.attrib.get('class');
if value.startswith("date"):
# some transaction are included in a tag
- value=u''.join([txt.strip() for txt in td.itertext()])
- operation.date=date(*reversed([int(x) for x in value.split('/')]))
+ date=u''.join([txt.strip() for txt in td.itertext()])
elif value.startswith("lib") or value.startswith("opLib"):
# misclosed A tag requires to grab text from td
- operation.raw=u''.join([txt.strip() for txt in td.itertext()])
+ raw=u''.join([txt.strip() for txt in td.itertext()])
elif value.startswith("solde") or value.startswith("mnt"):
mntColumn+=1
amount=u''.join([txt.strip() for txt in td.itertext()])
if amount != "":
- amount = Decimal(amount.replace('.','').replace(',','.').replace(u"\u00A0",'').replace(' ',''))
if value.startswith("soldeDeb") or mntColumn==1:
- amount=-amount
- operation.amount=amount
+ debit = amount
+ else:
+ credit = amount
+
+ operation=Transaction(len(operations))
+ operation.parse(date, raw)
+ operation.set_amount(credit, debit)
operations.append(operation)
return operations