protected override async Task HandleCore(MessageTaskVolunteersCommand message) { var users = await _context.VolunteerTaskSignups.AsNoTracking() .Include(a => a.User) .Where(a => a.VolunteerTask.Id == message.Model.VolunteerTaskId).ToListAsync(); // send all notifications to the queue var smsRecipients = new List <string>(); var emailRecipients = new List <string>(); smsRecipients.AddRange(users.Where(u => u.User.PhoneNumberConfirmed).Select(v => v.User.PhoneNumber)); emailRecipients.AddRange(users.Where(u => u.User.EmailConfirmed).Select(v => v.User.Email)); var command = new NotifyVolunteersCommand { // todo: what information do we add about the task? // todo: should we use a template from the email service provider? // todo: what about non-English volunteers? ViewModel = new NotifyVolunteersViewModel { SmsMessage = message.Model.Message, SmsRecipients = smsRecipients, EmailMessage = message.Model.Message, HtmlMessage = message.Model.Message, EmailRecipients = emailRecipients, Subject = message.Model.Subject } }; await _mediator.SendAsync(command); }
public async Task Handle(IteneraryTeamLeadAssigned notification) { var plainTextMessage = BuildPlainTextMessage(notification); var htmlMessage = BuildHtmlMessage(notification); var smsMessage = BuildSmsMessage(notification); var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel() { Subject = @"You have been assigned as the Team Lead on an itinerary", EmailRecipients = new List <string> { notification.AssigneeEmail }, SmsRecipients = new List <string> { notification.AssigneePhone }, EmailMessage = plainTextMessage, HtmlMessage = htmlMessage, SmsMessage = smsMessage } }; await _mediator.SendAsync(command); }
public Task SendSmsAsync(string number, string message) { var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { SmsMessage = message, SmsRecipients = new List <string> { number }, } }; return(_mediator.SendAsync(command)); }
public Task SendEmailAsync(string email, string subject, string message) { var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { EmailMessage = message, EmailRecipients = new List <string> { email }, HtmlMessage = message, Subject = subject } }; return(_mediator.SendAsync(command)); }
public Task SendSmsAsync(string number, string message) { var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { SmsMessage = message, SmsRecipients = new List <string> { number }, } }; _bus.Send(command); return(Task.FromResult(0)); }
public Task SendEmailAsync(string email, string subject, string message) { var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { EmailMessage = message, EmailRecipients = new List <string> { email }, HtmlMessage = message, Subject = subject } }; _bus.Send(command); return(Task.FromResult(0)); }
public async Task <IActionResult> Assign(int id, List <TaskViewModel> tasks) { if (!UserIsTenantAdminOfActivity(id)) { return(new HttpUnauthorizedResult()); } var updates = tasks.ToModel(_dataAccess).ToList(); //TODO: Replacement for API like Tasks.UpdateRange(updates); foreach (var item in updates) { await _dataAccess.UpdateTaskAsync(item); } // send all notifications to the queue var smsRecipients = new List <string>(); var emailRecipients = new List <string>(); foreach (var allReadyTask in updates) { // get all confirmed contact points for the broadcast smsRecipients.AddRange(allReadyTask.AssignedVolunteers.Where(u => u.User.PhoneNumberConfirmed).Select(v => v.User.PhoneNumber)); emailRecipients.AddRange(allReadyTask.AssignedVolunteers.Where(u => u.User.EmailConfirmed).Select(v => v.User.Email)); } var command = new NotifyVolunteersCommand { // todo: what information do we add about the task? // todo: should we use a template from the email service provider? // todo: what about non-English volunteers? ViewModel = new NotifyVolunteersViewModel { SmsMessage = "You've been assigned a task from AllReady.", SmsRecipients = smsRecipients, EmailMessage = "You've been assigned a task from AllReady.", EmailRecipients = emailRecipients } }; _bus.Send(command); return(RedirectToRoute(new { controller = "Activity", Area = "Admin", action = "Details", id = id })); }
public async Task Handle(EventManagerInvited notification) { var plainTextMessage = BuildPlainTextMessage(notification); var htmlMessage = BuildHtmlMessage(notification); var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { EmailMessage = plainTextMessage.ToString(), EmailRecipients = new List <string> { notification.InviteeEmail }, HtmlMessage = htmlMessage, Subject = "Event manager invite" } }; await _mediator.SendAsync(command); }
public void SendMessageToAssignedVolunteers() { var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { Subject = "This is my subject", EmailRecipients = new List <string> { "*****@*****.**", "*****@*****.**" }, EmailMessage = "This is my message" } }; var queueWriter = new Mock <IQueueStorageService>(); var handler = new NotifyVolunteersHandler(queueWriter.Object); var result = handler.Handle(command); queueWriter.Verify(q => q.SendMessageAsync(It.IsAny <string>(), It.IsAny <string>()), Times.Exactly(2)); }
protected override async Task HandleCore(AssignTaskCommandAsync message) { var task = GetTask(message); var campaignEvent = task.Event; var taskSignups = new List <TaskSignup>(); if (task != null) { //New Items, if not in collection add them, save that list for the pub-event foreach (var userId in message.UserIds) { var taskSignup = task.AssignedVolunteers.SingleOrDefault(a => a.User.Id == userId); if (taskSignup == null) { var user = _context.Users.Single(u => u.Id == userId); taskSignup = new TaskSignup { Task = task, User = user, PreferredEmail = user.Email, PreferredPhoneNumber = user.PhoneNumber, AdditionalInfo = string.Empty, Status = TaskStatus.Assigned.ToString(), StatusDateTimeUtc = DateTime.UtcNow }; task.AssignedVolunteers.Add(taskSignup); taskSignups.Add(taskSignup); // If the user has not already been signed up for the event, sign them up if (campaignEvent.UsersSignedUp.All(acsu => acsu.User.Id != userId)) { campaignEvent.UsersSignedUp.Add(new EventSignup { Event = campaignEvent, User = user, PreferredEmail = user.Email, PreferredPhoneNumber = user.PhoneNumber, AdditionalInfo = string.Empty, SignupDateTime = DateTime.UtcNow }); } } } //Remove task signups where the the user id is not included in the current list of assigned user id's var taskSignupsToRemove = task.AssignedVolunteers.Where(taskSignup => message.UserIds.All(uid => uid != taskSignup.User.Id)).ToList(); taskSignupsToRemove.ForEach(taskSignup => task.AssignedVolunteers.Remove(taskSignup)); // delete the event signups where the user is no longer signed up for any tasks (from taskSignup in taskSignupsToRemove where !campaignEvent.IsUserInAnyTask(taskSignup.User.Id) select campaignEvent.UsersSignedUp.FirstOrDefault(u => u.User.Id == taskSignup.User.Id)) .ToList() .ForEach(signup => campaignEvent.UsersSignedUp.Remove(signup)); } await _context.SaveChangesAsync(); // send all notifications to the queue var smsRecipients = new List <string>(); var emailRecipients = new List <string>(); // get all confirmed contact points for the broadcast smsRecipients.AddRange(taskSignups.Where(u => u.User.PhoneNumberConfirmed).Select(v => v.User.PhoneNumber)); emailRecipients.AddRange(taskSignups.Where(u => u.User.EmailConfirmed).Select(v => v.User.Email)); var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { SmsMessage = "You've been assigned a task from AllReady.", SmsRecipients = smsRecipients, EmailMessage = "You've been assigned a task from AllReady.", HtmlMessage = "You've been assigned a task from AllReady.", EmailRecipients = emailRecipients, Subject = "You've been assigned a task from AllReady." } }; await _mediator.SendAsync(command); }
protected override void HandleCore(AssignTaskCommand message) { var task = _context.Tasks.SingleOrDefault(c => c.Id == message.TaskId); var newVolunteers = new List <TaskSignup>(); if (task != null) { //New Items, if not in collection add them, save that list for the pub-event foreach (var userId in message.UserIds) { var av = task.AssignedVolunteers.SingleOrDefault(a => a.User.Id == userId); if (av == null) { var volunteerUser = _context.Users.Single(u => u.Id == userId); av = new TaskSignup { Task = task, User = volunteerUser, Status = TaskStatus.Assigned.ToString(), StatusDateTimeUtc = DateTime.UtcNow }; } task.AssignedVolunteers.Add(av); newVolunteers.Add(av); } //Remove Items Not there, All Volunteers should be in task.AssignedVolunteers var removedVolunteers = new List <TaskSignup>(); foreach (var vol in task.AssignedVolunteers) { if (!message.UserIds.Any(uid => uid == vol.User.Id)) { removedVolunteers.Add(vol); } } foreach (var vol in removedVolunteers) { task.AssignedVolunteers.Remove(vol); } } _context.SaveChanges(); // send all notifications to the queue var smsRecipients = new List <string>(); var emailRecipients = new List <string>(); // get all confirmed contact points for the broadcast smsRecipients.AddRange(newVolunteers.Where(u => u.User.PhoneNumberConfirmed).Select(v => v.User.PhoneNumber)); emailRecipients.AddRange(newVolunteers.Where(u => u.User.EmailConfirmed).Select(v => v.User.Email)); var command = new NotifyVolunteersCommand { ViewModel = new NotifyVolunteersViewModel { SmsMessage = "You've been assigned a task from AllReady.", SmsRecipients = smsRecipients, EmailMessage = "You've been assigned a task from AllReady.", HtmlMessage = "You've been assigned a task from AllReady.", EmailRecipients = emailRecipients, Subject = "You've been assigned a task from AllReady." } }; _bus.Send(command); }