From ffd38362d5fac0d38a067b1b4bd1a61508857f9b Mon Sep 17 00:00:00 2001 From: David Arnold Date: Tue, 23 Jan 2024 17:42:56 +0100 Subject: [PATCH] feat: add an argument pass mechanism to bulk transactions --- erpnext/public/js/bulk_transaction_processing.js | 4 ++-- erpnext/utilities/bulk_transaction.py | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/erpnext/public/js/bulk_transaction_processing.js b/erpnext/public/js/bulk_transaction_processing.js index 0e42b477ea..3ae5a5d9c1 100644 --- a/erpnext/public/js/bulk_transaction_processing.js +++ b/erpnext/public/js/bulk_transaction_processing.js @@ -1,7 +1,7 @@ frappe.provide("erpnext.bulk_transaction_processing"); $.extend(erpnext.bulk_transaction_processing, { - create: function(listview, from_doctype, to_doctype) { + create: function(listview, from_doctype, to_doctype, args) { let checked_items = listview.get_checked_items(); const doc_name = []; checked_items.forEach((Item)=> { @@ -15,7 +15,7 @@ $.extend(erpnext.bulk_transaction_processing, { if (doc_name.length == 0) { frappe.call({ method: "erpnext.utilities.bulk_transaction.transaction_processing", - args: {data: checked_items, from_doctype: from_doctype, to_doctype: to_doctype} + args: {data: checked_items, from_doctype: from_doctype, to_doctype: to_doctype, args: args} }).then(()=> { }); diff --git a/erpnext/utilities/bulk_transaction.py b/erpnext/utilities/bulk_transaction.py index 9678488a26..f8b9aaa768 100644 --- a/erpnext/utilities/bulk_transaction.py +++ b/erpnext/utilities/bulk_transaction.py @@ -7,12 +7,15 @@ from frappe.utils import get_link_to_form, today @frappe.whitelist() -def transaction_processing(data, from_doctype, to_doctype): +def transaction_processing(data, from_doctype, to_doctype, args=None): if isinstance(data, str): deserialized_data = json.loads(data) else: deserialized_data = data + if isinstance(args, str): + args = frappe._dict(json.loads(args)) + length_of_data = len(deserialized_data) frappe.msgprint( @@ -23,6 +26,7 @@ def transaction_processing(data, from_doctype, to_doctype): deserialized_data=deserialized_data, from_doctype=from_doctype, to_doctype=to_doctype, + args=args, ) @@ -71,8 +75,13 @@ def update_log(log_name, status, retried, err=None): frappe.db.set_value("Bulk Transaction Log Detail", log_name, "error_description", err) -def job(deserialized_data, from_doctype, to_doctype): +def job(deserialized_data, from_doctype, to_doctype, args): fail_count = 0 + + if args: + # currently: flag-based transport to `task` + frappe.flags.args = args + for d in deserialized_data: try: doc_name = d.get("name")