diff --git a/EPAServeur.Tests/Services/DemandeDelegationServiceTests.cs b/EPAServeur.Tests/Services/DemandeDelegationServiceTests.cs index 4a34fe9..99889e4 100644 --- a/EPAServeur.Tests/Services/DemandeDelegationServiceTests.cs +++ b/EPAServeur.Tests/Services/DemandeDelegationServiceTests.cs @@ -104,8 +104,11 @@ namespace EPAServeur.Tests.Services Id = id, DateDemande = demandeDelegation.DateDemande, RaisonDemande = demandeDelegation.RaisonDemande, - DateReponse = DateTime.Now, - EtatDemande = EtatDemande.Validee + EtatDemande = EtatDemande.Validee, + Referent = new CollaborateurDTO() + { + Id = idReferent + } }; DemandeDelegationDTO reponse = await demandeDelegationService.UpdateDemandeDelegation(id, demandeDTO); demandeDelegation = await context.DemandeDelegations.FindAsync(id); @@ -133,7 +136,6 @@ namespace EPAServeur.Tests.Services Id = id, DateDemande = demandeDelegation.DateDemande, RaisonDemande = demandeDelegation.RaisonDemande, - DateReponse = DateTime.Now, EtatDemande = EtatDemande.Rejetee, RaisonRefus = "exemple raison refus" }; @@ -158,7 +160,6 @@ namespace EPAServeur.Tests.Services Id = id, DateDemande = DateTime.Now, RaisonDemande = "exemple raison demande", - DateReponse = DateTime.Now, EtatDemande = etatDemande, RaisonRefus = raisonRefus }; @@ -179,7 +180,6 @@ namespace EPAServeur.Tests.Services Id = id, DateDemande = DateTime.Now, RaisonDemande = "exemple raison demande", - DateReponse = DateTime.Now, EtatDemande = etatDemande, RaisonRefus = raisonRefus }; @@ -210,7 +210,6 @@ namespace EPAServeur.Tests.Services Id = id, DateDemande = demandeDelegation.DateDemande, RaisonDemande = demandeDelegation.RaisonDemande, - DateReponse = DateTime.Now, EtatDemande = etatDemande, RaisonRefus = raisonRefus }; diff --git a/EPAServeur/Services/DemandeDelegationService.cs b/EPAServeur/Services/DemandeDelegationService.cs index 4ead509..25e130f 100644 --- a/EPAServeur/Services/DemandeDelegationService.cs +++ b/EPAServeur/Services/DemandeDelegationService.cs @@ -38,7 +38,6 @@ namespace EPAServeur.Services throw new ReferentNotFoundException(); CollaborateurDTO referentDTO = GetCollaborateurDTO(referent); - //var tasks = context.DemandeDelegations.Where( d => d.IdReferent.Equals(idReferent) && d.EtatDemande.Equals(EtatDemande.EnAttente)).Select() var tasks = from demandeDelegation in context.DemandeDelegations.Include( d => d.Ep) where demandeDelegation.IdReferent.Equals(idReferent) && demandeDelegation.EtatDemande.Equals(EtatDemande.EnAttente) @@ -50,11 +49,60 @@ namespace EPAServeur.Services public async Task UpdateDemandeDelegation(long id, DemandeDelegationDTO demandeDelegationDTO) { - throw new NotImplementedException(); + if (id != demandeDelegationDTO.Id) + throw new DemandeDelegationIncompatibleException("La demande de délégation ne correspond pas avec l'identifiant reçu"); + if (demandeDelegationDTO == null || !demandeDelegationDTO.Id.HasValue || demandeDelegationDTO.Id == null) + throw new DemandeDelegationInvalidException("Aucune demande de délégation à mettre à jour n'a été reçu"); + + switch(demandeDelegationDTO.EtatDemande) + { + case EtatDemande.EnAttente: + throw new DemandeDelegationInvalidException("La demande ne peut pas être mise à jour si aucune réponse n'a été donnée"); + case EtatDemande.Validee: + demandeDelegationDTO = await AccepterDemandeDelegation(demandeDelegationDTO); + break; + case EtatDemande.Rejetee: + demandeDelegationDTO = await RejeterDemandeDelegation(demandeDelegationDTO); + break; + } + return demandeDelegationDTO; } + + + #endregion - #region + #region méthodes privées + + private async Task AccepterDemandeDelegation(DemandeDelegationDTO demandeDelegationDTO) + { + + DemandeDelegation demandeDelegation = await context.DemandeDelegations.Where(d => d.IdDemandeDelegation.Equals(demandeDelegationDTO.Id.Value)).Include(d => d.Ep).FirstOrDefaultAsync(); + if (demandeDelegation == null) + throw new DemandeDelegationNotFoundException("Aucune demande de délégation n'a été trouvée"); + Guid ancienReferent = demandeDelegation.Ep.IdReferent.Value; // devra être utilisé pour notifier l'ancien référent + demandeDelegation.Ep.IdReferent = demandeDelegationDTO.Referent.Id; + context.Remove(demandeDelegation); + await context.SaveChangesAsync(); + + return null; + } + + private async Task RejeterDemandeDelegation(DemandeDelegationDTO demandeDelegationDTO) + { + if (demandeDelegationDTO.RaisonRefus == null || demandeDelegationDTO.RaisonRefus == "") + throw new DemandeDelegationInvalidException("Vous devez justifiez la raison du refus"); + + DemandeDelegation demandeDelegation = await context.DemandeDelegations.FindAsync(demandeDelegationDTO.Id); + if (demandeDelegation == null) + throw new DemandeDelegationNotFoundException("Aucune demande de délégation n'a été trouvée"); + demandeDelegation.EtatDemande = demandeDelegationDTO.EtatDemande; + demandeDelegation.RaisonRefus= demandeDelegationDTO.RaisonRefus; + demandeDelegation.DateReponse = DateTime.Now; + await context.SaveChangesAsync(); + return demandeDelegationDTO; + } + private static CollaborateurDTO GetCollaborateurDTO(Collaborateur collaborateur) { return new CollaborateurDTO()