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(),
|
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,
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user