using EPAServeur.Exceptions; using EPAServeur.IServices; using IO.Swagger.ApiCollaborateur; using IO.Swagger.DTO; using IO.Swagger.ModelCollaborateur; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EPAServeur.Services { public class ReferentService : IReferentService { #region Variables private readonly IReferentApi referentApi; private readonly ICollaborateurApi collaborateurApi; #endregion #region Contructeurs public ReferentService(IReferentApi _referentApi, ICollaborateurApi _collaborateurApi) { referentApi = _referentApi; collaborateurApi = _collaborateurApi; } #endregion #region Méthodes Service /// /// Récupère un référent par son id /// /// /// public ReferentDTO GetReferentById(Guid? idReferent) { Referent referent = referentApi.ChercherRefId(idReferent); if (referent == null) throw new ReferentNotFoundException(); return GetReferentDTO(referent); } /// /// Récupère un référent par son id de manière asynchrone /// /// /// public async Task GetReferentByIdAsync(Guid? idReferent) { Referent referent = await referentApi.ChercherRefIdAsync(idReferent); if (referent == null) throw new ReferentNotFoundException(); return GetReferentDTO(referent); } /// /// Récupère un référent en fonction d'un collaborateur /// /// /// public ReferentDTO GetReferentActuelCollaborateur(Guid? idCollaborateur) { Referent referent = referentApi.ChercherRefActuelCollabId(idCollaborateur); if (referent == null) throw new ReferentNotFoundException(); return GetReferentDTO(referent); } /// /// Récupère un référent en fonction d'un collaborateur de manière asynchrone /// /// /// public async Task GetReferentActuelCollaborateurAsync(Guid? idCollaborateur) { Referent referent = await referentApi.ChercherRefActuelCollabIdAsync(idCollaborateur); if (referent == null) throw new ReferentNotFoundException(); return GetReferentDTO(referent); } /// /// Récupère la liste des référents pour une agence /// /// /// /// /// /// /// /// /// /// public IEnumerable GetReferents(bool? asc, int? numPage, int? parPAge, List fonctions, long? idAgence, long? idBU, string texte, string tri) { throw new NotImplementedException(); ////IEnumerable collaborateurs; // A changer (Sera utilisé pour récupérer la liste des référents par fonction //IEnumerable referents = null; // A changer //IEnumerable referentDTOs = null; // A changer ////List ids = fonctions.Select(guid => (Guid?)Guid.Parse(guid)).ToList(); ////collaborateurs = collaborateurApi.ChercherCollab(ids); //if (texte == null) // texte = ""; //else // texte = texte.ToLower(); //int skip = (numPage.Value - 1) * parPAge.Value; //int take = parPAge.Value; //if (idBU != null) //{ //} //else //{ //} //if (idAgence != null) //{ // try // { // } // catch (Exception ex) // { // throw; // } //} //else //{ // try // { // } // catch (Exception ex) // { // throw; // } //} //if (referents == null) // return new List(); //referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); //return referentDTOs; } /// /// Récupère la liste des référents pour une agence de manière asynchrone /// /// /// /// /// /// /// /// /// /// public async Task> GetReferentsAsync(bool? asc, int? numPage, int? parPAge, List fonctions, long? idAgence, long? idBU, string texte, string tri) { throw new NotImplementedException(); //IEnumerable referents = null ; // A changer //IEnumerable referentDTOs = null; // A changer //if (texte == null) // texte = ""; //else // texte = texte.ToLower(); //int skip = (numPage.Value - 1) * parPAge.Value; //int take = parPAge.Value; //if (idBU != null) //{ //} //else //{ //} //if (idAgence != null) //{ // try // { // } // catch (Exception ex) // { // throw; // } //} //else //{ // try // { // } // catch (Exception ex) // { // throw; // } //} //if (referents == null) // return new List(); //referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); //return referentDTOs; } /// /// Récupère la liste des référents pour un collaborateur /// /// /// /// /// /// /// /// public IEnumerable GetReferentsByCollaborateur(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri) { IEnumerable referents; IEnumerable referentDTOs; if (texte == null) texte = ""; else texte = texte.ToLower(); int skip = (numPage.Value - 1) * parPAge.Value; int take = parPAge.Value; if (idCollaborateur == null) return new List(); Collaborateur collaborateur = collaborateurApi.ChercherCollabId(idCollaborateur); if (collaborateur == null) throw new CollaborateurNotFoundException(); referents = referentApi.ChercherRefCollabId(idCollaborateur); if (referents == null) return new List(); referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); return referentDTOs; } /// /// Récupère la liste des référents pour un collaborateur de manère asynchrone /// /// /// /// /// /// /// /// public async Task> GetReferentsByCollaborateurAsync(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri) { IEnumerable referents; IEnumerable referentDTOs; if (texte == null) texte = ""; else texte = texte.ToLower(); int skip = (numPage.Value - 1) * parPAge.Value; int take = parPAge.Value; if (idCollaborateur == null) return new List(); Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(idCollaborateur); if (collaborateur == null) throw new CollaborateurNotFoundException(); referents = await referentApi.ChercherRefCollabIdAsync(idCollaborateur); if (referents == null) return new List(); referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); return referentDTOs; } #endregion #region Méthodes Privées #region Object to DTO /// /// Récupère un objet AgenceDTO en fonction d'un objet Agence /// /// /// private AgenceDTO GetAgenceDTO(Agence agence) { if (agence == null) return null; AgenceDTO agenceDTO = new AgenceDTO() { Id = agence.Id, Nom = agence.Nom, Bu = new List() }; agenceDTO.Bu = agence.Bus.Select(bu => new BusinessUnitDTO() { Id = bu.Id, Nom = bu.Nom }).ToList(); return agenceDTO; } /// /// Récupère un objet BusinessUnitDTO en fonction d'un objet BU /// /// /// private BusinessUnitDTO GetBusinessUnitDTO(BU businessUnit) { if (businessUnit == null) return null; BusinessUnitDTO businessUnitDTO = new BusinessUnitDTO() { Id = businessUnit.Id, Nom = businessUnit.Nom, Agence = GetAgenceDTO(businessUnit.Agence) }; return businessUnitDTO; } /// /// Récupère un objet CollaborateurDTO en fonction d'un objet Collaborateur /// /// /// private CollaborateurDTO GetCollaborateurDTO(Collaborateur collaborateur) { CollaborateurDTO collaborateurDTO = new CollaborateurDTO() { Id = collaborateur.Id, Prenom = collaborateur.Prenom, Nom = collaborateur.Nom, MailApside = collaborateur.MailApside, DateArrivee = collaborateur.DateArrivee, }; collaborateurDTO.BusinessUnit = GetBusinessUnitDTO(collaborateur.BusinessUnit); collaborateurDTO.Referent = GetReferentDTO(collaborateur.Referent); return collaborateurDTO; } /// /// Récupère un objet ReferentDTO en fonction d'un objet Referent /// /// /// private ReferentDTO GetReferentDTO(Referent referent) { if (referent == null) return null; ReferentDTO referentDTO = new ReferentDTO() { Id = referent.Id, Prenom = referent.Prenom, Nom = referent.Nom, MailApside = referent.MailApside }; return referentDTO; } /// /// Récupère un objet ReferentDTO en fonction d'un objet Collaborateur /// /// /// private ReferentDTO GetReferentDTO(Collaborateur collaborateur) { if (collaborateur == null) return null; ReferentDTO referentDTO = new ReferentDTO() { Id = collaborateur.Id, Prenom = collaborateur.Prenom, Nom = collaborateur.Nom, MailApside = collaborateur.MailApside }; return referentDTO; } #endregion #region DTO to Object #endregion #endregion } }