@ -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'à laquelle les données sont récupérées</param>
/// <param name="dateFin">Date jusqu'à 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 IQuery able < DemandeFormation > OrderByColumn ( IQuery able < DemandeFormation > query , bool? asc , string columnName )
private IEnumer able < DemandeFormationDTO > OrderByColumn ( IEnumer able < 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 . Libell e) ;
return OrderByDescending ( query , columnNam e) ;
}
}
/// <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 IEnumer able < DemandeFormationDTO > OrderByDefault ( IEnumer able< 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 > IdBUs Filter( IQueryable < DemandeFormation > query , List < long? > idBus )
private IQueryable < DemandeFormation > EtatsDemande Filter( 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 > Intitule Filter ( IQueryable < Formation > query , string intitule )
private IQueryable < Demande Formation> IdBUs Filter ( IQueryable < Demande Formation> 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
}
}