From ab915e3a81c553c7fe6013ad5a71dcc2222d4ae9 Mon Sep 17 00:00:00 2001 From: 14987 Date: Fri, 8 Dec 2023 13:22:39 +0530 Subject: [PATCH 1/4] feat: Add button to removing multiple assignments --- frappe/desk/form/assign_to.py | 14 +++++++++++++ .../public/js/frappe/list/bulk_operations.js | 21 +++++++++++++++++++ frappe/public/js/frappe/list/list_view.js | 17 +++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/frappe/desk/form/assign_to.py b/frappe/desk/form/assign_to.py index dc8dbc7cf5..505822d31f 100644 --- a/frappe/desk/form/assign_to.py +++ b/frappe/desk/form/assign_to.py @@ -175,6 +175,20 @@ def remove(doctype, name, assign_to, ignore_permissions=False): ) +@frappe.whitelist() +def remove_multiple(doctype, names, ignore_permissions=False): + docname_list = json.loads(names) + + for name in docname_list: + assignments = get({"doctype": doctype, "name": name}) + + if not assignments: + continue + + for assignment in assignments: + remove(doctype, name, assignment.get("owner"), ignore_permissions) + + @frappe.whitelist() def close(doctype: str, name: str, assign_to: str, ignore_permissions=False): if assign_to != frappe.session.user: diff --git a/frappe/public/js/frappe/list/bulk_operations.js b/frappe/public/js/frappe/list/bulk_operations.js index 22cf51166d..3ec4c182f6 100644 --- a/frappe/public/js/frappe/list/bulk_operations.js +++ b/frappe/public/js/frappe/list/bulk_operations.js @@ -196,6 +196,27 @@ export default class BulkOperations { } } + clear_assignment(docnames, done) { + if (docnames.length > 0) { + frappe + .call({ + method: "frappe.desk.form.assign_to.remove_multiple", + args: { + doctype: this.doctype, + names: docnames, + ignore_permissions: true, + }, + freeze: true, + freeze_message: "Removing assignments...", + }) + .then(() => { + done(); + }); + } else { + frappe.msgprint(__("Select records for removing assignment")); + } + } + apply_assignment_rule(docnames, done) { if (docnames.length > 0) { frappe diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 58f8a7606c..b6fa04a7f7 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1814,6 +1814,21 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { }; }; + const bulk_assignment_clear = () => { + return { + label: __("Clear Assignment", null, "Button in list view actions menu"), + action: () => { + this.disable_list_update = true; + bulk_operations.clear_assignment(this.get_checked_items(true), () => { + this.disable_list_update = false; + this.clear_checked_items(); + this.refresh(); + }); + }, + standard: true, + }; + }; + const bulk_assignment_rule = () => { return { label: __("Apply Assignment Rule", null, "Button in list view actions menu"), @@ -1982,6 +1997,8 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { // bulk assignment actions_menu_items.push(bulk_assignment()); + actions_menu_items.push(bulk_assignment_clear()); + actions_menu_items.push(bulk_assignment_rule()); actions_menu_items.push(bulk_add_tags()); From f3af2d054ea588f301b1f682a2e8ddd842accc12 Mon Sep 17 00:00:00 2001 From: 14987 Date: Mon, 8 Jan 2024 13:49:22 +0530 Subject: [PATCH 2/4] fix: Add confirmation box before removal --- frappe/public/js/frappe/list/list_view.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index b6fa04a7f7..12c59224e1 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1818,12 +1818,21 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { return { label: __("Clear Assignment", null, "Button in list view actions menu"), action: () => { - this.disable_list_update = true; - bulk_operations.clear_assignment(this.get_checked_items(true), () => { - this.disable_list_update = false; - this.clear_checked_items(); - this.refresh(); - }); + frappe.confirm( + "Are you sure you want to clear the assignments?", + () => { + this.disable_list_update = true; + bulk_operations.clear_assignment(this.get_checked_items(true), () => { + this.disable_list_update = false; + this.clear_checked_items(); + this.refresh(); + }); + }, + () => { + this.clear_checked_items(); + this.refresh(); + } + ); }, standard: true, }; From 0a7f9a0c83faea5d9889d1a77a10aea4d09b986a Mon Sep 17 00:00:00 2001 From: 14987 Date: Mon, 8 Jan 2024 15:58:24 +0530 Subject: [PATCH 3/4] fix: Resolve failing test --- cypress/integration/list_view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/integration/list_view.js b/cypress/integration/list_view.js index 537db0247e..54bd9daf11 100644 --- a/cypress/integration/list_view.js +++ b/cypress/integration/list_view.js @@ -35,7 +35,7 @@ context("List View", () => { cy.get(".list-header-subject > .list-subject > .list-check-all").click(); cy.findByRole("button", { name: "Actions" }).click(); cy.get(".dropdown-menu li:visible .dropdown-item") - .should("have.length", 9) + .should("have.length", 10) .each((el, index) => { cy.wrap(el).contains(actions[index]); }) From 439bd2e36602f0005538cc87b3b11f000ed9b1be Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Sat, 13 Jan 2024 13:10:10 +0530 Subject: [PATCH 4/4] test: Add new option --- cypress/integration/list_view.js | 1 + 1 file changed, 1 insertion(+) diff --git a/cypress/integration/list_view.js b/cypress/integration/list_view.js index 54bd9daf11..0618afb9ec 100644 --- a/cypress/integration/list_view.js +++ b/cypress/integration/list_view.js @@ -25,6 +25,7 @@ context("List View", () => { "Edit", "Export", "Assign To", + "Clear Assignment", "Apply Assignment Rule", "Add Tags", "Print",