From 835038a08c2d8c250fffe17633ff83096e5597ed Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Thu, 7 Nov 2019 17:16:04 +0100 Subject: [PATCH] FEAT #12074 TIME 2:30 add light resources banner --- .../app/process/process.component.html | 84 ++++++++++++------- .../app/process/process.component.scss | 2 +- src/frontend/app/process/process.component.ts | 4 +- src/frontend/css/engine_2.scss | 14 ++++ src/frontend/lang/lang-en.ts | 1 + src/frontend/lang/lang-fr.ts | 1 + src/frontend/lang/lang-nl.ts | 1 + src/frontend/plugins/timeLimit.pipe.ts | 33 +++++--- 8 files changed, 96 insertions(+), 44 deletions(-) diff --git a/src/frontend/app/process/process.component.html b/src/frontend/app/process/process.component.html index a2098c12701..58074226480 100644 --- a/src/frontend/app/process/process.component.html +++ b/src/frontend/app/process/process.component.html @@ -2,7 +2,9 @@ <mat-sidenav #snavLeft class="panel-left" #snav [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" [opened]="appService.getViewMode() ? false : true" autoFocus="false" style="overflow-x:hidden;" [ngStyle]="{'width': appService.getViewMode() ? '95%' : '600px'}"> - <header-panel [snavLeft]="snav" [navButton]="{icon: 'fa fa-inbox', label: lang.backBasket, route : '/basketList/users/'+currentUserId+'/groups/'+currentGroupId+'/baskets/'+currentBasketId}"></header-panel> + <header-panel [snavLeft]="snav" + [navButton]="{icon: 'fa fa-inbox', label: lang.backBasket, route : '/basketList/users/'+currentUserId+'/groups/'+currentGroupId+'/baskets/'+currentBasketId}"> + </header-panel> <div class="listModels"> <div class="processTool"> <div class="processTool-module jiggle" *ngFor="let module of processTool" @@ -36,7 +38,8 @@ <div class="title-divider"></div> </div> <div class="content"> - <app-history-workflow-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" (goTo)="currentTool = 'history'"> + <app-history-workflow-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" + (goTo)="currentTool = 'history'"> </app-history-workflow-resume> </div> </div> @@ -46,7 +49,8 @@ <div class="title-divider"></div> </div> <div class="content"> - <app-note-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" (goTo)="currentTool = 'notes'"></app-note-resume> + <app-note-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" + (goTo)="currentTool = 'notes'"></app-note-resume> </div> </div> <div class="banner" [style.borderColor]="currentPriorityColor"> @@ -55,7 +59,8 @@ <div class="title-divider"></div> </div> <div class="content"> - <app-attachments-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" (goTo)="currentTool = 'attachments'"> + <app-attachments-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" + (goTo)="currentTool = 'attachments'"> </app-attachments-resume> </div> </div> @@ -65,7 +70,8 @@ <div class="title-divider"></div> </div> <div class="content"> - <app-mail-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" (goTo)="currentTool = 'mails'"></app-mail-resume> + <app-mail-resume *ngIf="!loading" [resId]="currentResourceInformations.resId" + (goTo)="currentTool = 'mails'"></app-mail-resume> </div> </div> </ng-container> @@ -134,39 +140,54 @@ </div> <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()" style="padding-bottom: 20px;"> <div class="resourceInfo"> - <div class="title"> - {{this.currentResourceInformations.subject}} - <div class="title-divider"></div> - </div> - <div class="content"> - <div class="content-item"> - <b><i class="fas fa-flag" style="font-size: 25px;padding-right: 20px;"></i> {{this.currentResourceInformations.priorityLabel}}</b> - </div> - <div class="content-item"> - <div>{{lang.chronoNumberShort}} :</div> - <div class="content-item-value">{{this.currentResourceInformations.chrono}}</div> + <ng-container *ngIf="!loading; else elseInfoRes"> + <div class="title"> + {{this.currentResourceInformations.subject}} + <div class="title-divider"></div> </div> - <div class="content-item"> - <div>{{lang.senders}} :</div> - <div class="content-item-value">??? <i class="fas fa-circle" - style="color:green;font-size: 8px;"></i></div> + <div class="content"> + <div class="content-item" *ngIf="this.currentResourceInformations.priority !== undefined"> + <b><i class="fas fa-flag" [style.color]="this.currentResourceInformations.priorityColor" + style="font-size: 25px;padding-right: 20px;"></i> + {{this.currentResourceInformations.priorityLabel}}</b> + </div> + <div class="content-item"> + <div>{{lang.chronoNumberShort}} :</div> + <div class="content-item-value" [title]="'N° '+this.currentResourceInformations.resId">{{this.currentResourceInformations.chrono}}</div> + </div> + <div class="content-item"> + <div>{{lang.senders}} :</div> + <div class="content-item-value">??? <i class="fas fa-circle" + style="color:#00CB55;font-size: 8px;"></i></div> + </div> + <div class="content-item" *ngIf="this.currentResourceInformations.processLimitDate !== undefined"> + <ng-container + *ngIf="this.currentResourceInformations.closingDate !== null; else elseLimitDate"> + <div style="font-weight: bold;" [title]="this.currentResourceInformations.closingDate | fullDate">{{this.lang.closed}} {{this.lang.onRange}} {{this.currentResourceInformations.closingDate | timeAgo}} <i + class="fa fa-lock"></i></div> + </ng-container> + <ng-template #elseLimitDate> + <div>{{lang.processLimitDate}} :</div> + <div class="content-item-value" + [title]="this.currentResourceInformations.processLimitDate | fullDate" + [innerHTML]="this.currentResourceInformations.processLimitDate | timeLimit : 'badge'"> + </div> + </ng-template> + </div> </div> - <div class="content-item"> - <div>{{lang.processLimitDate}} :</div> - <div class="content-item-value" [innerHTML]="this.currentResourceInformations.processLimitDate | timeLimit"> <i class="fas fa-circle" - style="color:red;font-size: 8px;"></i></div> - </div> - <div class="content-item"> - <div>Autre info :</div> - <div class="content-item-value">Bla bla</div> + </ng-container> + <ng-template #elseInfoRes> + <div> + </div> - </div> + </ng-template> </div> </div> </div> <div class="document-container" [class.fullContainer]="appService.getViewMode()"> <div class="content"> - <app-document-viewer #appDocumentViewer style="height:100%;width:100%;" [editMode]="false" [resId]="currentResourceInformations.resId"> + <app-document-viewer #appDocumentViewer style="height:100%;width:100%;" [editMode]="false" + [resId]="currentResourceInformations.resId"> </app-document-viewer> </div> </div> @@ -177,7 +198,8 @@ [ngStyle]="{'width': appService.getViewMode() ? '80%' : '30%'}" autoFocus="false"> </mat-sidenav> </mat-sidenav-container> -<div class="modal-module" cdkDrag *ngFor="let modal of modalModule; let i=index" [class.largeModal]="modal.id === 'info'"> +<div class="modal-module" cdkDrag *ngFor="let modal of modalModule; let i=index" + [class.largeModal]="modal.id === 'info'"> <div class="modal-module-title" cdkDragHandle> <span> {{modal.label}} diff --git a/src/frontend/app/process/process.component.scss b/src/frontend/app/process/process.component.scss index 905966cbf29..a6bdc07e6ae 100644 --- a/src/frontend/app/process/process.component.scss +++ b/src/frontend/app/process/process.component.scss @@ -212,7 +212,7 @@ .content { display: flex; - font-size: 16px; + font-size: 15px; overflow: auto; &-item { diff --git a/src/frontend/app/process/process.component.ts b/src/frontend/app/process/process.component.ts index 539e21d9960..7516ec09f78 100644 --- a/src/frontend/app/process/process.component.ts +++ b/src/frontend/app/process/process.component.ts @@ -130,7 +130,7 @@ export class ProcessComponent implements OnInit { ngOnInit(): void { this.loading = true; - this.headerService.setHeader("Traitement d'un courrier"); + this.headerService.setHeader(this.lang.eventProcessDoc); this.route.params.subscribe(params => { this.currentUserId = params['userSerialId']; @@ -139,7 +139,6 @@ export class ProcessComponent implements OnInit { this.currentResourceInformations = { resId: params['resId'], - category: 'outgoing', mailtracking: false }; @@ -180,6 +179,7 @@ export class ProcessComponent implements OnInit { this.http.get(`../../rest/resources/${this.currentResourceInformations.resId}?light=true`).pipe( tap((data: any) => { this.currentResourceInformations = data; + this.headerService.setHeader(this.lang.eventProcessDoc, this.lang[this.currentResourceInformations.categoryId]); }), catchError((err: any) => { this.notify.handleErrors(err); diff --git a/src/frontend/css/engine_2.scss b/src/frontend/css/engine_2.scss index a6800a3435c..a562c134e81 100644 --- a/src/frontend/css/engine_2.scss +++ b/src/frontend/css/engine_2.scss @@ -135,3 +135,17 @@ html,body { height: auto; } +.badgePipe_accent{ + color: #00CB55; + font-size: 8px; +} + +.badgePipe_secondary{ + color: #EF8717; + font-size: 8px; +} + +.badgePipe_warn{ + color: red; + font-size: 8px; +} \ No newline at end of file diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index 4ab3a0d7281..f8a4bf17f6c 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1264,4 +1264,5 @@ export const LANG_EN = { "diffListPrivilegeMsgIndexing" : "in indexing page.", "diffListPrivilegeMsgProcess" : "in process page.", "recordMail" : "Record a mail", + "closed" : "Closed", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index fb6f30915e1..7f2b3dec50e 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1301,4 +1301,5 @@ export const LANG_FR = { "diffListPrivilegeMsgIndexing" : "lors de l'enregistrement du courrier.", "diffListPrivilegeMsgProcess" : "lors du traitement du courrier.", "recordMail" : "Enregistrer un courrier", + "closed" : "Clôturé", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index dca5e6fd112..f2a53358ba9 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1289,4 +1289,5 @@ export const LANG_NL = { "diffListPrivilegeMsgIndexing" : "in indexing page.", //_TO_TRANSLATE "diffListPrivilegeMsgProcess" : "in process page.", //_TO_TRANSLATE "recordMail" : "Record a mail", //_TO_TRANSLATE + "closed" : "Closed", //_TO_TRANSLATE }; diff --git a/src/frontend/plugins/timeLimit.pipe.ts b/src/frontend/plugins/timeLimit.pipe.ts index 9a0d5ecc1e0..18b48bccd08 100755 --- a/src/frontend/plugins/timeLimit.pipe.ts +++ b/src/frontend/plugins/timeLimit.pipe.ts @@ -8,8 +8,11 @@ import { LANG } from '../app/translate.component'; export class TimeLimitPipe implements PipeTransform, OnDestroy { private timer: number; lang: any = LANG; - constructor(private changeDetectorRef: ChangeDetectorRef, private ngZone: NgZone) {} - transform(value:string) { + constructor( + private changeDetectorRef: ChangeDetectorRef, + private ngZone: NgZone) {} + transform(value:string, args: string = null) { + this.removeTimer(); let d = new Date(value); let dayNumber = ('0' + d.getDate()).slice(-2); @@ -49,20 +52,22 @@ export class TimeLimitPipe implements PipeTransform, OnDestroy { if(value == null) { return '<span>' + this.lang.undefined + '</span>'; } else if(now > d) { - return '<span class="timeDanger" color="warn"><b>' + this.lang.outdated + ' !</b></span>'; + if (args === 'badge') { + return this.getFormatedDate('', '<b>' + this.lang.outdated + ' ' + this.lang.fromRange + ' ' + (days-1) + ' '+ this.lang.dayS +' !</b>', 'warn', args); + } else { + return this.getFormatedDate('', '<b>' + this.lang.outdated + ' !</b>', 'warn', args); + } } else { if (Number.isNaN(seconds)){ return ''; } else if (minutes <= 59){ - return '<span color="warn"><b>'+ minutes + ' ' + this.lang.minutes +'</b></span>'; + return this.getFormatedDate(this.lang.in[0].toUpperCase() + this.lang.in.substr(1).toLowerCase(), minutes + ' ' + this.lang.minutes, 'warn', args); } else if (hours <= 23){ - return '<span color="warn"><b>'+ hours + ' ' + this.lang.hours +'</b></span>'; - } else if (days <= 3) { - return '<span color="warn"><b>'+ days + ' ' + this.lang.dayS +'</b></span>'; - } else if (days <= 7) { - return '<span class="timeWarn">'+ days + ' ' + this.lang.dayS +'</span>'; + return this.getFormatedDate(this.lang.in[0].toUpperCase() + this.lang.in.substr(1).toLowerCase(), hours + ' ' + this.lang.hours, 'secondary', args); + } else if (days <= 5) { + return this.getFormatedDate(this.lang.in[0].toUpperCase() + this.lang.in.substr(1).toLowerCase(), days + ' ' + this.lang.dayS, 'secondary', args); } else if (days <= 345) { - return '<span color="accent">'+d.getDate()+' '+ month[d.getMonth()]+'</span>'; + return this.getFormatedDate(this.lang.onRange[0].toUpperCase() + this.lang.onRange.substr(1).toLowerCase(), d.getDate()+' '+ month[d.getMonth()], 'accent', args); } else if (days <= 545) { return dayNumber + '/' + monthNumber + '/' + d.getFullYear(); } else { // (days > 545) @@ -93,4 +98,12 @@ export class TimeLimitPipe implements PipeTransform, OnDestroy { return 3600; } } + + getFormatedDate(prefix: string,content: string, color: string, mode: string) { + if (mode === 'badge') { + return `${prefix} ${content} <i class="fas fa-circle badgePipe_${color}"></i>`; + } else { + return `<span color="${color}">${content}</span>`; + } + } } \ No newline at end of file -- GitLab