From e7516a21880926d54f4fc37b69184c80608505de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yana=C3=ABl=20GRETTE?= Date: Mon, 15 Feb 2021 08:53:00 +0100 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20la=20table=20des=20e?= =?UTF-8?q?ngagements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialog-assignation-rapide.component.ts | 4 +- .../engagements-table/engagements-table.css | 0 .../engagements-table/engagements-table.html | 95 +++++++++ .../engagements-table/engagements-table.ts | 191 ++++++++++++++++++ .../shared/mat-tables/mat-tables.module.ts | 4 +- src/app/shared/utils/cles.ts | 7 +- 6 files changed, 296 insertions(+), 5 deletions(-) create mode 100644 src/app/shared/mat-tables/engagements-table/engagements-table.css create mode 100644 src/app/shared/mat-tables/engagements-table/engagements-table.html create mode 100644 src/app/shared/mat-tables/engagements-table/engagements-table.ts diff --git a/src/app/shared/affichage-details-collaboarteur/dialog-assignation-rapide/dialog-assignation-rapide.component.ts b/src/app/shared/affichage-details-collaboarteur/dialog-assignation-rapide/dialog-assignation-rapide.component.ts index 27bccf8..d319898 100644 --- a/src/app/shared/affichage-details-collaboarteur/dialog-assignation-rapide/dialog-assignation-rapide.component.ts +++ b/src/app/shared/affichage-details-collaboarteur/dialog-assignation-rapide/dialog-assignation-rapide.component.ts @@ -56,7 +56,7 @@ export class DialogAssignationRapideReferentComponent { this.dialogRef.close(); } - onDestroy() { + ngOnDestroy() { if(this.referentEPSubscription != undefined) { this.referentEPSubscription.unsubscribe(); } @@ -157,7 +157,7 @@ export class DialogAssignationRapideCollaborateursComponent implements OnInit{ this.dialogRef.close(); } - onDestroy() { + ngOnDestroy() { if(this.referentEPSubscription != undefined) { this.referentEPSubscription.unsubscribe(); } diff --git a/src/app/shared/mat-tables/engagements-table/engagements-table.css b/src/app/shared/mat-tables/engagements-table/engagements-table.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/shared/mat-tables/engagements-table/engagements-table.html b/src/app/shared/mat-tables/engagements-table/engagements-table.html new file mode 100644 index 0000000..8b57a87 --- /dev/null +++ b/src/app/shared/mat-tables/engagements-table/engagements-table.html @@ -0,0 +1,95 @@ + + + + + + + + + Rechercher un collaborateur + + + close + + + + + + {{bu.nom}} + + + + + {{afficherEtat(etat)}} + + + + +

Aucun engagements à afficher

+
+ + + + + Agence + {{row.ep.collaborateur.businessUnit.nom}} + + + + Collaborateur + {{row.ep.collaborateur.nom}} {{row.ep.collaborateur.prenom}} + + + + Action + {{row.action}} + + + + Dispositif + {{row.dispotitif}} + + + + Modalité + {{row.modalite}} + + + + Date limite + {{row.dateLimite}} + + + + Etat engagement + {{afficherEtat(row.etatEngagement)}} + + + + EP + Voir EP + + + + + Mettre à jour l'engagement + + + + + Supprimer l'engagement + + + + + + + + + +
\ No newline at end of file diff --git a/src/app/shared/mat-tables/engagements-table/engagements-table.ts b/src/app/shared/mat-tables/engagements-table/engagements-table.ts new file mode 100644 index 0000000..5c5e1d2 --- /dev/null +++ b/src/app/shared/mat-tables/engagements-table/engagements-table.ts @@ -0,0 +1,191 @@ +import { Component, EventEmitter, Input, OnInit, Output } from "@angular/core"; +import { MatTableDataSource } from "@angular/material/table"; +import { BusinessUnitDTO, CollaborateurDTO, EngagementDTO, EngagementsService, EtatEngagement } from "@shared/api-swagger"; +import { cles, engagementTypeRecherche } from "@shared/utils/cles"; +import { Subscription } from "rxjs"; + + +@Component({ + selector: "engagements-table", + templateUrl: "./engagements-table.html" +}) +export class EngagementTableComponent implements OnInit { + + + chargement : boolean = true; + + /** + * * Ordre de tri à envoyer au serveur (true : croissant, false : décroissantà). + */ + asc : boolean = true; + + /** + * Numéro de la page à afficher dans le tableau. + */ + numPage: number = 1; + + /** + * Nombre d'élément du tableau à affiche en une page. + */ + parPage: number = 15; + + /** + * Nombre total d'élément du tableau + */ + taille: number = 0; + + /** + * Liste des business units du collaborateur connecté + */ + bus: Array = []; + + /** + * contenu de la recherche pour trouver un collaborateur. + */ + search: string = ""; + + /** + * Options pour choisir le nombre de page à affiche + */ + pageOption = [ 5, 15, 20, 30, 50]; + + /** + * Permet de savoir sur quelle attribut d'un CollaborateurDTO doit être trié le tableau. + */ + tri: string = "collaborateur"; + + /** + * Liste des id des business units des collaborateurs à afficher + */ + private busIds: Array = []; + + /** + * Liste des tous les états engagements + */ + etatsEngagements: Array = [ + EtatEngagement.EnAttente, EtatEngagement.DateLimitePassee, + EtatEngagement.NonRealisable, EtatEngagement.Respecte + ]; + + /** + * Liste des colonnes du tableau à afficher. + */ + @Input() displayedColumns : string[]; + @Input() estSaisieEP: boolean = false; + @Input() engagementsSaisis: EngagementDTO[] = []; + + @Output() eventEmitter: EventEmitter = new EventEmitter(); + + dataSource: MatTableDataSource; + engagementSubscription: Subscription; + engagementCountSubscripton: Subscription; + etatsEngagementsSubscription: Subscription; + + constructor(private engagementService: EngagementsService) {} + + ngOnInit() { + if(this.estSaisieEP) { + this.taille = this.engagementsSaisis.length; + this.dataSource = new MatTableDataSource(this.engagementsSaisis); + } + else + this.setBUsId(); + } + + + updateDataSource() { + if(this.busIds.length == 0) { + this.taille = 0; + this.dataSource = new MatTableDataSource(undefined); + } + this.engagementSubscription = this.engagementService.getEngagements(this.etatsEngagements, this.busIds, this.asc, this.numPage, this.parPage, this.search, this.tri).subscribe( + engagements => this.dataSource = new MatTableDataSource(engagements), + err => console.log(err) + ); + + this.engagementCountSubscripton = this.engagementService.getEngagementsCount(this.etatsEngagements, this.busIds, this.asc, this.numPage, this.parPage, this.search, this.tri).subscribe( + count => this.taille = count, + err => console.log(err) + ); + } + + afficherEtat(etat: EtatEngagement) { + switch(etat) { + case EtatEngagement.Respecte: + return "Respecté"; + case EtatEngagement.NonRealisable: + return "Non réalisable"; + case EtatEngagement.EnAttente: + return "En attente"; + case EtatEngagement.DateLimitePassee: + return "Date limite passée"; + } + } + + /** + * création de la liste des business unit du collaborateur connecté pour afficher les checkboxes + */ + setBUsId() { + if(sessionStorage.getItem(cles.sessionKeyConnectee) == undefined){ + setTimeout( () => this.setBUsId(), 1000); + } + else { + const collaborateurConnecte : CollaborateurDTO = JSON.parse(sessionStorage.getItem(cles.sessionKeyConnectee)); + this.bus = collaborateurConnecte.businessUnit.agence.bu; + for(let bu of this.bus) { + this.busIds.push(bu.id); + } + this.updateDataSource(); + this.chargement = false; + } + } + + setSearch() { + this.numPage = 1; + this.updateDataSource(); + } + + resetSearch() { + this.search = ""; + this.setSearch(); + } + + /** + * Mettre à jour le nomre d'élément à afficher par page et le numéro de la page + * @param event évènement de la pagination + */ + updatePageInfo(event){ + this.parPage = event.pageSize; + this.numPage = event.pageIndex+1; + this.updateDataSource(); + } + + updateEtatsEngagement(event:boolean, etat:EtatEngagement) { + if(event) { + this.etatsEngagements.push(etat); + } + else + this.etatsEngagements + } + + updateCheckbox(event, bu) { + // si la checkbox a été cochée + if(event) { + this.busIds.push(bu.id) + } + else{ + this.busIds = this.busIds.filter( (id) => id != bu.id); + } + this.numPage = 1; + this.updateDataSource(); + } + + ngOnDestroy() { + if(this.engagementSubscription != undefined) { + this.engagementSubscription.unsubscribe(); + } + if(this.engagementCountSubscripton != undefined) { + this.engagementCountSubscripton.unsubscribe(); + } + } +} diff --git a/src/app/shared/mat-tables/mat-tables.module.ts b/src/app/shared/mat-tables/mat-tables.module.ts index 8d18aa8..4ecd359 100644 --- a/src/app/shared/mat-tables/mat-tables.module.ts +++ b/src/app/shared/mat-tables/mat-tables.module.ts @@ -4,11 +4,11 @@ import { FormsModule } from '@angular/forms'; import { MaterialModule } from "../angular-material/angular-material.module"; import { CollaborateursTableComponent } from "@shared/mat-tables/collaborateurs-table/collaborateurs.table"; - +import { EngagementTableComponent } from "@shared/mat-tables/engagements-table/engagements-table" @NgModule({ declarations: [ - CollaborateursTableComponent + CollaborateursTableComponent, EngagementTableComponent ], imports: [ MaterialModule, diff --git a/src/app/shared/utils/cles.ts b/src/app/shared/utils/cles.ts index 3d5461b..ac3f33d 100644 --- a/src/app/shared/utils/cles.ts +++ b/src/app/shared/utils/cles.ts @@ -2,9 +2,14 @@ export const cles = { sessionKeyConnectee : "collaborateurConnecte", } - export const collaborateurTypeRecherche = { collaborateurs: "collaborateurs", referents: "referents", collaborateursEP: "collaborateursEP" +} + +export const engagementTypeRecherche = { + saisieEP: "saisieEP", + consultationEP: "consultationEP", + engagementsRH: "engagementRH" } \ No newline at end of file