public static async Task <ResultViewModel> SaveAndSendNewMessage(SendMessageViewModel model, ServiceGateWayClient gatewayITask, TaskUser user, EnvironmentViewModel environment, List <JoinFileViewModel> newFiles) { var newFilesTojoin = MapClJoinFileToJoinFileViewModel.Map(newFiles); var existingFilesToAdd = await Task.Run(() => gatewayITask.GetJoinFilesByPermId(model.ExistingFilesToJoin.ToArray())); var files = newFilesTojoin.ToList(); foreach (var existing in existingFilesToAdd) { var f = existing; f.PermIdFileAlreadyArchived = f.PermId; files.Add(f); } var cltaskdocument = new ClTaskDocument { Task = new ClTask { TechnicalId = model.TaskId, Description = model.TaskDescription, EmployerNumber = model.EmployerNumber, WorkerNumber = model.WorkerNumber } }; var result = new ResultViewModel { NoError = true }; //bool isOk = true; var task = await Task.Run(() => gatewayITask.SearchDocumentTask(model.TaskId, user.Language, true, MapClRessourcesToRessourcesViewModel.Map(user.RessourcesListWithAccess).ToArray(), long.Parse(user.Id))); task.CurrentStatus = model.Status; if (task.CurrentStatus != 4) { task.Task.EffectiveEndDate = DateTime.MinValue; } switch (model.TypeOfMessage) { case 1: //Mail provenant de l'extérieur --> on n'enverra pas de mail de ce type break; case 2: // commentaire Log.Write("SaveAndSendNewMessage", "Conversation", model.TaskId.ToString(), 3, "debut SaveComment"); result.NoError = await SaveComment(gatewayITask, user, cltaskdocument, files, model); Log.Write("SaveAndSendNewMessage", "Conversation", model.TaskId.ToString(), 3, "fin SaveComment"); if (result.NoError) { result.NoError = await Task.Run(() => gatewayITask.UpdateTaskDocument(task, user.Id, user.CurrentEntityNumber, MapClRessourcesToRessourcesViewModel.Map(user.RessourcesListWithAccess).ToArray(), long.Parse(user.Id))); } break; case 3: //Mail interne result.NoError = await SaveInternMessage(gatewayITask, user, cltaskdocument, files, model); if (model.AssignToUser) { task.Context = int.Parse(model.InternRecipientId); } if (result.NoError) { result.NoError = await Task.Run(() => gatewayITask.UpdateTaskDocument(task, user.Id, user.CurrentEntityNumber, MapClRessourcesToRessourcesViewModel.Map(user.RessourcesListWithAccess).ToArray(), long.Parse(user.Id))); } break; case 8: case 10: //Mail destiné à l'extérieur var filesForEmail = GetFilesForEmail(existingFilesToAdd, newFilesTojoin); result = await SaveExternMessage(gatewayITask, user, cltaskdocument, files, filesForEmail, model); if (result.NoError && !model.IsDirectEmail) { result.NoError = await Task.Run(() => gatewayITask.UpdateTaskDocument(task, user.Id, user.CurrentEntityNumber, MapClRessourcesToRessourcesViewModel.Map(user.RessourcesListWithAccess).ToArray(), long.Parse(user.Id))); } break; } return(result); }