From a1cf16223914e50c8a87df537bdf5b637ade1a3c Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Tue, 2 Jul 2019 18:49:24 +0200
Subject: [PATCH] FEAT #10828 TIME 1:20 add maarch parapheur list + move home
 component in home folder

---
 src/frontend/app/app-routing.module.ts        |  2 +-
 src/frontend/app/app.module.ts                |  4 +-
 src/frontend/app/home.component.scss          |  0
 .../app/{ => home}/home.component.html        | 13 +++-
 src/frontend/app/home/home.component.scss     | 13 ++++
 src/frontend/app/{ => home}/home.component.ts | 15 +++--
 .../maarch-parapheur-list.component.html      | 35 ++++++++++
 .../maarch-parapheur-list.component.scss      |  7 ++
 .../maarch-parapheur-list.component.ts        | 66 +++++++++++++++++++
 src/frontend/lang/lang-en.ts                  |  6 +-
 src/frontend/lang/lang-fr.ts                  |  6 +-
 src/frontend/lang/lang-nl.ts                  |  4 ++
 12 files changed, 159 insertions(+), 12 deletions(-)
 delete mode 100644 src/frontend/app/home.component.scss
 rename src/frontend/app/{ => home}/home.component.html (93%)
 mode change 100755 => 100644
 create mode 100644 src/frontend/app/home/home.component.scss
 rename src/frontend/app/{ => home}/home.component.ts (91%)
 mode change 100755 => 100644
 create mode 100644 src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.html
 create mode 100644 src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.scss
 create mode 100644 src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.ts

diff --git a/src/frontend/app/app-routing.module.ts b/src/frontend/app/app-routing.module.ts
index cd10fda4735..8303b020e8f 100755
--- a/src/frontend/app/app-routing.module.ts
+++ b/src/frontend/app/app-routing.module.ts
@@ -5,7 +5,7 @@ import { ActivateUserComponent }            from './activate-user.component';
 import { PasswordModificationComponent }    from './password-modification.component';
 import { ProfileComponent }                 from './profile.component';
 import { AboutUsComponent }                 from './about-us.component';
-import { HomeComponent }                    from './home.component';
+import { HomeComponent }                    from './home/home.component';
 import { BasketListComponent }              from './list/basket-list.component';
 import { SignatureBookComponent }           from './signature-book.component';
 import { SaveNumericPackageComponent }      from './save-numeric-package.component';
diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts
index 7cb8d3e77ae..8be5b4504c5 100755
--- a/src/frontend/app/app.module.ts
+++ b/src/frontend/app/app.module.ts
@@ -13,7 +13,8 @@ import { AdministrationModule }                 from './administration/administr
 
 import { ProfileComponent }                     from './profile.component';
 import { AboutUsComponent }                     from './about-us.component';
-import { HomeComponent }                        from './home.component';
+import { HomeComponent }                        from './home/home.component';
+import { MaarchParapheurListComponent }         from './home/maarch-parapheur/maarch-parapheur-list.component';
 import { BasketListComponent }                  from './list/basket-list.component';
 import { PasswordModificationComponent, InfoChangePasswordModalComponent, }        from './password-modification.component';
 import { SignatureBookComponent, SafeUrlPipe }  from './signature-book.component';
@@ -69,6 +70,7 @@ import { PrintSeparatorComponent }                        from './separator/prin
         ProfileComponent,
         AboutUsComponent,
         HomeComponent,
+        MaarchParapheurListComponent,
         BasketListComponent,
         PasswordModificationComponent,
         SignatureBookComponent,
diff --git a/src/frontend/app/home.component.scss b/src/frontend/app/home.component.scss
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/src/frontend/app/home.component.html b/src/frontend/app/home/home.component.html
old mode 100755
new mode 100644
similarity index 93%
rename from src/frontend/app/home.component.html
rename to src/frontend/app/home/home.component.html
index ba960b0261d..63e5a3e7131
--- a/src/frontend/app/home.component.html
+++ b/src/frontend/app/home/home.component.html
@@ -9,7 +9,8 @@
         <mat-divider></mat-divider>
     </mat-sidenav>
     <mat-sidenav-content>
