diff --git a/core/page/data_import_tool/data_import_tool.js b/core/page/data_import_tool/data_import_tool.js index c7701abf40..4058dd6e95 100644 --- a/core/page/data_import_tool/data_import_tool.js +++ b/core/page/data_import_tool/data_import_tool.js @@ -23,10 +23,7 @@ wn.pages['data-import-tool'].onload = function(wrapper) {

\ '); - $(wrapper).find('.layout-side-section').append('

Help


\ -

Date Format:

\ -

Dates must be in format "YYYY-MM-DD", for example, \ - 31st Jan 2012 must be "2012-01-31"

\ + $(wrapper).find('.layout-side-section').append('

Help

\

Importing non-English data:

\

While uploading non English files ensure that the encoding is UTF-8.

\

Microsoft Excel Users:\ @@ -147,14 +144,6 @@ wn.pages['data-import-tool'].onload = function(wrapper) { // add ignore option $(' Ignore Encoding Errors

') .insertBefore('#dit-upload-area form input[type="submit"]') - - - // add overwrite option - $('Date Format:

') - .insertBefore('#dit-upload-area form input[type="submit"]') - - $('#dit-upload-area select').add_options(['dd/mm/yyyy', 'mm/dd/yyyy', 'yyyy-mm-dd']) - // rename button $('#dit-upload-area form input[type="submit"]') diff --git a/core/page/data_import_tool/data_import_tool.py b/core/page/data_import_tool/data_import_tool.py index 46cc49a46b..c6d53d9489 100644 --- a/core/page/data_import_tool/data_import_tool.py +++ b/core/page/data_import_tool/data_import_tool.py @@ -202,7 +202,7 @@ def get_parent_details(rows): def check_record(d, parenttype): """check for mandatory, select options, dates. these should ideally be in doclist""" - from webnotes.utils.dateutils import user_to_str + from webnotes.utils.dateutils import parse_date if parenttype and not d.get('parent'): raise Exception, "parent is required." @@ -226,7 +226,7 @@ def check_record(d, parenttype): ", ".join(filter(None, docfield.options.split("\n")))) if val and docfield.fieldtype=='Date': - d[key] = parse_date(val, webnotes.form_dict['date_format']) + d[key] = parse_date(val) def getlink(doctype, name): return '%(name)s' % locals() @@ -237,33 +237,6 @@ def delete_child_rows(rows, doctype): for p in list(set([r[1] for r in rows[8:]])): webnotes.conn.sql("""delete from `tab%s` where parent=%s""" % (doctype, '%s'), p) -def parse_date(val, format): - from webnotes.utils.dateutils import user_to_str - - parsed_val = None - check_formats = [ - format, # the one mentioned in the form - None, # users default date format - "yyyy-mm-dd", # system date format - "dd-mmm-yyyy", # numbers app format - "mm/dd/yyyy", # excel app format - ] - - for f in check_formats: - try: - parsed_val = user_to_str(val, f, verbose=0) - if parsed_val: - webnotes.errprint([f, parsed_val]) - break - except ValueError, e: - pass - - if not parsed_val: - webnotes.msgprint("Cannot identify date") - raise Exception - - return parsed_val - def import_doc(d, doctype, overwrite, row_idx): """import main (non child) document""" import webnotes diff --git a/webnotes/utils/dateutils.py b/webnotes/utils/dateutils.py index 67a3f51c45..e897640f53 100644 --- a/webnotes/utils/dateutils.py +++ b/webnotes/utils/dateutils.py @@ -28,14 +28,16 @@ import datetime user_date_format = None dateformats = { 'yyyy-mm-dd': '%Y-%m-%d', - 'dd/mm/yyyy': '%d/%m/%Y', 'mm/dd/yyyy': '%m/%d/%Y', - 'dd-mm-yyyy': '%d-%m-%Y', + 'mm-dd-yyyy': '%m-%d-%Y', + "mm/dd/yy": "%m/%d/%y", 'dd-mmm-yyyy': '%d-%b-%Y', # numbers app format - 'yyyy-mm-dd': '%Y-%m-%d', + 'dd/mm/yyyy': '%d/%m/%Y', + 'dd-mm-yyyy': '%d-%m-%Y', + "dd/mm/yy": "%d/%m/%y", } -def user_to_str(date, date_format=None, verbose=1): +def user_to_str(date, date_format=None): if not date: return date if not date_format: @@ -45,14 +47,33 @@ def user_to_str(date, date_format=None, verbose=1): return datetime.datetime.strptime(date, dateformats[date_format]).strftime('%Y-%m-%d') except ValueError, e: - if verbose: - webnotes.msgprint("Date %s must be in format %s" % (date, date_format), - raise_exception=True) - else: - raise e + raise ValueError, "Date %s must be in format %s" % (date, date_format) + +def parse_date(date): + """tries to parse given date to system's format i.e. yyyy-mm-dd. returns a string""" + parsed_date = None + + # why the sorting? checking should be done in a predictable order + check_formats = [None] + sorted(dateformats.keys(), + reverse=not get_user_date_format().startswith("dd")) + + for f in check_formats: + try: + parsed_date = user_to_str(date, f) + if parsed_date: + break + except ValueError, e: + pass + + if not parsed_date: + raise Exception, """Cannot understand date - '%s'. + Try formatting it like your default format - '%s'""" % \ + (date, get_user_date_format()) + + return parsed_date def get_user_date_format(): if not user_date_format: global user_date_format user_date_format = webnotes.conn.get_value("Control Panel", None, "date_format") - return user_date_format + return user_date_format \ No newline at end of file