Merge pull request #39457 from ruthra-kumar/background_job_transaction_deletion

refactor: delete transactions in background
This commit is contained in:
ruthra kumar 2024-01-22 09:57:25 +05:30 committed by GitHub
commit b17e632a85
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 70 additions and 30 deletions

View File

@ -140,6 +140,14 @@ frappe.ui.form.on("Company", {
}, },
delete_company_transactions: function(frm) { delete_company_transactions: function(frm) {
frappe.call({
method: "erpnext.setup.doctype.company.company.is_deletion_job_running",
args: {
company: frm.doc.name
},
freeze: true,
callback: function(r) {
if(!r.exc) {
frappe.verify_password(function() { frappe.verify_password(function() {
var d = frappe.prompt({ var d = frappe.prompt({
fieldtype:"Data", fieldtype:"Data",
@ -159,10 +167,7 @@ frappe.ui.form.on("Company", {
company: data.company_name company: data.company_name
}, },
freeze: true, freeze: true,
callback: function(r, rt) { callback: function(r, rt) { },
if(!r.exc)
frappe.msgprint(__("Successfully deleted all transactions related to this company!"));
},
onerror: function() { onerror: function() {
frappe.msgprint(__("Wrong Password")); frappe.msgprint(__("Wrong Password"));
} }
@ -173,6 +178,11 @@ frappe.ui.form.on("Company", {
d.get_primary_btn().addClass("btn-danger"); d.get_primary_btn().addClass("btn-danger");
}); });
} }
},
});
}
}); });

View File

@ -11,7 +11,8 @@ from frappe.cache_manager import clear_defaults_cache
from frappe.contacts.address_and_contact import load_address_and_contact from frappe.contacts.address_and_contact import load_address_and_contact
from frappe.custom.doctype.property_setter.property_setter import make_property_setter from frappe.custom.doctype.property_setter.property_setter import make_property_setter
from frappe.desk.page.setup_wizard.setup_wizard import make_records from frappe.desk.page.setup_wizard.setup_wizard import make_records
from frappe.utils import cint, formatdate, get_timestamp, today from frappe.utils import cint, formatdate, get_link_to_form, get_timestamp, today
from frappe.utils.background_jobs import get_job, is_job_enqueued
from frappe.utils.nestedset import NestedSet, rebuild_tree from frappe.utils.nestedset import NestedSet, rebuild_tree
from erpnext.accounts.doctype.account.account import get_account_currency from erpnext.accounts.doctype.account.account import get_account_currency
@ -900,8 +901,37 @@ def get_default_company_address(name, sort_key="is_primary_address", existing_ad
return None return None
def generate_id_for_deletion_job(company):
return "delete_company_transactions_" + company
@frappe.whitelist()
def is_deletion_job_running(company):
job_id = generate_id_for_deletion_job(company)
job_name = get_job(job_id).get_id() # job name will have site prefix
if is_job_enqueued(job_id):
frappe.throw(
_("A Transaction Deletion Job: {0} is already running for {1}").format(
frappe.bold(get_link_to_form("RQ Job", job_name)), frappe.bold(company)
)
)
@frappe.whitelist() @frappe.whitelist()
def create_transaction_deletion_request(company): def create_transaction_deletion_request(company):
is_deletion_job_running(company)
job_id = generate_id_for_deletion_job(company)
tdr = frappe.get_doc({"doctype": "Transaction Deletion Record", "company": company}) tdr = frappe.get_doc({"doctype": "Transaction Deletion Record", "company": company})
tdr.insert() tdr.insert()
tdr.submit()
frappe.enqueue(
"frappe.utils.background_jobs.run_doc_method",
doctype=tdr.doctype,
name=tdr.name,
doc_method="submit",
job_id=job_id,
queue="long",
enqueue_after_commit=True,
)
frappe.msgprint(_("A Transaction Deletion Job is triggered for {0}").format(frappe.bold(company)))