public void WhenJsonGetFleetStatisticSeries_ThenReturnsJsonData()
        {
            var user = new User {UserId = 1, AuthorizationId = "AuthorizationId", DisplayName = "DisplayName"};

            userServicesMock.Setup(r => r.GetUserByClaimedIdentifier(It.IsAny<string>())).Returns(user);

            var target = new HomeController(
                userServicesMock.Object,
                chartDataServiceMock.Object);

            target.SetFakeControllerContext();
            target.SetUserIdentity(new MileageStatsIdentity(this.user.AuthorizationId,
                                                            this.user.DisplayName,
                                                            this.user.UserId));

            var series = new StatisticSeries();

            chartDataServiceMock.Setup(x => x.CalculateSeriesForUser(user.UserId, null, null)).Returns(
                series);

            ActionResult actual = target.JsonGetFleetStatisticSeries();

            var actualJsonResult = actual as JsonResult;
            Assert.NotNull(actualJsonResult);
            Assert.Same(series, actualJsonResult.Data);
        }
Esempio n. 2
0
 public StatisticSeries CalculateSeriesForVehicle(int userId, int vehicleId, DateTime? startDate,
                                                  DateTime? endDate, Func<double, double> fuelEfficiencyUserConversionFunc, Func<double, double> distanceUserConversionFunc)
 {
     var series = new StatisticSeries();
     CalculateSeriesForVehicle(userId, vehicleId, series, startDate, endDate, fuelEfficiencyUserConversionFunc, distanceUserConversionFunc);
     return series;
 }
 public StatisticSeries CalculateSeriesForVehicle(int userId, int vehicleId, DateTime? startDate,
                                                  DateTime? endDate)
 {
     var series = new StatisticSeries();
     CalculateSeriesForVehicle(userId, vehicleId, series, startDate, endDate);
     return series;
 }
        public StatisticSeries CalculateSeriesForUser(int userId, DateTime? startDate, DateTime? endDate)
        {
            var vehicles = _vehicleRepository.GetVehicles(userId);

            var series = new StatisticSeries();

            foreach (var vehicle in vehicles)
            {
                CalculateSeriesForVehicle(vehicle, series, startDate, endDate);
            }

            return series;
        }
Esempio n. 5
0
        public StatisticSeries CalculateSeriesForUser(int userId, DateTime? startDate, DateTime? endDate, Func<double, double> fuelEfficiencyUserConversionFunc, Func<double, double> distanceUserConversionFunc)
        {
            var vehicles = _vehicleRepository.GetVehicles(userId);

            var series = new StatisticSeries();

            foreach (var vehicle in vehicles)
            {
                CalculateSeriesForVehicle(vehicle, series, startDate, endDate, fuelEfficiencyUserConversionFunc, distanceUserConversionFunc);
            }

            return series;
        }
Esempio n. 6
0
        private static void CalculateSeriesForVehicle(Vehicle vehicle, StatisticSeries series, DateTime? startDate, DateTime? endDate, Func<double, double> fuelEfficiencyUserConversionFunc, Func<double, double> distanceUserConversionFunc)
        {
            Debug.Assert(series != null);

            DateTime startFilterDate = startDate ?? DateTime.MinValue;
            DateTime endFilterDate = endDate ?? DateTime.UtcNow;

            var fillUps = vehicle.Fillups;

            var fillupGroups = from fillUp in fillUps
                               where ((fillUp.Date >= startFilterDate) && (fillUp.Date <= endFilterDate))
                               group fillUp by new { Year = fillUp.Date.Year, Month = fillUp.Date.Month }
                                   into g
                                   orderby g.Key.Year, g.Key.Month
                                   select g;

            var firstFillUp = fillUps.OrderBy(x => x.Date).FirstOrDefault();

            VehicleStatisticsModel statistics;
            foreach (var fillupGroup in fillupGroups)
            {
                var includeFirstFillup = (fillupGroup.Key.Year != firstFillUp.Date.Year) ||
                                         (fillupGroup.Key.Month != firstFillUp.Date.Month);

                statistics = CalculateStatistics.Calculate(fillupGroup, includeFirstFillup);
                if (statistics.TotalDistance == 0 && !statistics.Odometer.HasValue)
                {
                    continue;
                }

                Debug.Assert(firstFillUp != null);

                var seriesEntry = new StatisticSeriesEntry
                                      {
                                          Id = vehicle.VehicleId,
                                          Name = vehicle.Name,
                                          Year = fillupGroup.Key.Year,
                                          Month = fillupGroup.Key.Month,
                                          AverageFuelEfficiency = Math.Round(fuelEfficiencyUserConversionFunc(statistics.AverageFuelEfficiency), 2),
                                          TotalCost = Math.Round(statistics.TotalCost, 2),
                                          TotalDistance = distanceUserConversionFunc(statistics.TotalDistance),
                                      };
                series.Entries.Add(seriesEntry);
            }
        }
        private void CalculateSeriesForVehicle(Vehicle vehicle, StatisticSeries series, DateTime? startDate, DateTime? endDate)
        {
            Debug.Assert(series != null);

            DateTime startFilterDate = startDate ?? DateTime.MinValue;
            DateTime endFilterDate = endDate ?? DateTime.UtcNow;

            var fillUps = _fillupRepository.GetFillups(vehicle.VehicleId);

            var fillupGroups = from fillUp in fillUps
                               where ((fillUp.Date >= startFilterDate) && (fillUp.Date <= endFilterDate))
                               group fillUp by new { Year = fillUp.Date.Year, Month = fillUp.Date.Month }
                                   into g
                                   orderby g.Key.Year, g.Key.Month
                                   select g;

            var firstFillUp = fillUps.OrderBy(x => x.Date).FirstOrDefault();

            VehicleStatisticsModel statistics;
            foreach (var fillupGroup in fillupGroups)
            {
                var includeFirstFillup = (fillupGroup.Key.Year != firstFillUp.Date.Year) ||
                                                    (fillupGroup.Key.Month != firstFillUp.Date.Month);

                statistics = CalculateStatistics.Calculate(fillupGroup, includeFirstFillup);

                Debug.Assert(firstFillUp != null);
                

                var seriesEntry = new StatisticSeriesEntry
                {
                    Id = vehicle.VehicleId,
                    Name = vehicle.Name,
                    Year = fillupGroup.Key.Year,
                    Month = fillupGroup.Key.Month,
                    AverageFuelEfficiency = Math.Round(statistics.AverageFuelEfficiency, 2),
                    TotalCost = Math.Round(statistics.TotalCost, 2),
                    TotalDistance = statistics.TotalDistance,
                };
                series.Entries.Add(seriesEntry);
            }            
        }
        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;
        }
 private void CalculateSeriesForVehicle(int userId, int vehicleId, StatisticSeries series, DateTime? startDate, DateTime? endDate)
 {
     var vehicle = _vehicleRepository.GetVehicle(userId, vehicleId);
     CalculateSeriesForVehicle(vehicle, series, startDate, endDate);
 }
Esempio n. 10
0
 private void CalculateSeriesForVehicle(int userId, int vehicleId, StatisticSeries series, DateTime? startDate, DateTime? endDate, Func<double, double> fuelEfficiencyUserConversionFunc, Func<double, double> distanceUserConversionFunc)
 {
     var vehicle = _vehicleRepository.GetVehicle(userId, vehicleId);
     CalculateSeriesForVehicle(vehicle, series, startDate, endDate, fuelEfficiencyUserConversionFunc, distanceUserConversionFunc);
 }