diff --git a/EPAServeur/Services/FormationService.cs b/EPAServeur/Services/FormationService.cs
index 378fc7a..1ef4934 100644
--- a/EPAServeur/Services/FormationService.cs
+++ b/EPAServeur/Services/FormationService.cs
@@ -15,8 +15,36 @@ namespace EPAServeur.Services
{
#region Variables
+ ///
+ /// Accès et gestion de la base de données
+ ///
private readonly EpContext epContext;
+ ///
+ /// Nombre d'éléments min à afficher par page
+ ///
+ private readonly int minParPage = 5;
+
+ ///
+ /// Nom d'éléments max à affichar par page
+ ///
+ private readonly int maxParPage = 100;
+
+ ///
+ /// Nombre d'éléments à afficher par défaut par page
+ ///
+ private readonly int defaultParPage = 15;
+
+ ///
+ /// Numéro de page min à afficher par défaut
+ ///
+ private readonly int defaultNumPage = 1;
+
+ ///
+ /// Ordonnancement par défaut
+ ///
+ private readonly bool defaultAsc = true;
+
#endregion
#region Contructeurs
@@ -34,31 +62,12 @@ namespace EPAServeur.Services
#region Méthodes Service
- ///
- /// Récupérer une formation par son id
- ///
- ///
- ///
- public FormationDTO GetFormationById(long? idFormation)
- {
- Formation formation = epContext.Formation.Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation)
- .FirstOrDefault(formation => formation.IdFormation == idFormation);
-
- if (formation == null)
- throw new FormationNotFoundException();
-
- return GetFormationDTO(formation);
- }
-
///
/// Récupérer une formation par son id de manière asynchrone
///
///
///
- public async Task GetFormationByIdAsync(long? idFormation)
+ public async Task GetFormationByIdAsync(long idFormation)
{
Formation formation = await epContext.Formation.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
@@ -67,425 +76,85 @@ namespace EPAServeur.Services
.FirstOrDefaultAsync(formation => formation.IdFormation == idFormation);
if (formation == null)
- throw new FormationNotFoundException();
+ throw new FormationNotFoundException(string.Format("Aucune formation trouvée avec l'id suivant: {0}.",idFormation));
return GetFormationDTO(formation);
}
///
- /// Récupérer la liste des formations
+ /// Récupérer la liste des formations de manière asynchrone
///
/// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
/// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
+ /// Nombre d'éléments affiché sur chaque page du tableau
/// id de l'agence à laquelle sont rattachées les données à récupérer
/// Texte permettant d'identifier l'objet rechercher
/// Colonne du tableau sur lequel le tri s'effectue
///
- public IEnumerable GetFormations(bool? asc, int? numPage, int? parPAge, long? idAgence, int? statutFormation, string texte, string tri)
+ public async Task> GetFormationsAsync(long? idAgence, List idStatuts, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin)
{
+ IQueryable query;
IEnumerable formations;
IEnumerable formationDTOs;
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
-
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
-
- if (statutFormation != null && idAgence != null)
- {
- formations = epContext.Formation
+ query = epContext.Formation
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation)
- .Where(formation => formation.Statut.IdStatutFormation == statutFormation && formation.IdAgence == idAgence).Skip(skip).Take(take);
- }
- else if (statutFormation != null && idAgence == null)
- {
- formations = epContext.Formation
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation)
- .Where(formation => formation.Statut.IdStatutFormation == statutFormation).Skip(skip).Take(take);
- }
- else if (idAgence != null)
- {
- formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
- }
- else
- {
- formations = epContext.Formation.Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
- }
+ .Include(formation => formation.TypeFormation);
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
-
- return formationDTOs;
- }
-
- ///
- /// Récupérer la liste des formations de manière asynchrone
- ///
- /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
- /// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
- /// id de l'agence à laquelle sont rattachées les données à récupérer
- /// Texte permettant d'identifier l'objet rechercher
- /// Colonne du tableau sur lequel le tri s'effectue
- ///
- public async Task> GetFormationsAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, int? statutFormation, string texte, string tri)
- {
- IEnumerable formations;
- IEnumerable formationDTOs;
-
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
-
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
-
- if (statutFormation != null && idAgence != null)
- {
- formations = await epContext.Formation
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation)
- .Where(formation => formation.Statut.IdStatutFormation == statutFormation && formation.IdAgence == idAgence).Skip(skip).Take(take).ToListAsync();
- }
- else if (statutFormation != null && idAgence == null)
- {
- formations = await epContext.Formation
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation)
- .Where(formation => formation.Statut.IdStatutFormation == statutFormation).Skip(skip).Take(take).ToListAsync();
- }
- else if (idAgence != null)
- {
-
- formations = await epContext.Formation
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Where(formation => formation.IdAgence == idAgence).Skip(skip).Take(take).ToListAsync();
-
- }
- else
- {
-
- formations = await epContext.Formation.Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take).ToListAsync();
-
- }
-
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
-
- return formationDTOs;
- }
-
- ///
- /// Récupérer les formations annulées
- ///
- /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
- /// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
- /// id de l'agence à laquelle sont rattachées les données à récupérer
- /// Texte permettant d'identifier l'objet rechercher
- /// Colonne du tableau sur lequel le tri s'effectue
- ///
- public IEnumerable GetFormationAnnulees(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri)
- {
- IEnumerable formations;
- IEnumerable formationDTOs;
-
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
+ query = IdStatutsFilter(query, idStatuts);
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
+ query = IdAgenceFilter(query, idAgence);
- if (idAgence != null)
- formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.IdStatutFormation == 4)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
- else
- formations = epContext.Formation.Where(formation => formation.Statut.IdStatutFormation == 4)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
-
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
-
- return formationDTOs;
- }
-
- ///
- /// Récupérer les formations annulées de manière asynchrone
- ///
- /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
- /// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
- /// id de l'agence à laquelle sont rattachées les données à récupérer
- /// Texte permettant d'identifier l'objet rechercher
- /// Colonne du tableau sur lequel le tri s'effectue
- ///
- public async Task> GetFormationAnnuleesAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri)
- {
- IEnumerable formations;
- IEnumerable formationDTOs;
-
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
-
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
-
- if (idAgence != null)
- formations = await epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.IdStatutFormation == 4)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take).ToListAsync();
- else
- formations = await epContext.Formation.Where(formation => formation.Statut.IdStatutFormation == 4)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take).ToListAsync();
-
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
-
- return formationDTOs;
- }
-
- ///
- /// Récupérer les formations réalisées
- ///
- /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
- /// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
- /// id de l'agence à laquelle sont rattachées les données à récupérer
- /// Texte permettant d'identifier l'objet rechercher
- /// Colonne du tableau sur lequel le tri s'effectue
- ///
- public IEnumerable GetFormationRealisees(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri)
- {
- IEnumerable formations;
- IEnumerable formationDTOs;
-
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
-
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
-
- if (idAgence != null)
- {
-
- formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.IdStatutFormation == 3)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
- }
-
- else
- {
-
- formations = epContext.Formation.Where(formation => formation.Statut.IdStatutFormation == 3)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
-
- }
-
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
-
- return formationDTOs;
- }
-
- ///
- /// Récupérer les formations réalisées de manière asynchrone
- ///
- /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
- /// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
- /// id de l'agence à laquelle sont rattachées les données à récupérer
- /// Texte permettant d'identifier l'objet rechercher
- /// Colonne du tableau sur lequel le tri s'effectue
- ///
- public async Task> GetFormationRealiseesAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri)
- {
- IEnumerable formations;
- IEnumerable formationDTOs;
-
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
-
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
-
- if (idAgence != null)
- {
-
- formations = await epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.IdStatutFormation == 3)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take).ToListAsync();
- }
-
- else
- {
-
- formations = await epContext.Formation.Where(formation => formation.Statut.IdStatutFormation == 3)
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take).ToListAsync();
- }
-
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
-
- return formationDTOs;
- }
-
- ///
- /// Récupérer les formations plannifiées et replannifiées
- ///
- /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
- /// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
- /// id de l'agence à laquelle sont rattachées les données à récupérer
- /// Texte permettant d'identifier l'objet rechercher
- /// Colonne du tableau sur lequel le tri s'effectue
- ///
- public IEnumerable GetProchainesFormation(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri)
- {
- IEnumerable formations;
- IEnumerable formationDTOs;
+ query = IntituleFilter(query, texte);
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
+ query = DateFilter(query, dateDebut, dateFin);
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
+ query = OrderByColumn(query, asc, tri);
- if (idAgence != null)
- {
- formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && (formation.Statut.IdStatutFormation == 1 || formation.Statut.IdStatutFormation == 2))
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
+ query = SkipAndTake(query, parPage, numPage);
- }
- else
- {
- formations = epContext.Formation.Where(formation => (formation.Statut.IdStatutFormation == 1 || formation.Statut.IdStatutFormation == 2))
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take);
- }
+ formations = await query.ToListAsync();
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
+ formationDTOs = formations.Select(formation => GetFormationDTO(formation));
return formationDTOs;
}
///
- /// Récupérer les formations plannifiées et replannifiées de manère asynchrone
+ /// Récupérer le nombre total de formations de manière asynchrone
///
- /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)
/// Numéro de la page du tableau qui affiche les données
- /// Nombre d'éléments affiché sur chaque page du tableau
+ /// Nombre d'éléments affiché sur chaque page du tableau
/// id de l'agence à laquelle sont rattachées les données à récupérer
/// Texte permettant d'identifier l'objet rechercher
- /// Colonne du tableau sur lequel le tri s'effectue
///
- public async Task> GetProchainesFormationAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri)
+ public async Task GetFormationsCountAsync(long? idAgence, List idStatuts, int? numPage, int? parPage, string texte, DateTime? dateDebut, DateTime? dateFin)
{
- IEnumerable formations;
- IEnumerable formationDTOs;
+ IQueryable query;
+ long count;
- if (texte == null)
- texte = "";
- else
- texte = texte.ToLower();
-
- int skip = (numPage.Value - 1) * parPAge.Value;
- int take = parPAge.Value;
-
- if (idAgence != null)
- {
- formations = await epContext.Formation.Where(formation => formation.IdAgence == idAgence && (formation.Statut.IdStatutFormation == 1 || formation.Statut.IdStatutFormation == 2))
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take).ToListAsync();
- }
+ query = epContext.Formation
+ .Include(formation => formation.Statut)
+ .Include(formation => formation.ModeFormation)
+ .Include(formation => formation.Origine)
+ .Include(formation => formation.TypeFormation);
- else
- {
- formations = await epContext.Formation.Where(formation => (formation.Statut.IdStatutFormation == 1 || formation.Statut.IdStatutFormation == 2))
- .Include(formation => formation.Statut)
- .Include(formation => formation.ModeFormation)
- .Include(formation => formation.Origine)
- .Include(formation => formation.TypeFormation).Skip(skip).Take(take).ToListAsync();
- }
+ query = IntituleFilter(query, texte);
- formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
+ query = IdStatutsFilter(query, idStatuts);
- return formationDTOs;
- }
+ query = IdAgenceFilter(query, idAgence);
- ///
- /// Récupérer les modes de formation
- ///
- ///
- public IEnumerable GetModesFormation()
- {
- IEnumerable modeFormations;
- IEnumerable modeFormationDTOs;
+ query = DateFilter(query, dateDebut, dateFin);
- modeFormations = epContext.ModeFormation;
+ query = SkipAndTake(query, parPage, numPage);
- modeFormationDTOs = modeFormations.Select(modeFormation => GetModeFormationDTO(modeFormation));
+ count = await query.CountAsync();
- return modeFormationDTOs;
+ return count;
}
///
@@ -496,6 +165,7 @@ namespace EPAServeur.Services
{
IEnumerable modeFormations;
IEnumerable modeFormationDTOs;
+
modeFormations = await epContext.ModeFormation.ToListAsync();
modeFormationDTOs = modeFormations.Select(modeFormation => GetModeFormationDTO(modeFormation));
@@ -503,22 +173,6 @@ namespace EPAServeur.Services
return modeFormationDTOs;
}
- ///
- /// Récupérer les origines de formation
- ///
- ///
- public IEnumerable GetOriginesFormation()
- {
- IEnumerable origineFormations;
- IEnumerable origineFormationDTOs;
-
- origineFormations = epContext.OrigineFormation;
-
- origineFormationDTOs = origineFormations.Select(origineFormation => GetOrigineFormationDTO(origineFormation));
-
- return origineFormationDTOs;
- }
-
///
/// Récupérer les origines de formation de manière asynchrone
///
@@ -535,22 +189,6 @@ namespace EPAServeur.Services
return origineFormationDTOs;
}
- ///
- /// Récupérer les statuts de formation
- ///
- ///
- public IEnumerable GetStatutsFormation()
- {
- IEnumerable statutFormations;
- IEnumerable statutFormationDTOs;
-
- statutFormations = epContext.StatutFormation;
-
- statutFormationDTOs = statutFormations.Select(statutFormation => GetStatutFormationDTO(statutFormation));
-
- return statutFormationDTOs;
- }
-
///
/// Récupérer les statuts de formation de manière asynchrone
///
@@ -567,22 +205,6 @@ namespace EPAServeur.Services
return statutFormationDTOs;
}
- ///
- /// Récupérer les types de formation
- ///
- ///
- public IEnumerable GetTypesFormation()
- {
- IEnumerable typeFormations;
- IEnumerable typeFormationDTOs;
-
- typeFormations = epContext.TypeFormation;
-
- typeFormationDTOs = typeFormations.Select(typeFormation => GetTypeFormationDTO(typeFormation));
-
- return typeFormationDTOs;
- }
-
///
/// Récupérer les types de formation de manière asynchrone
///
@@ -599,30 +221,6 @@ namespace EPAServeur.Services
return typeFormationDTOs;
}
- ///
- /// Ajouter une formation
- ///
- ///
- ///
- public FormationDTO AddFormation(FormationDTO formationDTO)
- {
- if (!IsFormationValide(formationDTO))
- throw new FormationInvalidException();
-
- Formation formation = new Formation();
- formation = SetFormation(formation, formationDTO);
-
- epContext.StatutFormation.Attach(formation.Statut);
- epContext.OrigineFormation.Attach(formation.Origine);
- epContext.ModeFormation.Attach(formation.ModeFormation);
- epContext.TypeFormation.Attach(formation.TypeFormation);
- epContext.Add(formation);
-
- epContext.SaveChanges();
-
- return GetFormationDTO(formation);
- }
-
///
/// Ajouter une formation de manière asynchrone
///
@@ -630,8 +228,7 @@ namespace EPAServeur.Services
///
public async Task AddFormationAsync(FormationDTO formationDTO)
{
- if (!await IsFormationValideAsync(formationDTO))
- throw new FormationInvalidException();
+ IsFormationValide(formationDTO);
Formation formation = new Formation();
formation = SetFormation(formation, formationDTO);
@@ -648,143 +245,259 @@ namespace EPAServeur.Services
}
///
- /// Modifier une formation
+ /// Modifier une formation de manière asynchrone
///
///
///
///
- public FormationDTO UpdateFormation(long? idFormation, FormationDTO formationDTO)
+ public async Task UpdateFormationAsync(long idFormation, FormationDTO formationDTO)
{
- if (!IsFormationValide(formationDTO))
- throw new FormationInvalidException();
-
if (!formationDTO.Id.HasValue || formationDTO.Id.Value != idFormation)
- throw new FormationIncompatibleIdException();
+ throw new FormationIncompatibleIdException("L'id de la formation a mettre à jour et la formation a mettre à jour sont incompatble.");
+
+ IsFormationValide(formationDTO);
- Formation formation = epContext.Formation.Find(idFormation.Value);
+ Formation formation = await epContext.Formation.FindAsync(idFormation);
if (formation == null)
- return null;
+ throw new FormationNotFoundException(string.Format("Aucune formation trouvée avec l'id suivant: {0}.", idFormation));
- formation = SetFormation(formation, formationDTO);
- epContext.SaveChanges();
+ formation = SetFormation(formation, formationDTO);
+ await epContext.SaveChangesAsync();
return GetFormationDTO(formation);
}
///
- /// Modifier une formation de manière asynchrone
+ /// Supprimer une formation de manière asynchrone
///
///
- ///
///
- public async Task UpdateFormationAsync(long? idFormation, FormationDTO formationDTO)
+ public async Task DeleteFormationByIdAsync(long idFormation)
{
- if (!IsFormationValide(formationDTO))
- throw new FormationInvalidException();
-
- if (!formationDTO.Id.HasValue || formationDTO.Id.Value != idFormation)
- throw new FormationIncompatibleIdException();
-
- Formation formation = await epContext.Formation.FindAsync(idFormation.Value);
+ Formation formation = await epContext.Formation.FindAsync(idFormation);
if (formation == null)
- return null;
+ throw new FormationNotFoundException(string.Format("Aucune formation trouvée avec l'id suivant: {0}.", idFormation));
+
+ epContext.Remove(formation);
- formation = SetFormation(formation, formationDTO);
await epContext.SaveChangesAsync();
return GetFormationDTO(formation);
}
+ #endregion
+ #region Méthodes Privée
///
- /// Supprimer une formation
+ /// Vérifier si un objet FormationDTO est valide pour ajout ou mise à jour
///
- ///
- ///
- public FormationDTO DeleteFormationById(long? idFormation)
+ /// Un objet FormationDTO est valide si aucune de ses propriétés n'est à null,si la date de début de la formation est inférieur à la date de fin et si le statut, l'origine,le mode et le type sont présents dans la base de données
+ ///
+ /// true si l'objet est valide, false sinon
+ private void IsFormationValide(FormationDTO formation)
{
- if (!idFormation.HasValue)
- throw new FormationIncompatibleIdException();
+ // Vérifier que la formation n'est pas null
+ if (formation == null)
+ throw new FormationInvalidException("Aucune formation n'a été reçue");
+ // Vérfier que la formation a bien un statut de formation
+ if (formation.Statut == null || !formation.Statut.Id.HasValue)
+ throw new FormationInvalidException("Impossible d'enregistrer une formation sans statut de formation.");
- Formation formation = epContext.Formation.Find(idFormation.Value);
+ // Vérfier que la formation a bien un mode de formation
+ if (formation.Mode == null || !formation.Mode.Id.HasValue)
+ throw new FormationInvalidException("Impossible d'enregistrer une formation sans mode de formation.");
- if (formation == null)
- throw new FormationNotFoundException();
+ // Vérfier que la formation a bien une origine de formation
+ if (formation.Origine == null || !formation.Origine.Id.HasValue)
+ throw new FormationInvalidException("Impossible d'enregistrer une formation sans origine de formation.");
- epContext.Remove(formation);
+ // Vérfier que la formation a bien un type de formation
+ if (formation.Type == null || !formation.Type.Id.HasValue)
+ throw new FormationInvalidException("Impossible d'enregistrer une formation sans type de formation.");
- epContext.SaveChanges();
+ // Vérfier que la formation a bien une agence
+ if (!formation.IdAgence.HasValue || formation.IdAgence == 0)
+ throw new FormationInvalidException("Impossible d'enregistrer une formation sans mode de formation.");
- return GetFormationDTO(formation);
+ // Vérifier que la formation a bien un intitulé
+ if (string.IsNullOrWhiteSpace(formation.Intitule))
+ throw new FormationInvalidException("L'intitulé de la formation doit contenir au moins 1 caractère.");
+
+ // Vérifier que la formation a bien un organisme
+ if (string.IsNullOrWhiteSpace(formation.Organisme))
+ throw new FormationInvalidException("L'organisme de la formation doit contenir au moins 1 caractère.");
+
+ // Vérifier que la formation a bien une date de début
+ if (!formation.DateDebut.HasValue)
+ throw new FormationInvalidException("Impossible d'enregistrer une formation sans date de début de formation.");
+
+ // Vérifier que la formation a bien une date de fin
+ if (!formation.DateFin.HasValue)
+ throw new FormationInvalidException("Impossible d'enregistrer une formation sans date de fin de formation.");
+
+ // Vérifier que la formation a bien une date de début inférieure à la date de fin
+ if (formation.DateDebut.Value > formation.DateFin.Value)
+ throw new FormationInvalidException("La date de début de la formation est supérieure à la date de fin.");
+
+ // Vérfier que le statut de la formation est présent dans la BDD
+ if (!epContext.StatutFormation.Any(statut => statut.IdStatutFormation == formation.Statut.Id.Value && statut.Libelle == formation.Statut.Libelle))
+ throw new FormationInvalidException("Le statut de la formation n'existe pas.");
+
+ // Vérfier que le mode de la formation est présent dans la BDD
+ if (!epContext.ModeFormation.Any(mode => mode.IdModeFormation == formation.Mode.Id.Value && mode.Libelle == formation.Mode.Libelle))
+ throw new FormationInvalidException("Le mode de la formation n'existe pas.");
+
+ // Vérfier que l'orgine de la formation est présente dans la BDD
+ if (!epContext.OrigineFormation.Any(origine => origine.IdOrigineFormation == formation.Origine.Id.Value && origine.Libelle == formation.Origine.Libelle))
+ throw new FormationInvalidException("L'origine de la formation n'existe pas.");
+
+ // Vérfier que le type de la formation est présent dans la BDD
+ if (!epContext.TypeFormation.Any(type => type.IdTypeFormation == formation.Type.Id.Value && type.Libelle == formation.Type.Libelle))
+ throw new FormationInvalidException("Le type de la formation n'existe pas.");
}
///
- /// Supprimer une formation de manière asynchrone
+ /// Ajouter un ordonnancement croissant ou décroissant sur colonne
///
- ///
+ ///
+ ///
///
- public async Task DeleteFormationByIdAsync(long? idFormation)
+ private IQueryable OrderByColumn(IQueryable query, bool? asc, string columnName)
{
- if (!idFormation.HasValue)
- throw new FormationIncompatibleIdException();
-
- Formation formation = await epContext.Formation.FindAsync(idFormation.Value);
+ if (!asc.HasValue)
+ asc = defaultAsc;
- if (formation == null)
- throw new FormationNotFoundException();
+ switch (columnName)
+ {
+ case "intitule":
+ if (asc.Value)
+ return query.OrderBy(p => p.Intitule);
+ else
+ return query.OrderByDescending(p => p.Intitule);
+ case "statut":
+ if (asc.Value)
+ return query.OrderBy(p => p.Statut.Libelle);
+ else
+ return query.OrderByDescending(p => p.Statut.Libelle);
+ case "origine":
+ if (asc.Value)
+ return query.OrderBy(p => p.Origine.Libelle);
+ else
+ return query.OrderByDescending(p => p.Origine.Libelle);
+ case "date":
+ if (asc.Value)
+ return query.OrderBy(p => p.DateDebut);
+ else
+ return query.OrderByDescending(p => p.DateDebut);
+ case "certification":
+ if (asc.Value)
+ 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);
+ else
+ return query.OrderByDescending(p => p.Intitule);
+ }
+ }
- epContext.Remove(formation);
+ ///
+ /// Ajouter un filtre pour récupérer les formations en fonction de plusieurs identifiants de statut de formation
+ ///
+ ///
+ ///
+ ///
+ private IQueryable IdStatutsFilter(IQueryable query, List idStatuts)
+ {
+ if (idStatuts != null && idStatuts.Count > 0)
+ return query.Where(formation => idStatuts.Contains(formation.Statut.IdStatutFormation));
+ else
+ return query;
+ }
- await epContext.SaveChangesAsync();
+ ///
+ /// Ajouter un filtre pour récupérer les formations en fonction de l'identifiant d'une agence
+ ///
+ ///
+ ///
+ ///
+ private IQueryable IdAgenceFilter(IQueryable query, long? idAgence)
+ {
+ if (idAgence != null)
+ return query.Where(formation => formation.IdAgence == idAgence);
+ else
+ return query;
+ }
- return GetFormationDTO(formation);
+ ///
+ /// Ajouter un filtre pour récupérer les formations en fonction d'un intitulé
+ ///
+ ///
+ ///
+ ///
+ private IQueryable IntituleFilter(IQueryable query, string intitule)
+ {
+ if (!string.IsNullOrWhiteSpace(intitule))
+ return query.Where(formation => formation.Intitule.ToLower().Contains(intitule.ToLower()));
+ else
+ return query;
}
- #endregion
- #region Méthodes Privée
///
- /// Vérifier si un objet FormationDTO est valide pour ajout ou mise à jour
+ /// Ajouter un filtre pour récupérer les formations en fonction d'un intervalle de date
///
- /// Un objet FormationDTO est valide si aucune de ses propriétés n'est à null,si la date de début de la formation est inférieur à la date de fin et si le statut, l'origine,le mode et le type sont présents dans la base de données
- ///
- /// true si l'objet est valide, false sinon
- private bool IsFormationValide(FormationDTO formation)
+ ///
+ ///
+ ///
+ ///
+ private IQueryable DateFilter(IQueryable query, DateTime? dateDebut, DateTime? dateFin)
{
- return !(formation == null || formation.Statut == null || formation.Mode == null || formation.Origine == null || formation.Type == null
- || !formation.IdAgence.HasValue || formation.IdAgence == 0
- || string.IsNullOrWhiteSpace(formation.Intitule) || string.IsNullOrWhiteSpace(formation.Organisme)
- || !formation.DateDebut.HasValue || !formation.DateFin.HasValue || formation.DateDebut.Value > formation.DateFin.Value
- || !formation.Statut.Id.HasValue || !formation.Mode.Id.HasValue || !formation.Origine.Id.HasValue || !formation.Type.Id.HasValue
- || !epContext.StatutFormation.Any(statut => statut.IdStatutFormation == formation.Statut.Id.Value && statut.Libelle == formation.Statut.Libelle)
- || !epContext.ModeFormation.Any(mode => mode.IdModeFormation == formation.Mode.Id.Value && mode.Libelle == formation.Mode.Libelle)
- || !epContext.OrigineFormation.Any(origine => origine.IdOrigineFormation == formation.Origine.Id.Value && origine.Libelle == formation.Origine.Libelle)
- || !epContext.TypeFormation.Any(type => type.IdTypeFormation == formation.Type.Id.Value && type.Libelle == formation.Type.Libelle));
+ if (dateDebut.HasValue && dateFin.HasValue)
+ return query.Where(formation => formation.DateDebut >= dateDebut.Value && formation.DateFin <= dateFin.Value.AddDays(1));
+ else if (!dateDebut.HasValue && dateFin.HasValue)
+ return query.Where(formation => formation.DateFin <= dateFin.Value.AddDays(1));
+ else if (dateDebut.HasValue && !dateFin.HasValue)
+ return query.Where(formation => formation.DateDebut >= dateDebut.Value);
+ else
+ return query;
+
}
///
- /// Vérifier si un objet FormationDTO est valide pour ajout ou mise à jour
+ /// Ajouter une pagination
///
- /// Un objet FormationDTO est valide si aucune de ses propriétés n'est à null,si la date de début de la formation est inférieur à la date de fin et si le statut, l'origine,le mode et le type sont présents dans la base de données
- ///
- /// true si l'objet est valide, false sinon
- private async Task IsFormationValideAsync(FormationDTO formation)
+ ///
+ ///
+ ///
+ ///
+ private IQueryable SkipAndTake(IQueryable query, int? parPage, int? numPage)
{
- return !(formation == null || formation.Statut == null || formation.Mode == null || formation.Origine == null || formation.Type == null
- || !formation.IdAgence.HasValue || formation.IdAgence == 0
- || string.IsNullOrWhiteSpace(formation.Intitule) || string.IsNullOrWhiteSpace(formation.Organisme)
- || !formation.DateDebut.HasValue || !formation.DateFin.HasValue || formation.DateDebut.Value > formation.DateFin.Value
- || !formation.Statut.Id.HasValue || !formation.Mode.Id.HasValue || !formation.Origine.Id.HasValue || !formation.Type.Id.HasValue
- || ! await epContext.StatutFormation.AnyAsync(statut => statut.IdStatutFormation == formation.Statut.Id.Value && statut.Libelle == formation.Statut.Libelle)
- || ! await epContext.ModeFormation.AnyAsync(mode => mode.IdModeFormation == formation.Mode.Id.Value && mode.Libelle == formation.Mode.Libelle)
- || ! await epContext.OrigineFormation.AnyAsync(origine => origine.IdOrigineFormation == formation.Origine.Id.Value && origine.Libelle == formation.Origine.Libelle)
- || ! await epContext.TypeFormation.AnyAsync(type => type.IdTypeFormation == formation.Type.Id.Value && type.Libelle == formation.Type.Libelle));
+ int skip, take;
+
+ if (!parPage.HasValue || parPage.Value < minParPage || parPage.Value > maxParPage)
+ parPage = defaultParPage;
+
+ if (!numPage.HasValue || numPage.Value <= 0)
+ numPage = defaultNumPage;
+
+
+ skip = (numPage.Value - 1) * parPage.Value;
+ take = parPage.Value;
+
+ return query.Skip(skip).Take(take);
}
+
+
#region Object to DTO
///
- /// Récupère un objet FormationDTO en fonction d'un objet Formation
+ /// Récuperer un objet FormationDTO en fonction d'un objet Formation
///
///
///
@@ -811,7 +524,7 @@ namespace EPAServeur.Services
}
///
- /// Récupère un objet OrigineFormationDTO en fonction d'un objet OrigineFormation
+ /// Récuperer un objet OrigineFormationDTO en fonction d'un objet OrigineFormation
///
///
///
@@ -828,7 +541,7 @@ namespace EPAServeur.Services
}
///
- /// Récupère un objet StatutFormationDTO en fonction d'un objet StatutFormation
+ /// Récuperer un objet StatutFormationDTO en fonction d'un objet StatutFormation
///
///
///
@@ -845,7 +558,7 @@ namespace EPAServeur.Services
}
///
- /// Récupère un objet ModeFormationDTO en fonction d'un objet ModeFormation
+ /// Récuperer un objet ModeFormationDTO en fonction d'un objet ModeFormation
///
///
///
@@ -861,7 +574,7 @@ namespace EPAServeur.Services
return modeFormationDTO;
}
///
- /// Récupère un objet TypeFormationDTO en fonction d'un objet TypeFormation
+ /// Récuperer un objet TypeFormationDTO en fonction d'un objet TypeFormation
///
///
///
@@ -882,7 +595,7 @@ namespace EPAServeur.Services
#region DTO to Object
///
- /// Modifie un objet Formation en fonction d'un objet FormationDTO
+ /// Modifier un objet Formation en fonction d'un objet FormationDTO
///
///
///
@@ -906,7 +619,7 @@ namespace EPAServeur.Services
}
///
- /// Récupère un objet OrigineFormation en fonction d'un objet OrigineFormationDTO
+ /// Récuperer un objet OrigineFormation en fonction d'un objet OrigineFormationDTO
///
///
///
@@ -921,7 +634,7 @@ namespace EPAServeur.Services
}
///
- /// Récupère un objet StatutFormation en fonction d'un objet StatutFormationDTO
+ /// Récuperer un objet StatutFormation en fonction d'un objet StatutFormationDTO
///
///
///
@@ -936,7 +649,7 @@ namespace EPAServeur.Services
}
///
- /// Récupère un objet ModeFormation en fonction d'un objet ModeFormationDTO
+ /// Récuperer un objet ModeFormation en fonction d'un objet ModeFormationDTO
///
///
///
@@ -951,7 +664,7 @@ namespace EPAServeur.Services
}
///
- /// Récupère un objet TypeFormation en fonction d'un objet TypeFormationDTO
+ /// Récuperer un objet TypeFormation en fonction d'un objet TypeFormationDTO
///
///
///