add notification type UI dropdown

This commit is contained in:
amentis 2024-01-04 15:17:56 +02:00
parent 0e1a9c88b1
commit 065cd249c9
8 changed files with 65 additions and 6 deletions

View File

@ -18,6 +18,8 @@ public class NotificationTemplatePersist {
@ValidEnum
private NotificationTemplateChannel channel;
@NotNull
@Valid
private UUID notificationType;
@ValidEnum

View File

@ -102,17 +102,14 @@ public class NotificationServiceTemplateImpl implements NotificationTemplateServ
data = this.entityManager.find(NotificationTemplateEntity.class, model.getId());
if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), NotificationTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
if (model.getNotificationType() != null){
data.setNotificationType(model.getNotificationType());
}
} else {
data = new NotificationTemplateEntity();
data.setId(UUID.randomUUID());
data.setIsActive(IsActive.Active);
data.setCreatedAt(Instant.now());
data.setNotificationType(UUID.randomUUID());
}
data.setNotificationType(model.getNotificationType());
data.setChannel(model.getChannel());
data.setKind(model.getKind());
data.setLanguageId(model.getLanguageId());

View File

@ -0,0 +1,13 @@
export enum NotificationType {
dmpInvitationExternalUser = '065deecd-21bb-44af-9983-e660fdf24bc4',
dmpInvitationExistingUser = '4904dea2-5079-46d3-83be-3a19c9ab45dc',
dmpModified = '4542262a-22f8-4baa-9db6-1c8e70ac1dbb',
dmpFinalised = '90db0b46-42de-bd89-aebf-6f27efeb256e',
descriptionModified = '4fdbfa80-7a71-4a69-b854-67cbb70648f1',
descriptionFinalised = '33790bad-94d4-488a-8ee2-7f6295ca18ea',
mergeAccountConfirmation = 'bfe68845-cb05-4c5a-a03d-29161a7c9660',
removeCredentialConfirmation = 'c9bc3f16-057e-4bba-8a5f-36bd835e5604',
dmpDeposit = '55736f7a-83ab-4190-af43-9d031a6f9612',
descriptionTemplateInvitation = '223bb607-efa1-4ce7-99ec-4beabfef9a8b'
}

View File

@ -26,6 +26,7 @@ import { DmpBlueprintType } from '../../common/enum/dmp-blueprint-type';
import { DmpStatus } from '../../common/enum/dmp-status';
import { ValidationType } from '../../common/enum/validation-type';
import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order';
import { NotificationType } from '@app/core/common/enum/notification-type';
@Injectable()
export class EnumUtils {
@ -316,4 +317,19 @@ export class EnumUtils {
case RecentActivityOrder.Status: return this.language.instant('TYPES.RECENT-ACTIVITY-ORDER.STATUS');
}
}
toNotificationTypeString(status: NotificationType): string {
switch (status) {
case NotificationType.dmpInvitationExternalUser: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DMP-INVITATION-EXTERNAL-USER');
case NotificationType.dmpInvitationExistingUser: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DMP-INVITATION-EXISTING-USER');
case NotificationType.dmpModified: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DMP-MODIFIED');
case NotificationType.dmpFinalised: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DMP-FINALISED');
case NotificationType.descriptionModified: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DESCRIPTION-MODIFIED');
case NotificationType.descriptionFinalised: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DESCRIPTION-FINALISED');
case NotificationType.mergeAccountConfirmation: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.MERGE-ACCOUNT-CONFIRMATION');
case NotificationType.removeCredentialConfirmation: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.REMOVE-CREDENTIAL-CONFIRMATION');
case NotificationType.dmpDeposit: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DMP-DEPOSIT');
case NotificationType.descriptionTemplateInvitation: return this.language.instant('TYPES.NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE.DESCRIPTION-TEMPLATE-INVITATION');
}
}
}

View File

