public static void dashboardlinechart(ref AnalyticDashboardViewModel avm, List <Analytic> analytics) { if (analytics.Count > 1) { //Figure the Time Range for Days List <DateTime> dayTimeRange = new List <DateTime>(); List <int> dayViews = new List <int>(); DateTime day = DateTime.Now; StringBuilder dayTimeRangeString = new StringBuilder(); string quote = "\""; dayTimeRangeString.Append("["); for (int i = 0; i < 10; i++) { dayTimeRange.Add(day); dayTimeRangeString.Append("new Date(" + quote + day.ToShortDateString() + quote + "),"); day = day.AddDays(-1); } string dayTimeRangeArray = dayTimeRangeString.ToString(); dayTimeRangeArray = dayTimeRangeArray.Substring(0, dayTimeRangeArray.Length - 1) + "]"; // *************end the time range for DAYS************* // // figure the time range for months List <DateTime> monthTimeRange = new List <DateTime>(); List <int> monthViews = new List <int>(); DateTime month = DateTime.Now; StringBuilder monthTimeRangeString = new StringBuilder(); monthTimeRangeString.Append("["); for (int i = 0; i < 10; i++) { monthTimeRange.Add(month); monthTimeRangeString.Append("new Date(" + quote + month.ToShortDateString() + quote + "),"); month = month.AddMonths(-1); } string monthTimeRangeArray = monthTimeRangeString.ToString(); monthTimeRangeArray = monthTimeRangeArray.Substring(0, monthTimeRangeArray.Length - 1) + "]"; // *************end the time range for MONTHS************* // // figure the time range for year List <DateTime> yearTimeRange = new List <DateTime>(); List <int> yearViews = new List <int>(); DateTime year = DateTime.Now; StringBuilder yearTimeRangeString = new StringBuilder(); yearTimeRangeString.Append("["); for (int i = 0; i < 10; i++) { yearTimeRange.Add(year); yearTimeRangeString.Append("new Date(" + quote + year.ToShortDateString() + quote + "),"); year = year.AddYears(-1); } string yearTimeRangeArray = yearTimeRangeString.ToString(); yearTimeRangeArray = yearTimeRangeArray.Substring(0, yearTimeRangeArray.Length - 1) + "]"; // *************end the time range for YEAR************* // StringBuilder daySeries = new StringBuilder(); StringBuilder monthSeries = new StringBuilder(); StringBuilder yearSeries = new StringBuilder(); List <FuneralHome> homes = analytics.GroupBy(a => a.Video.Service.FuneralHome).Select(f => f.FirstOrDefault().Video.Service.FuneralHome).Distinct().ToList(); foreach (var home in homes) { //Get Daily Views for Funeral home int todayViews = 0; StringBuilder dayViewString = new StringBuilder(); dayViewString.Append("["); foreach (var d in dayTimeRange) { todayViews = analytics.Where(a => a.CreateDate > d.AddDays(-1) && a.CreateDate < d && a.Video.Service.FuneralHome.Id == home.Id).Count(); dayViewString.Append(todayViews.ToString() + ","); dayViews.Add(todayViews); } string dayViewsArray = dayViewString.ToString(); dayViewsArray = dayViewsArray.Substring(0, dayViewsArray.Length - 1) + "]"; daySeries.Append("{label: \"" + home.Name + "\",legendEntry:true, data: {x: " + dayTimeRangeArray + ", y: " + dayViewsArray + "},markers: {visible:true, type:\"circle\"}},"); //Get Monthly Views for Funeral Home int mViews = 0; StringBuilder monthViewString = new StringBuilder(); monthViewString.Append("["); foreach (var d in monthTimeRange) { mViews = analytics.Where(a => a.CreateDate > d.AddMonths(-1) && a.CreateDate < d && a.Video.Service.FuneralHome.Id == home.Id).Count(); monthViewString.Append(mViews.ToString() + ","); monthViews.Add(mViews); } string monthViewsArray = monthViewString.ToString(); monthViewsArray = monthViewsArray.Substring(0, monthViewsArray.Length - 1) + "]"; monthSeries.Append("{label: \"" + home.Name + "\",legendEntry:true, data: {x: " + monthTimeRangeArray + ", y: " + monthViewsArray + "},markers: {visible:true, type:\"circle\"}},"); //Get Yearly Views for Funeral Home int yViews = 0; StringBuilder yearViewString = new StringBuilder(); yearViewString.Append("["); foreach (var d in yearTimeRange) { yViews = analytics.Where(a => a.CreateDate > d.AddYears(-1) && a.CreateDate < d && a.Video.Service.FuneralHome.Id == home.Id).Count(); yearViewString.Append(yViews.ToString() + ","); yearViews.Add(yViews); } string yearViewsArray = yearViewString.ToString(); yearViewsArray = yearViewsArray.Substring(0, yearViewsArray.Length - 1) + "]"; yearSeries.Append("{label: \"" + home.Name + "\",legendEntry:true, data: {x: " + yearTimeRangeArray + ", y: " + yearViewsArray + "},markers: {visible:true, type:\"circle\"}},"); } string daySeriesString = daySeries.ToString().Substring(0, daySeries.Length - 1); string monthSeriesString = monthSeries.ToString().Substring(0, monthSeries.Length - 1); string yearSeriesString = yearSeries.ToString().Substring(0, yearSeries.Length - 1); avm.DailySeries = daySeriesString; avm.MonthlySeries = monthSeriesString; avm.YearlySeries = yearSeriesString; } else { avm.DailySeries = "No Data"; } }
public async Task <ActionResult> Dashboard(int?OwnerId, int?HomeId, int?ServiceId) { if (!User.IsInRole("Admin")) { return(View("NotFound")); } List <FuneralHome> Homes = db.FuneralHomes.Where(f => f.DevHome == false).ToList(); List <Analytic> Analytics = new List <Analytic>(); AnalyticViewModel AVM = new AnalyticViewModel(); AnalyticDashboardViewModel ADVM = new AnalyticDashboardViewModel(); List <Service> Services = new List <Service>(); ADVM.TotalVideoViews = db.Analytics.Count(); DateTime OneMonth = DateTime.Now.AddDays(-30); ADVM.MonthViews = db.Analytics.Where(a => a.CreateDate > OneMonth).Count(); if (OwnerId == null && HomeId == null && ServiceId == null) { // Analytics = db.Analytics.Where(a=>a.Video.Service.FuneralHome.DevHome==false).ToList(); Services = db.Services.Where(s => s.FuneralHome.DevHome == false).ToList(); } else { if (OwnerId != null) { // Analytics = db.Analytics.Where(a=>a.Video.Service.FuneralHome.OwnerId==OwnerId).ToList(); Services = db.Services.Where(a => a.FuneralHome.OwnerId == OwnerId).ToList(); } else { if (HomeId != null) { // Analytics = db.Analytics.Where(a => a.Video.Service.FuneralHome.Id == HomeId).ToList(); Services = db.Services.Where(a => a.FuneralHome.Id == HomeId).ToList(); } else { // Analytics = db.Analytics.Where(a => a.Video.ServiceId == ServiceId).ToList(); } } } //List<IpAddressObject> addresses = new List<IpAddressObject>(); //foreach (var an in Analytics) //{ // if (an.Latitude != 0 && an.Longitude != 0) // { // //Database got mucked up with a bunch of hard coded values // //So lets exclude those IP addresses from the heat map // if (an.IPAddress != "174.17.56.90") // { // IpAddressObject add = new IpAddressObject(); // add.IpAdd = an.IPAddress; // add.latitude = an.Latitude; // add.longitude = an.Longitude; // addresses.Add(add); // } // } //} DateTime LastWeek = DateTime.Now.AddDays(-7); List <Analytic> thisWeekAnalytics = Analytics.Where(a => a.CreateDate > LastWeek).ToList(); string mostViewedHome = ""; int HighestVIews = 0; int popularhomeId = 0; foreach (var home in Homes) { int homeViews = thisWeekAnalytics.Where(a => a.Video.Service.FuneralHome.Id == home.Id).Count(); if (homeViews > HighestVIews) { mostViewedHome = home.Name; HighestVIews = homeViews; popularhomeId = home.Id; } } //CRMFuneralHome popFH = db.CRMFuneralHome.Where(f => f.FuneralHomeId == popularhomeId).FirstOrDefault(); //CRMContact PopularHomePicCont = null; //if(popFH !=null) //{ // PopularHomePicCont = popFH.PrimaryCRMContact; //} // if(PopularHomePicCont!=null) // { // ADVM.PopularHomeOfTheWeekImage = PopularHomePicCont.PictureFileName; // } // ADVM.PopularHomeOfTheWeek = mostViewedHome; //ADVM.PopularHomeNumOfViews = HighestVIews; //ADVM.ServicesBarChartArray = Admin.GetServicesBarChart(Services, DateTime.Now.AddMonths(-3), DateTime.Now); //AVM.Details = addresses; //CalculateAnalytics.PageViews(ref ADVM, Analytics, Homes); // CalculateAnalytics.AverageTime(ref AVM, Analytics); //ADVM.NeedsToBeContacted = Admin.GetContactsThatNeedToBeContacted(db); //Admin.dashboardlinechart(ref ADVM, Analytics); //CalculateAnalytics.linechart(ref AVM, Analytics); ADVM.TotalFuneralsWithVideos = Admin.GetTotalServicesWithVideo(Services); ADVM.MonthlyFuneralsWithVideos = Admin.GetServicesThisMonthWithVideo(Services); ADVM.LowUsageHomes = CalculateAnalytics.LowUsageHomes(Homes); return(View(ADVM)); }
public static void PageViews(ref AnalyticDashboardViewModel avm, List <Analytic> analytics, List <FuneralHome> homes) { List <Service> services = new List <Service>(); //List<string> owernames = new List<string>(); foreach (var home in homes) { foreach (var s in home.Services.ToList()) { services.Add(s); //owernames.Add(s.FuneralHome.Owner.Name); } } DateTime today = DateTime.Now; int totalViews = analytics.Count(); int todayViews = analytics.Where(a => a.CreateDate > today.AddDays(-1) && a.CreateDate < today).Count(); int weekViews = analytics.Where(a => a.CreateDate > today.AddDays(-7) && a.CreateDate < today).Count(); int monthViews = analytics.Where(a => a.CreateDate > today.AddMonths(-1) && a.CreateDate < today).Count(); int VideoCount = 0; int PDFCount = 0; int VideoAndPdf = 0; int totalServices = 0; foreach (var s in services) { if (s.FuneralHome.Owner != null && s.FuneralHome.Owner.Name != "DevHome") { totalServices++; if (s.Video != null) { VideoCount++; } if (s.PDF != null) { PDFCount++; } if (s.Video != null && s.PDF != null) { VideoAndPdf++; } } } double percentWithVideos = Math.Round(((double)VideoCount / (double)totalServices) * 100, 0); double percentWithPdf = Math.Round(((double)PDFCount / (double)totalServices) * 100, 0); double percentWithBoth = Math.Round(((double)VideoAndPdf / (double)totalServices) * 100, 0); avm.TotalVideoViews = totalViews; avm.TotalFuneralVideos = VideoCount; avm.TotalFuneralPDFs = PDFCount; //avm.FuneralsWithVideos = percentWithVideos; avm.FuneralsWithPDFs = percentWithPdf; avm.FuneralsWithBoth = percentWithBoth; avm.TodayViews = todayViews; avm.WeekViews = weekViews; avm.MonthViews = monthViews; }
public ActionResult Dashboard() { if (!User.IsInRole("Admin")) { return(View("NotFound")); } //TODO: write logic to derive the owner id based on user that is logged in int ownerId = 2; List <FuneralHome> Homes = db.FuneralHomes.Where(f => f.DevHome == false && f.OwnerId == ownerId).ToList(); List <Analytic> Analytics = new List <Analytic>(); AnalyticViewModel AVM = new AnalyticViewModel(); AnalyticDashboardViewModel ADVM = new AnalyticDashboardViewModel(); List <Service> Services = new List <Service>(); Analytics = db.Analytics.Where(a => a.Video.Service.FuneralHome.DevHome == false && a.Video.Service.FuneralHome.OwnerId == ownerId).ToList(); Services = db.Services.Where(s => s.FuneralHome.DevHome == false && s.FuneralHome.OwnerId == ownerId).ToList(); List <IpAddressObject> addresses = new List <IpAddressObject>(); foreach (var an in Analytics) { if (an.Latitude != 0 && an.Longitude != 0) { //Database got mucked up with a bunch of hard coded values //So lets exclude those IP addresses from the heat map if (an.IPAddress != "174.17.56.90") { IpAddressObject add = new IpAddressObject(); add.IpAdd = an.IPAddress; add.latitude = an.Latitude; add.longitude = an.Longitude; addresses.Add(add); } } } DateTime LastWeek = DateTime.Now.AddDays(-7); List <Analytic> thisWeekAnalytics = Analytics.Where(a => a.CreateDate > LastWeek).ToList(); string mostViewedHome = ""; int HighestVIews = 0; int popularhomeId = 0; foreach (var home in Homes) { int homeViews = thisWeekAnalytics.Where(a => a.Video.Service.FuneralHome.Id == home.Id).Count(); if (homeViews > HighestVIews) { mostViewedHome = home.Name; HighestVIews = homeViews; popularhomeId = home.Id; } } CRMFuneralHome popFH = db.CRMFuneralHome.Where(f => f.FuneralHomeId == popularhomeId).FirstOrDefault(); CRMContact PopularHomePicCont = null; if (popFH != null) { PopularHomePicCont = popFH.PrimaryCRMContact; } if (PopularHomePicCont != null) { ADVM.PopularHomeOfTheWeekImage = PopularHomePicCont.PictureFileName; } ADVM.PopularHomeOfTheWeek = mostViewedHome; ADVM.PopularHomeNumOfViews = HighestVIews; ADVM.ServicesBarChartArray = Admin.GetServicesBarChart(Services, DateTime.Now.AddMonths(-3), DateTime.Now); AVM.Details = addresses; CalculateAnalytics.PageViews(ref ADVM, Analytics, Homes); CalculateAnalytics.AverageTime(ref AVM, Analytics); Admin.dashboardlinechart(ref ADVM, Analytics); CalculateAnalytics.linechart(ref AVM, Analytics); ADVM.TotalFuneralsWithVideos = Admin.GetTotalServicesWithVideo(Services); ADVM.MonthlyFuneralsWithVideos = Admin.GetServicesThisMonthWithVideo(Services); ADVM.LowUsageHomes = CalculateAnalytics.LowUsageHomes(Homes); return(View(ADVM)); }