Ajout des commentaires dans l'ensemble de ce qui a déjà été fait (sauf les services et les path des url => changement via OpenAPI)

master
Yanaël GRETTE 4 years ago
parent 5e038cf604
commit ad8a28bb77
  1. 6
      src/app/angular-material/angular-material.module.ts
  2. 4
      src/app/app.authguard.ts
  3. 4
      src/app/app.module.ts
  4. 154
      src/app/home/home-assistante/home-assistante.component.ts
  5. 7
      src/app/home/home-collaborateur/home-collaborateur.component.ts
  6. 7
      src/app/home/home-commercial/home-commercial.component.ts
  7. 6
      src/app/home/home-rh/home-rh.component.ts
  8. 8
      src/app/home/home.component.ts
  9. 4
      src/app/modeles/modele-collaborateur.ts
  10. 23
      src/app/modeles/modele-ep.ts
  11. 22
      src/app/modeles/modele-formation.ts
  12. 5
      src/app/nav-menu/nav-menu-assistante/nav-menu-assistante.component.ts
  13. 5
      src/app/nav-menu/nav-menu-collaborateur/nav-menu-collaborateur.component.ts
  14. 5
      src/app/nav-menu/nav-menu-commercial/nav-menu-commercial.component.ts
  15. 5
      src/app/nav-menu/nav-menu-rh/nav-menu-rh.component.ts
  16. 15
      src/app/nav-menu/nav-menu.component.ts
  17. 4
      src/app/utils/displayEP.ts
  18. 3
      src/app/utils/roles.ts

