Merge pull request #902 from shariquerik/onload-onsave

This commit is contained in:
Shariq Ansari 2025-06-06 21:15:42 +05:30 committed by GitHub
commit f128a55f97
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(), onSuccess: async () => await setupFormScript(),
setValue: { setValue: {
onSuccess: () => { onSuccess: () => {
triggerOnSave()
toast.success(__('Document updated successfully')) toast.success(__('Document updated successfully'))
}, },
onError: (err) => { onError: (err) => {
@ -38,7 +39,7 @@ export function useDocument(doctype, docname) {
const assignees = createResource({ const assignees = createResource({
url: 'crm.api.doc.get_assigned_users', url: 'crm.api.doc.get_assigned_users',
cache: `assignees:${doctype}:${docname}`, cache: `assignees:${doctype}:${docname}`,
auto: true, auto: docname ? true : false,
params: { params: {
doctype: doctype, doctype: doctype,
name: docname, name: docname,
@ -76,7 +77,7 @@ export function useDocument(doctype, docname) {
} }
controllersCache[doctype][docname || ''] = organizedControllers controllersCache[doctype][docname || ''] = organizedControllers
triggerOnload() triggerOnLoad()
} }
function getControllers(row = null) { function getControllers(row = null) {
@ -95,9 +96,16 @@ export function useDocument(doctype, docname) {
return [] return []
} }
async function triggerOnload() { async function triggerOnLoad() {
const handler = async function () { 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) await trigger(handler)
} }
@ -156,7 +164,7 @@ export function useDocument(doctype, docname) {
async function triggerOnCreateLead() { async function triggerOnCreateLead() {
const args = Array.from(arguments) const args = Array.from(arguments)
const handler = async function () { const handler = async function () {
await this.on_create_lead?.(...args) await (this.onCreateLead?.(...args) || this.on_create_lead?.(...args))
} }
await trigger(handler) await trigger(handler)
} }
@ -164,7 +172,8 @@ export function useDocument(doctype, docname) {
async function triggerConvertToDeal() { async function triggerConvertToDeal() {
const args = Array.from(arguments) const args = Array.from(arguments)
const handler = async function () { const handler = async function () {
await this.convert_to_deal?.(...args) await (this.convertToDeal?.(...args) ||
this.on_convert_to_deal?.(...args))
} }
await trigger(handler) await trigger(handler)
} }
@ -199,11 +208,12 @@ export function useDocument(doctype, docname) {
document: documentsCache[doctype][docname || ''], document: documentsCache[doctype][docname || ''],
assignees, assignees,
getControllers, getControllers,
triggerOnload, triggerOnLoad,
triggerOnSave,
triggerOnRefresh,
triggerOnChange, triggerOnChange,
triggerOnRowAdd, triggerOnRowAdd,
triggerOnRowRemove, triggerOnRowRemove,
triggerOnRefresh,
setupFormScript, setupFormScript,
triggerOnCreateLead, triggerOnCreateLead,
triggerConvertToDeal, triggerConvertToDeal,

View File

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

View File

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

View File

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

View File

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

View File

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