public ActionResult ExportData(int id, DataFilter filter)
        {
            DateRange dateRange           = DateRangeConverter.GetDateRange(filter);
            ExportSchedulingResult result = this.exportService.ScheduleExport(id, dateRange);

            return(this.Json(result, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// Получить метрики.
        /// </summary>
        public ActionResult Metrics(int id, DataFilter filter)
        {
            DashboardMetrics metrics = this.metricsService.GetDashboardMetrics(id, DateRangeConverter.GetDateRange(filter));
            var viewModel            = new DashboardViewModel(metrics);

            return(this.MetricsView("_DashboardMetrics", viewModel));
        }
        /// <summary>
        /// Получить график.
        /// </summary>
        public ActionResult Chart(int id, DataFilter filter)
        {
            var trendChartBuilder = new DashboardTrendChartBuilder(this.metricsService);

            IEnumerable <TrendChartData> trendChartData = filter.Period != FilteringPeriod.Other
                ? trendChartBuilder.GetCharts(id, filter.Period)
                : trendChartBuilder.GetCharts(id, DateRangeConverter.GetDateRange(filter));
            List <TrendChartData> data = trendChartData.ToList();

            data[0].Name       = "Динамика постов админов";
            data[0].ShowBars   = true;
            data[0].ShowLines  = false;
            data[0].ShowPoints = false;
            data[0].Stacking   = true;
            data[0].BarWidth   = 0.4;
            data[0].BarAlign   = BarAlign.Center;

            data[1].Name       = "Динамика постов пользователей";
            data[1].ShowBars   = true;
            data[1].ShowLines  = false;
            data[1].ShowPoints = false;
            data[1].BarOrder   = 1;
            data[1].Stacking   = true;
            data[1].BarWidth   = 0.4;
            data[1].BarAlign   = BarAlign.Center;

            data[2].Name      = "Динамика общего количества постов";
            data[2].BarOrder  = 2;
            data[2].FillLines = false;

            return(this.Chart(trendChartData));
        }
        public IEnumerable <TrendChartData> GetCharts(int projectId, FilteringPeriod period)
        {
            DateRange dateRange = DateRangeConverter.GetDateRange(period);

            dateRange.IsSpecified = false;
            Periodicity            periodicity = this.GetPeriodicity(period);
            IList <TrendChartData> data;
            DateRange timeLimit = this.GetLimit(projectId);

            if (this.SetLimit(dateRange, timeLimit) || (timeLimit != null))
            {
                data = this.GetPoints(projectId, dateRange, periodicity).Select(x => new TrendChartData(x, period)).ToList();

                for (int i = 0; i < data.Count; i++)
                {
                    data[i].Limited      = true;
                    data[i].MaxTimeLimit = timeLimit.To.ToString();
                    data[i].MinTimeLimit = timeLimit.From.ToString();
                }
            }
            else
            {
                data = this.GetPoints(projectId, dateRange, periodicity).Select(x => new TrendChartData(x, period)).ToList();
            }

            return(data);
        }
        public ActionResult GetMostPopularContents(int id, DataFilter filter)
        {
            var converter       = new UiTableModelsConverter();
            var contentEntities = this.metricsService.GetMostPopularContent(id, DateRangeConverter.GetDateRange(filter));

            return(this.MetricsView("_MostPopularContent", contentEntities.Select(converter.CreateContentModel).ToList()));
        }
        public ActiveUserJsonModel GetActiveUserModel(int id, DataFilter filter, ActiveUserJsonModelBuilderOptions options)
        {
            var result = new ActiveUserJsonModel();

            if (filter.Period == FilteringPeriod.Other && filter.DateRange.From > filter.DateRange.To)
            {
                return(result);
            }

            var activeUsers  = this.metricsService.GetUserMetrics(id, DateRangeConverter.GetDateRange(filter), options.UserTableCount);
            var usersList    = activeUsers.MostActiveUsers.Take(options.ReportCount).ToList();
            var usersListIds = usersList.Select(u => u.Id).ToArray();
            var users        = new ActiveUserViewModel(activeUsers);

            if (users.MostActiveUsers.Count != 0)
            {
                result.Table              = this.GetTable(users.MostActiveUsers.ToList());
                result.InterestsData      = this.GetInterests(id, usersListIds, options.InterestCount);
                result.AgeData            = this.GetAgeInfo(id, usersList);
                result.GenderData         = this.GetGenderInfo(id, usersList);
                result.EducationData      = this.GetEducationInfo(id, usersList);
                result.CountryAndCityData = this.GetCountryAndCityInfo(id, usersListIds);
            }

            result.Table = this.GetTable(users.MostActiveUsers.ToList());
            return(result);
        }
        public ActionResult SocialChart(int id, DataFilter filter)
        {
            var trendChartBuilder = new SocialTrendChartBuilder(this.metricsService);

            var trendChartData = filter.Period != FilteringPeriod.Other
                ? trendChartBuilder.GetCharts(id, filter.Period)
                : trendChartBuilder.GetCharts(id, DateRangeConverter.GetDateRange(filter));

            var data = trendChartData.ToList();

            data[0].Name       = "Кол-во участников";
            data[0].YaxisOrder = 2;
            data[0].FillLines  = false;

            /*data[1].ShowBars = true;
             * data[1].ShowLines = false;
             * data[1].ShowPoints = false;
             * data[1].BarOrder = 1;
             * data[1].Name = "Вступили";
             *
             * data[2].ShowBars = true;
             * data[2].ShowLines = false;
             * data[2].ShowPoints = false;
             * data[2].BarOrder = 2;
             * data[2].Name = "Покинули";*/

            return(this.Chart(trendChartData));
        }
        public TrendChartData GetChart(int projectId, FilteringPeriod period)
        {
            DateRange   dateRange            = DateRangeConverter.GetDateRange(period);
            Periodicity periodicity          = this.GetPeriodicity(period);
            IEnumerable <PointInTime> points = this.GetPoints(projectId, dateRange, periodicity);

            return(new TrendChartData(points, period));
        }
        public ActionResult Chart(int id, DataFilter filter)
        {
            var       trendChartBuilder = new PhotoTrendChartBuilder(this.metricsService);
            DateRange dateRange         = DateRangeConverter.GetDateRange(filter);

            TrendChartData trendChartData = filter.Period != FilteringPeriod.Other
                ? trendChartBuilder.GetChart(id, filter.Period)
                : trendChartBuilder.GetChart(id, dateRange);

            var            trendChartBuilder2 = new VideoTrendChartBuilder(this.metricsService);
            TrendChartData trendChartData2    = filter.Period != FilteringPeriod.Other
                ? trendChartBuilder2.GetChart(id, filter.Period)
                : trendChartBuilder2.GetChart(id, dateRange);

            trendChartData2.YaxisOrder = 3;
            trendChartData.Name        = "Фото";
            trendChartData2.Name       = "Видео";

            return(this.Chart(new[] { trendChartData, trendChartData2 }));
        }
        public ActionResult GetAverageCount(int id, DataFilter filter)
        {
            var data  = this.metricsService.GetLikesCommentsRepostsAverageCount(id, DateRangeConverter.GetDateRange(filter)).ToList();
            var graf1 = new TrendChartData();

            graf1.BarOrder       = 1;
            graf1.Name           = "Лайки";
            graf1.ShowLabelInTip = true;
            graf1.Values.Add(new ChartPoint(data[0][0].Item, data[0][0].Value));
            graf1.Values.Add(new ChartPoint(data[0][1].Item, data[0][1].Value));
            graf1.Values.Add(new ChartPoint(data[0][2].Item, data[0][2].Value));

            var graf2 = new TrendChartData();

            graf2.BarOrder       = 2;
            graf2.Name           = "Комментарии";
            graf2.ShowLabelInTip = true;
            graf2.Values.Add(new ChartPoint(data[1][0].Item, data[1][0].Value));
            graf2.Values.Add(new ChartPoint(data[1][1].Item, data[1][1].Value));
            graf2.Values.Add(new ChartPoint(data[1][2].Item, data[1][2].Value));

            var graf3 = new TrendChartData();

            graf3.BarOrder       = 3;
            graf3.Name           = "Републикации";
            graf3.ShowLabelInTip = true;
            graf3.Values.Add(new ChartPoint(data[2][0].Item, data[2][0].Value));
            graf3.Values.Add(new ChartPoint(data[2][1].Item, data[2][1].Value));
            graf3.Values.Add(new ChartPoint(data[2][2].Item, data[2][2].Value));

            var result = new List <TrendChartData>()
            {
                graf1, graf2, graf3
            };

            return(this.Chart(result));
        }
        /// <summary>
        /// Получить график.
        /// </summary>
        public ActionResult Chart(int id, DataFilter filter)
        {
            var       trendChartBuilder = new InteractionRateTrendChartBuilder(this.metricsService);
            DateRange dateRange         = DateRangeConverter.GetDateRange(filter);

            IEnumerable <TrendChartData> trendChartData = filter.Period != FilteringPeriod.Other
                ? trendChartBuilder.GetCharts(id, filter.Period)
                : trendChartBuilder.GetCharts(id, dateRange);

            List <TrendChartData> data = trendChartData.ToList();

            data[0].Name       = "IR";
            data[0].YaxisOrder = 2;

            data[1].ShowBars   = true;
            data[1].ShowLines  = false;
            data[1].ShowPoints = false;
            data[1].BarOrder   = 1;
            data[1].BarWidth   = 0.1;
            data[1].Name       = "Комментарии";

            data[2].ShowBars   = true;
            data[2].ShowLines  = false;
            data[2].ShowPoints = false;
            data[2].BarOrder   = 2;
            data[2].BarWidth   = 0.1;
            data[2].Name       = "Лайки";

            data[3].ShowBars   = true;
            data[3].ShowLines  = false;
            data[3].ShowPoints = false;
            data[3].BarOrder   = 3;
            data[3].BarWidth   = 0.1;
            data[3].Name       = "Репосты";

            return(this.Chart(trendChartData));
        }
        public ActionResult CompareGroups(int id, DataFilter filter, IList <int> concurrentIds)
        {
            this.analysisService.UpdateProjectsConcurrents(id, concurrentIds);
            var analysis  = this.analysisService.GetConcurrentAnalysis(id, concurrentIds, DateRangeConverter.GetDateRange(filter));
            var converter = new UiTableCompareGroupModelConverter();
            IList <UiTableColumn> columnModel = converter.CreateCompareGroupsModel(analysis);

            return(this.MetricsView("_GroupComparisonTable", columnModel));
        }