From 14de8283d2b3d237ef8eee8d8db465251e8c2fd6 Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Mon, 12 Oct 2020 16:29:19 +0200
Subject: [PATCH] FEAT #15051 TIME 0:35 front CheckAcknowledgment action

---
 core/xml/actions_pages.xml                    | 10 +++
 src/core/lang/lang-fr.php                     | 11 ++-
 src/frontend/app/actions/actions.service.ts   | 24 ++++++
 ...wledgment-record-management.component.html | 43 ++++++++++
 ...wledgment-record-management.component.scss | 20 +++++
 ...nowledgment-record-management.component.ts | 81 +++++++++++++++++++
 ...eck-reply-record-management.component.html |  5 --
 src/frontend/app/app.module.ts                |  2 +
 src/lang/lang-fr.json                         |  3 +-
 9 files changed, 189 insertions(+), 10 deletions(-)
 create mode 100644 src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.html
 create mode 100644 src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.scss
 create mode 100644 src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.ts

diff --git a/core/xml/actions_pages.xml b/core/xml/actions_pages.xml
index c1fc6c52f60..e81a43981e0 100755
--- a/core/xml/actions_pages.xml
+++ b/core/xml/actions_pages.xml
@@ -486,4 +486,14 @@ An action page is described in a ACTIONPAGE tag :
         <MODULE>recordManagement</MODULE>
         <FLAG_CREATE>false</FLAG_CREATE>
     </ACTIONPAGE>
+    <ACTIONPAGE>
+        <ID>checkAcknowledgmentRecordManagement</ID>
+        <LABEL>_CHECK_ACKNOWLEDGMENT_RECORD_MANAGEMENT</LABEL>
+        <NAME>checkAcknowledgmentRecordManagement</NAME>
+        <DESC>_CHECK_ACKNOWLEDGMENT_RECORD_MANAGEMENT_DESC</DESC>
+        <component>checkAcknowledgmentRecordManagementAction</component>
+        <ORIGIN>apps</ORIGIN>
+        <MODULE>recordManagement</MODULE>
+        <FLAG_CREATE>false</FLAG_CREATE>
+    </ACTIONPAGE>
 </ROOT>
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index 3c657978255..22a46fd2b00 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -484,8 +484,11 @@ define('_REGISTERED_MAIL_DISTRIBUTED', 'Accusé de réception reçu : recommand
 define('_REGISTERED_MAIL_NOT_DISTRIBUTED', 'Accusé de réception reçu : recommandé non distribué');
 
 define('_CONFIGURATION_UPDATED', 'Configuration modifiée');
-define('_SEND_TO_RECORD_MANAGEMENT', 'Envoyer dans un Système d\'Archivage Électronique');
-define('_SEND_TO_RECORD_MANAGEMENT_DESC', 'Envoyer dans un Système d\'Archivage Électronique');
+define('_SEND_TO_RECORD_MANAGEMENT', 'Envoyer dans un système d\'archivage électronique');
+define('_SEND_TO_RECORD_MANAGEMENT_DESC', 'Envoyer dans un système d\'archivage électronique');
 
-define('_CHECK_REPLY_RECORD_MANAGEMENT', 'Vérification de la réponse au transfert');
-define('_CHECK_REPLY_RECORD_MANAGEMENT_DESC', 'Vérification de la réponse au transfert');
\ No newline at end of file
+define('_CHECK_REPLY_RECORD_MANAGEMENT', 'Vérification de la réponse au transfert du système d\'archivage électronique');
+define('_CHECK_REPLY_RECORD_MANAGEMENT_DESC', 'Vérification de la réponse au transfert du système d\'archivage électronique');
+
+define('_CHECK_ACKNOWLEDGMENT_RECORD_MANAGEMENT', 'Vérification du transfert du paquet au système d\'archivage électronique');
+define('_CHECK_ACKNOWLEDGMENT_RECORD_MANAGEMENT_DESC', 'Vérification du transfert du paquet au système d\'archivage électronique');
\ No newline at end of file
diff --git a/src/frontend/app/actions/actions.service.ts b/src/frontend/app/actions/actions.service.ts
index 0804f7c7ea2..4dd7b7e2e92 100644
--- a/src/frontend/app/actions/actions.service.ts
+++ b/src/frontend/app/actions/actions.service.ts
@@ -43,6 +43,7 @@ import { PrintRegisteredMailActionComponent } from './print-registered-mail-acti
 import { PrintDepositListActionComponent } from './print-deposit-list-action/print-deposit-list-action.component';
 import { SendToRecordManagementComponent } from './send-to-record-management/send-to-record-management.component';
 import { CheckReplyRecordManagementComponent } from './check-reply-record-management/check-reply-record-management.component';
+import { CheckAcknowledgmentRecordManagementComponent } from './check-acknowledgment-record-management/check-acknowledgment-record-management.component';
 
 @Injectable()
 export class ActionsService implements OnDestroy {
@@ -1144,4 +1145,27 @@ export class ActionsService implements OnDestroy {
             })
         ).subscribe();
     }
