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);
        }
        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;
        }
 public ActionResult Index(ChartFormModel chartFormModel)
 {
     chartFormModel.UserId = this.CurrentUser.Id;
         
     return SetupChartFormModel(chartFormModel);
 }
        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");
        }