mirror of
https://github.com/OCA/account-reconcile.git
synced 2025-01-20 12:27:39 +02:00
[IMP] return error messages
This commit is contained in:
@@ -17,8 +17,8 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
|
from openerp.osv.osv import except_osv
|
||||||
import tempfile
|
import tempfile
|
||||||
import datetime
|
import datetime
|
||||||
from parser import BankStatementImportParser
|
from parser import BankStatementImportParser
|
||||||
@@ -34,7 +34,8 @@ class FileParser(BankStatementImportParser):
|
|||||||
Generic abstract class for defining parser for .csv or .xls file format.
|
Generic abstract class for defining parser for .csv or .xls file format.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, parse_name, keys_to_validate=[], ftype='csv', convertion_dict=None, header=None, *args, **kwargs):
|
def __init__(self, parse_name, keys_to_validate=[], ftype='csv', convertion_dict=None,
|
||||||
|
header=None, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
:param char: parse_name : The name of the parser
|
:param char: parse_name : The name of the parser
|
||||||
:param list: keys_to_validate : contain the key that need to be present in the file
|
:param list: keys_to_validate : contain the key that need to be present in the file
|
||||||
@@ -54,7 +55,8 @@ class FileParser(BankStatementImportParser):
|
|||||||
if ftype in ('csv', 'xls'):
|
if ftype in ('csv', 'xls'):
|
||||||
self.ftype = ftype
|
self.ftype = ftype
|
||||||
else:
|
else:
|
||||||
raise Exception(_('Invalide file type %s. please use csv or xls') % (ftype))
|
raise except_osv(_('User Error'),
|
||||||
|
_('Invalide file type %s. please use csv or xls') % (ftype))
|
||||||
self.keys_to_validate = keys_to_validate
|
self.keys_to_validate = keys_to_validate
|
||||||
self.convertion_dict = convertion_dict
|
self.convertion_dict = convertion_dict
|
||||||
self.fieldnames = header
|
self.fieldnames = header
|
||||||
@@ -99,7 +101,8 @@ class FileParser(BankStatementImportParser):
|
|||||||
parsed_cols = self.result_row_list[0].keys()
|
parsed_cols = self.result_row_list[0].keys()
|
||||||
for col in self.keys_to_validate:
|
for col in self.keys_to_validate:
|
||||||
if col not in parsed_cols:
|
if col not in parsed_cols:
|
||||||
raise Exception(_('Column %s not present in file') % (col))
|
raise except_osv(_('Invalid data'),
|
||||||
|
_('Column %s not present in file') % (col))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _post(self, *args, **kwargs):
|
def _post(self, *args, **kwargs):
|
||||||
@@ -149,11 +152,27 @@ class FileParser(BankStatementImportParser):
|
|||||||
for line in result_set:
|
for line in result_set:
|
||||||
for rule in conversion_rules:
|
for rule in conversion_rules:
|
||||||
if conversion_rules[rule] == datetime.datetime:
|
if conversion_rules[rule] == datetime.datetime:
|
||||||
date_string = line[rule].split(' ')[0]
|
try:
|
||||||
line[rule] = datetime.datetime.strptime(date_string,
|
date_string = line[rule].split(' ')[0]
|
||||||
'%Y-%m-%d')
|
line[rule] = datetime.datetime.strptime(date_string,
|
||||||
|
'%Y-%m-%d')
|
||||||
|
except ValueError, err:
|
||||||
|
raise except_osv(_('Invalid data'),
|
||||||
|
_("Date format is not valid."
|
||||||
|
" It should be YYYY-MM-DD for column: %s"
|
||||||
|
" value: %s"
|
||||||
|
" \n line: %s \n Detail: %s") % (rule, line[rule],
|
||||||
|
line, repr(err)))
|
||||||
else:
|
else:
|
||||||
line[rule] = conversion_rules[rule](line[rule])
|
try:
|
||||||
|
line[rule] = conversion_rules[rule](line[rule])
|
||||||
|
except Exception, err:
|
||||||
|
raise except_osv(_('Invalid data'),
|
||||||
|
_("Value %s of column % is not valid."
|
||||||
|
"\n line: %s "
|
||||||
|
"\n Detail: %s") % (line[rule], rule,
|
||||||
|
line, repr(err)))
|
||||||
|
|
||||||
return result_set
|
return result_set
|
||||||
|
|
||||||
def _from_xls(self, result_set, conversion_rules):
|
def _from_xls(self, result_set, conversion_rules):
|
||||||
@@ -164,10 +183,26 @@ class FileParser(BankStatementImportParser):
|
|||||||
for line in result_set:
|
for line in result_set:
|
||||||
for rule in conversion_rules:
|
for rule in conversion_rules:
|
||||||
if conversion_rules[rule] == datetime.datetime:
|
if conversion_rules[rule] == datetime.datetime:
|
||||||
t_tuple = xlrd.xldate_as_tuple(line[rule], self._datemode)
|
try:
|
||||||
line[rule] = datetime.datetime(*t_tuple)
|
t_tuple = xlrd.xldate_as_tuple(line[rule], self._datemode)
|
||||||
|
line[rule] = datetime.datetime(*t_tuple)
|
||||||
|
except Exception, err:
|
||||||
|
raise except_osv(_('Invalid data'),
|
||||||
|
_("Date format is not valid. You should modify the cell formatting"
|
||||||
|
" of your column to be of type date."
|
||||||
|
" For column: %s"
|
||||||
|
" value: %s"
|
||||||
|
" \n line: %s \n Detail: %s") % (rule, line[rule],
|
||||||
|
line, repr(err)))
|
||||||
else:
|
else:
|
||||||
line[rule] = conversion_rules[rule](line[rule])
|
try:
|
||||||
|
line[rule] = conversion_rules[rule](line[rule])
|
||||||
|
except Exception, err:
|
||||||
|
raise except_osv(_('Invalid data'),
|
||||||
|
_("Value %s of column % is not valid."
|
||||||
|
"\n line: %s "
|
||||||
|
"\n Detail: %s") % (line[rule], rule,
|
||||||
|
line, repr(err)))
|
||||||
return result_set
|
return result_set
|
||||||
|
|
||||||
def _cast_rows(self, *args, **kwargs):
|
def _cast_rows(self, *args, **kwargs):
|
||||||
|
|||||||
@@ -29,6 +29,11 @@ try:
|
|||||||
except:
|
except:
|
||||||
raise Exception(_('Please install python lib xlrd'))
|
raise Exception(_('Please install python lib xlrd'))
|
||||||
|
|
||||||
|
def float_or_zero(val):
|
||||||
|
""" Convertion function used to manage
|
||||||
|
empty string into float usecase"""
|
||||||
|
return val and float(val) or 0.0
|
||||||
|
|
||||||
|
|
||||||
class GenericFileParser(FileParser):
|
class GenericFileParser(FileParser):
|
||||||
"""
|
"""
|
||||||
@@ -42,8 +47,8 @@ class GenericFileParser(FileParser):
|
|||||||
'ref': unicode,
|
'ref': unicode,
|
||||||
'label': unicode,
|
'label': unicode,
|
||||||
'date': datetime.datetime,
|
'date': datetime.datetime,
|
||||||
'amount': float,
|
'amount': float_or_zero,
|
||||||
'commission_amount': float
|
'commission_amount': float_or_zero
|
||||||
}
|
}
|
||||||
# Order of cols does not matter but first row of the file has to be header
|
# Order of cols does not matter but first row of the file has to be header
|
||||||
keys_to_validate = ['ref', 'label', 'date', 'amount', 'commission_amount']
|
keys_to_validate = ['ref', 'label', 'date', 'amount', 'commission_amount']
|
||||||
|
|||||||
Reference in New Issue
Block a user