From 3bfc264c12c39ad7196f57add0041768a2ac0e2f Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Fri, 12 Mar 2021 09:29:00 +0100 Subject: [PATCH] Ajout du service DemandeFormationService --- .../IServices/IDemandeFormationService.cs | 2 +- .../Services/DemandeFormationService.cs | 688 ++++++++---------- EPAServeur/Startup.cs | 1 + 3 files changed, 291 insertions(+), 400 deletions(-) diff --git a/EPAServeur/IServices/IDemandeFormationService.cs b/EPAServeur/IServices/IDemandeFormationService.cs index b88042b..e2613c1 100644 --- a/EPAServeur/IServices/IDemandeFormationService.cs +++ b/EPAServeur/IServices/IDemandeFormationService.cs @@ -13,7 +13,7 @@ namespace EPAServeur.IServices { Task> GetOriginesDemandeFormationAsync(); Task> GetDemandesFormationAsync(List etatsDemande, List idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin); - Task> GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin); + Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin); Task AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO); Task UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO); Task DeleteDemandeFormationAsync(long idDemandeFormation); diff --git a/EPAServeur/Services/DemandeFormationService.cs b/EPAServeur/Services/DemandeFormationService.cs index 36051c6..1da2421 100644 --- a/EPAServeur/Services/DemandeFormationService.cs +++ b/EPAServeur/Services/DemandeFormationService.cs @@ -24,10 +24,15 @@ namespace EPAServeur.Services private readonly EpContext epContext; /// - /// Accès et service collaborateur + /// Accès au service collaborateur /// private readonly ICollaborateurService collaborateurService; + /// + /// Accès au service permettant de transformer un modèle en dto + /// + private readonly ITransformDTO transformDTO; + /// /// Nombre d'éléments min à afficher par page /// @@ -62,10 +67,11 @@ namespace EPAServeur.Services /// Constructeur de la classe FormationService /// /// - public DemandeFormationService(EpContext _epContext, ICollaborateurService _collaborateurService) + public DemandeFormationService(EpContext _epContext, ICollaborateurService _collaborateurService, ITransformDTO _transformDTO) { epContext = _epContext; collaborateurService = _collaborateurService; + transformDTO = _transformDTO; } #endregion @@ -83,7 +89,7 @@ namespace EPAServeur.Services origineDemandes = await epContext.OrigineDemandeFormation.ToListAsync(); - origineDemandeDTOs = origineDemandes.Select(origineFormation => GetOrigineDemandeFormationDTO(origineFormation)); + origineDemandeDTOs = origineDemandes.Select(origineFormation => transformDTO.GetOrigineDemandeFormationDTO(origineFormation)); return origineDemandeDTOs; } @@ -110,25 +116,22 @@ namespace EPAServeur.Services query = epContext.DemandeFormation .Include(demandeFormation => demandeFormation.Ep) + .Include(demandeFormation => demandeFormation.OrigineDemande) .Include(demandeFormation => demandeFormation.ParticipationFormation) .ThenInclude(participationFormation => participationFormation.Formation); - query = EtatsDemandeFilter(query, etatsDemande); - query = IdBUsFilter(query, idBUs); - query = DateFilter(query, dateDebut, dateFin); - - query = OrderByColumn(query, asc, tri); - query = SkipAndTake(query, parPage, numPage); demandeFormations = await query.ToListAsync(); - collaborateurDTOs = await GetCollaborateurDTOs(demandeFormations); + collaborateurDTOs = await collaborateurService.GetCollaborateurDTOsAsync(demandeFormations); - demandeFormationDTOs = demandeFormations.Select(demandeFormation => GetDemandeFormationDTO(demandeFormation, collaborateurDTOs)); + demandeFormationDTOs = demandeFormations.Select(demandeFormation => transformDTO.GetDemandeFormationDTO(demandeFormation, collaborateurDTOs)); + demandeFormationDTOs = CollaborateurFilter(demandeFormationDTOs, texte); + demandeFormationDTOs = OrderByColumn(demandeFormationDTOs, asc, tri); return demandeFormationDTOs; @@ -143,19 +146,67 @@ namespace EPAServeur.Services /// Date à partir de laquelle les données son récupérées /// Date jusqu'à laquelle les données sont récupérées /// - public async Task> GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin) + public async Task GetDemandesFormationCountAsync(List etatsDemande, List idBUs, string texte, DateTime? dateDebut, DateTime? dateFin) { - throw new NotImplementedException(); + IQueryable query; + IEnumerable demandeFormations; + IEnumerable demandeFormationDTOs; + IEnumerable collaborateurDTOs; + long count; + + query = epContext.DemandeFormation + .Include(demandeFormation => demandeFormation.Ep) + .Include(demandeFormation => demandeFormation.ParticipationFormation) + .ThenInclude(participationFormation => participationFormation.Formation); + + query = EtatsDemandeFilter(query, etatsDemande); + query = IdBUsFilter(query, idBUs); + query = DateFilter(query, dateDebut, dateFin); + + demandeFormations = await query.ToListAsync(); + + collaborateurDTOs = await collaborateurService.GetCollaborateurDTOsAsync(demandeFormations); + + demandeFormationDTOs = demandeFormations.Select(demandeFormation => transformDTO.GetDemandeFormationDTO(demandeFormation, collaborateurDTOs)); + demandeFormationDTOs = CollaborateurFilter(demandeFormationDTOs, texte); + + count = demandeFormationDTOs.Count(); + + return count; } /// - /// Créer demande de formation pour un collaborateur. + /// Créer une demande de formation pour un collaborateur. /// /// + /// /// public async Task AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO) { - throw new NotImplementedException(); + IsDemandeFormationValide(demandeFormationDTO); + + if (demandeFormationDTO.EtatDemande != EtatDemande.EnAttente) + throw new DemandeFormationInvalidException("Impossible de créer une demande de formation qui n'est pas en attente."); + + string collaborateur = string.Format("{0} {1}", demandeFormationDTO.Collaborateur.Nom, demandeFormationDTO.Collaborateur.Prenom); + + DemandeFormation demandeFormation = transformDTO.SetDemandeFormationWithoutParticipationFormationAndEp(new DemandeFormation(), demandeFormationDTO); + + IEnumerable statutsEp = Enum.GetValues(typeof(StatutEp)).Cast().Where(statut => statut == StatutEp.Cree || EstEpEnCours(statut)); + + Ep ep = await epContext.Ep.Include(ep => ep.DemandesFormation) + .Where(ep => ep.IdCollaborateur == demandeFormationDTO.Collaborateur.Id && statutsEp.Contains(ep.Statut)) + .OrderBy(ep => ep.DateDisponibilite).FirstOrDefaultAsync(); + if (ep == null) + throw new DemandeFormationInvalidException(string.Format("Il n'existe aucun EP en cours ou créé pour le collaborateur {0}.", collaborateur)); + + ep.DemandesFormation.Add(demandeFormation); + + await epContext.SaveChangesAsync(); + + demandeFormationDTO.Id = demandeFormation.IdDemandeFormation; + + return demandeFormationDTO; } /// @@ -163,10 +214,30 @@ namespace EPAServeur.Services /// /// /// + /// + /// + /// public async Task UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) { - throw new NotImplementedException(); + IsDemandeFormationValide(demandeFormationDTO); + + if (!demandeFormationDTO.Id.HasValue || demandeFormationDTO.Id.Value != idDemandeFormation) + throw new DemandeFormationIncompatibleIdException("La demande de formation ne correspond pas avec l'identifiant reçu."); + + switch (demandeFormationDTO.EtatDemande) + { + case EtatDemande.EnAttente: + throw new DemandeFormationInvalidException("La demande ne peut pas être mise à jour si aucune réponse n'a été donnée."); + case EtatDemande.Validee: + demandeFormationDTO = await AccepterDemandeFormation(idDemandeFormation, demandeFormationDTO); + break; + case EtatDemande.Rejetee: + demandeFormationDTO = await RefuserDemandeFormation(idDemandeFormation, demandeFormationDTO); + break; + } + + return demandeFormationDTO; } /// @@ -176,7 +247,22 @@ namespace EPAServeur.Services /// public async Task DeleteDemandeFormationAsync(long idDemandeFormation) { - throw new NotImplementedException(); + IEnumerable statutsEp = Enum.GetValues(typeof(StatutEp)).Cast().Where(statut => statut == StatutEp.Cree || EstEpEnCours(statut)); + DemandeFormation demandeFormation = await epContext.DemandeFormation.Include(demandeFormation => demandeFormation.Ep) + .FirstOrDefaultAsync(demandeFormation => demandeFormation.IdDemandeFormation == idDemandeFormation); + + if (demandeFormation == null) + throw new DemandeFormationNotFoundException("Aucune demande de formation n'a été trouvée."); + + if (!statutsEp.Contains(demandeFormation.Ep.Statut)) + throw new DemandeFormationInvalidException(string.Format("L'EP {1} qui est rattaché à la demande de formation {0} n'est ni créé ni en cours. Statut de l'EP {1}: {2}.", demandeFormation.IdDemandeFormation, demandeFormation.Ep.IdEP, demandeFormation.Ep.Statut)); + + epContext.Remove(demandeFormation); + + await epContext.SaveChangesAsync(); + + return true; + } @@ -184,13 +270,101 @@ namespace EPAServeur.Services #region Méthodes Privée /// - /// Vérifier si un objet DemandeFormationDTO est valide pour une mise à jour + /// Accepter une demande de formation. + /// + /// Créer une participation formation et associe cette dernière la demande de formation + /// + /// + /// + /// + /// + private async Task AccepterDemandeFormation(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) + { + // Vérifier que la demande de formation a bien une formation + if (demandeFormationDTO.Formation == null || !demandeFormationDTO.Formation.Id.HasValue) + throw new DemandeFormationInvalidException("Une formation est requise pour accepter une demande de formation."); + + + DemandeFormation demandeFormation = await epContext.DemandeFormation.Include(d => d.ParticipationFormation) + .Include(d => d.Ep) + .FirstOrDefaultAsync(d => d.IdDemandeFormation == idDemandeFormation); + + if (demandeFormation == null) + throw new DemandeFormationNotFoundException("Aucune demande de formation n'a été trouvée."); + + Guid idCollaborateur = demandeFormation.Ep.IdCollaborateur; // devra être utilisé pour notifier le collaborateur + DateTime dateNow = DateTime.Now; + Formation formation = transformDTO.GetFormation(demandeFormationDTO.Formation); + ParticipationFormation participationFormation = new ParticipationFormation { DateCreation = dateNow, Formation = formation }; + + demandeFormation.Etat = demandeFormationDTO.EtatDemande; + demandeFormation.DateDerniereReponse = dateNow; + demandeFormation.ParticipationFormation = participationFormation; + + await epContext.SaveChangesAsync(); + int nbParticipations = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).Where(p => p.Formation.IdFormation == formation.IdFormation).CountAsync(); + + demandeFormationDTO.EtatDemande = demandeFormation.Etat; + demandeFormationDTO.DateDerniereReponse = demandeFormation.DateDerniereReponse; + demandeFormationDTO.Formation.NbParticipations = nbParticipations; + + return demandeFormationDTO; + } + + /// + /// Refuser une demande de formation. + /// + /// Supprime la participation formation qui est liée à la demande de formation + /// + /// + /// + /// + /// + private async Task RefuserDemandeFormation(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) + { + // Vérifier que la demande de formation a bien un commentaire expliquant la raison pour laquelle la demande a été refusée + if (string.IsNullOrWhiteSpace(demandeFormationDTO.CommentaireRefus)) + throw new DemandeFormationInvalidException("Un commentaire expliquant la raison pour laquelle la demande a été refusée est requis."); + + DemandeFormation demandeFormation = await epContext.DemandeFormation.Include(d => d.ParticipationFormation) + .Include(d => d.Ep) + .FirstOrDefaultAsync(d => d.IdDemandeFormation == idDemandeFormation); + + if (demandeFormation == null) + throw new DemandeFormationNotFoundException("Aucune demande de formation n'a été trouvée."); + + Guid idCollaborateur = demandeFormation.Ep.IdCollaborateur; // devra être utilisé pour notifier le collaborateur + + demandeFormation.Etat = demandeFormationDTO.EtatDemande; + demandeFormation.CommentaireRefus = demandeFormationDTO.CommentaireRefus; + demandeFormation.DateDerniereReponse = DateTime.Now; + + if (demandeFormation.ParticipationFormation != null) + epContext.Remove(demandeFormation.ParticipationFormation); + + await epContext.SaveChangesAsync(); + + if (demandeFormationDTO.Formation != null && demandeFormationDTO.Formation.Id.HasValue) + { + int nbParticipations = await epContext.ParticipationFormation.Include(p => p.DemandeFormation).Where(p => p.Formation.IdFormation == demandeFormationDTO.Formation.Id.Value).CountAsync(); + demandeFormationDTO.Formation.NbParticipations = nbParticipations; + } + + demandeFormationDTO.EtatDemande = demandeFormation.Etat; + demandeFormationDTO.DateDerniereReponse = demandeFormation.DateDerniereReponse; + + return demandeFormationDTO; + } + + /// + /// Vérifier si un objet DemandeFormationDTO est valide pour une mise à jour. /// /// /// Un objet DemandeFormationDTO est valide si l'objet n'est pas null, si le libellé, la descritpion, /// la date de demande de début et la valeur permettant de dire si la demande a été créé par une RH ou non ne sont pas null. /// /// + /// /// true si l'objet est valide, false sinon private void IsDemandeFormationValide(DemandeFormationDTO demande) { @@ -213,91 +387,135 @@ namespace EPAServeur.Services // Vérifier que la demande de formation a bien une date de demande if (!demande.DateDemande.HasValue) throw new DemandeFormationInvalidException("Une date de demande de formation est requise."); + + // Vérifier que la demande de formation a bien un collaborateur + if (demande.Collaborateur == null || !demande.Collaborateur.Id.HasValue) + throw new DemandeFormationInvalidException("Un collaborateur est requis pour une demande de formation."); + + // Vérifier que la demande de formation a bien un collaborateur + if (demande.Origine == null || !demande.Origine.Id.HasValue) + throw new DemandeFormationInvalidException("Une origine de formation est requise pour une demande de formation."); } /// - /// Ajouter un ordonnancement croissant ou décroissant sur colonne + /// Ajouter un ordonnancement croissant ou décroissant sur une colonne. /// /// /// /// /// - private IQueryable OrderByColumn(IQueryable query, bool? asc, string columnName) + private IEnumerable OrderByColumn(IEnumerable query, bool? asc, string columnName) { if (!asc.HasValue) asc = defaultAsc; if (string.IsNullOrWhiteSpace(columnName)) + return OrderByDefault(query, (bool)asc); + + if ((bool)asc) + return OrderByAscending(query, columnName); + else + return OrderByDescending(query, columnName); + } + + /// + /// Ajouter un ordonnancement croissant sur une colonne. + /// + /// + /// + /// + private IEnumerable OrderByAscending(IEnumerable query, string columnName) + { + switch (columnName.ToLower()) { - if (asc.Value) - return query.OrderBy(p => p.Libelle); - else - return query.OrderByDescending(p => p.Libelle); + case "businessunit": + return query.OrderBy(d => d.Collaborateur.BusinessUnit.Nom); + case "collaborateur": + return query.OrderBy(d => d.Collaborateur.Nom); + case "datedemande": + return query.OrderBy(d => d.DateDemande); + case "demanderh": + return query.OrderBy(d => d.DemandeRH); + case "etat": + return query.OrderBy(d => d.EtatDemande); + case "datereponse": + return query.OrderBy(d => d.DateDerniereReponse); + default: + return query.OrderBy(p => p.Collaborateur.Nom); } + } + /// + /// Ajouter un ordonnancement décroissant sur une colonne. + /// + /// + /// + /// + private IEnumerable OrderByDescending(IEnumerable query, string columnName) + { switch (columnName.ToLower()) { case "businessunit": - if (asc.Value) - return query.OrderBy(d => d.Libelle); - else - return query.OrderByDescending(p => p.Libelle); - - + return query.OrderByDescending(d => d.Collaborateur.BusinessUnit.Nom); + case "collaborateur": + return query.OrderByDescending(d => d.Collaborateur.Nom); + case "datedemande": + return query.OrderByDescending(d => d.DateDemande); + case "demanderh": + return query.OrderByDescending(d => d.DemandeRH); + case "etat": + return query.OrderByDescending(d => d.EtatDemande); + case "datereponse": + return query.OrderByDescending(d => d.DateDerniereReponse); default: - if (asc.Value) - return query.OrderBy(p => p.Libelle); - else - return query.OrderByDescending(p => p.Libelle); + return query.OrderByDescending(d => d.Collaborateur.Nom); } } /// - /// Ajouter un filtre pour récupérer les demandes de formation en fonction de plusieurs états de demande + /// Ajouter un ordonnancement par défaut. /// /// - /// + /// /// - private IQueryable EtatsDemandeFilter(IQueryable query, List etatsDemande) + private IEnumerable OrderByDefault(IEnumerable query, bool asc) { - if (etatsDemande != null && etatsDemande.Count > 0) - return query.Where(demandeFormation => etatsDemande.Contains(demandeFormation.Etat)); + if (asc) + return query.OrderBy(p => p.Collaborateur.Nom); else - return query; + return query.OrderByDescending(p => p.Collaborateur.Nom); } /// - /// Ajouter un filtre pour récupérer les demandes de formation en fonction de l'id BU des collaborateurs + /// Ajouter un filtre pour récupérer les demandes de formation en fonction de plusieurs états de demande. /// /// - /// + /// /// - private IQueryable IdBUsFilter(IQueryable query, List idBus) + private IQueryable EtatsDemandeFilter(IQueryable query, List etatsDemande) { - if (idBus != null && idBus.Count > 0) - return query.Where(demandeFormation => idBus.Contains(demandeFormation.Ep.IdBu)); + if (etatsDemande != null && etatsDemande.Count > 0) + return query.Where(demandeFormation => etatsDemande.Contains(demandeFormation.Etat)); else return query; } - - /// - /// Ajouter un filtre pour récupérer les formations en fonction d'un intitulé + /// Ajouter un filtre pour récupérer les demandes de formation en fonction de l'id BU des collaborateurs. /// /// - /// + /// /// - private IQueryable IntituleFilter(IQueryable query, string intitule) + private IQueryable IdBUsFilter(IQueryable query, List idBus) { - if (!string.IsNullOrWhiteSpace(intitule)) - return query.Where(formation => formation.Intitule.ToLower().Contains(intitule.ToLower())); + if (idBus != null && idBus.Count > 0) + return query.Where(demandeFormation => idBus.Contains(demandeFormation.Ep.IdBu)); else return query; } /// - /// Ajouter un filtre pour récupérer les formations en fonction d'un intervalle de date + /// Ajouter un filtre pour récupérer les formations en fonction d'un intervalle de date. /// /// /// @@ -317,7 +535,22 @@ namespace EPAServeur.Services } /// - /// Ajouter une pagination + /// Ajouter un filtre pour récupérer les demandes de formation en fonction du nom et du prénom du collaborateur. + /// + /// + /// + /// + private IEnumerable CollaborateurFilter(IEnumerable demandeFormationDTOs, string texte) + { + if (string.IsNullOrWhiteSpace(texte)) + return demandeFormationDTOs; + + return demandeFormationDTOs.Where(demandeFormation => (demandeFormation.Ep.Collaborateur.Nom + " " + demandeFormation.Ep.Collaborateur.Prenom).ToLower().Contains(texte.ToLower()) || + (demandeFormation.Ep.Collaborateur.Prenom + " " + demandeFormation.Ep.Collaborateur.Nom).ToLower().Contains(texte.ToLower())); + } + + /// + /// Ajouter une pagination. /// /// /// @@ -340,353 +573,10 @@ namespace EPAServeur.Services return query.Skip(skip).Take(take); } - - - #region Object to DTO - - /// - /// Récuperer un objet OrigineDemandeFormationDTO en fonction d'un objet OrigineDemande - /// - /// - /// - private OrigineDemandeFormationDTO GetOrigineDemandeFormationDTO(OrigineDemande origineDemande) - { - if (origineDemande == null) - return null; - - OrigineDemandeFormationDTO origineDemandeFormationDTO = new OrigineDemandeFormationDTO() - { - Id = origineDemande.IdOrigineDemande, - Libelle = origineDemande.Libelle - }; - - return origineDemandeFormationDTO; - } - - /// - /// Récuperer un objet DemandeFormationDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private DemandeFormationDTO GetDemandeFormationDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) - { - if (demandeFormation == null) - return null; - - if (collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - DemandeFormationDTO demandeFormationDTO = new DemandeFormationDTO() - { - Id = demandeFormation.IdDemandeFormation, - Libelle = demandeFormation.Libelle, - Description = demandeFormation.Description, - DemandeRH = demandeFormation.DemandeRH, - DateDemande = demandeFormation.DateDemande, - EtatDemande = demandeFormation.Etat, - CommentaireRefus = demandeFormation.CommentaireRefus, - DateDerniereReponse = demandeFormation.DateDerniereReponse, - //Origine = GetOrigineDemandeFormationDTO(demandeFormation.OrigineFormation), // Voir avec Yanael - Collaborateur = GetCollaborateurDTO(demandeFormation, collaborateurDTOs), - Ep = GetEpInformationDTO(demandeFormation.Ep, collaborateurDTOs), - Formation = GetFormationDTO(demandeFormation.ParticipationFormation.Formation, collaborateurDTOs) - }; - - return demandeFormationDTO; - } - - /// - /// Récuperer un objet FormationDTO avec des participations en fonction d'un objet Formation et d'une liste de CollaborateurDTO - /// - /// - /// - private FormationDTO GetFormationDTO(Formation formation, IEnumerable collaborateurDTOs) - { - if (formation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - FormationDTO formationDTO = new FormationDTO() - { - Id = formation.IdFormation, - Intitule = formation.Intitule, - IdAgence = formation.IdAgence, - DateDebut = formation.DateDebut, - DateFin = formation.DateFin, - Heure = formation.Heure, - Jour = formation.Jour, - Organisme = formation.Organisme, - EstCertifiee = formation.EstCertifiee, - EstRealisee = formation.EstRealisee, - Origine = GetOrigineFormationDTO(formation.Origine), - Statut = GetStatutFormationDTO(formation.Statut), - Mode = GetModeFormationDTO(formation.ModeFormation), - Type = GetTypeFormationDTO(formation.TypeFormation), - Participations = GetParticipationsFormationDTO(formation.ParticipationsFormation, collaborateurDTOs) - }; - - return formationDTO; - } - - /// - /// Récuperer un objet OrigineFormationDTO en fonction d'un objet OrigineFormation - /// - /// - /// - private OrigineFormationDTO GetOrigineFormationDTO(OrigineFormation origineFormation) - { - if (origineFormation == null) - return null; - - OrigineFormationDTO origineFormationDTO = new OrigineFormationDTO() - { - Id = origineFormation.IdOrigineFormation, - Libelle = origineFormation.Libelle - }; - - return origineFormationDTO; - } - - /// - /// Récuperer un objet StatutFormationDTO en fonction d'un objet StatutFormation - /// - /// - /// - private StatutFormationDTO GetStatutFormationDTO(StatutFormation statutFormation) - { - if (statutFormation == null) - return null; - - StatutFormationDTO statutFormationDTO = new StatutFormationDTO() - { - Id = statutFormation.IdStatutFormation, - Libelle = statutFormation.Libelle - }; - - return statutFormationDTO; - } - - /// - /// Récuperer un objet ModeFormationDTO en fonction d'un objet ModeFormation - /// - /// - /// - private ModeFormationDTO GetModeFormationDTO(ModeFormation modeFormation) - { - if (modeFormation == null) - return null; - - ModeFormationDTO modeFormationDTO = new ModeFormationDTO() - { - Id = modeFormation.IdModeFormation, - Libelle = modeFormation.Libelle - }; - - return modeFormationDTO; - } - - /// - /// Récuperer un objet TypeFormationDTO en fonction d'un objet TypeFormation - /// - /// - /// - private TypeFormationDTO GetTypeFormationDTO(TypeFormation typeFormation) - { - if (typeFormation == null) - return null; - - TypeFormationDTO typeFormationDTO = new TypeFormationDTO() - { - Id = typeFormation.IdTypeFormation, - Libelle = typeFormation.Libelle - }; - - return typeFormationDTO; - } - - /// - /// Récuperer une liste de ParticipationFormationDTO en fonction d'une liste de ParticipationFormation et d'une liste de CollaborateurDTO. Retourne null s'il n'y a aucune participation ou aucun collaborateur. - /// - /// - /// - private List GetParticipationsFormationDTO(List participationsFormation, IEnumerable collaborateurDTOs) - { - List participationFormationDTOs; - - if (participationsFormation == null || participationsFormation.Count == 0 || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - participationFormationDTOs = participationsFormation.Select(participationFormation => GetParticipationFormationDTO(participationFormation, collaborateurDTOs)) - .OrderBy(participationFormation => participationFormation.Collaborateur.Nom) - .ThenBy(participationFormation => participationFormation.Collaborateur.Prenom).ToList(); - - return participationFormationDTOs; - } - - /// - /// Récuperer un objet ParticipationFormationDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private ParticipationFormationDTO GetParticipationFormationDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs) - { - if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - ParticipationFormationDTO participationFormationDTO = new ParticipationFormationDTO() - { - Id = participationFormation.IdParticipationFormation, - DateCreation = participationFormation.DateCreation, - Intitule = participationFormation.Formation.Intitule, - DateDebut = participationFormation.Formation.DateDebut, - Statut = GetStatutFormationDTO(participationFormation.Formation.Statut), - Collaborateur = GetCollaborateurDTO(participationFormation, collaborateurDTOs), - Ep = GetEpInformationDTO(participationFormation.DemandeFormation.Ep, collaborateurDTOs) - }; - - return participationFormationDTO; - } - - /// - /// Récupère un objet CollaborateurDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private CollaborateurDTO GetCollaborateurDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs) - { - if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == participationFormation.DemandeFormation.Ep.IdCollaborateur); - } - - /// - /// Récupère un objet CollaborateurDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO - /// - /// - /// - private CollaborateurDTO GetCollaborateurDTO(DemandeFormation demandeFormation, IEnumerable collaborateurDTOs) - { - if (demandeFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == demandeFormation.Ep.IdCollaborateur); - } - - /// - /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucune demande de formation. - /// - /// - /// - private async Task> GetCollaborateurDTOs(IEnumerable demandeFormations) - { - if (demandeFormations == null || !demandeFormations.Any()) - return null; - - List guids = demandeFormations.SelectMany(demandeFormation => new[] { (Guid?)demandeFormation.Ep.IdCollaborateur, demandeFormation.Ep.IdReferent }).ToList(); - - return await collaborateurService.GetCollaborateurDTOsAsync(guids); ; - } - - - /// - /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucune participation. - /// - /// - /// - private async Task> GetCollaborateurDTOs(IEnumerable participationsFormation) - { - if (participationsFormation == null || !participationsFormation.Any()) - return null; - - List guids = participationsFormation.SelectMany(participationFormation => new[] { (Guid?)participationFormation.DemandeFormation.Ep.IdCollaborateur, participationFormation.DemandeFormation.Ep.IdReferent }).ToList(); - - return await collaborateurService.GetCollaborateurDTOsAsync(guids); ; - } - - /// - /// Récupère un objet EpInformationDTO en fonction d'un objet Ep et d'une liste de CollaborateurDTO - /// - /// - /// - private EpInformationDTO GetEpInformationDTO(Ep ep, IEnumerable collaborateurDTOs) - { - CollaborateurDTO collaborateur; - CollaborateurDTO referent; - - if (ep == null) - return null; - - if (collaborateurDTOs == null || !collaborateurDTOs.Any()) - return null; - - - collaborateur = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdCollaborateur); - referent = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdReferent); - - EpInformationDTO epInformationDTO = new EpInformationDTO() - { - Id = ep.IdEP, - Type = ep.TypeEP, - Statut = ep.Statut, - DateDisponibilite = ep.DateDisponibilite, - DatePrevisionnelle = ep.DatePrevisionnelle, - Obligatoire = ep.Obligatoire, - Collaborateur = collaborateur, - Referent = referent, - }; - - return epInformationDTO; - } - - #endregion - - #region DTO to Object - - /// - /// Récuperer un objet Saisie en fonction d'un objet SaisieDTO - /// - /// - /// - private Saisie GetSaisie(SaisieDTO saisieDTO) - { - if (saisieDTO == null) - return null; - - Saisie saisie = new Saisie() - { - //IdSaisie = saisieDTO.Id.Value, - Note = saisieDTO.Note, - Texte = saisieDTO.Texte, - Champ = GetChamp(saisieDTO.Champ), - TypeSaisie = saisieDTO.TypeSaisie - }; - - return saisie; - } - - /// - /// Récuperer un objet Champ en fonction d'un objet ChampDTO - /// - /// - /// - private Champ GetChamp(ChampDTO champDTO) + private bool EstEpEnCours(StatutEp statut) { - if (champDTO == null) - return null; - - Champ champ = new Champ() - { - IdChamp = champDTO.Id.Value, - Texte = champDTO.Texte, - Section = champDTO.Section, - SousSection = champDTO.Soussection, - Ordre = champDTO.Ordre.Value, - TypeChamp = champDTO.TypeChamp, - TypeSaisie = champDTO.TypeSaisie - }; - return champ; + return statut != StatutEp.Annule && statut != StatutEp.Cree && statut != StatutEp.Rejete && statut != StatutEp.Signe; } - #endregion #endregion diff --git a/EPAServeur/Startup.cs b/EPAServeur/Startup.cs index aec2766..0d9c80c 100644 --- a/EPAServeur/Startup.cs +++ b/EPAServeur/Startup.cs @@ -126,6 +126,7 @@ namespace EPAServeur services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped();