public JsonResult LocaleStatistics(List <int> AdIds, string sDate = "", string eDate = "") { var ads = service.GetUserAds(User.Identity.GetUserId()).Where(a => AdIds.Contains(a.Id)); List <LocaleVisitorsTable> table = new List <LocaleVisitorsTable>(); CompareChartModel chartCompare = new CompareChartModel(); //var sessionsByWeek = ads.SelectMany(a => a.AdSessions).Where(a => a.DateTimeStart.Date.CompareTo(date.Date) == 0); var sessionsByLocale = ads.SelectMany(a => a.AdSessions).GroupBy(a => a.UserLocale); StatChartJS chartModel = new StatChartJS(); chartModel.name = "Лояльность по странам"; foreach (var session in sessionsByLocale) { LocaleVisitorsTable row = new LocaleVisitorsTable(); row.Locale = session.Key; row.ViewsByWeek = session.Count(a => a.DateTimeStart.AddDays(7).CompareTo(DateTime.Now) > 0).ToString(); row.ViewsByMonth = session.Count(a => a.DateTimeStart.AddMonths(1).CompareTo(DateTime.Now) > 0).ToString(); chartModel.labels.Add(session.Key); chartModel.data.Add(row.ViewsByMonth); row.PopularPresentation = ads.First(b => b.Id == session .GroupBy(a => a.AdId) .OrderByDescending(a => a.Count()) .First().Key).Name; table.Add(row); } chartCompare.charts.Add(chartModel); return(Json(chartCompare)); }
public HttpResponseMessage LocaleVisitorsStatistics(bool chart = false) { var ads = service.GetUserAds(User.Identity.GetUserId()); List <LocaleVisitorsTable> table = new List <LocaleVisitorsTable>(); CompareChartModel chartCompare = new CompareChartModel(); if (ads.Count > 0) { //var sessionsByWeek = ads.SelectMany(a => a.AdSessions).Where(a => a.DateTimeStart.Date.CompareTo(date.Date) == 0); var sessionsByLocale = ads.SelectMany(a => a.AdSessions).GroupBy(a => a.UserLocale); StatChartJS chartModel = new StatChartJS(); chartModel.name = "Лояльность по странам"; foreach (var session in sessionsByLocale) { LocaleVisitorsTable row = new LocaleVisitorsTable(); row.Locale = session.Key; row.ViewsByWeek = session.Count(a => a.DateTimeStart.AddDays(7).CompareTo(DateTime.Now) > 0).ToString(); row.ViewsByMonth = session.Count(a => a.DateTimeStart.AddMonths(1).CompareTo(DateTime.Now) > 0).ToString(); chartModel.labels.Add(session.Key); chartModel.data.Add(row.ViewsByMonth); row.PopularPresentation = ads.First(b => b.Id == session .GroupBy(a => a.AdId) .OrderByDescending(a => a.Count()) .First().Key).Name; table.Add(row); } } return(Request.CreateResponse(HttpStatusCode.OK, table)); }
public JsonResult FunnelStatistics(List <int> AdIds, string sDate = "", string eDate = "") { List <SimpleAdModel> ads = new List <SimpleAdModel>(); CompareChartModel chart = new CompareChartModel(); if (AdIds == null || AdIds.Count == 0) { return(Json(new StatChartJS())); } foreach (int adId in AdIds) { var ad = service.GetAdById(adId); ads.Add(ad); } DateTime startDateTime = DateTime.MinValue; DateTime endDateTime = DateTime.MaxValue; if (sDate != "") { startDateTime = DateTime.Parse(sDate); } if (eDate != "") { endDateTime = DateTime.Parse(eDate); } foreach (var ad in ads) { StatChartJS jsModel = new StatChartJS(); var clicks = ad.AdSessions .SelectMany(a => a.Activities) .Where(c => c.StartTime.CompareTo(startDateTime) >= 0 && c.EndTime.CompareTo(endDateTime) <= 0).GroupBy(d => d.CurrentStateName).OrderByDescending(e => e.Count()); jsModel.name = ad.Name; foreach (var clickGroup in clicks) { var clickElem = clickGroup.First(); //AdState state = service.GetStateByAdIdAndVideoId(ad.Id, clickElem.ClickCurrentStage, clickElem.Activity.CurrentStateName); jsModel.labels.Add(clickElem.CurrentStateName); jsModel.data.Add(clickGroup.Count().ToString()); } chart.charts.Add(jsModel); } return(Json(chart)); }
public JsonResult BrowserStatistics(List <int> AdIds, string sDate = "", string eDate = "") { List <SimpleAdModel> ads = new List <SimpleAdModel>(); CompareChartModel chart = new CompareChartModel(); if (AdIds == null || AdIds.Count == 0) { return(Json(new StatChartJS())); } foreach (int adId in AdIds) { var ad = service.GetAdById(adId); ads.Add(ad); } DateTime startDateTime = DateTime.MinValue; DateTime endDateTime = DateTime.MaxValue; if (sDate != "") { startDateTime = DateTime.Parse(sDate); } if (eDate != "") { endDateTime = DateTime.Parse(eDate); } foreach (var ad in ads) { StatChartJS jsModel = new StatChartJS(); jsModel.labels = Browsers.NAMES.ToList(); jsModel.name = ad.Name; foreach (var browserName in jsModel.labels) { jsModel.data.Add(ad.AdSessions .Where(b => b.UserBrowser.Equals(browserName) && b.DateTimeStart.CompareTo(startDateTime) >= 0 && b.DateTimeEnd.CompareTo(endDateTime) <= 0).Count().ToString()); } chart.charts.Add(jsModel); } return(Json(chart)); }
public JsonResult ClickStatistics(List <int> AdIds, string sDate = "", string eDate = "", int interval = 1, bool isMinificate = false) { List <SimpleAdModel> ads = new List <SimpleAdModel>(); if (AdIds == null || AdIds.Count == 0) { return(Json(new CompareChartModel())); } foreach (int adId in AdIds) { var ad = service.GetAdById(adId); if (ad.AdSessions.Count > 0) { ads.Add(ad); } } CompareChartModel chart = new CompareChartModel(); DateTime startDate = DateTime.Now; DateTime endDate = DateTime.Now; try { startDate = ads.Min(a => a.AdSessions.OrderBy(b => b.DateTimeStart).First().DateTimeStart); endDate = ads.Max(a => a.AdSessions.OrderByDescending(b => b.DateTimeStart).First().DateTimeStart); } catch (Exception ex) { return(Json(chart)); } if (sDate != "") { DateTime dt = DateTime.Parse(sDate); if (dt.CompareTo(startDate) > 0) { startDate = dt; } } if (eDate != "") { DateTime dt = DateTime.Parse(eDate); if (dt.CompareTo(endDate) < 0) { endDate = dt; } } foreach (var ad in ads) { StatChartJS model = new StatChartJS(); model.name = ad.Name; for (DateTime curDate = startDate; curDate <= endDate; curDate = curDate.Date.AddDays(interval)) { DateTime estimate = curDate.Date.AddDays(interval); model.labels.Add(curDate.ToShortDateString()); List <AdSession> sessions = new List <AdSession>(); foreach (var s in ad.AdSessions) { if (s.DateTimeStart.Date.CompareTo(curDate.Date) >= 0 && s.DateTimeStart.CompareTo(estimate.Date) <= 0) { sessions.Add(s); } } if (sessions.Count() == 0) { model.data.Add("0"); } else { model.data.Add(sessions.SelectMany(a => a.Activities).SelectMany(b => b.Clicks).Count().ToString()); } } model.name = ad.Name; chart.charts.Add(model); } return(Json(chart)); }