|
|
|
@ -26,82 +26,6 @@ namespace EPAServeur.Services |
|
|
|
|
} |
|
|
|
|
#endregion |
|
|
|
|
|
|
|
|
|
#region Services Sync |
|
|
|
|
public ReferentEPDTO UpdateCollaborateursReferent(ReferentEPDTO body, Guid? idReferent) |
|
|
|
|
{ |
|
|
|
|
//Vérifier que l'id du référent et l'id référent dans l'objet body est le même |
|
|
|
|
CheckReferentId(idReferent, body); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Collaborateur referent = collaborateurApi.ChercherCollabId(idReferent); |
|
|
|
|
|
|
|
|
|
//Vérifier que le référent est valide |
|
|
|
|
CheckReferentValide(referent); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerable<Collaborateur> collaborateurs = collaborateurApi.ChercherCollab(body.IdsCollaborateur); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Vérifier que la liste des collaborateurs est valide |
|
|
|
|
CheckListesCollaborateurs(collaborateurs); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Si il manque un collaborateur, c'est qu'il n'a pas été trouvé |
|
|
|
|
if (collaborateurs.Count() < body.IdsCollaborateur.Count) |
|
|
|
|
throw new CollaborateurNotFoundException("Un collaborateur n'a pas pu être récupéré"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Si on se retrouve avec plus de collaborateur que demandé |
|
|
|
|
if (collaborateurs.Count() > body.IdsCollaborateur.Count) |
|
|
|
|
throw new ApiException(415, "Une erreur est survenu lors de la récupération des données avec le serveur"); |
|
|
|
|
|
|
|
|
|
this.SetReferentEP(body.IdsCollaborateur, idReferent); |
|
|
|
|
|
|
|
|
|
return body; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public ReferentEPDTO UpdateReferentCollaborateur(ReferentEPDTO body, Guid? idCollaborateur) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
CheckCollaborateurId(idCollaborateur, body); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Collaborateur referent = collaborateurApi.ChercherCollabId(body.IdReferent); |
|
|
|
|
CheckReferentValide(referent); |
|
|
|
|
|
|
|
|
|
Collaborateur collaborateur = collaborateurApi.ChercherCollabId(idCollaborateur); |
|
|
|
|
CheckCollaborateurValide(collaborateur); |
|
|
|
|
|
|
|
|
|
ReferentEP referentEP = context.ReferentEP.Find(idCollaborateur); |
|
|
|
|
if(referentEP == null) |
|
|
|
|
{ |
|
|
|
|
referentEP = new ReferentEP |
|
|
|
|
{ |
|
|
|
|
IdCollaborateur = idCollaborateur.Value |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Si le nouveau référent est déjà le référent actuel du collaborateur, il n'est pas nécessaire de faire quoique ce soit |
|
|
|
|
if (referentEP.IdReferent != null && referentEP.IdReferent.HasValue && referentEP.IdReferent.Value.Equals(body.IdReferent.Value)) |
|
|
|
|
return body; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Guid? ancienReferent = referentEP.IdReferent; //Si non null, il faudra notifier le référent qu'il n'est plus le référent EP du collaborateur |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
referentEP.IdReferent = body.IdReferent; |
|
|
|
|
context.SaveChanges(); |
|
|
|
|
|
|
|
|
|
if (ancienReferent != null && ancienReferent.HasValue) |
|
|
|
|
{ |
|
|
|
|
//notifier l'ancien référent |
|
|
|
|
} |
|
|
|
|
//TODO : Notifier le référent et le collaborateur |
|
|
|
|
|
|
|
|
|
return body; |
|
|
|
|
} |
|
|
|
|
#endregion |
|
|
|
|
|
|
|
|
|
#region Service Async |
|
|
|
|
public async Task<ReferentEPDTO> UpdateCollaborateursReferentAsync(ReferentEPDTO body, Guid? idReferent) |
|
|
|
|
{ |
|
|
|
@ -231,10 +155,10 @@ namespace EPAServeur.Services |
|
|
|
|
{ |
|
|
|
|
//Aucune valeur nulle n'a été retrouvée |
|
|
|
|
if (collaborateur == null) |
|
|
|
|
throw new CollaborateurNotFoundException("Le collaborateur n'a pas été retrouvé"); |
|
|
|
|
throw new CollaborateurNotFoundException("Un collaborateur n'a pas été retrouvé"); |
|
|
|
|
//Le collaborateur est toujours présent dans l'entreprise |
|
|
|
|
if (collaborateur.DateDepart.HasValue) |
|
|
|
|
throw new CollaborateurPartiException("Le collaborateur récupéré ne travaille plus pour l'entreprise"); |
|
|
|
|
throw new CollaborateurPartiException("Un collaborateur récupéré ne travaille plus pour l'entreprise"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -246,59 +170,6 @@ namespace EPAServeur.Services |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void SetReferentEP(IEnumerable<Guid?> idsCollaborateur, Guid? idReferent) { |
|
|
|
|
//Garder le lien entre l'anciens référent et le collaborateur pour notifier les anciens référents qu'ils ne sont plus référents |
|
|
|
|
Dictionary<Guid?, Guid?> anciensReferentCollaborateurs = new Dictionary<Guid?, Guid?>(); |
|
|
|
|
|
|
|
|
|
//La liste des nouveaux collaborateurs du référents qui devront être notifiés de leur nouveau référent |
|
|
|
|
List<Guid?> nouveauxCollaborateurs = new List<Guid?>(); |
|
|
|
|
|
|
|
|
|
foreach(Guid? idCollaborateur in idsCollaborateur) { |
|
|
|
|
ReferentEP referentEP = context.ReferentEP.Find(idCollaborateur); |
|
|
|
|
|
|
|
|
|
//Eviter d'avoir un référent qui devient son propre référent |
|
|
|
|
if(idCollaborateur.Value.Equals(idReferent.Value)) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
//Le collaborateur n'a jamais eu de référent donc on lui crée un référentEP et il en sera simplement notifié |
|
|
|
|
if( referentEP == null) { |
|
|
|
|
referentEP = new ReferentEP |
|
|
|
|
{ |
|
|
|
|
IdReferent = idReferent, |
|
|
|
|
IdCollaborateur = idCollaborateur.Value |
|
|
|
|
}; |
|
|
|
|
context.ReferentEP.Add(referentEP); |
|
|
|
|
} |
|
|
|
|
else{ |
|
|
|
|
//Si le collaborateur a actuellement un référent |
|
|
|
|
if(referentEP.IdReferent != null && referentEP.IdReferent.HasValue) { |
|
|
|
|
//Si le nouveau référent est déjà le référent actuel du collaborateur, il n'y a rien à faire |
|
|
|
|
if (referentEP.IdReferent.Value.Equals(referentEP.IdReferent.Value)) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
//Sauvegarder l'ancien référent et le collaborateur suite au changement |
|
|
|
|
anciensReferentCollaborateurs.Add(idReferent, idCollaborateur); |
|
|
|
|
} |
|
|
|
|
referentEP.IdReferent = idReferent; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
context.SaveChanges(); |
|
|
|
|
//ajouter le nouveau collaborateur à la liste des collaborateurs à notifier |
|
|
|
|
nouveauxCollaborateurs.Add(idCollaborateur); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//TODO: notifier chaque collaborateur de leur nouveau référent |
|
|
|
|
|
|
|
|
|
//TODO: notifier le référent suite à ses nouveaux collaborateurs |
|
|
|
|
|
|
|
|
|
//TODO: notifer les anciens référents qu'ils ne sont plus référents des leurs collaborateurs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endregion |
|
|
|
|
|
|
|
|
|
#region Methodes privees Async |
|
|
|
|