feat: intercept create lead from call log via form script
(cherry picked from commit 8af4e9b5e82a5a3460053fa0fc7b93a704a97084)
This commit is contained in:
parent
fc5223f258
commit
9a6ca31858
@ -190,11 +190,20 @@ def get_call_log(name):
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def create_lead_from_call_log(call_log):
|
||||
def create_lead_from_call_log(call_log, lead_details=None):
|
||||
lead = frappe.new_doc("CRM Lead")
|
||||
lead.first_name = "Lead from call " + call_log.get("from")
|
||||
lead.mobile_no = call_log.get("from")
|
||||
lead.lead_owner = frappe.session.user
|
||||
lead_details = frappe.parse_json(lead_details or "{}")
|
||||
|
||||
if not lead_details.get("lead_owner"):
|
||||
lead_details["lead_owner"] = frappe.session.user
|
||||
if not lead_details.get("mobile_no"):
|
||||
lead_details["mobile_no"] = call_log.get("from") or ""
|
||||
if not lead_details.get("first_name"):
|
||||
lead_details["first_name"] = "Lead from call " + (
|
||||
lead_details.get("mobile_no") or call_log.get("name")
|
||||
)
|
||||
|
||||
lead.update(lead_details)
|
||||
lead.save(ignore_permissions=True)
|
||||
|
||||
# link call log with lead
|
||||
|
||||
@ -206,7 +206,7 @@
|
||||
v-else
|
||||
type="text"
|
||||
:placeholder="getPlaceholder(field)"
|
||||
:value="data[field.fieldname]"
|
||||
:value="getDataValue(data[field.fieldname], field)"
|
||||
:disabled="Boolean(field.read_only)"
|
||||
:description="field.description"
|
||||
@change="fieldChange($event.target.value, field)"
|
||||
@ -340,6 +340,13 @@ function fieldChange(value, df) {
|
||||
triggerOnChange(df.fieldname)
|
||||
}
|
||||
}
|
||||
|
||||
function getDataValue(value, field) {
|
||||
if (field.fieldtype === 'Duration') {
|
||||
return value || 0
|
||||
}
|
||||
return value
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
:deep(.form-control.prefix select) {
|
||||
|
||||
@ -172,8 +172,9 @@ import FadedScrollableDiv from '@/components/FadedScrollableDiv.vue'
|
||||
import { getCallLogDetail } from '@/utils/callLog'
|
||||
import { usersStore } from '@/stores/users'
|
||||
import { isMobileView } from '@/composables/settings'
|
||||
import { useDocument } from '@/data/document'
|
||||
import { FeatherIcon, Dropdown, Avatar, Tooltip, call } from 'frappe-ui'
|
||||
import { ref, computed, h, nextTick } from 'vue'
|
||||
import { ref, computed, h, nextTick, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const { isManager } = usersStore()
|
||||
@ -289,9 +290,19 @@ const detailFields = computed(() => {
|
||||
.filter((detail) => (detail.condition ? detail.condition() : true))
|
||||
})
|
||||
|
||||
function createLead() {
|
||||
const d = ref({})
|
||||
const leadDetails = ref({})
|
||||
|
||||
async function createLead() {
|
||||
await d.value.triggerOnCreateLead?.(
|
||||
callLog.value?.data,
|
||||
leadDetails.value,
|
||||
() => (show.value = false),
|
||||
)
|
||||
|
||||
call('crm.fcrm.doctype.crm_call_log.crm_call_log.create_lead_from_call_log', {
|
||||
call_log: callLog.value?.data,
|
||||
lead_details: leadDetails.value,
|
||||
}).then((d) => {
|
||||
if (d) {
|
||||
router.push({ name: 'Lead', params: { leadId: d } })
|
||||
@ -351,6 +362,14 @@ async function addTaskToCallLog(_task, insert_mode = false) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => callLog.value?.data?.name,
|
||||
(value) => {
|
||||
if (!value) return
|
||||
d.value = useDocument('CRM Call Log', value)
|
||||
},
|
||||
)
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@ -97,6 +97,14 @@ export function useDocument(doctype, docname) {
|
||||
await trigger(handler, rows[0])
|
||||
}
|
||||
|
||||
async function triggerOnCreateLead() {
|
||||
const args = Array.from(arguments)
|
||||
const handler = async function () {
|
||||
await this.on_create_lead(...args)
|
||||
}
|
||||
await trigger(handler)
|
||||
}
|
||||
|
||||
async function trigger(taskFn, row = null) {
|
||||
const controllers = getControllers(row)
|
||||
if (!controllers.length) return
|
||||
@ -130,5 +138,6 @@ export function useDocument(doctype, docname) {
|
||||
triggerOnRowRemove,
|
||||
triggerOnRefresh,
|
||||
setupFormScript,
|
||||
triggerOnCreateLead,
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user