diff --git a/models/notification/src/index.ts b/models/notification/src/index.ts index c444aadd16..7dffc599d0 100644 --- a/models/notification/src/index.ts +++ b/models/notification/src/index.ts @@ -334,6 +334,7 @@ export function generateClassNotificationTypes ( : [core.class.TxCreateDoc, core.class.TxRemoveDoc] const data: Data = { attribute: attribute._id, + field: attribute.name, group, generated: true, objectClass, diff --git a/models/notification/src/migration.ts b/models/notification/src/migration.ts index dd4781f57d..c46e91a842 100644 --- a/models/notification/src/migration.ts +++ b/models/notification/src/migration.ts @@ -208,6 +208,7 @@ async function createCustomFieldTypes (client: MigrationUpgradeClient): Promise< : [core.class.TxCreateDoc, core.class.TxRemoveDoc] const data: Data = { attribute: attribute._id, + field: attribute.name, group: group._id, generated: true, objectClass, diff --git a/models/server-lead/src/index.ts b/models/server-lead/src/index.ts index 3ac8e011ba..a1346e2723 100644 --- a/models/server-lead/src/index.ts +++ b/models/server-lead/src/index.ts @@ -37,7 +37,7 @@ export function createModel (builder: Builder): void { notification.class.NotificationType, serverNotification.mixin.TypeMatch, { - func: serverNotification.function.IsUserInFieldValue + func: serverNotification.function.IsUserEmployeeInFieldValue } ) } diff --git a/models/server-recruit/src/index.ts b/models/server-recruit/src/index.ts index c4e504de5b..f4a64b1f3e 100644 --- a/models/server-recruit/src/index.ts +++ b/models/server-recruit/src/index.ts @@ -50,7 +50,7 @@ export function createModel (builder: Builder): void { notification.class.NotificationType, serverNotification.mixin.TypeMatch, { - func: serverNotification.function.IsUserInFieldValue + func: serverNotification.function.IsUserEmployeeInFieldValue } ) } diff --git a/models/server-tracker/src/index.ts b/models/server-tracker/src/index.ts index 4496a0d28c..2a8c7ddef0 100644 --- a/models/server-tracker/src/index.ts +++ b/models/server-tracker/src/index.ts @@ -45,7 +45,7 @@ export function createModel (builder: Builder): void { notification.class.NotificationType, serverNotification.mixin.TypeMatch, { - func: serverNotification.function.IsUserInFieldValue + func: serverNotification.function.IsUserEmployeeInFieldValue } ) } diff --git a/server-plugins/notification-resources/src/index.ts b/server-plugins/notification-resources/src/index.ts index b419b00766..9b7ee11ab5 100644 --- a/server-plugins/notification-resources/src/index.ts +++ b/server-plugins/notification-resources/src/index.ts @@ -407,11 +407,12 @@ function isTypeMatched ( tx: TxCUD, extractedTx: TxCUD ): boolean { - const targetClass = control.hierarchy.getBaseClass(type.objectClass) + const h = control.hierarchy + const targetClass = h.getBaseClass(type.objectClass) if (!type.txClasses.includes(extractedTx._class)) return false - if (!control.hierarchy.isDerived(extractedTx.objectClass, targetClass)) return false + if (!control.hierarchy.isDerived(h.getBaseClass(extractedTx.objectClass), targetClass)) return false if (tx._class === core.class.TxCollectionCUD && type.attachedToClass !== undefined) { - if (!control.hierarchy.isDerived(tx.objectClass, type.attachedToClass)) return false + if (!control.hierarchy.isDerived(h.getBaseClass(tx.objectClass), h.getBaseClass(type.attachedToClass))) return false } if (type.field !== undefined) { if (extractedTx._class === core.class.TxUpdateDoc) { @@ -779,6 +780,30 @@ export async function isUserInFieldValue ( } } +/** + * @public + */ +export async function isUserEmployeeInFieldValue ( + tx: Tx, + doc: Doc, + user: Ref, + type: NotificationType, + control: TriggerControl +): Promise { + if (type.field === undefined) return false + const value = (doc as any)[type.field] + if (value === undefined) return false + const employee = ( + await control.modelDb.findAll(contact.class.EmployeeAccount, { _id: user as Ref }) + )[0] + if (employee === undefined) return false + if (Array.isArray(value)) { + return value.includes(employee.employee) + } else { + return value === employee.employee + } +} + /** * @public */ @@ -797,7 +822,9 @@ export async function OnAttributeCreate (tx: Tx, control: TriggerControl): Promi ? [control.hierarchy.isMixin(attribute.attributeOf) ? core.class.TxMixin : core.class.TxUpdateDoc] : [core.class.TxCreateDoc, core.class.TxRemoveDoc] const data: Data = { + attribute: attribute._id, group: group._id, + field: attribute.name, generated: true, objectClass, txClasses, @@ -846,6 +873,7 @@ export default async () => ({ OnAttributeUpdate }, function: { - IsUserInFieldValue: isUserInFieldValue + IsUserInFieldValue: isUserInFieldValue, + IsUserEmployeeInFieldValue: isUserEmployeeInFieldValue } }) diff --git a/server-plugins/notification/src/index.ts b/server-plugins/notification/src/index.ts index 6458bdd695..8b90548fcd 100644 --- a/server-plugins/notification/src/index.ts +++ b/server-plugins/notification/src/index.ts @@ -199,6 +199,7 @@ export default plugin(serverNotificationId, { OnAttributeUpdate: '' as Resource }, function: { - IsUserInFieldValue: '' as TypeMatchFunc + IsUserInFieldValue: '' as TypeMatchFunc, + IsUserEmployeeInFieldValue: '' as TypeMatchFunc } })