diff --git a/Web/Controllers/LogController.cs b/Web/Controllers/LogController.cs index a8615ab..60e0e08 100644 --- a/Web/Controllers/LogController.cs +++ b/Web/Controllers/LogController.cs @@ -79,6 +79,7 @@ namespace MileageTraker.Web.Controllers public ActionResult MonthlyDriverMileage(LogQueryViewModel query) { var items = DataService.GetMonthlyDriverMileageItems(query); + items = items.OrderBy(i => i.DriverName); var report = new DriverMileageViewModel(items, query); diff --git a/Web/DAL/DataService.cs b/Web/DAL/DataService.cs index 7d0694d..b7738ca 100644 --- a/Web/DAL/DataService.cs +++ b/Web/DAL/DataService.cs @@ -196,13 +196,6 @@ namespace MileageTraker.Web.DAL let previousLog = log.VehiclePreviousLog select new { log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0) } group l by l.log.User into g - let miles = g.Sum(l => l.miles) - let gasPurchased = g.Sum(l => l.log.GasPurchased) - where miles > 0 || gasPurchased > 0 - let logPairs = - from i in g - orderby i.log.Date descending, i.log.EndOdometer descending - select new { PreviousLog = i.previousLog, Log = i.log } let vehicleLogs = from i in g group i by i.log.VehicleId into v @@ -211,7 +204,7 @@ namespace MileageTraker.Web.DAL let vehicleProg = vehicle.Prog let vehicleMiles = v.Sum(l => l.miles) let vehicleGasPurchased = v.Sum(l => l.log.GasPurchased) - where miles > 0 || gasPurchased > 0 + where vehicleMiles > 0 || vehicleGasPurchased > 0 let vehicleLogPairs = from i in v orderby i.log.Date descending, i.log.EndOdometer descending @@ -228,19 +221,12 @@ namespace MileageTraker.Web.DAL new { User = g.Key, - GasPurchased = gasPurchased, - Miles = miles, - LogPairs = logPairs, VehicleLogs = vehicleLogs }; return items.ToList().Select(i => new DriverMileageItem { DriverName = i.User.FullName, - GasPurchased = i.GasPurchased, - Miles = i.Miles, - LogPairs = i.LogPairs.ToList() - .Select(lp => new Tuple(lp.PreviousLog, lp.Log)), VehicleMileageItems = i.VehicleLogs.ToList().Select(v => new VehicleMileageItem { VehicleId = v.VehicleId, diff --git a/Web/ViewModels/DriverMileageItem.cs b/Web/ViewModels/DriverMileageItem.cs index 5c69118..4d750f4 100644 --- a/Web/ViewModels/DriverMileageItem.cs +++ b/Web/ViewModels/DriverMileageItem.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Linq; using MileageTraker.Web.ViewModels.Vehicle; @@ -8,10 +7,21 @@ namespace MileageTraker.Web.ViewModels public class DriverMileageItem { public string DriverName { get; set; } - public int Miles { get; set; } - public double GasPurchased { get; set; } - public IEnumerable> LogPairs { get; set; } public IEnumerable VehicleMileageItems { get; set; } - public int TripCount { get { return LogPairs.Count(); } } + + public int Miles + { + get { return VehicleMileageItems.Sum(i => i.Miles); } + } + + public double GasPurchased + { + get { return VehicleMileageItems.Sum(i => i.GasPurchased); } + } + + public int TripCount + { + get { return VehicleMileageItems.Sum(i => i.LogPairs.Count()); } + } } } \ No newline at end of file diff --git a/Web/ViewModels/DriverMileageViewModel.cs b/Web/ViewModels/DriverMileageViewModel.cs index 4852201..cea6f63 100644 --- a/Web/ViewModels/DriverMileageViewModel.cs +++ b/Web/ViewModels/DriverMileageViewModel.cs @@ -10,6 +10,7 @@ namespace MileageTraker.Web.ViewModels public LogQueryViewModel Query { get; set; } public int TotalMiles { get { return Items.Sum(i => i.Miles); } } + public int TotalTrips { get { return Items.Sum(i => i.TripCount); } } public double TotalGasPurchased { get { return Items.Sum(i => i.GasPurchased); } } public DriverMileageViewModel(IEnumerable items, LogQueryViewModel query) diff --git a/Web/ViewModels/Vehicle/VehicleMileageItem.cs b/Web/ViewModels/Vehicle/VehicleMileageItem.cs index 7a0f680..a98655b 100644 --- a/Web/ViewModels/Vehicle/VehicleMileageItem.cs +++ b/Web/ViewModels/Vehicle/VehicleMileageItem.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; namespace MileageTraker.Web.ViewModels.Vehicle { @@ -10,5 +12,8 @@ namespace MileageTraker.Web.ViewModels.Vehicle public double GasPurchased { get; set; } public string Prog { get; set; } public IEnumerable> LogPairs { get; set; } + public int TripCount { get { return LogPairs.Count(); } } + [DisplayFormat(DataFormatString = "{0:0.000}")] + public double MilesPerGallon { get { return GasPurchased == 0 || Miles == 0 ? 0 : Miles / GasPurchased; } } } } \ No newline at end of file diff --git a/Web/Views/Log/MonthlyDriverMileage.cshtml b/Web/Views/Log/MonthlyDriverMileage.cshtml index a6cc4b2..08170f7 100644 --- a/Web/Views/Log/MonthlyDriverMileage.cshtml +++ b/Web/Views/Log/MonthlyDriverMileage.cshtml @@ -56,10 +56,10 @@ @Html.DisplayTextFor(i => vehicleItem.VehicleId) - @Html.DisplayTextFor(i => vehicleItem.Prog) + (@Html.DisplayTextFor(i => vehicleItem.Prog)) - + @Html.DisplayTextFor(i => vehicleItem.TripCount) lp.Item1 == null)){ @:class="ui-state-error" @@ -76,18 +76,33 @@ - Total: + + Total: + - @Html.DisplayTextFor(i => item.TripCount) + + @Html.DisplayTextFor(i => item.TripCount) + - @Html.DisplayTextFor(i => item.Miles) + + @Html.DisplayTextFor(i => item.Miles) + - @Html.DisplayTextFor(i => item.GasPurchased) + + @Html.DisplayTextFor(i => item.GasPurchased) + } - Grand Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased) + + + Grand Total: + @Html.DisplayTextFor(m => m.TotalTrips) + @Html.DisplayTextFor(m => m.TotalMiles) + @Html.DisplayTextFor(m => m.TotalGasPurchased) + + diff --git a/Web/Views/Log/MonthlyVehicleMileage.cshtml b/Web/Views/Log/MonthlyVehicleMileage.cshtml index a0bfbd7..0541b42 100644 --- a/Web/Views/Log/MonthlyVehicleMileage.cshtml +++ b/Web/Views/Log/MonthlyVehicleMileage.cshtml @@ -41,6 +41,9 @@ Total Gas Purchased + + Miles Per Gallon + @foreach (var item in Model.Items) { @@ -60,7 +63,15 @@ @Html.DisplayTextFor(i => item.GasPurchased) + @(item.MilesPerGallon > 0 ? string.Format("{0:0.000}", item.MilesPerGallon) : "") } - Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased) + + + Total: + @Html.DisplayTextFor(m => m.TotalMiles) + @Html.DisplayTextFor(m => m.TotalGasPurchased) + + + \ No newline at end of file