From de1cc0fe118ef0fa7bb2fe0e3fac9b42e1745135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yana=C3=ABl=20GRETTE?= Date: Tue, 9 Feb 2021 11:01:39 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9but=20cr=C3=A9ation=20d'un=20composant?= =?UTF-8?q?=20r=C3=A9utilisable=20qui=20affichera=20la=20liste=20des=20col?= =?UTF-8?q?laborateurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../collaborateurs.table.css | 7 + .../collaborateurs.table.html | 81 +++++ .../collaborateurs.table.ts | 301 ++++++++++++++++++ src/app/shared/utils/cles.ts | 7 + 4 files changed, 396 insertions(+) create mode 100644 src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.css create mode 100644 src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.html create mode 100644 src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.ts diff --git a/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.css b/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.css new file mode 100644 index 0000000..aeb720b --- /dev/null +++ b/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.css @@ -0,0 +1,7 @@ +.collaborateurAjoute { + background-color: dodgerblue; +} + +.dejaCollaborateurEP { + +} \ No newline at end of file diff --git a/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.html b/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.html new file mode 100644 index 0000000..43214ac --- /dev/null +++ b/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.html @@ -0,0 +1,81 @@ + + + + + + + + + + Rechercher un collaborateur + + + close + + + + + +
    +
  • + {{bu.nom}} +
  • +