-        <mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;"><img style="max-height: 100vh;" src="{{thumbnailUrl}}" />
+        <mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;"><img
+                style="max-height: 100vh;" src="{{thumbnailUrl}}" />
         </mat-card>
         <div class="bg-head">
             <div class="bg-head-title" [class.customContainerRight]="mobileMode">
@@ -111,11 +112,16 @@
                                     </div>
                                 </td>
                             </ng-container>
-
                             <tr mat-row *matRowDef="let row; columns: displayedColumns;" (click)="goToDetail(row);"
                                 style="cursor:pointer;"></tr>
                         </table>
                     </mat-tab>
+                    <mat-tab *ngIf="homeData.isLinkedToMaarchParapheur">
+                        <ng-template matTabLabel>
+                            <span [class.noDoc]="nbMpDocs === 0" matBadge="{{nbMpDocs}}" matBadgeOverlap="false">{{lang.maarchParapheurDocuments}}</span>
+                        </ng-template>
+                        <app-maarch-parapheur-list (triggerEvent)="updateNbMpDocs($event)"></app-maarch-parapheur-list>
+                    </mat-tab>
                 </mat-tab-group>
             </div>
         </div>
@@ -123,7 +129,8 @@
     <mat-sidenav #snav2 [fixedInViewport]="mobileQuery.matches" position='end'
         [opened]="mobileQuery.matches ? false : false" [mode]="mobileMode ? 'over' : 'side'" class="panel-right"
         style="overflow-x:hidden;" [ngStyle]="{'width': mobileMode ? '80%' : '30%'}" autoFocus="false">
-        <pdf-viewer [src]="docUrl" [render-text]="true" [autoresize]="true" [original-size]="false" [show-all]="true"></pdf-viewer>
+        <pdf-viewer [src]="docUrl" [render-text]="true" [autoresize]="true" [original-size]="false" [show-all]="true">
+        </pdf-viewer>
         <!-- <div *ngIf="innerHtml" [innerHTML]="innerHtml" style="height: 100%;overflow: hidden;"></div> -->
     </mat-sidenav>
 </mat-sidenav-container>
\ No newline at end of file
diff --git a/src/frontend/app/home/home.component.scss b/src/frontend/app/home/home.component.scss
new file mode 100644
index 00000000000..30d9dc381dd
--- /dev/null
+++ b/src/frontend/app/home/home.component.scss
@@ -0,0 +1,13 @@
+@import '../../css/vars.scss';
+
+.mat-badge-content {
+    background: none;
+    color: $primary;
+}
+
+.noDoc {
+    .mat-badge-content {
+        color: #666;
+        opacity: 0.5;
+    }
+}
diff --git a/src/frontend/app/home.component.ts b/src/frontend/app/home/home.component.ts
old mode 100755
new mode 100644
similarity index 91%
rename from src/frontend/app/home.component.ts
rename to src/frontend/app/home/home.component.ts
index bc56436dd99..d45e95a45cd
--- a/src/frontend/app/home.component.ts
+++ b/src/frontend/app/home/home.component.ts
@@ -1,13 +1,13 @@
 import { ChangeDetectorRef, Component, OnInit, ViewChild, QueryList, ViewChildren } from '@angular/core';
 import { MediaMatcher } from '@angular/cdk/layout';
 import { HttpClient } from '@angular/common/http';
-import { LANG } from './translate.component';
+import { LANG } from '../translate.component';
 import { MatDialog, MatSidenav, MatExpansionPanel, MatTableDataSource } from '@angular/material';
-import { NotificationService } from './notification.service';
-import { HeaderService }        from '../service/header.service';
+import { NotificationService } from '../notification.service';
+import { HeaderService }        from '../../service/header.service';
 
 
-import { AutoCompletePlugin } from '../plugins/autocomplete.plugin';
+import { AutoCompletePlugin } from '../../plugins/autocomplete.plugin';
 import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
 
 declare function $j(selector: any): any;
@@ -35,6 +35,7 @@ export class HomeComponent extends AutoCompletePlugin implements OnInit {
     homeMessage         : string;
     dataSource          : any;
     currentDate         : string    = "";
+    nbMpDocs            : number    = 0;
 
 
     public innerHtml    : SafeHtml;
@@ -71,7 +72,7 @@ export class HomeComponent extends AutoCompletePlugin implements OnInit {
         this.http.get(this.coreUrl + "rest/home")
             .subscribe((data: any) => {
                 this.homeData = data;
-                this.homeMessage = data['homeMessage']
+                this.homeMessage = data['homeMessage'];
         });
     }
 
@@ -121,4 +122,8 @@ export class HomeComponent extends AutoCompletePlugin implements OnInit {
                 this.notify.error(this.lang.errorOccured);
             });
     }
+
+    updateNbMpDocs(ev: any) {
+        this.nbMpDocs = ev;
+    }
 }
diff --git a/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.html b/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.html
new file mode 100644
index 00000000000..503dfc26f24
--- /dev/null
+++ b/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.html
@@ -0,0 +1,35 @@
+<div *ngIf="loading" style="display:flex;height:100%;">
+    <mat-spinner style="margin:auto;"></mat-spinner>
+</div>
+<table mat-table [dataSource]="dataSource" matSort matSortActive="id" matSortDisableClear
+    matSortDirection="asc" style="width:100%;table-layout: fixed;">
+    <!-- Number Column -->
+    <ng-container matColumnDef="id">
+        <td mat-cell *matCellDef="let row" style="width:15%;text-align:center;overflow:hidden;text-overflow: ellipsis;white-space: nowrap;padding: 5px;vertical-align: middle;">
+            <div style="overflow: hidden;text-overflow: ellipsis;">
+                <mat-icon color="primary" class="fas fa-2x" [ngClass]="{
+                    'fa-file-signature':row.mode == 'sign',
+                    'fa-thumbs-up':row.mode == 'visa',
+                    'fa-comment-dots':row.mode == 'note'
+                  }" title="{{lang['to_'+row.mode]}}"></mat-icon>
+            </div>
+            <div style="padding-top: 5px;color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;"
+                title="{{row.reference}}">
+                {{row.reference}}
+            </div>
+        </td>
+    </ng-container>
+    <ng-container matColumnDef="title">
+        <td mat-cell *matCellDef="let row"
+            style="width:45%;overflow:hidden;text-overflow: ellipsis;padding: 5px;vertical-align: middle;">
+            <div style="overflow: hidden;line-height: 1.5em;height: 3em;overflow: hidden;" title="{{row.title}}">
+                <span>{{row.title}}</span>
+            </div>
+        </td>
+    </ng-container>
+    <tr mat-row *matRowDef="let row; columns: displayedColumns;" (click)="goTo(row);" style="cursor:pointer;">
+    </tr>
+</table>
+<div class="noResult" *ngIf="dataSource.filteredData.length === 0">
+    {{lang.noResult}}
+</div>
\ No newline at end of file
diff --git a/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.scss b/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.scss
new file mode 100644
index 00000000000..009119ea580
--- /dev/null
+++ b/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.scss
@@ -0,0 +1,7 @@
+@import '../../../css/vars.scss';
+
+.noResult {
+    padding: 10px;
+    text-align: center;
+    opacity: 0.5;
+}
\ No newline at end of file
diff --git a/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.ts b/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.ts
new file mode 100644
index 00000000000..660175acaea
--- /dev/null
+++ b/src/frontend/app/home/maarch-parapheur/maarch-parapheur-list.component.ts
@@ -0,0 +1,66 @@
+import { Component, OnInit, ViewChild, Output, EventEmitter } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { LANG } from '../../translate.component';
+import { MatDialog, MatTableDataSource, MatPaginator, MatSort } from '@angular/material';
+import { NotificationService } from '../../notification.service';
+import { HeaderService } from '../../../service/header.service';
+import { finalize } from 'rxjs/operators';
+
+export interface MPDocument {
+    id: string;
+    title: string;
+    reference: string;
+    mode: string;
+    owner: boolean;
+}
+
+declare function $j(selector: any): any;
+
+@Component({
+    selector: 'app-maarch-parapheur-list',
+    templateUrl: "maarch-parapheur-list.component.html",
+    styleUrls: ['maarch-parapheur-list.component.scss'],
+    providers: [NotificationService]
+})
+export class MaarchParapheurListComponent implements OnInit {
+
+    lang: any = LANG;
+    loading: boolean = true;
+
+    userList: MPDocument[] = [];
+
+    dataSource: MatTableDataSource<MPDocument>;
+
+    displayedColumns: string[] = ['id', 'title'];
+    maarchParapheurUrl: string = '';
+
+    @Output() triggerEvent = new EventEmitter<string>();
+    
+    constructor(public http: HttpClient, public dialog: MatDialog, private notify: NotificationService, private headerService: HeaderService) {
+        this.dataSource = new MatTableDataSource(this.userList);
+    }
+
+    ngOnInit(): void {
+        this.loading = true;
+    }
+
+    ngAfterViewInit(): void {
+        this.http.get("../../rest/home/maarchParapheurDocuments")
+            .pipe(
+                finalize(() => this.loading = false)
+            )
+            .subscribe((data: any) => {
+                setTimeout(() => {
+                    this.dataSource = new MatTableDataSource(data.documents);
+                    this.maarchParapheurUrl = data.url;
+                    this.triggerEvent.emit(data.count.current);
+                }, 0);
+            }, (err: any) => {
+                this.notify.handleErrors(err);
+            });
+    }
+
+    goTo(row: any) {
+        window.location.href = this.maarchParapheurUrl + '/dist/index.html#/documents/' + row.id;
+    }
+}
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index 52363644239..aca41b16a09 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -1018,5 +1018,9 @@ export const LANG_EN = {
     "searchUserInMaarchParapheur" : "Search an user in Maarch Parapheur",
     "newLoginInMaarchParapheur" : "New Maarch Parapheur Login",
     "loginAlreadyExistsInMaarchParapheur" : "Login already exists in Maarch Parapheur",
-    "maarchParapheurLinkbroken" : "Maarch Parapheur link is broken"
+    "maarchParapheurLinkbroken" : "Maarch Parapheur link is broken",
+    "maarchParapheurDocuments" : "Last Maarch Parapheur document(s)",
+    "to_visa" : "To approve",
+    "to_sign" : "To sign",
+    "to_note" : "To note",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 07e9e5e25cf..a0bc79a710c 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -1051,5 +1051,9 @@ export const LANG_FR = {
     "searchUserInMaarchParapheur" : "Rechercher un utilisateur dans Maarch Parapheur",
     "newLoginInMaarchParapheur" : "Nouvel identifiant Maarch Parapheur",
     "loginAlreadyExistsInMaarchParapheur" : "Ce login existe déjà dans Maarch Parapheur",
-    "maarchParapheurLinkbroken" : "L'utilisateur n'existe plus dans Maarch Parapheur."
+    "maarchParapheurLinkbroken" : "L'utilisateur n'existe plus dans Maarch Parapheur.",
+    "maarchParapheurDocuments" : "Mes derniers documents Maarch Parapheur",
+    "to_visa" : "À vise",
+    "to_sign" : "À signer",
+    "to_note" : "À annoter",
 };
\ No newline at end of file
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index ff3eb642317..7df82ccdedc 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -1045,4 +1045,8 @@ export const LANG_NL = {
     "newLoginInMaarchParapheur" : "New Maarch Parapheur Login", //_TO_TRANSLATE
     "loginAlreadyExistsInMaarchParapheur" : "Login already exists in Maarch Parapheur", //_TO_TRANSLATE
     "maarchParapheurLinkbroken" : "Maarch Parapheur link is broken", //_TO_TRANSLATE
+    "maarchParapheurDocuments" : "Last Maarch Parapheur document(s)", //_TO_TRANSLATE
+    "to_visa" : "To approve", //_TO_TRANSLATE
+    "to_sign" : "To sign", //_TO_TRANSLATE
+    "to_note" : "To note", //_TO_TRANSLATE
 };
-- 
GitLab