Merge pull request #860 from frappe/mergify/bp/main-hotfix/pr-858

This commit is contained in:
Shariq Ansari 2025-05-26 12:04:07 +05:30 committed by GitHub
commit e33bcd0459
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 51 additions and 7 deletions

View File

@ -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

View File

@ -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) {

View File

@ -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>

View File

@ -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,
}
}