From 5498c88fc83c1f9f4885090fed8ae0da37b4b4ec Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 10 Apr 2024 19:35:52 +0530 Subject: [PATCH 1/6] fix: added List & Form option in Form Script --- crm/api/doc.py | 3 +- .../crm_form_script/crm_form_script.js | 38 +++++++++++++++++-- .../crm_form_script/crm_form_script.json | 15 +++++++- .../crm_form_script/crm_form_script.py | 6 ++- 4 files changed, 53 insertions(+), 9 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index 8fc1f705..199c99b1 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -240,7 +240,8 @@ def get_list_data( "views": get_views(doctype), "total_count": len(frappe.get_list(doctype, filters=filters)), "row_count": len(data), - "form_script": get_form_script(doctype) + "form_script": get_form_script(doctype), + "list_script": get_form_script(doctype, "List"), } diff --git a/crm/fcrm/doctype/crm_form_script/crm_form_script.js b/crm/fcrm/doctype/crm_form_script/crm_form_script.js index 7f6f150e..087714dc 100644 --- a/crm/fcrm/doctype/crm_form_script/crm_form_script.js +++ b/crm/fcrm/doctype/crm_form_script/crm_form_script.js @@ -1,8 +1,38 @@ // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -// frappe.ui.form.on("CRM Form Script", { -// refresh(frm) { +frappe.ui.form.on("CRM Form Script", { + refresh(frm) { + frm.set_query("dt", { + filters: { + istable: 0, + }, + }); + }, + view(frm) { + let has_form_boilerplate = frm.doc.script.includes( + "function setupForm(" + ); + let has_list_boilerplate = frm.doc.script.includes( + "function setupList(" + ); -// }, -// }); + if (frm.doc.view == "Form" && !has_form_boilerplate) { + frm.doc.script = ` +function setupForm({ doc }) { + return { + actions: [], + } +}`.trim(); + } + if (frm.doc.view == "List" && !has_list_boilerplate) { + frm.doc.script = ` +function setupList({ docs }) { + return { + actions: [], + bulk_actions: [], + } +}`.trim(); + } + }, +}); diff --git a/crm/fcrm/doctype/crm_form_script/crm_form_script.json b/crm/fcrm/doctype/crm_form_script/crm_form_script.json index b883e804..9a026098 100644 --- a/crm/fcrm/doctype/crm_form_script/crm_form_script.json +++ b/crm/fcrm/doctype/crm_form_script/crm_form_script.json @@ -7,6 +7,7 @@ "engine": "InnoDB", "field_order": [ "dt", + "view", "column_break_gboh", "enabled", "section_break_xeox", @@ -36,16 +37,26 @@ "label": "Enabled" }, { - "default": "function setupForm({ doc }) {\n return {\n actions: []\n }\n}", + "default": "function setupForm({ doc }) {\n return {\n actions: [],\n }\n}", + "documentation_url": "https://docs.frappe.io/crm/custom-actions", "fieldname": "script", "fieldtype": "Code", "label": "Script", "options": "JS" + }, + { + "default": "Form", + "fieldname": "view", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Apply To", + "options": "Form\nList", + "set_only_once": 1 } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2024-01-19 21:52:46.078626", + "modified": "2024-04-10 18:27:17.617602", "modified_by": "Administrator", "module": "FCRM", "name": "CRM Form Script", diff --git a/crm/fcrm/doctype/crm_form_script/crm_form_script.py b/crm/fcrm/doctype/crm_form_script/crm_form_script.py index 32649d62..ff93ff4f 100644 --- a/crm/fcrm/doctype/crm_form_script/crm_form_script.py +++ b/crm/fcrm/doctype/crm_form_script/crm_form_script.py @@ -14,6 +14,7 @@ class CRMFormScript(Document): if self.dt and self.enabled: filters = { "dt": self.dt, + "view": self.view, "enabled": 1, } if self.name: @@ -27,13 +28,14 @@ class CRMFormScript(Document): frappe.DuplicateEntryError, ) -def get_form_script(dt): - """Returns the script for the given doctype""" +def get_form_script(dt, view="Form"): + """Returns the form script for the given doctype""" FormScript = frappe.qb.DocType("CRM Form Script") query = ( frappe.qb.from_(FormScript) .select("script") .where(FormScript.dt == dt) + .where(FormScript.view == view) .where(FormScript.enabled == 1) .limit(1) ) From 9f5bea6b2267593ad7c03d8165bc0dac33e69fbf Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 10 Apr 2024 19:36:22 +0530 Subject: [PATCH 2/6] fix: implemented customListActions in leads listview --- .../src/components/ListViews/LeadsListView.vue | 16 ++++++++++++++-- frontend/src/pages/Leads.vue | 8 ++++++++ frontend/src/utils/index.js | 11 ++++++----- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/ListViews/LeadsListView.vue b/frontend/src/components/ListViews/LeadsListView.vue index 1483b574..a78a62ec 100644 --- a/frontend/src/components/ListViews/LeadsListView.vue +++ b/frontend/src/components/ListViews/LeadsListView.vue @@ -155,7 +155,7 @@ import { call, Tooltip, } from 'frappe-ui' -import { setupBulkActions, createToast } from '@/utils' +import { setupListActions, createToast } from '@/utils' import { globalStore } from '@/stores/global' import { onMounted, ref, watch } from 'vue' import { useRouter } from 'vue-router' @@ -243,6 +243,7 @@ function deleteValues(selections, unselectAll) { } const customBulkActions = ref([]) +const customListActions = ref([]) function bulkActions(selections, unselectAll) { let actions = [ @@ -275,7 +276,18 @@ function bulkActions(selections, unselectAll) { onMounted(() => { if (!list.value?.data) return - setupBulkActions(list.value.data) + setupListActions(list.value.data, { + list: list.value, + call, + createToast, + $dialog, + router, + }) customBulkActions.value = list.value?.data?.bulkActions || [] + customListActions.value = list.value?.data?.listActions || [] +}) + +defineExpose({ + customListActions, }) diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index 38118d69..5e018865 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -4,6 +4,10 @@