public JsonResult UserOverTimeChartResult(ChartLoadRequestObject reqObj) { DateTime startDate = string.IsNullOrEmpty(reqObj.StartDate) ? System.DateTime.Now.AddDays(-365) : DateTime.ParseExact(reqObj.StartDate, "dd/MM/yyyy", CultureInfo.InvariantCulture); DateTime endDate = string.IsNullOrEmpty(reqObj.EndDate) ? System.DateTime.Now : DateTime.ParseExact(reqObj.EndDate, "dd/MM/yyyy", CultureInfo.InvariantCulture); string connectionString = ConfigurationManager.ConnectionStrings["NHSConStr"].ConnectionString; DBEngine dBEngine = new DBEngine(connectionString); List <UserCount> users = dBEngine.GetActiveUsers(startDate, endDate, Convert.ToInt32(Session["LoginUserID"])); List <UserCount> usersActivity = dBEngine.GetActiveUsersActivity(startDate, endDate, Convert.ToInt32(Session["LoginUserID"])); var filteredUserCount = new List <UserCount>(); if (reqObj.RequestType == DataTypeEnum.yearly.ToString()) { filteredUserCount = users.GroupBy(x => new { x.DistinctYear }) .Select(y => new UserCount { DistinctYear = y.Key.DistinctYear, ActivityCount = y.GroupBy(z => z.UserName).Count(), //UserName = y.Key.UserName }).ToList(); } else if (reqObj.RequestType == DataTypeEnum.monthly.ToString()) { filteredUserCount = users.GroupBy(x => new { x.Month }) .Select(y => new UserCount { Month = y.Key.Month, ActivityCount = y.GroupBy(z => z.UserName).Count(), //UserName = y.Key.UserName }).ToList(); } else if (reqObj.RequestType == DataTypeEnum.weekly.ToString()) { filteredUserCount = users.GroupBy(x => new { x.Week }) .Select(y => new UserCount { Week = y.Key.Week, ActivityCount = y.GroupBy(z => z.UserName).Count(), //UserName = y.Key.UserName }).ToList(); } else if (reqObj.RequestType == DataTypeEnum.daily.ToString()) { filteredUserCount = users.GroupBy(x => new { x.Day }) .Select(y => new UserCount { Day = y.Key.Day, ActivityCount = y.GroupBy(z => z.UserName).Count(), //UserName = y.Key.UserName }).ToList(); } else { filteredUserCount = users; } var userCounter = new List <string>(); var chartInfo = new List <ChartResponseInformation>(); var chartOptions = new ChartOptionInformation(); var years = new List <string>(); var months = new List <string>(); var weeks = new List <string>(); var days = new List <string>(); foreach (var row in filteredUserCount) { userCounter.Add(row.ActivityCount.ToString()); if (reqObj.RequestType == DataTypeEnum.yearly.ToString()) { years.Add(row.DistinctYear); } if (reqObj.RequestType == DataTypeEnum.monthly.ToString()) { months.Add(row.Month); } if (reqObj.RequestType == DataTypeEnum.weekly.ToString()) { weeks.Add(row.Week); } if (reqObj.RequestType == DataTypeEnum.daily.ToString()) { days.Add(row.Day); } } #region Static Data area chartInfo = new List <ChartResponseInformation> { new ChartResponseInformation() { name = "Active Users", data = userCounter.ToArray() } }; chartOptions = new ChartOptionInformation() { X_axisCategoryType = "category", X_axisCategories = reqObj.RequestType == DataTypeEnum.yearly.ToString() ? years.ToArray() : reqObj.RequestType == DataTypeEnum.monthly.ToString() ? months.ToArray() : reqObj.RequestType == DataTypeEnum.weekly.ToString() ? weeks.ToArray() : reqObj.RequestType == DataTypeEnum.daily.ToString() ? days.ToArray() : years.ToArray() }; #endregion var result = new ChartResultResponse() { ChartInfo = chartInfo, ChartOptions = chartOptions, UsersCountInformation = usersActivity }; return(Json(result, JsonRequestBehavior.AllowGet)); }