Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }