From 420c59a8628c4ed58145de48b2764460dea94713 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Wed, 20 Nov 2024 17:15:15 +0200 Subject: [PATCH] RED-10498 - added the locked rules indicator; implemented the reset --- .../guards/dossier-template-exists.guard.ts | 2 ++ .../dossier-template-details.component.html | 10 ++++++++ .../dossier-template-details.component.scss | 8 ++++++ .../dossier-template-details.component.ts | 25 ++++++++++++++++--- .../modules/admin/services/rules.service.ts | 4 +++ apps/red-ui/src/assets/i18n/redact/de.json | 5 ++++ apps/red-ui/src/assets/i18n/redact/en.json | 5 ++++ apps/red-ui/src/assets/i18n/scm/de.json | 5 ++++ apps/red-ui/src/assets/i18n/scm/en.json | 5 ++++ 9 files changed, 66 insertions(+), 3 deletions(-) diff --git a/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts b/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts index e555969dd..8c3184cc1 100644 --- a/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts +++ b/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts @@ -23,12 +23,14 @@ export function templateExistsWhenEnteringAdmin(): CanActivateFn { const defaultColorsService = inject(DefaultColorsService); const watermarksService = inject(WatermarkService); const router = inject(Router); + const rulesService = inject(RulesService); const isDocumine = getConfig().IS_DOCUMINE; const dossierTemplate = inject(DossierTemplateStatsService).get(dossierTemplateId); await firstValueFrom(fileAttributesService.loadFileAttributesConfig(dossierTemplateId)); await firstValueFrom(dictionaryService.loadDictionaryDataForDossierTemplate(dossierTemplateId)); await firstValueFrom(defaultColorsService.loadForDossierTemplate(dossierTemplateId)); + await firstValueFrom(rulesService.getFor(dossierTemplateId)); if (!isDocumine) { await firstValueFrom(watermarksService.loadForDossierTemplate(dossierTemplateId)); } diff --git a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.html b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.html index d8fa1b64c..2ef1b2e8c 100644 --- a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.html @@ -34,6 +34,16 @@ +
+ + {{ 'dossier-template-info-screen.rules-reset.label' | translate }} +
+
{{ 'dossier-template-info-screen.entries' | translate: { count: ctx.stats.numberOfEntries } }} diff --git a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.scss b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.scss index dd00e21c8..eda21743e 100644 --- a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.scss +++ b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.scss @@ -18,3 +18,11 @@ padding-right: 24px; margin-right: 24px; } + +.error { + color: var(--iqser-primary); +} + +.action-icon { + cursor: pointer; +} diff --git a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.ts b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.ts index a6dab16e7..49c904e80 100644 --- a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-details/dossier-template-details.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, computed, Input, OnInit } from '@angular/core'; import { ContextComponent } from '@iqser/common-ui/lib/utils'; import { type DossierTemplate, type DossierTemplateStats } from '@red/domain'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; @@ -9,6 +9,11 @@ import { MatIcon } from '@angular/material/icon'; import { TranslateModule } from '@ngx-translate/core'; import { InitialsAvatarComponent } from '@common-ui/users'; import { DatePipe } from '@shared/pipes/date.pipe'; +import { RulesService } from '../../../services/rules.service'; +import { Toaster } from '@iqser/common-ui'; +import { MatTooltip } from '@angular/material/tooltip'; +import { firstValueFrom } from 'rxjs'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; interface Context { readonly dossierTemplate: DossierTemplate; @@ -20,16 +25,20 @@ interface Context { templateUrl: './dossier-template-details.component.html', styleUrls: ['./dossier-template-details.component.scss'], standalone: true, - imports: [NgIf, AsyncPipe, MatIcon, TranslateModule, DatePipe, InitialsAvatarComponent], + imports: [NgIf, AsyncPipe, MatIcon, TranslateModule, DatePipe, InitialsAvatarComponent, MatTooltip], }) export class DossierTemplateDetailsComponent extends ContextComponent implements OnInit { readonly translations = dossierTemplateStatusTranslations; - @Input({ required: true }) dossierTemplateId: string; + readonly areRulesLocked = computed(() => { + return this._rulesService.currentTemplateRules().timeoutDetected; + }); constructor( private readonly _dossierTemplatesService: DossierTemplatesService, private readonly _dossierTemplateStatsService: DossierTemplateStatsService, + private readonly _rulesService: RulesService, + private readonly _toaster: Toaster, ) { super(); } @@ -40,4 +49,14 @@ export class DossierTemplateDetailsComponent extends ContextComponent i stats: this._dossierTemplateStatsService.watch$(this.dossierTemplateId), }); } + + async resetRules() { + try { + await firstValueFrom(this._rulesService.reset(this.dossierTemplateId)); + this._toaster.success(_('dossier-template-info-screen.rules-reset.success')); + await firstValueFrom(this._rulesService.getFor(this.dossierTemplateId)); + } catch (error) { + this._toaster.rawError(error.error.message); + } + } } diff --git a/apps/red-ui/src/app/modules/admin/services/rules.service.ts b/apps/red-ui/src/app/modules/admin/services/rules.service.ts index 09c20cc03..74eaa92cf 100644 --- a/apps/red-ui/src/app/modules/admin/services/rules.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/rules.service.ts @@ -33,4 +33,8 @@ export class RulesService extends EntitiesService { getFor(entityId: string, queryParams?: List): Observable { return super.getFor(entityId, queryParams).pipe(tap(rules => this.setEntities([rules as Rules]))); } + + reset(dossierTemplateId: string, ruleFileType: IRules['ruleFileType'] = 'ENTITY') { + return this._put(null, `${this._defaultModelPath}/${dossierTemplateId}/${ruleFileType}/reset`); + } } diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 6ca1ce677..df419bfb5 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -1087,6 +1087,11 @@ "entities": "{count} {count, plural, one{Entität} other{Entitäten}}", "entries": "{count} {count, plural, one{Eintrag} other{Einträge}}", "modified-on": "Geändert am: {date}", + "rules-reset": { + "label": "Regeln gesperrt", + "success": "Die Regeln der Dossier-Vorlage wurden erfolgreich zurückgesetzt.", + "tooltip": "Klicken Sie hier, um die Regeln zurückzusetzen" + }, "title": "Dossier-Vorlage bearbeiten", "valid-from": "Gültig ab: {date}", "valid-to": "Gültig bis: {Datum}" diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 8eb095fdf..008733c66 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1087,6 +1087,11 @@ "entities": "{count} {count, plural, one{entity} other{entities}}", "entries": "{count} {count, plural, one{entry} other{entries}}", "modified-on": "Modified on: {date}", + "rules-reset": { + "label": "Rules locked", + "success": "Dossier template rules successfully reset.", + "tooltip": "Click to reset rules" + }, "title": "Edit dossier template", "valid-from": "Valid from: {date}", "valid-to": "Valid to: {date}" diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 8cd4bf26e..80b01fd8a 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1087,6 +1087,11 @@ "entities": "{count} {count, plural, one{Entität} other{Entitäten}}", "entries": "{count} {count, plural, one{Eintrag} other{Einträge}}", "modified-on": "Geändert am {date}", + "rules-reset": { + "label": "Regeln gesperrt", + "success": "Die Regeln der Dossier-Vorlage wurden erfolgreich zurückgesetzt.", + "tooltip": "Klicken Sie hier, um die Regeln zurückzusetzen" + }, "title": "Dossier-Vorlage bearbeiten", "valid-from": "Gültig ab: {date}", "valid-to": "Gültig bis: {date}" diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 9b4efdfbd..e8795bf00 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1087,6 +1087,11 @@ "entities": "{count} {count, plural, one{entity} other{entities}}", "entries": "{count} {count, plural, one{entry} other{entries}}", "modified-on": "Modified on: {date}", + "rules-reset": { + "label": "Rules locked", + "success": "Dossier template rules successfully reset.", + "tooltip": "Click to reset rules" + }, "title": "Edit dossier template", "valid-from": "Valid from: {date}", "valid-to": "Valid to: {date}"