refactor: validate status before running events
diff --git a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
index 0d553ca..63b2801 100644
--- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
+++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
@@ -6,7 +6,7 @@
 from frappe import _, qb
 from frappe.desk.notifications import clear_notifications
 from frappe.model.document import Document
-from frappe.utils import cint, create_batch
+from frappe.utils import cint, create_batch, get_link_to_form
 
 
 class TransactionDeletionRecord(Document):
@@ -40,7 +40,7 @@
 
 	def __init__(self, *args, **kwargs):
 		super(TransactionDeletionRecord, self).__init__(*args, **kwargs)
-		self.batch_size = 5
+		self.batch_size = 5000
 
 	def validate(self):
 		frappe.only_for("System Manager")
@@ -98,6 +98,7 @@
 		self.delete_company_transactions()
 
 	def delete_notifications(self):
+		self.validate_doc_status()
 		if not self.clear_notifications:
 			clear_notifications()
 			self.db_set("clear_notifications", 1)
@@ -108,9 +109,19 @@
 		for doctype in doctypes_to_be_ignored_list:
 			self.append("doctypes_to_be_ignored", {"doctype_name": doctype})
 
+	def validate_doc_status(self):
+		if self.status != "Running":
+			frappe.throw(
+				_("{0} is not running. Cannot trigger events for this Document").format(
+					get_link_to_form("Transaction Deletion Record", self.name)
+				)
+			)
+
 	@frappe.whitelist()
 	def delete_bins(self):
 		# This methid is the entry point for the chain of events that follow
+		self.db_set("status", "Running")
+
 		if not self.delete_bin_data:
 			frappe.db.sql(
 				"""delete from `tabBin` where warehouse in
@@ -122,6 +133,7 @@
 
 	def delete_lead_addresses(self):
 		"""Delete addresses to which leads are linked"""
+		self.validate_doc_status()
 		if not self.delete_leads_and_addresses:
 			leads = frappe.get_all("Lead", filters={"company": self.company})
 			leads = ["'%s'" % row.get("name") for row in leads]
@@ -162,6 +174,7 @@
 		self.chain_call(method="reset_company_values")
 
 	def reset_company_values(self):
+		self.validate_doc_status()
 		if not self.reset_company_default_values:
 			company_obj = frappe.get_doc("Company", self.company)
 			company_obj.total_monthly_sales = 0
@@ -171,6 +184,7 @@
 		self.chain_call(method="delete_notifications")
 
 	def initialize_doctypes_to_be_deleted_table(self):
+		self.validate_doc_status()
 		if not self.initialize_doctypes_table:
 			doctypes_to_be_ignored_list = self.get_doctypes_to_be_ignored_list()
 			docfields = self.get_doctypes_with_company_field(doctypes_to_be_ignored_list)
@@ -187,6 +201,7 @@
 		self.chain_call(method="delete_company_transactions")
 
 	def delete_company_transactions(self):
+		self.validate_doc_status()
 		if not self.delete_transactions:
 			doctypes_to_be_ignored_list = self.get_doctypes_to_be_ignored_list()
 			docfields = self.get_doctypes_with_company_field(doctypes_to_be_ignored_list)
@@ -212,6 +227,7 @@
 						processed = int(docfield.no_of_docs) + len(reference_doc_names)
 						frappe.db.set_value(docfield.doctype, docfield.name, "no_of_docs", processed)
 					else:
+						# reset naming series
 						naming_series = frappe.db.get_value("DocType", docfield.doctype_name, "autoname")
 						if naming_series:
 							if "#" in naming_series:
@@ -224,6 +240,7 @@
 			if pending_doctypes:
 				self.chain_call(method="delete_company_transactions")
 			else:
+				self.db_set("status", "Completed")
 				self.db_set("delete_transactions", 1)
 
 	def get_doctypes_to_be_ignored_list(self):