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