From 4d74943ebc4a503659c7fb4220150f9e5118dfac Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 12 Mar 2025 17:20:21 +0530 Subject: [PATCH] fix: update onboarding status when lead is converted to deal --- crm/api/onboarding.py | 12 ++++++++++++ frontend/src/composables/onboarding.js | 12 ++++++++++++ frontend/src/pages/Lead.vue | 3 +++ 3 files changed, 27 insertions(+) diff --git a/crm/api/onboarding.py b/crm/api/onboarding.py index 1ac09477..fc66756f 100644 --- a/crm/api/onboarding.py +++ b/crm/api/onboarding.py @@ -17,3 +17,15 @@ def update_user_onboarding_status(steps: str): frappe.db.set_value( "User", frappe.session.user, "onboarding_status", json.dumps(onboarding_status), update_modified=False ) + + +@frappe.whitelist() +def get_first_non_converted_lead(): + lead = frappe.get_all( + "CRM Lead", + filters={"converted": 0}, + fields=["name"], + order_by="creation", + limit=1, + ) + return lead[0].name if lead else None diff --git a/frontend/src/composables/onboarding.js b/frontend/src/composables/onboarding.js index 737f5911..4729b902 100644 --- a/frontend/src/composables/onboarding.js +++ b/frontend/src/composables/onboarding.js @@ -49,6 +49,18 @@ const steps = reactive([ title: 'Convert lead to deal', icon: markRaw(ConvertIcon), completed: false, + onClick: async () => { + minimize.value = true + + let leadName = await call( + 'crm.api.onboarding.get_first_non_converted_lead', + ) + if (leadName) { + router.push({ name: 'Lead', params: { leadId: leadName } }) + } else { + router.push({ name: 'Leads' }) + } + }, }, { name: 'create_first_note', diff --git a/frontend/src/pages/Lead.vue b/frontend/src/pages/Lead.vue index 1e8d728b..19841493 100644 --- a/frontend/src/pages/Lead.vue +++ b/frontend/src/pages/Lead.vue @@ -348,6 +348,7 @@ import { callEnabled, isMobileView, } from '@/composables/settings' +import { useOnboarding } from '@/composables/onboarding' import { capture } from '@/telemetry' import { createResource, @@ -370,6 +371,7 @@ const { isManager } = usersStore() const { $dialog, $socket, makeCall } = globalStore() const { getContactByName, contacts } = contactsStore() const { statusOptions, getLeadStatus, getDealStatus } = statusesStore() +const { updateOnboardingStep } = useOnboarding() const route = useRoute() const router = useRouter() @@ -658,6 +660,7 @@ async function convertToDeal(updated) { }) }) if (_deal) { + updateOnboardingStep('convert_lead_to_deal') capture('convert_lead_to_deal') if (updated) { await contacts.reload()