Пример #1
0
        public static void Trigger(object stateInfo)
        {
            try
            {
                if (dailySummaryInprogress)
                {
                    return;
                }
                dailySummaryInprogress = true;
                Logger.Current.Verbose("WebVisit DailySummary Processor triggered");

                string includeToday = System.Configuration.ConfigurationManager.AppSettings["INCLUDE_CURRENT_DAY_IN_DAILY_SUMMARY"].ToLower();

                var webAnalyticProviders = accountRepository.GetWebAnalyticsProviders();

                var accounts = webAnalyticProviders.Select(a => a.AccountID);

                var startDate = DateTime.Now.ToUniversalTime().Date.AddDays(-1);
                var endDate   = includeToday == "true" ? DateTime.Now.ToUniversalTime() : DateTime.Now.ToUniversalTime().Date;


                foreach (var accountId in accounts)
                {
                    Logger.Current.Informational("Current Account:", accountId.ToString());

                    var account = accountRepository.GetAccountBasicDetails(accountId);

                    var webAnalyticProvider = webAnalyticProviders.Where(p => p.AccountID == accountId).FirstOrDefault() ?? new WebAnalyticsProvider();

                    var accountInfo = new AccountBasicInfo()
                    {
                        AccountID      = accountId,
                        AccountName    = account.AccountName,
                        TimeZone       = account.TimeZone,
                        WebAnalyticsID = webAnalyticProvider.Id
                    };


                    GetDropdownValueResponse lifeCycleStages = dropdownService.GetDropdownValue(new GetDropdownValueRequest()
                    {
                        AccountId = accountInfo.AccountID, DropdownID = (byte)DropdownFieldTypes.LifeCycle
                    });

                    var emailProviderResponse = communicationService.GetEmailProviders(new GetEmailProvidersRequest()
                    {
                        AccountId = accountInfo.AccountID
                    });
                    if (emailProviderResponse.Exception != null)
                    {
                        throw emailProviderResponse.Exception;
                    }

                    var communicationResponse = communicationService.GetDefaultCampaignEmailProvider(new GetDefaultCampaignEmailProviderRequest()
                    {
                        AccountId = accountInfo.AccountID
                    });
                    var serviceProviderGuids            = emailProviderResponse.ServiceProviderGuids;
                    MailRegistrationDb mailRegistration = mailService.GetVMTADetails(serviceProviderGuids);
                    var    providerDetails      = accountService.GetTransactionalProviderDetails(accountInfo.AccountID);
                    string emailContentToAdmins = string.Empty;
                    try
                    {
                        TimeZoneInfo accountTzInfo = TimeZoneInfo.FindSystemTimeZoneById(accountInfo.TimeZone);
                        startDate = TimeZoneInfo.ConvertTimeFromUtc(startDate, accountTzInfo);
                        endDate   = includeToday == "true" ? endDate : TimeZoneInfo.ConvertTimeFromUtc(endDate, accountTzInfo);

                        Logger.Current.Informational("StartDate After: " + startDate);
                        Logger.Current.Informational("StartDate After: " + endDate);

                        GetWebVisitDailySummaryResponse response = webAnalyticsService.GetWebVisitDailySummary(new GetWebVisitDailySummaryRequest()
                        {
                            AccountId = accountInfo.AccountID, StartDate = startDate, EndDate = endDate
                        });

                        GetUsersOptedWebVisitSummaryEmailResponse users = userService.GetUsersOptedWebVisitSummaryEmail(new GetUsersOptedWebVisitSummaryEmailRequest()
                        {
                            AccountId = accountInfo.AccountID
                        });

                        byte status = accountRepository.GetAccountStatus(accountInfo.AccountID);

                        if (status != (byte)AccountStatus.Suspend)
                        {
                            string emailCopyContent = string.Empty;
                            #region Send Mail To Owner
                            foreach (UserBasicInfo userInfo in users.AllUsers)
                            {
                                Logger.Current.Informational("Sending daily summary email to user: "******". To owner: " + userInfo.Email);
                                try
                                {
                                    List <WebVisitReport> relatedVisits = response.WebVisits.Where(c => c.OwnerID == userInfo.UserID).OrderBy(c => c.VisitedOn).ToList();

                                    string emailContent = GetEmailContent(accountInfo, relatedVisits, lifeCycleStages, userInfo.FirstName + " " + userInfo.LastName);
                                    if (emailContent.Length > 0)
                                    {
                                        emailCopyContent = emailCopyContent + emailContent + "<br><hr>";
                                    }

                                    if (webAnalyticProvider.DailyStatusEmailOpted && emailContent.Length > 0)
                                    {
                                        NotifyByEmail(accountInfo, "SmartTouch Web Visit Daily Summary", providerDetails, userInfo.Email, emailContent);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Logger.Current.Error("Error occured while sending web visit daily summary emails for account user: "******" " + userInfo.Email, ex);
                                }
                            }
                            #endregion

                            #region Send Mail To Opted User
                            //add no owner visits to html
                            List <WebVisitReport> unassignedVisits = response.WebVisits.Where(v => ((v.OwnerID.HasValue) ? v.OwnerID.Value == 1 : v.OwnerID == null)).OrderBy(c => c.VisitedOn).ToList();
                            emailCopyContent += GetEmailContent(accountInfo, unassignedVisits, lifeCycleStages, "Not Assigned");
                            foreach (UserBasicInfo userInfo in users.UsersOpted)
                            {
                                Logger.Current.Informational("ADMIN - Sending daily summary email to user: "******". To owner: " + userInfo.Email);
                                try
                                {
                                    if (emailCopyContent.Length > 0)
                                    {
                                        NotifyByEmail(accountInfo, "SmartTouch Web Visit Daily Summary", providerDetails, userInfo.Email, emailCopyContent + "<br>");
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Logger.Current.Error("Error occured while sending Opted User Daily Web Visit Daily Summary email for user: "******" " + userInfo.Email, ex);
                                }
                            }
                            #endregion
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Current.Error("Error occured while sending web visit daily summary emails for account: " + accountInfo, ex);
                    }
                }

                dailySummaryInprogress = false;
                Logger.Current.Informational("Completed processing daily summary emails");
            }
            catch (Exception ex)
            {
                dailySummaryInprogress = false;
                Logger.Current.Error("Error occured while sending web visit daily summary emails", ex);
            }
        }
Пример #2
0
        protected override void ExecuteInternal(IJobExecutionContext context)
        {
            var webAnalyticsProviders = _accountService
                                        .GetWebAnalyticsProviders(new GetWebAnalyticsProvidersRequest())
                                        .WebAnalyticsProviders;

            var accountIds     = webAnalyticsProviders.Select(a => a.AccountID);
            var currentTimeUtc = DateTime.UtcNow;

            foreach (var accountId in accountIds)
            {
                var accountInfo = _accountRepository.GetAccountBasicDetails(accountId);
                if (accountInfo.Status == (byte)AccountStatus.Suspend)
                {
                    continue;
                }

                Log.Informational($"Process Daily Summary Alerts for AccountID: {accountId}");

                var webAnalyticProvider = webAnalyticsProviders.First(p => p.AccountID == accountId);
                var lifeCycleStages     = _dropdownService.GetDropdownValue(new GetDropdownValueRequest {
                    AccountId = accountInfo.AccountID, DropdownID = (byte)DropdownFieldTypes.LifeCycle
                });
                var providerDetails = _accountService.GetTransactionalProviderDetails(accountInfo.AccountID);

                try
                {
                    var startDate = currentTimeUtc.Yesterday().ToTimezone(accountInfo.TimeZone);
                    var endDate   = (_jobConfig.IncludeCurrentDayInDailySummary ? DateTime.UtcNow : DateTime.Today).ToTimezone(accountInfo.TimeZone);

                    Log.Informational($"Get WebVisits from {startDate} to {endDate}");

                    var webVisitsSummary = _webAnalyticsService.GetWebVisitDailySummary(new GetWebVisitDailySummaryRequest {
                        AccountId = accountInfo.AccountID, StartDate = startDate, EndDate = endDate
                    });
                    var usersToNotify = _userService.GetUsersOptedWebVisitSummaryEmail(new GetUsersOptedWebVisitSummaryEmailRequest {
                        AccountId = accountInfo.AccountID
                    });

                    var emailCopyContent = string.Empty;
                    #region Send Mail To Owner
                    foreach (var userInfo in usersToNotify.AllUsers)
                    {
                        Log.Informational("Sending daily summary email to user: "******". To owner: " + userInfo.Email);
                        try
                        {
                            var relatedVisits = webVisitsSummary
                                                .WebVisits
                                                .Where(c => c.OwnerID == userInfo.UserID)
                                                .OrderBy(c => c.VisitedOn)
                                                .ToList();

                            var emailContent = GetEmailContent(accountInfo, relatedVisits, lifeCycleStages, userInfo.FirstName + " " + userInfo.LastName);
                            if (string.IsNullOrEmpty(emailContent))
                            {
                                continue;
                            }

                            emailCopyContent = emailCopyContent + emailContent + "<br><hr>";
                            if (webAnalyticProvider.DailyStatusEmailOpted)
                            {
                                NotifyByEmail(accountInfo, "SmartTouch Web Visit Daily Summary", providerDetails, userInfo.Email, emailContent);
                            }
                        }
                        catch (Exception ex)
                        {
                            Log.Error("Error occured while sending web visit daily summary emails for account user: "******" " + userInfo.Email, ex);
                        }
                    }
                    #endregion

                    #region Send Mail To Opted User
                    //add no owner visits to html
                    var unassignedVisits = webVisitsSummary
                                           .WebVisits
                                           .Where(v => v.OwnerID == 1 || v.OwnerID == null)
                                           .OrderBy(c => c.VisitedOn)
                                           .ToList();

                    emailCopyContent += GetEmailContent(accountInfo, unassignedVisits, lifeCycleStages, "Not Assigned");
                    if (string.IsNullOrEmpty(emailCopyContent))
                    {
                        continue;
                    }

                    foreach (var userInfo in usersToNotify.UsersOpted)
                    {
                        try
                        {
                            Log.Informational("Sending daily summary email to userID: " + userInfo.UserID + ". To owner: " + userInfo.Email);
                            NotifyByEmail(accountInfo, "SmartTouch Web Visit Daily Summary", providerDetails, userInfo.Email, emailCopyContent + "<br>");
                        }
                        catch (Exception ex)
                        {
                            Log.Error("Error occured while sending Opted User Daily Web Visit Daily Summary email for user: "******" " + userInfo.Email, ex);
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    Log.Error("Error occured while sending web visit daily summary emails for account: " + accountInfo, ex);
                }
            }
            Log.Informational("Completed processing Daily Summary Alerts");
        }