Example #1
0
        public async Task <ICommandExecutionResult> HandleCommand()
        {
            var checkDate = await CommandUtils.ParseDateFromMessage(CommandContext, uowFactory);

            var dailyReportExists = await crmService.DailyReportExists(CommandContext.ChatId, checkDate);

            var dailyReportStatusText = dailyReportExists ?
                                        "have"
                : "*HAVE NOT*";

            return(new TextResult($@"You {dailyReportStatusText} submitted a daily report for {checkDate:D}")
            {
                TextFormat = ParseMode.Markdown
            });
        }
        public string Schedule => "0 * * * *"; // at the start of each hour

        public async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            // Clear branch holidays info cache
            branchHolidays = null;
            var checkStart           = DateTime.UtcNow;
            var pendingSubscriptions = await subscriptionService.GetPendingSubscriptions(checkStart, EventType.MissDailyReport);

            foreach (var subscription in pendingSubscriptions)
            {
                cancellationToken.ThrowIfCancellationRequested();

                try
                {
                    var      user            = subscription.User;
                    DateTime userCurrentDate = TimeZoneInfo.ConvertTimeFromUtc(checkStart, TimeZoneInfo.FindSystemTimeZoneById(user.TimeZoneCode));
                    // Do not notify user if notification time has not passed yet
                    if (userCurrentDate.Hour < subscription.CheckTime)
                    {
                        continue;
                    }

                    var shouldSubmitDailyReport = await ShouldSubmitDailyReport(user, userCurrentDate);

                    cancellationToken.ThrowIfCancellationRequested();
                    if (shouldSubmitDailyReport && !await crmService.DailyReportExists(user.Chat.ChatId, userCurrentDate))
                    {
                        telemetry.TrackEvent("Missing Daily Report Notification");
                        await telegramBot.NotifyMissedDailyReportAsync(user.Chat.ChatId);
                    }
                    subscription.LastCheck = checkStart;
                    await subscriptionService.UpdateSubscription(subscription);
                }
                catch (Exception ex)
                {
                    telemetry.TrackException(ex);
                }
            }
        }