+
+    checkAcknowledgmentRecordManagementAction(options: any = null) {
+        const dialogRef = this.dialog.open(CheckAcknowledgmentRecordManagementComponent, {
+            panelClass: 'maarch-modal',
+            autoFocus: false,
+            disableClose: true,
+            data: this.setDatasActionToSend()
+        });
+        dialogRef.afterClosed().pipe(
+            tap((data: any) => {
+                this.unlockResourceAfterActionModal(data);
+            }),
+            filter((data: string) => data === 'success'),
+            tap((result: any) => {
+                this.endAction(result);
+            }),
+            finalize(() => this.loading = false),
+            catchError((err: any) => {
+                this.notify.handleErrors(err);
+                return of(false);
+            })
+        ).subscribe();
+    }
 }
diff --git a/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.html b/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.html
new file mode 100644
index 00000000000..e48c68bd0c5
--- /dev/null
+++ b/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.html
@@ -0,0 +1,43 @@
+<div class="mat-dialog-content-container">
+    <h1 mat-dialog-title>{{data.action.label}}</h1>
+    <div mat-dialog-content>
+        <div *ngIf="checking" class="checking" color="primary" style="display:flex;height:100%;justify-content: center;padding: 30px;">
+            <mat-spinner diameter="24"></mat-spinner>&nbsp;{{'lang.checkInProgress' | translate}} ...
+        </div>
+        <div *ngIf="loading" class="loading" color="primary">
+            <mat-spinner></mat-spinner>
+        </div>
+        <div class="row" *ngIf="!checking">
+            <div class="alert-message alert-message-info" role="alert" style="margin-top: 0px;" [innerHTML]="'lang.checkAcknowledgmentRecordManagementDesc' | translate"></div>
+            <ng-container *ngIf="data.resIds.length > 0">
+                <div class="col-md-12">
+                    {{'lang.makeActionOn' | translate}}
+                    <b *ngIf="data.resIds.length === 0" color="primary"
+                        class="highlight">{{'lang.currentIndexingMail' | translate}}</b>
+                    <b *ngIf="data.resIds.length === 1" color="primary" class="highlight">{{data.resource.chrono}}</b>
+                    <b *ngIf="data.resIds.length > 1" color="primary" class="highlight">{{data.resIds.length}}
+                        {{'lang.elements' | translate}}</b> ?
+                </div>
+                <div class="col-md-12">
+                    <div *ngIf="resourcesErrors.length > 0" class="alert-message alert-message-danger mailList"
+                        style="max-width: 100%;">
+                        <p>
+                            {{'lang.canNotMakeAction' | translate}} :
+                        </p>
+                        <ul>
+                            <li *ngFor="let ressource of resourcesErrors">
+                                <b>{{ressource.alt_identifier}}</b> : {{'lang.' + ressource.reason | translate}}
+                            </li>
+                        </ul>
+                    </div>
+                </div>
+            </ng-container>
+        </div>
+    </div>
+    <span class="divider-modal"></span>
+    <div mat-dialog-actions class="actions">
+        <button mat-raised-button mat-button color="primary" [disabled]="loading || selectedRes.length == 0"
+            (click)="onSubmit()">{{'lang.validate' | translate}}</button>
+        <button mat-raised-button mat-button [disabled]="loading" [mat-dialog-close]="">{{'lang.cancel' | translate}}</button>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.scss b/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.scss
new file mode 100644
index 00000000000..f978990ea48
--- /dev/null
+++ b/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.scss
@@ -0,0 +1,20 @@
+.loading {
+    position: absolute;
+    display: flex;
+    height: 100%;
+    justify-content: center;
+    width: 100%;
+    left: 0px;
+    top: 0px;
+    align-items: center;
+    z-index: 1;
+    background: rgba(255, 255, 255, 0.8);
+}
+
+.checking {
+    display: flex;
+    height: 100%;
+    justify-content: center;
+    align-items: center;
+    padding: 30px;
+}
\ No newline at end of file
diff --git a/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.ts b/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.ts
new file mode 100644
index 00000000000..0033a9caad1
--- /dev/null
+++ b/src/frontend/app/actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component.ts
@@ -0,0 +1,81 @@
+import { HttpClient } from '@angular/common/http';
+import { Component, Inject, OnInit, ViewChild } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { NoteEditorComponent } from '@appRoot/notes/note-editor.component';
+import { TranslateService } from '@ngx-translate/core';
+import { FunctionsService } from '@service/functions.service';
+import { NotificationService } from '@service/notification/notification.service';
+import { of } from 'rxjs';
+import { catchError, finalize, tap } from 'rxjs/operators';
+
+@Component({
+    selector: 'app-check-acknowledgment-record-management',
+    templateUrl: './check-acknowledgment-record-management.component.html',
+    styleUrls: ['./check-acknowledgment-record-management.component.scss']
+})
+export class CheckAcknowledgmentRecordManagementComponent implements OnInit {
+
+    loading: boolean = false;
+    checking: boolean = true;
+    resourcesErrors: any[] = [];
+    selectedRes: number[] = [];
+
+    @ViewChild('noteEditor', { static: false }) noteEditor: NoteEditorComponent;
+
+    constructor(
+        public translate: TranslateService,
+        public http: HttpClient,
+        private notify: NotificationService,
+        public dialogRef: MatDialogRef<CheckAcknowledgmentRecordManagementComponent>,
+        @Inject(MAT_DIALOG_DATA) public data: any,
+        public functions: FunctionsService
+    ) { }
+
+    ngOnInit(): void {
+        // this.checkReply();
+
+        // FOR TEST
+        setTimeout(() => {
+            this.checking = false;
+            this.selectedRes = this.data.resIds;
+        }, 2000);
+    }
+
+    checkReply() {
+        this.http.post(`../rest/resourcesList/users/${this.data.userId}/groups/${this.data.groupId}/baskets/${this.data.basketId}/actions/${this.data.action.id}/checkCloseWithFieldsAction`, { resources: this.data.resIds }).pipe(
+            tap((data: any) => {
+                // TO DO
+                this.resourcesErrors = data.errors;
+                this.selectedRes = data.success;
+            }),
+            finalize(() => this.loading = false),
+            catchError((err: any) => {
+                this.notify.handleSoftErrors(err);
+                return of(false);
+            })
+        ).subscribe();
+    }
+
+    onSubmit() {
+        this.loading = true;
+        // this.executeAction();
+
+        // FOR TEST
+        setTimeout(() => {
+            this.loading = false;
+        }, 3000);
+    }
+
+    executeAction() {
+        this.http.put(this.data.processActionRoute, { resources: this.selectedRes, note: this.noteEditor.getNote() }).pipe(
+            tap(() => {
+                this.dialogRef.close(this.selectedRes);
+            }),
+            finalize(() => this.loading = false),
+            catchError((err: any) => {
+                this.notify.handleSoftErrors(err);
+                return of(false);
+            })
+        ).subscribe();
+    }
+}
diff --git a/src/frontend/app/actions/check-reply-record-management/check-reply-record-management.component.html b/src/frontend/app/actions/check-reply-record-management/check-reply-record-management.component.html
index feed343fd65..4c56e622792 100644
--- a/src/frontend/app/actions/check-reply-record-management/check-reply-record-management.component.html
+++ b/src/frontend/app/actions/check-reply-record-management/check-reply-record-management.component.html
@@ -31,11 +31,6 @@
                         </ul>
                     </div>
                 </div>
