From c9f70073e5881b864addfd29b91c15f972d8b56b Mon Sep 17 00:00:00 2001 From: EL HAJJIOUI Nabil <nabil.elhajjioui@smile.fr> Date: Thu, 2 Sep 2021 17:30:51 +0200 Subject: [PATCH] Add redirection from archive to logbook operations --- .../ui-archive-search-application-dev.yml | 1 + .../src/app/modules/startup.service.ts | 2 +- .../archive-search.component.ts | 73 +++++++++++++------ .../vitamui-snack-bar.component.html | 24 +++--- .../vitamui-snack-bar.component.ts | 6 +- .../logbook-operation.component.ts | 29 ++++++-- 6 files changed, 91 insertions(+), 44 deletions(-) diff --git a/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml b/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml index 3efd2757f..722b870c1 100644 --- a/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml +++ b/ui/ui-archive-search/src/main/config/ui-archive-search-application-dev.yml @@ -72,6 +72,7 @@ ui-archive-search: portal: "https://dev.vitamui.com:4200" archives-search: "https://dev.vitamui.com:4209/archive-search" ingest: "https://dev.vitamui.com:4208/ingest" + referential: "https://dev.vitamui.com:4202/referential" portal-categories: ingest_and_consultation: diff --git a/ui/ui-frontend-common/src/app/modules/startup.service.ts b/ui/ui-frontend-common/src/app/modules/startup.service.ts index cefba1860..8483519e2 100644 --- a/ui/ui-frontend-common/src/app/modules/startup.service.ts +++ b/ui/ui-frontend-common/src/app/modules/startup.service.ts @@ -226,7 +226,7 @@ export class StartupService { getReferentialUrl(): string { if (this.configurationLoaded()) { - return this.configurationData.REFERENTIAL_SEARCH_URL; + return this.configurationData.REFERENTIAL_URL; } return null; diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts index b24b5afe8..4f374bb24 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/archive-search.component.ts @@ -38,11 +38,12 @@ import { HttpErrorResponse } from '@angular/common/http'; import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { MatDialog, MatDialogConfig } from '@angular/material/dialog'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { merge, Subject, Subscription } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; -import { Direction } from 'ui-frontend-common'; +import { Direction, StartupService } from 'ui-frontend-common'; import { ArchiveSharedDataServiceService } from '../../core/archive-shared-data-service.service'; import { ArchiveService } from '../archive.service'; import { FilingHoldingSchemeNode } from '../models/node.interface'; @@ -55,9 +56,10 @@ import { SearchCriteriaCategory, SearchCriteriaEltDto, SearchCriteriaStatusEnum, - SearchCriteriaTypeEnum, + SearchCriteriaTypeEnum } from '../models/search.criteria'; import { Unit } from '../models/unit.interface'; +import { VitamUISnackBarComponent } from '../shared/vitamui-snack-bar'; import { SearchCriteriaSaverComponent } from './search-criteria-saver/search-criteria-saver.component'; const BUTTON_MAX_TEXT = 40; @@ -68,7 +70,7 @@ const FILTER_DEBOUNCE_TIME_MS = 400; @Component({ selector: 'app-archive-search', templateUrl: './archive-search.component.html', - styleUrls: ['./archive-search.component.scss'], + styleUrls: ['./archive-search.component.scss'] }) export class ArchiveSearchComponent implements OnInit, OnChanges { constructor( @@ -76,6 +78,8 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { private translateService: TranslateService, private route: ActivatedRoute, private archiveExchangeDataService: ArchiveSharedDataServiceService, + private startupService: StartupService, + public snackBar: MatSnackBar, public dialog: MatDialog ) { this.subscriptionEntireNodes = this.archiveExchangeDataService.getEntireNodes().subscribe((nodes) => { @@ -147,7 +151,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { this.archiveService.getOntologiesFromJson().subscribe((data: any) => { this.ontologies = data; - this.ontologies.sort(function (a: any, b: any) { + this.ontologies.sort(function(a: any, b: any) { const shortNameA = a.Label; const shortNameB = b.Label; return shortNameA < shortNameB ? -1 : shortNameA > shortNameB ? 1 : 0; @@ -185,7 +189,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { archiveUnits: Unit[]; ontologies: any; filterMapType: { [key: string]: string[] } = { - status: ['Folder', 'Document', 'Subfonds', 'Class', 'Subgrp', 'Otherlevel', 'Series', 'Subseries', 'Collection', 'Fonds'], + status: ['Folder', 'Document', 'Subfonds', 'Class', 'Subgrp', 'Otherlevel', 'Series', 'Subseries', 'Collection', 'Fonds'] }; shouldShowPreviewArchiveUnit = false; @@ -278,7 +282,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { 'Series', 'Subseries', 'Collection', - 'Fonds', + 'Fonds' ]; const searchCriteriaChange = merge(this.orderChange, this.filterChange).pipe(debounceTime(FILTER_DEBOUNCE_TIME_MS)); @@ -352,7 +356,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { this.archiveExchangeDataService.sendAppraisalFromMainSearchCriteriaAction({ keyElt, valueElt, - action: 'REMOVE', + action: 'REMOVE' }); } } @@ -426,7 +430,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { valueShown: true, status: SearchCriteriaStatusEnum.NOT_INCLUDED, keyTranslated, - valueTranslated, + valueTranslated }); criteria.values = values; this.searchCriterias.set(keyElt, criteria); @@ -447,7 +451,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { valueShown: true, status: SearchCriteriaStatusEnum.NOT_INCLUDED, keyTranslated, - valueTranslated, + valueTranslated }); const criteria = { key: keyElt, @@ -456,7 +460,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { category, keyTranslated, valueTranslated, - dataType, + dataType }; this.searchCriterias.set(keyElt, criteria); } @@ -509,7 +513,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: strValues, operator: criteria.operator, category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.NODES], - dataType: criteria.dataType, + dataType: criteria.dataType }); } }); @@ -528,7 +532,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: strValues, operator: criteria.operator, category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: criteria.dataType, + dataType: criteria.dataType }); } }); @@ -551,7 +555,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: typesFilterValues, operator: 'EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: 'STRING', + dataType: 'STRING' }); } } @@ -570,7 +574,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: [...new Array({ id: value, value })], operator: 'EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.APPRAISAL_RULE], - dataType: criteria.dataType, + dataType: criteria.dataType }); }); } else { @@ -583,7 +587,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: strValues, operator: criteria.operator, category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.APPRAISAL_RULE], - dataType: criteria.dataType, + dataType: criteria.dataType }); } this.updateCriteriaStatus(SearchCriteriaStatusEnum.NOT_INCLUDED, SearchCriteriaStatusEnum.IN_PROGRESS); @@ -599,7 +603,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { criteriaList: this.criteriaSearchList, pageNumber: this.currentPage, size: PAGE_SIZE, - sortingCriteria, + sortingCriteria }; this.archiveService.searchArchiveUnitsByCriteria(searchCriteria, this.accessContract).subscribe( (pagedResult: PagedResult) => { @@ -652,7 +656,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { operator: criteria.operator, keyTranslated: criteria.keyTranslated, valueTranslated: criteria.valueTranslated, - dataType: criteria.dataType, + dataType: criteria.dataType }); }); @@ -660,7 +664,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { id: null, name: '', savingDate: new Date().toISOString(), - searchCriteriaList: _criteriaList, + searchCriteriaList: _criteriaList }; this.openCriteriaPopup(_searchCriteriaHistory); @@ -673,7 +677,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { dialogConfig.data = { searchCriteriaHistory: searchCriteriaHistory$, originalSearchCriteria: this.searchCriterias, - nbCriterias: this.archiveExchangeDataService.nbFilters(searchCriteriaHistory$), + nbCriterias: this.archiveExchangeDataService.nbFilters(searchCriteriaHistory$) }; const dialogRef = this.dialog.open(SearchCriteriaSaverComponent, dialogConfig); @@ -860,7 +864,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { pageNumber: this.currentPage, size: PAGE_SIZE, sortingCriteria, - language: this.translateService.currentLang, + language: this.translateService.currentLang }; this.archiveService.exportCsvSearchArchiveUnitsByCriteria(searchCriteria, this.accessContract); } @@ -952,10 +956,21 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { pageNumber: this.currentPage, size: PAGE_SIZE, sortingCriteria, - language: this.translateService.currentLang, + language: this.translateService.currentLang }; this.archiveService.exportDIP(exportDIPSearchCriteria, this.accessContract).subscribe((data) => { console.log('response', JSON.parse(data)); + const guid = 'aeeaaaaaaggtywctaanl4al3rxsbxziaaaaq'; + const message = 'custom message for different workflows'; + let index = this.startupService.getReferentialUrl().lastIndexOf('/'); + let serviceUrl = + this.startupService.getReferentialUrl().substring(0, index) + + '/logbook-operation/tenant/' + + this.tenantIdentifier + + '?guid=' + + guid; + + this.openSnackBarForWorkflow(message, serviceUrl + ''); }); } @@ -974,7 +989,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: listOfUAIdToInclude, operator: 'EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: 'String', + dataType: 'String' }); } @@ -984,7 +999,7 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { values: listOfUAIdToExclude, operator: 'NOT_EQ', category: SearchCriteriaTypeEnum[SearchCriteriaTypeEnum.FIELDS], - dataType: 'String', + dataType: 'String' }); } } @@ -998,4 +1013,16 @@ export class ArchiveSearchComponent implements OnInit, OnChanges { this.itemNotSelected = 0; this.isAllchecked = false; } + + openSnackBarForWorkflow(message: string, serviceUrl?: string) { + this.snackBar.openFromComponent(VitamUISnackBarComponent, { + panelClass: 'vitamui-snack-bar', + data: { + type: 'WorkflowSuccessSnackBar', + message: message, + serviceUrl: serviceUrl + }, + duration: 100000 + }); + } } diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.html b/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.html index be37b5ad3..089920707 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.html +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.html @@ -1,25 +1,29 @@ <div class="vitamui-snack-bar-container"> - <span class="vitamui-snack-bar-content" [ngSwitch]="data?.type"> - <ng-container *ngSwitchCase="'sipUploaded'"> <i class="vitamui-icon vitamui-icon-archive-ingest"></i> Un ou plusieurs versement(s) sont en cours - <br/> + <br /> <span> (Merci de ne pas éteindre votre navigateur pendant le processus)</span> - </ng-container> + </ng-container> <ng-container *ngSwitchCase="'searchCriteriaHistoryCreated'"> - {{'ARCHIVE_SEARCH.SEARCH_CRITERIA_SAVER.SAVED_WITH_SUCCESS' | translate}} "<strong>{{ data?.name }}</strong>" + {{ 'ARCHIVE_SEARCH.SEARCH_CRITERIA_SAVER.SAVED_WITH_SUCCESS' | translate }} "<strong>{{ data?.name }}</strong + >" </ng-container> - <ng-container *ngSwitchCase="'exportCsvLimitReached'"> - <span> {{'ARCHIVE_SEARCH.EXPORT_CSV.EXPORT_CSV_LIMIT_REACHED' | translate}} </span> + <ng-container *ngSwitchCase="'exportCsvLimitReached'"> + <span> {{ 'ARCHIVE_SEARCH.EXPORT_CSV.EXPORT_CSV_LIMIT_REACHED' | translate }} </span> </ng-container> <ng-container *ngSwitchCase="'searchCriteriaHistoryDeleted'"> - {{'ARCHIVE_SEARCH.SEARCH_CRITERIA_SAVER.DELETED_WITH_SUCCESS_1' | translate}} "<strong>{{ data?.name }}</strong> " {{'ARCHIVE_SEARCH.SEARCH_CRITERIA_SAVER.DELETED_WITH_SUCCESS_2' | translate}} + {{ 'ARCHIVE_SEARCH.SEARCH_CRITERIA_SAVER.DELETED_WITH_SUCCESS_1' | translate }} "<strong>{{ data?.name }}</strong> " + {{ 'ARCHIVE_SEARCH.SEARCH_CRITERIA_SAVER.DELETED_WITH_SUCCESS_2' | translate }} + </ng-container> + <ng-container *ngSwitchCase="'WorkflowSuccessSnackBar'"> + {{ data?.message }} + <button type="button" class="btn white" (click)="goToLogbook(data?.serviceUrl)"> + VOIR LE JOURNAL DES OPÉRATIONS + </button> </ng-container> </span> - <button class="close-btn" (click)="close()"><i class="material-icons">clear</i></button> - </div> diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.ts index 32676bf43..5453e100c 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/shared/vitamui-snack-bar/vitamui-snack-bar.component.ts @@ -35,7 +35,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ import { Component, Inject } from '@angular/core'; -import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar'; +import { MatSnackBarRef, MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar'; @Component({ selector: 'app-vitamui-snack-bar', @@ -43,11 +43,13 @@ import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar' styleUrls: ['./vitamui-snack-bar.component.scss'] }) export class VitamUISnackBarComponent { - constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any, private matSnackBarRef: MatSnackBarRef<VitamUISnackBarComponent>) {} close() { this.matSnackBarRef.dismiss(); } + goToLogbook(url: string) { + window.location.href = url; + } } diff --git a/ui/ui-frontend/projects/referential/src/app/logbook-operation/logbook-operation.component.ts b/ui/ui-frontend/projects/referential/src/app/logbook-operation/logbook-operation.component.ts index 51cfbbb44..1fc486772 100644 --- a/ui/ui-frontend/projects/referential/src/app/logbook-operation/logbook-operation.component.ts +++ b/ui/ui-frontend/projects/referential/src/app/logbook-operation/logbook-operation.component.ts @@ -34,13 +34,11 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ -import { GlobalEventService, SearchBarComponent, SidenavPage } from 'ui-frontend-common'; - import { Component, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; - -import {MatDialog} from '@angular/material/dialog'; +import { GlobalEventService, SearchBarComponent, SidenavPage } from 'ui-frontend-common'; import { EventFilter } from './event-filter.interface'; import { LogbookOperationListComponent } from './logbook-operation-list/logbook-operation-list.component'; @@ -50,14 +48,13 @@ import { LogbookOperationListComponent } from './logbook-operation-list/logbook- styleUrls: ['./logbook-operation.component.scss'] }) export class LogbookOperationComponent extends SidenavPage<any> implements OnInit { - search = ''; dateRangeFilterForm: FormGroup; tenantIdentifier: number; filters: Readonly<EventFilter> = {}; + workflowGuidToSearch: string; - - @ViewChild(SearchBarComponent, {static: true}) searchBar: SearchBarComponent; + @ViewChild(SearchBarComponent, { static: true }) searchBar: SearchBarComponent; @ViewChild(LogbookOperationListComponent, { static: true }) list: LogbookOperationListComponent; constructor( @@ -69,7 +66,7 @@ export class LogbookOperationComponent extends SidenavPage<any> implements OnIni ) { super(route, globalEventService); - this.route.paramMap.subscribe((paramMap) => this.tenantIdentifier = + paramMap.get('tenantIdentifier')); + this.route.paramMap.subscribe((paramMap) => (this.tenantIdentifier = +paramMap.get('tenantIdentifier'))); this.dateRangeFilterForm = this.formBuilder.group({ startDate: null, @@ -86,11 +83,27 @@ export class LogbookOperationComponent extends SidenavPage<any> implements OnIni } ngOnInit() { + this.route.queryParams.subscribe((params) => { + if (params.guid) { + console.log(params); + this.workflowGuidToSearch = params.guid; + this.searchBar.searchValue = this.workflowGuidToSearch; + console.log(this.workflowGuidToSearch); + this.onSearchSubmit(this.workflowGuidToSearch); + this.openOperationDetail(); + } + }); if (!this.list) { console.error('LogbookOperationComponent Error: no list in the template'); } } + openOperationDetail() { + setTimeout(() => { + this.list.eventClick.emit(this.list.dataSource[0]); + }, 2000); + } + changeTenant(tenantIdentifier: number) { this.router.navigate(['..', tenantIdentifier], { relativeTo: this.route }); } -- GitLab