@ -30,6 +30,16 @@
</mat-card-header>
<mat-card-content>
<div class="row">
<div class="col-4">
<mat-form-field class="w-100">
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.NOTIFICATION-TYPE' | translate}}</mat-label>
<mat-select [value] = "notificationType" (selectionChange)="selectedNotificationTypeChanged($event.value)" name="notificationType" required>
<mat-option *ngFor="let type of notificationTypeEnum" [value]="type">
{{enumUtils.toNotificationTypeString(type)}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="col-4">
<mat-form-field class="w-100">
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.LANGUAGE' | translate}}</mat-label>
@ -49,7 +59,7 @@
{{enumUtils.toNotificationTemplateKindString(kind)}}
</mat-option>
</mat-select>
<mat-error *ngIf="formGroup.get('channel').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
<mat-error *ngIf="formGroup.get('kind').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field>
</div>
<div class="col-4">

View File

@ -33,6 +33,7 @@ import { MatChipEditedEvent, MatChipInputEvent } from '@angular/material/chips';
import { MatCheckboxChange } from '@angular/material/checkbox';
import { NotificationDataType } from '@app/core/common/enum/notification-data-type';
import { EmailOverrideMode } from '@app/core/common/enum/email-override-mode';
import { NotificationType } from '@app/core/common/enum/notification-type';
@Component({
selector: 'app-notification-template-editor',
@ -56,6 +57,8 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
languageCode: string;
subjectFormatting: { [key: string]: string } = {};
bodyFormatting: { [key: string]: string } = {};
notificationType: string;
public notificationTypeEnum = this.enumUtils.getEnumValues(NotificationType);
public notificationTemplateKindEnum = this.enumUtils.getEnumValues(NotificationTemplateKind);
public notificationTemplateChannelEnum = this.enumUtils.getEnumValues(NotificationTemplateChannel);
public notificationDataTypeEnum = this.enumUtils.getEnumValues(NotificationDataType);
@ -121,6 +124,7 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
this.editorModel = data ? new NotificationTemplateEditorModel().fromModel(data) : new NotificationTemplateEditorModel();
if(data){
this.notificationType = data.notificationType.toString();
if(data.value && data.value.subjectFieldOptions){
this.subjectFieldOptionsEnabled = true;
this.subjectMandatoryFields = data.value.subjectFieldOptions.mandatory;
@ -220,6 +224,10 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
this.formService.validateAllFormFields(this.formGroup);
}
selectedNotificationTypeChanged(type: NotificationType){
this.formGroup.get('notificationType').patchValue(Guid.parse(type));
}
selectedLangChanged(code: string){
this.languageHttpService.getSingleWithCode(code, [nameof<Language>(x => x.id),nameof<Language>(x => x.code)])

View File

@ -57,7 +57,7 @@ export class NotificationTemplateEditorModel extends BaseEditorModel implements
const baseValidationArray: Validation[] = new Array<Validation>();
baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] });
baseValidationArray.push({ key: 'channel', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'channel')] });
baseValidationArray.push({ key: 'notificationType', validators: [BackendErrorValidator(this.validationErrorModel, 'notificationType')] });
baseValidationArray.push({ key: 'notificationType', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'notificationType')] });
baseValidationArray.push({ key: 'kind', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'kind')] });
baseValidationArray.push({ key: 'languageId', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'languageId')] });
baseValidationArray.push({ key: 'value', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'value')] });

View File

@ -1331,6 +1331,7 @@
"NOTIFICATION-TEMPLATE-EDITOR": {
"NEW": "New Notification Template",
"FIELDS": {
"NOTIFICATION-TYPE": "Notification Type",
"LANGUAGE": "Language",
"CHANNEL": "Channel",
"KIND": "Kind",
@ -2260,6 +2261,18 @@
"NOT": "Not Override",
"ADDITIVE": "Additive",
"REPLACE": "Replace"
},
"NOTIFICATION-TEMPLATE-NOTIFICATION-TYPE": {
"DMP-INVITATION-EXTERNAL-USER": "DMP Invitation External User",
"DMP-INVITATION-EXISTING-USER": "DMP Invitation Existing User",
"DMP-MODIFIED": "DMP Modified",
"DMP-FINALISED": "DMP Finalised",
"DESCRIPTION-MODIFIED": "Description Modified",
"DESCRIPTION-FINALISED": "Description Finalised",
"MERGE-ACCOUNT-CONFIRMATION": "Merge Account Confirmation",
"REMOVE-CREDENTIAL-CONFIRMATION": "Remove Credential Confirmation",
"DMP-DEPOSIT": "DMP Deposit",
"DESCRIPTION-TEMPLATE-INVITATION": "Description Template Invitation"
}
},
"ADDRESEARCHERS-EDITOR": {