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); }
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; }
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; }
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); }
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); }