refactor: ability to process in single transaction
diff --git a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.json b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.json
index 688b14a..e03e169 100644
--- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.json
+++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.json
@@ -20,7 +20,8 @@
"section_break_tbej",
"doctypes",
"doctypes_to_be_ignored",
- "amended_from"
+ "amended_from",
+ "process_in_single_transaction"
],
"fields": [
{
@@ -129,12 +130,18 @@
{
"fieldname": "section_break_qpwb",
"fieldtype": "Section Break"
+ },
+ {
+ "default": "0",
+ "fieldname": "process_in_single_transaction",
+ "fieldtype": "Check",
+ "label": "Process in Single Transaction"
}
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
- "modified": "2024-03-19 17:47:04.490196",
+ "modified": "2024-03-20 14:58:15.086360",
"modified_by": "Administrator",
"module": "Setup",
"name": "Transaction Deletion Record",
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 4ee9130..00fad5f 100644
--- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
+++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py
@@ -37,6 +37,7 @@
doctypes_to_be_ignored: DF.Table[TransactionDeletionRecordItem]
error_log: DF.LongText | None
initialize_doctypes_table: DF.Check
+ process_in_single_transaction: DF.Check
reset_company_default_values: DF.Check
status: DF.Literal["Queued", "Running", "Failed", "Completed", "Cancelled"]
# end: auto-generated types
@@ -136,18 +137,19 @@
# Generate Job Id to uniquely identify each task for this document
job_id = self.generate_job_name_for_task(task)
- frappe.enqueue(
- "frappe.utils.background_jobs.run_doc_method",
- doctype=self.doctype,
- name=self.name,
- doc_method="execute_task",
- job_id=job_id,
- queue="long",
- enqueue_after_commit=True,
- task_to_execute=task,
- )
-
- # todo: add a non-background job based approach as well
+ if self.process_in_single_transaction:
+ self.execute_task(task_to_execute=task)
+ else:
+ frappe.enqueue(
+ "frappe.utils.background_jobs.run_doc_method",
+ doctype=self.doctype,
+ name=self.name,
+ doc_method="execute_task",
+ job_id=job_id,
+ queue="long",
+ enqueue_after_commit=True,
+ task_to_execute=task,
+ )
def execute_task(self, task_to_execute: str | None = None):
if task_to_execute: