From c0ae1336f43cbaed5a1a226279a70252ae6500a7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 20:26:03 +0200 Subject: [PATCH] fix(Rename Tool): allow more than 500 rows (backport #47117) (#47225) Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> fix(Rename Tool): allow more than 500 rows (#47117) --- .../doctype/rename_tool/rename_tool.js | 67 +++++++++++++++---- .../doctype/rename_tool/rename_tool.py | 9 ++- 2 files changed, 62 insertions(+), 14 deletions(-) diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.js b/erpnext/utilities/doctype/rename_tool/rename_tool.js index 1b8b2be2610..47677a62500 100644 --- a/erpnext/utilities/doctype/rename_tool/rename_tool.js +++ b/erpnext/utilities/doctype/rename_tool/rename_tool.js @@ -18,29 +18,70 @@ frappe.ui.form.on("Rename Tool", { allowed_file_types: [".csv"], }, }; - if (!frm.doc.file_to_rename) { - frm.get_field("rename_log").$wrapper.html(""); - } + + frm.trigger("render_overview"); + frm.page.set_primary_action(__("Rename"), function () { - frm.get_field("rename_log").$wrapper.html("

Renaming...

"); frappe.call({ method: "erpnext.utilities.doctype.rename_tool.rename_tool.upload", args: { select_doctype: frm.doc.select_doctype, }, - callback: function (r) { - let html = r.message.join("
"); + freeze: true, + freeze_message: __("Scheduling..."), + callback: function () { + frappe.msgprint({ + message: __("Rename jobs for doctype {0} have been enqueued.", [ + frm.doc.select_doctype, + ]), + alert: true, + indicator: "green", + }); + frm.set_value("select_doctype", ""); + frm.set_value("file_to_rename", ""); - if (r.exc) { - r.exc = frappe.utils.parse_json(r.exc); - if (Array.isArray(r.exc)) { - html += "
" + r.exc.join("
"); - } - } + frm.trigger("render_overview"); + }, + error: function (r) { + frappe.msgprint({ + message: __("Rename jobs for doctype {0} have not been enqueued.", [ + frm.doc.select_doctype, + ]), + alert: true, + indicator: "red", + }); - frm.get_field("rename_log").$wrapper.html(html); + frm.trigger("render_overview"); }, }); }); }, + render_overview: function (frm) { + frappe.db + .get_list("RQ Job", { filters: { status: ["in", ["started", "queued", "finished", "failed"]] } }) + .then((jobs) => { + let counts = { + started: 0, + queued: 0, + finished: 0, + failed: 0, + }; + + for (const job of jobs) { + if (job.job_name !== "frappe.model.rename_doc.bulk_rename") { + continue; + } + + counts[job.status]++; + } + + frm.get_field("rename_log").$wrapper.html(` +

${__("Bulk Rename Jobs")}

+

${__("Queued")}: ${counts.queued}

+

${__("Started")}: ${counts.started}

+

${__("Finished")}: ${counts.finished}

+

${__("Failed")}: ${counts.failed}

+ `); + }); + }, }); diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.py b/erpnext/utilities/doctype/rename_tool/rename_tool.py index 19b29f79aa1..230845e55de 100644 --- a/erpnext/utilities/doctype/rename_tool/rename_tool.py +++ b/erpnext/utilities/doctype/rename_tool/rename_tool.py @@ -45,4 +45,11 @@ def upload(select_doctype=None, rows=None): rows = read_csv_content_from_attached_file(frappe.get_doc("Rename Tool", "Rename Tool")) - return bulk_rename(select_doctype, rows=rows) + # bulk rename allows only 500 rows at a time, so we created one job per 500 rows + for i in range(0, len(rows), 500): + frappe.enqueue( + method=bulk_rename, + queue="long", + doctype=select_doctype, + rows=rows[i : i + 500], + )