public void OrderReceived(Order order, LineItem lineItem, User actor, decimal quantity, string overrideDescription = null) { var queues = new List <EmailQueueV2>(); var description = overrideDescription; if (string.IsNullOrWhiteSpace(description)) { description = string.Format("{0} item(s) by {1}.", quantity, actor.FullName); } // get the order's purchaser // var purchasers = order.OrderTrackings.Where(a => a.StatusCode.Id == OrderStatusCode.Codes.Complete).ToList(); if (!string.IsNullOrEmpty(order.Workgroup.NotificationEmailList)) { //var emailQueue = new EmailQueue(order, EmailPreferences.NotificationTypes.PerEvent, string.Format(ReceiveMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, quantity), actor, order.Workgroup.NotificationEmailList); var emailQueue2 = new EmailQueueV2(order, EmailPreferences.NotificationTypes.PerEvent, "Received", description, null, order.Workgroup.NotificationEmailList); AddToQueue(queues, emailQueue2); } foreach (var approval in order.OrderTrackings.Select(a => new { a.User, a.StatusCode }).Distinct()) { var preference = GetEmailPreferences(approval.User.Id); if (IsMailRequested(preference, approval.StatusCode, order.StatusCode, EventCode.Received, order.OrderType)) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ReceiveMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, quantity), approval.User); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Received", description, approval.User); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
public void OrderAddNote(Order order, User actor, string comment) { var users = order.OrderTrackings.Select(a => a.User).Distinct().ToList(); var shortComment = comment ?? string.Empty; if (comment != null && comment.Length > 100) { shortComment = comment.Substring(0, 100) + "..."; } foreach (var ot in users) { if (!ot.IsActive) //Not active, we don't want to email them { continue; } var preference = GetEmailPreferences(ot.Id); if (preference.AddNote) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(AddNoteMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, actor.FullName), ot); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Note Added", string.Format("By {0} with the note \"{1}\".", actor.FullName, shortComment), ot); order.AddEmailQueue(emailQueue2); } } }
public void OrderPaid(Order order, LineItem lineItem, User actor, decimal quantity, string overrideDescription = null) { var queues = new List <EmailQueueV2>(); var description = overrideDescription; if (string.IsNullOrWhiteSpace(description)) { description = string.Format("{0} item(s) by {1}.", quantity, actor.FullName); } if (!string.IsNullOrEmpty(order.Workgroup.NotificationEmailList)) { var emailQueue2 = new EmailQueueV2(order, EmailPreferences.NotificationTypes.PerEvent, "Paid", description, null, order.Workgroup.NotificationEmailList); AddToQueue(queues, emailQueue2); } foreach (var approval in order.OrderTrackings.Select(a => new { a.User, a.StatusCode }).Distinct()) { var preference = GetEmailPreferences(approval.User.Id); if (IsMailRequested(preference, approval.StatusCode, order.StatusCode, EventCode.Paid, order.OrderType)) { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Paid", description, approval.User); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
public void OrderApproved(Order order, Approval approval) { var queues = new List <EmailQueueV2>(); // go through all the tracking history foreach (var appr in order.OrderTrackings.Where(a => a.StatusCode.Level < approval.StatusCode.Level).Select(a => new { User = a.User, StatusCode = a.StatusCode }).Distinct()) { var user = appr.User; var preference = GetEmailPreferences(user.Id); if (IsMailRequested(preference, appr.StatusCode, approval.StatusCode, EventCode.Approval)) { var currentUser = _userRepository.GetNullableById(_userIdentity.Current); //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ApprovalMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, currentUser.FullName, approval.StatusCode.Name), user); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Approved", string.Format("By {0} at {1} review.", currentUser.FullName, approval.StatusCode.Name), user); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); // is the current level complete? if (!order.Approvals.Where(a => a.StatusCode.Level == order.StatusCode.Level && !a.Completed).Any()) { // look forward to the next level var level = order.StatusCode.Level + 1; ProcessArrival(order, approval, level); } }
public static EmailQueueV2 EmailQueueV2(int?counter) { var rtValue = new EmailQueueV2(); rtValue.Action = "Text" + counter.Extra(); rtValue.Order = new Order(); rtValue.NotificationType = Purchasing.Core.Domain.EmailPreferences.NotificationTypes.PerEvent; return(rtValue); }
public void ProcessArrival(Order order, Approval approval, int level, bool assigned = false) { // find all the approvals at the next level var future = order.Approvals.Where(a => a.StatusCode.Level == level); // check for any approvals not specifically assigned to anyone var wrkgrp = future.Any(a => a.User == null); // get the current user var currentUser = _userRepository.GetNullableById(_userIdentity.Current); var queues = new List <EmailQueueV2>(); // there is at least one that is workgroup permissions if (wrkgrp) { var peeps = order.Workgroup.Permissions.Where(a => a.Role.Level == level && (!a.IsAdmin || (a.IsAdmin && a.IsFullFeatured))).Select(a => a.User); var apf = future.First(a => a.User == null); foreach (var peep in peeps) { if (!peep.IsActive) //Not active, we don't want to email them { continue; } var preference = GetEmailPreferences(peep.Id); if (IsMailRequested(preference, apf.StatusCode, approval != null ? approval.StatusCode : null, EventCode.Arrival)) { var extraInfo = string.Empty; if (preference.ShowAccountInEmail && apf.StatusCode.Id == OrderStatusCode.Codes.AccountManager) { extraInfo = string.Format(" with accounts {0}", order.AccountNumbers); } //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ArrivalMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, apf.StatusCode.Name, currentUser.FullName, extraInfo), peep); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Arrived", string.Format("At your level ({0}) for review from {1}{2}.", apf.StatusCode.Name, currentUser.FullName, extraInfo), peep); AddToQueue(queues, emailQueue2); } } // find any that still need to be sent regardless (outside of workgroup) var aps = future.Where(a => a.User != null && !peeps.Contains(a.User)); ProcessApprovalsEmailQueue(order, approval, queues, currentUser, aps, assigned); } else { // check each of the approvals ProcessApprovalsEmailQueue(order, approval, queues, currentUser, future, assigned); } AddQueuesToOrder(order, queues); }
/// <summary> /// Add email queue to a list, but check to ensure no duplicates /// </summary> /// <param name="emailQueues"></param> /// <param name="emailQueue"></param> private void AddToQueue(List <EmailQueueV2> emailQueues, EmailQueueV2 emailQueue) { if (emailQueue.User != null && !emailQueue.User.IsActive) { return; } if (!emailQueues.Any(a => a.User == emailQueue.User)) { emailQueues.Add(emailQueue); } }
private void ProcessApprovalsEmailQueue(Order order, Approval approval, List <EmailQueueV2> queues, User currentUser, IEnumerable <Approval> aps, bool assigned = false) { foreach (var ap in aps) { // load the user and information var user = ap.User; var preference = GetEmailPreferences(user.Id); if (IsMailRequested(preference, ap.StatusCode, approval != null ? approval.StatusCode : null, EventCode.Arrival)) { var extraInfo = string.Empty; if (preference.ShowAccountInEmail && ap.StatusCode.Id == OrderStatusCode.Codes.AccountManager) { extraInfo = string.Format(" with accounts {0}", order.AccountNumbers); } //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(!assigned ? ArrivalMessage : RerouteMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.User); if (!assigned) { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Arrived", string.Format("At your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.User); AddToQueue(queues, emailQueue2); } else { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Rerouted", string.Format("To you at your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.User); AddToQueue(queues, emailQueue2); } } if (ap.SecondaryUser != null) { if (IsMailRequested(preference, ap.StatusCode, approval != null ? approval.StatusCode : null, EventCode.Arrival)) { var extraInfo = string.Empty; if (preference.ShowAccountInEmail && ap.StatusCode.Id == OrderStatusCode.Codes.AccountManager) { extraInfo = string.Format(" with accounts {0}", order.AccountNumbers); } //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(!assigned ? ArrivalMessage : RerouteMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.SecondaryUser); if (!assigned) { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Arrived", string.Format("At your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.SecondaryUser); AddToQueue(queues, emailQueue2); } else { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Rerouted", string.Format("To you at your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.SecondaryUser); AddToQueue(queues, emailQueue2); } } } } }
public void OrderCancelled(Order order, User actor, string cancelReason, OrderStatusCode previousStatus) { var user = order.CreatedBy; var preference = _emailPreferenceRepository.GetNullableById(user.Id); var notificationType = EmailPreferences.NotificationTypes.PerEvent; if (preference != null) { notificationType = preference.NotificationType; } //var emailQueue = new EmailQueue(order, notificationType, string.Format(CancellationMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, actor.FullName, order.StatusCode.Name, cancelReason), user); var emailQueue2 = new EmailQueueV2(order, notificationType, "Cancelled", string.Format("By {0} at {1} review with the comment \"{2}\".", actor.FullName, previousStatus.Name, cancelReason), user); order.AddEmailQueue(emailQueue2); }
public void OrderDenied(Order order, User user, string comment, OrderStatusCode previousStatus) { var queues = new List <EmailQueueV2>(); foreach (var appr in order.OrderTrackings.Select(a => new { User = a.User, StatusCode = a.StatusCode }).Distinct()) { var target = appr.User; var preference = GetEmailPreferences(user.Id); //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(CancellationMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, user.FullName, order.StatusCode.Name, comment), target); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Denied", string.Format("By {0} at {1} review with the following comment \"{2}\".", user.FullName, previousStatus.Name, comment), target); //order.AddEmailQueue(emailQueue); AddToQueue(queues, emailQueue2); } AddQueuesToOrder(order, queues); }
/// <summary> /// Tested Feb 17, 2012 /// </summary> /// <param name="order"></param> public void OrderCreated(Order order) { var user = order.CreatedBy; var preference = GetEmailPreferences(user.Id); if (preference.RequesterOrderSubmission) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(SubmissionMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name), user); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Submitted", null, user); order.AddEmailQueue(emailQueue2); } // add the approvers/account managers that are "next" to see if they want the "arrival" email // get the lowest level var level = order.Approvals.Where(a => !a.Completed).Min(a => a.StatusCode.Level); ProcessArrival(order, null, level); }
public void OrderCompleted(Order order, User user) { var queues = new List <EmailQueueV2>(); foreach (var approval in order.OrderTrackings.Select(a => new { a.User, a.StatusCode }).Distinct()) { var preference = GetEmailPreferences(approval.User.Id); if (IsMailRequested(preference, approval.StatusCode, order.StatusCode, EventCode.Approval)) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(CompleteMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, user.FullName, order.OrderType.Name), approval.User); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Completed", string.Format("By {0} as a {1}.", user.FullName, order.OrderType.Name), approval.User); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
public void OrderAddAttachment(Order order, User actor) { var users = order.OrderTrackings.Select(a => a.User).Distinct().ToList(); foreach (var ot in users) { if (!ot.IsActive) //Not active, we don't want to email them { continue; } var preference = GetEmailPreferences(ot.Id); if (preference.AddAttachment) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(AddAttachmentMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, actor.FullName), ot); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Attachment Added", string.Format("By {0}.", actor.FullName), ot); order.AddEmailQueue(emailQueue2); } } }
public void OrderEdited(Order order, User actor) { var queues = new List <EmailQueueV2>(); // go through all the tracking history foreach (var appr in order.OrderTrackings.Where(a => a.StatusCode.Level <= order.StatusCode.Level).Select(a => new { User = a.User, StatusCode = a.StatusCode }).Distinct()) { var user = appr.User; var preference = GetEmailPreferences(user.Id); if (IsMailRequested(preference, appr.StatusCode, order.StatusCode, EventCode.Update)) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ChangeMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, actor.FullName), user); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Changed", string.Format("By {0} at {1} review.", actor.FullName, order.StatusCode.Name), user); //order.AddEmailQueue(emailQueue); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
public void OrderCompleted(Order order, User user) { var queues = new List<EmailQueueV2>(); foreach (var approval in order.OrderTrackings.Select(a => new { a.User, a.StatusCode }).Distinct()) { var preference = GetEmailPreferences(approval.User.Id); if (IsMailRequested(preference, approval.StatusCode, order.StatusCode, EventCode.Approval)) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(CompleteMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, user.FullName, order.OrderType.Name), approval.User); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Completed", string.Format("By {0} as a {1}.", user.FullName, order.OrderType.Name), approval.User); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
/// <summary> /// Tested Feb 17, 2012 /// </summary> /// <param name="order"></param> public void OrderCreated(Order order) { var user = order.CreatedBy; var preference = GetEmailPreferences(user.Id); if(preference.RequesterOrderSubmission) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(SubmissionMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name), user); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Submitted", null, user); order.AddEmailQueue(emailQueue2); } // add the approvers/account managers that are "next" to see if they want the "arrival" email // get the lowest level var level = order.Approvals.Where(a => !a.Completed).Min(a => a.StatusCode.Level); ProcessArrival(order, null, level); }
public void OrderDenied(Order order, User user, string comment, OrderStatusCode previousStatus) { var queues = new List<EmailQueueV2>(); foreach (var appr in order.OrderTrackings.Select(a => new { User = a.User, StatusCode = a.StatusCode }).Distinct()) { var target = appr.User; var preference = GetEmailPreferences(user.Id); //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(CancellationMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, user.FullName, order.StatusCode.Name, comment), target); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Denied", string.Format("By {0} at {1} review with the following comment \"{2}\".", user.FullName, previousStatus.Name, comment), target); //order.AddEmailQueue(emailQueue); AddToQueue(queues, emailQueue2); } AddQueuesToOrder(order, queues); }
public void OrderPaid(Order order, LineItem lineItem, User actor, decimal quantity, string overrideDescription = null) { var queues = new List<EmailQueueV2>(); var description = overrideDescription; if (string.IsNullOrWhiteSpace(description)) { description = string.Format("{0} item(s) by {1}.", quantity, actor.FullName); } if (!string.IsNullOrEmpty(order.Workgroup.NotificationEmailList)) { var emailQueue2 = new EmailQueueV2(order, EmailPreferences.NotificationTypes.PerEvent, "Paid", description, null, order.Workgroup.NotificationEmailList); AddToQueue(queues, emailQueue2); } foreach (var approval in order.OrderTrackings.Select(a => new { a.User, a.StatusCode }).Distinct()) { var preference = GetEmailPreferences(approval.User.Id); if (IsMailRequested(preference, approval.StatusCode, order.StatusCode, EventCode.Paid, order.OrderType)) { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Paid", description, approval.User); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
public void OrderReceived(Order order, LineItem lineItem, User actor, decimal quantity, string overrideDescription = null) { var queues = new List<EmailQueueV2>(); var description = overrideDescription; if (string.IsNullOrWhiteSpace(description)) { description = string.Format("{0} item(s) by {1}.", quantity, actor.FullName); } // get the order's purchaser // var purchasers = order.OrderTrackings.Where(a => a.StatusCode.Id == OrderStatusCode.Codes.Complete).ToList(); if (!string.IsNullOrEmpty(order.Workgroup.NotificationEmailList)) { //var emailQueue = new EmailQueue(order, EmailPreferences.NotificationTypes.PerEvent, string.Format(ReceiveMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, quantity), actor, order.Workgroup.NotificationEmailList); var emailQueue2 = new EmailQueueV2(order, EmailPreferences.NotificationTypes.PerEvent, "Received", description, null, order.Workgroup.NotificationEmailList); AddToQueue(queues, emailQueue2); } foreach (var approval in order.OrderTrackings.Select(a => new { a.User, a.StatusCode }).Distinct()) { var preference = GetEmailPreferences(approval.User.Id); if (IsMailRequested(preference, approval.StatusCode, order.StatusCode, EventCode.Received, order.OrderType)) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ReceiveMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, quantity), approval.User); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Received", description, approval.User); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
public void ProcessArrival(Order order, Approval approval, int level, bool assigned = false) { // find all the approvals at the next level var future = order.Approvals.Where(a => a.StatusCode.Level == level); // check for any approvals not specifically assigned to anyone var wrkgrp = future.Any(a => a.User == null); // get the current user var currentUser = _userRepository.GetNullableById(_userIdentity.Current); var queues = new List<EmailQueueV2>(); // there is at least one that is workgroup permissions if (wrkgrp) { var peeps = order.Workgroup.Permissions.Where(a => a.Role.Level == level && (!a.IsAdmin || (a.IsAdmin && a.IsFullFeatured))).Select(a => a.User); var apf = future.First(a => a.User == null); foreach (var peep in peeps) { if (!peep.IsActive) //Not active, we don't want to email them { continue; } var preference = GetEmailPreferences(peep.Id); if (IsMailRequested(preference, apf.StatusCode, approval != null ? approval.StatusCode : null, EventCode.Arrival)) { var extraInfo = string.Empty; if (preference.ShowAccountInEmail && apf.StatusCode.Id == OrderStatusCode.Codes.AccountManager) { extraInfo = string.Format(" with accounts {0}", order.AccountNumbers); } //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ArrivalMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, apf.StatusCode.Name, currentUser.FullName, extraInfo), peep); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Arrived", string.Format("At your level ({0}) for review from {1}{2}.", apf.StatusCode.Name, currentUser.FullName, extraInfo), peep); AddToQueue(queues, emailQueue2); } } // find any that still need to be sent regardless (outside of workgroup) var aps = future.Where(a => a.User != null && !peeps.Contains(a.User)); ProcessApprovalsEmailQueue(order, approval, queues, currentUser, aps, assigned); } else { // check each of the approvals ProcessApprovalsEmailQueue(order, approval, queues, currentUser, future, assigned); } AddQueuesToOrder(order, queues); }
public void OrderApproved(Order order, Approval approval) { var queues = new List<EmailQueueV2>(); // go through all the tracking history foreach (var appr in order.OrderTrackings.Where(a => a.StatusCode.Level < approval.StatusCode.Level).Select(a => new {User = a.User, StatusCode = a.StatusCode}).Distinct()) { var user = appr.User; var preference = GetEmailPreferences(user.Id); if (IsMailRequested(preference, appr.StatusCode, approval.StatusCode, EventCode.Approval)) { var currentUser = _userRepository.GetNullableById(_userIdentity.Current); //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ApprovalMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, currentUser.FullName, approval.StatusCode.Name), user); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Approved", string.Format("By {0} at {1} review.", currentUser.FullName, approval.StatusCode.Name), user); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); // is the current level complete? if (!order.Approvals.Where(a => a.StatusCode.Level == order.StatusCode.Level && !a.Completed).Any()) { // look forward to the next level var level = order.StatusCode.Level + 1; ProcessArrival(order, approval, level); } }
/// <summary> /// Add email queue to a list, but check to ensure no duplicates /// </summary> /// <param name="emailQueues"></param> /// <param name="emailQueue"></param> private void AddToQueue(List<EmailQueueV2> emailQueues, EmailQueueV2 emailQueue) { if (emailQueue.User != null && !emailQueue.User.IsActive) { return; } if (!emailQueues.Any(a => a.User == emailQueue.User)) emailQueues.Add(emailQueue); }
public static EmailQueueV2 EmailQueueV2(int? counter) { var rtValue = new EmailQueueV2(); rtValue.Action = "Text" + counter.Extra(); rtValue.Order = new Order(); rtValue.NotificationType = Purchasing.Core.Domain.EmailPreferences.NotificationTypes.PerEvent; return rtValue; }
public void OrderEdited(Order order, User actor) { var queues = new List<EmailQueueV2>(); // go through all the tracking history foreach (var appr in order.OrderTrackings.Where(a => a.StatusCode.Level <= order.StatusCode.Level).Select(a => new { User = a.User, StatusCode = a.StatusCode }).Distinct()) { var user = appr.User; var preference = GetEmailPreferences(user.Id); if (IsMailRequested(preference, appr.StatusCode, order.StatusCode, EventCode.Update)) { //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(ChangeMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, actor.FullName), user); var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Changed", string.Format("By {0} at {1} review.", actor.FullName, order.StatusCode.Name), user); //order.AddEmailQueue(emailQueue); AddToQueue(queues, emailQueue2); } } AddQueuesToOrder(order, queues); }
private void ProcessApprovalsEmailQueue(Order order, Approval approval, List<EmailQueueV2> queues, User currentUser, IEnumerable<Approval> aps, bool assigned = false) { foreach (var ap in aps) { // load the user and information var user = ap.User; var preference = GetEmailPreferences(user.Id); if (IsMailRequested(preference, ap.StatusCode, approval != null ? approval.StatusCode : null, EventCode.Arrival)) { var extraInfo = string.Empty; if (preference.ShowAccountInEmail && ap.StatusCode.Id == OrderStatusCode.Codes.AccountManager) { extraInfo = string.Format(" with accounts {0}", order.AccountNumbers); } //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(!assigned ? ArrivalMessage : RerouteMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.User); if (!assigned) { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Arrived", string.Format("At your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.User); AddToQueue(queues, emailQueue2); } else { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Rerouted", string.Format("To you at your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.User); AddToQueue(queues, emailQueue2); } } if (ap.SecondaryUser != null) { if (IsMailRequested(preference, ap.StatusCode, approval != null ? approval.StatusCode : null, EventCode.Arrival)) { var extraInfo = string.Empty; if (preference.ShowAccountInEmail && ap.StatusCode.Id == OrderStatusCode.Codes.AccountManager) { extraInfo = string.Format(" with accounts {0}", order.AccountNumbers); } //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(!assigned ? ArrivalMessage : RerouteMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.SecondaryUser); if (!assigned) { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Arrived", string.Format("At your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.SecondaryUser); AddToQueue(queues, emailQueue2); } else { var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Rerouted", string.Format("To you at your level ({0}) for review from {1}{2}.", ap.StatusCode.Name, currentUser.FullName, extraInfo), ap.SecondaryUser); AddToQueue(queues, emailQueue2); } } } } }