From 60fa705cac272c1407a2ffc94f1c592516202378 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 28 Feb 2025 01:58:16 +0530 Subject: [PATCH] fix: save (added and removed) quick filters --- crm/api/doc.py | 43 +++++++++++++++++++++--- frontend/src/components/ViewControls.vue | 28 ++++++++++++++- 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index 175bccb9..c5082fde 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -2,6 +2,7 @@ import json import frappe from frappe import _ +from frappe.custom.doctype.property_setter.property_setter import make_property_setter from frappe.model import no_value_fields from frappe.model.document import get_controller from frappe.utils import make_filter_tuple @@ -205,6 +206,40 @@ def get_quick_filters(doctype: str): return quick_filters +@frappe.whitelist() +def update_quick_filters(quick_filters: str, old_filters: str, doctype: str): + quick_filters = json.loads(quick_filters) + old_filters = json.loads(old_filters) + + new_filters = [filter for filter in quick_filters if filter not in old_filters] + removed_filters = [filter for filter in old_filters if filter not in quick_filters] + + # remove old filters + for filter in removed_filters: + update_in_standard_filter(filter, doctype, 0) + + # add new filters + for filter in new_filters: + update_in_standard_filter(filter, doctype, 1) + + +def update_in_standard_filter(fieldname, doctype, value): + if property_name := frappe.db.exists( + "Property Setter", + {"doc_type": doctype, "field_name": fieldname, "property": "in_standard_filter"}, + ): + frappe.db.set_value("Property Setter", property_name, "value", value) + else: + make_property_setter( + doctype, + fieldname, + "in_standard_filter", + value, + "Check", + validate_fields_for_doctype=False, + ) + + @frappe.whitelist() def get_data( doctype: str, @@ -382,7 +417,7 @@ def get_data( all_count = frappe.get_list( doctype, filters=convert_filter_to_tuple(doctype, new_filters), - fields="count(*) as total_count" + fields="count(*) as total_count", )[0].total_count kc["all_count"] = all_count @@ -485,9 +520,9 @@ def get_data( "page_length_count": page_length_count, "is_default": is_default, "views": get_views(doctype), - "total_count": frappe.get_list( - doctype, filters=filters, fields="count(*) as total_count" - )[0].total_count, + "total_count": frappe.get_list(doctype, filters=filters, fields="count(*) as total_count")[ + 0 + ].total_count, "row_count": len(data), "form_script": get_form_script(doctype), "list_script": get_form_script(doctype, "List"), diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index c8506e63..cc9b258c 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -681,8 +681,34 @@ function removeQuickFilter(f) { ) } +const updateQuickFilters = createResource({ + url: 'crm.api.doc.update_quick_filters', + onSuccess() { + customizeQuickFilter.value = false + quickFilters.reload() + + createToast({ + title: __('Quick Filters updated successfully'), + icon: 'check', + iconClasses: 'text-ink-green-3', + }) + }, +}) + function saveQuickFilters() { - // + let new_filters = + newQuickFilters.value?.map((filter) => filter.fieldname) || [] + let old_filters = quickFilters.data?.map((filter) => filter.fieldname) || [] + + updateQuickFilters.update({ + params: { + quick_filters: JSON.stringify(new_filters), + old_filters: JSON.stringify(old_filters), + doctype: props.doctype, + }, + }) + + updateQuickFilters.fetch() } const quickFilterOptions = computed(() => {