From a1ca68302785057b39e371b08ce7e693ca290d9f Mon Sep 17 00:00:00 2001 From: jboinembalome Date: Thu, 11 Feb 2021 15:58:04 +0100 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20des=20m=C3=A9thodes=20du?= =?UTF-8?q?=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EPAServeur/Services/EngagementService.cs | 514 ++++++++++++----------- 1 file changed, 260 insertions(+), 254 deletions(-) diff --git a/EPAServeur/Services/EngagementService.cs b/EPAServeur/Services/EngagementService.cs index b5f6a69..ad750a5 100644 --- a/EPAServeur/Services/EngagementService.cs +++ b/EPAServeur/Services/EngagementService.cs @@ -2,15 +2,11 @@ using EPAServeur.Exceptions; using EPAServeur.IServices; using EPAServeur.Models.EP; -using EPAServeur.Models.Formation; -using EPAServeur.Models.SaisieChamp; using IO.Swagger.DTO; using IO.Swagger.Enum; -using IO.Swagger.ModelCollaborateur; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Threading.Tasks; @@ -20,9 +16,42 @@ namespace EPAServeur.Services { #region Variables + + /// + /// Accès et gestion de la base de données + /// private readonly EpContext epContext; + + /// + /// Accès et service collaborateur + /// private readonly ICollaborateurService collaborateurService; - private readonly IReferentEPService referentService; + + /// + /// Nombre d'éléments min à afficher par page + /// + private readonly int minParPage = 5; + + /// + /// Nom d'éléments max à affichar par page + /// + private readonly int maxParPage = 100; + + /// + /// Nombre d'éléments à afficher par défaut par page + /// + private readonly int defaultParPage = 15; + + /// + /// Numéro de page min à afficher par défaut + /// + private readonly int defaultNumPage = 1; + + /// + /// Ordonnancement par défaut + /// + private readonly bool defaultAsc = true; + #endregion #region Contructeurs @@ -31,260 +60,270 @@ namespace EPAServeur.Services /// Constructeur de la classe EngagementService /// /// - public EngagementService(EpContext _epContext, ICollaborateurService _collaborateurService, IReferentEPService _referentService) + public EngagementService(EpContext _epContext, ICollaborateurService _collaborateurService) { epContext = _epContext; collaborateurService = _collaborateurService; - referentService = _referentService; } #endregion #region Méthodes Service - public IEnumerable GetEngagements(bool? asc, int? numPage, int? parPAge, string texte, string tri) + /// + /// Récupérer la liste des engagements de manière asynchrone + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> GetEngagementsAsync(List idBUs, List etatsEngagement, bool? asc, int? numPage, int? parPage, string texte, string tri) { + IQueryable query; IEnumerable engagements; + IEnumerable engagementDTOs; + IEnumerable collaborateurDTOs; - if (texte == null) - texte = ""; - else - texte = texte.ToLower(); - - int skip = (numPage.Value - 1) * parPAge.Value; - int take = parPAge.Value; + query = epContext.Engagement.Include(engagement => engagement.Ep); + query = IdBUsFilter(query, idBUs); + query = EtatsEngagementFilter(query, etatsEngagement); + query = ActionFilter(query, texte); + query = OrderByColumn(query, asc, tri); + query = SkipAndTake(query, parPage, numPage); - engagements = epContext.Engagement.Include(engagement => engagement.Ep).Skip(skip).Take(take); + engagements = await query.ToListAsync(); - if (engagements == null || engagements.Count() == 0) - return new List(); + collaborateurDTOs = await GetCollaborateurDTOs(engagements); - var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + engagementDTOs = engagements.Select(engagement => GetEngagementDTO(engagement, collaborateurDTOs)); return engagementDTOs; } - public async Task> GetEngagementsAsync(bool? asc, int? numPage, int? parPAge, string texte, string tri) + public async Task GetEngagementsCountAsync(List idBUs, List etatsEngagement, bool? asc, int? numPage, int? parPage, 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; - - engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Skip(skip).Take(take).ToListAsync(); + IQueryable query; + long count; - if (engagements == null || engagements.Count() == 0) - return new List(); + query = epContext.Engagement.Include(engagement => engagement.Ep); + query = IdBUsFilter(query, idBUs); + query = EtatsEngagementFilter(query, etatsEngagement); + query = ActionFilter(query, texte); + query = OrderByColumn(query, asc, tri); + query = SkipAndTake(query, parPage, numPage); - var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTOAsync(engagement)); - var results = await Task.WhenAll(engagementDTOs); + count = await query.CountAsync(); - return results; + return count; } - public IEnumerable GetEngagementsEnAttente(bool? asc, int? numPage, int? parPAge, string texte, string tri) + /// + /// Donner une réponse à un engagement de manière asynchrone + /// + /// + /// + /// + public async Task RepondreEngagementAsync(EngagementDTO engagementDTO, long idEngagement) { - IEnumerable engagements; - - if (texte == null) - texte = ""; - else - texte = texte.ToLower(); - - int skip = (numPage.Value - 1) * parPAge.Value; - int take = parPAge.Value; + IEnumerable collaborateurDTOs; + Engagement engagement; - engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.EtatEngagement == EtatEngagement.EnAttente).Skip(skip).Take(take).ToList(); + IsEngagementValide(engagementDTO); - if (engagements == null || engagements.Count() == 0) - return new List(); + if (!engagementDTO.Id.HasValue || engagementDTO.Id.Value != idEngagement) + throw new EngagementIncompatibleIdException("L'id de l'engagement à mettre à jour et l'engagement à mettre à jour sont incompatible."); - var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); - - return engagementDTOs; - } + engagement = await epContext.Engagement.Include(engagement => engagement.Ep).FirstOrDefaultAsync(engagement => engagement.IdEngagement == idEngagement); - public async Task> GetEngagementsEnAttenteAsync(bool? asc, int? numPage, int? parPAge, 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 (engagement == null) + throw new EngagementNotFoundException(); - engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.EtatEngagement == EtatEngagement.EnAttente).Skip(skip).Take(take).ToListAsync(); + collaborateurDTOs = await GetCollaborateurDTOs(engagement); - if (engagements == null || engagements.Count() == 0) - return new List(); + engagement = SetReponseEngagement(engagement, engagementDTO); - var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTOAsync(engagement)); - var results = await Task.WhenAll(engagementDTOs); + await epContext.SaveChangesAsync(); - return results; + return GetEngagementDTO(engagement, collaborateurDTOs); } - public IEnumerable GetEngagementsRepondus(bool? asc, int? numPage, int? parPAge, string texte, string tri) - { - IEnumerable engagements; - if (texte == null) - texte = ""; - else - texte = texte.ToLower(); + #endregion - int skip = (numPage.Value - 1) * parPAge.Value; - int take = parPAge.Value; + #region Méthodes Privée + /// + /// Vérifier si un objet EngagementDTO est valide pour ajout ou mise à jour + /// + /// Un objet EngagementDTO est valide si l'action, le dispositif, la modalité et la date limite n'est pas null, si l'EP est signé, et si l'EP est présent dans la base de données. + /// + /// + private void IsEngagementValide(EngagementDTO engagementDTO) + { + // Vérifier que l'engagement n'est pas null + if (engagementDTO == null) + throw new EngagementInvalidException("Aucun engagement n'a été reçu."); - engagements = epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.EtatEngagement == EtatEngagement.Respecte && engagement.Modalite.ToLower().Contains(texte)).Skip(skip).Take(take); + // Vérfier que l'engagement a bien un EP + if (engagementDTO.Ep == null || !engagementDTO.Ep.Id.HasValue) + throw new EngagementInvalidException("Impossible de répondre à un engagement sans EP."); - if (engagements == null || engagements.Count() == 0) - return new List(); + // Vérfier que l'ep a bien été signé par le collaborateur + if (engagementDTO.Ep.Statut != StatutEp.Signe) + throw new EngagementInvalidException("Impossible de répondre à un engagement d'un EP qui n'est pas en cours et qui n'a pas été signé par le collaborateur."); - var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTO(engagement)); + // Vérifier que l'engagement a bien une action + if (string.IsNullOrWhiteSpace(engagementDTO.Action)) + throw new EngagementInvalidException("L'action de l'engagement doit contenir au moins 1 caractère."); - return engagementDTOs; - } + // Vérifier que l'engagement a bien un dispositif + if (string.IsNullOrWhiteSpace(engagementDTO.Dispositif)) + throw new EngagementInvalidException("Le dispostif de l'engagement doit contenir au moins 1 caractère."); - public async Task> GetEngagementsRepondusAsync(bool? asc, int? numPage, int? parPAge, 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; + // Vérifier que l'engagement a bien une modalité + if (string.IsNullOrWhiteSpace(engagementDTO.Modalite)) + throw new EngagementInvalidException("La modalité de l'engagement doit contenir au moins 1 caractère."); - engagements = await epContext.Engagement.Include(engagement => engagement.Ep).Where(engagement => engagement.EtatEngagement == EtatEngagement.Respecte && engagement.Modalite.ToLower().Contains(texte)).Skip(skip).Take(take).ToListAsync(); + // Vérifier que l'engagement a bien une date limite + if (!engagementDTO.DateLimite.HasValue) + throw new EngagementInvalidException("Impossible de répondre à l'engagement sans date limite."); - if (engagements == null || engagements.Count() == 0) - return new List(); - - var engagementDTOs = engagements.Where(engagement => engagement.Modalite.ToLower().Contains(texte)).Select(engagement => GetEngagementDTOAsync(engagement)); - var results = await Task.WhenAll(engagementDTOs); + // Vérifier que l'engagement a bien raison expliquant pourquoi l'engagement n'est pas réalisable lorsque l'état de l'engagement n'est pas réalisable + if (engagementDTO.EtatEngagement == EtatEngagement.NonRealisable && string.IsNullOrWhiteSpace(engagementDTO.RaisonNonRealisable)) + throw new EngagementInvalidException("Impossible de répondre à l'engagement, une raison doit être rensignée lorsqu'un engagement n'est pas réalisé."); - return results; + // Vérfier que l'EP lié à l'engagement est présent dans la BDD + if (!epContext.Ep.Any(ep => ep.IdEP == engagementDTO.Ep.Id.Value)) + throw new EngagementInvalidException("L'EP n'existe pas."); } /// - /// Donner une réponse à un engagement + /// Ajouter un ordonnancement croissant ou décroissant sur colonne /// - /// - /// + /// + /// /// - public EngagementDTO RepondreEngagement(EngagementDTO engagementDTO, long? idEngagement) + private IQueryable OrderByColumn(IQueryable query, bool? asc, string columnName) { + if (!asc.HasValue) + asc = defaultAsc; - if (!IsEngagementValide(engagementDTO)) - throw new EngagementInvalidException("Impossible de répondre à l'engagement, des données sont manquants."); - - if (engagementDTO.EtatEngagement == EtatEngagement.NonRealisable && string.IsNullOrWhiteSpace(engagementDTO.RaisonNonRealisable)) - throw new EngagementInvalidException("Impossible de répondre à l'engagement, une raison doit être rensignée lorsqu'un engagement n'est pas réalisé."); - - if (engagementDTO == null && !engagementDTO.Id.HasValue && engagementDTO.Id.Value != idEngagement) - throw new EngagementIncompatibleIdException(); - - - Engagement engagement = epContext.Engagement.Include(engagement => engagement.Ep).FirstOrDefault(engagement => engagement.IdEngagement == idEngagement); - - if (engagement == null) - throw new EngagementNotFoundException(); + if (string.IsNullOrWhiteSpace(columnName)) + { + if (asc.Value) + return query.OrderBy(p => p.Action); - engagement.EtatEngagement = engagementDTO.EtatEngagement; + return query.OrderByDescending(p => p.Action); + } - switch (engagement.EtatEngagement) + switch (columnName.ToLower()) { - case EtatEngagement.Respecte: - engagement.EtatEngagement = engagementDTO.EtatEngagement; - engagement.RaisonNonRealisable = null; - break; - case EtatEngagement.NonRealisable: - engagement.EtatEngagement = engagementDTO.EtatEngagement; - engagement.RaisonNonRealisable = engagementDTO.RaisonNonRealisable; - break; + case "action": + if (asc.Value) + return query.OrderBy(p => p.Action); + + return query.OrderByDescending(p => p.Action); + case "dispositif": + if (asc.Value) + return query.OrderBy(p => p.Dispositif); + + return query.OrderByDescending(p => p.Dispositif); + case "modalite": + if (asc.Value) + return query.OrderBy(p => p.Modalite); + + return query.OrderByDescending(p => p.Modalite); + case "date": + if (asc.Value) + return query.OrderBy(p => p.DateLimite); + + return query.OrderByDescending(p => p.DateLimite); default: - engagement.EtatEngagement = engagementDTO.EtatEngagement; - engagement.RaisonNonRealisable = null; - break; + if (asc.Value) + return query.OrderBy(p => p.Action); + + return query.OrderByDescending(p => p.Action); } + } - epContext.SaveChanges(); + /// + /// Ajouter un filtre pour récupérer les engagements en fonction de plusieurs identifiants de Business Unit + /// + /// + /// + /// + /// + private IQueryable IdBUsFilter(IQueryable query, List idBUs) + { + if (idBUs == null || idBUs.Count == 0) + throw new EngagementInvalidException("Aucune Business Unit n'a été reçu."); - return GetEngagementDTO(engagement); + return query.Where(engagement => idBUs.Contains(engagement.Ep.IdBu)); } - /// - /// Donner une réponse à un engagement de manière asynchrone + /// Ajouter un filtre pour récupérer les engagements en fonction de plusieurs états d'engagement /// - /// - /// + /// + /// /// - public async Task RepondreEngagementAsync(EngagementDTO engagementDTO, long? idEngagement) + private IQueryable EtatsEngagementFilter(IQueryable query, List etatsEngagement) { + if (etatsEngagement == null || etatsEngagement.Count <= 0) + return query; - if (!IsEngagementValide(engagementDTO)) - throw new EngagementInvalidException("Impossible de répondre à l'engagement, des données sont manquants."); + return query.Where(engagement => etatsEngagement.Contains(engagement.EtatEngagement)); + } - if (engagementDTO.EtatEngagement == EtatEngagement.NonRealisable && string.IsNullOrWhiteSpace(engagementDTO.RaisonNonRealisable)) - throw new EngagementInvalidException("Impossible de répondre à l'engagement, une raison doit être rensignée lorsqu'un engagement n'est pas réalisé."); + /// + /// Ajouter un filtre pour récupérer les engagements en fonction d'une action + /// + /// + /// + /// + private IQueryable ActionFilter(IQueryable query, string action) + { + if (string.IsNullOrWhiteSpace(action)) + return query; + return query.Where(engagement => engagement.Action.ToLower().Contains(action.ToLower())); + } - Engagement engagement = await epContext.Engagement.Include(engagement => engagement.Ep).FirstOrDefaultAsync(engagement => engagement.IdEngagement == idEngagement); + /// + /// Ajouter une pagination + /// + /// + /// + /// + /// + private IQueryable SkipAndTake(IQueryable query, int? parPage, int? numPage) + { + int skip, take; - if (engagement == null) - throw new EngagementNotFoundException(); + if (!parPage.HasValue || parPage.Value < minParPage || parPage.Value > maxParPage) + parPage = defaultParPage; - engagement.EtatEngagement = engagementDTO.EtatEngagement; + if (!numPage.HasValue || numPage.Value <= 0) + numPage = defaultNumPage; - switch (engagement.EtatEngagement) - { - case EtatEngagement.Respecte: - engagement.EtatEngagement = engagementDTO.EtatEngagement; - engagement.RaisonNonRealisable = null; - break; - case EtatEngagement.NonRealisable: - engagement.EtatEngagement = engagementDTO.EtatEngagement; - engagement.RaisonNonRealisable = engagementDTO.RaisonNonRealisable; - break; - default: - engagement.EtatEngagement = engagementDTO.EtatEngagement; - engagement.RaisonNonRealisable = null; - break; - } - await epContext.SaveChangesAsync(); + skip = (numPage.Value - 1) * parPage.Value; + take = parPage.Value; - return await GetEngagementDTOAsync(engagement); + return query.Skip(skip).Take(take); } - #endregion - - #region Méthodes Privée - private bool IsEngagementValide(EngagementDTO engagementDTO) - { - return !(engagementDTO == null || engagementDTO.Id == null || engagementDTO.Action == null || engagementDTO.DateLimite == null || engagementDTO.Dispositif == null || engagementDTO.Modalite == null); - } - #region Object to DTO /// - /// Récupère un objet EngagementDTO en fonction d'un objet Engagement + /// Récupère un objet EngagementDTO en fonction d'un objet Engagement et d'une liste de CollaborateurDTO /// /// /// - private EngagementDTO GetEngagementDTO(Engagement engagement) + private EngagementDTO GetEngagementDTO(Engagement engagement, IEnumerable collaborateurDTOs) { EngagementDTO engagementDTO = new EngagementDTO() { @@ -295,80 +334,67 @@ namespace EPAServeur.Services Modalite = engagement.Modalite, RaisonNonRealisable = engagement.RaisonNonRealisable, EtatEngagement = engagement.EtatEngagement, - Ep = GetEpInformationDTO(engagement.Ep) + Ep = GetEpInformationDTO(engagement.Ep, collaborateurDTOs) }; return engagementDTO; } + /// - /// Récupère un objet EngagementDTO en fonction d'un objet Engagement + /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null si l'engagement est null. /// - /// + /// /// - private async Task GetEngagementDTOAsync(Engagement engagement) + private async Task> GetCollaborateurDTOs(Engagement engagement) { - EngagementDTO engagementDTO = new EngagementDTO() - { - Id = engagement.IdEngagement, - Action = engagement.Action, - DateLimite = engagement.DateLimite, - Dispositif = engagement.Dispositif, - Modalite = engagement.Modalite, - RaisonNonRealisable = engagement.RaisonNonRealisable, - EtatEngagement = engagement.EtatEngagement, - Ep = await GetEpInformationDTOAsync(engagement.Ep) - }; + List guids = new List(); - return engagementDTO; + guids.Add((Guid?)engagement.Ep.IdCollaborateur); + guids.Add(engagement.Ep.IdReferent); + + return await collaborateurService.GetCollaborateurDTOsAsync(guids); ; } /// - /// Récupère un objet EpInformationDTO en fonction d'un objet Ep + /// Récuperer une liste de CollaborateurDTO contenant les collaborateurs et les référents. Retourne null s'il n'y a aucun engagement. /// - /// + /// /// - private EpInformationDTO GetEpInformationDTO(Ep ep) + private async Task> GetCollaborateurDTOs(IEnumerable engagements) { - EpInformationDTO epInformationDTO = new EpInformationDTO() - { - Id = ep.IdEP, - Type = ep.TypeEP, - Statut = ep.Statut, - DatePrevisionnelle = ep.DatePrevisionnelle, - Obligatoire = ep.Obligatoire, - //Collaborateur = collaborateurService.GetCollaborateurById(ep.IdCollaborateur), - //Referent = referentService.GetReferentById(ep.IdReferent) - //Ajouter la date de disponibilité - }; + if (!engagements.Any()) + return null; - return epInformationDTO; + List guids = engagements.SelectMany(engagement => new[] { (Guid?)engagement.Ep.IdCollaborateur, engagement.Ep.IdReferent }).ToList(); + + return await collaborateurService.GetCollaborateurDTOsAsync(guids); } /// - /// Récupère un objet EpInformationDTO en fonction d'un objet Ep + /// Récupère un objet EpInformationDTO en fonction d'un objet Ep et d'une liste de CollaborateurDTO /// /// /// - private async Task GetEpInformationDTOAsync(Ep ep) + private EpInformationDTO GetEpInformationDTO(Ep ep, IEnumerable collaborateurDTOs) { + CollaborateurDTO collaborateur; + CollaborateurDTO referent; + + collaborateur = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdCollaborateur); + referent = collaborateurDTOs.FirstOrDefault(collaborateurDTO => collaborateurDTO.Id == ep.IdReferent); + EpInformationDTO epInformationDTO = new EpInformationDTO() { Id = ep.IdEP, Type = ep.TypeEP, Statut = ep.Statut, + DateDisponibilite = ep.DateDisponibilite, DatePrevisionnelle = ep.DatePrevisionnelle, - Obligatoire = ep.Obligatoire - //Ajouter la date de disponibilité + Obligatoire = ep.Obligatoire, + Collaborateur = collaborateur, + Referent = referent, }; - var collaborateur = collaborateurService.GetCollaborateurByIdAsync(ep.IdCollaborateur); - var referent = collaborateurService.GetCollaborateurByIdAsync(ep.IdReferent); - - await Task.WhenAll(collaborateur, referent); - - epInformationDTO.Collaborateur = collaborateur.Result; - epInformationDTO.Referent = referent.Result; - return epInformationDTO; } @@ -378,51 +404,31 @@ namespace EPAServeur.Services #region DTO to Object /// - /// Modifie un objet Engagement en fonction d'un objet FormationDTO + /// Modifie la réponse d'un objet Engagement en fonction d'un objet EngagementDTO /// /// /// /// - private Engagement SetEngagement(Engagement engagement, EngagementDTO engagementDTO) + private Engagement SetReponseEngagement(Engagement engagement, EngagementDTO engagementDTO) { - engagement.Action = engagementDTO.Action; - engagement.DateLimite = engagementDTO.DateLimite.Value; - engagement.Dispositif = engagementDTO.Dispositif; - engagement.Modalite = engagementDTO.Modalite; - engagement.RaisonNonRealisable = engagementDTO.RaisonNonRealisable; engagement.EtatEngagement = engagementDTO.EtatEngagement; - engagement.Ep = GetEp(engagementDTO.Ep); - - return engagement; - } - - /// - /// Récupère un objet Ep en fonction d'un objet EpDTO - /// - /// - /// - private Ep GetEp(EpInformationDTO epInformationDTO) - { - if (epInformationDTO == null) - return null; - - Ep ep = new Ep() + switch (engagement.EtatEngagement) { - IdEP = epInformationDTO.Id.Value, - TypeEP = epInformationDTO.Type, - Statut = epInformationDTO.Statut, - DatePrevisionnelle = epInformationDTO.DatePrevisionnelle.Value, - Obligatoire = epInformationDTO.Obligatoire.Value, - IdReferent = epInformationDTO.Referent.Id.Value, - IdCollaborateur = epInformationDTO.Collaborateur.Id.Value, - // Ajouter la date de disponibilité - }; - - return ep; + case EtatEngagement.NonRealisable: + engagement.RaisonNonRealisable = engagementDTO.RaisonNonRealisable; + break; + case EtatEngagement.DateLimitePassee: + engagement.RaisonNonRealisable = "La date limite pour respecter l'engagement est passée."; + break; + default: + engagement.RaisonNonRealisable = null; + break; + } + + return engagement; } - #endregion #endregion