From c6d69a0d2021db1d96ef6f65be54e0f2242d07c0 Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Mon, 21 Sep 2020 16:20:39 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20t=C3=A2ches=20asynchrones=20dans?= =?UTF-8?q?=20le=20service=20engagement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IServices/IEngagementService.cs | 11 +- Services/EngagementService.cs | 220 ++++++++++++++++++++------------ 2 files changed, 145 insertions(+), 86 deletions(-) diff --git a/IServices/IEngagementService.cs b/IServices/IEngagementService.cs index b47080c..cbf5d6c 100644 --- a/IServices/IEngagementService.cs +++ b/IServices/IEngagementService.cs @@ -12,9 +12,14 @@ namespace EPAServeur.IServices { IEnumerable GetEngagements(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); - IEnumerable GetEngagementsEnAttente(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); - Task> GetEngagementsRepondus(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); - Task RepondreEngagement(EngagementDTO engagement, long? idEngagement); + Task> GetEngagementsAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); + IEnumerable GetEngagementsEnAttente(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); + Task> GetEngagementsEnAttenteAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); + IEnumerable GetEngagementsRepondus(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); + Task> GetEngagementsRepondusAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri); + + EngagementDTO RepondreEngagement(EngagementDTO engagement, long? idEngagement); + Task RepondreEngagementAsync(EngagementDTO engagement, long? idEngagement); } } diff --git a/Services/EngagementService.cs b/Services/EngagementService.cs index dfb645b..320b0de 100644 --- a/Services/EngagementService.cs +++ b/Services/EngagementService.cs @@ -20,6 +20,7 @@ namespace EPAServeur.Services private readonly EpContext epContext; private readonly ICollaborateurService collaborateurService; + private readonly IReferentService referentService; #endregion #region Contructeurs @@ -28,10 +29,11 @@ namespace EPAServeur.Services /// Constructeur de la classe EngagementService /// /// - public EngagementService(EpContext _epContext, ICollaborateurService _collaborateurService) + public EngagementService(EpContext _epContext, ICollaborateurService _collaborateurService, IReferentService _referentService) { epContext = _epContext; collaborateurService = _collaborateurService; + referentService = _referentService; } #endregion @@ -41,7 +43,6 @@ namespace EPAServeur.Services public IEnumerable GetEngagements(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri) { IEnumerable engagements; - IEnumerable engagementDTOs; if (texte == null) texte = ""; @@ -52,40 +53,46 @@ namespace EPAServeur.Services int take = parPAge.Value; if (idAgence != null) - { - try - { - engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence); - } - catch (Exception ex) - { - throw; - } - } + engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence); else - { - try - { - engagements = epContext.Engagement.Include(engagement => engagement.Ep); - } - catch (Exception ex) - { - throw; - } - } + engagements = epContext.Engagement.Include(engagement => engagement.Ep); + if (engagements == null) + return null; + + var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + + return engagementDTOs; + } + + public async Task> GetEngagementsAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri) + { + IEnumerable engagements; + + if (texte == null) + texte = ""; + else + texte = texte.ToLower(); + + int skip = (numPage.Value - 1) * parPAge.Value; + int take = parPAge.Value; + + if (idAgence != null) + engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence).ToListAsync(); + else + engagements = await epContext.Engagement.Include(engagement => engagement.Ep).ToListAsync(); if (engagements == null) return null; - engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + return engagementDTOs; } public IEnumerable GetEngagementsEnAttente(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri) { IEnumerable engagements; - IEnumerable engagementDTOs; if (texte == null) texte = ""; @@ -96,40 +103,47 @@ namespace EPAServeur.Services int take = parPAge.Value; if (idAgence != null) - { - try - { - engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence && engagement.Realise == null).ToList(); - } - catch (Exception ex) - { - throw; - } - } + engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence && engagement.Realise == null).ToList(); else - { - try - { - engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Realise == null).ToList(); - } - catch (Exception ex) - { - throw; - } - } + engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Realise == null).ToList(); + + if (engagements == null) + return null; + + var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + + return engagementDTOs; + } + + public async Task> GetEngagementsEnAttenteAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri) + { + IEnumerable engagements; + + if (texte == null) + texte = ""; + else + texte = texte.ToLower(); + + int skip = (numPage.Value - 1) * parPAge.Value; + int take = parPAge.Value; + + if (idAgence != null) + engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence && engagement.Realise == null).ToListAsync(); + else + engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Realise == null).ToListAsync(); if (engagements == null) return null; - engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + return engagementDTOs; } - public async Task> GetEngagementsRepondus(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri) + public IEnumerable GetEngagementsRepondus(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri) { IEnumerable engagements; - // engagementDTOs = new List(); if (texte == null) texte = ""; @@ -140,38 +154,41 @@ namespace EPAServeur.Services int take = parPAge.Value; if (idAgence != null) - { - try - { engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence && engagement.Modalite.ToLower().Contains(texte)); - } - catch (Exception ex) - { - throw; - } - } else - { - try - { engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Realise != null && engagement.Modalite.ToLower().Contains(texte)); - } - catch (Exception ex) - { - throw; - } - } if (engagements == null) return null; - var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTOAsync(engagement)); + var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + + return engagementDTOs; + } + + public async Task> GetEngagementsRepondusAsync(bool? asc, int? numPage, int? parPAge, long? idAgence, string texte, string tri) + { + IEnumerable engagements; + + if (texte == null) + texte = ""; + else + texte = texte.ToLower(); + + int skip = (numPage.Value - 1) * parPAge.Value; + int take = parPAge.Value; + + if (idAgence != null) + engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Ep.IdAgence == idAgence && engagement.Modalite.ToLower().Contains(texte)).ToListAsync(); + else + engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.Realise != null && engagement.Modalite.ToLower().Contains(texte)).ToListAsync(); + + if (engagements == null) + return null; + + var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTOAsync(engagement)); var results = await Task.WhenAll(engagementDTOs); - //foreach (var engagement in engagements) - //{ - // engagementDTOs.Add(await GetEngagementDTOAsync(engagement)); - //} return results; } @@ -182,18 +199,15 @@ namespace EPAServeur.Services /// /// /// - public async Task RepondreEngagement(EngagementDTO engagementDTO, long? idEngagement) + public EngagementDTO RepondreEngagement(EngagementDTO engagementDTO, long? idEngagement) { - + if (!IsEngagementValide(engagementDTO)) return null; if (engagementDTO.Id != idEngagement) return null; - if (engagementDTO.Realise == false && string.IsNullOrWhiteSpace(engagementDTO.RaisonNonRealisable)) - return null; // Créer une exception pour ce cas - Engagement engagement = epContext.Engagement.Include(engagement => engagement.Ep).FirstOrDefault(engagement => engagement.Id == idEngagement); if (engagement == null) @@ -209,6 +223,40 @@ namespace EPAServeur.Services epContext.SaveChanges(); + return GetEngagementDTO(engagement); + } + + + /// + /// Donner une réponse à un engagement de manière asynchrone + /// + /// + /// + /// + public async Task RepondreEngagementAsync(EngagementDTO engagementDTO, long? idEngagement) + { + + if (!IsEngagementValide(engagementDTO)) + return null; + + if (engagementDTO.Id != idEngagement) + return null; + + Engagement engagement = await epContext.Engagement.Include(engagement => engagement.Ep).FirstOrDefaultAsync(engagement => engagement.Id == idEngagement); + + if (engagement == null) + return null; + + engagement.Realise = engagementDTO.Realise; + + if (engagement.Realise == false) + { + engagement.Realisable = engagementDTO.Realisable; + engagement.RaisonNonRealisable = engagementDTO.RaisonNonRealisable; + } + + await epContext.SaveChangesAsync(); + return await GetEngagementDTOAsync(engagement); } @@ -218,11 +266,11 @@ namespace EPAServeur.Services #region Méthodes Privée private bool IsEngagementValide(EngagementDTO engagementDTO) { - return !(engagementDTO == null || engagementDTO.Id == null || engagementDTO.Action == null || engagementDTO.DatePrevisionnelle == null || engagementDTO.Dispositif == null || engagementDTO.Modalite == null); + return !(engagementDTO == null || engagementDTO.Id == null || engagementDTO.Action == null || engagementDTO.DatePrevisionnelle == null || engagementDTO.Dispositif == null || engagementDTO.Modalite == null || (engagementDTO.Realise == false && string.IsNullOrWhiteSpace(engagementDTO.RaisonNonRealisable))); } #region Object to DTO - + /// /// Récupère un objet EngagementDTO en fonction d'un objet Engagement /// @@ -274,7 +322,7 @@ namespace EPAServeur.Services /// /// /// - private EpInformationDTO GetEpInformationDTO(Ep ep) + private EpInformationDTO GetEpInformationDTO(Ep ep) { EpInformationDTO epInformationDTO = new EpInformationDTO() { @@ -284,7 +332,7 @@ namespace EPAServeur.Services DatePrevisionnelle = ep.DatePrevisionnelle, Obligatoire = ep.Obligatoire, Collaborateur = collaborateurService.GetCollaborateurById(ep.IdCollaborateur), - Referent = collaborateurService.GetCollaborateurById(ep.IdReferent) + Referent = referentService.GetReferentById(ep.IdReferent) //Ajouter la date de disponibilité }; @@ -304,11 +352,17 @@ namespace EPAServeur.Services Type = ep.TypeEP.ToString(), Statut = ep.Statut.ToString(), DatePrevisionnelle = ep.DatePrevisionnelle, - Obligatoire = ep.Obligatoire, - Collaborateur = await collaborateurService.GetCollaborateurByIdAsync(ep.IdCollaborateur), - Referent = await collaborateurService.GetCollaborateurByIdAsync(ep.IdReferent) + Obligatoire = ep.Obligatoire //Ajouter la date de disponibilité }; + var collaborateur = collaborateurService.GetCollaborateurByIdAsync(ep.IdCollaborateur); + var referent = referentService.GetReferentByIdAsync(ep.IdReferent); + + await Task.WhenAll(collaborateur, referent); + + epInformationDTO.Collaborateur = collaborateur.Result; + epInformationDTO.Referent = referent.Result; + return epInformationDTO; } @@ -368,7 +422,7 @@ namespace EPAServeur.Services return ep; } - + #endregion #endregion