From 016ba890ca8a73213bc6e70ad721e3667fd90bdc Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 8 Nov 2023 17:21:36 +0530 Subject: [PATCH 1/3] fix: changed autocomplete component to handle footer (for not made a copy) --- .../src/components/frappe-ui/Autocomplete.vue | 204 ++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 frontend/src/components/frappe-ui/Autocomplete.vue diff --git a/frontend/src/components/frappe-ui/Autocomplete.vue b/frontend/src/components/frappe-ui/Autocomplete.vue new file mode 100644 index 00000000..b07bd19d --- /dev/null +++ b/frontend/src/components/frappe-ui/Autocomplete.vue @@ -0,0 +1,204 @@ + + + From 7dbeb23728a6ee47e628e443727b68bed460587f Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 8 Nov 2023 17:22:17 +0530 Subject: [PATCH 2/3] chore: show --- for empty values in autocomplete --- frontend/src/stores/organizations.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/stores/organizations.js b/frontend/src/stores/organizations.js index 302b2c76..15712231 100644 --- a/frontend/src/stores/organizations.js +++ b/frontend/src/stores/organizations.js @@ -29,7 +29,7 @@ export const organizationsStore = defineStore('crm-organizations', () => { function getOrganizationOptions() { return [ - { label: '', value: '' }, + { label: '---', value: '' }, ...organizations.data?.map((org) => ({ label: org.name, value: org.name, From 4050f1650d7c90db6b1b88c36e6dccd6f3928593 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 8 Nov 2023 17:23:13 +0530 Subject: [PATCH 3/3] fix: added create new button in autocompele footer and added in lead --- crm/api/session.py | 2 +- .../components/Modals/OrganizationModal.vue | 49 +++++++++-------- frontend/src/pages/Lead.vue | 52 +++++++++++++++---- 3 files changed, 69 insertions(+), 34 deletions(-) diff --git a/crm/api/session.py b/crm/api/session.py index ccaab666..758c53b6 100644 --- a/crm/api/session.py +++ b/crm/api/session.py @@ -39,7 +39,7 @@ def get_organizations(): organizations = frappe.qb.get_query( "CRM Organization", - fields=['name', 'organization_logo', 'website'], + fields=['name', 'organization_name', 'organization_logo', 'website'], order_by="name asc", distinct=True, ).run(as_dict=1) diff --git a/frontend/src/components/Modals/OrganizationModal.vue b/frontend/src/components/Modals/OrganizationModal.vue index 66f395e1..7aa80fe8 100644 --- a/frontend/src/components/Modals/OrganizationModal.vue +++ b/frontend/src/components/Modals/OrganizationModal.vue @@ -8,7 +8,8 @@ { label: editMode ? 'Update' : 'Create', variant: 'solid', - onClick: ({ close }) => updateOrganization(close), + onClick: ({ close }) => + editMode ? updateOrganization(close) : callInsertDoc(close), }, ], }" @@ -20,7 +21,7 @@ @@ -47,6 +48,13 @@ const props = defineProps({ type: Object, default: {}, }, + options: { + type: Object, + default: { + redirect: true, + afterInsert: () => {}, + }, + }, }) const show = defineModel() @@ -73,19 +81,14 @@ async function updateOrganization(close) { return } - if (editMode.value) { - let name - if (nameChanged) { - name = await callRenameDoc() - } - if (otherFieldChanged) { - name = await callSetValue(values) - } - handleOrganizationUpdate(name) - } else { - await callInsertDoc() + let name + if (nameChanged) { + name = await callRenameDoc() } - close() + if (otherFieldChanged) { + name = await callSetValue(values) + } + handleOrganizationUpdate({ name }, close) } async function callRenameDoc() { @@ -106,25 +109,27 @@ async function callSetValue(values) { return d.name } -async function callInsertDoc() { - const d = await call('frappe.client.insert', { +async function callInsertDoc(close) { + const doc = await call('frappe.client.insert', { doc: { doctype: 'CRM Organization', - organization_name: _organization.value.name, + organization_name: _organization.value.organization_name, website: _organization.value.website, }, }) - d.name && handleOrganizationUpdate() + doc.name && handleOrganizationUpdate(doc, close) } -function handleOrganizationUpdate(name) { - organizations.value.reload() - if (name) { +function handleOrganizationUpdate(doc, close) { + organizations.value?.reload() + if (doc.name && props.options.redirect) { router.push({ name: 'Organization', - params: { organizationId: name }, + params: { organizationId: doc.name }, }) } + close && close() + props.options.afterInsert && props.options.afterInsert(doc) } watch( diff --git a/frontend/src/pages/Lead.vue b/frontend/src/pages/Lead.vue index 69c0a68e..d8759212 100644 --- a/frontend/src/pages/Lead.vue +++ b/frontend/src/pages/Lead.vue @@ -8,7 +8,7 @@ type="autocomplete" :options="activeAgents" :value="getUser(lead.data.lead_owner).full_name" - @change="(option) => updateAssignedAgent(option.email)" + @change="(option) => updateField('lead_owner', option.email)" placeholder="Lead owner" >