Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #4
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
                }
            };

            return(_mediator.SendAsync(command));
        }
Example #5
0
        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));
        }
Example #6
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));
        }
Example #7
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));
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }