fix: update onboarding status when lead is created

This commit is contained in:
Shariq Ansari 2025-03-12 16:08:27 +05:30
parent 6ab8d8ded1
commit 2a75dbc45d
3 changed files with 62 additions and 0 deletions

19
crm/api/onboarding.py Normal file
View File

@ -0,0 +1,19 @@
import json
import frappe
@frappe.whitelist()
def update_user_onboarding_status(steps: str):
steps = json.loads(steps)
# get the current onboarding status
onboarding_status = frappe.db.get_value("User", frappe.session.user, "onboarding_status")
onboarding_status = frappe.parse_json(onboarding_status)
# update the onboarding status
onboarding_status["frappe_crm_onboarding_status"] = steps
frappe.db.set_value(
"User", frappe.session.user, "onboarding_status", json.dumps(onboarding_status), update_modified=False
)

View File

@ -47,6 +47,7 @@ import FieldLayout from '@/components/FieldLayout/FieldLayout.vue'
import { usersStore } from '@/stores/users' import { usersStore } from '@/stores/users'
import { statusesStore } from '@/stores/statuses' import { statusesStore } from '@/stores/statuses'
import { isMobileView } from '@/composables/settings' import { isMobileView } from '@/composables/settings'
import { useOnboarding } from '@/composables/onboarding'
import { capture } from '@/telemetry' import { capture } from '@/telemetry'
import { createResource } from 'frappe-ui' import { createResource } from 'frappe-ui'
import { computed, onMounted, ref, reactive, nextTick } from 'vue' import { computed, onMounted, ref, reactive, nextTick } from 'vue'
@ -58,6 +59,7 @@ const props = defineProps({
const { getUser, isManager } = usersStore() const { getUser, isManager } = usersStore()
const { getLeadStatus, statusOptions } = statusesStore() const { getLeadStatus, statusOptions } = statusesStore()
const { updateOnboardingStep } = useOnboarding()
const show = defineModel() const show = defineModel()
const router = useRouter() const router = useRouter()
@ -166,6 +168,7 @@ function createNewLead() {
isLeadCreating.value = false isLeadCreating.value = false
show.value = false show.value = false
router.push({ name: 'Lead', params: { leadId: data.name } }) router.push({ name: 'Lead', params: { leadId: data.name } })
updateOnboardingStep('create_first_lead')
}, },
onError(err) { onError(err) {
isLeadCreating.value = false isLeadCreating.value = false

View File

@ -6,6 +6,9 @@ import CommentIcon from '@/components/Icons/CommentIcon.vue'
import EmailIcon from '@/components/Icons/EmailIcon.vue' import EmailIcon from '@/components/Icons/EmailIcon.vue'
import TaskIcon from '@/components/Icons/TaskIcon.vue' import TaskIcon from '@/components/Icons/TaskIcon.vue'
import StepsIcon from '@/components/Icons/StepsIcon.vue' import StepsIcon from '@/components/Icons/StepsIcon.vue'
import { capture } from '@/telemetry'
import { showSettings, activeSettingsPage } from '@/composables/settings'
import { call } from 'frappe-ui'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { ref, reactive, computed, markRaw } from 'vue' import { ref, reactive, computed, markRaw } from 'vue'
@ -31,6 +34,13 @@ const steps = reactive([
title: 'Invite your team', title: 'Invite your team',
icon: markRaw(InviteIcon), icon: markRaw(InviteIcon),
completed: false, completed: false,
onClick: () => {
if (steps[1].completed) return
minimize.value = true
showSettings.value = true
activeSettingsPage.value = 'Invite Members'
},
}, },
{ {
name: 'convert_lead_to_deal', name: 'convert_lead_to_deal',
@ -93,6 +103,35 @@ export function useOnboarding() {
return false return false
} }
function updateOnboardingStep(step) {
if (stepsCompleted.value) return
let user = window.user
if (!user) return false
if (!user.onboarding_status['frappe_crm_onboarding_status']) {
user.onboarding_status['frappe_crm_onboarding_status'] = steps.map(
(s) => {
return { name: s.name, completed: false }
},
)
}
let _steps = user.onboarding_status['frappe_crm_onboarding_status']
let index = _steps.findIndex((s) => s.name === step)
if (index !== -1) {
_steps[index].completed = true
steps[index].completed = true
}
window.user = user
capture('onboarding_' + step)
call('crm.api.onboarding.update_user_onboarding_status', {
steps: JSON.stringify(_steps),
})
}
return { return {
minimize, minimize,
steps, steps,
@ -100,5 +139,6 @@ export function useOnboarding() {
totalSteps, totalSteps,
completedPercentage, completedPercentage,
checkOnboardingStatus, checkOnboardingStatus,
updateOnboardingStep,
} }
} }