using EPAServeur.Context; using EPAServeur.IServices; using EPAServeur.Models.Formation; using IO.Swagger.DTO; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; namespace EPAServeur.Services { public class FormationService : IFormationService { #region Variables private readonly EpContext epContext; #endregion #region Contructeurs /// /// Constructeur de la classe FormationService /// /// public FormationService(EpContext _epContext) { epContext = _epContext; } #endregion #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.Id == idFormation); if (formation == null) return null; return GetFormationDTO(formation); } /// /// Récupérer la liste des formations /// /// 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 GetFormations(bool? asc, int? numPage, int? parPAge, int? 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) { try { formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence) .Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); } catch (Exception ex) { throw; } } else { try { formations = epContext.Formation.Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); } catch (Exception ex) { throw; } } if (formations == null) return null; 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, int? 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.Id == 4) .Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); else formations = epContext.Formation.Where(formation => formation.Statut.Id == 4) .Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); if (formations == null) return null; 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 GetFormationRealisee(bool? asc, int? numPage, int? parPAge, int? 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) { try { formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.Id == 3) .Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); } catch (Exception ex) { throw; } } else { try { formations = epContext.Formation.Where(formation => formation.Statut.Id == 3) .Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); } catch (Exception ex) { throw; } } if (formations == null) return null; 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, int? 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) try { formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && (formation.Statut.Id == 1 || formation.Statut.Id == 2)) .Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); } catch (Exception ex) { throw; } else { formations = epContext.Formation.Where(formation => (formation.Statut.Id == 1 || formation.Statut.Id == 2)) .Include(formation => formation.Statut) .Include(formation => formation.ModeFormation) .Include(formation => formation.Origine) .Include(formation => formation.TypeFormation); } if (formations == null) return null; formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation)); return formationDTOs; } /// /// Récupérer les modes de formation /// /// public IEnumerable GetModesFormation() { IEnumerable modeFormations; IEnumerable modeFormationDTOs; try { modeFormations = epContext.ModeFormation; } catch (Exception ex) { throw; } if (modeFormations == null) return null; modeFormationDTOs = modeFormations.Select(modeFormation => GetModeFormationDTO(modeFormation)); return modeFormationDTOs; } /// /// Récupérer les origines de formation /// /// public IEnumerable GetOriginesFormation() { IEnumerable origineFormations; IEnumerable origineFormationDTOs; try { origineFormations = epContext.OrigineFormation; } catch (Exception ex) { throw; } if (origineFormations == null) return null; origineFormationDTOs = origineFormations.Select(origineFormation => GetOrigineFormationDTO(origineFormation)); return origineFormationDTOs; } /// /// Récupérer les statuts de formation /// /// public IEnumerable GetStatutsFormation() { IEnumerable statutFormations; IEnumerable statutFormationDTOs; try { statutFormations = epContext.StatutFormation; } catch (Exception ex) { throw; } if (statutFormations == null) return null; statutFormationDTOs = statutFormations.Select(statutFormation => GetStatutFormationDTO(statutFormation)); return statutFormationDTOs; } /// /// Récupérer les types de formation /// /// public IEnumerable GetTypesFormation() { IEnumerable typeFormations; IEnumerable typeFormationDTOs; try { typeFormations = epContext.TypeFormation; } catch (Exception ex) { throw; } if (typeFormations == null) return null; typeFormationDTOs = typeFormations.Select(typeFormation => GetTypeFormationDTO(typeFormation)); return typeFormationDTOs; } /// /// Ajouter une formation /// /// /// public FormationDTO AddFormation(FormationDTO formationDTO) { Formation formation = new Formation(); formation = SetFormation(formation, formationDTO); if (formation.Statut != null) { epContext.StatutFormation.Attach(formation.Statut); } epContext.OrigineFormation.Attach(formation.Origine); epContext.ModeFormation.Attach(formation.ModeFormation); epContext.TypeFormation.Attach(formation.TypeFormation); epContext.Add(formation); try { epContext.SaveChanges(); } catch (Exception ex) { throw; } return GetFormationDTO(formation); } /// /// Modifier une formation /// /// /// /// public FormationDTO UpdateFormation(long? idFormation, FormationDTO formationDTO) { Formation formation = epContext.Formation.Find(idFormation); if (formation == null) { return null; } formation = SetFormation(formation, formationDTO); try { epContext.SaveChanges(); } catch (Exception ex) { throw; } return GetFormationDTO(formation); } /// /// Supprimer une formation /// /// /// public bool DeleteFormationById(long? idFormation) { Formation formation = epContext.Formation.Find(idFormation); if (formation == null) return false; epContext.Remove(formation); try { epContext.SaveChanges(); } catch (Exception) { throw; } return true; } #endregion #region Méthodes Privée #region Object to DTO /// /// Récupère un objet FormationDTO en fonction d'un objet Formation /// /// /// private FormationDTO GetFormationDTO(Formation formation) { FormationDTO formationDTO = new FormationDTO() { Id = formation.Id, Intitule = formation.Intitule, IdAgence = formation.IdAgence, DateDebut = formation.DateDebut, DateFin = formation.DateFin, Heure = formation.Heure, Jour = formation.Jour, Organisme = formation.Organisme, EstCertifie = formation.EstCertifiee, Origine = GetOrigineFormationDTO(formation.Origine), Statut = GetStatutFormationDTO(formation.Statut), Mode = GetModeFormationDTO(formation.ModeFormation), Type = GetTypeFormationDTO(formation.TypeFormation) }; return formationDTO; } /// /// Récupère un objet OrigineFormationDTO en fonction d'un objet OrigineFormation /// /// /// private OrigineFormationDTO GetOrigineFormationDTO(OrigineFormation origineFormation) { if (origineFormation == null) return null; OrigineFormationDTO origineFormationDTO = new OrigineFormationDTO() { Id = origineFormation.Id, Libelle = origineFormation.Libelle }; return origineFormationDTO; } /// /// Récupère un objet StatutFormationDTO en fonction d'un objet StatutFormation /// /// /// private StatutFormationDTO GetStatutFormationDTO(StatutFormation statutFormation) { if (statutFormation == null) return null; StatutFormationDTO statutFormationDTO = new StatutFormationDTO() { Id = statutFormation.Id, Libelle = statutFormation.Libelle }; return statutFormationDTO; } /// /// Récupère un objet ModeFormationDTO en fonction d'un objet ModeFormation /// /// /// private ModeFormationDTO GetModeFormationDTO(ModeFormation modeFormation) { if (modeFormation == null) return null; ModeFormationDTO modeFormationDTO = new ModeFormationDTO() { Id = modeFormation.Id, Libelle = modeFormation.Libelle }; return modeFormationDTO; } /// /// Récupère un objet TypeFormationDTO en fonction d'un objet TypeFormation /// /// /// private TypeFormationDTO GetTypeFormationDTO(TypeFormation typeFormation) { if (typeFormation == null) return null; TypeFormationDTO typeFormationDTO = new TypeFormationDTO() { Id = typeFormation.Id, Libelle = typeFormation.Libelle }; return typeFormationDTO; } #endregion #region DTO to Object /// /// Modifie un objet Formation en fonction d'un objet FormationDTO /// /// /// /// private Formation SetFormation(Formation formation, FormationDTO formationDTO) { formation.Intitule = formationDTO.Intitule; formation.IdAgence = formationDTO.IdAgence.Value; formation.DateDebut = formationDTO.DateDebut.Value; formation.DateFin = formationDTO.DateFin.Value; formation.Heure = Convert.ToInt32(formationDTO.Heure.Value); formation.Jour = Convert.ToInt32(formationDTO.Jour.Value); formation.Organisme = formationDTO.Organisme; formation.EstCertifiee = formationDTO.EstCertifie.Value; formation.Origine = GetOrigineFormation(formationDTO.Origine); formation.Statut = GetStatutFormation(formationDTO.Statut); formation.ModeFormation = GetModeFormation(formationDTO.Mode); formation.TypeFormation = GetTypeFormation(formationDTO.Type); return formation; } /// /// Récupère un objet OrigineFormation en fonction d'un objet OrigineFormationDTO /// /// /// private OrigineFormation GetOrigineFormation(OrigineFormationDTO origineFormationDTO) { if (origineFormationDTO == null) return null; OrigineFormation origineFormation = new OrigineFormation() { Id = origineFormationDTO.Id.Value, Libelle = origineFormationDTO.Libelle }; return origineFormation; } /// /// Récupère un objet StatutFormation en fonction d'un objet StatutFormationDTO /// /// /// private StatutFormation GetStatutFormation(StatutFormationDTO statutFormationDTO) { if (statutFormationDTO == null) return null; StatutFormation statutFormation = new StatutFormation() { Id = statutFormationDTO.Id.Value, Libelle = statutFormationDTO.Libelle }; return statutFormation; } /// /// Récupère un objet ModeFormation en fonction d'un objet ModeFormationDTO /// /// /// private ModeFormation GetModeFormation(ModeFormationDTO modeFormationDTO) { if (modeFormationDTO == null) return null; ModeFormation modeFormation = new ModeFormation() { Id = modeFormationDTO.Id.Value, Libelle = modeFormationDTO.Libelle }; return modeFormation; } /// /// Récupère un objet TypeFormation en fonction d'un objet TypeFormationDTO /// /// /// private TypeFormation GetTypeFormation(TypeFormationDTO typeFormationDTO) { if (typeFormationDTO == null) return null; TypeFormation typeFormation = new TypeFormation() { Id = typeFormationDTO.Id.Value, Libelle = typeFormationDTO.Libelle }; return typeFormation; } #endregion #endregion } }