Example #1
0
        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));
        }