From b429f75d65ca001a6db29b95ff70cf8926d97452 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 20 Mar 2024 14:32:27 +0530 Subject: [PATCH] refactor: link running doc validation to company master (cherry picked from commit 5a3afea8c772b7167839593ba88f3582a381259c) # Conflicts: # erpnext/setup/doctype/company/company.js # erpnext/setup/doctype/company/company.py --- erpnext/setup/doctype/company/company.js | 43 +++++++++++++++++++ erpnext/setup/doctype/company/company.py | 23 ++++++++++ .../transaction_deletion_record.py | 32 +++++++++----- 3 files changed, 87 insertions(+), 11 deletions(-) diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js index 23a55487adc..39aca350650 100644 --- a/erpnext/setup/doctype/company/company.js +++ b/erpnext/setup/doctype/company/company.js @@ -169,6 +169,7 @@ frappe.ui.form.on("Company", { }, delete_company_transactions: function (frm) { +<<<<<<< HEAD frappe.verify_password(function () { var d = frappe.prompt( { @@ -200,6 +201,48 @@ frappe.ui.form.on("Company", { onerror: function () { frappe.msgprint(__("Wrong Password")); }, +======= + frappe.call({ + method: "erpnext.setup.doctype.transaction_deletion_record.transaction_deletion_record.is_deletion_doc_running", + args: { + company: frm.doc.name, + }, + freeze: true, + callback: function (r) { + if (!r.exc) { + frappe.verify_password(function () { + var d = frappe.prompt( + { + fieldtype: "Data", + fieldname: "company_name", + label: __("Please enter the company name to confirm"), + reqd: 1, + description: __( + "Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone." + ), + }, + function (data) { + if (data.company_name !== frm.doc.name) { + frappe.msgprint(__("Company name not same")); + return; + } + frappe.call({ + method: "erpnext.setup.doctype.company.company.create_transaction_deletion_request", + args: { + company: data.company_name, + }, + freeze: true, + callback: function (r, rt) {}, + onerror: function () { + frappe.msgprint(__("Wrong Password")); + }, + }); + }, + __("Delete all the Transactions for this Company"), + __("Delete") + ); + d.get_primary_btn().addClass("btn-danger"); +>>>>>>> 5a3afea8c7 (refactor: link running doc validation to company master) }); }, __("Delete all the Transactions for this Company"), diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index bea76f19412..7d861979daa 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -11,7 +11,11 @@ from frappe.cache_manager import clear_defaults_cache 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.desk.page.setup_wizard.setup_wizard import make_records +<<<<<<< HEAD from frappe.utils import cint, formatdate, get_timestamp, today +======= +from frappe.utils import cint, formatdate, get_link_to_form, get_timestamp, today +>>>>>>> 5a3afea8c7 (refactor: link running doc validation to company master) from frappe.utils.nestedset import NestedSet, rebuild_tree from erpnext.accounts.doctype.account.account import get_account_currency @@ -812,6 +816,25 @@ def get_default_company_address(name, sort_key="is_primary_address", existing_ad @frappe.whitelist() def create_transaction_deletion_request(company): +<<<<<<< HEAD tdr = frappe.get_doc({"doctype": "Transaction Deletion Record", "company": company}) tdr.insert() tdr.submit() +======= + from erpnext.setup.doctype.transaction_deletion_record.transaction_deletion_record import ( + is_deletion_doc_running, + ) + + is_deletion_doc_running(company) + + tdr = frappe.get_doc({"doctype": "Transaction Deletion Record", "company": company}) + tdr.submit() + tdr.start_deletion_tasks() + + frappe.msgprint( + _("A Transaction Deletion Document: {0} is triggered for {0}").format( + get_link_to_form("Transaction Deletion Record", tdr.name) + ), + frappe.bold(company), + ) +>>>>>>> 5a3afea8c7 (refactor: link running doc validation to company master) 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 5d4f95f5b61..2140b519f4c 100644 --- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py +++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py @@ -477,7 +477,25 @@ def get_doctypes_to_be_ignored(): return doctypes_to_be_ignored +@frappe.whitelist() +def is_deletion_doc_running(company: str | None = None, err_msg: str | None = None): + if company: + if running_deletion_jobs := frappe.db.get_all( + "Transaction Deletion Record", + filters={"docstatus": 1, "company": company, "status": "Running"}, + ): + if not err_msg: + err_msg = "" + frappe.throw( + title=_("Deletion in Progress!"), + msg=_("Transaction Deletion Document: {0} is running for this Company. {1}").format( + get_link_to_form("Transaction Deletion Record", running_deletion_jobs[0].name), err_msg + ), + ) + + def check_for_running_deletion_job(doc, method=None): + # Check if DocType has 'company' field df = qb.DocType("DocField") if ( not_allowed := qb.from_(df) @@ -485,14 +503,6 @@ def check_for_running_deletion_job(doc, method=None): .where((df.fieldname == "company") & (df.parent == doc.doctype)) .run() ): - if running_deletion_jobs := frappe.db.get_all( - "Transaction Deletion Record", - filters={"docstatus": 1, "company": doc.company, "status": "Running"}, - ): - frappe.throw( - _( - "Transaction Deletion job {0} is running for this Company. Cannot make any transactions until the deletion job is completed" - ).format( - get_link_to_form("Transaction Deletion Record", running_deletion_jobs[0].name) - ) - ) + is_deletion_doc_running( + doc.company, _("Cannot make any transactions until the deletion job is completed") + )