/// <summary> /// Add email addresses to an application /// </summary> /// <param name="id">application id</param> public ActionResult Share(int id) { var applicant = GetCurrentApplicant(); var application = _context.Applications.Find(id); if (application == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } ShareApplicationViewModel vm = new ShareApplicationViewModel(application, applicant); // If applicant is not registered with application if (application.Applicants.All(x => x.Id != applicant.Id)) { // If on share request list if (application.SharedRequests.Any(x => x.EmailAddress == applicant.User.Email)) { return(View("AcceptShare", vm)); } } else { return(View(vm)); } throw new HttpResponseException(HttpStatusCode.Forbidden); }
public async Task <ActionResult> UpdateApplicationInvites( [ModelBinder(typeof(ApplicationInvitesModelBinder))] List <EmailInfo> emailList, int applicationId) { var applicant = GetCurrentApplicant(); var application = (applicant.Applications.FirstOrDefault(x => x.Id == applicationId)); if (application == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (!ModelState.IsValid) { ShareApplicationViewModel vm = new ShareApplicationViewModel(application, applicant); vm.ShareRequests.Clear(); vm.ShareRequests.AddRange(emailList); return(View("Share", vm)); } List <MailMessage> messages = new List <MailMessage>(); List <EmailInfo> newShares = new List <EmailInfo>(); foreach (var toshare in emailList) { if (!application.SharedRequests.Contains(toshare)) { MailMessage message = new MailMessage("*****@*****.**", toshare.EmailAddress) { Subject = $"[Application ID #{applicationId}] {applicant.User.Name} invites you to work on a {application.DisplayName} Project" }; EmailInviteViewModel invite = new EmailInviteViewModel() { Address = application.ProjectInfo.ToString(), ToName = toshare.EmailAddress, ApplicationDisplayName = application.DisplayName, }; if (Request.Url != null) { invite.RegisterUrl = this.Url.Action("Register", "Account", new object(), Request.Url.Scheme); invite.ApplicationUrl = Url.Action("Share", "Applications", new { id = application.Id }, Request.Url.Scheme); } message.Body = RenderRazorViewToString("InviteEmail", invite); message.IsBodyHtml = true; // Send invite via email messages.Add(message); newShares.Add(toshare); } } await Contact(messages); application.SharedRequests.AddRange(newShares); foreach (var newShare in newShares) { var foundApplicant = _context.Users.Include(x => x.Data).FirstOrDefault(x => x.Email == newShare.EmailAddress); // Only Add notification if the applicant already exists. foundApplicant?.Data.Notifications.Add(new ShareApplicationNotification() { Applicant = foundApplicant.Data, ApplicantId = foundApplicant.DataId, ApplicationId = application.Id }); } _context.SaveChanges(); return(RedirectToAction("Share", "Applications", new { id = applicationId })); }