From f5881424dcedd2944de0c91cba5ee9e0268ba1b2 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 17 May 2024 16:56:12 +0530 Subject: [PATCH 1/9] feat: get quick filters meta --- crm/api/doc.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/crm/api/doc.py b/crm/api/doc.py index 20da945a..9f7353ea 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -126,6 +126,30 @@ def get_fields_meta(DocField, doctype, allowed_fieldtypes, restricted_fields): .run(as_dict=True) ) +@frappe.whitelist() +def get_quick_filters(doctype: str): + meta = frappe.get_meta(doctype) + fields = [field for field in meta.fields if field.in_standard_filter] + quick_filters = [{"label": _("ID"), "name": "name", "type": "Link", "options": doctype}] + + for field in fields: + + if field.fieldtype == "Select": + field.options = field.options.split("\n") + field.options = [{"label": option, "value": option} for option in field.options] + field.options.insert(0, {"label": "", "value": ""}) + quick_filters.append({ + "label": _(field.label), + "name": field.fieldname, + "type": field.fieldtype, + "options": field.options, + }) + + if doctype == "CRM Lead": + quick_filters = [filter for filter in quick_filters if filter.get("name") != "converted"] + + return quick_filters + @frappe.whitelist() def get_list_data( doctype: str, From 440bb05052910e244795ffbb714dae22f5233614 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 17 May 2024 16:56:53 +0530 Subject: [PATCH 2/9] fix: render quick filters is view control component --- frontend/src/components/Filter.vue | 2 +- frontend/src/components/ViewControls.vue | 53 +++++++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/Filter.vue b/frontend/src/components/Filter.vue index 64dce9b2..36f8be13 100644 --- a/frontend/src/components/Filter.vue +++ b/frontend/src/components/Filter.vue @@ -178,7 +178,7 @@ function convertFilters(data, allFilters) { let field = data.find((f) => f.fieldname === key) if (typeof value !== 'object') { value = ['=', value] - if (field.fieldtype === 'Check') { + if (field?.fieldtype === 'Check') { value = ['equals', value[1] ? 'Yes' : 'No'] } } diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index f83c1b39..9b2c78dd 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -1,5 +1,5 @@ -
-
+
+
+
+
Date: Fri, 17 May 2024 17:48:48 +0530 Subject: [PATCH 4/9] fix: update quick filter value if filter exist --- crm/api/doc.py | 2 +- frontend/src/components/ViewControls.vue | 28 ++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index 9f7353ea..b7b02511 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -130,7 +130,7 @@ def get_fields_meta(DocField, doctype, allowed_fieldtypes, restricted_fields): def get_quick_filters(doctype: str): meta = frappe.get_meta(doctype) fields = [field for field in meta.fields if field.in_standard_filter] - quick_filters = [{"label": _("ID"), "name": "name", "type": "Link", "options": doctype}] + quick_filters = [] for field in fields: diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 72d899f7..432bfc9e 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -34,11 +34,9 @@ " >
{ return _views }) +const quickFilterList = computed(() => { + let filters = [{ name: 'name', label: __('ID') }] + if (quickFilters.data) { + filters.push(...quickFilters.data) + } + + filters.forEach((filter) => { + filter['value'] = '' + if (list.value.params?.filters[filter.name]) { + if (['Check', 'Select'].includes(filter.type)) { + filter['value'] = list.value.params.filters[filter.name] + } else { + let value = list.value.params.filters[filter.name] + filter['value'] = value[1].replace(/%/g, '') + } + } + }) + + return filters +}) + const quickFilters = createResource({ url: 'crm.api.doc.get_quick_filters', params: { doctype: props.doctype }, + cache: ['Quick Filters', props.doctype], auto: true, }) From e9d87509f4f9f7ab309ef0edb0091449999b831d Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 17 May 2024 17:55:37 +0530 Subject: [PATCH 5/9] fix: check filter not working --- frontend/src/components/ViewControls.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 432bfc9e..ba3325ed 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -43,7 +43,7 @@ :label="filter.label" type="checkbox" v-model="filter.value" - @change.stop="applyQuickFilter(filter, $event.target.value)" + @change.stop="applyQuickFilter(filter, $event.target.checked)" /> { } filters.forEach((filter) => { - filter['value'] = '' + filter['value'] = filter.type == 'Check' ? false : '' if (list.value.params?.filters[filter.name]) { if (['Check', 'Select'].includes(filter.type)) { filter['value'] = list.value.params.filters[filter.name] From ddb81c2e3e3b6cc62ae86c202ec79b3046d02c58 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 17 May 2024 18:05:13 +0530 Subject: [PATCH 6/9] fix: also consider link field --- frontend/src/components/ViewControls.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index ba3325ed..f4ff3e9c 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -54,6 +54,13 @@ :placeholder="filter.label" @change.stop="applyQuickFilter(filter, $event.target.value)" /> +