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