public override IEnumerable <LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext) { var records = this.GetData().ToList(); TicketPart ticketPart = workflowContext.Content.As <TicketPart>(); CRMCommentPart commentPart = workflowContext.Content.As <CRMCommentPart>(); if (ticketPart == null) { if (commentPart == null) { this.Logger.Debug("ContentItem mismatch: Expexting TicketPart"); return(new[] { T("Failed") }); } else { var contentPart = this.contentManager.Get(commentPart.Record.CRMCommentsPartRecord.ContentItemRecord.Id); ticketPart = contentPart.As <TicketPart>(); } } var record = this.GetFromTicket(ticketPart); if (record == null) { this.Logger.Debug("TicketPart doesn't have any " + BasicDataRecordName); return(new[] { T(this.UnknownValue) }); } return(new[] { this.T(record.Name) }); }
private TicketPart GetTicketPart(EvaluateContext context) { ContentItem contentItem = (ContentItem)context.Data["Content"]; TicketPart ticketPart = contentItem.As <TicketPart>(); if (ticketPart == null) { CRMCommentPart crmComment = contentItem.As <CRMCommentPart>(); if (crmComment == null) { return(null); } else { return(this.contentManager.Get <TicketPart>(crmComment.Record.CRMCommentsPartRecord.ContentItemRecord.Id)); } } return(ticketPart); }
public override IEnumerable <LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext) { TicketPart ticketPart = workflowContext.Content.As <TicketPart>(); if (!workflowContext.Tokens.ContainsKey("Permission")) { this.Logger.Debug("There is no Permission among the tokens"); return(new[] { T("Failed") }); } ContentItemPermissionDetailRecord permission = (ContentItemPermissionDetailRecord)workflowContext.Tokens["Permission"]; if (permission == null) { this.Logger.Debug("There is no Permission among the tokens"); return(new[] { T("Failed") }); } if (ticketPart == null) { this.Logger.Debug("ContentItem mismatch: Expexting TicketPart"); return(new[] { T("Failed") }); } // setup tokenizer Dictionary <string, object> temp = new Dictionary <string, object>(); temp.Add(ActivityTokenProvider.PermissionDetailKey, permission); var titlePart = ticketPart.As <TitlePart>(); if (titlePart != null) { temp.Add(ActivityTokenProvider.TitkeKey, titlePart); } CRMCommentPart commentPart = workflowContext.Content.As <CRMCommentPart>(); if (commentPart != null) { temp.Add(ActivityTokenProvider.CRMCommentKey, commentPart); } string emailTemplateIdString = activityContext.GetState <string>(EmailTemplateActivityForm.EmailTemplateIdFieldName); int emailTemplateId; if (!int.TryParse(emailTemplateIdString, out emailTemplateId)) { this.Logger.Debug("There is no email Template for new Tickets"); return(new[] { T("Failed") }); } var ticketEmailTemplate = this.emailTemplateRepository.Table.First(c => c.Id == emailTemplateId); if (ticketEmailTemplate == null) { this.Logger.Debug("There is no email Template for new Tickets"); return(new[] { T("Failed") }); } var queued = activityContext.GetState <bool>("Queued"); var priority = activityContext.GetState <int>("Priority"); var recipients = this.GetRecipients(permission); foreach (var recipient in recipients.Where(c => !string.IsNullOrEmpty(c.Email))) { temp.Add(ActivityTokenProvider.UserKey, recipient); string body = this.tokenizer.Replace(ticketEmailTemplate.Body, temp); string subject = this.tokenizer.Replace(ticketEmailTemplate.Subject, temp); this.SendEmail(subject, body, recipient.Email, queued, priority); } return(new[] { T("Done") }); }
public override IEnumerable <LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext) { FollowerPart followerPart = workflowContext.Content.As <FollowerPart>(); if (followerPart == null) { this.Logger.Debug("ContentItem has no FollowerPart"); return(new[] { T("Failed") }); } // setup tokenizer Dictionary <string, object> temp = new Dictionary <string, object>(); temp.Add("Content", workflowContext.Content); CRMCommentPart commentPart = workflowContext.Content.As <CRMCommentPart>(); if (commentPart != null) { temp.Add(ActivityTokenProvider.CRMCommentKey, commentPart); } string emailTemplateIdString = activityContext.GetState <string>(EmailTemplateActivityForm.EmailTemplateIdFieldName); int emailTemplateId; if (!int.TryParse(emailTemplateIdString, out emailTemplateId)) { this.Logger.Debug("There is no email Template"); return(new[] { T("Failed") }); } var ticketEmailTemplate = this.emailTemplateRepository.Table.First(c => c.Id == emailTemplateId); if (ticketEmailTemplate == null) { this.Logger.Debug("There is no email Template"); return(new[] { T("Failed") }); } var queued = activityContext.GetState <bool>("Queued"); var priority = activityContext.GetState <int>("Priority"); List <int> userIds = string.IsNullOrEmpty(followerPart.Followers) ? null : followerPart.Followers.Split(',').Select(c => int.Parse(c)).ToList(); if (userIds == null) { return(new[] { T("Done") }); } // Add activity stream record int?activityStreamRecordId = workflowContext.GetState <int?>("ActivityStreamId"); ActivityStreamRecord activityStreamRecord = null; if (activityStreamRecordId != null) { activityStreamRecord = this.activityStreamRepository.Table.First(c => c.Id == activityStreamRecordId.Value); temp.Add(ActivityStreamTokenProvider.ActivityStreamRecordKey, activityStreamRecord); // do not send notification to himself/herself if (activityStreamRecord.User != null) { userIds.Remove(activityStreamRecord.User.Id); } } else { return(new[] { T("Failed") }); } var recipients = this.services.ContentManager.GetMany <IUser>(userIds, VersionOptions.Published, QueryHints.Empty); foreach (var recipient in recipients.Where(c => !string.IsNullOrEmpty(c.Email))) { var userPart = recipient.As <UserPart>(); if (userPart != null) { temp.Add(ActivityTokenProvider.UserKey, userPart.Record); } string body = this.tokenizer.Replace(ticketEmailTemplate.Body, temp); string subject = this.tokenizer.Replace(ticketEmailTemplate.Subject, temp); this.SendEmail(subject, body, recipient.Email, queued, priority); } return(new[] { T("Done") }); }
public override IEnumerable <LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext) { TicketPart ticketPart = workflowContext.Content.As <TicketPart>(); CRMCommentPart commentPart = workflowContext.Content.As <CRMCommentPart>(); ContentItemPermissionPart permissionsPart = workflowContext.Content.As <ContentItemPermissionPart>(); if (ticketPart == null) { if (commentPart == null) { this.Logger.Debug("ContentItem mismatch: Expexting TicketPart"); return(new[] { T("Failed") }); } else { var contentPart = this.contentManager.Get(commentPart.Record.CRMCommentsPartRecord.ContentItemRecord.Id); ticketPart = contentPart.As <TicketPart>(); permissionsPart = contentPart.As <ContentItemPermissionPart>(); } } if (permissionsPart == null) { this.Logger.Debug("ContentItem mismatch: Expexting ContentItemPermissionPart "); return(new[] { T("Failed") }); } // setup tokenizer Dictionary <string, object> temp = new Dictionary <string, object>(); temp.Add("Content", workflowContext.Content); var titlePart = ticketPart.As <TitlePart>(); // read email template Id string emailTemplateIdString = activityContext.GetState <string>(EmailTemplateActivityForm.EmailTemplateIdFieldName); int emailTemplateId; if (!int.TryParse(emailTemplateIdString, out emailTemplateId)) { this.Logger.Debug("There is no email Template for new Tickets"); return(new[] { T("Failed") }); } bool sendToRequestingUser = this.GetBooleanValue(activityContext, EmailTemplateActivityForm.SentToRequestingUserFieldName); bool sendToOwner = this.GetBooleanValue(activityContext, EmailTemplateActivityForm.SentToOwnerFieldName); bool sendToSharedWithUsers = this.GetBooleanValue(activityContext, EmailTemplateActivityForm.SentToSharedUsersFieldName); var ticketEmailTemplate = this.emailTemplateRepository.Table.First(c => c.Id == emailTemplateId); if (ticketEmailTemplate == null) { this.Logger.Debug("There is no email Template for new Tickets"); return(new[] { T("Failed") }); } var queued = activityContext.GetState <bool>("Queued"); var priority = activityContext.GetState <int>("Priority"); List <UserPartRecord> recipients = new List <UserPartRecord>(); if (permissionsPart.Record.Items != null) { foreach (var permission in permissionsPart.Record.Items) { if (permission.AccessType == ContentItemPermissionAccessTypes.Assignee && sendToOwner) { recipients.AddRange(this.GetRecipients(permission)); } else if (sendToSharedWithUsers) { recipients.AddRange(this.GetRecipients(permission)); } } } if (sendToRequestingUser) { var record = ticketPart.Record; if (record.RequestingUser != null) { recipients.Add(record.RequestingUser); } else if (record.SourceId == TicketSourceTypes.Email && !string.IsNullOrEmpty(record.SourceData)) { dynamic sender = JObject.Parse(record.SourceData); string email = sender.Email; string name = sender.Name; recipients.Add(new UserPartRecord { Email = email, UserName = name }); } } // filter the redundent items recipients = recipients.GroupBy(c => c.Id).Select(c => c.First()).ToList(); foreach (var recipient in recipients.Where(c => !string.IsNullOrEmpty(c.Email))) { temp[ActivityTokenProvider.UserKey] = recipient; string body = this.tokenizer.Replace(ticketEmailTemplate.Body, temp); string subject = this.tokenizer.Replace(ticketEmailTemplate.Subject, temp); this.SendEmail(subject, body, recipient.Email, queued, priority); } return(new[] { T("Done") }); }