diff --git a/frappe/__init__.py b/frappe/__init__.py index 206aa11154..b69991baba 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '10.0.19' +__version__ = '10.0.20' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/core/doctype/data_import/data_import.js b/frappe/core/doctype/data_import/data_import.js index 17408e33b7..9762663957 100644 --- a/frappe/core/doctype/data_import/data_import.js +++ b/frappe/core/doctype/data_import/data_import.js @@ -60,7 +60,8 @@ frappe.ui.form.on('Data Import', { }); } - if (frm.doc.reference_doctype && frm.doc.import_file && frm.doc.total_rows && frm.doc.docstatus === 0) { + if (frm.doc.reference_doctype && frm.doc.import_file && frm.doc.total_rows && + frm.doc.docstatus === 0 && (!frm.doc.import_status || frm.doc.import_status=="Failed")) { frm.page.set_primary_action(__("Start Import"), function() { frappe.call({ method: "frappe.core.doctype.data_import.data_import.import_data", diff --git a/frappe/core/doctype/data_import/data_import.py b/frappe/core/doctype/data_import/data_import.py index f5cfd3ab65..abcd771c16 100644 --- a/frappe/core/doctype/data_import/data_import.py +++ b/frappe/core/doctype/data_import/data_import.py @@ -33,8 +33,11 @@ def import_data(data_import): frappe.db.set_value("Data Import", data_import, "import_status", "In Progress", update_modified=False) frappe.publish_realtime("data_import_progress", {"progress": "0", "data_import": data_import, "reload": True}, user=frappe.session.user) - enqueue(upload, queue='default', timeout=6000, event='data_import', - data_import_doc=data_import, from_data_import="Yes", user=frappe.session.user) + from frappe.core.page.background_jobs.background_jobs import get_info + enqueued_jobs = [d.get("job_name") for d in get_info()] + if data_import not in enqueued_jobs: + enqueue(upload, queue='default', timeout=6000, event='data_import', job_name=data_import, + data_import_doc=data_import, from_data_import="Yes", user=frappe.session.user) def import_doc(path, overwrite=False, ignore_links=False, ignore_insert=False, diff --git a/frappe/core/doctype/data_import/importer.py b/frappe/core/doctype/data_import/importer.py index 27bb9a49f1..9f8dc7fcbd 100644 --- a/frappe/core/doctype/data_import/importer.py +++ b/frappe/core/doctype/data_import/importer.py @@ -281,8 +281,11 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, start_row = get_start_row() header = rows[:start_row] data = rows[start_row:] - doctype = get_header_row(get_data_keys_definition().main_table)[1] - columns = filter_empty_columns(get_header_row(get_data_keys_definition().columns)[1:]) + try: + doctype = get_header_row(get_data_keys_definition().main_table)[1] + columns = filter_empty_columns(get_header_row(get_data_keys_definition().columns)[1:]) + except: + frappe.throw(_("Cannot change header content")) doctypes = [] column_idx_to_fieldname = {} column_idx_to_fieldtype = {} diff --git a/frappe/public/js/frappe/form/footer/timeline.js b/frappe/public/js/frappe/form/footer/timeline.js index 24e19c7fc5..aabd7be6a8 100644 --- a/frappe/public/js/frappe/form/footer/timeline.js +++ b/frappe/public/js/frappe/form/footer/timeline.js @@ -477,8 +477,8 @@ frappe.ui.form.Timeline = Class.extend({ parts.push(__('{0} from {1} to {2} in row #{3}', [ frappe.meta.get_label(me.frm.fields_dict[row[0]].grid.doctype, p[0]), - (frappe.ellipsis(p[1], 40) || '""').bold(), (frappe.ellipsis(p[2], 40) || '""').bold(), + (frappe.ellipsis(p[1], 40) || '""').bold(), row[1] ])); } diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index 63710c959f..e6be892c0d 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -171,8 +171,6 @@ frappe.ui.form.Grid = Class.extend({ // redraw var _scroll_y = $(document).scrollTop(); this.make_head(); - // to hide checkbox if grid is not editable - this.header_row && this.header_row.toggle_check(); if(!this.grid_rows) { this.grid_rows = []; diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 7d5ade67a9..88c1ee6cb2 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -121,8 +121,6 @@ frappe.ui.form.GridRow = Class.extend({ if(this.grid_form) { this.grid_form.layout && this.grid_form.layout.refresh(this.doc); } - - this.toggle_check(); }, render_template: function() { this.set_row_index(); @@ -596,11 +594,5 @@ frappe.ui.form.GridRow = Class.extend({ }, toggle_editable: function(fieldname, editable) { this.set_field_property(fieldname, 'read_only', editable ? 0 : 1); - }, - toggle_check: function() { - // to hide checkbox if grid is not editable - this.wrapper - .find('.grid-row-check') - .css("display", this.grid.is_editable()? 'block':'none'); } }); \ No newline at end of file diff --git a/frappe/public/js/frappe/views/inbox/inbox_view_item_row.html b/frappe/public/js/frappe/views/inbox/inbox_view_item_row.html index c042a92bbd..2874c0fc01 100644 --- a/frappe/public/js/frappe/views/inbox/inbox_view_item_row.html +++ b/frappe/public/js/frappe/views/inbox/inbox_view_item_row.html @@ -13,7 +13,7 @@