public static void SendReturnedMessage(List <Person> peopleToCc, ProjectUpdateBatch projectUpdateBatch) { Check.Require(projectUpdateBatch.ProjectUpdateState == ProjectUpdateState.Returned, "Need to be in Returned state to send the Returned email!"); var latestProjectUpdateHistorySubmitted = projectUpdateBatch.GetLatestProjectUpdateHistorySubmitted(); var submitterPerson = latestProjectUpdateHistorySubmitted.UpdatePerson; var emailsToSendTo = new List <string> { submitterPerson.Email }; var personNames = submitterPerson.GetFullNameFirstLast(); var primaryContactPerson = projectUpdateBatch.Project.GetPrimaryContact(); if (primaryContactPerson != null && !String.Equals(primaryContactPerson.Email, submitterPerson.Email, StringComparison.InvariantCultureIgnoreCase)) { emailsToSendTo.Add(primaryContactPerson.Email); personNames += $" and {primaryContactPerson.GetFullNameFirstLast()}"; } var contactsWhoCanManageProject = projectUpdateBatch.Project.GetContactsWhoCanManageProject(); foreach (var contact in contactsWhoCanManageProject) { if (!string.Equals(contact.Email, submitterPerson.Email, StringComparison.InvariantCultureIgnoreCase) && (primaryContactPerson == null || !string.Equals(contact.Email, primaryContactPerson.Email, StringComparison.InvariantCultureIgnoreCase))) { emailsToSendTo.Add(contact.Email); personNames += $" and {contact.GetFullNameFirstLast()}"; } } var returnerPerson = projectUpdateBatch.GetLatestProjectUpdateHistoryReturned().UpdatePerson; var instructionsUrl = SitkaRoute <ProjectUpdateController> .BuildAbsoluteUrlHttpsFromExpression(x => x.Instructions(projectUpdateBatch.Project)); var message = $@" Dear {personNames}, <p> The update submitted for {FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabel()} { projectUpdateBatch.Project.GetDisplayName() } on {latestProjectUpdateHistorySubmitted.TransitionDate.ToStringDate()} has been returned by { returnerPerson.GetFullNameFirstLastAndOrg() }. </p> <p> <a href=""{instructionsUrl}"">View this {FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabel()} update</a> </p> <p> Please review this update and address the comments that { returnerPerson.FirstName } left for you. If you have questions, please email: {returnerPerson.Email} </p> Thank you,<br /> {$"- {MultiTenantHelpers.GetToolDisplayName()} team"} "; var subject = $"The update for {FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabel()} {projectUpdateBatch.Project.GetDisplayName()} has been returned - please review and re-submit"; var mailMessage = new MailMessage { Subject = subject, Body = message, IsBodyHtml = true }; SendMessageAndLogNotificationForProjectUpdateTransition(projectUpdateBatch, mailMessage, emailsToSendTo, new List <string> { returnerPerson.Email }, peopleToCc.Select(x => x.Email).ToList(), NotificationType.ProjectUpdateReturned); }