Update existing reports, removing mileage drill down

This commit is contained in:
2015-10-23 12:13:09 -04:00
parent 25fb070701
commit 7933632cfb
8 changed files with 98 additions and 61 deletions
+13
View File
@@ -76,6 +76,19 @@ namespace MileageTraker.Web.Controllers
return View(report);
}
public ActionResult ExportMonthlyVehicleMileage(LogQueryViewModel query)
{
var items = DataService.GetMonthlyVehicleMileageItems(query);
//var report = new VehicleMileageViewModel(items, query);
var name = string.Format("MonthlyVehicleMileage_{0}", query);
var export = ExcelWriter<VehicleMileageItem>.WriteXls(items, name, name);
return File(export, "application/ms-excel", name + ".xls");
}
public ActionResult MonthlyDriverMileage(LogQueryViewModel query)
{
var items = DataService.GetMonthlyDriverMileageItems(query);
+4 -16
View File
@@ -169,10 +169,6 @@ namespace MileageTraker.Web.DAL
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 }
select
new
{
@@ -180,7 +176,7 @@ namespace MileageTraker.Web.DAL
GasPurchased = gasPurchased,
Miles = miles,
g.Key.Prog,
LogPairs = logPairs
TripCount = g.Count()
};
return items.ToList().Select(i => new VehicleMileageItem
@@ -189,8 +185,7 @@ namespace MileageTraker.Web.DAL
GasPurchased = i.GasPurchased,
Miles = i.Miles,
Prog = i.Prog,
LogPairs = i.LogPairs.ToList()
.Select(lp => new Tuple<Log,Log>(lp.PreviousLog, lp.Log))
TripCount = i.TripCount
});
}
@@ -206,23 +201,17 @@ namespace MileageTraker.Web.DAL
from i in g
group i by i.log.Vehicle into v
let vehicle = v.Key
//from vehicle in _db.Vehicles
//where vehicle.VehicleId == v.Key.VehicleId
let vehicleProg = vehicle.Prog
let vehicleMiles = v.Sum(l => l.miles)
let vehicleGasPurchased = v.Sum(l => l.log.GasPurchased)
where vehicleMiles > 0 || vehicleGasPurchased > 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
{
v.Key.VehicleId,
Prog = vehicleProg,
Miles = vehicleMiles,
GasPurchased = vehicleGasPurchased,
LogPairs = vehicleLogPairs
TripCount = v.Count()
}
select
new
@@ -240,8 +229,7 @@ namespace MileageTraker.Web.DAL
Prog = v.Prog,
Miles = v.Miles,
GasPurchased = v.GasPurchased,
LogPairs = v.LogPairs.ToList()
.Select(lp => new Tuple<Log, Log>(lp.PreviousLog, lp.Log))
TripCount = v.TripCount
}).ToList()
});
}
+44 -7
View File
@@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.SqlTypes;
@@ -143,21 +144,38 @@ namespace MileageTraker.Web.Utility
: propertyMember.Name;
}
public static object GetValue(this PropertyInfo propertyMember, object obj)
public static string GetNullDisplayText(this PropertyInfo propertyMember, object obj)
{
var value = propertyMember.GetValue(obj, null);
var displayAttr =
propertyMember.GetCustomAttributes(typeof (DisplayFormatAttribute), true).FirstOrDefault() as DisplayFormatAttribute;
var displayAttr = GetDisplayAttribute(propertyMember);
if (displayAttr != null)
{
if (value == null && !String.IsNullOrEmpty(displayAttr.NullDisplayText))
return displayAttr.NullDisplayText;
if (!String.IsNullOrEmpty(displayAttr.DataFormatString))
return String.Format(displayAttr.DataFormatString, value);
}
return value;
return null;
}
public static string GetDataFormatString(this PropertyInfo propertyMember, object obj)
{
var value = propertyMember.GetValue(obj, null);
var displayAttr = GetDisplayAttribute(propertyMember);
if (displayAttr != null)
{
if (!String.IsNullOrEmpty(displayAttr.DataFormatString))
return displayAttr.DataFormatString;
}
return null;
}
private static DisplayFormatAttribute GetDisplayAttribute(PropertyInfo propertyMember)
{
var displayAttr =
propertyMember.GetCustomAttributes(typeof (DisplayFormatAttribute), true).FirstOrDefault() as DisplayFormatAttribute;
return displayAttr;
}
public static IEnumerable<string> GetPropertyNames(this Type type)
@@ -293,6 +311,25 @@ namespace MileageTraker.Web.Utility
select mg.Key).ToList()
}).ToDictionary(arg => arg.Item1, arg => arg.Item2List);
}
public static bool IsNonStringEnumerable(this Type type)
{
if (type == null || type == typeof(string))
return false;
return typeof(IEnumerable).IsAssignableFrom(type);
}
public static bool IsHiddenFromModel(this MemberInfo propertyMember)
{
var hiddenInputAttribute =
propertyMember.GetCustomAttributes(typeof(HiddenInputAttribute), true).FirstOrDefault() as HiddenInputAttribute;
if (hiddenInputAttribute != null)
{
return !hiddenInputAttribute.DisplayValue;
}
return false;
}
//public static IEnumerable<SelectListItem> ToSelectList<T>(
// this IEnumerable<T> enumerable,
+26 -22
View File
@@ -38,7 +38,8 @@ namespace MileageTraker.Web.Utility
{
return
typeof (T).GetProperties()
.Where(p => !p.PropertyType.IsCollection())
.Where(p => !p.PropertyType.IsNonStringEnumerable())
.Where(p => !p.IsHiddenFromModel())
.Where(p => !p.Name.Contains("PreviousLog"))
.ToList();
}
@@ -92,36 +93,39 @@ namespace MileageTraker.Web.Utility
(item, r) =>
GetProperties().Zip(CustomExtensions.GetNumbers().Skip(startCol),
(p, c) => {
var value = p.GetValue(item);
var value = p.GetValue(item);
string formatString = null;
string formatString = null;
if (value is decimal) // assume that it's currency
formatString = "#,##0.00";
if (value is decimal) // assume that it's currency
formatString = "#,##0.00";
if (value is DateTime && p.Name == "Date")
formatString = @"MM/DD/YYYY";
else if (value is DateTime)
formatString = @"MM/DD/YYYY hh:mm:ss";
if (value is DateTime && p.Name.Contains("Date"))
formatString = @"MM/DD/YYYY";
else if (value is DateTime)
formatString = @"MM/DD/YYYY hh:mm:ss";
if (p.Name == "GasPurchased") // format to the .000 place
formatString = "#,##0.000";
if (p.Name == "GasPurchased") // format to the .000 place
formatString = "#,##0.000";
int intValue; // write int-looking values as numbers
if (value is string && int.TryParse((string) value, out intValue))
value = intValue;
int intValue; // write int-looking values as numbers
if (value is string && int.TryParse((string) value, out intValue))
value = intValue;
double doubleValue; // write double-looking values as numbers
if (value is string && double.TryParse((string) value, out doubleValue))
value = doubleValue;
double doubleValue; // write double-looking values as numbers
if (value is string && double.TryParse((string) value, out doubleValue))
value = doubleValue;
if (value is MileageLogTypeWrapper)
value = ((MileageLogTypeWrapper) value).Enum.GetDisplayName();
if (value is MileageLogTypeWrapper)
value = ((MileageLogTypeWrapper) value).Enum.GetDisplayName();
var cell = formatString != null ? new Cell(value, formatString) : new Cell(value);
worksheet.Cells[r, c] = cell;
if (value == null)
value = p.GetNullDisplayText(item);
return (string) null;
var cell = formatString != null ? new Cell(value, formatString) : new Cell(value);
worksheet.Cells[r, c] = cell;
return (string) null;
}).ToList()).ToList();
}
+1 -1
View File
@@ -21,7 +21,7 @@ namespace MileageTraker.Web.ViewModels
public int TripCount
{
get { return VehicleMileageItems.Sum(i => i.LogPairs.Count()); }
get { return VehicleMileageItems.Sum(i => i.TripCount); }
}
}
}
+1 -5
View File
@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace MileageTraker.Web.ViewModels.Vehicle
{
@@ -11,8 +8,7 @@ namespace MileageTraker.Web.ViewModels.Vehicle
public int Miles { get; set; }
public double GasPurchased { get; set; }
public string Prog { get; set; }
public IEnumerable<Tuple<Models.Log, Models.Log>> LogPairs { get; set; }
public int TripCount { get { return LogPairs.Count(); } }
public int TripCount { get; set; }
[DisplayFormat(DataFormatString = "{0:0.000}")]
public double MilesPerGallon { get { return GasPurchased == 0 || Miles == 0 ? 0 : Miles / GasPurchased; } }
}
+2 -5
View File
@@ -45,11 +45,8 @@
<td>
@Html.DisplayTextFor(i => vehicleItem.TripCount)
</td>
<td @if (vehicleItem.LogPairs.Any(lp => lp.Item1 == null)){
@:class="ui-state-error"
}>
<span class="report-miles">@Html.DisplayTextFor(i => vehicleItem.Miles)</span>
@Html.Partial("LogsSummary", vehicleItem.LogPairs)
<td>
@Html.DisplayTextFor(i => vehicleItem.Miles)
</td>
<td>
@Html.DisplayTextFor(i => vehicleItem.GasPurchased)
+7 -5
View File
@@ -1,6 +1,7 @@
@model MileageTraker.Web.ViewModels.Vehicle.VehicleMileageViewModel
@{
ViewBag.Title = "Vehicle Mileage Report";
var queryParams = new { Model.Query.Year, Model.Query.Month, Model.Query.LogType, Model.Query.MonthRange, Model.Query.VehicleId, Model.Query.EmployeeName };
}
@{ Html.RenderPartial("BackToLogs"); }
@@ -9,6 +10,10 @@
<h2><i class="fa fa-road"></i> @ViewBag.Title</h2>
<div class="btn-toolbar clearfix">
@Html.ActionLink("Export", "ExportMonthlyVehicleMileage", Model.Query, new { @class = "btn" })
</div>
@Html.DisplayFor(m => m.Query)
<table class="table">
@@ -38,11 +43,8 @@
<td>
@Html.DisplayTextFor(i => item.Prog)
</td>
<td @if (item.LogPairs.Any(lp => lp.Item1 == null)){
@:class="ui-state-error"
}>
<span class="report-miles">@Html.DisplayTextFor(i => item.Miles) </span>
@Html.Partial("LogsSummary", item.LogPairs)
<td>
@Html.DisplayTextFor(i => item.Miles)
</td>
<td>
@Html.DisplayTextFor(i => item.GasPurchased)