public void Execute(IJobExecutionContext context) { var data = context.JobDetail.JobDataMap; string tenant = (string)data["Tenant"]; var @event = (Event)data["Event"]; if (string.IsNullOrWhiteSpace(tenant)) { return; } var message = new ReminderMessage { Event = @event, Contact = Contacts.GetContactByUserIdAsync(tenant, @event.UserId).GetAwaiter().GetResult() }; var providers = @event.ReminderTypes.Split(','); foreach (string providerId in providers) { var provider = this.GetProvider(providerId.Trim()); if (provider == null) { continue; } Task.Run(async() => { await provider.RemindAsync(tenant, message).ConfigureAwait(true); }).GetAwaiter().GetResult(); } }
public async Task <bool> RemindAsync(string tenant, ReminderMessage message) { await Task.Delay(0).ConfigureAwait(false); string sendTo = message.Contact.EmailAddresses; string timezone = message.Contact.TimeZone.Or(message.Event.TimeZone); if (string.IsNullOrWhiteSpace(sendTo)) { return(false); } int alarm = message.Event.Alarm ?? 0; if (alarm == 0) { return(false); } string template = Configs.GetNotificationEmailTemplate(tenant); string eventDate = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddMinutes(alarm), TimeZoneInfo.FindSystemTimeZoneById(timezone)).Date.ToString("D"); string startTime = TimeZoneInfo.ConvertTime(message.Event.StartsAt, TimeZoneInfo.FindSystemTimeZoneById(timezone)).ToString("t"); string endTime = TimeZoneInfo.ConvertTime(message.Event.EndsOn, TimeZoneInfo.FindSystemTimeZoneById(timezone)).ToString("t"); template = template.Replace("{Name}", message.Event.Name); template = template.Replace("{StartTime}", startTime); template = template.Replace("{EndTime}", endTime); template = template.Replace("{Date}", eventDate); template = template.Replace("{Location}", message.Event.Location); template = template.Replace("{Note}", message.Event.Note); var processor = EmailProcessor.GetDefault(tenant); if (processor == null) { return(false); } var email = new EmailQueue { AddedOn = DateTimeOffset.UtcNow, SendOn = DateTimeOffset.UtcNow, SendTo = sendTo, FromName = processor.Config.FromName, ReplyTo = processor.Config.FromEmail, ReplyToName = processor.Config.FromName, Subject = string.Format(I18N.CalendarNotificationEmailSubject, message.Event.Name, startTime), Message = template }; var manager = new MailQueueManager(tenant, email); await manager.AddAsync().ConfigureAwait(false); await manager.ProcessQueueAsync(processor).ConfigureAwait(false); return(true); }
public async Task <bool> RemindAsync(string tenant, ReminderMessage message) { if (message.Contact.AssociatedUserId == null || message.Contact.AssociatedUserId == 0) { return(false); } var notification = new Notification { Tenant = tenant, AssociatedApp = nameof(Calendar), EventTimestamp = DateTimeOffset.UtcNow, FormattedText = message.Event.Name, Icon = "calendar", ToUserId = message.Event.UserId, Url = "/dashboard/calendar" }; await NotificationHelper.SendAsync(tenant, notification).ConfigureAwait(false); return(true); }