Exemplo n.º 1
0
        private static string GetEmailContent(AccountBasicInfo accountInfo, List <WebVisitReport> relatedVisits, GetDropdownValueResponse lifeCycleStages, string ownerName)
        {
            string emailContent = string.Empty;

            if (relatedVisits.IsAny())
            {
                emailContent = "<div style='font-family:verdana;font-size:12px'> Account Executive: <strong>" + ownerName + "</strong><br>" + emailContent + "</div><br>";

                relatedVisits.ForEach(c =>
                {
                    TimeZoneInfo tzInfo = TimeZoneInfo.FindSystemTimeZoneById(accountInfo.TimeZone);
                    c.VisitedOn         = TimeZoneInfo.ConvertTimeFromUtc(c.VisitedOn, tzInfo);

                    c.LifecycleStage = lifeCycleStages.DropdownValues.DropdownValuesList.Where(d => d.DropdownValueID == c.LifecycleStageId).Select(d => d.DropdownValue).FirstOrDefault() ?? "";
                    c.Phone          = FormatPhoneNumber(c.Phone);
                });
                emailContent += relatedVisits.GetTable(p => p.FirstName
                                                       , p => p.LastName
                                                       , p => p.Email
                                                       , p => p.Phone
                                                       , p => p.Zip
                                                       , p => p.LifecycleStage
                                                       , p => p.VisitedOn
                                                       , p => p.PageViews
                                                       , p => p.Duration
                                                       , p => p.Page1
                                                       , p => p.Page2
                                                       , p => p.Page3
                                                       , p => p.Source
                                                       , p => p.LeadScore
                                                       , p => p.Location);
            }
            return(emailContent);
        }
Exemplo n.º 2
0
        private static void NotifyByEmail(AccountBasicInfo accountInfo, string subject,
                                          Dictionary <Guid, string> emailProvider, string to, string emailContent)
        {
            var accountLabel = "<label style='font-family:verdana'>Account: <strong>  " + accountInfo.AccountName + " </strong> <br></label>";

            if (!string.IsNullOrEmpty(to))
            {
                var subjectLine = subject + " - " + accountInfo.AccountName;

                LandmarkIT.Enterprise.CommunicationManager.Requests.SendMailRequest request = new LandmarkIT.Enterprise.CommunicationManager.Requests.SendMailRequest();
                if (emailProvider != null && emailProvider.Count > 0)
                {
                    var fromEmailId = !string.IsNullOrEmpty(emailProvider.FirstOrDefault().Value) ? emailProvider.FirstOrDefault().Value : "*****@*****.**";
                    request.TokenGuid     = emailProvider.FirstOrDefault().Key;
                    request.RequestGuid   = Guid.NewGuid();
                    request.ScheduledTime = DateTime.Now.AddMinutes(1).ToUniversalTime();
                    request.Subject       = subjectLine;
                    request.Body          = EmailBodyUserLevel(accountLabel, emailContent, accountInfo.AccountID);
                    request.To            = new List <string>()
                    {
                        to
                    };
                    request.IsBodyHtml = true;
                    request.From       = fromEmailId;
                    request.CategoryID = (byte)EmailNotificationsCategory.WebVisitDailySummaryNotification;
                    request.AccountID  = accountInfo.AccountID;
                    var sendMailResponse = mailService.Send(request);
                }

                Logger.Current.Informational("Successfully sent web visit daily summary to user " + to);
            }
        }
Exemplo n.º 3
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);
            }
        }