diff --git a/Web/Controllers/LogController.cs b/Web/Controllers/LogController.cs index e01cfe9..a8615ab 100644 --- a/Web/Controllers/LogController.cs +++ b/Web/Controllers/LogController.cs @@ -78,7 +78,7 @@ namespace MileageTraker.Web.Controllers public ActionResult MonthlyDriverMileage(LogQueryViewModel query) { - var items = DataService.GetMonthlyEmployeeMileageItems(query); + var items = DataService.GetMonthlyDriverMileageItems(query); var report = new DriverMileageViewModel(items, query); diff --git a/Web/DAL/DataService.cs b/Web/DAL/DataService.cs index 6c955c2..7d0694d 100644 --- a/Web/DAL/DataService.cs +++ b/Web/DAL/DataService.cs @@ -188,15 +188,14 @@ namespace MileageTraker.Web.DAL }); } - public IEnumerable GetMonthlyEmployeeMileageItems(LogQueryViewModel query) + public IEnumerable GetMonthlyDriverMileageItems(LogQueryViewModel query) { var items = from l in from log in FilterLogs(_db.Logs, query) let previousLog = log.VehiclePreviousLog select new { log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0) } - group l by l.log.User - into g + 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 @@ -204,22 +203,53 @@ namespace MileageTraker.Web.DAL 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 + from vehicle in _db.Vehicles + where vehicle.VehicleId == v.Key + let vehicleProg = vehicle.Prog + let vehicleMiles = v.Sum(l => l.miles) + let vehicleGasPurchased = v.Sum(l => l.log.GasPurchased) + where miles > 0 || gasPurchased > 0 + let vehicleLogPairs = + from i in v + orderby i.log.Date descending, i.log.EndOdometer descending + select new { PreviousLog = i.previousLog, Log = i.log } + select new + { + VehicleId = v.Key, + Prog = vehicleProg, + Miles = vehicleMiles, + GasPurchased = vehicleGasPurchased, + LogPairs = vehicleLogPairs + } select new { User = g.Key, GasPurchased = gasPurchased, Miles = miles, - LogPairs = logPairs + LogPairs = logPairs, + VehicleLogs = vehicleLogs }; - return items.ToList().Select(i => new EmployeeMileageItem + return items.ToList().Select(i => new DriverMileageItem { - EmployeeName = i.User.FullName, + DriverName = i.User.FullName, GasPurchased = i.GasPurchased, Miles = i.Miles, LogPairs = i.LogPairs.ToList() - .Select(lp => new Tuple(lp.PreviousLog, lp.Log)) + .Select(lp => new Tuple(lp.PreviousLog, lp.Log)), + VehicleMileageItems = i.VehicleLogs.ToList().Select(v => new VehicleMileageItem + { + VehicleId = v.VehicleId, + Prog = v.Prog, + Miles = v.Miles, + GasPurchased = v.GasPurchased, + LogPairs = v.LogPairs.ToList() + .Select(lp => new Tuple(lp.PreviousLog, lp.Log)) + }).ToList() }); } diff --git a/Web/ViewModels/EmployeeMileageItem.cs b/Web/ViewModels/DriverMileageItem.cs similarity index 63% rename from Web/ViewModels/EmployeeMileageItem.cs rename to Web/ViewModels/DriverMileageItem.cs index 5c7810d..5c69118 100644 --- a/Web/ViewModels/EmployeeMileageItem.cs +++ b/Web/ViewModels/DriverMileageItem.cs @@ -1,15 +1,17 @@ using System; using System.Collections.Generic; using System.Linq; +using MileageTraker.Web.ViewModels.Vehicle; namespace MileageTraker.Web.ViewModels { - public class EmployeeMileageItem + public class DriverMileageItem { - public string EmployeeName { get; set; } + 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(); } } } } \ No newline at end of file diff --git a/Web/ViewModels/DriverMileageViewModel.cs b/Web/ViewModels/DriverMileageViewModel.cs index 3cb59ad..4852201 100644 --- a/Web/ViewModels/DriverMileageViewModel.cs +++ b/Web/ViewModels/DriverMileageViewModel.cs @@ -6,13 +6,13 @@ namespace MileageTraker.Web.ViewModels { public class DriverMileageViewModel { - public IEnumerable Items { get; set; } + public IEnumerable Items { get; set; } public LogQueryViewModel Query { get; set; } public int TotalMiles { get { return Items.Sum(i => i.Miles); } } public double TotalGasPurchased { get { return Items.Sum(i => i.GasPurchased); } } - public DriverMileageViewModel(IEnumerable items, LogQueryViewModel query) + public DriverMileageViewModel(IEnumerable items, LogQueryViewModel query) { Items = items; Query = query; diff --git a/Web/ViewModels/Log/LogIndexViewModel.cs b/Web/ViewModels/Log/LogIndexViewModel.cs index f786f30..2ee1cc0 100644 --- a/Web/ViewModels/Log/LogIndexViewModel.cs +++ b/Web/ViewModels/Log/LogIndexViewModel.cs @@ -19,8 +19,6 @@ namespace MileageTraker.Web.ViewModels.Log public string CityName { get; set; } - //public string EmployeeName { get; set; } - public virtual Models.User User { get; set; } public double GasPurchased { get; set; } diff --git a/Web/ViewModels/Log/LogPartialDetails.cs b/Web/ViewModels/Log/LogPartialDetails.cs index 6f044ad..c7b4236 100644 --- a/Web/ViewModels/Log/LogPartialDetails.cs +++ b/Web/ViewModels/Log/LogPartialDetails.cs @@ -22,8 +22,8 @@ namespace MileageTraker.Web.ViewModels.Log public string CityName { get; set; } - [Display(Name = "Employee / Driver")] - public string EmployeeName { get; set; } + [Display(Name = "Driver")] + public string UserFullName { get; set; } [DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)] public double GasPurchased { get; set; } diff --git a/Web/ViewModels/Vehicle/VehicleMileageItem.cs b/Web/ViewModels/Vehicle/VehicleMileageItem.cs index e226d54..7a0f680 100644 --- a/Web/ViewModels/Vehicle/VehicleMileageItem.cs +++ b/Web/ViewModels/Vehicle/VehicleMileageItem.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using System.Collections.Generic; namespace MileageTraker.Web.ViewModels.Vehicle @@ -11,6 +10,5 @@ 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(); } } } } \ No newline at end of file diff --git a/Web/Views/Log/MonthlyDriverMileage.cshtml b/Web/Views/Log/MonthlyDriverMileage.cshtml index 4433d5c..a6cc4b2 100644 --- a/Web/Views/Log/MonthlyDriverMileage.cshtml +++ b/Web/Views/Log/MonthlyDriverMileage.cshtml @@ -29,9 +29,12 @@ - + + @@ -45,22 +48,46 @@ @foreach (var item in Model.Items) { - + + + foreach (var vehicleItem in item.VehicleMileageItems) + { + + + + + + + + + } + + + - } - +
- Driver - + Driver + + Vehicle + Trips
- @Html.DisplayTextFor(i => item.EmployeeName) - @Html.DisplayTextFor(i => item.DriverName)
+ @Html.DisplayTextFor(i => vehicleItem.VehicleId) + @Html.DisplayTextFor(i => vehicleItem.Prog) + + + lp.Item1 == null)){ + @:class="ui-state-error" + }> + @Html.DisplayTextFor(i => vehicleItem.Miles) + @Html.Partial("LogsSummary", vehicleItem.LogPairs) + + @Html.DisplayTextFor(i => vehicleItem.GasPurchased) +
+ Total: + @Html.DisplayTextFor(i => item.TripCount) lp.Item1 == null)){ - @:class="ui-state-error" - }> - @Html.DisplayTextFor(i => item.Miles) - @Html.Partial("LogsSummary", item.LogPairs) + + @Html.DisplayTextFor(i => item.Miles) @Html.DisplayTextFor(i => item.GasPurchased)
Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased)
Grand Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased)
diff --git a/Web/Web.csproj b/Web/Web.csproj index 95f9948..0b8bd88 100644 --- a/Web/Web.csproj +++ b/Web/Web.csproj @@ -166,7 +166,7 @@ - +