From ffa8c162553b151b33b9de1ff1940305dd7bdf57 Mon Sep 17 00:00:00 2001 From: Pratik Date: Thu, 22 May 2025 10:50:39 +0000 Subject: [PATCH 1/4] fix: hide selected filters from filter list (cherry picked from commit 7a12b80dd20f7cd0581d830f4f91a7c809f10f45) --- frontend/src/components/Filter.vue | 15 ++++++++++++++- frontend/src/components/ViewControls.vue | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Filter.vue b/frontend/src/components/Filter.vue index ac1c01f0..bb45fb5b 100644 --- a/frontend/src/components/Filter.vue +++ b/frontend/src/components/Filter.vue @@ -126,7 +126,7 @@
@@ -217,6 +217,19 @@ const filters = computed(() => { return convertFilters(filterableFields.data, allFilters) }) +const availableFilters = computed(() => { + if (!filterableFields.data) return [] + + const selectedFieldNames = new Set() + for (const filter of filters.value) { + selectedFieldNames.add(filter.fieldname) + } + + return filterableFields.data.filter( + (field) => !selectedFieldNames.has(field.fieldname), + ) +}) + function removeCommonFilters(commonFilters, allFilters) { for (const key in commonFilters) { if (commonFilters.hasOwnProperty(key) && allFilters.hasOwnProperty(key)) { diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index f8730f29..beaf8b99 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -752,6 +752,7 @@ const quickFilterOptions = computed(() => { let fields = getFields() if (!fields) return [] + let existingQuickFilters = newQuickFilters.value.map((f) => f.fieldname) let restrictedFieldtypes = [ 'Tab Break', 'Section Break', @@ -766,6 +767,7 @@ const quickFilterOptions = computed(() => { ] let options = fields .filter((f) => f.label && !restrictedFieldtypes.includes(f.fieldtype)) + .filter((f) => !existingQuickFilters.includes(f.fieldname)) .map((field) => ({ label: field.label, value: field.fieldname, From b820e345485fc64d31a5a44bdba82f08f7074677 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 23 May 2025 20:26:43 +0530 Subject: [PATCH 2/4] fix: set default value as empty array (cherry picked from commit b95a17a4e0454268e76f70039a2171bc3f51ba59) --- frontend/src/components/Controls/TableMultiselectInput.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Controls/TableMultiselectInput.vue b/frontend/src/components/Controls/TableMultiselectInput.vue index a498812b..c3cd8565 100644 --- a/frontend/src/components/Controls/TableMultiselectInput.vue +++ b/frontend/src/components/Controls/TableMultiselectInput.vue @@ -64,7 +64,10 @@ const emit = defineEmits(['change']) const { getFields } = getMeta(props.doctype) -const values = defineModel() +const values = defineModel({ + type: Array, + default: () => [], +}) const valuesRef = ref([]) const error = ref(null) From 9a6ca31858cb80781ed9918868d193f60b506e90 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 23 May 2025 21:49:12 +0530 Subject: [PATCH 3/4] feat: intercept create lead from call log via form script (cherry picked from commit 8af4e9b5e82a5a3460053fa0fc7b93a704a97084) --- crm/fcrm/doctype/crm_call_log/crm_call_log.py | 17 ++++++++++---- frontend/src/components/FieldLayout/Field.vue | 9 +++++++- .../components/Modals/CallLogDetailModal.vue | 23 +++++++++++++++++-- frontend/src/data/document.js | 9 ++++++++ 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/crm/fcrm/doctype/crm_call_log/crm_call_log.py b/crm/fcrm/doctype/crm_call_log/crm_call_log.py index e644b6e1..4e3488c6 100644 --- a/crm/fcrm/doctype/crm_call_log/crm_call_log.py +++ b/crm/fcrm/doctype/crm_call_log/crm_call_log.py @@ -190,11 +190,20 @@ def get_call_log(name): @frappe.whitelist() -def create_lead_from_call_log(call_log): +def create_lead_from_call_log(call_log, lead_details=None): lead = frappe.new_doc("CRM Lead") - lead.first_name = "Lead from call " + call_log.get("from") - lead.mobile_no = call_log.get("from") - lead.lead_owner = frappe.session.user + lead_details = frappe.parse_json(lead_details or "{}") + + if not lead_details.get("lead_owner"): + lead_details["lead_owner"] = frappe.session.user + if not lead_details.get("mobile_no"): + lead_details["mobile_no"] = call_log.get("from") or "" + if not lead_details.get("first_name"): + lead_details["first_name"] = "Lead from call " + ( + lead_details.get("mobile_no") or call_log.get("name") + ) + + lead.update(lead_details) lead.save(ignore_permissions=True) # link call log with lead diff --git a/frontend/src/components/FieldLayout/Field.vue b/frontend/src/components/FieldLayout/Field.vue index a190817f..b517d973 100644 --- a/frontend/src/components/FieldLayout/Field.vue +++ b/frontend/src/components/FieldLayout/Field.vue @@ -206,7 +206,7 @@ v-else type="text" :placeholder="getPlaceholder(field)" - :value="data[field.fieldname]" + :value="getDataValue(data[field.fieldname], field)" :disabled="Boolean(field.read_only)" :description="field.description" @change="fieldChange($event.target.value, field)" @@ -340,6 +340,13 @@ function fieldChange(value, df) { triggerOnChange(df.fieldname) } } + +function getDataValue(value, field) { + if (field.fieldtype === 'Duration') { + return value || 0 + } + return value +}