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
}
}