diff --git a/EPAServeur/Services/FormationService.cs b/EPAServeur/Services/FormationService.cs
index 2c25d60..fc35640 100644
--- a/EPAServeur/Services/FormationService.cs
+++ b/EPAServeur/Services/FormationService.cs
@@ -1,6 +1,7 @@
using EPAServeur.Context;
using EPAServeur.Exceptions;
using EPAServeur.IServices;
+using EPAServeur.Models.EP;
using EPAServeur.Models.Formation;
using IO.Swagger.DTO;
using Microsoft.EntityFrameworkCore;
@@ -20,6 +21,11 @@ namespace EPAServeur.Services
///
private readonly EpContext epContext;
+ ///
+ /// Accès et service collaborateur
+ ///
+ private readonly ICollaborateurService collaborateurService;
+
///
/// Nombre d'éléments min à afficher par page
///
@@ -53,9 +59,10 @@ namespace EPAServeur.Services
/// Constructeur de la classe FormationService
///
///
- public FormationService(EpContext _epContext)
+ public FormationService(EpContext _epContext, ICollaborateurService _collaborateurService)
{
epContext = _epContext;
+ collaborateurService = _collaborateurService;
}
#endregion
@@ -81,7 +88,12 @@ namespace EPAServeur.Services
if (formation == null)
throw new FormationNotFoundException(string.Format("Aucune formation trouvée avec l'id suivant: {0}.",idFormation));
- return GetFormationDTO(formation);
+ if (formation.ParticipationsFormation.Count == 0)
+ return GetFormationDTO(formation);
+
+ IEnumerable collaborateurDTOs = await GetCollaborateurDTOs(formation.ParticipationsFormation);
+
+ return GetFormationDTO(formation, collaborateurDTOs);
}
///
@@ -375,7 +387,15 @@ namespace EPAServeur.Services
if (!asc.HasValue)
asc = defaultAsc;
- switch (columnName)
+ if (string.IsNullOrWhiteSpace(columnName))
+ {
+ if (asc.Value)
+ return query.OrderBy(p => p.Intitule);
+ else
+ return query.OrderByDescending(p => p.Intitule);
+ }
+
+ switch (columnName.ToLower())
{
case "intitule":
if (asc.Value)
@@ -402,9 +422,6 @@ namespace EPAServeur.Services
return query.OrderBy(p => p.EstCertifiee);
else
return query.OrderByDescending(p => p.EstCertifiee);
- //(A faire lorsque la gestion des participations aux formations sera terminée)
- //case "participants":
- // return query;
default:
if (asc.Value)
return query.OrderBy(p => p.Intitule);
@@ -421,7 +438,7 @@ namespace EPAServeur.Services
///
private IQueryable IdStatutsFilter(IQueryable query, List idStatuts)
{
- if (idStatuts != null && idStatuts.Count > 0)
+ if (idStatuts != null && idStatuts.Count > 0 && idStatuts.First().HasValue)
return query.Where(formation => idStatuts.Contains(formation.Statut.IdStatutFormation));
else
return query;
@@ -523,7 +540,35 @@ namespace EPAServeur.Services
Statut = GetStatutFormationDTO(formation.Statut),
Mode = GetModeFormationDTO(formation.ModeFormation),
Type = GetTypeFormationDTO(formation.TypeFormation),
- Participations = GetParticipationsFormationDTO(formation.ParticipationsFormation)
+ };
+
+ return formationDTO;
+ }
+
+ ///
+ /// 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)
+ {
+ 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;
@@ -621,42 +666,120 @@ namespace EPAServeur.Services
}
///
- /// Récuperer une liste de ParticipationFormationDTO en fonction d'une liste de ParticipationFormation
+ /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents
///
///
///
- private List GetParticipationsFormationDTO(List participationsFormation)
+ private async Task> GetCollaborateurDTOs(List participationsFormation)
+ {
+ if (participationsFormation.Count == 0)
+ return null;
+
+ List guids = participationsFormation.SelectMany(participationFormation => new[] { (Guid?)participationFormation.DemandeFormation.Ep.IdCollaborateur, participationFormation.DemandeFormation.Ep.IdReferent }).ToList();
+
+ return await collaborateurService.GetCollaborateurDTOsAsync(guids); ;
+ }
+
+ ///
+ /// Récuperer une liste de ParticipationFormationDTO en fonction d'une liste de ParticipationFormation et d'une liste de CollaborateurDTO
+ ///
+ ///
+ ///
+ private List GetParticipationsFormationDTO(List participationsFormation, IEnumerable collaborateurDTOs)
{
List participationFormationDTOs;
- if (participationsFormation == null || participationsFormation.Count == 0)
+ if (participationsFormation == null || participationsFormation.Count == 0 || collaborateurDTOs == null || !collaborateurDTOs.Any())
return null;
- participationFormationDTOs = participationsFormation.Select(participationFormation => GetParticipationFormationDTO(participationFormation)).ToList();
+ 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
+ /// Récuperer un objet ParticipationFormationDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO
///
///
///
- private ParticipationFormationDTO GetParticipationFormationDTO(ParticipationFormation participationFormation)
+ private ParticipationFormationDTO GetParticipationFormationDTO(ParticipationFormation participationFormation, IEnumerable collaborateurDTOs)
{
- if (participationFormation == null)
- return null;
ParticipationFormationDTO participationFormationDTO = new ParticipationFormationDTO()
{
Id = participationFormation.IdParticipationFormation,
DateCreation = participationFormation.DateCreation,
Intitule = participationFormation.Formation.Intitule,
- DateDebut= participationFormation.Formation.DateDebut,
+ 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)
+ {
+ CollaborateurDTO collaborateur;
+
+ if (participationFormation == null)
+ return null;
+
+ if (collaborateurDTOs == null || !collaborateurDTOs.Any())
+ collaborateur = null;
+ else
+ collaborateur = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == participationFormation.DemandeFormation.Ep.IdCollaborateur);
+
+ return collaborateur;
+ }
+
+ ///
+ /// 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())
+ {
+ collaborateur = null;
+ referent = null;
+ }
+ else
+ {
+ 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
@@ -677,6 +800,7 @@ namespace EPAServeur.Services
formation.Jour = Convert.ToInt32(formationDTO.Jour.Value);
formation.Organisme = formationDTO.Organisme;
formation.EstCertifiee = formationDTO.EstCertifiee.Value;
+ //formation.EstRealisee = formationDTO.EstRealisee.Value;
formation.Origine = GetOrigineFormation(formationDTO.Origine);
formation.Statut = GetStatutFormation(formationDTO.Statut);
formation.ModeFormation = GetModeFormation(formationDTO.Mode);