refactor: updateField & deleteDeal/Lead

(cherry picked from commit 0605cf5fd0c0de9ba22e4f504a8acb24a6cbdf3c)
This commit is contained in:
Shariq Ansari 2025-07-30 15:16:13 +05:30 committed by Mergify
parent b1dfa6e9c9
commit 72c61f6cc4
2 changed files with 56 additions and 109 deletions

View File

@ -126,7 +126,7 @@
<Tooltip :text="__('Delete')">
<div>
<Button
@click="deleteDealWithModal(doc.name)"
@click="deleteDealWithModal"
variant="subtle"
icon="trash-2"
theme="red"
@ -455,7 +455,7 @@ watch(
toast,
updateField,
createToast: toast.create,
deleteDoc: deleteDeal,
deleteDoc: deleteDealWithModal,
call,
})
document._actions = s.actions || []
@ -506,44 +506,6 @@ const showFilesUploader = ref(false)
const _organization = ref({})
const showDeleteLinkedDocModal = ref(false)
async function deleteDealWithModal() {
showDeleteLinkedDocModal.value = true
}
function updateDeal(fieldname, value, callback) {
value = Array.isArray(fieldname) ? '' : value
if (validateRequired(fieldname, value)) return
createResource({
url: 'frappe.client.set_value',
params: {
doctype: 'CRM Deal',
name: props.dealId,
fieldname,
value,
},
auto: true,
onSuccess: () => {
deal.reload()
reload.value = true
toast.success(__('Deal updated'))
callback?.()
},
onError: (err) => {
toast.error(__('Error updating deal: {0}', [err.messages?.[0]]))
},
})
}
function validateRequired(fieldname, value) {
let meta = deal.data?.fields_meta || {}
if (meta[fieldname]?.reqd && !value) {
toast.error(__('{0} is a required field', [meta[fieldname].label]))
return true
}
return false
}
const breadcrumbs = computed(() => {
let items = [{ label: __('Deals'), route: { name: 'Deals' } }]
@ -756,23 +718,40 @@ function triggerCall() {
makeCall(mobile_no)
}
function updateField(name, value, callback) {
async function triggerStatusChange(value) {
await triggerOnChange('status', value)
setLostReason()
}
function updateField(name, value) {
if (name == 'status' && !isOnboardingStepsCompleted.value) {
updateOnboardingStep('change_deal_status')
}
updateDeal(name, value, () => {
value = Array.isArray(name) ? '' : value
let oldValues = Array.isArray(name) ? {} : doc.value[name]
if (Array.isArray(name)) {
name.forEach((field) => (doc.value[field] = value))
} else {
doc.value[name] = value
callback?.()
}
document.save.submit(null, {
onSuccess: () => (reload.value = true),
onError: (err) => {
if (Array.isArray(name)) {
name.forEach((field) => (doc.value[field] = oldValues[field]))
} else {
doc.value[name] = oldValues
}
toast.error(err.messages?.[0] || __('Error updating field'))
},
})
}
async function deleteDeal(name) {
await call('frappe.client.delete', {
doctype: 'CRM Deal',
name,
})
router.push({ name: 'Deals' })
async function deleteDealWithModal() {
showDeleteLinkedDocModal.value = true
}
const activities = ref(null)
@ -785,11 +764,6 @@ function openEmailBox() {
nextTick(() => (activities.value.emailBox.show = true))
}
async function triggerStatusChange(value) {
await triggerOnChange('status', value)
setLostReason()
}
const showLostReasonModal = ref(false)
function setLostReason() {

View File

@ -185,7 +185,7 @@
<Tooltip :text="__('Delete')">
<div>
<Button
@click="deleteLeadWithModal(doc.name)"
@click="deleteLeadWithModal"
variant="subtle"
theme="red"
icon="trash-2"
@ -329,11 +329,6 @@ const { triggerOnChange, assignees, document, scripts, error } = useDocument(
const doc = computed(() => document.doc || {})
async function triggerStatusChange(value) {
await triggerOnChange('status', value)
document.save.submit()
}
watch(error, (err) => {
if (err) {
errorTitle.value = __(
@ -360,7 +355,7 @@ watch(
toast,
updateField,
createToast: toast.create,
deleteDoc: deleteLead,
deleteDoc: deleteLeadWithModal,
call,
})
document._actions = s.actions || []
@ -384,41 +379,6 @@ onMounted(() => {
const reload = ref(false)
const showFilesUploader = ref(false)
function updateLead(fieldname, value, callback) {
value = Array.isArray(fieldname) ? '' : value
if (!Array.isArray(fieldname) && validateRequired(fieldname, value)) return
createResource({
url: 'frappe.client.set_value',
params: {
doctype: 'CRM Lead',
name: props.leadId,
fieldname,
value,
},
auto: true,
onSuccess: () => {
lead.reload()
reload.value = true
toast.success(__('Lead updated successfully'))
callback?.()
},
onError: (err) => {
toast.error(err.messages?.[0] || __('Error updating lead'))
},
})
}
function validateRequired(fieldname, value) {
let meta = lead.data?.fields_meta || {}
if (meta[fieldname]?.reqd && !value) {
toast.error(__('{0} is a required field', [meta[fieldname].label]))
return true
}
return false
}
const breadcrumbs = computed(() => {
let items = [{ label: __('Leads'), route: { name: 'Leads' } }]
@ -528,22 +488,35 @@ const sections = createResource({
auto: true,
})
function updateField(name, value, callback) {
updateLead(name, value, () => {
doc[name] = value
callback?.()
async function triggerStatusChange(value) {
await triggerOnChange('status', value)
document.save.submit()
}
function updateField(name, value) {
value = Array.isArray(name) ? '' : value
let oldValues = Array.isArray(name) ? {} : doc.value[name]
if (Array.isArray(name)) {
name.forEach((field) => (doc.value[field] = value))
} else {
doc.value[name] = value
}
document.save.submit(null, {
onSuccess: () => (reload.value = true),
onError: (err) => {
if (Array.isArray(name)) {
name.forEach((field) => (doc.value[field] = oldValues[field]))
} else {
doc.value[name] = oldValues
}
toast.error(err.messages?.[0] || __('Error updating field'))
},
})
}
async function deleteLead(name) {
await call('frappe.client.delete', {
doctype: 'CRM Lead',
name,
})
router.push({ name: 'Leads' })
}
async function deleteLeadWithModal(name) {
async function deleteLeadWithModal() {
showDeleteLinkedDocModal.value = true
}