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)); }
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()); } }
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"); }