Merge pull request #904 from frappe/mergify/bp/main/pr-902

This commit is contained in:
Shariq Ansari 2025-06-06 21:17:53 +05:30 committed by GitHub
commit e262c8e0ca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 51 additions and 54 deletions

View File

@ -19,6 +19,7 @@ export function useDocument(doctype, docname) {
onSuccess: async () => await setupFormScript(),
setValue: {
onSuccess: () => {
triggerOnSave()
toast.success(__('Document updated successfully'))
},
onError: (err) => {
@ -38,7 +39,7 @@ export function useDocument(doctype, docname) {
const assignees = createResource({
url: 'crm.api.doc.get_assigned_users',
cache: `assignees:${doctype}:${docname}`,
auto: true,
auto: docname ? true : false,
params: {
doctype: doctype,
name: docname,
@ -76,7 +77,7 @@ export function useDocument(doctype, docname) {
}
controllersCache[doctype][docname || ''] = organizedControllers
triggerOnload()
triggerOnLoad()
}
function getControllers(row = null) {
@ -95,9 +96,16 @@ export function useDocument(doctype, docname) {
return []
}
async function triggerOnload() {
async function triggerOnLoad() {
const handler = async function () {
await this.onload?.()
await (this.onLoad?.() || this.on_load?.() || this.onload?.())
}
await trigger(handler)
}
async function triggerOnSave() {
const handler = async function () {
await (this.onSave?.() || this.on_save?.())
}
await trigger(handler)
}
@ -156,7 +164,7 @@ export function useDocument(doctype, docname) {
async function triggerOnCreateLead() {
const args = Array.from(arguments)
const handler = async function () {
await this.on_create_lead?.(...args)
await (this.onCreateLead?.(...args) || this.on_create_lead?.(...args))
}
await trigger(handler)
}
@ -164,7 +172,8 @@ export function useDocument(doctype, docname) {
async function triggerConvertToDeal() {
const args = Array.from(arguments)
const handler = async function () {
await this.convert_to_deal?.(...args)
await (this.convertToDeal?.(...args) ||
this.on_convert_to_deal?.(...args))
}
await trigger(handler)
}
@ -199,11 +208,12 @@ export function useDocument(doctype, docname) {
document: documentsCache[doctype][docname || ''],
assignees,
getControllers,
triggerOnload,
triggerOnLoad,
triggerOnSave,
triggerOnRefresh,
triggerOnChange,
triggerOnRowAdd,
triggerOnRowRemove,
triggerOnRefresh,
setupFormScript,
triggerOnCreateLead,
triggerConvertToDeal,

View File

@ -22,20 +22,15 @@
doctype="CRM Deal"
/>
<Dropdown
:options="
statusOptions(
'deal',
updateField,
document.statuses?.length
? document.statuses
: deal.data._customStatuses,
)
"
v-if="document.doc"
:options="statusOptions('deal', document, deal.data._customStatuses)"
>
<template #default="{ open }">
<Button :label="deal.data.status">
<Button :label="document.doc.status">
<template #prefix>
<IndicatorIcon :class="getDealStatus(deal.data.status).color" />
<IndicatorIcon
:class="getDealStatus(document.doc.status).color"
/>
</template>
<template #suffix>
<FeatherIcon

View File

@ -22,20 +22,15 @@
doctype="CRM Lead"
/>
<Dropdown
:options="
statusOptions(
'lead',
updateField,
document.statuses?.length
? document.statuses
: lead.data._customStatuses,
)
"
v-if="document.doc"
:options="statusOptions('lead', document, lead.data._customStatuses)"
>
<template #default="{ open }">
<Button :label="lead.data.status">
<Button :label="document.doc.status">
<template #prefix>
<IndicatorIcon :class="getLeadStatus(lead.data.status).color" />
<IndicatorIcon
:class="getLeadStatus(document.doc.status).color"
/>
</template>
<template #suffix>
<FeatherIcon

View File

@ -10,20 +10,15 @@
</Breadcrumbs>
<div class="absolute right-0">
<Dropdown
:options="
statusOptions(
'deal',
updateField,
document.statuses?.length
? document.statuses
: deal.data._customStatuses,
)
"
v-if="document.doc"
:options="statusOptions('deal', document, deal.data._customStatuses)"
>
<template #default="{ open }">
<Button :label="deal.data.status">
<Button :label="document.doc.status">
<template #prefix>
<IndicatorIcon :class="getDealStatus(deal.data.status).color" />
<IndicatorIcon
:class="getDealStatus(document.doc.status).color"
/>
</template>
<template #suffix>
<FeatherIcon

View File

@ -10,20 +10,15 @@
</Breadcrumbs>
<div class="absolute right-0">
<Dropdown
:options="
statusOptions(
'lead',
updateField,
document.statuses?.length
? document.statuses
: lead.data._customStatuses,
)
"
v-if="document.doc"
:options="statusOptions('lead', document, lead.data._customStatuses)"
>
<template #default="{ open }">
<Button :label="lead.data.status">
<Button :label="document.doc.status">
<template #prefix>
<IndicatorIcon :class="getLeadStatus(lead.data.status).color" />
<IndicatorIcon
:class="getLeadStatus(document.doc.status).color"
/>
</template>
<template #suffix>
<FeatherIcon

View File

@ -77,10 +77,14 @@ export const statusesStore = defineStore('crm-statuses', () => {
return communicationStatuses[name]
}
function statusOptions(doctype, action, statuses = []) {
function statusOptions(doctype, document, statuses = []) {
let statusesByName =
doctype == 'deal' ? dealStatusesByName : leadStatusesByName
if (document?.statuses?.length) {
statuses = document.statuses
}
if (statuses.length) {
statusesByName = statuses.reduce((acc, status) => {
acc[status] = statusesByName[status]
@ -96,7 +100,10 @@ export const statusesStore = defineStore('crm-statuses', () => {
icon: () => h(IndicatorIcon, { class: statusesByName[status]?.color }),
onClick: () => {
capture('status_changed', { doctype, status })
action && action('status', statusesByName[status]?.name)
if (document) {
document.doc.status = statusesByName[status]?.name
document.save.submit()
}
},
})
}