Merge pull request #902 from shariquerik/onload-onsave
This commit is contained in:
commit
f128a55f97
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user