public EmailNotification GetEmailNotificationObject(IssueModifications issueModifications) { return mIssueEmailer.GetEmailNotificationObject(issueModifications); }
public EmailNotificationRule CalculateTriggeredIssueNotificationRule(IssueModifications issueModifications) { //InitialCreation IEnumerable<EmailNotificationRule> activeRules = GetIssueEmailNotificationRules(); IList<EmailNotificationRule> triggeredRules = new List<EmailNotificationRule>(); if (issueModifications.OriginalIssue == null) { string code = IssueEmailNotificationCode.InitialCreation.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { return rule; } } //StatusChange if (issueModifications.OriginalIssue.IssueStatusId != issueModifications.Issue.IssueStatusId) { string code = IssueEmailNotificationCode.StatusChanged.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //APPROVED if (issueModifications.CategoryApprovedNames != null && issueModifications.CategoryApprovedNames.Any()) { string code = IssueEmailNotificationCode.Approved.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //UNAPPROVED if (issueModifications.CategoryUnApprovedNames != null && issueModifications.CategoryUnApprovedNames.Any()) { string code = IssueEmailNotificationCode.Unapproved.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //PriorityChange if (issueModifications.OriginalIssue.IssuePriorityId != issueModifications.Issue.IssuePriorityId) { string code = IssueEmailNotificationCode.PriorityChanged.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //ClassificationChanged if (issueModifications.OriginalIssue.IssueClassificationId != issueModifications.Issue.IssueClassificationId) { string code = IssueEmailNotificationCode.ClassificationChanged.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //IssueTypeChange if (issueModifications.OriginalIssue.IssueTypeId != issueModifications.Issue.IssueTypeId) { string code = IssueEmailNotificationCode.IssueTypeChanged.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //AssignedCategories using (CmsEntities cee = new CmsEntities()) { var originalCategories = (from x in issueModifications.OriginalIssue.IssueAssignedCategories orderby x.IssueCategoryId select x.IssueCategoryId).ToArray(); var newCategories = (from x in issueModifications.Issue.IssueAssignedCategories orderby x.IssueCategoryId select x.IssueCategoryId).ToArray(); bool areEqual = originalCategories.SequenceEqual(newCategories); if (!areEqual) { string code = IssueEmailNotificationCode.AssignedCategoriesChanged.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } } //Reassigned if (issueModifications.OriginalIssue.CurrentlyAssignedToId != issueModifications.Issue.CurrentlyAssignedToId) { string code = IssueEmailNotificationCode.Reassigned.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //ResponseAdded if (!String.IsNullOrEmpty(issueModifications.Issue.Response)) { string code = IssueEmailNotificationCode.ResponseAdded.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } //DEFAULT// Always add this...in case it's just a straight save. string updatedCode = IssueEmailNotificationCode.Updated.ToString(); var updateRule = (from x in activeRules where x.Code == updatedCode select x).FirstOrDefault(); if (updateRule != null) { triggeredRules.Add(updateRule); } //Added Distribution User //DISTRIBUTION LIST var removedUsers = new List<String>(); var addedUsers = new List<String>(); using (CmsEntities cee = new CmsEntities()) { foreach (var oldDistUser in issueModifications.OriginalIssue.IssueDistributionUsers) { var newDistUser = (from x in issueModifications.Issue.IssueDistributionUsers where x.IssueId == oldDistUser.IssueId && x.UserId == oldDistUser.UserId select x).FirstOrDefault(); if (newDistUser == null) { //User was removed removedUsers.Add(oldDistUser.User.FirstLastName); } } foreach (var newDistUser in issueModifications.Issue.IssueDistributionUsers) { var oldDistUser = (from x in issueModifications.OriginalIssue.IssueDistributionUsers where x.IssueId == newDistUser.IssueId && x.UserId == newDistUser.UserId select x).FirstOrDefault(); if (oldDistUser == null) { User match = (from x in cee.Users where x.Id == newDistUser.UserId && x.ActiveUser select x).FirstOrDefault(); if (match != null) { //New User was added addedUsers.Add(match.FirstLastName); } } } } if (addedUsers.Any()) { string code = IssueEmailNotificationCode.DistributionUserAdded.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } if (removedUsers.Any()) { string code = IssueEmailNotificationCode.DistributionUserRemoved.ToString(); var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault(); if (rule != null) { triggeredRules.Add(rule); } } return (from x in triggeredRules orderby x.Ordinal select x).FirstOrDefault(); }
private string BuildIssueSubjectText(IssueModifications issueModifications, string subjectText) { string result = subjectText; //{IssueTitle} string token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.IssueTitle.ToString()); result = result.Replace(token, issueModifications.Issue.Name); //{ModifiedBy} token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.ModifiedBy.ToString()); result = result.Replace(token, issueModifications.Issue.ModifiedByUser.FirstLastName); //{OldStatus} if (issueModifications.OriginalIssue != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldStatus.ToString()); result = result.Replace(token, issueModifications.OriginalIssue.IssueStatus.Name); } //{NewStatus} if (issueModifications.Issue.IssueStatus != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewStatus.ToString()); result = result.Replace(token, issueModifications.Issue.IssueStatus.Name); } //{Category} approved category if (issueModifications.CategoryApprovedNames != null && issueModifications.CategoryApprovedNames.Any()) { string catsApproved = string.Join(",", new List<string>(issueModifications.CategoryApprovedNames).ToArray()); token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.Category.ToString()); result = result.Replace(token, catsApproved); } //{Category} approved category if (issueModifications.CategoryUnApprovedNames != null && issueModifications.CategoryUnApprovedNames.Any()) { string catsApproved = string.Join(",", new List<string>(issueModifications.CategoryUnApprovedNames).ToArray()); token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.Category.ToString()); result = result.Replace(token, catsApproved); } //{OldPriority} if (issueModifications.OriginalIssue != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldPriority.ToString()); result = result.Replace(token, issueModifications.OriginalIssue.IssuePriority.Name); } //{NewPriority} if (issueModifications.Issue.IssuePriority != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewPriority.ToString()); result = result.Replace(token, issueModifications.Issue.IssuePriority.Name); } //{OldIssueType} if (issueModifications.OriginalIssue != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldIssueType.ToString()); result = result.Replace(token, issueModifications.OriginalIssue.IssueType.Name); } //{NewIssueType} if (issueModifications.Issue.IssueType != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewIssueType.ToString()); result = result.Replace(token, issueModifications.Issue.IssueType.Name); } //{OldClassification} if (issueModifications.OriginalIssue != null && issueModifications.OriginalIssue.IssueClassification != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldClassification.ToString()); result = result.Replace(token, issueModifications.OriginalIssue.IssueClassification.Name); } //{NewClassification} if (issueModifications.Issue.IssueClassification != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewClassification.ToString()); result = result.Replace(token, issueModifications.Issue.IssueClassification.Name); } //{OldUsername} if (issueModifications.OriginalIssue != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldAssignedToUserName.ToString()); result = result.Replace(token, issueModifications.OriginalIssue.CurrentlyAssignedToUser.FirstLastName); } //{NewUserName} if (issueModifications.Issue.CurrentlyAssignedToUser != null) { token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewAssignedToUserName.ToString()); result = result.Replace(token, issueModifications.Issue.CurrentlyAssignedToUser.FirstLastName); } return result.Replace(Environment.NewLine, " ").Replace("\r", "<br/>").Replace("\n", " "); }
public EmailNotification GetEmailNotificationObject(IssueModifications issueModifications) { EmailNotification emailNotification = new EmailNotification(); emailNotification.IssueId = issueModifications.Issue.Id; emailNotification.EmailNotificationRule = CalculateTriggeredIssueNotificationRule(issueModifications); if (emailNotification.EmailNotificationRule == null) { log.Warning("", "Could not sent Issue email notification. Updated Email notification rule needs to be configured and set to Active. Please update under Issue->Config->Email Notifications->Updated."); } else { //TEMPLATE emailNotification.Replacements = BuildIssueEmailReplacements(issueModifications.Issue); string[] sentToTokens = emailNotification.EmailNotificationRule.SendTo.Split(new[] { ',', ';' }); string[] ccToTokens = emailNotification.EmailNotificationRule.CcTo.Split(new[] { ',', ';' }); emailNotification.SentTo = BuildIssueEmailRecepientsList(issueModifications, emailNotification.EmailNotificationRule, sentToTokens); emailNotification.Subject = BuildIssueSubjectText(issueModifications, emailNotification.EmailNotificationRule.SubjectText); emailNotification.CCList = BuildIssueEmailRecepientsList(issueModifications, emailNotification.EmailNotificationRule, ccToTokens); } return emailNotification; }
private IEnumerable<string> BuildIssueEmailRecepientsList(IssueModifications issueModifications, EmailNotificationRule triggeredRule, string[] tokens) { IList<string> emailRecepientsList = new List<string>(); Hashtable ht = new Hashtable(); foreach (string splitToken in tokens) { foreach (IssueEmailRecipientTextTokens token in Enum.GetValues(typeof(IssueEmailRecipientTextTokens))) { string clearedBrackets = splitToken.Replace("{", ""); clearedBrackets = clearedBrackets.Replace("}", ""); if (string.Compare(token.ToString(), clearedBrackets, true, CultureInfo.CurrentCulture) == 0) { if (token == IssueEmailRecipientTextTokens.AssignedTo) { //{AssignedTo} if (EmailCommon.IsValidEmailaddress(issueModifications.Issue.CurrentlyAssignedToUser.EmailAddress)) { emailRecepientsList.Add(issueModifications.Issue.CurrentlyAssignedToUser.EmailAddress); } else { log.Error("", "{0} user '{1}' does not have valid email address '{2}'", token.ToString(), issueModifications.Issue.CurrentlyAssignedToUser.FirstLastName, issueModifications.Issue.CurrentlyAssignedToUser.EmailAddress); } } else if (token == IssueEmailRecipientTextTokens.DistributionUsers && issueModifications.Issue.IssueDistributionUsers != null && issueModifications.Issue.IssueDistributionUsers.Any()) { //{DistributionUsers} using (CmsEntities cee = new CmsEntities()) { foreach (IssueDistributionUser user in issueModifications.Issue.IssueDistributionUsers) { User distUser = (from x in cee.Users where x.Id == user.UserId && x.ActiveUser select x).FirstOrDefault(); if (distUser != null) { if (EmailCommon.IsValidEmailaddress(distUser.EmailAddress)) { if (!ht.ContainsKey(distUser.Id)) { if (triggeredRule.AllowCCIgnore) { var preference = (from x in cee.UserPreferences where x.Id == distUser.UserPreferenceId select x).FirstOrDefault(); if (preference == null || !preference.IgnoreCCEmail) { ht.Add(distUser.Id, distUser.EmailAddress); emailRecepientsList.Add(distUser.EmailAddress); } } else { ht.Add(distUser.Id, distUser.EmailAddress); emailRecepientsList.Add(distUser.EmailAddress); } } } else { log.Error("", "{0} user '{1}' does not have valid email address '{2}'", token.ToString(), distUser.FirstLastName, distUser.EmailAddress); } } } } } else if (token == IssueEmailRecipientTextTokens.InitiatedBy) { //{InitiatedBy} using (CmsEntities cee = new CmsEntities()) { User initiatedBy = (from x in cee.Users where x.Id == issueModifications.Issue.InitiatedById && x.ActiveUser select x).FirstOrDefault(); if (initiatedBy != null) { if (EmailCommon.IsValidEmailaddress(initiatedBy.EmailAddress)) { if (!ht.ContainsKey(initiatedBy.Id)) { ht.Add(initiatedBy.Id, initiatedBy.EmailAddress); emailRecepientsList.Add(initiatedBy.EmailAddress); } } else { log.Error("", "{0} user '{1}' does not have valid email address '{2}'", token.ToString(), initiatedBy.FirstLastName, initiatedBy.EmailAddress); } } } } else if (token == IssueEmailRecipientTextTokens.ModifiedBy) { //{ModifiedBy} using (CmsEntities cee = new CmsEntities()) { User modifiedBy = (from x in cee.Users where x.Id == issueModifications.Issue.ModifiedById && x.ActiveUser select x).FirstOrDefault(); if (modifiedBy != null) { if (EmailCommon.IsValidEmailaddress(modifiedBy.EmailAddress)) { if (!ht.ContainsKey(modifiedBy.Id)) { ht.Add(modifiedBy.Id, modifiedBy.EmailAddress); emailRecepientsList.Add(modifiedBy.EmailAddress); } } else { log.Error("", "{0} user '{1}' does not have valid email address '{2}'", token.ToString(), modifiedBy.FirstLastName, modifiedBy.EmailAddress); } } } } else if (token == IssueEmailRecipientTextTokens.PreviouslyAssignedTo) { //{PreviouslyAssignedTo} using (CmsEntities cee = new CmsEntities()) { User previouslyAssignedTo = (from x in cee.Users where x.Id == issueModifications.OriginalIssue.CurrentlyAssignedToId && x.ActiveUser select x).FirstOrDefault(); if (previouslyAssignedTo != null) { if (EmailCommon.IsValidEmailaddress(previouslyAssignedTo.EmailAddress)) { if (!ht.ContainsKey(previouslyAssignedTo.Id)) { ht.Add(previouslyAssignedTo.Id, previouslyAssignedTo.EmailAddress); emailRecepientsList.Add(previouslyAssignedTo.EmailAddress); } } else { log.Error("", "{0} user '{1}' does not have valid email address '{2}'", token.ToString(), previouslyAssignedTo.FirstLastName, previouslyAssignedTo.EmailAddress); } } } } else if (token == IssueEmailRecipientTextTokens.AddedDistributionUsers) { //Added Distribution User var addedUsers = new List<User>(); using (CmsEntities cee = new CmsEntities()) { foreach (var newDistUser in issueModifications.Issue.IssueDistributionUsers) { var oldDistUser = (from x in issueModifications.OriginalIssue.IssueDistributionUsers where x.IssueId == newDistUser.IssueId && x.UserId == newDistUser.UserId select x).FirstOrDefault(); if (oldDistUser == null) { var user = (from x in cee.Users where x.Id == newDistUser.UserId && x.ActiveUser select x).FirstOrDefault(); if (user != null) { //New User was added addedUsers.Add(user); } } } foreach (User user in addedUsers) { if (EmailCommon.IsValidEmailaddress(user.EmailAddress)) { if (!ht.ContainsKey(user.Id)) { if (triggeredRule.AllowCCIgnore) { var preference = (from x in cee.UserPreferences where x.Id == user.UserPreferenceId select x).FirstOrDefault(); if (preference == null || !preference.IgnoreCCEmail) { ht.Add(user.Id, user.EmailAddress); emailRecepientsList.Add(user.EmailAddress); } } else { ht.Add(user.Id, user.EmailAddress); emailRecepientsList.Add(user.EmailAddress); } } else { log.Error("", "{0} user '{1}' does not have valid email address '{2}'", token.ToString(), user.FirstLastName, user.EmailAddress); } } } } } else if (token == IssueEmailRecipientTextTokens.RemovedDistributionUsers) { //Removed Distribution User var removedUsers = new List<User>(); using (CmsEntities cee = new CmsEntities()) { foreach (var oldDistUser in issueModifications.OriginalIssue.IssueDistributionUsers) { var newDistUser = (from x in issueModifications.Issue.IssueDistributionUsers where x.IssueId == oldDistUser.IssueId && x.UserId == oldDistUser.UserId select x).FirstOrDefault(); if (newDistUser == null) { var user = (from x in cee.Users where x.Id == oldDistUser.UserId && x.ActiveUser select x).FirstOrDefault(); if (user != null) { //User was removed removedUsers.Add(user); } } } foreach (User user in removedUsers) { if (EmailCommon.IsValidEmailaddress(user.EmailAddress)) { if (!ht.ContainsKey(user.Id)) { if (triggeredRule.AllowCCIgnore) { var preference = (from x in cee.UserPreferences where x.Id == user.UserPreferenceId select x).FirstOrDefault(); if (preference == null || !preference.IgnoreCCEmail) { ht.Add(user.Id, user.EmailAddress); emailRecepientsList.Add(user.EmailAddress); } } else { ht.Add(user.Id, user.EmailAddress); emailRecepientsList.Add(user.EmailAddress); } } } else { log.Error("", "{0} user '{1}' does not have valid email address '{2}'", token.ToString(), user.FirstLastName, user.EmailAddress); } } } } } } } return emailRecepientsList; }