From 1fb8c540763f408b2615f288b0ca5cd493aee604 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Fri, 23 Oct 2015 21:40:52 -0400 Subject: [PATCH] Driver Mileage export --- Web/Controllers/LogController.cs | 20 ++++++++++++---- .../DriverMileageFlattenedViewModel.cs | 23 +++++++++++++++++++ Web/ViewModels/DriverMileageItem.cs | 5 ++++ Web/ViewModels/DriverMileageViewModel.cs | 5 ++++ Web/Views/Log/DriverMileageReport.cshtml | 4 ++++ Web/Views/Log/VehicleMileageReport.cshtml | 2 +- Web/Web.csproj | 1 + 7 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 Web/ViewModels/DriverMileageFlattenedViewModel.cs diff --git a/Web/Controllers/LogController.cs b/Web/Controllers/LogController.cs index fab7920..10169e8 100644 --- a/Web/Controllers/LogController.cs +++ b/Web/Controllers/LogController.cs @@ -76,13 +76,11 @@ namespace MileageTraker.Web.Controllers return View(report); } - public ActionResult ExportMonthlyVehicleMileage(LogQueryViewModel query) + public ActionResult ExportVehicleMileageReport(LogQueryViewModel query) { var items = DataService.GetMonthlyVehicleMileageItems(query); - //var report = new VehicleMileageViewModel(items, query); - - var name = string.Format("MonthlyVehicleMileage_{0}", query); + var name = string.Format("VehicleMileageReport_{0}", query); var export = ExcelWriter.WriteXls(items, name, name); @@ -99,6 +97,20 @@ namespace MileageTraker.Web.Controllers return View(report); } + public ActionResult ExportDriverMileageReport(LogQueryViewModel query) + { + var items = DataService.GetMonthlyDriverMileageItems(query); + items = items.OrderBy(i => i.DriverName); + var report = new DriverMileageViewModel(items, query); + var flattenedReport = report.Flatten(); + + var name = string.Format("DriverMileageReport_{0}", query); + + var export = ExcelWriter.WriteXls(flattenedReport, name, name); + + return File(export, "application/ms-excel", name + ".xls"); + } + public ViewResult Details(int id) { var log = DataService.GetLog(id); diff --git a/Web/ViewModels/DriverMileageFlattenedViewModel.cs b/Web/ViewModels/DriverMileageFlattenedViewModel.cs new file mode 100644 index 0000000..0cbd641 --- /dev/null +++ b/Web/ViewModels/DriverMileageFlattenedViewModel.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using AutoMapper; +using MileageTraker.Web.ViewModels.Vehicle; + +namespace MileageTraker.Web.ViewModels +{ + public class DriverMileageFlattenedViewModel : VehicleMileageItem + { + [Display(Name = "Driver Name")] + public string DriverName { get; set; } + + static DriverMileageFlattenedViewModel() + { + Mapper.CreateMap(); + } + + public DriverMileageFlattenedViewModel(VehicleMileageItem vehicleMileage, string driverName) + { + Mapper.Map(vehicleMileage, this); + DriverName = driverName; + } + } +} \ No newline at end of file diff --git a/Web/ViewModels/DriverMileageItem.cs b/Web/ViewModels/DriverMileageItem.cs index e83c3ae..1d76e16 100644 --- a/Web/ViewModels/DriverMileageItem.cs +++ b/Web/ViewModels/DriverMileageItem.cs @@ -23,5 +23,10 @@ namespace MileageTraker.Web.ViewModels { get { return VehicleMileageItems.Sum(i => i.TripCount); } } + + public IEnumerable Flatten() + { + return VehicleMileageItems.Select(v => new DriverMileageFlattenedViewModel(v, DriverName)); + } } } \ No newline at end of file diff --git a/Web/ViewModels/DriverMileageViewModel.cs b/Web/ViewModels/DriverMileageViewModel.cs index cea6f63..d4ef0c6 100644 --- a/Web/ViewModels/DriverMileageViewModel.cs +++ b/Web/ViewModels/DriverMileageViewModel.cs @@ -18,5 +18,10 @@ namespace MileageTraker.Web.ViewModels Items = items; Query = query; } + + public IEnumerable Flatten() + { + return Items.SelectMany(i => i.Flatten()); + } } } \ No newline at end of file diff --git a/Web/Views/Log/DriverMileageReport.cshtml b/Web/Views/Log/DriverMileageReport.cshtml index 5a147e6..7144ea8 100644 --- a/Web/Views/Log/DriverMileageReport.cshtml +++ b/Web/Views/Log/DriverMileageReport.cshtml @@ -9,6 +9,10 @@

@ViewBag.Title

+
+ @Html.ActionLink("Export", "ExportDriverMileageReport", Model.Query, new { @class = "btn" }) +
+ @Html.DisplayFor(m => m.Query) diff --git a/Web/Views/Log/VehicleMileageReport.cshtml b/Web/Views/Log/VehicleMileageReport.cshtml index 7b1230d..a15caf9 100644 --- a/Web/Views/Log/VehicleMileageReport.cshtml +++ b/Web/Views/Log/VehicleMileageReport.cshtml @@ -10,7 +10,7 @@

@ViewBag.Title

- @Html.ActionLink("Export", "ExportMonthlyVehicleMileage", Model.Query, new { @class = "btn" }) + @Html.ActionLink("Export", "ExportVehicleMileageReport", Model.Query, new { @class = "btn" })
@Html.DisplayFor(m => m.Query) diff --git a/Web/Web.csproj b/Web/Web.csproj index b55f6dc..1432900 100644 --- a/Web/Web.csproj +++ b/Web/Web.csproj @@ -146,6 +146,7 @@ +