From 66349ca27f61a352ecd9dcdf027ad077de0cd69e Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 26 Jan 2024 16:33:13 +0530 Subject: [PATCH 01/12] feat: added custom fields in email template doctype --- crm/hooks.py | 2 +- crm/install.py | 34 ++++++++++++++++++++++++++++++++-- crm/uninstall.py | 22 ++++++++++++++++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 crm/uninstall.py diff --git a/crm/hooks.py b/crm/hooks.py index 8e703a15..b8bc1e99 100644 --- a/crm/hooks.py +++ b/crm/hooks.py @@ -76,7 +76,7 @@ after_install = "crm.install.after_install" # Uninstallation # ------------ -# before_uninstall = "crm.uninstall.before_uninstall" +before_uninstall = "crm.uninstall.before_uninstall" # after_uninstall = "crm.uninstall.after_uninstall" # Integration Setup diff --git a/crm/install.py b/crm/install.py index ff8a914d..351dd8ce 100644 --- a/crm/install.py +++ b/crm/install.py @@ -1,9 +1,11 @@ # Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors # MIT License. See license.txt - from __future__ import unicode_literals +import click import frappe +from frappe.custom.doctype.custom_field.custom_field import create_custom_fields + def before_install(): pass @@ -12,6 +14,7 @@ def after_install(): add_default_deal_statuses() add_default_communication_statuses() add_property_setter() + add_email_template_custom_fields() frappe.db.commit() def add_default_lead_statuses(): @@ -113,4 +116,31 @@ def add_property_setter(): doc.property = "search_fields" doc.property_type = "Data" doc.value = "email_id" - doc.insert() \ No newline at end of file + doc.insert() + +def add_email_template_custom_fields(): + if not frappe.get_meta("Email Template").has_field("enabled"): + click.secho("* Installing Custom Fields in Email Template") + + create_custom_fields( + { + "Email Template": [ + { + "default": "0", + "fieldname": "enabled", + "fieldtype": "Check", + "label": "Enabled", + "insert_after": "", + }, + { + "fieldname": "reference_doctype", + "fieldtype": "Link", + "label": "Doctype", + "options": "DocType", + "insert_after": "enabled", + }, + ] + } + ) + + frappe.clear_cache(doctype="Email Template") diff --git a/crm/uninstall.py b/crm/uninstall.py new file mode 100644 index 00000000..34622d0b --- /dev/null +++ b/crm/uninstall.py @@ -0,0 +1,22 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt +from __future__ import unicode_literals +import click +import frappe + +def before_uninstall(): + delete_email_template_custom_fields() + +def delete_email_template_custom_fields(): + if frappe.get_meta("Email Template").has_field("enabled"): + click.secho("* Uninstalling Custom Fields from Email Template") + + fieldnames = ( + "enabled", + "reference_doctype", + ) + + for fieldname in fieldnames: + frappe.db.delete("Custom Field", {"name": "Email Template-" + fieldname}) + + frappe.clear_cache(doctype="Email Template") \ No newline at end of file From 1ed93a5a81519da0d8a196188815cc951814e9e1 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 26 Jan 2024 16:34:22 +0530 Subject: [PATCH 02/12] fix: added email templates listview and added in sidebar --- .../src/components/Layouts/AppSidebar.vue | 6 + .../ListViews/EmailTemplatesListView.vue | 98 ++++++++++++++++ frontend/src/pages/EmailTemplate.vue | 6 + frontend/src/pages/EmailTemplates.vue | 109 ++++++++++++++++++ frontend/src/router.js | 12 ++ 5 files changed, 231 insertions(+) create mode 100644 frontend/src/components/ListViews/EmailTemplatesListView.vue create mode 100644 frontend/src/pages/EmailTemplate.vue create mode 100644 frontend/src/pages/EmailTemplates.vue diff --git a/frontend/src/components/Layouts/AppSidebar.vue b/frontend/src/components/Layouts/AppSidebar.vue index 5b1cd6e6..0bbc03b8 100644 --- a/frontend/src/components/Layouts/AppSidebar.vue +++ b/frontend/src/components/Layouts/AppSidebar.vue @@ -99,6 +99,7 @@ diff --git a/frontend/src/pages/EmailTemplate.vue b/frontend/src/pages/EmailTemplate.vue new file mode 100644 index 00000000..72571af1 --- /dev/null +++ b/frontend/src/pages/EmailTemplate.vue @@ -0,0 +1,6 @@ + diff --git a/frontend/src/pages/EmailTemplates.vue b/frontend/src/pages/EmailTemplates.vue new file mode 100644 index 00000000..8245f643 --- /dev/null +++ b/frontend/src/pages/EmailTemplates.vue @@ -0,0 +1,109 @@ + + + diff --git a/frontend/src/router.js b/frontend/src/router.js index 9ee28274..73f733bb 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -73,6 +73,18 @@ const routes = [ component: () => import('@/pages/CallLog.vue'), props: true, }, + { + path: '/email-templates', + name: 'Email Templates', + component: () => import('@/pages/EmailTemplates.vue'), + meta: { scrollPos: { top: 0, left: 0 } }, + }, + { + path: '/email-templates/:emailTemplateId', + name: 'Email Template', + component: () => import('@/pages/EmailTemplate.vue'), + props: true, + }, { path: '/dashboard', name: 'Dashboard', From b261506559f99110c455dea2af5b386b50054dc2 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 26 Jan 2024 16:34:45 +0530 Subject: [PATCH 03/12] fix: added default columns in listview --- crm/hooks.py | 3 ++- crm/overrides/email_template.py | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 crm/overrides/email_template.py diff --git a/crm/hooks.py b/crm/hooks.py index b8bc1e99..c60beac0 100644 --- a/crm/hooks.py +++ b/crm/hooks.py @@ -118,7 +118,8 @@ before_uninstall = "crm.uninstall.before_uninstall" # Override standard doctype classes override_doctype_class = { - "Contact": "crm.overrides.contact.CustomContact" + "Contact": "crm.overrides.contact.CustomContact", + "Email Template": "crm.overrides.email_template.CustomEmailTemplate", } # Document Events diff --git a/crm/overrides/email_template.py b/crm/overrides/email_template.py new file mode 100644 index 00000000..af7ed764 --- /dev/null +++ b/crm/overrides/email_template.py @@ -0,0 +1,48 @@ +# import frappe +from frappe import _ +from frappe.email.doctype.email_template.email_template import EmailTemplate + + +class CustomEmailTemplate(EmailTemplate): + @staticmethod + def default_list_data(): + columns = [ + { + 'label': 'Name', + 'type': 'Data', + 'key': 'name', + 'width': '17rem', + }, + { + 'label': 'Subject', + 'type': 'Data', + 'key': 'subject', + 'width': '12rem', + }, + { + 'label': 'Enabled', + 'type': 'Check', + 'key': 'enabled', + 'width': '6rem', + }, + { + 'label': 'Doctype', + 'type': 'Link', + 'key': 'reference_doctype', + 'width': '12rem', + }, + { + 'label': 'Last Modified', + 'type': 'Datetime', + 'key': 'modified', + 'width': '8rem', + }, + ] + rows = [ + "name", + "enabled", + "reference_doctype", + "subject", + "modified", + ] + return {'columns': columns, 'rows': rows} From 2a5d4425d09e0cd8b6802cf271aa398d66662348 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 26 Jan 2024 18:46:09 +0530 Subject: [PATCH 04/12] fix: added email template modal which is showed when row in listview is clicked --- crm/overrides/email_template.py | 1 + .../ListViews/EmailTemplatesListView.vue | 8 +- .../components/Modals/EmailTemplateModal.vue | 190 ++++++++++++++++++ frontend/src/pages/EmailTemplates.vue | 67 +++--- 4 files changed, 220 insertions(+), 46 deletions(-) create mode 100644 frontend/src/components/Modals/EmailTemplateModal.vue diff --git a/crm/overrides/email_template.py b/crm/overrides/email_template.py index af7ed764..da14c714 100644 --- a/crm/overrides/email_template.py +++ b/crm/overrides/email_template.py @@ -43,6 +43,7 @@ class CustomEmailTemplate(EmailTemplate): "enabled", "reference_doctype", "subject", + "response", "modified", ] return {'columns': columns, 'rows': rows} diff --git a/frontend/src/components/ListViews/EmailTemplatesListView.vue b/frontend/src/components/ListViews/EmailTemplatesListView.vue index dcc82cc9..4f0f09b3 100644 --- a/frontend/src/components/ListViews/EmailTemplatesListView.vue +++ b/frontend/src/components/ListViews/EmailTemplatesListView.vue @@ -3,10 +3,7 @@ :columns="columns" :rows="rows" :options="{ - getRowRoute: (row) => ({ - name: 'Email Template', - params: { emailTemplateId: row.name }, - }), + onRowClick: (row) => emit('showEmailTemplate', row.name), selectable: options.selectable, }" row-key="name" @@ -72,6 +69,7 @@ import { ListRowItem, ListFooter, } from 'frappe-ui' +import { defineModel } from 'vue' const props = defineProps({ rows: { @@ -92,7 +90,7 @@ const props = defineProps({ }, }) -const emit = defineEmits(['loadMore']) +const emit = defineEmits(['loadMore', 'showEmailTemplate']) const pageLengthCount = defineModel() diff --git a/frontend/src/components/Modals/EmailTemplateModal.vue b/frontend/src/components/Modals/EmailTemplateModal.vue new file mode 100644 index 00000000..626520d9 --- /dev/null +++ b/frontend/src/components/Modals/EmailTemplateModal.vue @@ -0,0 +1,190 @@ + + + diff --git a/frontend/src/pages/EmailTemplates.vue b/frontend/src/pages/EmailTemplates.vue index 8245f643..7b80cdfb 100644 --- a/frontend/src/pages/EmailTemplates.vue +++ b/frontend/src/pages/EmailTemplates.vue @@ -19,6 +19,7 @@ totalCount: emailTemplates.data.total_count, }" @loadMore="() => loadMore++" + @showEmailTemplate="showEmailTemplate" />
- - No Logs Found + + No Email Templates Found
+ From e190280b56cba02bb2e367a71061360aca3f5511 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 26 Jan 2024 18:46:42 +0530 Subject: [PATCH 05/12] fix: also allow creating email template from listview --- frontend/src/pages/EmailTemplates.vue | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/src/pages/EmailTemplates.vue b/frontend/src/pages/EmailTemplates.vue index 7b80cdfb..e5ac35bc 100644 --- a/frontend/src/pages/EmailTemplates.vue +++ b/frontend/src/pages/EmailTemplates.vue @@ -3,6 +3,11 @@ + Date: Fri, 26 Jan 2024 18:47:09 +0530 Subject: [PATCH 06/12] fix: allow deleting email templates from listview --- .../ListViews/EmailTemplatesListView.vue | 48 +++++++++++++++++-- frontend/src/pages/EmailTemplates.vue | 1 + 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/ListViews/EmailTemplatesListView.vue b/frontend/src/components/ListViews/EmailTemplatesListView.vue index 4f0f09b3..10d92063 100644 --- a/frontend/src/components/ListViews/EmailTemplatesListView.vue +++ b/frontend/src/components/ListViews/EmailTemplatesListView.vue @@ -46,7 +46,16 @@ - + + + diff --git a/frontend/src/pages/EmailTemplates.vue b/frontend/src/pages/EmailTemplates.vue index e5ac35bc..ab404dc2 100644 --- a/frontend/src/pages/EmailTemplates.vue +++ b/frontend/src/pages/EmailTemplates.vue @@ -25,6 +25,7 @@ }" @loadMore="() => loadMore++" @showEmailTemplate="showEmailTemplate" + @reload="() => emailTemplates.reload()" />
Date: Fri, 26 Jan 2024 18:56:33 +0530 Subject: [PATCH 07/12] fix: made doctype field select field and minor fixes --- .../components/Modals/EmailTemplateModal.vue | 21 ++++++++++++------- frontend/src/pages/EmailTemplates.vue | 9 +++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/Modals/EmailTemplateModal.vue b/frontend/src/components/Modals/EmailTemplateModal.vue index 626520d9..7d4d2f27 100644 --- a/frontend/src/components/Modals/EmailTemplateModal.vue +++ b/frontend/src/components/Modals/EmailTemplateModal.vue @@ -2,7 +2,7 @@ *
Doctype
-
@@ -40,7 +42,7 @@ *
From f39b9b9666636bfa208290abdb2d9ec590f78fbb Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 26 Jan 2024 20:10:52 +0530 Subject: [PATCH 10/12] chore: layout changes --- .../src/components/Modals/EmailTemplateSelectorModal.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/Modals/EmailTemplateSelectorModal.vue b/frontend/src/components/Modals/EmailTemplateSelectorModal.vue index 796b063a..e71331f2 100644 --- a/frontend/src/components/Modals/EmailTemplateSelectorModal.vue +++ b/frontend/src/components/Modals/EmailTemplateSelectorModal.vue @@ -11,13 +11,13 @@
{{ template.name }}
-
+
Subject: {{ template.subject }}
From 95fc17c4f5b98c8e94edee5c1c8c952ba6f5a522 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 26 Jan 2024 20:32:42 +0530 Subject: [PATCH 11/12] refactor: use v-model instead of value --- frontend/src/components/CommentBox.vue | 10 +++------- frontend/src/components/CommunicationArea.vue | 16 +++------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/frontend/src/components/CommentBox.vue b/frontend/src/components/CommentBox.vue index 2f3ea28c..b74d82ec 100644 --- a/frontend/src/components/CommentBox.vue +++ b/frontend/src/components/CommentBox.vue @@ -2,8 +2,8 @@ Date: Fri, 26 Jan 2024 20:33:29 +0530 Subject: [PATCH 12/12] fix: focus on search when email templates modal is opened --- frontend/src/components/EmailEditor.vue | 11 ++++------- .../components/Modals/EmailTemplateSelectorModal.vue | 10 +++++++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/EmailEditor.vue b/frontend/src/components/EmailEditor.vue index fdf56329..4c917283 100644 --- a/frontend/src/components/EmailEditor.vue +++ b/frontend/src/components/EmailEditor.vue @@ -2,8 +2,8 @@