Example #1
0
        public ActionResult GetChartImage(ChartFormModel chartFormModel)
        {
            if (chartFormModel == null)
            {
                return(null);
            }

            byte[] chartBytes = null;

            switch (chartFormModel.ChartName)
            {
            case "FuelEfficiency":
                chartBytes = GetChartBytes(chartFormModel.UserId, x => x.AverageFuelEfficiency, Resources.ChartController_AverageFuelEfficiencyChart_Title, chartFormModel);
                break;

            case "TotalDistance":
                chartBytes = GetChartBytes(chartFormModel.UserId, x => x.TotalDistance, Resources.ChartController_TotalDistance_Title, chartFormModel);
                break;

            case "TotalCost":
                chartBytes = GetChartBytes(chartFormModel.UserId, x => x.TotalCost, Resources.ChartController_TotalCost_Title, chartFormModel);
                break;
            }


            if (chartBytes != null)
            {
                return(new FileContentResult(chartBytes, "image/jpeg"));
            }

            return(new FilePathResult(this.Url.Content("~/Content/trans_pixel.gif"), "image/gif"));
        }
Example #2
0
        private ActionResult SetupChartFormModel(ChartFormModel chartFormModel)
        {
            chartFormModel.AllVehicleModels = Using <GetVehicleListForUser>()
                                              .Execute(chartFormModel.UserId).ToArray();

            //Set default chart values
            if (string.IsNullOrEmpty(chartFormModel.ChartName))
            {
                chartFormModel.ChartName = "FuelEfficiency";

                var firstModel = chartFormModel.AllVehicleModels.FirstOrDefault();
                if (firstModel != null)
                {
                    chartFormModel.VehicleIds.Add(firstModel.VehicleId);
                }
            }

            return(new ContentTypeAwareResult(chartFormModel));
        }
Example #3
0
        public ActionResult Index(ChartFormModel chartFormModel)
        {
            chartFormModel.UserId = this.CurrentUser.Id;

            return(SetupChartFormModel(chartFormModel));
        }
Example #4
0
        private byte[] GetChartBytes(int userId, Func <StatisticSeriesEntry, double> yValueAccessor, string chartTitle, ChartFormModel chartFormModel)
        {
            Debug.Assert(yValueAccessor != null);

            int chartWidth  = DESKTOP_CHART_WIDTH;
            int chartHeight = DESKTOP_CHART_HEIGHT;

            StatisticSeries seriesData = new StatisticSeries();

            if (Request.Browser.IsMobileDevice)
            {
                chartWidth = Math.Min(Request.Browser.ScreenPixelsWidth, MOBILE_CHART_MAXWIDTH);

                foreach (var vehicleId in chartFormModel.VehicleIds)
                {
                    var seriesDataForVehicle = this.chartDataService.CalculateSeriesForVehicle(userId, vehicleId, chartFormModel.StartDate, chartFormModel.EndDate);
                    foreach (StatisticSeriesEntry statisticSeriesEntry in seriesDataForVehicle.Entries)
                    {
                        seriesData.Entries.Add(statisticSeriesEntry);
                    }
                }
            }
            else
            {
                seriesData = this.chartDataService.CalculateSeriesForUser(userId, DateTime.UtcNow.AddMonths(-12), null);
            }

            var selectedVehicleColors = new List <string>();

            if (chartFormModel.Positions == null)
            {
                selectedVehicleColors.Add(colors[0]);
            }
            else
            {
                foreach (var position in chartFormModel.Positions)
                {
                    selectedVehicleColors.Add(colors[position]);
                }
            }

            var themeColors = string.Join(";", selectedVehicleColors);
            var theme       = string.Format(CHARTS_THEME, themeColors);
            var myChart     = GetChartInstance(chartWidth, chartHeight, theme);


            if (!Request.Browser.IsMobileDevice)
            {
                myChart.AddTitle(chartTitle).AddLegend();
            }

            if (PlotMultipleChartLine(myChart, seriesData.Entries, yValueAccessor))
            {
                return(myChart.GetBytes("jpeg"));
            }

            return(null);
        }