public async Task <ActionResult> Confirm(Guid id, SharedUserListConfirmViewModel model) { model.SharedUsers = (List <NotificationSharedUser>)TempData["SharedUsers"]; TempData["SharedUsers"] = null; List <string> userIds = model.SharedUsers.Select(p => p.UserId).ToList(); await mediator.SendAsync(new AddSharedUser(id, userIds)); return(RedirectToAction("Success", "ShareNotification", new { id = id })); }
public async Task <ActionResult> Confirm(Guid id) { List <NotificationSharedUser> sharedUsers = (List <NotificationSharedUser>)TempData["SharedUsers"]; TempData["SharedUsers"] = sharedUsers; SharedUserListConfirmViewModel model = new SharedUserListConfirmViewModel(id, sharedUsers); var notification = await mediator.SendAsync(new GetNotificationBasicInfo(model.NotificationId)); model.ConfirmTitle = model.ConfirmTitle.Replace("{notification}", notification.NotificationNumber); return(View(model)); }
public async Task <ActionResult> ShareNotification(Guid id, ShareNotificationViewModel model, string command, string removeId) { // User is removing a user from the list if (removeId != null) { model.SelectedSharedUsers.RemoveAll(c => c.UserId.ToString() == removeId); } // Use is finished adding emails and proceeding to next page if (command == "continue") { SharedUserListConfirmViewModel confirmViewModel = new SharedUserListConfirmViewModel(id, model.SelectedSharedUsers); if (confirmViewModel.SharedUsers.Count == 0) { ModelState.Clear(); ModelState.AddModelError("Continue", "Please enter at least 1 email address to continue"); return(View(model)); } TempData["SharedUsers"] = confirmViewModel.SharedUsers; return(RedirectToAction("Confirm", "ShareNotification", new { id = id })); } // User has tried to add an email address if (command == "addshareduser") { // Check validation of model for correct number of email addresses and email address in correct format if (!ModelState.IsValid) { model.SetSharedUsers(model.SelectedSharedUsers); return(View(model)); } // Check that the owner of notification isn't trying to share it with themselves if (User.GetEmailAddress() == model.EmailAddress) { model = this.PrepareModelWithErrors("Email Address", "Cannot share notification with your email address", model); return(View(model)); } Guid userId; // This method doesn't handle nicely so if a user doesn't exist, it throws an exception. try { userId = await mediator.SendAsync(new GetUserId(model.EmailAddress)); } catch (Exception) { model = this.PrepareModelWithErrors("Email Address", "Enter a valid email address", model); return(View(model)); } var isInternalUser = await mediator.SendAsync(new ExternalUserExists(model.EmailAddress)); if (!isInternalUser) { model = this.PrepareModelWithErrors("Email Address", "You cannot share this notification with a competent authority user", model); return(View(model)); } var existingSharedUsers = await mediator.SendAsync(new GetSharedUsersByNotificationId(id)); if (existingSharedUsers.Count(p => p.UserId == userId.ToString()) > 0) { model = this.PrepareModelWithErrors("Email Address", "This email address has already been added as a shared user", model); return(View(model)); } // If user id is not already in list then add it to the list if (userId != null && model.SelectedSharedUsers.Count(p => p.UserId == userId.ToString()) == 0) { model.SelectedSharedUsers.Add(new NotificationSharedUser { Email = model.EmailAddress, UserId = userId.ToString(), NotificationId = model.NotificationId }); } } this.PrepareReturnModel(model); return(View(model)); }