Browse Source

adapt code to the new paypal format

error when several line defined in currency != company currency
handel utf-8 file
handel csv with quotechar "
skip BOM character in utf-8
pull/161/head
Mourad Elhadj Mimoune 9 years ago
committed by cubells
parent
commit
deb386cb12
  1. 35
      account_bank_statement_import_paypal/account_bank_statement_import_paypal.py

35
account_bank_statement_import_paypal/account_bank_statement_import_paypal.py

@ -37,7 +37,7 @@ class AccountBankStatementImport(models.TransientModel):
@api.model @api.model
def _prepare_paypal_encoding(self): def _prepare_paypal_encoding(self):
'''This method is designed to be inherited''' '''This method is designed to be inherited'''
return 'latin1'
return 'utf-8'
@api.model @api.model
def _prepare_paypal_date_format(self): def _prepare_paypal_date_format(self):
@ -47,7 +47,8 @@ class AccountBankStatementImport(models.TransientModel):
@api.model @api.model
def _valid_paypal_line(self, line): def _valid_paypal_line(self, line):
'''This method is designed to be inherited''' '''This method is designed to be inherited'''
if line[5].startswith('Termin') or line[5].startswith('Rembours'):
col_name = line[5].replace('"','')
if col_name.startswith('Termin') or col_name.startswith('Rembours'):
return True return True
else: else:
return False return False
@ -63,11 +64,16 @@ class AccountBankStatementImport(models.TransientModel):
@api.model @api.model
def _check_paypal(self, data_file): def _check_paypal(self, data_file):
'''This method is designed to be inherited''' '''This method is designed to be inherited'''
return data_file.strip().startswith('Date,')
paypal = data_file.strip().startswith('Date,')
if not paypal:
paypal = data_file.strip().startswith('"Date",')
return paypal
@api.model @api.model
def _parse_file(self, data_file): def _parse_file(self, data_file):
""" Import a file in Paypal CSV format""" """ Import a file in Paypal CSV format"""
data_file = data_file.replace("\xef\xbb\xbf", "")
paypal = self._check_paypal(data_file) paypal = self._check_paypal(data_file)
if not paypal: if not paypal:
return super(AccountBankStatementImport, self)._parse_file( return super(AccountBankStatementImport, self)._parse_file(
@ -105,8 +111,8 @@ class AccountBankStatementImport(models.TransientModel):
'owner_name': line[3], 'owner_name': line[3],
'amount': line[7], 'amount': line[7],
'commission': line[8], 'commission': line[8],
'balance': line[34],
'transac_ref': line[30],
'balance': line[27],
'transac_ref': line[23],
'ref': line[12], 'ref': line[12],
'line_nr': i, 'line_nr': i,
} }
@ -136,7 +142,7 @@ class AccountBankStatementImport(models.TransientModel):
other_currency_line = {} other_currency_line = {}
for wline in raw_lines: for wline in raw_lines:
if company_currency_name != wline['currency']: if company_currency_name != wline['currency']:
if not wline['transac_ref'] and not other_currency_line:
if wline['transac_ref'] and not other_currency_line:
currencies = self.env['res.currency'].search( currencies = self.env['res.currency'].search(
[('name', '=', wline['currency'])]) [('name', '=', wline['currency'])])
if not currencies: if not currencies:
@ -149,8 +155,10 @@ class AccountBankStatementImport(models.TransientModel):
'currency': wline['currency'], 'currency': wline['currency'],
'name': wline['name'], 'name': wline['name'],
'owner_name': wline['owner_name'], 'owner_name': wline['owner_name'],
}
if wline['transac_ref'] and other_currency_line:
'transac_ref': wline['transac_ref'],
}
if other_currency_line and not wline['transac_ref']:
assert ( assert (
wline['currency'] == other_currency_line['currency']),\ wline['currency'] == other_currency_line['currency']),\
'WRONG currency' 'WRONG currency'
@ -158,11 +166,16 @@ class AccountBankStatementImport(models.TransientModel):
wline['amount'] == wline['amount'] ==
other_currency_line['amount_currency'] * -1),\ other_currency_line['amount_currency'] * -1),\
'WRONG amount' 'WRONG amount'
other_currency_line['transac_ref'] = wline['transac_ref']
if (
other_currency_line and
wline['ref'] ==
other_currency_line['transac_ref']):
# reset other_currency_line
other_currency_line = {}
else: else:
if ( if (
other_currency_line
and wline['transac_ref'] ==
other_currency_line and
wline['transac_ref'] ==
other_currency_line['transac_ref']): other_currency_line['transac_ref']):
wline.update(other_currency_line) wline.update(other_currency_line)
# reset other_currency_line # reset other_currency_line

Loading…
Cancel
Save