public JsonResult SessionAvgTimeByUserByModuleChartResult(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 <UserModuleDetails> userModuleDetails = dBEngine.GetUserModuleDetails(startDate, endDate, Convert.ToInt32(Session["LoginUserID"])); List <UserModuleInfo> userModuleInfo = dBEngine.GetUserModuleInfo(startDate, endDate, Convert.ToInt32(Session["LoginUserID"])); var chartInfo = new List <ChartResponseInformation>(); var filteredResult = userModuleDetails.GroupBy(x => new { x.UserName, x.ModuleName }).Select( y => new UserModuleDetails { UserName = y.Key.UserName, ModuleName = y.Key.ModuleName, ActivityCount = y.Count() }).ToList(); var chartOptions = new ChartOptionInformation(); var xAxisData = new List <string>(); var chartData = new List <ChartResponseInformation>(); var chartInfoData = new List <string>(); var dResult = filteredResult.GroupBy(x => x.ModuleName).ToList(); foreach (var moduleInfo in dResult) { chartData.Add(new ChartResponseInformation { name = moduleInfo.Key, data = filteredResult.Where(x => x.ModuleName == moduleInfo.Key).Select(x => x.ActivityCount.ToString()).ToArray() }); } foreach (var userData in filteredResult.GroupBy(x => x.UserName).ToList()) { if (!xAxisData.Any(x => x == userData.Key)) { xAxisData.Add(userData.Key); } } chartInfo = chartData; chartOptions = new ChartOptionInformation { X_axisCategoryType = "category", X_axisCategories = xAxisData.ToArray() }; var result = new ChartResultResponse(); if (reqObj.FilterByUserId != null && reqObj.FilterByUserId.Length > 0) { var seriesData = new List <ChartResponseInformation>(); var seriesCategoriesData = new List <string>(); foreach (var userId in reqObj.FilterByUserId) { var seriesDataIndex = Array.IndexOf(chartOptions.X_axisCategories, userId); seriesData.Add(chartInfo[seriesDataIndex]); seriesCategoriesData.Add(userId); } result = new ChartResultResponse() { ChartInfo = seriesData, ChartOptions = new ChartOptionInformation { X_axisCategoryType = "category", X_axisCategories = seriesCategoriesData.ToArray() } }; } else { result = new ChartResultResponse() { ChartInfo = chartInfo, ChartOptions = chartOptions, UserModuleInformation = userModuleInfo }; } return(Json(result, JsonRequestBehavior.AllowGet)); }