+ + + + Date de début + + clear + + + +
+ + + + Date de fin + + clear + + + + + + + + + + Agence + {{ row.businessUnit.nom }} + + + + Collabotareur + {{row.nom}} {{row.prenom}} + + + + Date embauche + {{row.dateArrivee | date:'dd/MM/yyyy'}} + + + + Référent + {{ row.referent.prenom }} {{ row.referent.nom }} + Aucun référent + + + + + + + + +
\ No newline at end of file diff --git a/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.ts b/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.ts new file mode 100644 index 0000000..36070a4 --- /dev/null +++ b/src/app/shared/mat-tables/collaborateurs-table/collaborateurs.table.ts @@ -0,0 +1,301 @@ +import { Component, Input, Output, EventEmitter, OnInit } from "@angular/core"; + +import { Subscription } from 'rxjs'; + +import {MatTableDataSource} from '@angular/material/table'; + +import { BusinessUnitDTO, CollaborateurDTO } from '@shared/api-swagger/model/models' +import { CollaborateursService } from "@shared/api-swagger/api/api"; +import { cles, collaborateurTypeRecheche } from "@shared/utils/cles"; + + +@Component({ + selector: "collaborateurs-table", + templateUrl: "./collaborateurs.table.html", + styleUrls: ["./collaborateurs.table.css"] +}) +export class CollaborateursTableComponent implements OnInit { + + /** + * 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; + /** + * Observable pour faire des requêtes sur le service collaborateur. + */ + private collaborateursDisponiblesSubscription : Subscription; + + /** + * Observable pour faire des requêtes sur le service collaborateur. + */ + private collaborateursDisponiblesCountSubscription : Subscription; + + /** + * Liste des colonnes du tableau à afficher. + */ + //displayedColumns : string[] = ["businessunit", "collaborateur", "datearrivee", "referent"]; + + /** + * C'est dans cet objet que seront stockés les collaborateurs à afficher dans le Mat Table côté template. + */ + dataSource : MatTableDataSource; + + /** + * contenu de la recherche pour trouver un collaborateur. + */ + search: string = ""; + /** + * Permet de savoir sur quelle attribut d'un CollaborateurDTO doit être trié le tableau. + */ + tri: string = "collaborateur"; + /** + * Liste des business units du collaborateur connecté + */ + bus: Array = []; + + /** + * Liste des id des business units des collaborateurs à afficher + */ + private busIds: Array = []; + + /** + * Nombre total d'élément du tableau + */ + taille: number; + + + /** + * Options pour choisir le nombre de page à affiche + */ + pageOption = [ 5, 15, 20, 30, 50]; + + /** + * Spécifie si la liste des collaborateurs est en cours de chargement dans le tableau. + */ + chargement: boolean = true; + + /** + * Date à partir de laquelle les collaborateurs doivent être récupérés en fonction de leur date d'arrivée + */ + dateDebut: Date = undefined; + + /** + * Date jusqu'à laquelle les collaborateurs doivent être récupérés en fonction de leur date d'arrivée + */ + dateFin: Date = undefined; + + /** + * Indiquer si il s'agit d'une recherche collaborateur, d'un recherche référentEP ou d'une recherche collaborateurEP d'un référent + */ + @Input() typeRecherche: string; + + /** + * Indique si il s'agit d'une simple recherche pour afficher des informations ou d'une recherche pour ajouter un référent à un ou plusieurs collaborateurs + */ + @Input() changementReferentEP: boolean; + + /** + * Indique si la recherche pas BU est activée ou non + */ + @Input() rechercherParBU: boolean; + + /** + * Liste des rôles des collaborateurs a affichés + */ + @Input() roles: string[]; + + /** + * Liste des colonnes du tableau à afficher. + */ + @Input() displayedColumns : string[]; //["businessunit", "collaborateur", "datearrivee", "referent"] + + /** + * Liste des collaborateursEP actuels du référent + */ + @Input() collaborateursEP: CollaborateurDTO[]; + + /** + * Liste des collaborateurs ajoutés dont le référent sera mis à jour + */ + @Input() collaborateursAjouts: CollaborateurDTO[]; + + /** + * Evenement emis lorsqu'une action doit être effectuée + */ + @Output() eventEmitter: EventEmitter = new EventEmitter(); + + private collaborateurConnecte : CollaborateurDTO; + + constructor(private service: CollaborateursService) {} + + emitEvent(referent: CollaborateurDTO, type: string) { + const event = { + type : type, + collaborateur: referent + }; + this.eventEmitter.emit(event); + } + + ngOnInit() { + this.setBUsId(); + } + + /** + * Mettre à jour les informations à afficher dans la tableau. + * Devra se faire à l'ouverture de la page, au changement de page ou du nombre d'éléments à afficher, au moment d'un tri ou encore lors de l'utilisation de la barre de recherche. + */ + updateDataSource() { + switch(this.typeRecherche) { + case collaborateurTypeRecheche.collaborateurs: + case collaborateurTypeRecheche.referents: + this.updateCollaborateursOuReferents(); + break; + case collaborateurTypeRecheche.collaborateursEP: + this.updateCollaborateursEP(); + break; + } + } + + updateCollaborateursOuReferents() { + //ne rien afficher si aucune business unit n'est cochée + if(this.busIds.length == 0) { + this.taille = 0; + this.dataSource = new MatTableDataSource(undefined); + return; + } + this.collaborateursDisponiblesSubscription = this.service.getCollaborateurs(this.roles, this.busIds, this.asc, this.numPage, this.parPage, this.search, this.tri, this.dateDebut, this.dateFin).subscribe( + collaborateurs => { console.log(collaborateurs); this.dataSource = new MatTableDataSource(collaborateurs);}, + err => console.log(err) + ); + this.collaborateursDisponiblesCountSubscription = this.service.getCollaborateursCount(this.roles, this.busIds,this.asc, this.numPage, this.parPage, this.search, this.tri, this.dateDebut, this.dateFin).subscribe( + count => { console.log(count); this.taille=count;}, + err => console.log(err) + ); + } + + + + updateCollaborateursEP() { + this.collaborateursDisponiblesSubscription = this.service.getCollaborateursByReferent(this.collaborateurConnecte.id, this.asc, this.numPage, this.parPage, this.search, this.tri).subscribe( + collaborateurs => { console.log(collaborateurs); this.dataSource = new MatTableDataSource(collaborateurs);}, + err => console.log(err) + ); + this.collaborateursDisponiblesCountSubscription = this.service.getCollaborateursByReferentCount(this.collaborateurConnecte.id, this.asc, this.numPage, this.parPage, this.search, this.tri).subscribe( + count => { console.log(count); this.taille=count;}, + err => console.log(err) + ); + } + + /** + * Mettre à undefined la date de début ou la date de fin + * @param val Valeur pour inidiquer quel variable doit être mis à undefined + */ + updateDateToUndefined(val : number) { + if(val == 1) + this.dateDebut = undefined; + if(val == 2) + this.dateFin = undefined; + this.updateDataSource(); + } + + /** + * 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(); + } + + /** + * Remettre au début la liste lors d'une recherche via la barre de recherche + */ + setSearch() { + this.numPage = 1; + this.updateDataSource(); + } + + + /** + * Vider la barre de recherche et remettre le tableau à la première page + */ + resetSearch() { + this.search = ""; + this.setSearch(); + } + + + /** + * Trier le tableau en fonction de l'évènement de la colonne + * @param e évènement du tri + */ + triTableau(e) { + this.tri = e.active; + switch(e.direction) { + case "asc": + this.asc = true; + break; + case "desc": + this.asc = false; + break; + } + this.updateDataSource(); + } + + /** + * 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 { + this.collaborateurConnecte = JSON.parse(sessionStorage.getItem(cles.sessionKeyConnectee)); + this.bus = this.collaborateurConnecte.businessUnit.agence.bu; + for(let bu of this.bus) { + this.busIds.push(bu.id); + } + this.updateDataSource(); + this.chargement = false; + } + } + + /** + * Mettre à jour la liste des + * @param event case cochée ou décochée + * @param bu business unit concerné par la checkbox cochée ou décochée + */ + 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(); + } + + /** + * Une fois la page fermée, il est nécessaire de se désabonner des Oberservable afin d'éviter les fuites mémoires. + */ + ngOnDestroy() { + if(this.collaborateursDisponiblesSubscription != undefined) { + this.collaborateursDisponiblesSubscription.unsubscribe(); + } + if(this.collaborateursDisponiblesCountSubscription != undefined) { + this.collaborateursDisponiblesCountSubscription.unsubscribe(); + } + } +} \ No newline at end of file diff --git a/src/app/shared/utils/cles.ts b/src/app/shared/utils/cles.ts index 49e19f5..8937b52 100644 --- a/src/app/shared/utils/cles.ts +++ b/src/app/shared/utils/cles.ts @@ -1,3 +1,10 @@ export const cles = { sessionKeyConnectee : "collaborateurConnecte", +} + + +export const collaborateurTypeRecheche = { + collaborateurs: "collaborateurs", + referents: "referents", + collaborateursEP: "collaborateursEP" } \ No newline at end of file