// // Copyright © 2022 Hardcore Engineering Inc. // // Licensed under the Eclipse Public License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. You may // obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // // See the License for the specific language governing permissions and // limitations under the License. // import core, { AttachedDoc, Doc, Tx, TxCollectionCUD, TxCreateDoc, TxCUD, TxProcessor, TxUpdateDoc } from '@hcengineering/core' import lead, { leadId, Lead } from '@hcengineering/lead' import login from '@hcengineering/login' import { getMetadata } from '@hcengineering/platform' import { TriggerControl } from '@hcengineering/server-core' import view from '@hcengineering/view' import { workbenchId } from '@hcengineering/workbench' import { addAssigneeNotification } from '@hcengineering/server-task-resources' /** * @public */ export async function leadHTMLPresenter (doc: Doc, control: TriggerControl): Promise { const lead = doc as Lead const front = getMetadata(login.metadata.FrontUrl) ?? '' return `${lead.title}` } /** * @public */ export async function leadTextPresenter (doc: Doc): Promise { const lead = doc as Lead return `LEAD-${lead.number}` } /** * @public */ export async function OnLeadUpdate (tx: Tx, control: TriggerControl): Promise { const actualTx = TxProcessor.extractTx(tx) const res: Tx[] = [] const cud = actualTx as TxCUD if (actualTx._class === core.class.TxCreateDoc) { await handleLeadCreate(control, cud, res, tx) } if (actualTx._class === core.class.TxUpdateDoc) { await handleLeadUpdate(control, cud, res, tx) } return res } async function handleLeadCreate (control: TriggerControl, cud: TxCUD, res: Tx[], tx: Tx): Promise { if (control.hierarchy.isDerived(cud.objectClass, lead.class.Lead)) { const createTx = cud as TxCreateDoc const leadValue = TxProcessor.createDoc2Doc(createTx) if (leadValue.assignee != null) { await addAssigneeNotification( control, res, leadValue, leadValue.assignee, tx as TxCollectionCUD ) } } } async function handleLeadUpdate (control: TriggerControl, cud: TxCUD, res: Tx[], tx: Tx): Promise { if (control.hierarchy.isDerived(cud.objectClass, lead.class.Lead)) { const updateTx = cud as TxUpdateDoc if (updateTx.operations.assignee != null) { const leadValue = (await control.findAll(lead.class.Lead, { _id: updateTx.objectId }, { limit: 1 })).shift() if (leadValue?.assignee != null) { await addAssigneeNotification( control, res, leadValue, leadValue.assignee, tx as TxCollectionCUD ) } } } } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export default async () => ({ function: { LeadHTMLPresenter: leadHTMLPresenter, LeadTextPresenter: leadTextPresenter }, trigger: { OnLeadUpdate } })