Ajout du service DemandeFormationService

develop
jboinembalome 4 years ago
parent 72eb5ce675
commit 3bfc264c12
  1. 2
      EPAServeur/IServices/IDemandeFormationService.cs
  2. 686
      EPAServeur/Services/DemandeFormationService.cs
  3. 1
      EPAServeur/Startup.cs

@ -13,7 +13,7 @@ namespace EPAServeur.IServices
{ {
Task<IEnumerable<OrigineDemandeFormationDTO>> GetOriginesDemandeFormationAsync(); Task<IEnumerable<OrigineDemandeFormationDTO>> GetOriginesDemandeFormationAsync();
Task<IEnumerable<DemandeFormationDTO>> GetDemandesFormationAsync(List<EtatDemande> etatsDemande, List<long?> idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin); Task<IEnumerable<DemandeFormationDTO>> GetDemandesFormationAsync(List<EtatDemande> etatsDemande, List<long?> idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin);
Task<IEnumerable<DemandeFormationDTO>> GetDemandesFormationCountAsync(List<EtatDemande> etatsDemande, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin); Task<long> GetDemandesFormationCountAsync(List<EtatDemande> etatsDemande, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin);
Task<DemandeFormationDTO> AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO); Task<DemandeFormationDTO> AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO);
Task<DemandeFormationDTO> UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO); Task<DemandeFormationDTO> UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO);
Task<bool> DeleteDemandeFormationAsync(long idDemandeFormation); Task<bool> DeleteDemandeFormationAsync(long idDemandeFormation);