@ -1,8 +1,6 @@
import { NgModule } from "@angular/core"; import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common"; import { CommonModule } from "@angular/common";
/*import {
} from "@angular/material";//*/
import {MatCardModule} from '@angular/material/card'; import {MatCardModule} from '@angular/material/card';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import {MatInputModule} from '@angular/material/input'; import {MatInputModule} from '@angular/material/input';
@ -12,6 +10,10 @@ import {MatPaginatorModule} from '@angular/material/paginator';
import {MatTableModule} from '@angular/material/table'; import {MatTableModule} from '@angular/material/table';
import {MatSortModule} from '@angular/material/sort'; import {MatSortModule} from '@angular/material/sort';
/**
* Module qui va faire l'import et l'export de tous les componsants material design qui seront utilisés dans l'application.
*/
@NgModule({ @NgModule({
imports : [MatCardModule, imports : [MatCardModule,
MatButtonModule, MatMenuModule, MatButtonModule, MatMenuModule,

@ -2,6 +2,10 @@ import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { KeycloakService, KeycloakAuthGuard } from 'keycloak-angular'; import { KeycloakService, KeycloakAuthGuard } from 'keycloak-angular';
/**
* AppAuthGuard est la fonction qui va gérer l'authentificatione et les droits d'accès en fonction des rôles.
*/
@Injectable() @Injectable()
export class AppAuthGuard extends KeycloakAuthGuard { export class AppAuthGuard extends KeycloakAuthGuard {
constructor(protected router: Router, protected keycloakAngular: KeycloakService) { constructor(protected router: Router, protected keycloakAngular: KeycloakService) {

@ -23,7 +23,9 @@ import { environment } from '../environments/environment';
/**
* constante Keycloak qui pourra être utilisé dans tout le projet.
*/
let keycloakService: KeycloakService = new KeycloakService(); let keycloakService: KeycloakService = new KeycloakService();
@NgModule({ @NgModule({

@ -12,6 +12,14 @@ import { CollaborateurModel } from "../../modeles/modele-collaborateur";
import { EpModel } from "../../modeles/modele-ep"; import { EpModel } from "../../modeles/modele-ep";
import { DisplayEP } from "../../utils/displayEP"; import { DisplayEP } from "../../utils/displayEP";
/**
* Le composant home qui sera affiché uniquement pour les assistantes.
* Cette interface affiche la liste des EP disponibles et en cours, de les trier et de faire une recherche avec la barre de recherche mais aussi choisir un intervalle de dates.
* Le tri peut se faire par rapport aux éléments du tableau et de checkboxes des agences et de si les EP ont é terminé et non signé.
* Les assistantes peuvent accéder directement aux informations du collaborateur concerné, du référent actuel et de l'EP, si ce dernier a é saisie.
* LEs informations qui seront affichées sont : l'agence, le collaborateur, son ancienneté, le référent, la date d'envoie du mail, l'état, le type d'EP et la date prévu d'entretien
*/
@Component({ @Component({
selector : 'home-assistante', selector : 'home-assistante',
templateUrl : 'home-assistante.component.html', templateUrl : 'home-assistante.component.html',
@ -19,15 +27,51 @@ import { DisplayEP } from "../../utils/displayEP";
}) })
export class HomeAssistanteComponent implements OnInit, AfterViewInit { export class HomeAssistanteComponent implements OnInit, AfterViewInit {
/**
* Une liste qui contiendra la liste des EP avec les informations à faire conserver.
*/
epDisponibles : DisplayEP[]; epDisponibles : DisplayEP[];
/**
* Liste des EP qui seront affichées en fonction des filtres.
*/
epFiltre : DisplayEP[]; epFiltre : DisplayEP[];
/**
* Subscription pour récupérer les EP.
*/
private epDisponiblesSubscription : Subscription; private epDisponiblesSubscription : Subscription;
/**
* liste des titres des colonnes du tableau.
*/
displayedColumns: string[] = ["agence", "info", "datemail", "dateentretien", "etat", "type"]; displayedColumns: string[] = ["agence", "info", "datemail", "dateentretien", "etat", "type"];
/**
* source pour l'affichage des EP dans le tableau qui est affichée.
*/
dataSource : MatTableDataSource<DisplayEP>; dataSource : MatTableDataSource<DisplayEP>;
/**
* contenu de la recherche.
*/
search = ""; search = "";
/**
* Pagination du tableau.
*/
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
/**
* Tri par les éléments du tableau selon la colonne choisie.
*/
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
/**
* Spécifie si la liste des EP est en cours de chargement et d'écriture dans le tableau.
*/
chargement = true;
constructor(public keycloakService : KeycloakService, private serviceCollaborateur : ServiceCollaborateur, constructor(public keycloakService : KeycloakService, private serviceCollaborateur : ServiceCollaborateur,
private serviceEP : ServiceEP) { private serviceEP : ServiceEP) {
} }
@ -36,6 +80,10 @@ export class HomeAssistanteComponent implements OnInit, AfterViewInit {
console.log("VIEWINITED"); console.log("VIEWINITED");
} }
/**
* Initialisation de l'affichage des EP dans le tableau.
*/
initDisplay(eps) { initDisplay(eps) {
console.log("INITDISPLAY"); console.log("INITDISPLAY");
this.epDisponibles = [] this.epDisponibles = []
@ -51,11 +99,15 @@ export class HomeAssistanteComponent implements OnInit, AfterViewInit {
epDisplay.type = ep.type; epDisplay.type = ep.type;
this.epDisponibles.push(epDisplay); this.epDisponibles.push(epDisplay);
} }
this.epFiltre = this.epDisponibles;
} }
/**
* Mise à jour du tableau lorsque qu'un tri est fait via les checkboxes.
*/
refreshDataSource() { refreshDataSource() {
console.log("REFRESH"); console.log("REFRESH");
this.epFiltre =this.epDisponibles; //this.epFiltre = this.epDisponibles;
this.dataSource = new MatTableDataSource(this.epFiltre); this.dataSource = new MatTableDataSource(this.epFiltre);
console.log(this.dataSource.paginator); console.log(this.dataSource.paginator);
this.dataSource.paginator = this.paginator; this.dataSource.paginator = this.paginator;
@ -64,6 +116,9 @@ export class HomeAssistanteComponent implements OnInit, AfterViewInit {
this.dataSource.sort = this.sort; this.dataSource.sort = this.sort;
} }
/**
* Récupérer la liste des EP Disponibles dès l'initialisation
*/
ngOnInit() { ngOnInit() {
console.log("INIT"); console.log("INIT");
this.epDisponiblesSubscription = this.serviceEP.listeEPDisponibles(). this.epDisponiblesSubscription = this.serviceEP.listeEPDisponibles().
@ -73,6 +128,10 @@ export class HomeAssistanteComponent implements OnInit, AfterViewInit {
}); });
} }
/**
* Cette fonction permet de mettre à jour le filtre du tableau
*/
applyFilter(filterValue: string) { applyFilter(filterValue: string) {
console.log(filterValue); console.log(filterValue);
filterValue = filterValue.trim(); filterValue = filterValue.trim();
@ -80,100 +139,13 @@ export class HomeAssistanteComponent implements OnInit, AfterViewInit {
this.dataSource.filter = filterValue; this.dataSource.filter = filterValue;
} }
/**
* Détruire toutes les Subscriptions utilisées pour libérer de la mémoire après le changement de page.
*/
ngOnDestroy() { ngOnDestroy() {
console.log("DESTROY"); console.log("DESTROY");
if(this.epDisponiblesSubscription != null) { if(this.epDisponiblesSubscription != null) {
this.epDisponiblesSubscription.unsubscribe(); this.epDisponiblesSubscription.unsubscribe();
} }
} }
}
/*private collabListSubscription : Subscription;
private collab1Subscription : Subscription;
private collab2Subscription : Subscription;
private listeCollaborateurs : CollaborateurModel[];
private formationSubscription : Subscription;
private addFormationSubscription : Subscription;
private epEnvoieSubscription : Subscription;
private epCollaborateurSubscription : Subscription;
private epDisponiblesSubscription : Subscription;
private epCollaborateurProchain : Subscription;
//*/
//********TEST********//
/*let ep = new EpModel();
ep.id = 10;
ep.type ="EPA";
//ep.dateDisponibilite = new Date(2020,0,5,25,30);
ep.dateDisponibilite = new Date(2020,0,0,25,30);
ep.etat = "créer";
let collaborateur = new CollaborateurModel();
collaborateur.id = 1;
collaborateur.nom = "GRETTE";
collaborateur.prenom = "Yanaël";
collaborateur.mail = "yanael.grette@apside-groupe.com";
collaborateur.agence = "Orléans";
collaborateur.fonction = "Stagiaire";
ep.collaborateur = collaborateur;
this.epEnvoieSubscription = this.serviceEP.envoieEP(ep, "saisie").
subscribe(eps => this.display(eps));
//this.epCollaborateurProchain = this.serviceEP.prochainEPCollaborateur(3).
//subscribe(eps => this.display(eps));
//this.epCollaborateurSubscription = this.serviceEP.listeEPCollaborateur(1).
//subscribe(eps => this.display(eps));
/*
let formation = new FormationModel();
formation.intitule = "TestJAVA";
formation.dateDebut = new Date("10-12-2020");
formation.dateFin = new Date("10-12-2020");
formation.statut = "Prévue";
formation.lieu = "Orléans";
formation.duree = 5;
formation.organisme = "Apside";
formation.nomFormateur = "Patrick";
console.log(formation.dateDebut);
this.addFormationSubscription = this.serviceFormation.nouvelleFormation(formation)
.subscribe();
this.formationSubscription = this.serviceFormation.listeFormations()
.subscribe(formations=> this.display(formations));
/*
this.collabListSubscription = this.serviceCollaborateur.listeCollaborateurs(token).
subscribe(collaborateurs => this.test(collaborateurs));
let params = { mail : "angelique@apside.com"};
this.collab1Subscription = this.serviceCollaborateur.getCollaborateurByParam(token,params).
subscribe(collaborateurs => this.test2(collaborateurs));
let params2 = { id : 1 };
this.collab2Subscription = this.serviceCollaborateur.getCollaborateurByParam(token,params2).
subscribe(collaborateurs => this.test2(collaborateurs));
console.log(token);*
//*/
/*if(this.collabListSubscription != null) {
this.collabListSubscription.unsubscribe();
}*/
/*
if(this.formationSubscription != null) {
this.formationSubscription.unsubscribe();
}
if(this.addFormationSubscription != null) {
this.addFormationSubscription.unsubscribe();
}
if(this.epEnvoieSubscription != null) {
this.epEnvoieSubscription.unsubscribe();
}
if(this.epCollaborateurSubscription != null) {
this.epCollaborateurSubscription.unsubscribe();
} }
if(this.epDisponiblesSubscription != null) {
this.epDisponiblesSubscription.unsubscribe();
}
if(this.epCollaborateurProchain != null) {
this.epCollaborateurProchain.unsubscribe();
}
*/

@ -1,5 +1,12 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
/**
* Le composant home qui sera affiché uniquement pour les collaborateurs.
* Cette interface permet au collaborateur de savoir le nombre de temps restant avant la possibilité de saisir son EP.
* Une fois l'EP saisie, il aura les informations nécessaires sur son EP (la date, l'état de l'EP et son référent pour l'EP).
* Dans le cas des collaborateurs référents, ils auront aussi la liste des prochains EP qu'ils devront faire passer.
*/
@Component({ @Component({
selector : 'home-collaborateur', selector : 'home-collaborateur',
templateUrl : 'home-collaborateur.component.html' templateUrl : 'home-collaborateur.component.html'

@ -1,5 +1,12 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
/**
* Le composant home qui sera affiché uniquement pour les commerciaux.
* Cette interface affiche la liste des prochains EP que feront passer les commerciaux.
* Les informations qui seront affichées sont : l'agence, le collaborateur, l'ancienneté du collaborateur, l'état de l'EP, la date d'entretien prévu.
* Les commerciaux peuvent trier le tableau d'EP par rapport aux colonnes, par agences et utiliser une barre de recherche.
*/
@Component({ @Component({
selector : 'home-commercial', selector : 'home-commercial',
templateUrl : 'home-commercial.component.html' templateUrl : 'home-commercial.component.html'

@ -1,5 +1,11 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
/**
* Le composant home qui sera affiché pour les RH
* Cette interface affiche la liste des prochaines formations
* Les informations qui seront affichées sont : le libellé, la date prévu, le nombre de participant, l'état de la formation
* Il est possible d'accéder aux informations de la formation depuis le home
*/
@Component({ @Component({
selector : 'home-rh', selector : 'home-rh',
templateUrl : 'home-rh.component.html' templateUrl : 'home-rh.component.html'

@ -6,6 +6,11 @@ import { Role } from '../utils/roles';
import { environment } from '../../environments/' import { environment } from '../../environments/'
/**
* Home principale qui fera affiché le home correspondant au rôle de l'utilisateur connecté.
* Les homes disponibles sont : home-assistante, home-collaborateur, home-commercial et home-rh.
* Le rôle dépend directement du rôle Keycloak et est donc récupérér dans l'instance de Keycloak.
*/
@Component({ @Component({
selector: 'app-home', selector: 'app-home',
templateUrl: './home.component.html' templateUrl: './home.component.html'
@ -13,6 +18,9 @@ import { environment } from '../../environments/'
export class HomeComponent implements OnInit { export class HomeComponent implements OnInit {
role = Role; role = Role;
/**
* Le rôle de l'utilisateur.
*/
userRole : string; userRole : string;
constructor(private keycloakService : KeycloakService) { constructor(private keycloakService : KeycloakService) {
let clientId = environment.keycloakConfig.clientId; let clientId = environment.keycloakConfig.clientId;

@ -1,3 +1,7 @@
/**
* Model qui contient les informations du collaborateur.
* Cette classe est aussi utilisé pour les commerciaux.
*/
export interface CollaborateurModel { export interface CollaborateurModel {
idCollaborateur? : number; idCollaborateur? : number;
nom? : string; nom? : string;

@ -1,5 +1,9 @@
import { CollaborateurModel } from "./modele-collaborateur"; import { CollaborateurModel } from "./modele-collaborateur";
//PLUSIEURS REFERENT AVEC LE DROIT D'ECRITURE ?! //PLUSIEURS REFERENT AVEC LE DROIT D'ECRITURE ?!
/**
* Modèle des EP que passent le collaborateur.
*/
export class EpModel { export class EpModel {
idEp? : number; idEp? : number;
type? : string; type? : string;
@ -21,20 +25,27 @@ export class EpModel {
notifications?: Notification[]; notifications?: Notification[];
}; };
/**
* Modèle de l'augmentation de salaire d'un collaborateur.
*/
export class AugmentationSalaireModel { export class AugmentationSalaireModel {
idAugmentation? : number; idAugmentation? : number;
nouveauSalaire? : number; nouveauSalaire? : number;
dateDemande? : Date; dateDemande? : Date;
}; };
/**
* Ce modèle correspond au proposition de date et heure de RDV et de type d'entretien fait par le référent.
*/
export class RDVEntretienModel { export class RDVEntretienModel {
idTypeEntretien? : number; idTypeEntretien? : number;
typeEntretien? :string; typeEntretien? :string;
dateEntretien? : Date; dateEntretien? : Date;
}; };
/**
* L'engagement que prend un référent vis-à-vis d'un collaborateur suite à son Ep.
*/
export class EngagementModel { export class EngagementModel {
idEngagement? : number; idEngagement? : number;
engagement? : string; engagement? : string;
@ -42,12 +53,20 @@ export class EngagementModel {
accomplie? : boolean; accomplie? : boolean;
}; };
/**
* Modèle d'un participant à un EP.
*/
export class ParticipantModel { export class ParticipantModel {
idParticipant? : number; idParticipant? : number;
collaborateur? : CollaborateurModel; collaborateur? : CollaborateurModel;
role? : string; role? : string;
}; };
/**
* Notification que reçoivent les collaborateurs et commerciaux.
*/
export class Notification { export class Notification {
idNotification? : number; idNotification? : number;
type? : string; type? : string;

@ -1,5 +1,8 @@
import { CollaborateurModel } from "./modele-collaborateur"; import { CollaborateurModel } from "./modele-collaborateur";
/**
* Modèle des formations
*/
export class FormationModel { export class FormationModel {
idFormation? : number; idFormation? : number;
intitule? : string; intitule? : string;
@ -14,6 +17,9 @@ export class FormationModel {
}; };
/**
* Modèle des demandes de formations effectués suite à un EP ou par une RH.
*/
export class DemandeFormationModel { export class DemandeFormationModel {
idDemandeFormation? : number; idDemandeFormation? : number;
idEp? : number; idEp? : number;
@ -23,13 +29,17 @@ export class DemandeFormationModel {
theme? : ThemeModel; theme? : ThemeModel;
}; };
/**
* Modèle des Theme auxquels peuvent appartenir une formation.
*/
export interface ThemeModel { export interface ThemeModel {
idTheme : number; idTheme : number;
nom : string; nom : string;
}; };
/**
* La partcipation d'un collaborateur à une formation.
*/
export interface ParticipationFormationModel { export interface ParticipationFormationModel {
idParticipation : number; idParticipation : number;
formation : FormationModel; formation : FormationModel;
@ -37,13 +47,19 @@ export interface ParticipationFormationModel {
evaluation : EvaluationFormationModel[]; evaluation : EvaluationFormationModel[];
} }
/**
* Le modèle des évaluations, il contient les réponses à un critère
*/
export class EvaluationFormationModel { export class EvaluationFormationModel {
note? : number; note? : number;
commentaire?: string; commentaire?: string;
critere? : CritereModel; critere? : CritereModel;
} }
/**
* Les critères sont les questions qui sont posées au collaborateur
*/
export interface CritereModel { export interface CritereModel {
idCritere?: number; idCritere?: number;
texte?: string; texte?: string;

@ -1,6 +1,9 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
/**
* Le nav-menu qui sera affiché pour l'assistante
* La navigation des assistantes : accès à la liste des référents, accès à la liste des collaborateurs, accès à la liste de tous les EP
*/
@Component({ @Component({
selector : "app-nav-menu-assistante", selector : "app-nav-menu-assistante",
templateUrl : "./nav-menu-assistante.component.html" templateUrl : "./nav-menu-assistante.component.html"

@ -1,6 +1,9 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
/**
* Le nav-menu qui sera affiché pour les collaborateurs
* La navigation des collaborateurs :
*/
@Component({ @Component({
selector : "app-nav-menu-collaborateur", selector : "app-nav-menu-collaborateur",
templateUrl : "./nav-menu-collaborateur.component.html" templateUrl : "./nav-menu-collaborateur.component.html"

@ -1,6 +1,9 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
/**
* Le nav-menu qui sera affiché pour les collaborateurs
* La navigation des collaborateurs :
*/
@Component({ @Component({
selector : "app-nav-menu-commercial", selector : "app-nav-menu-commercial",
templateUrl : "./nav-menu-commercial.component.html" templateUrl : "./nav-menu-commercial.component.html"

@ -1,6 +1,9 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
/**
* Le nav-menu qui sera affiché pour les collaborateurs
* La navigation des collaborateurs :
*/
@Component({ @Component({
selector : "app-nav-menu-rh", selector : "app-nav-menu-rh",
templateUrl : "./nav-menu-rh.component.html" templateUrl : "./nav-menu-rh.component.html"

@ -5,6 +5,13 @@ import { Role } from '../utils/roles';
import { environment } from '../../environments/' import { environment } from '../../environments/'
/**
* Le composant du nav menu de base.
* Ce composant se charge de faire afficher le bon nav pour chaque utilisateur en fonction du rôle de ce dernier.
* Liste des nav utilisateurs : nav-menu-assistante, nav-menu-collaborateur, nav-menu-commercial et nav-menu-rh.
* Chaque nav permettra à chaque utilisateur d'avoir sa navigation
* Le nav menu pour tous affichera affiche les informs de l'utilisateur (nom+prénom) et permettra de se déconnecter
*/
@Component({ @Component({
selector: 'app-nav-menu', selector: 'app-nav-menu',
templateUrl: './nav-menu.component.html', templateUrl: './nav-menu.component.html',
@ -12,7 +19,13 @@ import { environment } from '../../environments/'
export class NavMenuComponent { export class NavMenuComponent {
role = Role; role = Role;
/**
* Le rôle de l'utilisateur.
*/
userRole : string; userRole : string;
/**
* Les informations (nom+prénom) de l'utilisateur.
*/
userInfo : string; userInfo : string;
constructor(private keycloakService : KeycloakService){ constructor(private keycloakService : KeycloakService){
let clientId = environment.keycloakConfig.clientId; let clientId = environment.keycloakConfig.clientId;
@ -21,7 +34,7 @@ export class NavMenuComponent {
this.userInfo = profil.firstName+" "+profil.lastName; this.userInfo = profil.firstName+" "+profil.lastName;
} }
isExpanded = false; //isExpanded = false;
async logout() { async logout() {
await this.keycloakService.logout(); await this.keycloakService.logout();

@ -1,3 +1,7 @@
/**
* Class pour récupérer les informations d'un EP qui seront affichées et/ou utilisées
*/
export class DisplayEP { export class DisplayEP {
id : number; id : number;
agence : string; agence : string;

@ -1,3 +1,6 @@
/**
* Enumération des rôles utilisateur dans Keycloak
*/
export enum Role { export enum Role {
collaborateur = "Collaborateur", collaborateur = "Collaborateur",
assistante = "Assistante", assistante = "Assistante",

Loading…
Cancel
Save