-                <div *ngIf="!selectedRes.length === 0" class="col-md-12">
-                    <div class="alert-message alert-message-info" role="alert" style="max-width: 100%;"
-                        [innerHTML]="data.resIds.length === 1 ? this.translate.instant('lang.reconcileMsg') : this.translate.instant('lang.reconcileMsg') + '<br/>' + this.translate.instant('lang.reconcileMsg2')">
-                    </div>
-                </div>
             </ng-container>
         </div>
     </div>
diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts
index 4183df23cc9..f8406efc318 100755
--- a/src/frontend/app/app.module.ts
+++ b/src/frontend/app/app.module.ts
@@ -66,6 +66,7 @@ import { PrintRegisteredMailActionComponent } from './actions/print-registered-m
 import { PrintDepositListActionComponent } from './actions/print-deposit-list-action/print-deposit-list-action.component';
 import { SendToRecordManagementComponent } from './actions/send-to-record-management/send-to-record-management.component';
 import { CheckReplyRecordManagementComponent } from './actions/check-reply-record-management/check-reply-record-management.component';
+import { CheckAcknowledgmentRecordManagementComponent } from './actions/check-acknowledgment-record-management/check-acknowledgment-record-management.component';
 
 
 // PROCESS
@@ -236,6 +237,7 @@ export class MyHammerConfig extends HammerGestureConfig {
         ReconcileActionComponent,
         SendToRecordManagementComponent,
         CheckReplyRecordManagementComponent,
+        CheckAcknowledgmentRecordManagementComponent,
     ],
     exports : [
         SharedModule
diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json
index ceda8d33cc0..c2aa9ae71dd 100644
--- a/src/lang/lang-fr.json
+++ b/src/lang/lang-fr.json
@@ -2067,6 +2067,7 @@
     "senderArchiveEntity": "Service versant",
     "descriptionLevel": "Niveau de description",
     "archiveId": "Identifiant de l'archive",
-    "checkReplyRecordManagementDesc": "Vérifie les <b>réponses</b> des paquets transférés au <b>système d'archivage</b>",
+    "checkReplyRecordManagementDesc": "Vérifie les <b>réponses</b> des paquets qui on été transférés au <b>système d'archivage électronique</b>.",
+    "checkAcknowledgmentRecordManagementDesc": "Vérifie si le <b>système d'archivage électronique</b> a bien reçu les <b>paquets</b>.",
     "checkInProgress": "Vérification en cours"
 }
-- 
GitLab