Example #1
0
        public async Task <Tuple <bool, string> > Process(TrainingNotifierQueueItem item)
        {
            bool   success = true;
            string result  = "";

            if (item != null && item.Training != null && item.Training.Users != null && item.Training.Users.Count > 0)
            {
                var message  = String.Empty;
                var title    = String.Empty;
                var profiles = await _userProfileService.GetSelectedUserProfilesAsync(item.Training.Users.Select(x => x.UserId).ToList());

                var departmentNumber = await _departmentSettingsService.GetTextToCallNumberForDepartmentAsync(item.Training.DepartmentId);

                if (!item.Training.Notified.HasValue)
                {
                    if (item.Training.ToBeCompletedBy.HasValue)
                    {
                        message = string.Format("New Training ({0}) due on {1}", item.Training.Name,
                                                item.Training.ToBeCompletedBy.Value.ToShortDateString());
                    }
                    else
                    {
                        message = string.Format("New Training ({0}) assigned to you", item.Training.Name);
                    }

                    title = "New Training Notice";
                }
                else
                {
                    message = string.Format("Training ({0}) is due tomorrow", item.Training.Name);
                }

                foreach (var person in item.Training.Users)
                {
                    var profile = profiles.FirstOrDefault(x => x.UserId == person.UserId);

                    if (!item.Training.Notified.HasValue || !person.Complete)
                    {
                        await _communicationService.SendNotificationAsync(person.UserId, item.Training.DepartmentId, message, departmentNumber, title, profile);
                    }

                    title = "Training Due Notice";
                }

                await _trainingService.MarkAsNotifiedAsync(item.Training.TrainingId);
            }

            return(new Tuple <bool, string>(success, result));
        }
Example #2
0
        public async Task ProcessAsync(TrainingNotiferCommand command, IQuidjiboProgress progress, CancellationToken cancellationToken)
        {
            try
            {
                progress.Report(1, $"Starting the {Name} Task");

                //await Task.Run(async () =>
                //{
                var _trainingService = Bootstrapper.GetKernel().Resolve <ITrainingService>();
                var logic            = new TrainingNotifierLogic();

                var trainings = await _trainingService.GetTrainingsToNotifyAsync(DateTime.UtcNow);

                if (trainings != null && trainings.Any())
                {
                    _logger.LogInformation("TrainingNotifer::Trainings to Notify: " + trainings.Count());

                    foreach (var training in trainings)
                    {
                        var qi = new TrainingNotifierQueueItem();
                        qi.Training = training;

                        progress.Report(3, "TrainingNotifer::Processing Training Notification: " + qi.Training.TrainingId);
                        var result = await logic.Process(qi);

                        if (result.Item1)
                        {
                            _logger.LogInformation($"TrainingNotifer::Processed Training Notification {qi.Training.TrainingId} successfully.");
                        }
                        else
                        {
                            _logger.LogInformation($"TrainingNotifer::Failed to Process Training Notification {qi.Training.TrainingId} error {result.Item2}");
                        }
                    }
                }
                //}, cancellationToken);

                progress.Report(100, $"Finishing the {Name} Task");
            }
            catch (Exception ex)
            {
                Resgrid.Framework.Logging.LogException(ex);
                _logger.LogError(ex.ToString());
            }
        }
Example #3
0
        public async Task ProcessAsync(TrainingNotiferCommand command, IQuidjiboProgress progress, CancellationToken cancellationToken)
        {
            progress.Report(1, $"Starting the {Name} Task");

            await Task.Factory.StartNew(() =>
            {
                var _trainingService = Bootstrapper.GetKernel().Resolve <ITrainingService>();
                var logic            = new TrainingNotifierLogic();

                var trainings = _trainingService.GetTrainingsToNotify(DateTime.UtcNow);

                if (trainings != null && trainings.Any())
                {
                    _logger.LogInformation("TrainingNotifer::Trainings to Notify: " + trainings.Count());

                    foreach (var training in trainings)
                    {
                        var qi      = new TrainingNotifierQueueItem();
                        qi.Training = training;

                        progress.Report(3, "TrainingNotifer::Processing Training Notification: " + qi.Training.TrainingId);
                        var result = logic.Process(qi);

                        if (result.Item1)
                        {
                            _logger.LogInformation($"TrainingNotifer::Processed Training Notification {qi.Training.TrainingId} successfully.");
                        }
                        else
                        {
                            _logger.LogInformation($"TrainingNotifer::Failed to Process Training Notification {qi.Training.TrainingId} error {result.Item2}");
                        }
                    }
                }
            }, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Default);

            progress.Report(100, $"Finishing the {Name} Task");
        }