using EPAServeur.Context; using EPAServeur.IServices; using IO.Swagger.ApiCollaborateur; using IO.Swagger.DTO; using IO.Swagger.ModelCollaborateur; using Microsoft.EntityFrameworkCore.ChangeTracking; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.ComTypes; using System.Threading.Tasks; namespace EPAServeur.Services { /// /// Service permettant de récupérer les informations collaborateurs. /// public class CollaborateurService : ICollaborateurService { #region Variables /// /// API pour accéder aux données collaborateur en passant par le service collaborateur /// private readonly ICollaborateurApi collaborateurApi; #endregion #region Constructeurs public CollaborateurService(ICollaborateurApi _collaborateurApi) { collaborateurApi = _collaborateurApi; } #endregion #region Services /// /// Récupérer un collaborateur en fonction d'un id /// /// Identifiant du collaborateur à renvoyer /// Le collaborateur corresponant à l'id en paramètre public CollaborateurDTO GetCollaborateurById(Guid? id) { Collaborateur collaborateur = collaborateurApi.ChercherCollabId(id); if (collaborateur == null) return null; return GetCollaborateurDTO(collaborateur); } /// /// Récupérer un collaborateur en fonction d'un mail /// /// Mail du collaborateur à renvoyer /// Le collaborateur correspondant au mail en paramètre public CollaborateurDTO GetCollaborateurByMail(string mail) { Collaborateur collaborateur = collaborateurApi.ChercherCollabMail(mail); if (collaborateur == null) return null; return GetCollaborateurDTO(collaborateur); } /// /// Récupérer la liste de tous les collaborateurs /// /// /// Précise si la liste est trié dans l'ordre croissant ou décroissant /// Numéro de la page qui est affiché du côté front /// Nombre de collaborateurs à renvoyer /// Liste des fonctions /// id de l'agence à laquelle appartient les collaborateurs à récupérer /// /// permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte /// Choisir l'attribut par lequel est trié la liste /// /// idBU est à prendre en compte avant l'idAgence /// idAgence n'est à prendre en compte que si idBU est nul /// /// /// Renvoie la liste des collaborateurs en fonction des paramètres public IEnumerable GetCollaborateurs(bool? asc, int? numPage, int? parPage, List fonctions, long? idAgence, long? idBU, string texte, string tri) { if (texte == null) texte = ""; else texte = texte.ToLower(); IEnumerable collaborateurs; IEnumerable collaborateursDTO; if(idBU != null) collaborateurs = collaborateurApi.ChercherCollabBU(idBU); else if( idAgence != null) collaborateurs = collaborateurApi.ChercherCollabAgence(idAgence); else collaborateurs = collaborateurApi.ChercherCollab(); if (collaborateurs == null) return new List(); int skip = (numPage.Value - 1) * parPage.Value; int take = parPage.Value; collaborateursDTO = (from c in collaborateurs where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte) select GetCollaborateurDTO(c)).Skip(skip).Take(take); return collaborateursDTO; } /// /// Récupérer les collaborateurs d'un référent /// /// id du référent des collaborateurs à récupérer /// Précise si la liste est trié dans l'ordre croissant ou décroissant /// Numéro de la page qui est affiché du côté front /// Nombre de collaborateurs à renvoyer /// permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte /// Choisir l'attribut par lequel est trié la liste /// Renvoyer les collaborateurs du référent dont l'id est passé en paramètre public IEnumerable GetCollaborateursByReferent(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri) { Collaborateur referent = collaborateurApi.ChercherCollabId(idReferent); if (referent == null) return null; if (texte == null) texte = ""; else texte = texte.ToLower(); IEnumerable collaborateurs = collaborateurApi.ChercherCollabRef(idReferent); int skip = (numPage.Value - 1) * parPage.Value; int take = parPage.Value; IEnumerable collaborateursDTO = (from c in collaborateurs where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte) select GetCollaborateurDTO(c)).Skip(skip).Take(take); return collaborateursDTO; } /// /// Récupérer le profil d'un collaborateur par mail /// /// mail du collaborateur dont on cherche le profil /// Renvoie le profil correspondant au mail passé en paramètre public ProfilDTO GetProfilByMail(string mail) { Collaborateur collaborateur = collaborateurApi.ChercherCollabMail(mail); if (collaborateur == null) return null; return GetProfilDTO(collaborateur); } /// /// Récupérer un profil d'un collaborateur par l'id /// /// id du collaborateur dont on cherche le profil /// Renvoie le profil correspondant à l'id passé en paramètre public ProfilDTO GetProfilById(Guid? idCollaborateur) { Collaborateur collaborateur = collaborateurApi.ChercherCollabId(idCollaborateur); if (collaborateur == null) return null; return GetProfilDTO(collaborateur); } #endregion #region DTO To Object /// /// Transformer un objet collaborateur en ProfilDTO /// /// collaborateur a transformé en profilDTO /// Renvoie le profil associé au collaborateur passé en paramètre private ProfilDTO GetProfilDTO(Collaborateur collaborateur) { ProfilDTO profilDTO = new ProfilDTO() { Id = collaborateur.Id, DateArrivee = collaborateur.DateArrivee, MailApside = collaborateur.MailApside, Nom = collaborateur.Nom, Prenom = collaborateur.Prenom, BusinessUnit = GetBusinessUnitDTO(collaborateur.BusinessUnit) }; return profilDTO; } /// /// Transformer une agence en agenceDTO /// /// agence à transformer en agenceDTO /// Retourne la transformation DTO de l'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; } /// /// Transforme une businessUnit en businessUnitDTO /// /// businessUnit à transformer en businessUnitDTO /// Retourne la transformation DTO de la businessUnit 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; } /// /// Transforme un collaborateur en collaborateurDTO /// /// collaborateur à transformer en collaborateurDTO /// Renvoie la transformation DTO du 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; } /// /// Transforme un referent en referentDTO /// /// referent à transformer en referentDTO /// Renvoie la transformation DTO du 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; } #endregion } }