@ -24,10 +24,15 @@ namespace EPAServeur.Services
private readonly EpContext epContext; private readonly EpContext epContext;
/// <summary> /// <summary>
/// Accès et service collaborateur /// Accès au service collaborateur
/// </summary> /// </summary>
private readonly ICollaborateurService collaborateurService; private readonly ICollaborateurService collaborateurService;
/// <summary>
/// Accès au service permettant de transformer un modèle en dto
/// </summary>
private readonly ITransformDTO transformDTO;
/// <summary> /// <summary>
/// Nombre d'éléments min à afficher par page /// Nombre d'éléments min à afficher par page
/// </summary> /// </summary>
@ -62,10 +67,11 @@ namespace EPAServeur.Services
/// Constructeur de la classe FormationService /// Constructeur de la classe FormationService
/// </summary> /// </summary>
/// <param name="_epContext"></param> /// <param name="_epContext"></param>
public DemandeFormationService(EpContext _epContext, ICollaborateurService _collaborateurService) public DemandeFormationService(EpContext _epContext, ICollaborateurService _collaborateurService, ITransformDTO _transformDTO)
{ {
epContext = _epContext; epContext = _epContext;
collaborateurService = _collaborateurService; collaborateurService = _collaborateurService;
transformDTO = _transformDTO;
} }
#endregion #endregion
@ -83,7 +89,7 @@ namespace EPAServeur.Services
origineDemandes = await epContext.OrigineDemandeFormation.ToListAsync(); origineDemandes = await epContext.OrigineDemandeFormation.ToListAsync();
origineDemandeDTOs = origineDemandes.Select(origineFormation => GetOrigineDemandeFormationDTO(origineFormation)); origineDemandeDTOs = origineDemandes.Select(origineFormation => transformDTO.GetOrigineDemandeFormationDTO(origineFormation));
return origineDemandeDTOs; return origineDemandeDTOs;
} }
@ -110,25 +116,22 @@ namespace EPAServeur.Services
query = epContext.DemandeFormation query = epContext.DemandeFormation
.Include(demandeFormation => demandeFormation.Ep) .Include(demandeFormation => demandeFormation.Ep)
.Include(demandeFormation => demandeFormation.OrigineDemande)
.Include(demandeFormation => demandeFormation.ParticipationFormation) .Include(demandeFormation => demandeFormation.ParticipationFormation)
.ThenInclude(participationFormation => participationFormation.Formation); .ThenInclude(participationFormation => participationFormation.Formation);
query = EtatsDemandeFilter(query, etatsDemande); query = EtatsDemandeFilter(query, etatsDemande);
query = IdBUsFilter(query, idBUs); query = IdBUsFilter(query, idBUs);
query = DateFilter(query, dateDebut, dateFin); query = DateFilter(query, dateDebut, dateFin);
query = OrderByColumn(query, asc, tri);
query = SkipAndTake(query, parPage, numPage); query = SkipAndTake(query, parPage, numPage);
demandeFormations = await query.ToListAsync(); 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; return demandeFormationDTOs;
@ -143,19 +146,67 @@ namespace EPAServeur.Services
/// <param name="dateDebut">Date à partir de laquelle les données son récupérées</param> /// <param name="dateDebut">Date à partir de laquelle les données son récupérées</param>
/// <param name="dateFin">Date jusqu&#x27;à laquelle les données sont récupérées</param> /// <param name="dateFin">Date jusqu&#x27;à laquelle les données sont récupérées</param>
/// <returns></returns> /// <returns></returns>
public async Task<IEnumerable<DemandeFormationDTO>> GetDemandesFormationCountAsync(List<EtatDemande> etatsDemande, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin) public async Task<long> GetDemandesFormationCountAsync(List<EtatDemande> etatsDemande, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin)
{ {
throw new NotImplementedException(); IQueryable<DemandeFormation> query;
IEnumerable<DemandeFormation> demandeFormations;
IEnumerable<DemandeFormationDTO> demandeFormationDTOs;
IEnumerable<CollaborateurDTO> 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;
} }
/// <summary> /// <summary>
/// Créer demande de formation pour un collaborateur. /// Créer une demande de formation pour un collaborateur.
/// </summary> /// </summary>
/// <param name="demandeFormationDTO"></param> /// <param name="demandeFormationDTO"></param>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationInvalidException"></exception>
/// <returns></returns> /// <returns></returns>
public async Task<DemandeFormationDTO> AddDemandeFormationAsync(DemandeFormationDTO demandeFormationDTO) public async Task<DemandeFormationDTO> 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<StatutEp> statutsEp = Enum.GetValues(typeof(StatutEp)).Cast<StatutEp>().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;
} }
/// <summary> /// <summary>
@ -163,10 +214,30 @@ namespace EPAServeur.Services
/// </summary> /// </summary>
/// <param name="idDemandeFormation"></param> /// <param name="idDemandeFormation"></param>
/// <param name="demandeFormationDTO"></param> /// <param name="demandeFormationDTO"></param>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationIncompatibleIdException"></exception>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationInvalidException"></exception>
/// <returns></returns> /// <returns></returns>
public async Task<DemandeFormationDTO> UpdateDemandeFormationAsync(long idDemandeFormation, DemandeFormationDTO demandeFormationDTO) public async Task<DemandeFormationDTO> 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;
} }
/// <summary> /// <summary>
@ -176,7 +247,22 @@ namespace EPAServeur.Services
/// <returns></returns> /// <returns></returns>
public async Task<bool> DeleteDemandeFormationAsync(long idDemandeFormation) public async Task<bool> DeleteDemandeFormationAsync(long idDemandeFormation)
{ {
throw new NotImplementedException(); IEnumerable<StatutEp> statutsEp = Enum.GetValues(typeof(StatutEp)).Cast<StatutEp>().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 #region Méthodes Privée
/// <summary> /// <summary>
/// Vérifier si un objet DemandeFormationDTO est valide pour une mise à jour /// Accepter une demande de formation.
/// </summary>
/// <remarks>Créer une participation formation et associe cette dernière la demande de formation</remarks>
/// <param name="idDemandeFormation"></param>
/// <param name="demandeFormationDTO"></param>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationInvalidException"></exception>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationNotFoundException"></exception>
/// <returns></returns>
private async Task<DemandeFormationDTO> 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;
}
/// <summary>
/// Refuser une demande de formation.
/// </summary>
/// <remarks>Supprime la participation formation qui est liée à la demande de formation</remarks>
/// <param name="idDemandeFormation"></param>
/// <param name="demandeFormationDTO"></param>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationInvalidException"></exception>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationNotFoundException"></exception>
/// <returns></returns>
private async Task<DemandeFormationDTO> 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;
}
/// <summary>
/// Vérifier si un objet DemandeFormationDTO est valide pour une mise à jour.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Un objet DemandeFormationDTO est valide si l'objet n'est pas null, si le libellé, la descritpion, /// 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. /// 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.
/// </remarks> /// </remarks>
/// <param name="demande"></param> /// <param name="demande"></param>
/// <exception cref="EPAServeur.Exceptions.DemandeFormationInvalidException"></exception>
/// <returns>true si l'objet est valide, false sinon</returns> /// <returns>true si l'objet est valide, false sinon</returns>
private void IsDemandeFormationValide(DemandeFormationDTO demande) 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 // Vérifier que la demande de formation a bien une date de demande
if (!demande.DateDemande.HasValue) if (!demande.DateDemande.HasValue)
throw new DemandeFormationInvalidException("Une date de demande de formation est requise."); 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.");
} }
/// <summary> /// <summary>
/// Ajouter un ordonnancement croissant ou décroissant sur colonne /// Ajouter un ordonnancement croissant ou décroissant sur une colonne.
/// </summary> /// </summary>
/// <param name="query"></param> /// <param name="query"></param>
/// <param name="asc"></param> /// <param name="asc"></param>
/// <param name="columnName"></param> /// <param name="columnName"></param>
/// <returns></returns> /// <returns></returns>
private IQueryable<DemandeFormation> OrderByColumn(IQueryable<DemandeFormation> query, bool? asc, string columnName) private IEnumerable<DemandeFormationDTO> OrderByColumn(IEnumerable<DemandeFormationDTO> query, bool? asc, string columnName)
{ {
if (!asc.HasValue) if (!asc.HasValue)
asc = defaultAsc; asc = defaultAsc;
if (string.IsNullOrWhiteSpace(columnName)) if (string.IsNullOrWhiteSpace(columnName))
{ return OrderByDefault(query, (bool)asc);
if (asc.Value)
return query.OrderBy(p => p.Libelle); if ((bool)asc)
return OrderByAscending(query, columnName);
else else
return query.OrderByDescending(p => p.Libelle); return OrderByDescending(query, columnName);
} }
/// <summary>
/// Ajouter un ordonnancement croissant sur une colonne.
/// </summary>
/// <param name="query"></param>
/// <param name="columnName"></param>
/// <returns></returns>
private IEnumerable<DemandeFormationDTO> OrderByAscending(IEnumerable<DemandeFormationDTO> query, string columnName)
{
switch (columnName.ToLower()) switch (columnName.ToLower())
{ {
case "businessunit": case "businessunit":
if (asc.Value) return query.OrderBy(d => d.Collaborateur.BusinessUnit.Nom);
return query.OrderBy(d => d.Libelle); case "collaborateur":
else return query.OrderBy(d => d.Collaborateur.Nom);
return query.OrderByDescending(p => p.Libelle); 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);
}
}
/// <summary>
/// Ajouter un ordonnancement décroissant sur une colonne.
/// </summary>
/// <param name="query"></param>
/// <param name="columnName"></param>
/// <returns></returns>
private IEnumerable<DemandeFormationDTO> OrderByDescending(IEnumerable<DemandeFormationDTO> query, string columnName)
{
switch (columnName.ToLower())
{
case "businessunit":
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: default:
if (asc.Value) return query.OrderByDescending(d => d.Collaborateur.Nom);
return query.OrderBy(p => p.Libelle);
else
return query.OrderByDescending(p => p.Libelle);
} }
} }
/// <summary> /// <summary>
/// Ajouter un filtre pour récupérer les demandes de formation en fonction de plusieurs états de demande /// Ajouter un ordonnancement par défaut.
/// </summary> /// </summary>
/// <param name="query"></param> /// <param name="query"></param>
/// <param name="etatsDemande"></param> /// <param name="asc"></param>
/// <returns></returns> /// <returns></returns>
private IQueryable<DemandeFormation> EtatsDemandeFilter(IQueryable<DemandeFormation> query, List<EtatDemande> etatsDemande) private IEnumerable<DemandeFormationDTO> OrderByDefault(IEnumerable<DemandeFormationDTO> query, bool asc)
{ {
if (etatsDemande != null && etatsDemande.Count > 0) if (asc)
return query.Where(demandeFormation => etatsDemande.Contains(demandeFormation.Etat)); return query.OrderBy(p => p.Collaborateur.Nom);
else else
return query; return query.OrderByDescending(p => p.Collaborateur.Nom);
} }
/// <summary> /// <summary>
/// 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.
/// </summary> /// </summary>
/// <param name="query"></param> /// <param name="query"></param>
/// <param name="idBus"></param> /// <param name="etatsDemande"></param>
/// <returns></returns> /// <returns></returns>
private IQueryable<DemandeFormation> IdBUsFilter(IQueryable<DemandeFormation> query, List<long?> idBus) private IQueryable<DemandeFormation> EtatsDemandeFilter(IQueryable<DemandeFormation> query, List<EtatDemande> etatsDemande)
{ {
if (idBus != null && idBus.Count > 0) if (etatsDemande != null && etatsDemande.Count > 0)
return query.Where(demandeFormation => idBus.Contains(demandeFormation.Ep.IdBu)); return query.Where(demandeFormation => etatsDemande.Contains(demandeFormation.Etat));
else else
return query; return query;
} }
/// <summary> /// <summary>
/// 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.
/// </summary> /// </summary>
/// <param name="query"></param> /// <param name="query"></param>
/// <param name="intitule"></param> /// <param name="idBus"></param>
/// <returns></returns> /// <returns></returns>
private IQueryable<Formation> IntituleFilter(IQueryable<Formation> query, string intitule) private IQueryable<DemandeFormation> IdBUsFilter(IQueryable<DemandeFormation> query, List<long?> idBus)
{ {
if (!string.IsNullOrWhiteSpace(intitule)) if (idBus != null && idBus.Count > 0)
return query.Where(formation => formation.Intitule.ToLower().Contains(intitule.ToLower())); return query.Where(demandeFormation => idBus.Contains(demandeFormation.Ep.IdBu));
else else
return query; return query;
} }
/// <summary> /// <summary>
/// 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.
/// </summary> /// </summary>
/// <param name="query"></param> /// <param name="query"></param>
/// <param name="dateDebut"></param> /// <param name="dateDebut"></param>
@ -317,7 +535,22 @@ namespace EPAServeur.Services
} }
/// <summary> /// <summary>
/// Ajouter une pagination /// Ajouter un filtre pour récupérer les demandes de formation en fonction du nom et du prénom du collaborateur.
/// </summary>
/// <param name="demandeFormationDTOs"></param>
/// <param name="intitule"></param>
/// <returns></returns>
private IEnumerable<DemandeFormationDTO> CollaborateurFilter(IEnumerable<DemandeFormationDTO> 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()));
}
/// <summary>
/// Ajouter une pagination.
/// </summary> /// </summary>
/// <param name="query"></param> /// <param name="query"></param>
/// <param name="parPage"></param> /// <param name="parPage"></param>
@ -340,354 +573,11 @@ namespace EPAServeur.Services
return query.Skip(skip).Take(take); return query.Skip(skip).Take(take);
} }
private bool EstEpEnCours(StatutEp statut)
#region Object to DTO
/// <summary>
/// Récuperer un objet OrigineDemandeFormationDTO en fonction d'un objet OrigineDemande
/// </summary>
/// <param name="origineDemande"></param>
/// <returns></returns>
private OrigineDemandeFormationDTO GetOrigineDemandeFormationDTO(OrigineDemande origineDemande)
{
if (origineDemande == null)
return null;
OrigineDemandeFormationDTO origineDemandeFormationDTO = new OrigineDemandeFormationDTO()
{
Id = origineDemande.IdOrigineDemande,
Libelle = origineDemande.Libelle
};
return origineDemandeFormationDTO;
}
/// <summary>
/// Récuperer un objet DemandeFormationDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO
/// </summary>
/// <param name="demandeFormation"></param>
/// <returns></returns>
private DemandeFormationDTO GetDemandeFormationDTO(DemandeFormation demandeFormation, IEnumerable<CollaborateurDTO> 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;
}
/// <summary>
/// Récuperer un objet FormationDTO avec des participations en fonction d'un objet Formation et d'une liste de CollaborateurDTO
/// </summary>
/// <param name="formation"></param>
/// <returns></returns>
private FormationDTO GetFormationDTO(Formation formation, IEnumerable<CollaborateurDTO> 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;
}
/// <summary>
/// Récuperer un objet OrigineFormationDTO en fonction d'un objet OrigineFormation
/// </summary>
/// <param name="origineFormation"></param>
/// <returns></returns>
private OrigineFormationDTO GetOrigineFormationDTO(OrigineFormation origineFormation)
{
if (origineFormation == null)
return null;
OrigineFormationDTO origineFormationDTO = new OrigineFormationDTO()
{
Id = origineFormation.IdOrigineFormation,
Libelle = origineFormation.Libelle
};
return origineFormationDTO;
}
/// <summary>
/// Récuperer un objet StatutFormationDTO en fonction d'un objet StatutFormation
/// </summary>
/// <param name="statutFormation"></param>
/// <returns></returns>
private StatutFormationDTO GetStatutFormationDTO(StatutFormation statutFormation)
{
if (statutFormation == null)
return null;
StatutFormationDTO statutFormationDTO = new StatutFormationDTO()
{
Id = statutFormation.IdStatutFormation,
Libelle = statutFormation.Libelle
};
return statutFormationDTO;
}
/// <summary>
/// Récuperer un objet ModeFormationDTO en fonction d'un objet ModeFormation
/// </summary>
/// <param name="modeFormation"></param>
/// <returns></returns>
private ModeFormationDTO GetModeFormationDTO(ModeFormation modeFormation)
{
if (modeFormation == null)
return null;
ModeFormationDTO modeFormationDTO = new ModeFormationDTO()
{
Id = modeFormation.IdModeFormation,
Libelle = modeFormation.Libelle
};
return modeFormationDTO;
}
/// <summary>
/// Récuperer un objet TypeFormationDTO en fonction d'un objet TypeFormation
/// </summary>
/// <param name="typeFormation"></param>
/// <returns></returns>
private TypeFormationDTO GetTypeFormationDTO(TypeFormation typeFormation)
{
if (typeFormation == null)
return null;
TypeFormationDTO typeFormationDTO = new TypeFormationDTO()
{
Id = typeFormation.IdTypeFormation,
Libelle = typeFormation.Libelle
};
return typeFormationDTO;
}
/// <summary>
/// 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.
/// </summary>
/// <param name="typeFormation"></param>
/// <returns></returns>
private List<ParticipationFormationDTO> GetParticipationsFormationDTO(List<ParticipationFormation> participationsFormation, IEnumerable<CollaborateurDTO> collaborateurDTOs)
{
List<ParticipationFormationDTO> 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;
}
/// <summary>
/// Récuperer un objet ParticipationFormationDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO
/// </summary>
/// <param name="participationFormation"></param>
/// <returns></returns>
private ParticipationFormationDTO GetParticipationFormationDTO(ParticipationFormation participationFormation, IEnumerable<CollaborateurDTO> collaborateurDTOs)
{ {
if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any()) return statut != StatutEp.Annule && statut != StatutEp.Cree && statut != StatutEp.Rejete && statut != StatutEp.Signe;
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;
} }
/// <summary>
/// Récupère un objet CollaborateurDTO en fonction d'un objet ParticipationFormation et d'une liste de CollaborateurDTO
/// </summary>
/// <param name="participationFormation"></param>
/// <returns></returns>
private CollaborateurDTO GetCollaborateurDTO(ParticipationFormation participationFormation, IEnumerable<CollaborateurDTO> collaborateurDTOs)
{
if (participationFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any())
return null;
return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == participationFormation.DemandeFormation.Ep.IdCollaborateur);
}
/// <summary>
/// Récupère un objet CollaborateurDTO en fonction d'un objet DemandeFormation et d'une liste de CollaborateurDTO
/// </summary>
/// <param name="demandeFormation"></param>
/// <returns></returns>
private CollaborateurDTO GetCollaborateurDTO(DemandeFormation demandeFormation, IEnumerable<CollaborateurDTO> collaborateurDTOs)
{
if (demandeFormation == null || collaborateurDTOs == null || !collaborateurDTOs.Any())
return null;
return collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == demandeFormation.Ep.IdCollaborateur);
}
/// <summary>
/// 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.
/// </summary>
/// <param name="demandeFormations"></param>
/// <returns></returns>
private async Task<IEnumerable<CollaborateurDTO>> GetCollaborateurDTOs(IEnumerable<DemandeFormation> demandeFormations)
{
if (demandeFormations == null || !demandeFormations.Any())
return null;
List<Guid?> guids = demandeFormations.SelectMany(demandeFormation => new[] { (Guid?)demandeFormation.Ep.IdCollaborateur, demandeFormation.Ep.IdReferent }).ToList();
return await collaborateurService.GetCollaborateurDTOsAsync(guids); ;
}
/// <summary>
/// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucune participation.
/// </summary>
/// <param name="participationsFormation"></param>
/// <returns></returns>
private async Task<IEnumerable<CollaborateurDTO>> GetCollaborateurDTOs(IEnumerable<ParticipationFormation> participationsFormation)
{
if (participationsFormation == null || !participationsFormation.Any())
return null;
List<Guid?> guids = participationsFormation.SelectMany(participationFormation => new[] { (Guid?)participationFormation.DemandeFormation.Ep.IdCollaborateur, participationFormation.DemandeFormation.Ep.IdReferent }).ToList();
return await collaborateurService.GetCollaborateurDTOsAsync(guids); ;
}
/// <summary>
/// Récupère un objet EpInformationDTO en fonction d'un objet Ep et d'une liste de CollaborateurDTO
/// </summary>
/// <param name="ep"></param>
/// <returns></returns>
private EpInformationDTO GetEpInformationDTO(Ep ep, IEnumerable<CollaborateurDTO> 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
/// <summary>
/// Récuperer un objet Saisie en fonction d'un objet SaisieDTO
/// </summary>
/// <param name="saisieDTO"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Récuperer un objet Champ en fonction d'un objet ChampDTO
/// </summary>
/// <param name="champDTO"></param>
/// <returns></returns>
private Champ GetChamp(ChampDTO champDTO)
{
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;
}
#endregion
#endregion #endregion
} }

@ -126,6 +126,7 @@ namespace EPAServeur
services.AddScoped<ICollaborateurService, CollaborateurService>(); services.AddScoped<ICollaborateurService, CollaborateurService>();
services.AddScoped<IEpInformationService, EpInformationService>(); services.AddScoped<IEpInformationService, EpInformationService>();
services.AddScoped<IFormationService, FormationService>(); services.AddScoped<IFormationService, FormationService>();
services.AddScoped<IDemandeFormationService, DemandeFormationService>();
services.AddScoped<IParticipationFormationService, ParticipationFormationService>(); services.AddScoped<IParticipationFormationService, ParticipationFormationService>();
services.AddScoped<INoteService, NoteService>(); services.AddScoped<INoteService, NoteService>();
services.AddScoped<IReferentEPService, ReferentEPService>(); services.AddScoped<IReferentEPService, ReferentEPService>();

Loading…
Cancel
Save