feat: Cancel Button Added for Data Import
This commit is contained in:
parent
8b65540b6a
commit
9f053ce5ee
2 changed files with 45 additions and 2 deletions
|
|
@ -42,6 +42,7 @@ frappe.ui.form.on("Data Import", {
|
|||
frm.page.set_indicator(__("In Progress"), "orange");
|
||||
frm.trigger("update_primary_action");
|
||||
|
||||
frm.trigger("show_cancel_import_btn");
|
||||
// hide progress when complete
|
||||
if (data.current === data.total) {
|
||||
setTimeout(() => {
|
||||
|
|
@ -108,7 +109,12 @@ frappe.ui.form.on("Data Import", {
|
|||
if (frm.doc.status !== "Success") {
|
||||
if (!frm.is_new() && frm.has_import_file()) {
|
||||
let label = frm.doc.status === "Pending" ? __("Start Import") : __("Retry");
|
||||
frm.page.set_primary_action(label, () => frm.events.start_import(frm));
|
||||
frm.page.set_primary_action(label, () => {
|
||||
frm.events.start_import(frm);
|
||||
if (label === "Retry") {
|
||||
frm.trigger("show_cancel_import_btn");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
frm.page.set_primary_action(__("Save"), () => frm.save());
|
||||
}
|
||||
|
|
@ -170,6 +176,26 @@ frappe.ui.form.on("Data Import", {
|
|||
});
|
||||
},
|
||||
|
||||
show_cancel_import_btn(frm) {
|
||||
frm.add_custom_button(__("Cancel Import"), () => {
|
||||
frappe.confirm(
|
||||
__(
|
||||
"This will terminate the job immediately and might be dangerous, are you sure?"
|
||||
),
|
||||
() => {
|
||||
frappe
|
||||
.xcall("frappe.core.doctype.data_import.data_import.stop_data_import", {
|
||||
doc_name: frm.doc.name,
|
||||
})
|
||||
.then((r) => {
|
||||
frappe.show_alert(__("Job Stopped Successfully"));
|
||||
frm.reload_doc();
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
},
|
||||
|
||||
show_report_error_button(frm) {
|
||||
if (frm.doc.status === "Error") {
|
||||
frappe.db
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
import os
|
||||
|
||||
from rq.command import send_stop_job_command
|
||||
from rq.exceptions import InvalidJobOperation
|
||||
from rq.timeouts import JobTimeoutException
|
||||
|
||||
import frappe
|
||||
|
|
@ -12,7 +14,7 @@ from frappe.core.doctype.data_import.importer import Importer
|
|||
from frappe.model import CORE_DOCTYPES
|
||||
from frappe.model.document import Document
|
||||
from frappe.modules.import_file import import_file_by_path
|
||||
from frappe.utils.background_jobs import enqueue, is_job_enqueued
|
||||
from frappe.utils.background_jobs import enqueue, get_redis_conn, is_job_enqueued
|
||||
from frappe.utils.csvutils import validate_google_sheets_url
|
||||
|
||||
BLOCKED_DOCTYPES = CORE_DOCTYPES - {"User", "Role", "Print Format"}
|
||||
|
|
@ -151,6 +153,21 @@ def form_start_import(data_import: str):
|
|||
return di.start_import()
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def stop_data_import(doc_name: str):
|
||||
"""Stop a running Data Import job."""
|
||||
data_import = frappe.get_doc("Data Import", doc_name)
|
||||
data_import.check_permission("write")
|
||||
|
||||
rq_job_id = f"{frappe.local.site}||data_import||{doc_name}"
|
||||
job_id = rq_job_id.replace(":", "|") # patching the change in job id format (for timestamp part)
|
||||
try:
|
||||
send_stop_job_command(connection=get_redis_conn(), job_id=job_id)
|
||||
except InvalidJobOperation:
|
||||
frappe.msgprint(_("Job is not running."), title=_("Invalid Operation"))
|
||||
return {"status": "success", "message": "Job stopped successfully"}
|
||||
|
||||
|
||||
def start_import(data_import):
|
||||
"""This method runs in background job"""
|
||||
data_import = frappe.get_doc("Data Import", data_import)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue