From 5a8a2689d9b2d2cc9cc88c4119a46657c8784ae4 Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Tue, 12 Feb 2019 13:39:54 +0100
Subject: [PATCH] FEAT #9156 front basket list + fix pipe timeAgo

---
 .../list/list-administration.component.ts     | 22 +++++-----
 .../app/list/basket-list.component.html       | 13 +++---
 .../app/list/basket-list.component.scss       |  1 -
 .../app/list/basket-list.component.ts         | 40 ++++++++++++++++---
 src/frontend/lang/lang-en.ts                  |  9 +++--
 src/frontend/lang/lang-fr.ts                  |  9 +++--
 src/frontend/lang/lang-nl.ts                  |  9 +++--
 src/frontend/plugins/timeAgo.pipe.ts          |  7 +++-
 src/frontend/plugins/timeLimit.pipe.ts        | 11 ++---
 9 files changed, 78 insertions(+), 43 deletions(-)

diff --git a/src/frontend/app/administration/basket/list/list-administration.component.ts b/src/frontend/app/administration/basket/list/list-administration.component.ts
index 659f67cc5d1..65b4ebbf201 100644
--- a/src/frontend/app/administration/basket/list/list-administration.component.ts
+++ b/src/frontend/app/administration/basket/list/list-administration.component.ts
@@ -64,15 +64,15 @@ export class ListAdministrationComponent implements OnInit {
             'icon': 'fa-sitemap'
         },
         {
-            'value': 'getSenders',
-            'label': this.lang.getSenders,
+            'value': 'getRecipients',
+            'label': this.lang.getRecipients,
             'sample': 'Patricia PETIT',
             'cssClasses': [],
             'icon': 'fa-user'
         },
         {
-            'value': 'getRecipients',
-            'label': this.lang.getRecipients,
+            'value': 'getSenders',
+            'label': this.lang.getSenders,
             'sample': 'Alain DUBOIS (MAARCH)',
             'cssClasses': [],
             'icon': 'fa-book'
@@ -92,23 +92,23 @@ export class ListAdministrationComponent implements OnInit {
             'icon': 'fa-list-ol'
         },
         {
-            'value': 'modificationDate',
-            'label': this.lang.modificationDate,
+            'value': 'getModificationDate',
+            'label': this.lang.getModificationDate,
             'sample': '01-01-2019',
             'cssClasses': [],
             'icon': 'fa-calendar-check'
         },
         {
-            'value': 'opinionLimitDate',
-            'label': this.lang.opinionLimitDate,
+            'value': 'getOpinionLimitDate',
+            'label': this.lang.getOpinionLimitDate,
             'sample': '01-01-2019',
             'cssClasses': [],
             'icon': 'fa-stopwatch'
         },
         {
-            'value': 'nbAvisSent',
-            'label': this.lang.nbAvisSent,
-            'sample': this.lang.nbAvisSentSample,
+            'value': 'getParallelOpinionsNumber',
+            'label': this.lang.getParallelOpinionsNumber,
+            'sample': this.lang.getParallelOpinionsNumberSample,
             'cssClasses': [],
             'icon': 'fa-comment-alt'
         },
diff --git a/src/frontend/app/list/basket-list.component.html b/src/frontend/app/list/basket-list.component.html
index c3d41115d68..0bf9330bd20 100644
--- a/src/frontend/app/list/basket-list.component.html
+++ b/src/frontend/app/list/basket-list.component.html
@@ -29,11 +29,11 @@
                         <td mat-cell *matCellDef="let row" class="resultContainer" [class.resultContainer-mobile]="mobileMode">
                             <!-- Secondary Info Line -->
                             <mat-toolbar *ngIf="row.display.length > 0">
-                                <div class="resultCol" style="flex:1" [class]="data.cssClasses.join(' ')" *ngFor="let data of row.display">
+                                <div class="resultCol" style="flex:1;overflow: hidden;text-overflow: ellipsis;padding-right: 10px;" [class]="data.cssClasses.join(' ')" *ngFor="let data of row.display">
                                     <ng-container *ngIf="data.value == 'getCreationAndProcessLimitDates'">
-                                        <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>&nbsp;{{data.displayValue[0]
-                                        | timeAgo}} - <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;<span
-                                            [innerHTML]="data.displayValue[1] | timeLimit" title='{{data.displayValue[1] | date : "le dd/MM/y à HH:mm"}}'></span>
+                                        <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>&nbsp;<span
+                                        [innerHTML]="data.displayValue.creationDate | timeAgo" title='{{data.displayValue.creationDate | date : "le dd/MM/y à HH:mm"}}'></span> - <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;<span
+                                            [innerHTML]="data.displayValue.processLimitDate | timeLimit" title='{{data.displayValue.processLimitDate | date : "le dd/MM/y à HH:mm"}}'></span>
                                     </ng-container>
                                     <ng-container *ngIf="data.icon != ''">
                                         <i class="fa {{data.icon}}" title="{{data.label}}"></i>
@@ -44,7 +44,8 @@
                                         <span *ngIf="lang[data.displayValue]">{{lang[data.displayValue]}}</span>
                                     </ng-container>
                                     <ng-container *ngIf="data.value != 'getCategory' && data.value != 'getCreationAndProcessLimitDates'">
-                                        <span *ngIf="lang[row.category_id]">{{data.displayValue}}</span>
+                                        <span *ngIf="!data.value.includes('Date')" title="{{data.displayValue}}"  [innerHTML]="data.displayValue"></span>
+                                        <span *ngIf="data.value.includes('Date')" [innerHTML]="data.displayValue | timeAgo"></span>
                                     </ng-container>
                                 </div>
                             </mat-toolbar>
@@ -55,7 +56,7 @@
                                 </div>
                                 <div class="resultCol" [class]="data.cssClasses.join(' ')" *ngFor="let data of displayedMainData">
                                     <span *ngIf="data.value == 'alt_identifier'">
-                                        <mat-icon [ngStyle]="{'color': row.priority_color}" color="primary" class="{{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}} {{row.statusImage}} {{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}}-2x"
+                                        <mat-icon [ngStyle]="{'color': row.priorityColor}" color="primary" class="{{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}} {{row.statusImage}} {{row.statusImage.charAt(0)}}{{row.statusImage.charAt(1)}}-2x"
                                             title="{{row.statusLabel}}" style="cursor: crosshair;"
                                             (click)="$event.stopPropagation();filterThis(row.status_label)"></mat-icon><br />
                                         <span *ngIf="row[data.value] == lang.undefined && row.barcode != null" style="color: rgba(0,0,0,0.4);font-size: 90%;"><i
diff --git a/src/frontend/app/list/basket-list.component.scss b/src/frontend/app/list/basket-list.component.scss
index 49028127e34..8d952a23de5 100644
--- a/src/frontend/app/list/basket-list.component.scss
+++ b/src/frontend/app/list/basket-list.component.scss
@@ -87,7 +87,6 @@ mat-toolbar {
     width: 40px;
 }
 
-
 .actions {
     box-shadow: none;
     border: none;
diff --git a/src/frontend/app/list/basket-list.component.ts b/src/frontend/app/list/basket-list.component.ts
index 47e09b00480..eaf7bf16c1f 100755
--- a/src/frontend/app/list/basket-list.component.ts
+++ b/src/frontend/app/list/basket-list.component.ts
@@ -220,6 +220,7 @@ export class BasketListComponent implements OnInit {
     processPostData(data: any) {
         this.displayedSecondaryData = [];
         data.resources.forEach((element: any) => {
+            // Process main datas
             Object.keys(element).forEach((key) => {
                  if (key == 'statusImage' && element[key] == null) {
                     element[key] = 'fa-question undefined';
@@ -227,8 +228,10 @@ export class BasketListComponent implements OnInit {
                     element[key] = this.lang.undefined;
                 }
             });
+
+            // Process secondary datas
             element.display.forEach((key: any) => {
-                if ((key.displayValue == null || key.displayValue == '') && ['getCreationAndProcessLimitDates'].indexOf(key.value) === -1) {
+                if ((key.displayValue == null || key.displayValue == '') && ['getCreationAndProcessLimitDates', 'getParallelOpinionsNumber'].indexOf(key.value) === -1) {
                     key.displayValue = this.lang.undefined;
 
                 } else if (["getSenders", "getRecipients"].indexOf(key.value) > 0) {
@@ -239,10 +242,36 @@ export class BasketListComponent implements OnInit {
                     }
                 } else if(key.value == 'getCreationAndProcessLimitDates') {
                     key.icon = '';
-                    key.displayValue = [
-                        '2019-02-10',
-                        '2019-02-13'
-                    ]
+                } else if(key.value == 'getVisaWorkflow') {
+                    let formatWorkflow: any = [];
+                    let content = '';
+                    let user = '';
+                    key.displayValue.forEach((visa: any) => {
+                        content = '';
+                        user = visa.user;
+                        if (visa.mode == 'sign') {
+                            user = '<u>'+user+'</u>';
+                        } 
+                        if (visa.date == '') {
+                            content = '<i class="fa fa-hourglass-half"></i> <span title="' + this.lang[visa.mode+'User'] + '">' + user + '</span>';
+                        } else {
+                            content = '<span color="accent" style=""><i class="fa fa-check"></i> <span title="' + this.lang[visa.mode+'User'] + '">' + user + '</span></span>';
+                        }
+
+                        if (visa.current) {
+                            content = '<b color="primary">'+content+'</b>';                            
+                        }
+                        formatWorkflow.push(content);
+                    });
+                    key.icon = '';
+                    key.displayValue = formatWorkflow.join(' <i class="fas fa-long-arrow-alt-right"></i> ');
+                } else if(key.value == 'getParallelOpinionsNumber') {
+                    if (key.displayValue > 0) {
+                        key.displayValue = '<b color="primary">' + key.displayValue + '</b> ' + this.lang.opinionsSent;
+                    } else {
+                        key.displayValue = key.displayValue + ' ' + this.lang.opinionsSent;
+                    }
+                    
                 }
                 key.label = this.lang[key.value];
             });
@@ -253,7 +282,6 @@ export class BasketListComponent implements OnInit {
                 element['checked'] = true;
             }
         });
-
         return data;
     }
 
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index a314805727c..1ddeb0ecacf 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -825,9 +825,10 @@ export const LANG_EN = {
     "getVisaWorkflow"                      : "Visa workflow",  
     "getCreationAndProcessLimitDates"                      : "Creation date - Process limit date",
     "getCreationAndProcessLimitDatesSample"                      : "1st jan. - <i class=\"fa fa-stopwatch\"></i>&nbsp;<b color=\"warn\">3 day(s)</b>",
-    "nbAvisSent"                      : "Number of opinion sent",
-    "nbAvisSentSample"                      : "<b>3</b> opinion(s) sent",
+    "getParallelOpinionsNumber"                      : "Number of opinions sent",
+    "getParallelOpinionsNumberSample"                      : "<b>3</b> opinion(s) sent",
     "warnMaxDataList"                      : "Maximum of displayed datas is reached",
-    "opinionLimitDate"                      : "Opinion limit date",
-    "modificationDate"                      : "Modification date",
+    "getOpinionLimitDate"                      : "Opinion limit date",
+    "getModificationDate"                      : "Modification date",
+    "opinionsSent"                      : "opinion(s) sent",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index efc2000d921..8e09e3c2524 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -851,9 +851,10 @@ export const LANG_FR = {
     "getVisaWorkflow"                      : "Circuit de visa",  
     "getCreationAndProcessLimitDates"                      : "Date de création - Date limite",  
     "getCreationAndProcessLimitDatesSample"                      : "1er janv. - <i class=\"fa fa-stopwatch\"></i>&nbsp;<b color=\"warn\">3 jour(s)</b>",  
-    "nbAvisSent"                      : "Nombre d'avis donné",  
-    "nbAvisSentSample"                      : "<b>3</b> avis donné(s)",  
+    "getParallelOpinionsNumber"                      : "Nombre d'avis donnés",  
+    "getParallelOpinionsNumberSample"                      : "<b>3</b> avis donné(s)",  
     "warnMaxDataList"                      : "Le nombre maximal d'élements affichés a été atteint",
-    "opinionLimitDate"                      : "Date limite d'envoi des avis",
-    "modificationDate"                      : "Date de mise à jour",
+    "getOpinionLimitDate"                      : "Date limite d'envoi des avis",
+    "getModificationDate"                      : "Date de mise à jour",
+    "opinionsSent"                      : "avis donné(s)",  
 };
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index cfae6539930..7daafd25868 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -854,10 +854,11 @@ export const LANG_NL = {
     "getVisaWorkflow"                      : "Visa workflow", //_TO_TRANSLATE
     "getCreationAndProcessLimitDates"                      : "Creation date - Process limit date", //_TO_TRANSLATE
     "getCreationAndProcessLimitDatesSample"                      : "1st jan. - <i class=\"fa fa-stopwatch\"></i>&nbsp;<b color=\"warn\">3 day(s)</b>", //_TO_TRANSLATE
-    "nbAvisSent"                      : "Number of opinion sent", //_TO_TRANSLATE 
-    "nbAvisSentSample"                      : "<b>3</b> opinion(s) sent", //_TO_TRANSLATE 
+    "getParallelOpinionsNumber"                      : "Number of opinions sent", //_TO_TRANSLATE 
+    "getParallelOpinionsNumberSample"                      : "<b>3</b> opinion(s) sent", //_TO_TRANSLATE 
     "warnMaxDataList"                      : "Maximum of displayed datas is reached", //_TO_TRANSLATE
-    "opinionLimitDate"                      : "Opinion limit date", //_TO_TRANSLATE
-    "modificationDate"                      : "Modification date", //_TO_TRANSLATE
+    "getOpinionLimitDate"                      : "Opinion limit date", //_TO_TRANSLATE
+    "getModificationDate"                      : "Modification date", //_TO_TRANSLATE
+    "opinionsSent"                      : "opinion(s) sent", //_TO_TRANSLATE
 
 };
diff --git a/src/frontend/plugins/timeAgo.pipe.ts b/src/frontend/plugins/timeAgo.pipe.ts
index 8e4a1ea5beb..f0c6ba8fd91 100755
--- a/src/frontend/plugins/timeAgo.pipe.ts
+++ b/src/frontend/plugins/timeAgo.pipe.ts
@@ -13,7 +13,8 @@ export class TimeAgoPipe implements PipeTransform, OnDestroy {
 		this.removeTimer();
 		let d = new Date(value);
 		let dayNumber = ('0' + d.getDate()).slice(-2);
-		let monthNumber = ('0' + d.getMonth()).slice(-2);
+		const realMonth = d.getMonth()+1;
+		let monthNumber = ('0' + realMonth).slice(-2);
 		let hourNumber = ('0' + d.getHours()).slice(-2);
 		let minuteNumber = ('0' + d.getMinutes()).slice(-2);
 		let now = new Date();
@@ -45,7 +46,9 @@ export class TimeAgoPipe implements PipeTransform, OnDestroy {
 		let days = Math.round(Math.abs(hours / 24));
 		let months = Math.round(Math.abs(days/30.416));
 		let years = Math.round(Math.abs(days/365));
-		if (Number.isNaN(seconds)){
+		if(value == this.lang.undefined) {
+			return this.lang.undefined;
+		} else if (Number.isNaN(seconds)){
 			return '';
 		} else if (seconds <= 45) {
 			return this.lang.fewSeconds;
diff --git a/src/frontend/plugins/timeLimit.pipe.ts b/src/frontend/plugins/timeLimit.pipe.ts
index 8bbf0dc7ed8..fdae009da57 100755
--- a/src/frontend/plugins/timeLimit.pipe.ts
+++ b/src/frontend/plugins/timeLimit.pipe.ts
@@ -12,12 +12,13 @@ export class TimeLimitPipe implements PipeTransform, OnDestroy {
 	transform(value:string) {
 		this.removeTimer();
 		let d = new Date(value);
-		let dayNumber = ('0' + d.getDate()).slice(-2)
-		let monthNumber = ('0' + d.getMonth()).slice(-2)
-		let hourNumber = ('0' + d.getHours()).slice(-2)
-		let minuteNumber = ('0' + d.getMinutes()).slice(-2)
+		let dayNumber = ('0' + d.getDate()).slice(-2);
+		const realMonth = d.getMonth()+1;
+		let monthNumber = ('0' + realMonth).slice(-2);
+		let hourNumber = ('0' + d.getHours()).slice(-2);
+		let minuteNumber = ('0' + d.getMinutes()).slice(-2);
 		let now = new Date();
-		let month = new Array();
+		let month = [];
 		month[0] = this.lang.januaryShort;
 		month[1] = this.lang.februaryShort;
 		month[2] = this.lang.marchShort;
-- 
GitLab